Ci8qIHBuZ2djY3JkLmMgLSBtaXhlZCBDL2Fzc2VtYmxlciB2ZXJzaW9uIG9mIHV0aWxpdGllcyB0byByZWFkIGEgUE5HIGZpbGUKICoKICogRm9yIEludGVsIHg4NiBDUFUgKFBlbnRpdW0tTU1YIG9yIGxhdGVyKSBhbmQgR05VIEMgY29tcGlsZXIuCiAqCiAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEp1bmUgMjMsIDIwMDcKICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAqIENvcHlyaWdodCAoYykgMTk5OCBJbnRlbCBDb3Jwb3JhdGlvbgogKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiwyMDA3IEdyZWcgUm9lbG9mcwogKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICoKICogQmFzZWQgb24gTVNWQyBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE5pcmF2IENoaGF0cmFwYXRpLCBJbnRlbCBDb3JwLiwgMTk5OC4KICogSW50ZXJmYWNlIHRvIGxpYnBuZyBjb250cmlidXRlZCBieSBHaWxsZXMgVm9sbGFudCwgMTk5OS4KICogR05VIEMgcG9ydCBieSBHcmVnIFJvZWxvZnMsIDE5OTktMjAwMS4KICoKICogUmVmZXJlbmNlczoKICoKICogICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTE2LzkxNi5odG0KICogICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTIzLzkyMy5odG0KICogICAgICAgW0ludGVsJ3MgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgdGhlIE1NWCB2cy4gbm9uLU1NWCBjb2RlOwogKiAgICAgICAgbW92ZWQvZGVsZXRlZCBhcyBvZiAyMDA2LCBidXQgdGV4dCBhbmQgc29tZSBncmFwaHMgc3RpbGwKICogICAgICAgIGF2YWlsYWJsZSB2aWEgV2F5QmFjayBNYWNoaW5lIGF0IGFyY2hpdmUub3JnXQogKgogKiAgICAgaHR0cDovL3d3dy5pYmlibGlvLm9yZy9nZmVyZy9sZHAvR0NDLUlubGluZS1Bc3NlbWJseS1IT1dUTy5odG1sCiAqICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKICogICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9WYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwKICogICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9GdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwKICogICAgIEFNRCB4ODYtNjQgQXJjaGl0ZWN0dXJlIFByb2dyYW1tZXIncyBNYW51YWwsIHZvbHVtZXMgMSBhbmQgNQogKgogKiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF8qKCkgd2VyZSBjb252ZXJ0ZWQgaW4gcGxhY2Ugd2l0aCBpbnRlbDJnYXMgMS4zLjE6CiAqCiAqICAgICBpbnRlbDJnYXMgLW1kSSBwbmdnY2NyZC5jLnBhcnRpYWxseS1tc3ZjIC1vIHBuZ2djY3JkLmMKICoKICogYW5kIHRoZW4gY2xlYW5lZCB1cCBieSBoYW5kLiAgU2VlIGh0dHA6Ly9oZXJtZXMudGVybWluYWwuYXQvaW50ZWwyZ2FzLyAuCiAqCiAqIE5PVEU6ICBBIHN1ZmZpY2llbnRseSByZWNlbnQgdmVyc2lvbiBvZiBHTlUgYXMgKG9yIGFzLmV4ZSB1bmRlciBET1MvV2luZG93cykKICogaXMgcmVxdWlyZWQgdG8gYXNzZW1ibGUgdGhlIG5ld2VyIGFzbSBpbnN0cnVjdGlvbnMgc3VjaCBhcyBtb3ZxLiAgKFZlcnNpb24KICogMi41LjJsLjE1IGlzIGRlZmluaXRlbHkgdG9vIG9sZC4pICBTZWUgZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9iaW51dGlscy8gLgogKi8KCi8qCiAqIFBPUlRJTkcgTk9URVMgQU5EIENIQU5HRUxPRyAobW9zdGx5IGJ5IEdyZWcgUm9lbG9mcykKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAqIDE5OTkxMDA2OgogKiAgLSBmaXhlZCBzaWduIGVycm9yIGluIHBvc3QtTU1YIGNsZWFudXAgY29kZSAoMTYtICYgMzItYml0IGNhc2VzKQogKgogKiAxOTk5MTAwNzoKICogIC0gYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIChwb3NzaWJsZSBvciBkZWZpbml0ZSk6CiAqICAgICB4IFtET05FXSB3cml0ZSBNTVggY29kZSBmb3IgNjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDgpIFtub3QgdGVzdGVkXQogKiAgICAgLSB3cml0ZSBNTVggY29kZSBmb3IgNDgtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDYpCiAqICAgICAtIGZpZ3VyZSBvdXQgd2hhdCdzIHVwIHdpdGggMjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDMpOgogKiAgICAgICAgd2h5IHN1YnRyYWN0IDggZnJvbSB3aWR0aF9tbXggaW4gdGhlIHBhc3MgNC81IGNhc2U/CiAqICAgICAgICAob25seSB3aWR0aF9tbXggY2FzZSkgKG5lYXIgbGluZSAxNjA2KQogKiAgICAgeCBbRE9ORV0gcmVwbGFjZSBwaXhlbF9ieXRlcyB3aXRoaW4gZWFjaCBibG9jayB3aXRoIHRoZSB0cnVlCiAqICAgICAgICBjb25zdGFudCB2YWx1ZSAob3IgYXJlIGNvbXBpbGVycyBzbWFydCBlbm91Z2ggdG8gZG8gdGhhdD8pCiAqICAgICAtIHJld3JpdGUgYWxsIE1NWCBpbnRlcmxhY2luZyBjb2RlIHNvIGl0J3MgYWxpZ25lZCB3aXRoCiAqICAgICAgICB0aGUgKmJlZ2lubmluZyogb2YgdGhlIHJvdyBidWZmZXIsIG5vdCB0aGUgZW5kLiAgVGhpcwogKiAgICAgICAgd291bGQgbm90IG9ubHkgYWxsb3cgb25lIHRvIGVsaW1pbmF0ZSBoYWxmIG9mIHRoZSBtZW1vcnkKICogICAgICAgIHdyaXRlcyBmb3Igb2RkIHBhc3NlcyAodGhhdCBpcywgcGFzcyA9PSBvZGQpLCBpdCBtYXkgYWxzbwogKiAgICAgICAgZWxpbWluYXRlIHNvbWUgdW5hbGlnbmVkLWRhdGEtYWNjZXNzIGV4Y2VwdGlvbnMgKGFzc3VtaW5nCiAqICAgICAgICB0aGVyZSdzIGEgcGVuYWx0eSBmb3Igbm90IGFsaWduaW5nIDY0LWJpdCBhY2Nlc3NlcyBvbgogKiAgICAgICAgNjQtYml0IGJvdW5kYXJpZXMpLiAgVGhlIG9ubHkgY2F0Y2ggaXMgdGhhdCB0aGUgImxlZnRvdmVyIgogKiAgICAgICAgcGl4ZWwocykgYXQgdGhlIGVuZCBvZiB0aGUgcm93IHdvdWxkIGhhdmUgdG8gYmUgc2F2ZWQsCiAqICAgICAgICBidXQgdGhlcmUgYXJlIGVub3VnaCB1bnVzZWQgTU1YIHJlZ2lzdGVycyBpbiBldmVyeSBjYXNlLAogKiAgICAgICAgc28gdGhpcyBpcyBub3QgYSBwcm9ibGVtLiAgQSBmdXJ0aGVyIGJlbmVmaXQgaXMgdGhhdCB0aGUKICogICAgICAgIHBvc3QtTU1YIGNsZWFudXAgY29kZSAoQyBjb2RlKSBpbiBhdCBsZWFzdCBzb21lIG9mIHRoZQogKiAgICAgICAgY2FzZXMgY291bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGFzc2VtYmxlciBibG9jay4KICogIHggW0RPTkVdIHRoZSAidjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQiIGNvbW1lbnRzIGFyZSBjb25mdXNpbmcsCiAqICAgICBpbmNvbnNpc3RlbnQsIGFuZCBkb24ndCBtYXRjaCB0aGUgTU1YIFByb2dyYW1tZXIncyBSZWZlcmVuY2UKICogICAgIE1hbnVhbCBjb252ZW50aW9ucyBhbnl3YXkuICBUaGV5IHNob3VsZCBiZSBjaGFuZ2VkIHRvCiAqICAgICAiYjcgYjYgYjUgYjQgYjMgYjIgYjEgYjAsIiB3aGVyZSBiMCBpbmRpY2F0ZXMgdGhlIGJ5dGUgdGhhdAogKiAgICAgd2FzIGxvd2VzdCBpbiBtZW1vcnkgKGUuZy4sIGNvcnJlc3BvbmRpbmcgdG8gYSBsZWZ0IHBpeGVsKQogKiAgICAgYW5kIGI3IGlzIHRoZSBieXRlIHRoYXQgd2FzIGhpZ2hlc3QgKGUuZy4sIGEgcmlnaHQgcGl4ZWwpLgogKgogKiAxOTk5MTAxNjoKICogIC0gQnJlbm5hbidzIEd1aWRlIG5vdHdpdGhzdGFuZGluZywgZ2NjIHVuZGVyIExpbnV4IGRvZXMgKm5vdCoKICogICAgIHdhbnQgZ2xvYmFscyBwcmVmaXhlZCBieSB1bmRlcnNjb3JlcyB3aGVuIHJlZmVyZW5jaW5nIHRoZW0tLQogKiAgICAgaS5lLiwgaWYgdGhlIHZhcmlhYmxlIGlzIGNvbnN0NCwgdGhlbiByZWZlciB0byBpdCBhcyBjb25zdDQsCiAqICAgICBub3QgX2NvbnN0NC4gIFRoaXMgc2VlbXMgdG8gYmUgYSBkamdwcC1zcGVjaWZpYyByZXF1aXJlbWVudC4KICogICAgIEFsc28sIHN1Y2ggdmFyaWFibGVzIGFwcGFyZW50bHkgKm11c3QqIGJlIGRlY2xhcmVkIG91dHNpZGUKICogICAgIG9mIGZ1bmN0aW9uczsgbmVpdGhlciBzdGF0aWMgbm9yIGF1dG9tYXRpYyB2YXJpYWJsZXMgd29yayBpZgogKiAgICAgZGVmaW5lZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgc2luZ2xlIGZ1bmN0aW9uLCBidXQgYm90aAogKiAgICAgc3RhdGljIGFuZCB0cnVseSBnbG9iYWwgKG11bHRpLW1vZHVsZSkgdmFyaWFibGVzIHdvcmsgZmluZS4KICoKICogMTk5OTEwMjM6CiAqICAtIGZpeGVkIHBuZ19jb21iaW5lX3JvdygpIG5vbi1NTVggcmVwbGljYXRpb24gYnVnIChvZGQgcGFzc2VzIG9ubHk/KQogKiAgLSBzd2l0Y2hlZCBmcm9tIHN0cmluZy1jb25jYXRlbmF0aW9uLXdpdGgtbWFjcm9zIHRvIGNsZWFuZXIgbWV0aG9kIG9mCiAqICAgICByZW5hbWluZyBnbG9iYWwgdmFyaWFibGVzIGZvciBkamdwcC0taS5lLiwgYWx3YXlzIHVzZSBwcmVmaXhlcyBpbgogKiAgICAgaW5saW5lZCBhc3NlbWJsZXIgY29kZSAoPT0gc3RyaW5ncykgYW5kIGNvbmRpdGlvbmFsbHkgcmVuYW1lIHRoZQogKiAgICAgdmFyaWFibGVzLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuICBIZW5jZSBfY29uc3Q0LCBfbWFzazhfMCwgZXRjLgogKgogKiAxOTk5MTAyNDoKICogIC0gZml4ZWQgbW14c3VwcG9ydCgpL3BuZ19kb19yZWFkX2ludGVybGFjZSgpIGZpcnN0LXJvdyBidWcKICogICAgIFRoaXMgb25lIHdhcyBzZXZlcmVseSB3ZWlyZDogIGV2ZW4gdGhvdWdoIG1teHN1cHBvcnQoKSBkb2Vzbid0IHRvdWNoCiAqICAgICBlYnggKHdoZXJlICJyb3ciIHBvaW50ZXIgd2FzIHN0b3JlZCksIGl0IG5ldmVydGhlbGVzcyBtYW5hZ2VkIHRvIHplcm8KICogICAgIHRoZSByZWdpc3RlciAoZXZlbiBpbiBzdGF0aWMvbm9uLWZQSUMgY29kZS0tc2VlIGJlbG93KSwgd2hpY2ggaW4gdHVybgogKiAgICAgY2F1c2VkIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIHRvIHJldHVybiBwcmVtYXR1cmVseSBvbiB0aGUgZmlyc3Qgcm93IG9mCiAqICAgICBpbnRlcmxhY2VkIGltYWdlcyAoaS5lLiwgd2l0aG91dCBleHBhbmRpbmcgdGhlIGludGVybGFjZWQgcGl4ZWxzKS4KICogICAgIEluc3BlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBjb2RlIGRpZG4ndCB0dXJuIHVwIGFueSBjbHVlcywKICogICAgIGFsdGhvdWdoIGl0IGRpZCBwb2ludCBhdCBhIG1pbm9yIG9wdGltaXphdGlvbiAoaS5lLiwgZ2V0IHJpZCBvZgogKiAgICAgbW14X3N1cHBvcnRlZF9sb2NhbCB2YXJpYWJsZSBhbmQganVzdCB1c2UgZWF4KS4gIFBvc3NpYmx5IHRoZSBDUFVJRAogKiAgICAgaW5zdHJ1Y3Rpb24gaXMgbW9yZSBkZXN0cnVjdGl2ZSB0aGFuIGl0IGxvb2tzPyAgKE5vdCB5ZXQgY2hlY2tlZC4pCiAqICAtICJpbmZvIGdjYyIgd2FzIG5leHQgdG8gdXNlbGVzcywgc28gY29tcGFyZWQgZlBJQyBhbmQgbm9uLWZQSUMgYXNzZW1ibHkKICogICAgIGxpc3RpbmdzLi4uICBBcHBhcmVudGx5IHJlZ2lzdGVyIHNwaWxsYWdlIGhhcyB0byBkbyB3aXRoIGVieCwgc2luY2UKICogICAgIGl0J3MgdXNlZCB0byBpbmRleCB0aGUgZ2xvYmFsIG9mZnNldCB0YWJsZS4gIENvbW1lbnRpbmcgaXQgb3V0IG9mIHRoZQogKiAgICAgaW5wdXQtcmVnIGxpc3RzIGluIHBuZ19jb21iaW5lX3JvdygpIGVsaW1pbmF0ZWQgY29tcGlsZXIgYmFyZmFnZSwgc28KICogICAgIGlmZGVmJ2Qgd2l0aCBfX1BJQ19fIG1hY3JvOiAgaWYgZGVmaW5lZCwgdXNlIGEgZ2xvYmFsIGZvciB1bm1hc2sKICoKICogMTk5OTExMDc6CiAqICAtIHZlcmlmaWVkIENQVUlEIGNsb2JiZXJhZ2U6ICAxMi1jaGFyIHN0cmluZyBjb25zdGFudCAoIkdlbnVpbmVJbnRlbCIsCiAqICAgICAiQXV0aGVudGljQU1EIiwgZXRjLikgcGxhY2VkIGluIGVieDplY3g6ZWR4LiAgU3RpbGwgbmVlZCB0byBwb2xpc2guCiAqCiAqIDE5OTkxMTIwOgogKiAgLSBtYWRlICJkaWZmIiB2YXJpYWJsZSAobm93ICJfZGlmIikgZ2xvYmFsIHRvIHNpbXBsaWZ5IGNvbnZlcnNpb24gb2YKICogICAgIGZpbHRlcmluZyByb3V0aW5lcyAocnVubmluZyBvdXQgb2YgcmVncywgc2lnaCkuICAiZGlmZiIgaXMgc3RpbGwgdXNlZAogKiAgICAgaW4gaW50ZXJsYWNpbmcgcm91dGluZXMsIGhvd2V2ZXIuCiAqICAtIGZpeGVkIHVwIGJvdGggdmVyc2lvbnMgb2YgbW14c3VwcG9ydCgpIChPUklHX1RIQVRfVVNFRF9UT19DTE9CQkVSX0VCWAogKiAgICAgbWFjcm8gZGV0ZXJtaW5lcyB3aGljaCBpcyB1c2VkKTsgb3JpZ2luYWwgbm90IHlldCB0ZXN0ZWQuCiAqCiAqIDIwMDAwMjEzOgogKiAgLSB3aGVuIGNvbXBpbGluZyB3aXRoIGdjYywgYmUgc3VyZSB0byB1c2UgIC1mb21pdC1mcmFtZS1wb2ludGVyCiAqCiAqIDIwMDAwMzE5OgogKiAgLSBmaXhlZCBhIHJlZ2lzdGVyLW5hbWUgdHlwbyBpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSwgZGVmYXVsdCAoTU1YKSBjYXNlLAogKiAgICAgcGFzcyA9PSA0IG9yIDUsIHRoYXQgY2F1c2VkIHZpc2libGUgY29ycnVwdGlvbiBvZiBpbnRlcmxhY2VkIGltYWdlcwogKgogKiAyMDAwMDYyMzoKICogIC0gVmFyaW91cyBwcm9ibGVtcyB3ZXJlIHJlcG9ydGVkIHdpdGggZ2NjIDIuOTUuMiBpbiB0aGUgQ3lnd2luIGVudmlyb25tZW50LAogKiAgICAgbWFueSBvZiB0aGUgZm9ybSAiZm9yYmlkZGVuIHJlZ2lzdGVyIDAgKGF4KSB3YXMgc3BpbGxlZCBmb3IgY2xhc3MgQVJFRy4iCiAqICAgICBUaGlzIGlzIGV4cGxhaW5lZCBhdCBodHRwOi8vZ2NjLmdudS5vcmcvZm9tX3NlcnYvY2FjaGUvMjMuaHRtbCwgYW5kCiAqICAgICBDaHVjayBXaWxzb24gc3VwcGxpZWQgYSBwYXRjaCBpbnZvbHZpbmcgZHVtbXkgb3V0cHV0IHJlZ2lzdGVycy4gIFNlZQogKiAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9idWdzLz9mdW5jPWRldGFpbGJ1ZyZidWdfaWQ9MTA4NzQxJmdyb3VwX2lkPTU2MjQKICogICAgIGZvciB0aGUgb3JpZ2luYWwgKGFub255bW91cykgU291cmNlRm9yZ2UgYnVnIHJlcG9ydC4KICoKICogMjAwMDA3MDY6CiAqICAtIENodWNrIFdpbHNvbiBwYXNzZWQgYWxvbmcgdGhlc2UgcmVtYWluaW5nIGdjYyAyLjk1LjIgZXJyb3JzOgogKiAgICAgICBwbmdnY2NyZC5jOiBJbiBmdW5jdGlvbiBgcG5nX2NvbWJpbmVfcm93JzoKICogICAgICAgcG5nZ2NjcmQuYzo1MjU6IG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBpbiBgYXNtJwogKiAgICAgICBwbmdnY2NyZC5jOjY2OTogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCiAqICAgICAgIHBuZ2djY3JkLmM6ODI4OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgICAgcG5nZ2NjcmQuYzo5OTQ6IG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBpbiBgYXNtJwogKiAgICAgICBwbmdnY2NyZC5jOjExNzc6IG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBpbiBgYXNtJwogKiAgICAgVGhleSBhcmUgYWxsIHRoZSBzYW1lIHByb2JsZW0gYW5kIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IHVzaW5nIHRoZQogKiAgICAgZ2xvYmFsIF91bm1hc2sgdmFyaWFibGUgdW5jb25kaXRpb25hbGx5LCBub3QganVzdCBpbiB0aGUgLWZQSUMgY2FzZS4KICogICAgIFJlcG9ydGVkbHkgZWFybGllciB2ZXJzaW9ucyBvZiBnY2MgYWxzbyBoYXZlIHRoZSBwcm9ibGVtIHdpdGggbW9yZSB0aGFuCiAqICAgICAxMCBvcGVyYW5kczsgdGhleSBqdXN0IGRvbid0IHJlcG9ydCBpdC4gIE11Y2ggc3RyYW5nZW5lc3MgZW5zdWVzLCBldGMuCiAqCiAqIDIwMDAwNzI5OgogKiAgLSBlbmFibGVkIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3VwKCkgKHNob3J0ZXN0IHJlbWFpbmluZyB1bmNvbnZlcnRlZAogKiAgICAgTU1YIHJvdXRpbmUpOyBiZWdhbiBjb252ZXJ0aW5nIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpCiAqICAtIHRvIGZpbmlzaCByZW1haW5pbmcgc2VjdGlvbnM6CiAqICAgICAtIGNsZWFuIHVwIGluZGVudGF0aW9uIGFuZCBjb21tZW50cwogKiAgICAgLSBwcmVsb2FkIGxvY2FsIHZhcmlhYmxlcwogKiAgICAgLSBhZGQgb3V0cHV0IGFuZCBpbnB1dCByZWdzIChvcmRlciBvZiBmb3JtZXIgZGV0ZXJtaW5lcyBudW1lcmljYWwKICogICAgICAgIG1hcHBpbmcgb2YgbGF0dGVyKQogKiAgICAgLSBhdm9pZCBhbGwgdXNhZ2Ugb2YgZWJ4IChpbmNsdWRpbmcgYngsIGJoLCBibCkgcmVnaXN0ZXIgWzIwMDAwODIzXQogKiAgICAgLSByZW1vdmUgIiQiIGZyb20gYWRkcmVzc2luZyBvZiBTaGlmdCBhbmQgTWFzayB2YXJpYWJsZXMgWzIwMDAwODIzXQogKgogKiAyMDAwMDczMToKICogIC0gZ2xvYmFsIHVuaW9uIHZhcnMgY2F1c2luZyBzZWdmYXVsdHMgaW4gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCk/CiAqCiAqIDIwMDAwODIyOgogKiAgLSBBUkdILCBzdHVwaWQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgc2VnZmF1bHQgb25seSBoYXBwZW5zIHdpdGgKICogICAgIHNoYXJlZC1saWJyYXJ5ICgtZlBJQykgdmVyc2lvbiEgIENvZGUgd29ya3MganVzdCBmaW5lIGFzIHBhcnQgb2Ygc3RhdGljCiAqICAgICBsaWJyYXJ5LiAgRGFtbiBkYW1uIGRhbW4gZGFtbiBkYW1uLCBzaG91bGQgaGF2ZSB0ZXN0ZWQgdGhhdCBzb29uZXIuCiAqICAgICBlYnggaXMgZ2V0dGluZyBjbG9iYmVyZWQgYWdhaW4gKGV4cGxpY2l0bHkgdGhpcyB0aW1lKTsgbmVlZCB0byBzYXZlIGl0CiAqICAgICBvbiBzdGFjayBvciByZXdyaXRlIGFzbSBjb2RlIHRvIGF2b2lkIHVzaW5nIGl0IGFsdG9nZXRoZXIuICBCbGFyZ2ghCiAqCiAqIDIwMDAwODIzOgogKiAgLSBmaXJzdCBzZWN0aW9uIHdhcyB0cmlja2llc3Q7IGFsbCByZW1haW5pbmcgc2VjdGlvbnMgaGF2ZSBlYnggLT4gZWR4IG5vdy4KICogICAgICgtZlBJQyB3b3JrcyBhZ2Fpbi4pICBBbHNvIGFkZGVkIG1pc3NpbmcgdW5kZXJzY29yZXMgdG8gdmFyaW91cyBTaGlmdCoKICogICAgIGFuZCAqTWFzayogZ2xvYmFscyBhbmQgZ290IHJpZCBvZiBsZWFkaW5nICIkIiBzaWducy4KICoKICogMjAwMDA4MjY6CiAqICAtIGFkZGVkIHZpc3VhbCBzZXBhcmF0b3JzIHRvIGhlbHAgbmF2aWdhdGUgbWljcm9zY29waWMgcHJpbnRlZCBjb3BpZXMKICogICAgIChodHRwOi8vcG9ib3guY29tL35uZXd0L2NvZGUvZ3ByLWxhdGVzdC56aXAsIG1vZGUgMTApOyBzdGFydGVkIHdvcmtpbmcKICogICAgIG9uIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpCiAqCiAqIDIwMDAwODI4OgogKiAgLSBmaW5pc2hlZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKTogIG9ubHkgUGFldGggbGVmdCEgKDkzMCBsaW5lcy4uLikKICogICAgIFdoYXQgdGhlIGhlbGwsIGRpZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpLCB0b28uICBDb21tZW50cyBub3QKICogICAgIGNsZWFuZWQgdXAvc2hvcnRlbmVkIGluIGVpdGhlciByb3V0aW5lLCBidXQgZnVuY3Rpb25hbGl0eSBpcyBjb21wbGV0ZQogKiAgICAgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgZmluZS4KICoKICogMjAwMDA4Mjk6CiAqICAtIGFoaGgsIGZpZ3VyZWQgb3V0IGxhc3QoPykgYml0IG9mIGdjYy9nYXMgYXNtLWZ1OiAgaWYgcmVnaXN0ZXIgaXMgbGlzdGVkCiAqICAgICBhcyBhbiBpbnB1dCByZWcgKHdpdGggZHVtbXkgb3V0cHV0IHZhcmlhYmxlcywgZXRjLiksIHRoZW4gaXQgKmNhbm5vdCoKICogICAgIGFsc28gYXBwZWFyIGluIHRoZSBjbG9iYmVyIGxpc3Qgb3IgZ2NjIDIuOTUuMiB3aWxsIGJhcmYuICBUaGUgc29sdXRpb24KICogICAgIGlzIHNpbXBsZSBlbm91Z2guLi4KICoKICogMjAwMDA5MTQ6CiAqICAtIGJ1ZyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKTogIDE2LWJpdCBncmF5c2NhbGUgbm90IGhhbmRsZWQKICogICAgIGNvcnJlY3RseSAoYnV0IDQ4LWJpdCBSR0IganVzdCBmaW5lKQogKgogKiAyMDAwMDkxNjoKICogIC0gZml4ZWQgYnVnIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpLCBicHAgPT0gMiBjYXNlOyB0aHJlZSBlcnJvcnM6CiAqICAgICAtICJfU2hpZnRCcHAudXNlID0gMjQ7IiAgICAgIHNob3VsZCBoYXZlIGJlZW4gICAiX1NoaWZ0QnBwLnVzZSA9IDE2OyIKICogICAgIC0gIl9TaGlmdFJlbS51c2UgPSA0MDsiICAgICAgc2hvdWxkIGhhdmUgYmVlbiAgICJfU2hpZnRSZW0udXNlID0gNDg7IgogKiAgICAgLSAicHNsbHEgX1NoaWZ0UmVtLCAlJW1tMiIgICBzaG91bGQgaGF2ZSBiZWVuICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTIiCiAqCiAqIDIwMDEwMTAxOgogKiAgLSBhZGRlZCBuZXcgcG5nX2luaXRfbW14X2ZsYWdzKCkgZnVuY3Rpb24gKGhlcmUgb25seSBiZWNhdXNlIGl0IG5lZWRzIHRvCiAqICAgICBjYWxsIG1teHN1cHBvcnQoKSwgd2hpY2ggc2hvdWxkIHByb2JhYmx5IGJlY29tZSBnbG9iYWwgcG5nX21teHN1cHBvcnQoKSk7CiAqICAgICBtb2RpZmllZCBvdGhlciBNTVggcm91dGluZXMgdG8gcnVuIGNvbmRpdGlvbmFsbHkgKHBuZ19wdHItPmFzbV9mbGFncykKICoKICogMjAwMTAxMDM6CiAqICAtIHJlbmFtZWQgbW14c3VwcG9ydCgpIHRvIHBuZ19tbXhfc3VwcG9ydCgpLCB3aXRoIGF1dG8tc2V0IG9mIG1teF9zdXBwb3J0ZWQsCiAqICAgICBhbmQgbWFkZSBpdCBwdWJsaWM7IG1vdmVkIHBuZ19pbml0X21teF9mbGFncygpIHRvIHBuZy5jIGFzIGludGVybmFsIGZ1bmMKICoKICogMjAwMTAxMDQ6CiAqICAtIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBwbmdfcmVhZF9maWx0ZXJfcm93X2MoKSAoQyBjb2RlIGFscmVhZHkgZHVwbGljYXRlZAogKiAgICAgd2l0aGluIE1NWCB2ZXJzaW9uIG9mIHBuZ19yZWFkX2ZpbHRlcl9yb3coKSkgc28gbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0bwogKiAgICAgY29tcGlsZSBpdCBpbnRvIHBuZ3J1dGlsLm8KICoKICogMjAwMTAzMTA6CiAqICAtIGZpeGVkIGJ1ZmZlci1vdmVycnVuIGJ1ZyBpbiBwbmdfY29tYmluZV9yb3coKSBDIGNvZGUgKG5vbi1NTVgpCiAqCiAqIDIwMDIwMzA0OgogKiAgLSBlbGltaW5hdGVkIGluY29ycmVjdCB1c2Ugb2Ygd2lkdGhfbW14IGluIHBpeGVsX2J5dGVzID09IDggY2FzZQogKgogKiAyMDA0MDcyNDoKICogIC0gbW9yZSB0aW5rZXJpbmcgd2l0aCBjbG9iYmVyIGxpc3QgYXQgbGluZXMgNDUyOSBhbmQgNTAzMyB0byBnZXQgaXQgdG8KICogICAgIGNvbXBpbGUgd2l0aCBnY2MgMy40CiAqCiAqIDIwMDcwMzEzOgogKiAgLSBmaW5hbGx5IGFwcGxpZWQgR2l1c2VwcGUgR2hpYvIncyA2NC1iaXQgcGF0Y2ggb2YgMjAwNjA4MDMgKGNvbXBsZXRlbHkKICogICAgIG92ZXJsb29rZWQgRHlsYW4gQWxleCBTaW1vbidzIHNpbWlsYXIgcGF0Y2ggb2YgMjAwNjA0MTQsIG9vcHMuLi4pCiAqCiAqIDIwMDcwNTI0OgogKiAgLSBmaXhlZCBsaW5rIGZhaWx1cmUgY2F1c2VkIGJ5IGFzbS1vbmx5IHZhcmlhYmxlcyBiZWluZyBvcHRpbWl6ZWQgb3V0CiAqICAgICAoaWRlbnRpZmllZCBieSBEaW1pdHJpIG9mIFRyb2xsdGVjaCkgd2l0aCBfX2F0dHJpYnV0ZV9fKCh1c2VkKSksIHdoaWNoCiAqICAgICBhbHNvIGdldHMgcmlkIG9mIHdhcm5pbmdzID0+IG51a2VkIHVnbHkgcG5nX3NxdWVsY2hfd2FybmluZ3MoKSBoYWNrCiAqICAtIGRyb3BwZWQgcmVkdW5kYW50IGlmZGVmCiAqICAtIG1vdmVkIHBuZ19tbXhfc3VwcG9ydCgpIGJhY2sgdXAgd2hlcmUgb3JpZ2luYWxseSBpbnRlbmRlZCAoYXMgaW4KICogICAgIHBuZ3ZjcmQuYyksIHVzaW5nIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgaW4gZXh0cmEgcHJvdG90eXBlCiAqCiAqIDIwMDcwNTI3OgogKiAgLSByZXZpc2VkIHBuZ19jb21iaW5lX3JvdygpIHRvIHJldXNlIG1hc2sgaW4gbGlldSBvZiBleHRlcm5hbCBfdW5tYXNrCiAqICAtIG1vdmVkIDMyLWJpdCAoUkdCQSkgY2FzZSB0byB0b3Agb2YgcG5nX2NvbWJpbmVfcm93KCk6ICBtb3N0IGNvbW1vbgogKiAgLSBqdXN0IGFib3V0IHJlYWR5IHRvIGdpdmUgdXAgb24geDg2XzY0IC1mUElDIG1vZGU7IGNhbid0IGV2ZW4gYWNjZXNzIDE2CiAqICAgICBfbWFzaypfKiBjb25zdGFudHMgd2l0aG91dCB0cmlnZ2VyaW5nIGxpbmsgZXJyb3Igb24gc2hhcmVkIGxpYnJhcnk6CiAqICAgICAgIC91c3IvYmluL2xkOiBwbmdnY2NyZC5waWMubzogcmVsb2NhdGlvbiBSX1g4Nl82NF8zMlMgYWdhaW5zdCBgYSBsb2NhbAogKiAgICAgICAgIHN5bWJvbCcgY2FuIG5vdCBiZSB1c2VkIHdoZW4gbWFraW5nIGEgc2hhcmVkIG9iamVjdDsgcmVjb21waWxlIHdpdGgKICogICAgICAgICAtZlBJQwogKiAgICAgICBwbmdnY2NyZC5waWMubzogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlCiAqICAgICAgICgib2JqZHVtcCAteCBwbmdnY2NyZC5waWMubyB8IGdyZXAgcm9kYXRhIiB0byB2ZXJpZnkpCiAqICAgICBbbWlnaHQgYmUgYWJsZSB0byB3b3JrIGFyb3VuZCBieSBkb2luZyB3aXRoaW4gYXNzZW1ibHkgY29kZSB3aGF0ZXZlcgogKiAgICAgLWZQSUMgZG9lcywgYnV0IGdpdmVuIHByb2JsZW1zIHRvIGRhdGUsIHNlZW1zIGxpa2UgbG9uZyBzaG90Li4uXQogKiAgICAgW3JlbGV2YW50IGlmZGVmczogIF9feDg2XzY0X18gJiYgX19QSUNfXyA9PiBDIGNvZGUgb25seV0KICogIC0gY2hhbmdlZCAjaWYgMCB0byAjaWZkZWYgUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEIGluIGNhc2UgZ2NjIGV2ZXIKICogICAgIHN1cHBvcnRzIE1NWCByZWdzICglbW0wLCBldGMuKSBpbiBjbG9iYmVyIGxpc3QgKG5vdCBzdXBwb3J0ZWQgYnkgZ2NjCiAqICAgICAyLjcuMi4zLCAyLjkxLjY2IChlZ2NzIDEuMS4yKSwgMy54LCBvciA0LjEuMikKICoKICogMjAwNzA2MDM6CiAqICAtIHJldmlzZWQgcG5nX2NvbWJpbmVfcm93KCkgdG8gdXNlIEBHT1RQQ1JFTCglJXJpcCkgYWRkcmVzc2luZyBvbiBfYzY0CiAqICAgICBzdHJ1Y3Qgb2YgX21hc2sqXyogY29uc3RhbnRzIGZvciB4ODZfNjQgLWZQSUM7IHNlZSBzYW0uem95Lm9yZyBsaW5rCiAqICAgICBhYm92ZSBmb3IgZGV0YWlscwogKiAgLSBtb3ZlZCBfY29uc3Q0IGFuZCBfY29uc3Q2IGludG8gX2M2NCBzdHJ1Y3QsIHJlbmFtZWQgdG8gX2FtYXNrNV8zXzAgYW5kCiAqICAgICBfYW1hc2s3XzFfMCwgcmVzcGVjdGl2ZWx5CiAqICAtIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIHVzZSBfYzY0Ll9tYXNrKl8qIHZhcnMgd2l0aGluIGFzbSBjb2RlLCBzbyBzdGlsbAogKiAgICAgbmVlZCBzaW5nbGUgdmFyaWFibGVzIGZvciBub24teDg2XzY0Ly1mUElDIGhhbGYgOi0oCiAqICAtIHJlcGxhY2VkIHZhcmlvdXMgX19QSUNfXyBpZmRlZnMgd2l0aCAqX0dPVF9lYnggbWFjcm9zCiAqICAtIG1vdmVkIF9MQkNhcnJ5TWFzayBhbmQgX0hCQ2xlYXJNYXNrIGludG8gX2M2NCBzdHJ1Y3QKICogIC0gY29uZGl0aW9uYWxseSByZXBsYWNlZCBfcCp0ZW1wIHZhcmlhYmxlcyB3aXRoICVyMTFkLSVyMTNkICh2aWEgcCpfVEVNUAogKiAgICAgYW5kIENMT0JCRVJfcjEqZCBtYWNyb3MpCiAqCiAqIDIwMDcwNjA0OgogKiAgLSByZXBsYWNlZCBhbGwgX0FjdGl2ZU1hc2sgYW5kIF9BY3RpdmVNYXNrRW5kIHdpdGggbmV3IF9hbWFzaypfKl8qIGNvbnN0cwogKiAgICAgKF9hbWFzayBuYW1pbmcgY29udmVudGlvbjogIG51bWJlcnMgb2YgMDAtYnl0ZXMsIGZmLWJ5dGVzLCAwMC1ieXRlcykKICogICAgLSBfQWN0aXZlTWFzawkvLyAoMTApCS8vIGF2Zy9wYWV0aC9zdWI7IHJlYWQtb25seTsgY29uc3RzOyBtb3ZxL3BhbmQKICogICAgICAgMHgwMDAwMDAwMDAwZmZmZmZmTEwgKGJwcCAzLCBhdmcpCV9hbWFzazVfM18wCiAqICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmZkxMIChicHAgNCwgNiwgYXZnKQlfYW1hc2swXzhfMAogKiAgICAgICAweDAwMDAwMDAwMDAwMGZmZmZMTCAoYnBwIDIsIGF2ZykJX2FtYXNrNl8yXzAKICogICAgICAgMHgwMDAwMDAwMDAwZmZmZmZmTEwgKGJwcCAzLCBwYWV0aCkJX2FtYXNrNV8zXzAKICogICAgICAgMHgwMDAwMDAwMGZmZmZmZmZmTEwgKGJwcCA2LCBwYWV0aCkgCV9hbWFzazRfNF8wCiAqICAgICAgIDB4MDAwMDAwMDBmZmZmZmZmZkxMIChicHAgNCwgcGFldGgpIAlfYW1hc2s0XzRfMAogKiAgICAgICAweDAwMDAwMDAwZmZmZmZmZmZMTCAoYnBwIDgsIHBhZXRoKSAJX2FtYXNrNF80XzAKICogICAgICAgMHgwMDAwZmZmZmZmMDAwMDAwTEwgKGJwcCAzLCBzdWIpIAlfYW1hc2syXzNfMwogKiAgICAgICAweDAwMDAwMDAwZmZmZjAwMDBMTCAoYnBwIDIsIHN1YikgCV9hbWFzazRfMl8yCiAqICAgIC0gX0FjdGl2ZU1hc2tFbmQJLy8gKDEpCS8vIHBhZXRoIG9ubHk7IHJlYWQtb25seTsgY29uc3Q7IHBhbmQKICogICAgICAgMHhmZmZmMDAwMDAwMDAwMDAwTEwgKGJwcCAzLCBwYWV0aCkJX2FtYXNrMF8yXzYKICogIC0gY2hhbmdlZCBhbGwgIiNpZiBkZWZpbmVkKF9feDg2XzY0X18pIC8vIGxhdGVyIC8vICYmIGRlZmluZWQoX19QSUNfXykiCiAqICAgICBsaW5lcyB0byAiI2lmZGVmIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIiBmb3IgZWFzaWVyL3NhZmVyIHRlc3RpbmcKICoKICogMjAwNzA2MDU6CiAqICAtIG1lcmdlZCBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCwgbm9uLVBOR194ODZfNjRfVVNFX0dPVFBDUkVMIGNvZGUgdmlhCiAqICAgICAqTUFTSyogYW5kIExPQUQvUkVTVE9SRSBtYWNyb3MKICoKICogMjAwNzA2MDc6CiAqICAtIHJlcGxhY2VkIGFsbCBjb25zdGFudCBpbnN0YW5jZXMgb2YgX1NoaWZ0QnBwLCBfU2hpZnRSZW0gd2l0aCBpbW1lZGlhdGVzCiAqICAgICAoc3RpbGwgaGF2ZSB0d28gc2hhcmVkIGNhc2VzIGluIGF2Zywgc3ViIHJvdXRpbmVzKQogKgogKiAyMDA3MDYwOToKICogIC0gcmVwbGFjZWQgcmVtYWluaW5nIGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKICogICAgIChzcGxpdCBzdWIgYW5kIGF2ZyA0LzYtYnBwIGNhc2VzIGludG8gc2VwYXJhdGUgYmxvY2tzKQogKiAgLSBmaXhlZCBwYWV0aCBidWcgZHVlIHRvIGNsb2JiZXJlZCByMTEvcjEyL3IxMyByZWdzCiAqCiAqIDIwMDcwNjEwOgogKiAgLSBtYWRlIGdsb2JhbCAiX2RpZiIgdmFyaWFibGUgKGF2Zy9wYWV0aC9zdWIgcm91dGluZXMpIGxvY2FsIGFnYWluIChub3cKICogICAgICJkaWZmIi0tc2VlIDE5OTkxMTIwIGVudHJ5IGFib3ZlKSwgdXNpbmcgcmVnaXN0ZXIgY29uc3RyYWludHMKICogIC0gbm90ZSB0aGF0ICVlYnAgaW4gY2xvYmJlciBsaXN0IGRvZXNuJ3QgYWN0dWFsbHkgd29yaywgYXQgbGVhc3QgZm9yIDMyLWJpdAogKiAgICAgdmVyc2lvbiBhbmQgZ2NjIDQuMS4yOyBtdXN0IHNhdmUgYW5kIHJlc3RvcmUgbWFudWFsbHkuICAoU2VlbXMgdG8gd29yawogKiAgICAgT0sgZm9yIDY0LWJpdCB2ZXJzaW9uIGFuZCBnY2MgMy40LjMsIGJ1dCBnY2MgbWF5IG5vdCBiZSB1c2luZyBlYnAvcmJwCiAqICAgICBpbiB0aGF0IGNhc2UuKQogKiAgLSBzdGFydGVkIHJlcGxhY2luZyBkaXJlY3QgX01NWExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCiAqCiAqIDIwMDcwNjEyOgogKiAgLSBjb250aW51ZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICoKICogMjAwNzA2MTM6CiAqICAtIGZpbmlzaGVkIHJlcGxhY2luZyBkaXJlY3QgX01NWExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzOwogKiAgICAgc3dpdGNoZWQgdG8gbG9jYWwgdmFyaWFibGUgKGFuZCByZW5hbWVkIGJhY2sgdG8gTU1YTGVuZ3RoKQogKgogKiAyMDA3MDYxNDoKICogIC0gZml4ZWQgc3ViIGJwcCA9IDEgYnVnCiAqICAtIHN0YXJ0ZWQgcmVwbGFjaW5nIGRpcmVjdCBfRnVsbExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCiAqCiAqIDIwMDcwNjE1OgogKiAgLSBmaXhlZCA2NC1iaXQgcGFldGggYnBwIDMgY3Jhc2ggYnVnIChtaXNwbGFjZWQgTE9BRF9HT1RfcmJwKQogKiAgLSBmaXhlZCA2NC1iaXQgcGFldGggYnBwIDEvMiBhbmQgY2xlYW51cC1ibG9jayBjcmFzaCBidWdzIChtaXNwbGFjZWQKICogICAgIFJFU1RPUkVfcjExX3IxMl9yMTMpCiAqICAtIHNsaWdodGx5IG9wdGltaXplZCBhdmcvcGFldGggY2xlYW51cCBibG9ja3MgYW5kIHBhZXRoIGJwcCAxLzIgYmxvY2sKICogICAgIChzYXZlL3Jlc3RvcmUgZWJ4IG9ubHkgaWYgbmVlZGVkKQogKiAgLSBjb250aW51ZWQgcmVwbGFjaW5nIGRpcmVjdCBfRnVsbExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCiAqCiAqIDIwMDcwNjE2OgogKiAgLSBmaW5pc2hlZCByZXBsYWNpbmcgZGlyZWN0IF9GdWxsTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICogICAgICgqdWdseSogY29uZGl0aW9uYWwgY2xvYmJlci1zZXBhcmF0b3IgbWFjcm9zIGZvciBhdmcgYW5kIHBhZXRoLCBzaWdoKQogKiAgICBDaGFuZ2VkIGFsbCAiaWZkZWYgKiIgdG8gImlmIGRlZmluZWQoKikiCiAqCiAqCiAqIFNUSUxMIFRPIERPOgogKiAgLSBmaXggZmluYWwgdGhyZWFkLXVuc2FmZSBjb2RlIHVzaW5nIHN0YWNrIHZhcnMgYW5kIHBvaW50ZXI/IChwYWV0aCB0b3AsCiAqICAgICBkZWZhdWx0LCBib3R0b20gb25seTsgZGVmYXVsdCwgYm90dG9tIGFscmVhZHkgNSByZWcgY29uc3RyYWludHM7IGNvdWxkCiAqICAgICByZXBsYWNlIGJwcCB3aXRoIHBvaW50ZXIgYW5kIGdyb3VwIGJwcC9wYXRlbXAvcGJ0ZW1wL3BjdGVtcCBpbiBhcnJheSkKICogIC0gZml4IGVicC9uby1yZWctY29uc3RyYWludCBpbmVmZmljaWVuY3kgKGF2Zy9wYWV0aC9zdWIgdG9wKQogKiAgLSB0ZXN0IHBuZ19kb19yZWFkX2ludGVybGFjZSgpIDY0LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSA4KQogKiAgLSB3cml0ZSBNTVggY29kZSBmb3IgNDgtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDYpCiAqICAtIGZpZ3VyZSBvdXQgd2hhdCdzIHVwIHdpdGggMjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDMpOgogKiAgICAgd2h5IHN1YnRyYWN0IDggZnJvbSB3aWR0aF9tbXggaW4gdGhlIHBhc3MgNC81IGNhc2U/ICBkdWUgdG8KICogICAgIG9kZCBudW1iZXIgb2YgYnl0ZXM/IChvbmx5IHdpZHRoX21teCBjYXNlKSAobmVhciBsaW5lIDE2MDYpCiAqICAtIHJld3JpdGUgYWxsIE1NWCBpbnRlcmxhY2luZyBjb2RlIHNvIGl0J3MgYWxpZ25lZCB3aXRoIGJlZ2lubmluZwogKiAgICAgb2YgdGhlIHJvdyBidWZmZXIsIG5vdCB0aGUgZW5kIChzZWUgMTk5OTEwMDcgZm9yIGRldGFpbHMpCiAqICAtIGFkZCBlcnJvciBtZXNzYWdlcyB0byBhbnkgcmVtYWluaW5nIGJvZ3VzIGRlZmF1bHQgY2FzZXMKICogIC0gZW5hYmxlIHBpeGVsX2RlcHRoID09IDggY2FzZXMgaW4gcG5nX3JlYWRfZmlsdGVyX3JvdygpPyAodGVzdCBzcGVlZCkKICogIC0gdHJ5ID1yLCBldGMuLCBhcyByZWcgY29uc3RyYWludHM/ICAod291bGQgZ2NjIHVzZSA2NC1iaXQgb25lcyBvbiB4ODZfNjQ/KQogKiAgLSBuZWVkIGZ1bGwsIG5vbi1ncmFwaGljYWwsIENSQy1iYXNlZCB0ZXN0IHN1aXRlLi4uICBtYXliZSBhdXRvZ2VuZXJhdGUKICogICAgIHJhbmRvbSBkYXRhIG9mIHZhcmlvdXMgaGVpZ2h0L3dpZHRoL2RlcHRoLCBjb21wdXRlIENSQ3MsIHdyaXRlIChDCiAqICAgICBmdW5jcyksIHJlYWQgKGFzbS9NTVgpLCByZWNvbXB1dGUgQ1JDcywgYW5kIGNvbXBhcmU/CiAqICAtIHdyaXRlIHRydWUgeDg2XzY0IHZlcnNpb24gdXNpbmcgMTI4LWJpdCAibWVkaWEgaW5zdHJ1Y3Rpb25zIiwgJXhtbTAtMTUsCiAqICAgICBhbmQgZXh0cmEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycwogKi8KCiNkZWZpbmUgUE5HX0lOVEVSTkFMCiNpbmNsdWRlICJwbmcuaCIKCiNpZiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkKCiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykgLyogb3B0aW9uYWxseSBjb21tZW50IF9fUElDX186ICovCiMgIGRlZmluZSBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCAgICAgICAgICAgLyogR09UUENSRUwgPT4gZnVsbCB0aHJlYWQtc2FmZXR5ICovCiMgIGRlZmluZSBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQgLyogd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLiAqLwojZW5kaWYKI2VuZGlmCgppbnQgUE5HQVBJIHBuZ19tbXhfc3VwcG9ydCh2b2lkKTsKCiNpZiBkZWZpbmVkKFBOR19VU0VfTE9DQUxfQVJSQVlTKQpzdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3N0YXJ0WzddID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OwpzdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX2luY1s3XSAgID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwpzdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3dpZHRoWzddID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OwojZW5kaWYKCiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCgovKiBkamdwcCwgV2luMzIsIEN5Z3dpbiwgYW5kIE9TMiBhZGQgdGhlaXIgb3duIHVuZGVyc2NvcmVzIHRvIGdsb2JhbCB2YXJpYWJsZXMsCiAqIHNvIGRlZmluZSB0aGVtIHdpdGhvdXQ6ICovCiNpZiBkZWZpbmVkKF9fREpHUFBfXykgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCiAgICBkZWZpbmVkKF9fT1MyX18pCiMgIGRlZmluZSBfbW14X3N1cHBvcnRlZCAgbW14X3N1cHBvcnRlZAojICBkZWZpbmUgX21hc2s4XzAgICAgICAgIG1hc2s4XzAKIyAgZGVmaW5lIF9tYXNrMTZfMSAgICAgICBtYXNrMTZfMQojICBkZWZpbmUgX21hc2sxNl8wICAgICAgIG1hc2sxNl8wCiMgIGRlZmluZSBfbWFzazI0XzIgICAgICAgbWFzazI0XzIKIyAgZGVmaW5lIF9tYXNrMjRfMSAgICAgICBtYXNrMjRfMQojICBkZWZpbmUgX21hc2syNF8wICAgICAgIG1hc2syNF8wCiMgIGRlZmluZSBfbWFzazMyXzMgICAgICAgbWFzazMyXzMKIyAgZGVmaW5lIF9tYXNrMzJfMiAgICAgICBtYXNrMzJfMgojICBkZWZpbmUgX21hc2szMl8xICAgICAgIG1hc2szMl8xCiMgIGRlZmluZSBfbWFzazMyXzAgICAgICAgbWFzazMyXzAKIyAgZGVmaW5lIF9tYXNrNDhfNSAgICAgICBtYXNrNDhfNQojICBkZWZpbmUgX21hc2s0OF80ICAgICAgIG1hc2s0OF80CiMgIGRlZmluZSBfbWFzazQ4XzMgICAgICAgbWFzazQ4XzMKIyAgZGVmaW5lIF9tYXNrNDhfMiAgICAgICBtYXNrNDhfMgojICBkZWZpbmUgX21hc2s0OF8xICAgICAgIG1hc2s0OF8xCiMgIGRlZmluZSBfbWFzazQ4XzAgICAgICAgbWFzazQ4XzAKIyAgZGVmaW5lIF9hbWFzazVfM18wICAgICBhbWFzazVfM18wCiMgIGRlZmluZSBfYW1hc2s3XzFfMCAgICAgYW1hc2s3XzFfMAojICBkZWZpbmUgX0xCQ2FycnlNYXNrICAgIExCQ2FycnlNYXNrCiMgIGRlZmluZSBfSEJDbGVhck1hc2sgICAgSEJDbGVhck1hc2sKIyAgZGVmaW5lIF9hbWFzazBfOF8wICAgICBhbWFzazBfOF8wCiMgIGRlZmluZSBfYW1hc2s2XzJfMCAgICAgYW1hc2s2XzJfMAojICBkZWZpbmUgX2FtYXNrNF80XzAgICAgIGFtYXNrNF80XzAKIyAgZGVmaW5lIF9hbWFzazBfMl82ICAgICBhbWFzazBfMl82CiMgIGRlZmluZSBfYW1hc2syXzNfMyAgICAgYW1hc2syXzNfMwojICBkZWZpbmUgX2FtYXNrNF8yXzIgICAgIGFtYXNrNF8yXzIKIyAgaWYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKIyAgICBkZWZpbmUgX3BhdGVtcCAgICAgICBwYXRlbXAKIyAgICBkZWZpbmUgX3BidGVtcCAgICAgICBwYnRlbXAKIyAgICBkZWZpbmUgX3BjdGVtcCAgICAgICBwY3RlbXAKIyAgZW5kaWYKI2VuZGlmIC8vIGRqZ3BwLCBXaW4zMiwgQ3lnd2luLCBPUzIKCgovKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgaW4gdGhlIGlubGluZWQgTU1YIGFzc2VtYmx5IGNvZGUuICovCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgdWxsOwoKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpCnN0YXRpYyBQTkdfQ09OU1Qgc3RydWN0IHsKICAgIC8vdWxsIF9tYXNrX2FycmF5WzI2XTsKCiAgICAvLyBwbmdfY29tYmluZV9yb3coKSBjb25zdGFudHM6CiAgICB1bGwgX21hc2s4XzA7CiAgICB1bGwgX21hc2sxNl8wLCBfbWFzazE2XzE7CiAgICB1bGwgX21hc2syNF8wLCBfbWFzazI0XzEsIF9tYXNrMjRfMjsKICAgIHVsbCBfbWFzazMyXzAsIF9tYXNrMzJfMSwgX21hc2szMl8yLCBfbWFzazMyXzM7CiAgICB1bGwgX21hc2s0OF8wLCBfbWFzazQ4XzEsIF9tYXNrNDhfMiwgX21hc2s0OF8zLCBfbWFzazQ4XzQsIF9tYXNrNDhfNTsKCiAgICAvLyBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBjb25zdGFudHM6CiAgICB1bGwgX2FtYXNrNV8zXzAsIF9hbWFzazdfMV8wOyAgLy8gd2FzIF9jb25zdDQgYW5kIF9jb25zdDYsIHJlc3BlY3RpdmVseQoKICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpIGNvbnN0YW50cyAoYWxzbyB1c2VzIF9hbWFzazVfM18wKToKICAgIHVsbCBfTEJDYXJyeU1hc2ssIF9IQkNsZWFyTWFzazsKICAgIHVsbCBfYW1hc2swXzhfMCwgX2FtYXNrNl8yXzA7ICAvLyB3YXMgQWN0aXZlTWFzayBmb3IgYnBwIDQvNiBhbmQgMiBjYXNlcwoKICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzIChhbHNvIHVzZXMgX2FtYXNrNV8zXzApOgogICAgdWxsIF9hbWFzazRfNF8wLCBfYW1hc2swXzJfNjsgIC8vIHdhcyBBY3RpdmVNYXNreyxFbmR9IGZvciBicHAgNi80LzggYW5kIDMKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKSBjb25zdGFudHM6CiAgICB1bGwgX2FtYXNrMl8zXzMsIF9hbWFzazRfMl8yOyAgLy8gd2FzIEFjdGl2ZU1hc2sgZm9yIGJwcCAzIGFuZCAyIGNhc2VzCgp9IF9jNjQgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gewoKICAgIC8vIHBuZ19jb21iaW5lX3JvdygpIGNvbnN0YW50czoKICAgIDB4MDEwMjA0MDgxMDIwNDA4MExMLCAvLyBfbWFzazhfMCAgICAgIG9mZnNldCAwCgogICAgMHgxMDEwMjAyMDQwNDA4MDgwTEwsIC8vIF9tYXNrMTZfMCAgICAgb2Zmc2V0IDgKICAgIDB4MDEwMTAyMDIwNDA0MDgwOExMLCAvLyBfbWFzazE2XzEgICAgIG9mZnNldCAxNgoKICAgIDB4MjAyMDQwNDA0MDgwODA4MExMLCAvLyBfbWFzazI0XzAgICAgIG9mZnNldCAyNAogICAgMHgwNDA4MDgwODEwMTAxMDIwTEwsIC8vIF9tYXNrMjRfMSAgICAgb2Zmc2V0IDMyCiAgICAweDAxMDEwMTAyMDIwMjA0MDRMTCwgLy8gX21hc2syNF8yICAgICBvZmZzZXQgNDAKCiAgICAweDQwNDA0MDQwODA4MDgwODBMTCwgLy8gX21hc2szMl8wICAgICBvZmZzZXQgNDgKICAgIDB4MTAxMDEwMTAyMDIwMjAyMExMLCAvLyBfbWFzazMyXzEgICAgIG9mZnNldCA1NgogICAgMHgwNDA0MDQwNDA4MDgwODA4TEwsIC8vIF9tYXNrMzJfMiAgICAgb2Zmc2V0IDY0CiAgICAweDAxMDEwMTAxMDIwMjAyMDJMTCwgLy8gX21hc2szMl8zICAgICBvZmZzZXQgNzIKCiAgICAweDQwNDA4MDgwODA4MDgwODBMTCwgLy8gX21hc2s0OF8wICAgICBvZmZzZXQgODAKICAgIDB4MjAyMDIwMjA0MDQwNDA0MExMLCAvLyBfbWFzazQ4XzEgICAgIG9mZnNldCA4OAogICAgMHgxMDEwMTAxMDEwMTAyMDIwTEwsIC8vIF9tYXNrNDhfMiAgICAgb2Zmc2V0IDk2CiAgICAweDA0MDQwODA4MDgwODA4MDhMTCwgLy8gX21hc2s0OF8zICAgICBvZmZzZXQgMTA0CiAgICAweDAyMDIwMjAyMDQwNDA0MDRMTCwgLy8gX21hc2s0OF80ICAgICBvZmZzZXQgMTEyCiAgICAweDAxMDEwMTAxMDEwMTAyMDJMTCwgLy8gX21hc2s0OF81ICAgICBvZmZzZXQgMTIwCgogICAgLy8gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgY29uc3RhbnRzOgogICAgMHgwMDAwMDAwMDAwRkZGRkZGTEwsIC8vIF9hbWFzazVfM18wICAgb2Zmc2V0IDEyOCAgKGJwcCAzLCBhdmcvcGFldGgpIGNvbnN0NAogICAgMHgwMDAwMDAwMDAwMDAwMEZGTEwsIC8vIF9hbWFzazdfMV8wICAgb2Zmc2V0IDEzNiAgICAgICAgICAgICAgICAgICAgIGNvbnN0NgoKICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpIGNvbnN0YW50czoKICAgIDB4MDEwMTAxMDEwMTAxMDEwMUxMLCAvLyBfTEJDYXJyeU1hc2sgIG9mZnNldCAxNDQKICAgIDB4N0Y3RjdGN0Y3RjdGN0Y3RkxMLCAvLyBfSEJDbGVhck1hc2sgIG9mZnNldCAxNTIKICAgIDB4RkZGRkZGRkZGRkZGRkZGRkxMLCAvLyBfYW1hc2swXzhfMCAgIG9mZnNldCAxNjAgIChicHAgNC82LCBhdmcpCiAgICAweDAwMDAwMDAwMDAwMEZGRkZMTCwgLy8gX2FtYXNrNl8yXzAgICBvZmZzZXQgMTY4ICAoYnBwIDIsICAgYXZnKQoKICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzOgogICAgMHgwMDAwMDAwMEZGRkZGRkZGTEwsIC8vIF9hbWFzazRfNF8wICAgb2Zmc2V0IDE3NiAgKGJwcCA2LzQvOCwgcGFldGgpCiAgICAweEZGRkYwMDAwMDAwMDAwMDBMTCwgLy8gX2FtYXNrMF8yXzYgICBvZmZzZXQgMTg0ICAoYnBwIDMsIHBhZXRoKSAgIEEuTS5FbmQKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKSBjb25zdGFudHM6CiAgICAweDAwMDBGRkZGRkYwMDAwMDBMTCwgLy8gX2FtYXNrMl8zXzMgICBvZmZzZXQgMTkyICAoYnBwIDMsIHN1YikKICAgIDB4MDAwMDAwMDBGRkZGMDAwMExMLCAvLyBfYW1hc2s0XzJfMiAgIG9mZnNldCAyMDAgIChicHAgMiwgc3ViKQoKfTsKCiNkZWZpbmUgTUFTSzhfMCAgICAgICAgIiglJXJicCkiCiNkZWZpbmUgTUFTSzE2XzAgICAgICAgIjgoJSVyYnApIgojZGVmaW5lIE1BU0sxNl8xICAgICAgICIxNiglJXJicCkiCiNkZWZpbmUgTUFTSzI0XzAgICAgICAgIjI0KCUlcmJwKSIKI2RlZmluZSBNQVNLMjRfMSAgICAgICAiMzIoJSVyYnApIgojZGVmaW5lIE1BU0syNF8yICAgICAgICI0MCglJXJicCkiCiNkZWZpbmUgTUFTSzMyXzAgICAgICAgIjQ4KCUlcmJwKSIKI2RlZmluZSBNQVNLMzJfMSAgICAgICAiNTYoJSVyYnApIgojZGVmaW5lIE1BU0szMl8yICAgICAgICI2NCglJXJicCkiCiNkZWZpbmUgTUFTSzMyXzMgICAgICAgIjcyKCUlcmJwKSIKI2RlZmluZSBNQVNLNDhfMCAgICAgICAiODAoJSVyYnApIgojZGVmaW5lIE1BU0s0OF8xICAgICAgICI4OCglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzIgICAgICAgIjk2KCUlcmJwKSIKI2RlZmluZSBNQVNLNDhfMyAgICAgICAiMTA0KCUlcmJwKSIKI2RlZmluZSBNQVNLNDhfNCAgICAgICAiMTEyKCUlcmJwKSIKI2RlZmluZSBNQVNLNDhfNSAgICAgICAiMTIwKCUlcmJwKSIKI2RlZmluZSBBTUFTSzVfM18wICAgICAiMTI4KCUlcmJwKSIKI2RlZmluZSBBTUFTSzdfMV8wICAgICAiMTM2KCUlcmJwKSIKI2RlZmluZSBMQl9DQVJSWV9NQVNLICAiMTQ0KCUlcmJwKSIKI2RlZmluZSBIQl9DTEVBUl9NQVNLICAiMTUyKCUlcmJwKSIKI2RlZmluZSBBTUFTSzBfOF8wICAgICAiMTYwKCUlcmJwKSIKI2RlZmluZSBBTUFTSzZfMl8wICAgICAiMTY4KCUlcmJwKSIKI2RlZmluZSBBTUFTSzRfNF8wICAgICAiMTc2KCUlcmJwKSIKI2RlZmluZSBBTUFTSzBfMl82ICAgICAiMTg0KCUlcmJwKSIKI2RlZmluZSBBTUFTSzJfM18zICAgICAiMTkyKCUlcmJwKSIKI2RlZmluZSBBTUFTSzRfMl8yICAgICAiMjAwKCUlcmJwKSIKCiNlbHNlIC8vICFQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTAoKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s4XzAgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMjA0MDgxMDIwNDA4MExMOwoKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2sxNl8xIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAyMDIwNDA0MDgwOExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazE2XzAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgxMDEwMjAyMDQwNDA4MDgwTEw7CgpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazI0XzIgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMTAxMDEwMjAyMDIwNDA0TEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMjRfMSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDA0MDgwODA4MTAxMDEwMjBMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2syNF8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MjAyMDQwNDA0MDgwODA4MExMOwoKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8zIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDEwMjAyMDIwMkxMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazMyXzIgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA0MDQwNDA4MDgwODA4TEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDEwMTAxMDEwMjAyMDIwMjBMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4NDA0MDQwNDA4MDgwODA4MExMOwoKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF81IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDEwMTAxMDIwMkxMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzQgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMjAyMDIwMjA0MDQwNDA0TEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrNDhfMyBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDA0MDQwODA4MDgwODA4MDhMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MTAxMDEwMTAxMDEwMjAyMExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgyMDIwMjAyMDQwNDA0MDQwTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrNDhfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDQwNDA4MDgwODA4MDgwODBMTDsKCi8vIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGNvbnN0YW50czoKc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrNV8zXzAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSA9IDB4MDAwMDAwMDAwMEZGRkZGRkxMOwkvLyB3YXMgX2NvbnN0NApzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s3XzFfMCAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMDAwMDAwMEZGTEw7CS8vIHdhcyBfY29uc3Q2CgovLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9MQkNhcnJ5TWFzayBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDEwMTAxMDFMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX0hCQ2xlYXJNYXNrIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZkxMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2swXzhfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHhGRkZGRkZGRkZGRkZGRkZGTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazZfMl8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDAwMEZGRkZMTDsKCi8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzOgpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzRfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkZGRkZGTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazBfMl82ICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweEZGRkYwMDAwMDAwMDAwMDBMTDsKCi8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIGNvbnN0YW50czoKc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrMl8zXzMgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMEZGRkZGRjAwMDAwMExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzJfMiAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkYwMDAwTEw7CgojZGVmaW5lIE1BU0s4XzAgICAgICAgICJfbWFzazhfMCIKI2RlZmluZSBNQVNLMTZfMCAgICAgICAiX21hc2sxNl8wIgojZGVmaW5lIE1BU0sxNl8xICAgICAgICJfbWFzazE2XzEiCiNkZWZpbmUgTUFTSzI0XzAgICAgICAgIl9tYXNrMjRfMCIKI2RlZmluZSBNQVNLMjRfMSAgICAgICAiX21hc2syNF8xIgojZGVmaW5lIE1BU0syNF8yICAgICAgICJfbWFzazI0XzIiCiNkZWZpbmUgTUFTSzMyXzAgICAgICAgIl9tYXNrMzJfMCIKI2RlZmluZSBNQVNLMzJfMSAgICAgICAiX21hc2szMl8xIgojZGVmaW5lIE1BU0szMl8yICAgICAgICJfbWFzazMyXzIiCiNkZWZpbmUgTUFTSzMyXzMgICAgICAgIl9tYXNrMzJfMyIKI2RlZmluZSBNQVNLNDhfMCAgICAgICAiX21hc2s0OF8wIgojZGVmaW5lIE1BU0s0OF8xICAgICAgICJfbWFzazQ4XzEiCiNkZWZpbmUgTUFTSzQ4XzIgICAgICAgIl9tYXNrNDhfMiIKI2RlZmluZSBNQVNLNDhfMyAgICAgICAiX21hc2s0OF8zIgojZGVmaW5lIE1BU0s0OF80ICAgICAgICJfbWFzazQ4XzQiCiNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIl9tYXNrNDhfNSIKI2RlZmluZSBBTUFTSzVfM18wICAgICAiX2FtYXNrNV8zXzAiCiNkZWZpbmUgQU1BU0s3XzFfMCAgICAgIl9hbWFzazdfMV8wIgojZGVmaW5lIExCX0NBUlJZX01BU0sgICJfTEJDYXJyeU1hc2siCiNkZWZpbmUgSEJfQ0xFQVJfTUFTSyAgIl9IQkNsZWFyTWFzayIKI2RlZmluZSBBTUFTSzBfOF8wICAgICAiX2FtYXNrMF84XzAiCiNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIl9hbWFzazZfMl8wIgojZGVmaW5lIEFNQVNLNF80XzAgICAgICJfYW1hc2s0XzRfMCIKI2RlZmluZSBBTUFTSzBfMl82ICAgICAiX2FtYXNrMF8yXzYiCiNkZWZpbmUgQU1BU0syXzNfMyAgICAgIl9hbWFzazJfM18zIgojZGVmaW5lIEFNQVNLNF8yXzIgICAgICJfYW1hc2s0XzJfMiIKCiNlbmRpZiAvLyA/UE5HX3g4Nl82NF9VU0VfR09UUENSRUwKCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKQoKLy8gdGhpcyBibG9jayBpcyBzcGVjaWZpYyB0byBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKQojICBkZWZpbmUgcGFfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTFkIgojICBkZWZpbmUgcGJfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTJkIgojICBkZWZpbmUgcGNfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTNkIgojICBpZiBkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkgIC8vIHdvcmtzIGFzIG9mIGdjYyAzLjQuMyAuLi4KIyAgICBkZWZpbmUgU0FWRV9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBSRVNUT1JFX3IxMV9yMTJfcjEzCiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxMV9yMTJfcjEzICwiJXIxMSIsICIlcjEyIiwgIiVyMTMiCiMgICAgZGVmaW5lIENMT0JCRVJfcjExX3IxMl9yMTMgICIlcjExIiwgIiVyMTIiLCAiJXIxMyIKIyAgZWxzZSAvLyAhUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVECiMgICAgZGVmaW5lIFNBVkVfcjExX3IxMl9yMTMgICAgICJwdXNocSAlJXIxMSAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaHEgJSVyMTIgIFxuXHQiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2hxICUlcjEzICBcblx0IiAgLy8gIm5vcm1hbGx5IDAtZXh0ZW5kZWQiCiMgICAgZGVmaW5lIFJFU1RPUkVfcjExX3IxMl9yMTMgICJwb3BxICAlJXIxMyAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcSAgJSVyMTIgIFxuXHQiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHEgICUlcjExICBcblx0IgojICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBDTE9CQkVSX3IxMV9yMTJfcjEzCiMgIGVuZGlmCiMgIGRlZmluZSBMT0FEX0dPVF9yYnAgICAgICAgICAgICJwdXNocSAlJXJicCAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgIF9jNjRAR09UUENSRUwoJSVyaXApLCAlJXJicCAgXG5cdCIKIyAgZGVmaW5lIFJFU1RPUkVfcmJwICAgICAgICAgICAgInBvcHEgICUlcmJwICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKI2Vsc2UgLy8gMzItYml0IGFuZC9vciBub24tUElDCiMgIGlmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiAgICAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgYW5kIHdvdWxkIGJlCiAgICAgLy8gICBsb2NhbCB2YXJpYWJsZXMgaWYgbm90IGZvciBnY2MtaW5saW5lLWFzc2VtYmx5IGFkZHJlc3NpbmcgbGltaXRhdGlvbnMKICAgICAvLyAgIChzb21lIGFwcGFyZW50bHkgcmVsYXRlZCB0byBFTEYgZm9ybWF0LCBvdGhlcnMgdG8gQ1BVIHR5cGUpLgogICAgIC8vCiAgICAgLy8gV0FSTklORzogVGhlaXIgcHJlc2VuY2UgZGVmZWF0cyB0aGUgdGhyZWFkLXNhZmV0eSBvZiBsaWJwbmcuCiAgICAgc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgIF9wYXRlbXAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKICAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgX3BidGVtcCAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwogICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBfcGN0ZW1wICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CiMgICAgZGVmaW5lIHBhX1RFTVAgICAgICAgICAgICAgICAgIl9wYXRlbXAiCiMgICAgZGVmaW5lIHBiX1RFTVAgICAgICAgICAgICAgICAgIl9wYnRlbXAiICAvLyB0ZW1wIHZhcmlhYmxlcyBmb3IKIyAgICBkZWZpbmUgcGNfVEVNUCAgICAgICAgICAgICAgICAiX3BjdGVtcCIgIC8vICBQYWV0aCByb3V0aW5lCiMgICAgZGVmaW5lIFNBVkVfcjExX3IxMl9yMTMKIyAgICBkZWZpbmUgUkVTVE9SRV9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMyAgIC8vIG5vdCB1c2luZyByZWdzID0+IG5vdCBjbG9iYmVyaW5nCiMgICAgZGVmaW5lIENMT0JCRVJfcjExX3IxMl9yMTMKIyAgZW5kaWYgLy8gUE5HX1RIUkVBRF9VTlNBRkVfT0sKIyAgICBkZWZpbmUgTE9BRF9HT1RfcmJwCiMgICAgZGVmaW5lIFJFU1RPUkVfcmJwCiNlbmRpZgoKI2lmIGRlZmluZWQoX194ODZfNjRfXykKIyAgZGVmaW5lIFNBVkVfZWJwCiMgIGRlZmluZSBSRVNUT1JFX2VicAojICBkZWZpbmUgX0NMT0JCRVJfZWJwICAgICAgICAgLCIlZWJwIgojICBkZWZpbmUgQ0xPQkJFUl9lYnAgICAgICAgICAgIiVlYnAiCiMgIGRlZmluZSBTQVZFX0Z1bGxMZW5ndGggICAgICAibW92bCAlJWVheCwgJSVyMTVkICBcblx0IgojICBkZWZpbmUgUkVTVE9SRV9GdWxsTGVuZ3RoICAgIm1vdmwgJSVyMTVkLCAiICAgICAvLyBtYXkgZ28gaW50byBlYXggb3IgZWN4CiMgIGlmIGRlZmluZWQoUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKSAgLy8gd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLgojICAgIGRlZmluZSBTQVZFX3IxNQojICAgIGRlZmluZSBSRVNUT1JFX3IxNQojICAgIGRlZmluZSBfQ0xPQkJFUl9yMTUgICAgICAgLCIlcjE1IgojICBlbHNlCiMgICAgZGVmaW5lIFNBVkVfcjE1ICAgICAgICAgICAicHVzaHEgJSVyMTUgIFxuXHQiCiMgICAgZGVmaW5lIFJFU1RPUkVfcjE1ICAgICAgICAicG9wcSAgJSVyMTUgIFxuXHQiCiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxNQojICBlbmRpZgojZWxzZQojICBkZWZpbmUgU0FWRV9lYnAgICAgICAgICAgICAgInB1c2hsICUlZWJwIFxuXHQiICAvLyBjbG9iYmVyIGxpc3QgZG9lc24ndCB3b3JrCiMgIGRlZmluZSBSRVNUT1JFX2VicCAgICAgICAgICAicG9wbCAgJSVlYnAgXG5cdCIgIC8vICBmb3IgJWVicCBvbiAzMi1iaXQ7IG5vdAojICBkZWZpbmUgX0NMT0JCRVJfZWJwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgY2xlYXIgd2h5IG5vdAojICBkZWZpbmUgQ0xPQkJFUl9lYnAKIyAgZGVmaW5lIFNBVkVfRnVsbExlbmd0aCAgICAgICJwdXNobCAlJWVheCBcblx0IgojICBkZWZpbmUgUkVTVE9SRV9GdWxsTGVuZ3RoICAgInBvcGwgIiAgICAgICAgICAgICAvLyBlYXggKGF2Zykgb3IgZWN4IChwYWV0aCkKIyAgZGVmaW5lIFNBVkVfcjE1CiMgIGRlZmluZSBSRVNUT1JFX3IxNQojICBkZWZpbmUgX0NMT0JCRVJfcjE1CiNlbmRpZgoKLy8gQ0xPQl9DT01NQV9lYnhfZWJwOiAgbmVlZCBjb21tYSBPTkxZIGlmIGJvdGggQ0xPQkJFUl9lYnAgYW5kIENMT0JCRVJfR09UX2VieAovLyAgICAgICAgICAgICAgICAgICAgICBoYXZlIHZhbHVlcywgaS5lLiwgb25seSBpZiBfX3g4Nl82NF9fIEFORCAhX19QSUNfXwojaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChfX1BJQ19fKQojICBkZWZpbmUgQ0xPQl9DT01NQV9lYnhfZWJwICAgICwgLy8gY2xvYmJlcmluZyBib3RoIGVicCBhbmQgZWJ4ID0+IG5lZWQgY29tbWEKI2Vsc2UKIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJ4X2VicAojZW5kaWYKCi8vIENMT0JfQ09NTUFfZWJYX3IxWDogIG5lZWQgY29tbWEgVU5MRVNTIGJvdGggQ0xPQkJFUl9lYnAgYW5kIENMT0JCRVJfR09UX2VieAovLyAgICAgICAgICAgICAgICAgICBhcmUgZW1wdHkgT1IgQ0xPQkJFUl9yMTFfcjEyX3IxMyBpcyBlbXB0eS0taS5lLiwgTk8gY29tbWEKLy8gICAgICAgICAgICAgICAgICAgaWYgKCFfX3g4Nl82NF9fIEFORCBfX1BJQ19fKSBPUiAhKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMCi8vICAgICAgICAgICAgICAgICAgIEFORCBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpICAgKGRvdWJsZSBzaWdoLi4uKQojaWYgKCFkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykpIHx8IFwKICAgICFkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBcCiAgICAhZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpCiMgIGRlZmluZSBDTE9CX0NPTU1BX2ViWF9yMVgKI2Vsc2UKIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJYX3IxWCAgICAsIC8vIGNsb2JiZXJpbmcgKGVicCBPUiBlYngpIEFORCByMTFfcjEyX3IxMwojZW5kaWYKCi8vIENMT0JfQ09MT05fZWJ4X2VicDogIG5lZWQgY29sb24gdW5sZXNzIENMT0JCRVJfZWJwIGFuZCBDTE9CQkVSX0dPVF9lYnggYXJlCi8vICAgICAgICAgICAgICAgICAgICAgIEJPVEggZW1wdHktLWkuZS4sIE5PIGNvbG9uIGlmICghX194ODZfNjRfXyBBTkQgX19QSUNfXykKLy8gQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWDogIGlmLCBpbiBhZGRpdGlvbiwgQ0xPQkJFUl9yMTFfcjEyX3IxMyBpcyBlbXB0eSwgdGhlbgovLyAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gY29sb24gZm9yIFBhZXRoIGJsb2NrcywgZWl0aGVyLS1pLmUuLCBOTyBjb2xvbgovLyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIShQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCBBTkQKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKQojaWYgKCFkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykpCiMgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnAKIyAgaWYgIShkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAmJiBcCiAgICAgICAgZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpKQojICAgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnBfcjFYCiMgIGVsc2UKIyAgICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWCAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYnggT1IgcjExX3IxMl9yMTMKIyAgZW5kaWYKI2Vsc2UKIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicCAgICAgICAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYngKIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicF9yMVggICAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYnggT1IgcjExX3IxMl9yMTMKI2VuZGlmCgojZW5kaWYgLy8gUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVwoKI2lmIGRlZmluZWQoX19QSUNfXykgIC8vIG1hY3JvcyB0byBzYXZlLCByZXN0b3JlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKIyAgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQojICAgIGRlZmluZSBTQVZFX0dPVF9lYnggICAgICJwdXNocSAlJXJieCBcblx0IgojICAgIGRlZmluZSBSRVNUT1JFX0dPVF9lYnggICJwb3BxICAlJXJieCBcblx0IgojICBlbHNlCiMgICAgZGVmaW5lIFNBVkVfR09UX2VieCAgICAgInB1c2hsICUlZWJ4IFxuXHQiCiMgICAgZGVmaW5lIFJFU1RPUkVfR09UX2VieCAgInBvcGwgICUlZWJ4IFxuXHQiCiMgIGVuZGlmCiMgIGRlZmluZSBfQ0xPQkJFUl9HT1RfZWJ4ICAgLy8gZXhwbGljaXRseSBzYXZlZCwgcmVzdG9yZWQgPT4gbm90IGNsb2JiZXJlZAojICBkZWZpbmUgQ0xPQkJFUl9HT1RfZWJ4CiNlbHNlCiMgIGRlZmluZSBTQVZFX0dPVF9lYngKIyAgZGVmaW5lIFJFU1RPUkVfR09UX2VieAojICBkZWZpbmUgX0NMT0JCRVJfR09UX2VieCAgICwiJWVieCIKIyAgZGVmaW5lIENMT0JCRVJfR09UX2VieCAgICAiJWVieCIKI2VuZGlmCgojZW5kaWYgLy8gUE5HX01NWF9DT0RFX1NVUFBPUlRFRAoKCgpzdGF0aWMgaW50IF9tbXhfc3VwcG9ydGVkID0gMjsgLyogMDogbm8gTU1YOyAxOiBNTVggc3VwcG9ydGVkOyAyOiBub3QgdGVzdGVkICovCgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgUCBOIEcgXyBNIE0gWCBfIFMgVSBQIFAgTyBSIFQgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qIEdSUiBOT1RFUzogICgxKSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyAzODYgb3IgYmV0dGVyIChwdXNoZmwvcG9wZmwpCiAqICAgICAgICAgICAgICgyKSBhbGwgaW5zdHJ1Y3Rpb25zIGNvbXBpbGUgd2l0aCBnY2MgMi43LjIuMyBhbmQgbGF0ZXIKICogICAgICAgICAgIHggKDMpIHRoZSBmdW5jdGlvbiBpcyBtb3ZlZCBkb3duIGhlcmUgdG8gcHJldmVudCBnY2MgZnJvbQogKiAgICAgICAgICAgeCAgICAgIGlubGluaW5nIGl0IGluIG11bHRpcGxlIHBsYWNlcyBhbmQgdGhlbiBiYXJmaW5nIGJlLQogKiAgICAgICAgICAgeCAgICAgIGNhdXNlIHRoZSAiLk5PVF9TVVBQT1JURUQiIGxhYmVsIGlzIG11bHRpcGx5IGRlZmluZWQKICogICAgICAgICAgICAgICAgICBbbmVlZCB0byByZXRlc3Qgd2l0aCBnY2MgMi43LjIuM10KICovCgovKiBHUlIgMjAwNzA1MjQ6ICBUaGlzIGRlY2xhcmF0aW9uIGFwcGFyZW50bHkgaXMgY29tcGF0aWJsZSB3aXRoIGJ1dCBzdXBlcnNlZGVzCiAqICAgdGhlIG9uZSBpbiBwbmcuaDsgaW4gYW55IGNhc2UsIHRoZSBnZW5lcmF0ZWQgb2JqZWN0IGZpbGUgaXMgc2xpZ2h0bHkKICogICBzbWFsbGVyLiAgSXQgaXMgdW5uZWNlc3Nhcnkgd2l0aCBnY2MgNC4xLjIsIGJ1dCBnY2MgMi54IGFwcGFyZW50bHkKICogICByZXBsaWNhdGVkIHRoZSAiLk5PVF9TVVBQT1JURUQiIGxhYmVsIGluIGVhY2ggbG9jYXRpb24gdGhlIGZ1bmN0aW9uIHdhcwogKiAgIGlubGluZWQsIGxlYWRpbmcgdG8gY29tcGlsYXRpb24gZXJyb3JzIGR1ZSB0byB0aGUgIm11bHRpcGx5IGRlZmluZWQiCiAqICAgbGFiZWwuICBPbGQgd29ya2Fyb3VuZCB3YXMgdG8gbGVhdmUgdGhlIGZ1bmN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcwogKiAgIGZpbGU7IG5ldyBvbmUgKHN0aWxsIHRlc3RpbmcpIGlzIHRvIHVzZSBhIGdjYy1zcGVjaWZpYyBmdW5jdGlvbiBhdHRyaWJ1dGUKICogICB0byBwcmV2ZW50IGlubGluaW5nLiAqLwppbnQgUE5HQVBJCnBuZ19tbXhfc3VwcG9ydCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpOwoKaW50IFBOR0FQSQpwbmdfbW14X3N1cHBvcnQodm9pZCkKewojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQogICAgaW50IHJlc3VsdDsKICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKI2lmIGRlZmluZWQoX194ODZfNjRfXykKICAgICAgICAicHVzaHEgJSVyYnggICAgICAgICAgXG5cdCIgIC8vIHJieCBnZXRzIGNsb2JiZXJlZCBieSBDUFVJRCBpbnN0cnVjdGlvbgogICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyByY3guLi4KICAgICAgICAicHVzaHEgJSVyZHggICAgICAgICAgXG5cdCIgIC8vIC4uLmFuZCByZHggKGJ1dCByY3ggJiByZHggc2FmZSBvbiBMaW51eCkKICAgICAgICAicHVzaGZxICAgICAgICAgICAgICAgXG5cdCIgIC8vIHNhdmUgRWZsYWcgdG8gc3RhY2sKICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrIGludG8gcmF4CiAgICAgICAgIm1vdnEgJSVyYXgsICUlcmN4ICAgIFxuXHQiICAvLyBtYWtlIGFub3RoZXIgY29weSBvZiBFZmxhZyBpbiByY3gKICAgICAgICAieG9ybCAkMHgyMDAwMDAsICUlZWF4IFxuXHQiIC8vIHRvZ2dsZSBJRCBiaXQgaW4gRWZsYWcgKGkuZS4sIGJpdCAyMSkKICAgICAgICAicHVzaHEgJSVyYXggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgbW9kaWZpZWQgRWZsYWcgYmFjayB0byBzdGFjawogICAgICAgICJwb3BmcSAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBtb2RpZmllZCB2YWx1ZSB0byBFZmxhZyByZWcKICAgICAgICAicHVzaGZxICAgICAgICAgICAgICAgXG5cdCIgIC8vIHNhdmUgRWZsYWcgdG8gc3RhY2sKICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrCiAgICAgICAgInB1c2hxICUlcmN4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG9yaWdpbmFsIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcGZxICAgICAgICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIG9yaWdpbmFsIEVmbGFnCiNlbHNlCiAgICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgIFxuXHQiICAvLyBlYnggZ2V0cyBjbG9iYmVyZWQgYnkgQ1BVSUQgaW5zdHJ1Y3Rpb24KICAgICAgICAicHVzaGwgJSVlY3ggICAgICAgICAgXG5cdCIgIC8vIHNvIGRvZXMgZWN4Li4uCiAgICAgICAgInB1c2hsICUlZWR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgZWR4IChidXQgZWN4ICYgZWR4IHNhZmUgb24gTGludXgpCiAgICAgICAgInB1c2hmbCAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcGwgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjayBpbnRvIGVheAogICAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gZWN4CiAgICAgICAgInhvcmwgJDB4MjAwMDAwLCAlJWVheCBcblx0IiAvLyB0b2dnbGUgSUQgYml0IGluIEVmbGFnIChpLmUuLCBiaXQgMjEpCiAgICAgICAgInB1c2hsICUlZWF4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG1vZGlmaWVkIEVmbGFnIGJhY2sgdG8gc3RhY2sKICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCiAgICAgICAgInB1c2hmbCAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcGwgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjawogICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjawogICAgICAgICJwb3BmbCAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBvcmlnaW5hbCBFZmxhZwojZW5kaWYKICAgICAgICAieG9ybCAlJWVjeCwgJSVlYXggICAgXG5cdCIgIC8vIGNvbXBhcmUgbmV3IEVmbGFnIHdpdGggb3JpZ2luYWwgRWZsYWcKICAgICAgICAianogMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGlmIHNhbWUsIENQVUlEIGluc3RyLiBpcyBub3Qgc3VwcG9ydGVkCgogICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICBcblx0IiAgLy8gc2V0IGVheCB0byB6ZXJvCi8vICAgICAgIi5ieXRlICAweDBmLCAweGEyICAgIFxuXHQiICAvLyBDUFVJRCBpbnN0cnVjdGlvbiAodHdvLWJ5dGUgb3Bjb2RlKQogICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICBcblx0IiAgLy8gZ2V0IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gaW5mbwogICAgICAgICJjbXBsICQxLCAlJWVheCAgICAgICBcblx0IiAgLy8gbWFrZSBzdXJlIGVheCByZXR1cm4gbm9uLXplcm8gdmFsdWUKICAgICAgICAiamwgMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGlmIGVheCBpcyB6ZXJvLCBNTVggaXMgbm90IHN1cHBvcnRlZAoKICAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgXG5cdCIgIC8vIHNldCBlYXggdG8gemVybyBhbmQuLi4KICAgICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIC4uLmluY3JlbWVudCBlYXggdG8gMS4gIFRoaXMgcGFpciBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFzdGVyIHRoYW4gdGhlIGluc3RydWN0aW9uICJtb3YgZWF4LCAxIgogICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICBcblx0IiAgLy8gZ2V0IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gaW5mbyBhZ2FpbgogICAgICAgICJhbmRsICQweDgwMDAwMCwgJSVlZHggXG5cdCIgLy8gbWFzayBvdXQgYWxsIGJpdHMgYnV0IE1NWCBiaXQgKDIzKQogICAgICAgICJjbXBsICQwLCAlJWVkeCAgICAgICBcblx0IiAgLy8gMCA9IE1NWCBub3Qgc3VwcG9ydGVkCiAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBub24temVybyA9IHllcywgTU1YIElTIHN1cHBvcnRlZAoKICAgICAgICAibW92bCAkMSwgJSVlYXggICAgICAgXG5cdCIgIC8vIHNldCByZXR1cm4gdmFsdWUgdG8gMQogICAgICAgICJqbXAgIDFmICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORTogIGhhdmUgTU1YIHN1cHBvcnQKCiAgICAiMDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyAuTk9UX1NVUFBPUlRFRDogdGFyZ2V0IGxhYmVsIGZvciBqdW1wIGluc3RydWN0aW9ucwogICAgICAgICJtb3ZsICQwLCAlJWVheCAgICAgICBcblx0IiAgLy8gc2V0IHJldHVybiB2YWx1ZSB0byAwCiAgICAiMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyAuUkVUVVJOOiB0YXJnZXQgbGFiZWwgZm9yIGp1bXAgaW5zdHJ1Y3Rpb25zCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICAgICAgInBvcHEgJSVyZHggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIHJkeAogICAgICAgICJwb3BxICUlcmN4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSByY3gKICAgICAgICAicG9wcSAlJXJieCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgcmJ4CiNlbHNlCiAgICAgICAgInBvcGwgJSVlZHggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIGVkeAogICAgICAgICJwb3BsICUlZWN4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBlY3gKICAgICAgICAicG9wbCAlJWVieCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgZWJ4CiNlbmRpZgoKLy8gICAgICAicmV0ICAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIERPTkU6ICBubyBNTVggc3VwcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGZhbGwgdGhyb3VnaCB0byBzdGFuZGFyZCBDICJyZXQiKQoKICAgICAgICA6ICI9YSIgKHJlc3VsdCkgICAgICAgICAgICAgIC8vIG91dHB1dCBsaXN0CgogICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHZhcmlhYmxlcyB1c2VkIG9uIGlucHV0IChub25lKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNsb2JiZXIgbGlzdAovLyAgICAgICwgIiVlYngiLCAiJWVjeCIsICIlZWR4IiAgICAgLy8gR1JSOiAgd2UgaGFuZGxlIHRoZXNlIG1hbnVhbGx5Ci8vICAgICAgLCAibWVtb3J5IiAgIC8vIGlmIHdyaXRlIHRvIGEgdmFyaWFibGUgZ2NjIHRob3VnaHQgd2FzIGluIGEgcmVnCi8vICAgICAgLCAiY2MiICAgICAgIC8vICJjb25kaXRpb24gY29kZXMiIChmbGFnIGJpdHMpCiAgICApOwogICAgX21teF9zdXBwb3J0ZWQgPSByZXN1bHQ7CiNlbHNlCiAgICBfbW14X3N1cHBvcnRlZCA9IDA7CiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCgogICAgcmV0dXJuIF9tbXhfc3VwcG9ydGVkOwp9CgoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICBQIE4gRyBfIEMgTyBNIEIgSSBOIEUgXyBSIE8gVyAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpCgojZGVmaW5lIEJQUDIgIDIKI2RlZmluZSBCUFAzICAzIC8qIGJ5dGVzIHBlciBwaXhlbCAoYS5rLmEuIHBpeGVsX2J5dGVzKSAqLwojZGVmaW5lIEJQUDQgIDQKI2RlZmluZSBCUFA2ICA2IC8qIChkZWZpbmVkIG9ubHkgdG8gaGVscCBhdm9pZCBjdXQtYW5kLXBhc3RlIGVycm9ycykgKi8KI2RlZmluZSBCUFA4ICA4CgovKiBDb21iaW5lcyB0aGUgcm93IHJlY2VudGx5IHJlYWQgaW4gd2l0aCB0aGUgcHJldmlvdXMgcm93LgogICBUaGlzIHJvdXRpbmUgdGFrZXMgY2FyZSBvZiBhbHBoYSBhbmQgdHJhbnNwYXJlbmN5IGlmIHJlcXVlc3RlZC4KICAgVGhpcyByb3V0aW5lIGFsc28gaGFuZGxlcyB0aGUgdHdvIG1ldGhvZHMgb2YgcHJvZ3Jlc3NpdmUgZGlzcGxheQogICBvZiBpbnRlcmxhY2VkIGltYWdlcywgZGVwZW5kaW5nIG9uIHRoZSBtYXNrIHZhbHVlLgogICBUaGUgbWFzayB2YWx1ZSBkZXNjcmliZXMgd2hpY2ggcGl4ZWxzIGFyZSB0byBiZSBjb21iaW5lZCB3aXRoCiAgIHRoZSByb3cuICBUaGUgcGF0dGVybiBhbHdheXMgcmVwZWF0cyBldmVyeSA4IHBpeGVscywgc28ganVzdCA4CiAgIGJpdHMgYXJlIG5lZWRlZC4gIEEgb25lIGluZGljYXRlcyB0aGUgcGl4ZWwgaXMgdG8gYmUgY29tYmluZWQ7IGEKICAgemVybyBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIHNraXBwZWQuICBUaGlzIGlzIGluIGFkZGl0aW9uCiAgIHRvIGFueSBhbHBoYSBvciB0cmFuc3BhcmVuY3kgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXhlbC4KICAgSWYgeW91IHdhbnQgYWxsIHBpeGVscyB0byBiZSBjb21iaW5lZCwgcGFzcyAweGZmICgyNTUpIGluIG1hc2suICovCgovKiBVc2UgdGhpcyByb3V0aW5lIGZvciB0aGUgeDg2IHBsYXRmb3JtIC0gaXQgdXNlcyBhIGZhc3RlciBNTVggcm91dGluZQogICBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBNTVguICovCgp2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX2NvbWJpbmVfcm93KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19ieXRlcCByb3csIGludCBtYXNrKQp7CiAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NvbWJpbmVfcm93IChwbmdnY2NyZC5jKVxuIik7CgojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQogICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiNlbmRpZgogICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgIH0KI2VuZGlmCgogICBpZiAobWFzayA9PSAweGZmKQogICB7CiAgICAgIHBuZ19kZWJ1ZygyLCJtYXNrID09IDB4ZmY6ICBkb2luZyBzaW5nbGUgcG5nX21lbWNweSgpXG4iKTsKICAgICAgcG5nX21lbWNweShyb3csIHBuZ19wdHItPnJvd19idWYgKyAxLAogICAgICAgKHBuZ19zaXplX3QpUE5HX1JPV0JZVEVTKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoLHBuZ19wdHItPndpZHRoKSk7CiAgIH0KICAgZWxzZSAgIC8qIChwbmdfY29tYmluZV9yb3coKSBpcyBuZXZlciBjYWxsZWQgd2l0aCBtYXNrID09IDApICovCiAgIHsKICAgICAgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkKICAgICAgewogICAgICAgICAvKiBtb3N0IGNvbW1vbiBjYXNlOiAgY29tYmluaW5nIDMyLWJpdCBSR0JBICovCiAgICAgICAgIGNhc2UgMzI6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKCiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQogICAgICAgICAgICAgICAgLyogJiYgX21teF9zdXBwb3J0ZWQgKi8gKQojZWxzZQogICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKICAgICAgICAgICAgICAgaW50IGRpZmY7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9hOyAgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJyBlcnJvcgogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfZDsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7CiAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAogICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKCiAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCiAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwoKICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMzJfMCAiLCAlJW1tMCBcblx0IiAvLyBfbWFzazMyXzAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMzJfMQogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2szMl8yCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMzJfMyAiLCAlJW1tMyBcblx0IiAvLyBfbWFzazMyXzMKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0zICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTMgICAgIFxuXHQiCgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJSVlc2kgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICUlZWRpICAgIFxuXHQiIC8vIGxvYWQgZGVzdAoKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGxjcgogICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wMzJlbmQgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AzMjogICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglJWVzaSksICUlbW00ICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglJWVkaSksICUlbW03ICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJSVlZGkpICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVzaSksICUlbW01ICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0xLCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVkaSksICUlbW02ICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsIDgoJSVlZGkpICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglJWVzaSksICUlbW02IFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTIsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0yLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglJWVkaSksICUlbW03IFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW00LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJSVlZGkpIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDI0KCUlZXNpKSwgJSVtbTcgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTMsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDI0KCUlZWRpKSwgJSVtbTQgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNCwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTUsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCAyNCglJWVkaSkgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDMyLCAlJWVzaSAgICAgICBcblx0IiAvLyBpbmMgYnkgMzIgYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDMyLCAlJWVkaSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMzIgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AzMmVuZDogICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMzIgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIGxvdyBieXRlID0+IGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMzI6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDMyICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAoJSVlc2kpLCAlJWVheCAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICglJWVkaSkgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwMzI6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDQsICUlZXNpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQ0LCAlJWVkaSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDMyICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQzMjogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSwgICAgICAvLyBlZGkKICAgICAgICAgICAgICAgICAgICAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4Ci8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAogICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spICAgICAgICAgLy8gZWR4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAvKiBtbXggX25vdCBzdXBwb3J0ZWQgLSBVc2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA0ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQNCAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQNCAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKCiAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFA0OwogICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCgogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMzIgYnBwICovCgogICAgICAgICBjYXNlIDE6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwogICAgICAgICAgICBpbnQgc19pbmMsIHNfc3RhcnQsIHNfZW5kOwogICAgICAgICAgICBpbnQgbTsKICAgICAgICAgICAgaW50IHNoaWZ0OwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwoKICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgZHAgPSByb3c7CiAgICAgICAgICAgIG0gPSAweDgwOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgc19lbmQgPSA3OwogICAgICAgICAgICAgICAgc19pbmMgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwogICAgICAgICAgICAgICAgc19lbmQgPSAwOwogICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKG0gJiBtYXNrKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsKCiAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDE7CiAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBzaGlmdCkpICYgMHhmZik7CiAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHZhbHVlIDw8IHNoaWZ0KTsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgaWYgKHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgc3ArKzsKICAgICAgICAgICAgICAgICAgZHArKzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwoKICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMSBicHAgKi8KCiAgICAgICAgIGNhc2UgMjogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHA7CiAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CiAgICAgICAgICAgIGludCBtOwogICAgICAgICAgICBpbnQgc2hpZnQ7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIGludCB2YWx1ZTsKCiAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgIGRwID0gcm93OwogICAgICAgICAgICBtID0gMHg4MDsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICBzX2VuZCA9IDY7CiAgICAgICAgICAgICAgIHNfaW5jID0gMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA2OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbmdfcHRyLT53aWR0aDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHgzOwogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwKys7CiAgICAgICAgICAgICAgICAgIGRwKys7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMiBicHAgKi8KCiAgICAgICAgIGNhc2UgNDogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHA7CiAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CiAgICAgICAgICAgIGludCBtOwogICAgICAgICAgICBpbnQgc2hpZnQ7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIGludCB2YWx1ZTsKCiAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgIGRwID0gcm93OwogICAgICAgICAgICBtID0gMHg4MDsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICBzX2VuZCA9IDQ7CiAgICAgICAgICAgICAgIHNfaW5jID0gNDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA0OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKG0gJiBtYXNrKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweGY7CiAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweGYwZiA+PiAoNCAtIHNoaWZ0KSkgJiAweGZmKTsKICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwogICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICBzcCsrOwogICAgICAgICAgICAgICAgICBkcCsrOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgICAgIGlmIChtID09IDEpCiAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIG0gPj49IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDQgYnBwICovCgogICAgICAgICBjYXNlIDg6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CiAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CgojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKICAgICAgICAgICAgICAgIC8qICYmIF9tbXhfc3VwcG9ydGVkICovICkKI2Vsc2UKICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgIGludCBkaWZmOwogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYTsgICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcgZXJyb3IKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2Q7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOwogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwogICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0CgogICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzawogICAgICAgICAgICAgICAgICAibW92ZCAgICAgICUlZWR4LCAlJW1tNyAgICAgXG5cdCIgLy8gbG9hZCBiaXQgcGF0dGVybgogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCiAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgogICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKCiAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzhfMCAiLCAlJW1tMCAgXG5cdCIgLy8gX21hc2s4XzAgLT4gbW0wCiAgICAgICAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIgLy8gbm9uemVybyBpZiBrZWVwIGJ5dGUKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiIC8vIHplcm9zLT4xcywgdiB2ZXJzYQoKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgIFxuXHQiIC8vIGxvYWQgbGVuZ3RoIG9mIGxpbmUKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBzcmNwdHIsICUlZXNpICAgIFxuXHQiIC8vIGxvYWQgc291cmNlCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlJWVkaSAgICBcblx0IiAvLyBsb2FkIGRlc3QKCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IiAvLyBsZW4gPT0gMCA/CiAgICAgICAgICAgICAgICAgICJqZSAgICAgICAgbWFpbmxvb3A4ZW5kICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDg6ICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUlZXNpKSwgJSVtbTQgICBcblx0IiAvLyAqc3JjcHRyCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAoJSVlZGkpLCAlJW1tNiAgIFxuXHQiIC8vICpkc3RwdHIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQ4LCAlJWVzaSAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDggYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDgsICUlZWRpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wOCAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3A4ZW5kOiAgICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kOCAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIG1ha2UgbG93IGJ5dGUsIGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wODogICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDggICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAoJSVlc2kpLCAlJWFsICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgJSVhbCwgKCUlZWRpKSAgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwODogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJpbmNsICAgICAgJSVlc2kgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiaW5jbCAgICAgICUlZWRpICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDggICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQ4OiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgOiAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0ciksICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgICAgICAgIjAiIChkaWZmKSwgICAgICAgIC8vIGVheAovLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSAgICAgICAgIC8vIGVkeAoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTQiLCAiJW1tNiIsICIlbW03IiAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgLyogbW14IF9ub3Qgc3VwcG9ydGVkIC0gVXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwojZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IGxlbjsgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmIC8qICpCUFAxICovIDsKICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCA4IGJwcCAqLwoKICAgICAgICAgY2FzZSAxNjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwoKI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCiAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICBpbnQgZGlmZjsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2E7ICAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnIGVycm9yCiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9kOwogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CiAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAoKICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCgogICAgICAgICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0sxNl8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrMTZfMCAtPiBtbTAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0sxNl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMTZfMSAtPiBtbTEKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMSAgICAgXG5cdCIKCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlJWVzaSAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJSVlZGkgICAgXG5cdCIgLy8gbG9hZCBkZXN0CgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBtYWlubG9vcDE2ZW5kICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wMTY6ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJSVlc2kpLCAlJW1tNCAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJSVlZGkpLCAlJW1tNyAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCUlZWRpKSAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJSVlc2kpLCAlJW1tNSAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTEsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJSVlZGkpLCAlJW1tNiAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCA4KCUlZWRpKSAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDE2LCAlJWVzaSAgICAgICBcblx0IiAvLyBpbmMgYnkgMTYgYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDE2LCAlJWVkaSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMTYgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AxNmVuZDogICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMTYgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIG1ha2UgbG93IGJ5dGUsIGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMTY6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDE2ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAoJSVlc2kpLCAlJWF4ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgKCUlZWRpKSAgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwMTY6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDIsICUlZXNpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQyLCAlJWVkaSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDE2ICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQxNjogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncwovLyB3YXMgKHVubWFzaykgICAgICIgIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKICAgICAgICAgICAgICAgICAgICAiMSIgKGxlbiksICAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgICAgICAgIjIiIChtYXNrKSwgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kKICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW00IiAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgLyogbW14IF9ub3Qgc3VwcG9ydGVkIC0gVXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwojZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQMiAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDIgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDIgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDIgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CgogICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQMjsKICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDE2IGJwcCAqLwoKICAgICAgICAgY2FzZSAyNDogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwoKI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCiAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICBpbnQgZGlmZjsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2E7ICAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnIGVycm9yCiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9kOwogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CiAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAoKICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCgogICAgICAgICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0syNF8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrMjRfMCAtPiBtbTAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0syNF8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMjRfMSAtPiBtbTEKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0syNF8yICIsICUlbW0yIFxuXHQiIC8vIF9tYXNrMjRfMiAtPiBtbTIKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0yICAgICBcblx0IgoKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgIFxuXHQiIC8vIGxvYWQgbGVuZ3RoIG9mIGxpbmUKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBzcmNwdHIsICUlZXNpICAgIFxuXHQiIC8vIGxvYWQgc291cmNlCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlJWVkaSAgICBcblx0IiAvLyBsb2FkIGRlc3QKCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wMjRlbmQgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AyNDogICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglJWVzaSksICUlbW00ICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglJWVkaSksICUlbW03ICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJSVlZGkpICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVzaSksICUlbW01ICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0xLCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVkaSksICUlbW02ICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsIDgoJSVlZGkpICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglJWVzaSksICUlbW02IFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTIsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0yLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglJWVkaSksICUlbW03IFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW00LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJSVlZGkpIFxuXHQiCgogICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQyNCwgJSVlc2kgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDI0IGJ5dGVzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQyNCwgJSVlZGkgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInN1YmwgICAgICAkOCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGRlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKCiAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3AyNCAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDI0ZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICUlZWN4ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQyNCAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbWFzaywgJSVlZHggICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCgogICAgICAgICAgICAgICAgInNlY29uZGxvb3AyNDogICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwMjQgICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAogICAgICAgICAgICAgICAgICAibW92dyAgICAgICglJWVzaSksICUlYXggICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAlJWF4LCAoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJ4b3JsICAgICAgJSVlYXgsICUlZWF4ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92YiAgICAgIDIoJSVlc2kpLCAlJWFsICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAlJWFsLCAyKCUlZWRpKSAgIFxuXHQiCgogICAgICAgICAgICAgICAgInNraXAyNDogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImFkZGwgICAgICAkMywgJSVlc2kgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDMsICUlZWRpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMjQgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgImVuZDI0OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCiAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgIDogIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaSAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpLCAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICIwIiAoZGlmZiksICAgICAgICAvLyBlYXgKLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4CiAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAogICAgICAgICAgICAgICAgICAgICIxIiAobWFzaykgICAgICAgICAvLyBlZHgKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIC8qIG1teCBfbm90IHN1cHBvcnRlZCAtIFVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDMgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFAzICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFAzICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwogICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFAzICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDM7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCAyNCBicHAgKi8KCiAgICAgICAgIGNhc2UgNDg6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKCiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQogICAgICAgICAgICAgICAgLyogJiYgX21teF9zdXBwb3J0ZWQgKi8gKQojZWxzZQogICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKICAgICAgICAgICAgICAgaW50IGRpZmY7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9hOyAgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJyBlcnJvcgogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfZDsKICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7CiAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAogICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKCiAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCiAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwoKICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfMCAiLCAlJW1tMCBcblx0IiAvLyBfbWFzazQ4XzAgLT4gbW0wCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfMSAiLCAlJW1tMSBcblx0IiAvLyBfbWFzazQ4XzEgLT4gbW0xCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfMiAiLCAlJW1tMiBcblx0IiAvLyBfbWFzazQ4XzIgLT4gbW0yCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfMyAiLCAlJW1tMyBcblx0IiAvLyBfbWFzazQ4XzMgLT4gbW0zCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfNCAiLCAlJW1tNCBcblx0IiAvLyBfbWFzazQ4XzQgLT4gbW00CiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfNSAiLCAlJW1tNSBcblx0IiAvLyBfbWFzazQ4XzUgLT4gbW01CiAgICAgICAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTEgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0yICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTMgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tNSAgICAgXG5cdCIKCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlJWVzaSAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJSVlZGkgICAgXG5cdCIgLy8gbG9hZCBkZXN0CgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBtYWlubG9vcDQ4ZW5kICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wNDg6ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJSVlc2kpLCAlJW1tNyAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAoJSVlZGkpLCAlJW1tNiAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCAoJSVlZGkpICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVzaSksICUlbW02ICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0xLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgOCglJWVkaSksICUlbW03ICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgOCglJWVkaSkgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUlZXNpKSwgJSVtbTYgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMiwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDE2KCUlZWRpKSwgJSVtbTcgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDE2KCUlZWRpKSBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAyNCglJWVzaSksICUlbW03IFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTMsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0zLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAyNCglJWVkaSksICUlbW02IFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCAyNCglJWVkaSkgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMzIoJSVlc2kpLCAlJW1tNiBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW00LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgMzIoJSVlZGkpLCAlJW1tNyBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMzIoJSVlZGkpIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDQwKCUlZXNpKSwgJSVtbTcgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDQwKCUlZWRpKSwgJSVtbTYgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsIDQwKCUlZWRpKSBcblx0IgoKICAgICAgICAgICAgICAgICAgImFkZGwgICAgICAkNDgsICUlZXNpICAgICAgIFxuXHQiIC8vIGluYyBieSA0OCBieXRlcyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAgImFkZGwgICAgICAkNDgsICUlZWRpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCgogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wNDggICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3A0OGVuZDogICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kNDggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIG1ha2UgbG93IGJ5dGUsIGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wNDg6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDQ4ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAoJSVlc2kpLCAlJWVheCAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICglJWVkaSkgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwNDg6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDQsICUlZXNpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQ0LCAlJWVkaSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDQ4ICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQ0ODogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSwgICAgICAvLyBlZGkKICAgICAgICAgICAgICAgICAgICAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4Ci8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAogICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spICAgICAgICAgLy8gZWR4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAvKiBtbXggX25vdCBzdXBwb3J0ZWQgLSBVc2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA2ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQNiAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNiAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQNiAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKCiAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFA2OwogICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCgogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgNDggYnBwICovCgogICAgICAgICBjYXNlIDY0OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CiAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CiAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQOCAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDggKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDggKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDggKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwoKICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CgogICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQODsKICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgNjQgYnBwICovCgogICAgICAgICBkZWZhdWx0OiAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAhPSAxLDIsNCw4LDE2LDI0LDMyLDQ4LDY0ICovCiAgICAgICAgIHsKICAgICAgICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCiAgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJbnZhbGlkIHJvd19pbmZvLnBpeGVsX2RlcHRoIGluIHBuZ2djY3JkIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgIH0gLyogZW5kIHN3aXRjaCAocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgpICovCgogICB9IC8qIGVuZCBpZiAobm9uLXRyaXZpYWwgbWFzaykgKi8KCn0gLyogZW5kIHBuZ19jb21iaW5lX3JvdygpICovCgojZW5kaWYgLyogUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XICovCgoKCgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgIFAgTiBHIF8gRCBPIF8gUiBFIEEgRCBfIEkgTiBUIEUgUiBMIEEgQyBFICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCiNpZiBkZWZpbmVkKFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCkKI2lmIGRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFKQoKLyogcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgaXMgY2FsbGVkIGFmdGVyIGFueSAxNi1iaXQgdG8gOC1iaXQgY29udmVyc2lvbgogKiBoYXMgdGFrZW4gcGxhY2UuICBbR1JSOiB3aGF0IG90aGVyIHN0ZXBzIGNvbWUgYmVmb3JlIGFuZC9vciBhZnRlcj9dCiAqLwoKdm9pZCAvKiBQUklWQVRFICovCnBuZ19kb19yZWFkX2ludGVybGFjZShwbmdfc3RydWN0cCBwbmdfcHRyKQp7CiAgIHBuZ19yb3dfaW5mb3Agcm93X2luZm8gPSAmKHBuZ19wdHItPnJvd19pbmZvKTsKICAgcG5nX2J5dGVwIHJvdyA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICBpbnQgcGFzcyA9IHBuZ19wdHItPnBhc3M7CiNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKICAgcG5nX3VpbnRfMzIgdHJhbnNmb3JtYXRpb25zID0gcG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zOwojZW5kaWYKCiAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlIChwbmdnY2NyZC5jKVxuIik7CgojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQogICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiNlbmRpZgogICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgIH0KI2VuZGlmCgogICBpZiAocm93ICE9IE5VTEwgJiYgcm93X2luZm8gIT0gTlVMTCkKICAgewogICAgICBwbmdfdWludF8zMiBmaW5hbF93aWR0aDsKCiAgICAgIGZpbmFsX3dpZHRoID0gcm93X2luZm8tPndpZHRoICogcG5nX3Bhc3NfaW5jW3Bhc3NdOwoKICAgICAgc3dpdGNoIChyb3dfaW5mby0+cGl4ZWxfZGVwdGgpCiAgICAgIHsKICAgICAgICAgY2FzZSAxOgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcCwgZHA7CiAgICAgICAgICAgIGludCBzc2hpZnQsIGRzaGlmdDsKICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKICAgICAgICAgICAgcG5nX2J5dGUgdjsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMyk7CiAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDMpOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3NoaWZ0ID0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChpbnQpKChmaW5hbF93aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzc2hpZnQgPSA3IC0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IDcgLSAoaW50KSgoZmluYWxfd2lkdGggKyA3KSAmIDcpOwogICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgc19lbmQgPSA3OwogICAgICAgICAgICAgICBzX2luYyA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4MSk7CiAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHg3ZjdmID4+ICg3IC0gZHNoaWZ0KSkgJiAweGZmKTsKICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodiA8PCBkc2hpZnQpOwogICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIGRwLS07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKHNzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICBzcC0tOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgc3NoaWZ0ICs9IHNfaW5jOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CgogICAgICAgICBjYXNlIDI6CiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwoKICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdCkoKHJvd19pbmZvLT53aWR0aCAtIDEpID4+IDIpOwogICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAyKTsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDMpICYgMykgPDwgMSk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoKGZpbmFsX3dpZHRoICsgMykgJiAzKSA8PCAxKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDY7CiAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgc19pbmMgPSAtMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMyAtICgocm93X2luZm8tPndpZHRoICsgMykgJiAzKSkgPDwgMSk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoMyAtICgoZmluYWxfd2lkdGggKyAzKSAmIDMpKSA8PCAxKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CiAgICAgICAgICAgICAgIHNfZW5kID0gNjsKICAgICAgICAgICAgICAgc19pbmMgPSAyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSByb3dfaW5mby0+d2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwogICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Myk7CiAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gZHNoaWZ0KSkgJiAweGZmKTsKICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodiA8PCBkc2hpZnQpOwogICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIGRwLS07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKHNzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICBzcC0tOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgc3NoaWZ0ICs9IHNfaW5jOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CgogICAgICAgICBjYXNlIDQ6CiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwoKICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdCkoKHJvd19pbmZvLT53aWR0aCAtIDEpID4+IDEpOwogICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAxKTsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDEpICYgMSkgPDwgMik7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoKGZpbmFsX3dpZHRoICsgMSkgJiAxKSA8PCAyKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7CiAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgc19pbmMgPSAtNDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMSAtICgocm93X2luZm8tPndpZHRoICsgMSkgJiAxKSkgPDwgMik7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoMSAtICgoZmluYWxfd2lkdGggKyAxKSAmIDEpKSA8PCAyKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CiAgICAgICAgICAgICAgIHNfZW5kID0gNDsKICAgICAgICAgICAgICAgc19pbmMgPSA0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSByb3dfaW5mby0+d2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwogICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Zik7CiAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBkc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7CiAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgICAgZHAtLTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwLS07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KCiAgICAgICAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCiAgICAgICAgIGRlZmF1bHQ6IC8qIDgtYml0IG9yIGxhcmdlciAodGhpcyBpcyB3aGVyZSB0aGUgcm91dGluZSBpcyBtb2RpZmllZCkgKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3B0ciwgZHA7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgIGludCB3aWR0aCA9IChpbnQpcm93X2luZm8tPndpZHRoOwoKICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoID4+IDMpOwoKICAgICAgICAgICAgLyogcG9pbnQgc3B0ciBhdCB0aGUgbGFzdCBwaXhlbCBpbiB0aGUgcHJlLWV4cGFuZGVkIHJvdzogKi8KICAgICAgICAgICAgc3B0ciA9IHJvdyArICh3aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7CgogICAgICAgICAgICAvKiBwb2ludCBkcCBhdCB0aGUgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiB0aGUgZXhwYW5kZWQgcm93OiAqLwogICAgICAgICAgICBkcCA9IHJvdyArIChmaW5hbF93aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7CgogICAgICAgICAgICAvKiBOZXcgY29kZSBieSBOaXJhdiBDaGhhdHJhcGF0aSAtIEludGVsIENvcnBvcmF0aW9uICovCgojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UpCiAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gMykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwogICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CiAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHVtbXlfdmFsdWVfYTsKCiAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIxLCAlJWVkaSAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKCiAgICAgICAgICAgICAgICAgICAgICIubG9vcDNfcGFzczA6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCB4IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIHogeiB6IHogegogICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDgsICUlbW0xICAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHogMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTIsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIDIgMQogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTMgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0wICAgICAgICBcblx0IiAvLyAwIDIgMSAwIDIgMSB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW00ICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIDIgMQogICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0wLCAlJW1tMyAgXG5cdCIgLy8gMCAyIDEgMCAyIDEgMCAyCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW00LCAxNiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDMyLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogeiAwIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0zLCA4KCUlZWRpKSAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW00LCAlJW1tMCAgXG5cdCIgLy8gMSAwIDIgMSAwIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzLCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDI0LCAlJWVkaSAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzMCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeAojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgICAgICAgICAgICAgLy8gZm9ybWVybHkgX2NvbnN0NDoKICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYzY0Ll9hbWFzazVfM18wKSAgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQojZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9hbWFzazVfM18wKSAgICAgICAvLyAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCiNlbmRpZgoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICwgIiVtbTMiLCAiJW1tNCIKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwogICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CiAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHVtbXlfdmFsdWVfYTsKCiAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDksICUlZWRpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKCiAgICAgICAgICAgICAgICAgICAgICIubG9vcDNfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCB4IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIHogeiB6IHogegogICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDgsICUlbW0xICAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHogMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTIsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIDIgMQogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgNCglJWVkaSkgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiAyIDEgMCAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMywgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQxMiwgJSVlZGkgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDNfcGFzczIgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3gKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpICAgICAgICAgICAgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2M2NC5fYW1hc2s1XzNfMCkgIC8vICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYW1hc2s1XzNfMCkgICAgICAgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQojZW5kaWYKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICovCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgLSA4OyAgIC8vIEdSUjogIGh1aD8KICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aF9tbXggPSAwOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyA4IG9yIDkgcGl4LCAyNCBvciAyNyBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwogICAgICAgICAgICAgICAgICAgICAgICAvLyBzcHRyIHBvaW50cyBhdCBsYXN0IHBpeGVsIGluIHByZS1leHBhbmRlZCByb3cKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHAgcG9pbnRzIGF0IGxhc3QgcGl4ZWwgcG9zaXRpb24gaW4gZXhwYW5kZWQgcm93CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwogICAgICAgICAgICAgICAgICAgICAgICBsb25nIGR1bW15X3ZhbHVlX2E7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHVtbXlfdmFsdWVfZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDMsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ5LCAlJWVkaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHBuZ19wYXNzX2luY1twYXNzXSArIDEpKnBpeGVsX2J5dGVzCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AzX3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIHggeCA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8geCB4IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB4IHggNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDQgMyAyIDEgMCB6IHogegogICAgICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTMpLCAlJW1tMSAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkMjQsICUlbW0yICAgICAgICBcblx0IiAvLyB6IHogeiB4IHggNSA0IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDQgMyAyIDEgMCAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTMgICAgICAgXG5cdCIgLy8geiB6IHogeCB4IDUgNCAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkOCwgJSVtbTIgICAgICAgICBcblx0IiAvLyB6IHogeCB4IDUgNCAzIHoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0zICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogeCB4IDUKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCU0KSwgJSVtbTMgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB6IHogNQogICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0zLCAlJW1tMiAgICAgICAgXG5cdCIgLy8geiB6IHggeCA1IDQgMyA1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ2LCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAlJW1tMiwgOCglJWVkaSkgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDEyLCAlJWVkaSAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzNCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeAojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgICAgICAgICAgICAgLy8gZm9ybWVybHkgX2NvbnN0NCBhbmQgX2NvbnN0NjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYzY0Ll9hbWFzazVfM18wKSwgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiAoJl9jNjQuX2FtYXNrN18xXzApICAvLyAoMHgwMDAwMDAwMDAwMDAwMEZGTEwpCiNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2FtYXNrNV8zXzApLCAgICAgIC8vICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgKCZfYW1hc2s3XzFfMCkgICAgICAgLy8gKDB4MDAwMDAwMDAwMDAwMDBGRkxMKQojZW5kaWYKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAsICIlbW0yIiwgIiVtbTMiCiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teCozOwogICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqNjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDM7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAzICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDEpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMikgPDwgMik7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CgogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzLCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMzEsICUlZWRpICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDFfcGFzczA6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAxIDEgMSAxIDAgMCAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0zICAgICAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMCAwIDAgMCAwIDAgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTMsICUlbW0zICBcblx0IiAvLyAxIDEgMSAxIDEgMSAxIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tod2QgJSVtbTIsICUlbW0yICBcblx0IiAvLyAzIDMgMyAzIDIgMiAyIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDgoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICBcblx0IiAvLyAzIDMgMyAzIDIgMiAyIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMiwgJSVtbTIgIFxuXHQiIC8vIDIgMiAyIDIgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW00LCAlJW1tNCAgXG5cdCIgLy8gMyAzIDMgMyAzIDMgMyAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAxNiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDI0KCUlZWRpKSAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzMiwgJSVlZGkgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAsICIlbW0zIiwgIiVtbTQiCiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14Kjg7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICAgICAgICAgICAgIC8qIEkgc2ltcGxpZmllZCB0aGlzIHBhcnQgaW4gdmVyc2lvbiAxLjAuNGUKICAgICAgICAgICAgICAgICAgICAgICAgKiBoZXJlIGFuZCBpbiBzZXZlcmFsIG90aGVyIGluc3RhbmNlcyB3aGVyZQogICAgICAgICAgICAgICAgICAgICAgICAqIHBpeGVsX2J5dGVzID09IDEgIC0tIEdSLVAKICAgICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAqIE9yaWdpbmFsIGNvZGU6CiAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgKiBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICAqIHBuZ19tZW1jcHkodiwgc3B0ciwgcGl4ZWxfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAqIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgKiB7CiAgICAgICAgICAgICAgICAgICAgICAgICogICAgcG5nX21lbWNweShkcCwgdiwgcGl4ZWxfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAqICAgIGRwIC09IHBpeGVsX2J5dGVzOwogICAgICAgICAgICAgICAgICAgICAgICAqIH0KICAgICAgICAgICAgICAgICAgICAgICAgKiBzcHRyIC09IHBpeGVsX2J5dGVzOwogICAgICAgICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICogUmVwbGFjZW1lbnQgY29kZSBpcyBpbiB0aGUgbmV4dCB0aHJlZSBsaW5lczoKICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMikgPDwgMik7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CgogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzLCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTUsICUlZWRpICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDFfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDMgMiAyIDEgMSAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAxIDEgMSAwIDAgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tod2QgJSVtbTEsICUlbW0xICBcblx0IiAvLyAzIDMgMyAzIDIgMiAyIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglJWVkaSkgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDE2LCAlJWVkaSAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMV9wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAvLyBlc2kgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoX21teCkgIC8vIGVjeAoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjQ7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8qICYmICgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgKi8KICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAzKSA8PCAzKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMC0zIHBpeGVscyA9PiAwLTMgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDcsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQxNSwgJSVlZGkgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglJWVzaSksICUlbW0wICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDcgNiA2IDUgNSA0IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDE2LCAlJWVkaSAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMV9wYXNzNCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAobm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwogICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqMjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDEgKi8KCiAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMikKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDIgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzMCwgJSVlZGkgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglJWVzaSksICUlbW0wICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAxIDAgMSAwIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDMgMiAzIDIgMyAyIDMgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAxNiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDI0KCUlZWRpKSAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzMiwgJSVlZGkgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqMiAtIDIpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMTYgLSAyKTsgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsMiBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwoKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDE0LCAlJWVkaSAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AyX3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMCAxIDAgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAyIDMgMiAzIDIgMyAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQxNiwgJSVlZGkgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczIgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqMiAtIDIpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqOCAtIDIpOyAgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gcGFzcyA9PSA0IG9yIDUKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCwyIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CgogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNiwgJSVlZGkgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDJfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDQsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkOCwgJSVlZGkgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AyX3Bhc3M0ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCoyIC0gMik7IC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCo0IC0gMik7ICAgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gMiAqLwoKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA0KQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwoKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDYwLCAlJWVkaSAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3MwOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNiA1IDQgNyA2IDUgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJSVlZGkpICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDMyKCUlZWRpKSAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA0MCglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNDgoJSVlZGkpICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA1NiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNjQsICUlZWRpICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MwICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCo0IC0gNCk7IC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCozMiAtIDQpOyAgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDQgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDQsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyOCwgJSVlZGkgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglJWVzaSksICUlbW0wICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDYgNSA0IDcgNiA1IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUlZWRpKSAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMTYoJSVlZGkpICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDI0KCUlZWRpKSAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMzIsICUlZWRpICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MyICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjE2IC0gNCk7ICAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vIHBhc3MgPT0gNCBvciA1CiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwoKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDEyLCAlJWVkaSAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNiA1IDQgNyA2IDUgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUlZWRpKSAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTYsICUlZWRpICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3M0ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjggLSA0KTsgICAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA0ICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDgpCiAgICAgICAgICAgICAgIHsKLy8gR1JSIFRFU1Q6ICBzaG91bGQgd29yaywgYnV0IG5lZWRzIHRlc3RpbmcgKHNwZWNpYWwgNjQtYml0IHZlcnNpb24gb2YgcnBuZzI/KQogICAgICAgICAgICAgICAgICAvKiBHUlIgTk9URTogIG5vIG5lZWQgdG8gY29tYmluZSBwYXNzZXMgaGVyZSEgKi8KICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvKiBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJyAqLwogICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CgogICAgICAgICAgICAgICAgICAgICAvKiBzb3VyY2UgaXMgOC1ieXRlIFJSR0dCQkFBICovCiAgICAgICAgICAgICAgICAgICAgIC8qIGRlc3QgaXMgNjQtYnl0ZSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSAqLwogICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ1NiwgJSVlZGkgICAgICAgICBcblx0IiAvLyBzdGFydCBvZiBsYXN0IGJsb2NrCgogICAgICAgICAgICAgICAgICAgICAiLmxvb3A4X3Bhc3MwOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJSVlZGkpICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJSVlZGkpICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDMyKCUlZWRpKSAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0MCglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgNDgoJSVlZGkpICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA1NiglJWVkaSkgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNjQsICUlZWRpICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A4X3Bhc3MwICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGgpICAgICAgLy8gZWN4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBzb3VyY2UgaXMgOC1ieXRlIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgIC8vIGRlc3QgaXMgMzItYnl0ZSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQQogICAgICAgICAgICAgICAgICAgICAvLyAocmVjYWxsIHRoYXQgZXhwYW5zaW9uIGlzIF9pbiBwbGFjZV86ICBzcHRyIGFuZCBkcAogICAgICAgICAgICAgICAgICAgICAvLyAgYm90aCBwb2ludCBhdCBsb2NhdGlvbnMgd2l0aGluIHNhbWUgcm93IGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDI0LCAlJWVkaSAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglJWVkaSkgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDE2KCUlZWRpKSAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJSVlZGkpICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDMyLCAlJWVkaSAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wOF9wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAvLyBlc2kgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoKSAgICAgIC8vIGVjeAoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyBwYXNzID09IDQgb3IgNQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBpcyA4LWJ5dGUgUlJHR0JCQUEKICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyAxNi1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7CgogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVkaSAgICAgICAgICBcblx0IiAvLyBzdGFydCBvZiBsYXN0IGJsb2NrCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A4X3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZXNpICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUlZWRpKSAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTYsICUlZWRpICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A4X3Bhc3M0ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGgpICAgICAgLy8gZWN4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA4ICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDYpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA2KTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDYpOwogICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA2OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA2ICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ci09IHBpeGVsX2J5dGVzOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvLyBlbmQgb2YgX21teF9zdXBwb3J0ZWQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgZWxzZSAvKiBNTVggbm90IHN1cHBvcnRlZDogIHVzZSBtb2RpZmllZCBDIGNvZGUgLSB0YWtlcyBhZHZhbnRhZ2UKICAgICAgICAgICAgICAgICAgKiAgIG9mIGlubGluaW5nIG9mIHBuZ19tZW1jcHkgZm9yIGEgY29uc3RhbnQgKi8KICAgICAgICAgICAgICAgICAvKiBHUlIgMTk5OTEwMDc6ICBkb2VzIGl0PyAgb3Igc2hvdWxkIHBpeGVsX2J5dGVzIGluIGVhY2gKICAgICAgICAgICAgICAgICAgKiAgIGJsb2NrIGJlIHJlcGxhY2VkIHdpdGggaW1tZWRpYXRlIHZhbHVlIChlLmcuLCAxKT8gKi8KICAgICAgICAgICAgICAgICAvKiBHUlIgMTk5OTEwMTc6ICByZXBsYWNlZCB3aXRoIGNvbnN0YW50cyBpbiBlYWNoIGNhc2UgKi8KI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gMSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAtLXNwdHI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAzKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMyk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDM7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAyKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA0KQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgewojaWYgZGVmaW5lZChQTkdfREVCVUcpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcCA8IHJvdyB8fCBkcCszID4gcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImRwIG91dCBvZiBib3VuZHM6IHJvdz0lZCwgZHA9JWQsIHJwPSVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdywgZHAsIHJvdytwbmdfcHRyLT5yb3dfYnVmX3NpemUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInJvd19idWY9JWRcbiIscG5nX3B0ci0+cm93X2J1Zl9zaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gNikKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDYpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDY7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA2OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gOCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgOCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDg7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSAgICAgLyogR1JSOiAgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgKi8KICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBwaXhlbF9ieXRlczsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IC8qIGVuZCBpZiAoTU1YIG5vdCBzdXBwb3J0ZWQpICovCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgIH0gLyogZW5kIHN3aXRjaCAocm93X2luZm8tPnBpeGVsX2RlcHRoKSAqLwoKICAgICAgcm93X2luZm8tPndpZHRoID0gZmluYWxfd2lkdGg7CgogICAgICByb3dfaW5mby0+cm93Ynl0ZXMgPSBQTkdfUk9XQllURVMocm93X2luZm8tPnBpeGVsX2RlcHRoLGZpbmFsX3dpZHRoKTsKICAgfQoKfSAvKiBlbmQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgKi8KCiNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UgKi8KI2VuZGlmIC8qIFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCAqLwoKCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKQojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBBIFYgRyAgICAgICAgICAgLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCgovLyBPcHRpbWl6ZWQgY29kZSBmb3IgUE5HIEF2ZXJhZ2UgZmlsdGVyIGRlY29kZXIKCnN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCnsKICAgcG5nX3VpbnRfMzIgRnVsbExlbmd0aCwgTU1YTGVuZ3RoOwogICBpbnQgYnBwOwogICBpbnQgZHVtbXlfdmFsdWVfYTsKICAgaW50IGR1bW15X3ZhbHVlX2M7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgMiAoY3gpIHdhcyBzcGlsbGVkJyBlcnJvcgogICBpbnQgZHVtbXlfdmFsdWVfZDsKICAgaW50IGR1bW15X3ZhbHVlX1M7CiAgIGludCBkdW1teV92YWx1ZV9EOwogICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKCiAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCiAgIEZ1bGxMZW5ndGggPSByb3dfaW5mby0+cm93Ynl0ZXM7ICAgICAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgoKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICBTQVZFX0dPVF9lYngKICAgICAgU0FWRV9yMTUKICAgICAgU0FWRV9lYnAKICAgICAgLy8gaW5pdGlhbGl6ZSBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLy9wcmUgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBwdHIgdG8gQXZnKHgpCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeAovL3ByZSAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiIC8vIGVzaTogIHB0ciB0byBQcmlvcih4KQogICAgICAibW92bCAlJWVkaSwgJSVlZHggICAgICAgICAgIFxuXHQiCi8vcHJlICJzdWJsIGJwcCwgJSVlZHggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICJzdWJsICUlZWN4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gZWR4OiAgcHRyIHRvIFJhdyh4LWJwcCkKLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlYXggICAgICBcblx0IiAvLyBicmluZyBpbiB2aWEgZWF4Li4uCiAgICAgIFNBVkVfRnVsbExlbmd0aCAgICAgICAgICAgICAgICAgICAgLy8gLi4uYnV0IHN0b3JlIGZvciBsYXRlciB1c2UKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gQ29tcHV0ZSB0aGUgUmF3IHZhbHVlIGZvciB0aGUgZmlyc3QgYnBwIGJ5dGVzCiAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArIChQcmlvcih4KS8yKQogICAiYXZnX3JscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICglJWVzaSwlJWVieCwpLCAlJWFsICAgXG5cdCIgLy8gbG9hZCBhbCB3aXRoIFByaW9yKHgpCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInNocmIgJSVhbCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgogICAgICAiYWRkYiAtMSglJWVkaSwlJWVieCwpLCAlJWFsIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci8vcHJlICJjbXBsIGJwcCwgJSVlYnggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgJSVhbCwgLTEoJSVlZGksJSVlYngsKSBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICJqYiBhdmdfcmxwICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFncwoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50CiAgICAgICJtb3ZsICUlZWRpLCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKICAgICAgImFkZGwgJSVlYngsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBhZGQgYnBwCiAgICAgICJhZGRsICQweGYsICUlZWJwICAgICAgICAgICAgXG5cdCIgLy8gYWRkIDcrOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKICAgICAgImFuZGwgJDB4ZmZmZmZmZjgsICUlZWJwICAgICBcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQogICAgICAic3VibCAlJWVkaSwgJSVlYnAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IGZyb20gc3RhcnQgPT4gdmFsdWUgZWJ4IGF0CiAgICAgICJqeiBhdmdfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIGFsaWdubWVudAoKICAgICAgLy8gZml4IGFsaWdubWVudAogICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBieXRlcyB1cCB0byB0aGUgYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArICgoUmF3KHgtYnBwKSArIFByaW9yKHgpKS8yKQogICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCgogICAiYXZnX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCUlZXNpLCUlZWJ4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIGNsIHdpdGggUHJpb3IoeCkKICAgICAgIm1vdmIgKCUlZWR4LCUlZWJ4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIGFsIHdpdGggUmF3KHgtYnBwKQogICAgICAiYWRkdyAlJWN4LCAlJWF4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInNocncgJSVheCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgogICAgICAiYWRkYiAtMSglJWVkaSwlJWVieCwpLCAlJWFsIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICJjbXBsICUlZWJwLCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgaWYgYXQgYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICJtb3ZiICUlYWwsIC0xKCUlZWRpLCUlZWJ4LCkgXG5cdCIgLy8gd3JpdGUgUmF3KHgpOyAtMSB0byBvZmZzZXQgaW5jIGVieAogICAgICAiamIgYXZnX2xwMSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJlcGVhdCB1bnRpbCBhdCBhbGlnbm1lbnQgYm91bmRhcnkKCiAgICJhdmdfZ286ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVheCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVheAogICAgICAibW92bCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgICJzdWJsICUlZWJ4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlYXggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgInN1YmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgogICAgICAibW92bCAlJWVicCwgJSVlZGkgICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGRpZmYsIGJ1dCBubyByZWcgY29uc3RyYWludCg/KQogICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVjeCBmdW5jdGlvbnMpCiAgICAgIFJFU1RPUkVfcjE1CiAgICAgIFJFU1RPUkVfR09UX2VieAoKICAgICAgOiAiPWMiIChNTVhMZW5ndGgpLCAgICAgICAgICAgICAgICAvLyBvdXRwdXQgcmVncwogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICI9RCIgKGRpZmYpLAogICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpCiAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaQogICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAvLyBlYXgKCiAgICAgIDogIiVlZHgiICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgX0NMT0JCRVJfcjE1CiAgICAgICAgX0NMT0JCRVJfZWJwCiAgICAgICAgX0NMT0JCRVJfR09UX2VieAogICApOwoKICAgLy8gbm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93CiAgIHN3aXRjaCAoYnBwKQogICB7CiAgICAgIGNhc2UgMzoKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgLy8gPT0gMyAqIDgKLy8gICAgICAgX1NoaWZ0UmVtID0gNDA7ICAgIC8vID09IDY0IC0gMjQKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0s1XzNfMCAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2s1XzNfMCAtPiBtbTcKLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIFtpbnRlcmxlYXZlIGZvciBwYXJhbGxlbC4/XQovLyBwcmVsb2FkICAibW92bCAgcm93LCAlJWVkaSAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCiAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00Ci8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJSVlc2kgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxICAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMiBcblx0Ii8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKICAgICAgICAgImF2Z18zbHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgICglJWVkaSwlJWVjeCwpLCAlJW1tMCAgXG5cdCIgLy8gbG9hZCBtbTAgd2l0aCBBdmcoeCkKICAgICAgICAgICAgIm1vdnEgICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gY29ycmVjdCBwb3NpdGlvbiBSYXcoeC1icHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEKICAgICAgICAgICAgIm1vdnEgICglJWVzaSwlJWVjeCwpLCAlJW1tMSAgXG5cdCIgLy8gbG9hZCBtbTEgd2l0aCBQcmlvcih4KQogICAgICAgICAgICAibW92cSAgJSVtbTcsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZyb3cgYnl0ZQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCBieXRlCiAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBMQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh2YWxpZCBvbmx5IGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgMy01CiAgICAgICAgICAgICJtb3ZxICAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aCBsc2IncyB3ZXJlID09IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHZhbGlkIG9ubHkgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byBSYXcoeC1icHApLzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKCiAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBtbTYgbWFzayB0byBjb3ZlciBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR3byBieXRlcwogICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgbmVlZCBiZSBzaGlmdGVkIG9ubHkgb25jZSBoZXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgY29ycmVjdCB4LWJwcCBvZmZzZXQuCiAgICAgICAgICAgICJtb3ZxICAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJhZGRsICAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQogICAgICAgICAgICAibW92cSAgJSVtbTAsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIKICAgICAgICAgICAgLy8gbW92ZSB1cGRhdGVkIFJhdyh4KSB0byB1c2UgYXMgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICJjbXBsICAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXcoeCkgdG8gbW0yCiAgICAgICAgICAgICJqYiBhdmdfM2xwICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgMyBicHAKCiAgICAgIGNhc2UgNDogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA2IGJwcCBjYXNlIHZpYSBfU2hpZnRCcHAgYW5kIF9TaGlmdFJlbSwKICAgICAgeyAgICAgICAgIC8vIGJ1dCBsb29wIHVzZXMgYWxsIDggTU1YIHJlZ3MsIGFuZCBwc3JscS9wc2xscSByZXF1aXJlIDY0LWJpdAogICAgICAgICAgICAgICAgLy8gbWVtIChQSUMvLnNvIHByb2JsZW1zKSwgTU1YIHJlZyAobm9uZSBhdmFpbC4pLCBvciBpbW1lZGlhdGUKLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyAzMiAocHNsbHEpCi8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMzIgKHBzcmxxKQoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIF9MQkNhcnJ5TWFzayAtPiBtbTUKICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudCBib3VuZGFyeQogICAgICAgICAgICAibW92cSAiIEFNQVNLMF84XzAgIiwgJSVtbTcgICAgXG5cdCIgLy8gX2FtYXNrMF84XzAgLT4gbW03CiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAvLyAuLi4gYW5kIGNsZWFyIGFsbCBieXRlcyBleGNlcHQgZm9yIDFzdCBhY3RpdmUgZ3JvdXAKLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTcgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCi8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJSVlc2kgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKICAgICAgICAgICAgIm1vdnEgICUlbW03LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNsbHEgJDMyLCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgZm9yIDJuZCBhY3RpdmUgZ3JvdXAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCiAgICAgICAgICJhdmdfNGxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWN4LCksICUlbW0wICBcblx0IgogICAgICAgICAgICAicHNybHEgJDMyLCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0xICBcblx0IgogICAgICAgICAgICAvLyBhZGQgKFByZXZfcm93LzIpIHRvIGF2ZXJhZ2UKICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTEgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggYnl0ZQogICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIEFjdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMzIsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAvLyBub3cgcmVhZHkgdG8gd3JpdGUgYmFjayB0byBtZW1vcnkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIKICAgICAgICAgICAgLy8gcHJlcCBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAiamIgYXZnXzRscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgNCBicHAKCiAgICAgIGNhc2UgNjogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA0IGJwcCBjYXNlIChzZWUgY29tbWVudHMgdGhlcmUpCiAgICAgIHsKLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyA0OCAocHNsbHEpCi8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMTYgKHBzcmxxKQoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIF9MQkNhcnJ5TWFzayAtPiBtbTUKICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudCBib3VuZGFyeQogICAgICAgICAgICAibW92cSAiIEFNQVNLMF84XzAgIiwgJSVtbTcgICAgXG5cdCIgLy8gX2FtYXNrMF84XzAgLT4gbW03CiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAvLyAuLi4gYW5kIGNsZWFyIGFsbCBieXRlcyBleGNlcHQgZm9yIDFzdCBhY3RpdmUgZ3JvdXAKLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTcgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCAgcHJldl9yb3csICUlZXNpICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgICJtb3ZxICAlJW1tNywgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBtYXNrIGZvciAybmQgYWN0aXZlIGdyb3VwCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQogICAgICAgICAiYXZnXzZscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVjeCwpLCAlJW1tMCAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMSAgXG5cdCIKICAgICAgICAgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBhdmVyYWdlCiAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBBY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglJWVkaSwlJWVjeCwpIFxuXHQiCiAgICAgICAgICAgIC8vIHByZXAgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgImpiIGF2Z182bHAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kgICAgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDYgYnBwCgogICAgICBjYXNlIDI6CiAgICAgIHsKLy8gICAgICAgX1NoaWZ0QnBwID0gMTY7ICAgLy8gPT0gMiAqIDgKLy8gICAgICAgX1NoaWZ0UmVtID0gNDg7ICAgLy8gPT0gNjQgLSBfU2hpZnRCcHAKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgIC8vIGxvYWQgKGZvcm1lcikgX0FjdGl2ZU1hc2sKICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzZfMl8wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazZfMl8wIC0+IG1tNwogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBfTEJDYXJyeU1hc2sgLT4gbW01Ci8vIHByZWxvYWQgICJtb3ZsICByb3csICUlZWRpICAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlJWVzaSAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQogICAgICAgICAiYXZnXzJscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVjeCwpLCAlJW1tMCAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQ0OCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMSAgXG5cdCIgLy8gIChHUlIgQlVHRklYOiAgd2FzIHBzbGxxKQogICAgICAgICAgICAvLyBhZGQgKFByZXZfcm93LzIpIHRvIGF2ZXJhZ2UKICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTEgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCBieXRlCgogICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQoKICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgMiAmIDMKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQoKICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgNCAmIDUKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKCiAgICAgICAgICAgIC8vIGFkZCA0dGggYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IHRoZSBtbTYgbWFzayB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIDYgJiA3CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAvLyBub3cgcmVhZHkgdG8gd3JpdGUgYmFjayB0byBtZW1vcnkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIKICAgICAgICAgICAgLy8gcHJlcCBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAiamIgYXZnXzJscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgMiBicHAKCiAgICAgIGNhc2UgMToKICAgICAgewogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWF4ICAgICAgICAgICAgXG5cdCIgLy8gZWF4OiB4ID0gb2Zmc2V0IHRvIGFsaWduLiBiZHJ5Ci8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCi8vIHByZWxvYWQgICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGlmIG9mZnNldCBhdCBlbmQgb2YgYXJyYXkKICAgICAgICAgICAgImpuYiBhdmdfMWVuZCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgU0FWRV9lYnAKCiAgICAgICAgICAgIC8vIGRvIEF2ZyBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgICJtb3ZsICUlZWRpLCAlJWVicCAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBlYnA6ICBSYXcoeC1icHApCiAgICAgICAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgaW4gbG9vcCBiZWxvdwogICAgICAgICAgICBTQVZFX0dPVF9lYngKCiAgICAgICAgICJhdmdfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCiAgICAgICAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdmIgKCUlZXNpLCUlZWF4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIGNsIHdpdGggUHJpb3IoeCkKICAgICAgICAgICAgIm1vdmIgKCUlZWJwLCUlZWF4LCksICUlYmwgICBcblx0IiAvLyBsb2FkIGJsIHdpdGggUmF3KHgtYnBwKQogICAgICAgICAgICAiYWRkdyAlJWN4LCAlJWJ4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInNocncgJSVieCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgogICAgICAgICAgICAiYWRkYiAtMSglJWVkaSwlJWVheCwpLCAlJWJsIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluYyBlYXgKICAgICAgICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBlbmQgb2YgYXJyYXkKICAgICAgICAgICAgIm1vdmIgJSVibCwgLTEoJSVlZGksJSVlYXgsKSBcblx0IiAvLyB3cml0ZSBiYWNrIFJhdyh4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvIG9mZnNldCBpbmMgZWF4CiAgICAgICAgICAgICJqYiBhdmdfMWxwICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIFJFU1RPUkVfR09UX2VieAogICAgICAgICAgICBSRVNUT1JFX2VicAoKICAgICAgICAgImF2Z18xZW5kOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgIC8vIGVjeCAgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kKICAgICAgICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjMiIChkaWZmKSwgICAgICAgIC8vIGVheAogICAgICAgICAgICAgICI0IiAoRnVsbExlbmd0aCkgICAvLyBlZHgKCiAgICAgICAgICAgIENMT0JfQ09MT05fZWJ4X2VicCAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgQ0xPQkJFUl9HT1RfZWJ4CiAgICAgICAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCiAgICAgICAgICAgICAgQ0xPQkJFUl9lYnAKICAgICAgICAgKTsKICAgICAgfQogICAgICByZXR1cm47ICAvLyBlbmQgMSBicHAKCiAgICAgIGNhc2UgODoKICAgICAgewogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBbaW50ZXJsZWF2ZSBmb3IgcGFyYWxsZWwuP10KLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJSVlZGkgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQogICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAovLyBwcmVsb2FkICAibW92bCAgcHJldl9yb3csICUlZXNpICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChOTyBORUVEIHRvIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQoKICAgICAgICAgImF2Z184bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJSVlZGksJSVlY3gsKSwgJSVtbTAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0xICBcblx0IgogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcsIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTMsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byBBdmcsIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcsIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnLCBlYWNoCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgdG8gQXZnIGZvciBlYWNoCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglJWVkaSwlJWVjeCwpIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gcmV1c2UgYXMgUmF3KHgtYnBwKQogICAgICAgICAgICAiamIgYXZnXzhscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tMyIsICIlbW00IiwgIiVtbTUiCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDggYnBwCgogICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0CiAgICAgIHsKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECiAgICAgICAgIHBuZ19kZWJ1ZygxLAogICAgICAgICAgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpKVxuIik7CiNlbmRpZgogICAgICB9CiAgICAgIGJyZWFrOwoKICAgfSAvLyBlbmQgc3dpdGNoIChicHApCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIC8vIE1NWCBhY2NlbGVyYXRpb24gY29tcGxldGU7IG5vdyBkbyBjbGVhbi11cAogICAgICAvLyBjaGVjayBpZiBhbnkgcmVtYWluaW5nIGJ5dGVzIGxlZnQgdG8gZGVjb2RlCi8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgXG5cdCIKLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICBcblx0IiAvLyBlYXg6ICB4ID09IG9mZnNldCBieXRlcyBhZnRlciBNTVgKLy9wcmUgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGlmIG9mZnNldCBhdCBlbmQgb2YgYXJyYXkKICAgICAgImpuYiBhdmdfZW5kICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgU0FWRV9lYnAKCiAgICAgIC8vIGRvIEF2ZyBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwovL3ByZSAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICJtb3ZsICUlZWRpLCAlJWVicCAgICAgICAgICAgXG5cdCIKLy9wcmUgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgInN1YmwgJSVlY3gsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBlYnA6ICBSYXcoeC1icHApCiAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3ggYmVsb3cKCiAgICAgIFNBVkVfR09UX2VieAoKICAgImF2Z19scDI6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAibW92YiAoJSVlc2ksJSVlYXgsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgY2wgd2l0aCBQcmlvcih4KQogICAgICAibW92YiAoJSVlYnAsJSVlYXgsKSwgJSVibCAgIFxuXHQiIC8vIGxvYWQgYmwgd2l0aCBSYXcoeC1icHApCiAgICAgICJhZGR3ICUlY3gsICUlYnggICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAic2hydyAlJWJ4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCiAgICAgICJhZGRiIC0xKCUlZWRpLCUlZWF4LCksICUlYmwgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYXgKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBlbmQgb2YgYXJyYXkKICAgICAgIm1vdmIgJSVibCwgLTEoJSVlZGksJSVlYXgsKSBcblx0IiAvLyB3cml0ZSBiYWNrIFJhdyh4KSBbbW92IGRvZXMgbm90CiAgICAgICJqYiBhdmdfbHAyICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIGFmZmVjdCBmbGFnczsgLTEgdG8gb2Zmc2V0IGluYyBlYXhdCgogICAgICBSRVNUT1JFX0dPVF9lYngKICAgICAgUkVTVE9SRV9lYnAKCiAgICJhdmdfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlbmQgTU1YOyBwcmVwIGZvciBwb3NzLiBGUCBpbnN0cnMuCgogICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKQoKICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaQogICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkKICAgICAgICAiMyIgKE1NWExlbmd0aCksICAgLy8gZWF4CiAgICAgICAgIjQiIChGdWxsTGVuZ3RoKSAgIC8vIGVkeAoKICAgICAgQ0xPQl9DT0xPTl9lYnhfZWJwICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICBDTE9CQkVSX0dPVF9lYngKICAgICAgICBDTE9CX0NPTU1BX2VieF9lYnAKICAgICAgICBDTE9CQkVSX2VicAogICApOwoKfSAvKiBlbmQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkgKi8KCgoKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpIHx8IGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBQIEEgRSBUIEggICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KCi8vIE9wdGltaXplZCBjb2RlIGZvciBQTkcgUGFldGggZmlsdGVyIGRlY29kZXIKCnN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHByZXZfcm93KQp7CiAgIHBuZ191aW50XzMyIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsKICAgaW50IGJwcDsKICAgaW50IGR1bW15X3ZhbHVlX2E7CiAgIGludCBkdW1teV92YWx1ZV9jOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIDIgKGN4KSB3YXMgc3BpbGxlZCcgZXJyb3IKICAgaW50IGR1bW15X3ZhbHVlX2Q7CiAgIGludCBkdW1teV92YWx1ZV9TOwogICBpbnQgZHVtbXlfdmFsdWVfRDsKICAgaW50IGRpZmY7IC8vICAgICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CgogICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgIC8vIGNhbGMgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbAogICBGdWxsTGVuZ3RoID0gcm93X2luZm8tPnJvd2J5dGVzOyAgICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB0byBmaWx0ZXIKCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgU0FWRV9HT1RfZWJ4CiAgICAgIFNBVkVfcjE1CiAgICAgIFNBVkVfZWJwCi8vcHJlICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIKICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBlYng6ICB4IG9mZnNldAovL3ByZSAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWR4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gZWR4OiAgeC1icHAgb2Zmc2V0Ci8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIgLy8gYnJpbmcgaW4gdmlhIGVheC4uLgogICAgICBTQVZFX0Z1bGxMZW5ndGggICAgICAgICAgICAgICAgICAgIC8vIC4uLmJ1dCBzdG9yZSBmb3IgbGF0ZXIgdXNlCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKCiAgICAgIC8vIENvbXB1dGUgdGhlIFJhdyB2YWx1ZSBmb3IgdGhlIGZpcnN0IGJwcCBieXRlcwogICAgICAvLyBOb3RlOiB0aGUgZm9ybXVsYSB3b3JrcyBvdXQgdG8gYmUgYWx3YXlzCiAgICAgIC8vICAgUGFldGgoeCkgPSBSYXcoeCkgKyBQcmlvcih4KSAgICAgIHdoZXJlIHggPCBicHAKICAgInBhZXRoX3JscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92YiAoJSVlZGksJSVlYngsKSwgJSVhbCAgIFxuXHQiCiAgICAgICJhZGRiICglJWVzaSwlJWVieCwpLCAlJWFsICAgXG5cdCIKICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgovL3ByZSAiY21wbCBicHAsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICUlYWwsIC0xKCUlZWRpLCUlZWJ4LCkgXG5cdCIKICAgICAgImpiIHBhZXRoX3JscCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50CiAgICAgICJtb3ZsICUlZWRpLCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKICAgICAgImFkZGwgJSVlYngsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBhZGQgYnBwCiAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKICAgICAgImFkZGwgJDB4ZiwgJSVlYnAgICAgICAgICAgICBcblx0IiAvLyBhZGQgNys4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQogICAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlYnAgICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICJzdWJsICUlZWRpLCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgZnJvbSBzdGFydCA9PT4gdmFsdWUgZWJ4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgYWxpZ25tZW50CiAgICAgICJqeiBwYWV0aF9nbyAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gZml4IGFsaWdubWVudAoKICAgICAgU0FWRV9yMTFfcjEyX3IxMwoKICAgInBhZXRoX2xwMTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgIm1vdmIgKCUlZXNpLCUlZWJ4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKICAgICAgIm1vdmIgKCUlZXNpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJzdWJsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCiAgICAgICJtb3ZsICUlZWF4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgIm1vdmIgKCUlZWRpLCUlZWR4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBhbAogICAgICAic3VibCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAibW92bCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLSBjID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgImFkZGwgIiBwYV9URU1QICIsICUlZWF4ICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKICAgICAgLy8gcGMgPSBhYnMocGN2KQogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wY2EgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BjYTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVheCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQogICAgICAvLyBwYiA9IGFicyhwYnYpCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlY3ggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BiYSAgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGJhOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWN4LCAiIHBiX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHBhID0gYWJzKHBhdikKICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWF4ICAgICBcblx0IgogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wYWEgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BhYTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVheCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQogICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCiAgICAgICJjbXBsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgImpuYSBwYWV0aF9hYmIgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwogICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlY3ggICAgIFxuXHQiCiAgICAgICJqbmEgcGFldGhfYmJjICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgIm1vdmIgKCUlZXNpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJqbXAgcGFldGhfcGFldGggICAgICAgICAgICAgXG5cdCIKCiAgICJwYWV0aF9iYmM6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKICAgICAgIm1vdmIgKCUlZXNpLCUlZWJ4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKICAgICAgImptcCBwYWV0aF9wYWV0aCAgICAgICAgICAgICBcblx0IgoKICAgInBhZXRoX2FiYjogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWF4ICAgICBcblx0IgogICAgICAiam5hIHBhZXRoX2FiYyAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCiAgICAgICJtb3ZiICglJWVzaSwlJWVkeCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAiam1wIHBhZXRoX3BhZXRoICAgICAgICAgICAgIFxuXHQiCgogICAicGFldGhfYWJjOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKICAgICAgIm1vdmIgKCUlZWRpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAoKICAgInBhZXRoX3BhZXRoOiAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKICAgICAgImFkZGIgJSVjbCwgLTEoJSVlZGksJSVlYngsKSBcblx0IgogICAgICAiY21wbCAlJWVicCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJqYiBwYWV0aF9scDEgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKCiAgICJwYWV0aF9nbzogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVjeCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVjeAogICAgICAibW92bCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJzdWJsICUlZWJ4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlYXggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgInN1YmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgogICAgICAibW92bCAlJWVicCwgJSVlZGkgICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGRpZmYsIGJ1dCBubyByZWcgY29uc3RyYWludCg/KQogICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVjeCBmdW5jdGlvbnMpCiAgICAgIFJFU1RPUkVfcjE1CiAgICAgIFJFU1RPUkVfR09UX2VieAoKICAgICAgOiAiPWMiIChNTVhMZW5ndGgpLCAgICAgICAgICAgICAgICAvLyBvdXRwdXQgcmVncwogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICI9RCIgKGRpZmYpLAogICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpCiAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaQogICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAvLyBlYXgKCiAgICAgIDogIiVlZHgiICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgX0NMT0JCRVJfcjExX3IxMl9yMTMKICAgICAgICBfQ0xPQkJFUl9yMTUKICAgICAgICBfQ0xPQkJFUl9lYnAKICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CiAgICk7CgogICAvLyBub3cgZG8gdGhlIG1hdGggZm9yIHRoZSByZXN0IG9mIHRoZSByb3cKICAgc3dpdGNoIChicHApCiAgIHsKICAgICAgY2FzZSAzOgogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IDI0OyAgICAvLyA9PSBicHAgKiA4Ci8vICAgICAgIF9TaGlmdFJlbSA9IDQwOyAgICAvLyA9PSA2NCAtIF9TaGlmdEJwcAoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiCiAgICAgICAgICJwYWV0aF8zbHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBsYXN0IDMgYnl0ZXMgdG8gMXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwogICAgICAgICAgICAibW92cSAoJSVlc2ksJSVlY3gsKSwgJSVtbTIgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGEKICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gcHJlcCBjPVByaW9yKHgtYnBwKSBieXRlcwogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBsYXN0IDMgYnl0ZXMgdG8gMXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMyAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQogICAgICAgICAgICAicGFuZCAiIEFNQVNLNV8zXzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazVfM18wICh3YXMgX0FjdGl2ZU1hc2spCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpIHN0ZXAgMQogICAgICAgICAgICAicGFkZGIgKCUlZWRpLCUlZWN4LCksICUlbW03IFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAoJSVlZGksJSVlY3gsKSAgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYXcoeC1icHApCiAgICAgICAgICAgIC8vIG5vdyBkbyBQYWV0aCBmb3IgMm5kIHNldCBvZiBieXRlcyAoMy01KQogICAgICAgICAgICAicHNybHEgJDI0LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9CiAgICAgICAgICAgIC8vICAgICAgIHBhdiArIHBidiA9IHBidiArIHBhdgogICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNCwgJSVtbTYgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMQogICAgICAgICAgICAicGFuZCAiIEFNQVNLNV8zXzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazVfM18wICh3YXMgX0FjdGl2ZU1hc2spCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNyAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGJ5dGVzIHRvIDJuZCBncm91cCBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgYnl0ZXMKICAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgKCUlZWRpLCUlZWN4LCksICUlbW03IFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMgogICAgICAgICAgICAibW92cSAlJW1tNywgKCUlZWRpLCUlZWN4LCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGJ5dGVzICh3YXMgX1NoaWZ0QnBwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3cgbW0xIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApCiAgICAgICAgICAgIC8vIG5vdyBkbyBQYWV0aCBmb3IgM3JkLCBhbmQgZmluYWwsIHNldCBvZiBieXRlcyAoNi03KQogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAiIEFNQVNLMF8yXzYgIiwgJSVtbTEgIFxuXHQiIC8vIF9hbWFzazBfMl82IChfQWN0aXZlTWFza0VuZCkKICAgICAgICAgICAgInBhZGRiIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gcHhvciBkb2VzIG5vdCBhZmZlY3QgZmxhZ3MKICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW0zIHJlYWR5IHRvIGJlIHVzZWQgYXMgUHJpb3IoeC1icHApIG5leHQgbG9vcAogICAgICAgICAgICAiamIgcGFldGhfM2xwICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgMyBicHAKCiAgICAgIGNhc2UgNjoKICAgICAgewovLyAgICAgICBfQWN0aXZlTWFzazIgPSAweGZmZmZmZmZmMDAwMDAwMDBMTDsgIC8vIE5PVCBVU0VEICgiX2FtYXNrXzBfNF80IikKLy8gICAgICAgX1NoaWZ0QnBwID0gNDg7ICAgICAgIC8vIGJwcCA8PCAzID09IGJwcCAqIDgKLy8gICAgICAgX1NoaWZ0UmVtID0gMTY7ICAgICAgIC8vIDY0IC0gX1NoaWZ0QnBwCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWN4ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAicGFldGhfNmxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIG11c3Qgc2hpZnQgdG8gcG9zaXRpb24gUmF3KHgtYnBwKSBkYXRhCiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdFJlbQogICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAibW92cSAtOCglJWVzaSwlJWVjeCwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCiAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMiAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBiCiAgICAgICAgICAgIC8vIG11c3Qgc2hpZnQgdG8gcG9zaXRpb24gUHJpb3IoeC1icHApIGRhdGEKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYwogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxIC04KCUlZXNpLCUlZWN4LCksICUlbW0zIFxuXHQiIC8vIGxvYWQgYz1Qcmlvcih4LWJwcCkKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJwYW5kICIgQU1BU0s0XzRfMCAiLCAlJW1tNyAgXG5cdCIgLy8gX2FtYXNrNF80XzAgKHdhcyBfQWN0aXZlTWFzaykKICAgICAgICAgICAgUkVTVE9SRV9yYnAKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJSVlc2ksJSVlY3gsKSwgJSVtbTIgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKICAgICAgICAgICAgInBhZGRiICglJWVkaSwlJWVjeCwpLCAlJW1tNyBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglJWVkaSwlJWVjeCwpICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgIm1vdnEgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTEgXG5cdCIKICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBicHAgKiA4ID0gYml0cyBwZXIgcGl4ZWwKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIDY0IC0gKGJwcCAqIDgpID0gcmVtYWluZGVyCiAgICAgICAgICAgICJwb3IgJSVtbTYsICUlbW0zICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTUgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0QnBwCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwogICAgICAgICAgICAicG9yICUlbW01LCAlJW1tMSAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIGRvIHNlY29uZCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHN0ZXAgZWN4IHRvIG5leHQgc2V0IG9mIDggYnl0ZXMgYW5kIHJlcGVhdCBsb29wIHRpbCBkb25lCiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJSVlZGksJSVlY3gsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCiAgICAgICAgICAgICJqYiBwYWV0aF82bHAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgLy8gZXNpICAgICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAoKICAgICAgY2FzZSA0OgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhPVJhdyh4LWJwcCkgYnl0ZXMKICAgICAgICAgInBhZXRoXzRscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAibW92cSAtOCglJWVzaSwlJWVjeCwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCiAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMiAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0zICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApCiAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAicGFuZCAiIEFNQVNLNF80XzAgIiwgJSVtbTcgICBcblx0IiAvLyBfYW1hc2s0XzRfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICBSRVNUT1JFX3JicAogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKICAgICAgICAgICAgInBhZGRiICglJWVkaSwlJWVjeCwpLCAlJW1tNyBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwogICAgICAgICAgICAibW92cSAlJW1tNywgKCUlZWRpLCUlZWN4LCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyBtbTEgd2lsbCBiZSB1c2VkIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgtYnBwKQogICAgICAgICAgICAvLyBkbyBzZWNvbmQgc2V0IG9mIDQgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTcsICUlbW0xICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IiAvLyBhZGQgcHJlZGljdG9yIHdpdGggUmF3KHgpCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglJWVkaSwlJWVjeCwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgImpiIHBhZXRoXzRscCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kgICAgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDQgYnBwCgogICAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBicHAgPT0gOAogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGE9UmF3KHgtYnBwKSBieXRlcwogICAgICAgICAicGFldGhfOGxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIGRvIGZpcnN0IHNldCBvZiA0IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxIC04KCUlZXNpLCUlZWN4LCksICUlbW0zIFxuXHQiIC8vIHJlYWQgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGIKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBjCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgInBhbmQgIiBBTUFTSzRfNF8wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s0XzRfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICBSRVNUT1JFX3JicAogICAgICAgICAgICAibW92cSAoJSVlc2ksJSVlY3gsKSwgJSVtbTIgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQogICAgICAgICAgICAicGFkZGIgKCUlZWRpLCUlZWN4LCksICUlbW03IFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAoJSVlZGksJSVlY3gsKSAgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiIC8vIHJlYWQgYT1SYXcoeC1icHApIGJ5dGVzCgogICAgICAgICAgICAvLyBkbyBzZWNvbmQgc2V0IG9mIDQgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCiAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCiAgICAgICAgICAgICJqYiBwYWV0aF84bHAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgLy8gZXNpICAgICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAoKICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvLyBicHAgPSAxIG9yIDIKICAgICAgewogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWF4ICAgICAgICAgICAgXG5cdCIgLy8gZWF4OiB4ID0gb2Zmc2V0IHRvIGFsaWduLiBiZHJ5Ci8vIHByZWxvYWQgICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiam5iIHBhZXRoX2RlbmQgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICBTQVZFX2VicAoKLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBkbyBQYWV0aCBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlJWVicCAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBlYXggLSBicHAKICAgICAgICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVjeCBiZWZvcmUgdXNpbmcgY2wgJiBjeAoKICAgICAgICAgICAgU0FWRV9HT1RfZWJ4CiAgICAgICAgICAgIFNBVkVfcjExX3IxMl9yMTMKCiAgICAgICAgICJwYWV0aF9kbHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZiICglJWVzaSwlJWVheCwpLCAlJWJsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGJsCiAgICAgICAgICAgICJtb3ZiICglJWVzaSwlJWVicCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAgICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIFNhdmUgcGF2IGZvciBsYXRlciB1c2UKICAgICAgICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZiICglJWVkaSwlJWVicCwpLCAlJWJsICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gYmwKICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKICAgICAgICAgICAgIm1vdmwgJSVlYngsICUlZWN4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgImFkZGwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKICAgICAgICAgICAgLy8gcGMgPSBhYnMocGN2KQogICAgICAgICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICAgICAgICJqeiBwYWV0aF9kcGNhICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgICAgICAgInBhZXRoX2RwY2E6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQogICAgICAgICAgICAvLyBwYiA9IGFicyhwYnYpCiAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlY3ggICAgXG5cdCIKICAgICAgICAgICAgImp6IHBhZXRoX2RwYmEgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAgICAgICAicGFldGhfZHBiYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWN4LCAiIHBiX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHBhdikKICAgICAgICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IgogICAgICAgICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICAgICAgICJqeiBwYWV0aF9kcGFhICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgICAgICAgInBhZXRoX2RwYWE6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQogICAgICAgICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCiAgICAgICAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImpuYSBwYWV0aF9kYWJiICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwogICAgICAgICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAgICAgICJqbmEgcGFldGhfZGJiYyAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgICAgICAgIm1vdmIgKCUlZXNpLCUlZWJwLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICAgICAgICJqbXAgcGFldGhfZHBhZXRoICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICJwYWV0aF9kYmJjOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKICAgICAgICAgICAgIm1vdmIgKCUlZXNpLCUlZWF4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKICAgICAgICAgICAgImptcCBwYWV0aF9kcGFldGggICAgICAgICAgICBcblx0IgoKICAgICAgICAgInBhZXRoX2RhYmI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKICAgICAgICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWJ4ICAgICBcblx0IgogICAgICAgICAgICAiam5hIHBhZXRoX2RhYmMgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCiAgICAgICAgICAgICJtb3ZiICglJWVzaSwlJWVicCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAicGFldGhfZGFiYzogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKICAgICAgICAgICAgIm1vdmIgKCUlZWRpLCUlZWJwLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAoKICAgICAgICAgInBhZXRoX2RwYWV0aDogICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJpbmNsICUlZWJwICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKICAgICAgICAgICAgImFkZGIgJSVjbCwgLTEoJSVlZGksJSVlYXgsKSBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGFnYWluc3QgRnVsbExlbmd0aAogICAgICAgICAgICAiamIgcGFldGhfZGxwICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICBSRVNUT1JFX3IxMV9yMTJfcjEzCiAgICAgICAgICAgIFJFU1RPUkVfR09UX2VieAogICAgICAgICAgICBSRVNUT1JFX2VicAoKICAgICAgICAgInBhZXRoX2RlbmQ6ICAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgIC8vIGVjeCAgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kKICAgICAgICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjMiIChkaWZmKSwgICAgICAgIC8vIGVheAogICAgICAgICAgICAgICI0IiAoRnVsbExlbmd0aCkgICAvLyBlZHgKCiAgICAgICAgICAgIENMT0JfQ09MT05fZWJ4X2VicF9yMVggICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgQ0xPQkJFUl9HT1RfZWJ4CiAgICAgICAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCiAgICAgICAgICAgICAgQ0xPQkJFUl9lYnAKICAgICAgICAgICAgICBDTE9CX0NPTU1BX2ViWF9yMVgKICAgICAgICAgICAgICBDTE9CQkVSX3IxMV9yMTJfcjEzCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGdvIGZ1cnRoZXIgd2l0aCB0aGlzIG9uZQoKICAgfSAvLyBlbmQgc3dpdGNoIChicHApCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIC8vIE1NWCBhY2NlbGVyYXRpb24gY29tcGxldGU7IG5vdyBkbyBjbGVhbi11cAogICAgICAvLyBjaGVjayBpZiBhbnkgcmVtYWluaW5nIGJ5dGVzIGxlZnQgdG8gZGVjb2RlCi8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgXG5cdCIKLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJqbmIgcGFldGhfZW5kICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIFNBVkVfZWJwCgovL3ByZSAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi8vcHJlICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKICAgICAgLy8gZG8gUGFldGggZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKICAgICAgIm1vdmwgJSVlYXgsICUlZWJwICAgICAgICAgICBcblx0IgovL3ByZSAic3VibCBicHAsICUlZWJwICAgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQogICAgICAic3VibCAlJWVjeCwgJSVlYnAgICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGVheCAtIGJwcAogICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4IGJlbG93CgogICAgICBTQVZFX0dPVF9lYngKICAgICAgU0FWRV9yMTFfcjEyX3IxMwoKICAgInBhZXRoX2xwMjogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgIm1vdmIgKCUlZXNpLCUlZWF4LCksICUlYmwgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYmwKICAgICAgIm1vdmIgKCUlZXNpLCUlZWJwLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJzdWJsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCiAgICAgICJtb3ZsICUlZWJ4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQogICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgIm1vdmIgKCUlZWRpLCUlZWJwLCksICUlYmwgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBibAogICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAibW92bCAlJWVieCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLSBjID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgImFkZGwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKICAgICAgLy8gcGMgPSBhYnMocGN2KQogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wY2EyICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BjYTI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQogICAgICAvLyBwYiA9IGFicyhwYnYpCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlY3ggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BiYTIgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGJhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWN4LCAiIHBiX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHBhID0gYWJzKHBhdikKICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IgogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wYWEyICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BhYTI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQogICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgImpuYSBwYWV0aF9hYmIyICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwogICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlY3ggICAgIFxuXHQiCiAgICAgICJqbmEgcGFldGhfYmJjMiAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgIm1vdmIgKCUlZXNpLCUlZWJwLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJqbXAgcGFldGhfcGFldGgyICAgICAgICAgICAgXG5cdCIKCiAgICJwYWV0aF9iYmMyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKICAgICAgIm1vdmIgKCUlZXNpLCUlZWF4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKICAgICAgImptcCBwYWV0aF9wYWV0aDIgICAgICAgICAgICBcblx0IgoKICAgInBhZXRoX2FiYjI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWJ4ICAgICBcblx0IgogICAgICAiam5hIHBhZXRoX2FiYzIgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCiAgICAgICJtb3ZiICglJWVzaSwlJWVicCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAiam1wIHBhZXRoX3BhZXRoMiAgICAgICAgICAgIFxuXHQiCgogICAicGFldGhfYWJjMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKICAgICAgIm1vdmIgKCUlZWRpLCUlZWJwLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAoKICAgInBhZXRoX3BhZXRoMjogICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWJwICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKICAgICAgImFkZGIgJSVjbCwgLTEoJSVlZGksJSVlYXgsKSBcblx0IgogICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGFnYWluc3QgRnVsbExlbmd0aAogICAgICAiamIgcGFldGhfbHAyICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICBSRVNUT1JFX3IxMV9yMTJfcjEzCiAgICAgIFJFU1RPUkVfR09UX2VieAogICAgICBSRVNUT1JFX2VicAoKICAgInBhZXRoX2VuZDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVg7IHByZXAgZm9yIHBvc3MuIEZQIGluc3Rycy4KCiAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLAogICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpCiAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaQogICAgICAgICIzIiAoTU1YTGVuZ3RoKSwgICAvLyBlYXgKICAgICAgICAiNCIgKEZ1bGxMZW5ndGgpICAgLy8gZWR4CgogICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgIENMT0JCRVJfR09UX2VieAogICAgICAgIENMT0JfQ09NTUFfZWJ4X2VicAogICAgICAgIENMT0JCRVJfZWJwCiAgICAgICAgQ0xPQl9DT01NQV9lYlhfcjFYCiAgICAgICAgQ0xPQkJFUl9yMTFfcjEyX3IxMwogICApOwoKfSAvKiBlbmQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSAqLwoKI2VuZGlmIC8vIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LCgoKCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFMgVSBCICAgICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KCi8vIE9wdGltaXplZCBjb2RlIGZvciBQTkcgU3ViIGZpbHRlciBkZWNvZGVyCgpzdGF0aWMgdm9pZCAvKiBQUklWQVRFICovCnBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93KQp7CiAgIHBuZ191aW50XzMyIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsKICAgaW50IGJwcDsKICAgaW50IGR1bW15X3ZhbHVlX2E7CiAgIGludCBkdW1teV92YWx1ZV9jOwogICBpbnQgZHVtbXlfdmFsdWVfZDsKICAgaW50IGR1bW15X3ZhbHVlX0Q7CiAgIGludCBkaWZmOyAvLyAgICAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwoKICAgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7ICAvLyBjYWxjIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwKICAgRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCiAgICAgLy8gKHdoeSBkbyB3ZSBzdWJ0cmFjdCBvZmYgYnBwPyAgbm90IHNvIGluIGF2ZyBvciBwYWV0aC4uLikKCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgU0FWRV9yMTUKICAgICAgU0FWRV9lYnAKLy9wcmUgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci8vcHJlICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIKICAgICAgImFkZGwgJSVlY3gsICUlZWRpICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAovL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiIC8vIGJyaW5nIGluIHZpYSBlYXguLi4KICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50CiAgICAgICJtb3ZsICUlZWRpLCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKICAgICAgImFkZGwgJDB4ZiwgJSVlYnAgICAgICAgICAgICBcblx0IiAvLyBhZGQgNys4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgInN1YmwgJSVlZGksICUlZWJwICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBmcm9tIHN0YXJ0ID09PiB2YWx1ZQogICAgICAianogc3ViX2dvICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBlYXggYXQgYWxpZ25tZW50CgogICAic3ViX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGZpeCBhbGlnbm1lbnQKICAgICAgIm1vdmIgKCUlZXNpLCUlZWF4LCksICUlY2wgICBcblx0IgogICAgICAiYWRkYiAlJWNsLCAoJSVlZGksJSVlYXgsKSAgIFxuXHQiCiAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAiamIgc3ViX2xwMSAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAic3ViX2dvOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIFJFU1RPUkVfRnVsbExlbmd0aCAiJSVlY3ggICAgXG5cdCIgLy8gRnVsbExlbmd0aCAtPiBlY3gKICAgICAgIm1vdmwgJSVlY3gsICUlZWR4ICAgICAgICAgICBcblx0IgogICAgICAic3VibCAlJWVheCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IGFsaWdubWVudCBmaXgKICAgICAgImFuZGwgJDB4MDAwMDAwMDcsICUlZWR4ICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA4CiAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gbGVuZ3RoCi8vb3V0ICJtb3ZsICUlZWN4LCBNTVhMZW5ndGggICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlYnAsICUlZWRpICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKICAgICAgUkVTVE9SRV9lYnAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgKGNvdWxkIHN3YXAgZWJwIGFuZCBlY3ggZnVuY3Rpb25zKQogICAgICBSRVNUT1JFX3IxNQoKICAgICAgOiAiPWMiIChNTVhMZW5ndGgpLCAgICAgICAvLyAwICAgICAvLyBvdXRwdXQgcmVncwogICAgICAgICI9RCIgKGRpZmYpLCAgICAgICAgICAgIC8vIDEKICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAyCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAiMiIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKCiAgICAgIDogIiVlc2kiLCAiJWVkeCIgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgX0NMT0JCRVJfcjE1CiAgICAgICAgX0NMT0JCRVJfZWJwCiAgICk7CgogICAvLyBub3cgZG8gdGhlIG1hdGggZm9yIHRoZSByZXN0IG9mIHRoZSByb3cKICAgc3dpdGNoIChicHApCiAgIHsKICAgICAgY2FzZSAzOgogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IDI0OyAgICAgICAvLyA9PSAzICogOAovLyAgICAgICBfU2hpZnRSZW0gID0gNDA7ICAgICAgLy8gPT0gNjQgLSAyNAoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0syXzNfMyAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2syXzNfMwogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgIm1vdmwgJSVlZGksICUlZXNpICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZGwgJSVlY3gsICUlZWRpICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW02ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTYgICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBtYXNrIGluIG1tNiB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgM3JkIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVkeCwpLCAlJW1tMSBcblx0IgoKICAgICAgICAgInN1Yl8zbHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0CiAgICAgICAgICAgICJwc3JscSAkNDAsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCiAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVkeCwpLCAlJW1tMCAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDJuZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgM3JkIGFjdGl2ZSBncm91cAogICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIHVwZGF0ZWQgUmF3cyB0byBhcnJheQogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBwcmVwIDFzdCBhZGQgYXQgdG9wIG9mIGxvb3AKICAgICAgICAgICAgImpiIHN1Yl8zbHAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgMyBicHAKCiAgICAgIGNhc2UgNDogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA2IGJwcCBjYXNlIHZpYSBfU2hpZnRCcHAgYW5kIF9TaGlmdFJlbSwKICAgICAgeyAgICAgICAgIC8vIGJ1dCA2NC1iaXQgUElDLy5zbyBwcm9ibGVtcyAoY291bGQgc3RpbGwgc2hhcmUsIG1vdmluZyB2YXJzCiAgICAgICAgICAgICAgICAvLyBpbnRvIHVudXNlZCBNTVggcmVncyB2aWEgZWN4L2VkeCwgYnV0IGtsdWRneSkKLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyAzMiAocHNsbHEpCi8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMzIgKHBzcmxxKQoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkbCAlJWVjeCwgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWR4LCksICUlbW0xIFxuXHQiCgogICAgICAgICAic3ViXzRscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWR4LCksICUlbW0wICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMzIsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJSVlZGksJSVlZHgsKSBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gcHJlcCAxc3QgYWRkIGF0IHRvcCBvZiBsb29wCiAgICAgICAgICAgICJqYiBzdWJfNGxwICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQogICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAzCgogICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4CgogICAgICAgICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICwgIiVtbTAiLCAiJW1tMSIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgNCBicHAKCiAgICAgIGNhc2UgNjogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA0IGJwcCBjYXNlIChzZWUgY29tbWVudHMgdGhlcmUpCiAgICAgIHsKLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyA0OCAocHNsbHEpCi8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMTYgKHBzcmxxKQoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkbCAlJWVjeCwgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWR4LCksICUlbW0xIFxuXHQiCgogICAgICAgICAic3ViXzZscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWR4LCksICUlbW0wICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkNDgsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJSVlZGksJSVlZHgsKSBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gcHJlcCAxc3QgYWRkIGF0IHRvcCBvZiBsb29wCiAgICAgICAgICAgICJqYiBzdWJfNmxwICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQogICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAzCgogICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4CgogICAgICAgICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICwgIiVtbTAiLCAiJW1tMSIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgNiBicHAKCiAgICAgIGNhc2UgMToKICAgICAgewogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWR4ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAiY21wbCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImpuYiBzdWJfMWVuZCAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci8vIGlycmVsLiAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gKGFjdHVhbGx5IGJ1ZyB3aXRoIHByZWxvYWQpCi8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZGwgJSVlY3gsICUlZWRpICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAoKICAgICAgICAgInN1Yl8xbHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92YiAoJSVlc2ksJSVlZHgsKSwgJSVjbCAgIFxuXHQiCiAgICAgICAgICAgICJhZGRiICUlY2wsICglJWVkaSwlJWVkeCwpICAgXG5cdCIKICAgICAgICAgICAgImluY2wgJSVlZHggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIGNvbXBhcmUgd2l0aCBGdWxsTGVuZ3RoCiAgICAgICAgICAgICJqYiBzdWJfMWxwICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICJzdWJfMWVuZDogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICApOwogICAgICB9CiAgICAgIHJldHVybjsgIC8vIGVuZCAxIGJwcCAoYnlwYXNzaW5nIGNsZWFudXAgYmxvY2shKQoKICAgICAgY2FzZSAyOgogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IDE2OyAgICAgICAvLyA9PSAyICogOAovLyAgICAgICBfU2hpZnRSZW0gPSA0ODsgICAgICAgLy8gPT0gNjQgLSAxNgoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0s0XzJfMiAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazRfMl8yCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNiAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW02ICAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgbWFzayBpbiBtbTYgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDNyZCBhY3RpdmUgYnl0ZSBncm91cAogICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwogICAgICAgICAgICAibW92cSAlJW1tNiwgJSVtbTUgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkbCAlJWVjeCwgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNSAgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW01IHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA0dGggYWN0aXZlIGJ5dGUgZ3JvdXAKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWR4LCksICUlbW0xIFxuXHQiCgogICAgICAgICAic3ViXzJscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKICAgICAgICAgICAgInBzcmxxICQ0OCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWR4LCksICUlbW0wICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAzcmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgNHRoIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDR0aCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIHVwZGF0ZWQgUmF3cyB0byBhcnJheQogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBwcmVwIDFzdCBhZGQgYXQgdG9wIG9mIGxvb3AKICAgICAgICAgICAgImpiIHN1Yl8ybHAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAyIGJwcAoKICAgICAgY2FzZSA4OgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgU0FWRV9lYnAKLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdmwgJSVlZGksICUlZXNpICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZGwgJSVlY3gsICUlZWRpICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKLy8gcHJlbG9hZCAgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVkeCwpLCAlJW1tNyBcblx0IgogICAgICAgICAgICAibW92bCAlJWVheCwgJSVlYnAgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIE1NWExlbmd0aCAtPiBlYnAKICAgICAgICAgICAgImFuZGwgJDB4MDAwMDAwM2YsICUlZWJwICAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgNjQKCiAgICAgICAgICJzdWJfOGxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVkeCwpLCAlJW1tMCAgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAxc3QgOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA4KCUlZWRpLCUlZWR4LCksICUlbW0xICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgMm5kIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSwlJWVkeCwpICAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAxc3QgOCBieXRlcwoKICAgICAgICAgICAgLy8gTm93IG1tMCB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBmb3IgdGhlIDJuZCBncm91cCBvZiA4IGJ5dGVzLgogICAgICAgICAgICAvLyBUaGlzIHdpbGwgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggZ3JvdXAgb2YgOCBieXRlcyB3aXRoIHRoZSA4dGgKICAgICAgICAgICAgLy8gZ3JvdXAgYmVpbmcgdXNlZCBhcyB0aGUgUmF3KHgtYnBwKSBmb3IgdGhlIDFzdCBncm91cCBvZiB0aGUKICAgICAgICAgICAgLy8gbmV4dCBsb29wLgoKICAgICAgICAgICAgInBhZGRiICUlbW0wLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgMTYoJSVlZGksJSVlZHgsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDNyZCA4IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUlZWRpLCUlZWR4LCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgMm5kIDggYnl0ZXMKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgMjQoJSVlZGksJSVlZHgsKSwgJSVtbTMgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDR0aCA4IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAxNiglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgM3JkIDggYnl0ZXMKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgMzIoJSVlZGksJSVlZHgsKSwgJSVtbTQgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDV0aCA4IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAyNCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgNHRoIDggYnl0ZXMKICAgICAgICAgICAgInBhZGRiICUlbW0zLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgNDAoJSVlZGksJSVlZHgsKSwgJSVtbTUgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDZ0aCA4IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAzMiglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgNXRoIDggYnl0ZXMKICAgICAgICAgICAgInBhZGRiICUlbW00LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgNDgoJSVlZGksJSVlZHgsKSwgJSVtbTYgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDd0aCA4IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICUlbW01LCA0MCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgNnRoIDggYnl0ZXMKICAgICAgICAgICAgInBhZGRiICUlbW01LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgNTYoJSVlZGksJSVlZHgsKSwgJSVtbTcgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDh0aCA4IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICUlbW02LCA0OCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgN3RoIDggYnl0ZXMKICAgICAgICAgICAgImFkZGwgJDY0LCAlJWVkeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW02LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImNtcGwgJSVlYnAsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gY21wIHRvIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAogICAgICAgICAgICAibW92cSAlJW1tNywgLTgoJSVlZGksJSVlZHgsKSBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDh0aCA4IGJ5dGVzCiAgICAgICAgICAgICJqYiBzdWJfOGxwICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHRvIE1NWExlbmd0aAogICAgICAgICAgICAiam5iIHN1Yl84bHQ4ICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgInN1Yl84bHBBOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWR4LCksICUlbW0wICAgXG5cdCIKICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gY29tcGFyZSB0byBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWR4LCkgXG5cdCIgLy8gLTggdG8gb2Zmc2V0IGVhcmx5IGFkZGwgZWR4CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tNyAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgY2FsY3VsYXRlZCBSYXcoeCkgZGF0YQogICAgICAgICAgICAiamIgc3ViXzhscEEgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgdG8gbW03IHRvIGJlIG5ldyBSYXcoeC1icHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBmb3IgbmV4dCBsb29wCiAgICAgICAgICJzdWJfOGx0ODogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIFJFU1RPUkVfZWJwCgogICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQogICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAzCgogICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4CgogICAgICAgICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICBfQ0xPQkJFUl9lYnAKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiCiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDggYnBwCgogICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0CiAgICAgIHsKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECiAgICAgICAgIHBuZ19kZWJ1ZygxLAogICAgICAgICAgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpKVxuIik7CiNlbmRpZgogICAgICB9CiAgICAgIGJyZWFrOwoKICAgfSAvLyBlbmQgc3dpdGNoIChicHApCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vcHJlICJtb3ZsIE1NWExlbmd0aCwgJSVlYXggICAgICAgIFxuXHQiCi8vcHJlICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgIFxuXHQiCi8vcHJlICJjbXBsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgIFxuXHQiCiAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgIFxuXHQiCiAgICAgICJqbmIgc3ViX2VuZCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovL3ByZSAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAiYWRkbCAlJWVjeCwgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAogICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgICBcblx0IgoKICAgInN1Yl9scDI6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCUlZXNpLCUlZWF4LCksICUlY2wgICAgXG5cdCIKICAgICAgImFkZGIgJSVjbCwgKCUlZWRpLCUlZWF4LCkgICAgXG5cdCIKICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICAgXG5cdCIgLy8gRnVsbExlbmd0aAogICAgICAiamIgc3ViX2xwMiAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgInN1Yl9lbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZW5kIE1NWCBpbnN0cnVjdGlvbnMKCiAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgLy8gMgogICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpICAgIC8vIDMKCiAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAiMiIgKE1NWExlbmd0aCksICAgICAgICAvLyBlYXgKICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlZHgKCiAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICApOwoKfSAvLyBlbmQgb2YgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkKCgoKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLyAgICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFUgUCAgICAgICAgICAgIC8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwoKLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBVcCBmaWx0ZXIgZGVjb2RlcgoKc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCnsKICAgcG5nX3VpbnRfMzIgbGVuOwogICBpbnQgZHVtbXlfdmFsdWVfZDsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciAzIChkeCkgd2FzIHNwaWxsZWQnIGVycm9yCiAgIGludCBkdW1teV92YWx1ZV9TOwogICBpbnQgZHVtbXlfdmFsdWVfRDsKCiAgIGxlbiA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB0byBmaWx0ZXIKCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgU0FWRV9HT1RfZWJ4Ci8vcHJlICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIGdldCAjIG9mIGJ5dGVzIHRvIGFsaWdubWVudAogICAgICAibW92bCAlJWVkaSwgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgICBcblx0IgogICAgICAiYWRkbCAkMHg3LCAlJWVjeCAgICAgICAgICAgICBcblx0IgogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgICBcblx0IgogICAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlY3ggICAgICBcblx0IgovL3ByZSAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgICBcblx0IgogICAgICAic3VibCAlJWVkaSwgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAianogdXBfZ28gICAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgInVwX2xwMTogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZml4IGFsaWdubWVudAogICAgICAibW92YiAoJSVlZGksJSVlYngsKSwgJSVhbCAgICBcblx0IgogICAgICAiYWRkYiAoJSVlc2ksJSVlYngsKSwgJSVhbCAgICBcblx0IgogICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgICBcblx0IgogICAgICAibW92YiAlJWFsLCAtMSglJWVkaSwlJWVieCwpICBcblx0IiAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0bwogICAgICAiamIgdXBfbHAxICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGluY2wgZWJ4CgogICAidXBfZ286ICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgovL3ByZSAibW92bCBsZW4sICUlZWR4ICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVkeCwgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAic3VibCAlJWVieCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICJhbmRsICQweDAwMDAwMDNmLCAlJWVkeCAgICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDY0CiAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIGxlbmd0aAoKICAgICAgLy8gdW5yb2xsZWQgbG9vcCAtIHVzZSBhbGwgTU1YIHJlZ2lzdGVycyBhbmQgaW50ZXJsZWF2ZSB0byByZWR1Y2UKICAgICAgLy8gbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgKGxvb3BzKSBhbmQgcmVkdWNlIHBhcnRpYWwgc3RhbGxzCiAgICJ1cF9sb29wOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxICglJWVzaSwlJWVieCwpLCAlJW1tMSAgIFxuXHQiCiAgICAgICJtb3ZxICglJWVkaSwlJWVieCwpLCAlJW1tMCAgIFxuXHQiCiAgICAgICJtb3ZxIDgoJSVlc2ksJSVlYngsKSwgJSVtbTMgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDgoJSVlZGksJSVlYngsKSwgJSVtbTIgIFxuXHQiCiAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGksJSVlYngsKSAgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDE2KCUlZXNpLCUlZWJ4LCksICUlbW01IFxuXHQiCiAgICAgICJtb3ZxICUlbW0yLCA4KCUlZWRpLCUlZWJ4LCkgIFxuXHQiCiAgICAgICJtb3ZxIDE2KCUlZWRpLCUlZWJ4LCksICUlbW00IFxuXHQiCiAgICAgICJtb3ZxIDI0KCUlZXNpLCUlZWJ4LCksICUlbW03IFxuXHQiCiAgICAgICJwYWRkYiAlJW1tNSwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDI0KCUlZWRpLCUlZWJ4LCksICUlbW02IFxuXHQiCiAgICAgICJtb3ZxICUlbW00LCAxNiglJWVkaSwlJWVieCwpIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tNywgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDMyKCUlZXNpLCUlZWJ4LCksICUlbW0xIFxuXHQiCiAgICAgICJtb3ZxICUlbW02LCAyNCglJWVkaSwlJWVieCwpIFxuXHQiCiAgICAgICJtb3ZxIDMyKCUlZWRpLCUlZWJ4LCksICUlbW0wIFxuXHQiCiAgICAgICJtb3ZxIDQwKCUlZXNpLCUlZWJ4LCksICUlbW0zIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDQwKCUlZWRpLCUlZWJ4LCksICUlbW0yIFxuXHQiCiAgICAgICJtb3ZxICUlbW0wLCAzMiglJWVkaSwlJWVieCwpIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDQ4KCUlZXNpLCUlZWJ4LCksICUlbW01IFxuXHQiCiAgICAgICJtb3ZxICUlbW0yLCA0MCglJWVkaSwlJWVieCwpIFxuXHQiCiAgICAgICJtb3ZxIDQ4KCUlZWRpLCUlZWJ4LCksICUlbW00IFxuXHQiCiAgICAgICJtb3ZxIDU2KCUlZXNpLCUlZWJ4LCksICUlbW03IFxuXHQiCiAgICAgICJwYWRkYiAlJW1tNSwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDU2KCUlZWRpLCUlZWJ4LCksICUlbW02IFxuXHQiCiAgICAgICJtb3ZxICUlbW00LCA0OCglJWVkaSwlJWVieCwpIFxuXHQiCiAgICAgICJhZGRsICQ2NCwgJSVlYnggICAgICAgICAgICAgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tNywgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxICUlbW02LCAtOCglJWVkaSwlJWVieCwpIFxuXHQiIC8vICgrNTYpbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7CiAgICAgICJqYiB1cF9sb29wICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICAtOCB0byBvZmZzZXQgYWRkbCBlYngKCiAgICAgICJjbXBsICQwLCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAogICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgImNtcGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIgLy8gdGVzdCBmb3IgbGVzcyB0aGFuIDggYnl0ZXMKICAgICAgImpiIHVwX2x0OCAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIFthZGRlZCBieSBsY3JlZXZlIGF0IG5ldGlucy5uZXRdCgogICAgICAiYWRkbCAlJWVkeCwgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlZHggICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA4CiAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIGxlbmd0aAogICAgICAianogdXBfbHQ4ICAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgInVwX2xwQTogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gdXNlIE1NWCByZWdzIHRvIHVwZGF0ZSA4IGJ5dGVzIHNpbS4KICAgICAgIm1vdnEgKCUlZXNpLCUlZWJ4LCksICUlbW0xICAgXG5cdCIKICAgICAgIm1vdnEgKCUlZWRpLCUlZWJ4LCksICUlbW0wICAgXG5cdCIKICAgICAgImFkZGwgJDgsICUlZWJ4ICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWJ4LCkgXG5cdCIgLy8gbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC04IHRvCiAgICAgICJqYiB1cF9scEEgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBvZmZzZXQgYWRkIGVieAogICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgOAogICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgInVwX2x0ODogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICAgXG5cdCIKICAgICAgImFkZGwgJSVlZHgsICUlZWN4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBvdmVyIGJ5dGUgY291bnQgaW50byBjb3VudGVyCgogICAidXBfbHAyOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyB1c2UgeDg2IHJlZ3MgZm9yIHJlbWFpbmluZyBieXRlcwogICAgICAibW92YiAoJSVlZGksJSVlYngsKSwgJSVhbCAgICBcblx0IgogICAgICAiYWRkYiAoJSVlc2ksJSVlYngsKSwgJSVhbCAgICBcblx0IgogICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgICBcblx0IgogICAgICAibW92YiAlJWFsLCAtMSglJWVkaSwlJWVieCwpICBcblx0IiAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0bwogICAgICAiamIgdXBfbHAyICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGluYyBlYngKCiAgICJ1cF9lbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGNvbnZlcnNpb24gb2YgZmlsdGVyZWQgcm93IGNvbXBsZXRlCiAgICAgIFJFU1RPUkVfR09UX2VieAoKICAgICAgOiAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgIC8vIDEKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSAgICAvLyAyCgogICAgICA6ICIwIiAobGVuKSwgICAgICAgICAgICAgIC8vIGVkeCAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChwcmV2X3JvdyksICAgICAgICAgLy8gZXNpCiAgICAgICAgIjIiIChyb3cpICAgICAgICAgICAgICAgLy8gZWRpCgogICAgICA6ICIlZWF4IiwgIiVlY3giICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0IChubyBpbnB1dCByZWdzISkKICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiCiAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICApOwoKfSAvLyBlbmQgb2YgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAoKQoKI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KCgoKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKCi8qIE9wdGltaXplZCBwbmdfcmVhZF9maWx0ZXJfcm93IHJvdXRpbmVzICovCgp2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAKICAgcm93LCBwbmdfYnl0ZXAgcHJldl9yb3csIGludCBmaWx0ZXIpCnsKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICBjaGFyIGZpbG5tWzEwXTsKI2VuZGlmCgojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQogICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiNlbmRpZgogICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgIH0KI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KCiNpZiBkZWZpbmVkKFBOR19ERUJVRykKICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maWx0ZXJfcm93IChwbmdnY2NyZC5jKVxuIik7CiAgIHN3aXRjaCAoZmlsdGVyKQogICB7CiAgICAgIGNhc2UgMDoKICAgICAgICAgcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgIm5vbmUiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDE6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJzdWItJXMiLAojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpICYmCiAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgICBfbW14X3N1cHBvcnRlZAojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDoKI2VuZGlmCiAgICAgICAgICAgICAieDg2Iik7CiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAyOgogICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAidXAtJXMiLAojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgogICAgICAgICAgID8gIk1NWCIgOgojZW5kaWYKICAgICAgICAgICAgICJ4ODYiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDM6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJhdmctJXMiLAojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpICYmCiAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgICBfbW14X3N1cHBvcnRlZAojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDoKI2VuZGlmCiAgICAgICAgICAgICAieDg2Iik7CiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSA0OgogICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAiUGFldGgtJXMiLAojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgogICAgICAgICAgID8gIk1NWCIgOgojZW5kaWYKICAgICAgICAgICAgICJ4ODYiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAidW5rbm93biIpOwogICAgICAgICBicmVhazsKICAgfQogICBwbmdfZGVidWcyKDAsICJyb3dfbnVtYmVyPSU1bGQsICUxMHMsICIsIHBuZ19wdHItPnJvd19udW1iZXIsIGZpbG5tKTsKICAgcG5nX2RlYnVnMSgwLCAicm93PTB4JTA4bHgsICIsICh1bnNpZ25lZCBsb25nKXJvdyk7CiAgIHBuZ19kZWJ1ZzIoMCwgInBpeGRlcHRoPSUyZCwgYnl0ZXM9JWQsICIsIChpbnQpcm93X2luZm8tPnBpeGVsX2RlcHRoLAogICAgICAoaW50KSgocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMykpOwogICBwbmdfZGVidWcxKDAsInJvd2J5dGVzPSU4bGRcbiIsIHJvd19pbmZvLT5yb3dieXRlcyk7CiNlbmRpZiAvKiBQTkdfREVCVUcgKi8KCiAgIHN3aXRjaCAoZmlsdGVyKQogICB7CiAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9OT05FOgogICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6CiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpICYmCiAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCiAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihyb3dfaW5mbywgcm93KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXM7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOwogICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3cgKyBicHA7CiAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKCiAgICAgICAgICAgIGZvciAoaSA9IGJwcDsgaSA8IGlzdG9wOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpscCsrKSkgJiAweGZmKTsKICAgICAgICAgICAgICAgcnArKzsKICAgICAgICAgICAgfQogICAgICAgICB9ICAvKiBlbmQgIVVzZU1NWF9zdWIgKi8KICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfVVA6CiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiNlbHNlCiAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICB9CiAgICAgICAgICBlbHNlCiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXM7CiAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgKGludCkoKnBwKyspKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CiAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX3VwICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzoKI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRykgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiNlbHNlCiAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OwogICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIGxwID0gcm93OwogICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnBwOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArCiAgICAgICAgICAgICAgICAgICgoaW50KSgqcHArKykgPj4gMSkpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKwogICAgICAgICAgICAgICAgICAoKGludCkoKnBwKysgKyAqbHArKykgPj4gMSkpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KICAgICAgICAgfSAgLyogZW5kICFVc2VNTVhfYXZnICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOgojaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgfHwgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgewogICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aChyb3dfaW5mbywgcm93LCBwcmV2X3Jvdyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQojZW5kaWYgLyogUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgfHwgUE5HX1RIUkVBRF9VTlNBRkVfT0sgKi8KI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfdWludF8zMiBpOwogICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7CiAgICAgICAgICAgIHBuZ19ieXRlcCBwcCA9IHByZXZfcm93OwogICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7CiAgICAgICAgICAgIHBuZ19ieXRlcCBjcCA9IHByZXZfcm93OwogICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnBwOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpwcCsrKSkgJiAweGZmKTsKICAgICAgICAgICAgICAgcnArKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlzdG9wOyBpKyspICAgLyogdXNlIGxlZnRvdmVyIHJwLHBwICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaW50IGEsIGIsIGMsIHBhLCBwYiwgcGMsIHA7CgogICAgICAgICAgICAgICBhID0gKmxwKys7CiAgICAgICAgICAgICAgIGIgPSAqcHArKzsKICAgICAgICAgICAgICAgYyA9ICpjcCsrOwoKICAgICAgICAgICAgICAgcCA9IGIgLSBjOwogICAgICAgICAgICAgICBwYyA9IGEgLSBjOwoKI2lmIGRlZmluZWQoUE5HX1VTRV9BQlMpCiAgICAgICAgICAgICAgIHBhID0gYWJzKHApOwogICAgICAgICAgICAgICBwYiA9IGFicyhwYyk7CiAgICAgICAgICAgICAgIHBjID0gYWJzKHAgKyBwYyk7CiNlbHNlCiAgICAgICAgICAgICAgIHBhID0gcCA8IDAgPyAtcCA6IHA7CiAgICAgICAgICAgICAgIHBiID0gcGMgPCAwID8gLXBjIDogcGM7CiAgICAgICAgICAgICAgIHBjID0gKHAgKyBwYykgPCAwID8gLShwICsgcGMpIDogcCArIHBjOwojZW5kaWYKCiAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykKICAgICAgICAgICAgICAgICAgICAgcCA9IGE7CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBiIDw9IHBjKQogICAgICAgICAgICAgICAgICAgICBwID0gYjsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBwID0gYzsKICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICBwID0gKHBhIDw9IHBiICYmIHBhIDw9IHBjKSA/IGEgOiAocGIgPD0gcGMpID8gYiA6IGM7CgogICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgcCkgJiAweGZmKTsKICAgICAgICAgICAgICAgcnArKzsKICAgICAgICAgICAgfQogICAgICAgICB9ICAvKiBlbmQgIVVzZU1NWF9wYWV0aCAqLwogICAgICAgICBicmVhazsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJZ25vcmluZyBiYWQgcm93LWZpbHRlciB0eXBlIik7CiAgICAgICAgICpyb3c9MDsKICAgICAgICAgYnJlYWs7CiAgIH0KfQoKI2VuZGlmIC8qIFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cgKi8KCgojZW5kaWYgLyogUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCAmJiBQTkdfVVNFX1BOR0dDQ1JEICovCg==