From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8149 invoked by alias); 22 Feb 2003 20:06:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 8132 invoked by uid 71); 22 Feb 2003 20:06:00 -0000 Resent-Date: 22 Feb 2003 20:06:00 -0000 Resent-Message-ID: <20030222200600.8130.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, tilps@hotmail.com Received: (qmail 7558 invoked by uid 48); 22 Feb 2003 20:02:25 -0000 Message-Id: <20030222200225.7557.qmail@sources.redhat.com> Date: Sat, 22 Feb 2003 20:06:00 -0000 From: tilps@hotmail.com Reply-To: tilps@hotmail.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9809: 3.4 regression(?) - spurious ambiguity of overloaded function X-SW-Source: 2003-02/txt/msg01128.txt.bz2 List-Id: >Number: 9809 >Category: c++ >Synopsis: 3.4 regression(?) - spurious ambiguity of overloaded function >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Sat Feb 22 20:06:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: tilps@hotmail.com >Release: 3.4 - 20030222 >Organization: >Environment: Reading specs from /home/Administrator/gcctesting/bin/../lib/gcc-lib/i686-pc-cyg win/3.4/specs Configured with: ../gcc/configure --prefix=~/gcctesting/ --enable-version-specif ic-runtime-libs --enable-threads=posix --enable-shared : (reconfigured) ../gcc/c onfigure --prefix=/home/Administrator/gcctesting/ --enable-version-specific-runt ime-libs --enable-threads=posix --enable-shared Thread model: posix gcc version 3.4 20030222 (experimental) >Description: $ gcctesting/bin/g++ breakit.cc --save-temps breakit.cc: In function `void nothing()': breakit.cc:24: error: call of overloaded `log(sstring_t&)' is ambiguous breakit.cc:19: error: candidates are: void log(const char*) :24: error: double std::log(double) removing std:string inheritence from sstring_t makes it compile. removing operator bool makes it compile explicit cast to the log function - makes it compile. compiles in all cases with g++ 3.2 regression or is my code flawed? I also wonder why the log(double) function is present without inclusion of cmath... >How-To-Repeat: g++ breakit.ii >Fix: workarounds noted in description. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="breakit.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="breakit.ii" IyAxICJicmVha2l0LmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAiYnJlYWtpdC5jYyIKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL3N0cmluZyIgMSAzCiMgNDQgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvc3RyaW5nIiAzCgojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1j eWd3aW4vYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzUgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1w Yy1jeWd3aW4vYml0cy9jKytjb25maWcuaCIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1w Yy1jeWd3aW4vYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM2ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2 ODYtcGMtY3lnd2luL2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQ2ICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L3N0cmluZyIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMK IyA0MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0cmluZ2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBz dGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAg dGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX3N0cmluZzsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47 CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKCgoKCgoKfQojIDQ3ICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL3N0cmluZyIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2NoYXJf dHJhaXRzLmgiIDEgMwojIDQ0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvY2hhcl90cmFpdHMuaCIg MwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NzdHJpbmciIDEgMwojIDQ4ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2NzdHJpbmciIDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jc3RkZGVmIiAxIDMKIyA0NyAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9jc3RkZGVmIiAzCgojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRkZWYuaCIg MSAzIDQKIyAxNTEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgaW50IHB0cmRp ZmZfdDsKIyAyMTMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQg aW50IHNpemVfdDsKIyA0OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jc3RkZGVmIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTAgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvY3N0cmluZyIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg MSAzIDQKIyAxMCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv X2Fuc2kuaCIgMSAzIDQKIyAxNSAiL3Vzci9pbmNsdWRlL19hbnNpLmgiIDMgNAojIDEgIi91c3Iv aW5jbHVkZS9uZXdsaWIuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL19hbnNpLmgiIDIgMyA0 CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jb25maWcuaCIgMSAzIDQKCgoKIyAxICIvdXNyL2luY2x1 ZGUvbWFjaGluZS9pZWVlZnAuaCIgMSAzIDQKIyA1ICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5o IiAyIDMgNAojIDE3ICIvdXNyL2luY2x1ZGUvX2Fuc2kuaCIgMiAzIDQKIyAxMSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMSAzIDQK IyA5ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy9fdHlwZXMuaCIgMSAzIDQKIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9f dHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBfb2ZmX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBs b25nIGxvbmcgX29mZjY0X3Q7CgoKdHlwZWRlZiBpbnQgX3NzaXplX3Q7CgoKCgoKIyAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzU0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkZGVmLmgiIDMg NAp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvX3R5 cGVzLmgiIDIgMyA0CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAg ewogICAgd2ludF90IF9fd2NoOwogICAgdW5zaWduZWQgY2hhciBfX3djaGJbNF07CiAgfSBfX3Zh bHVlOwp9IF9tYnN0YXRlX3Q7Cgp0eXBlZGVmIGludCBfZmxvY2tfdDsKIyAxNSAiL3Vzci9pbmNs dWRlL3N5cy9yZWVudC5oIiAyIDMgNAoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fVUxvbmc7 CiMgNDAgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CnN0cnVjdCBfQmlnaW50CnsKICBz dHJ1Y3QgX0JpZ2ludCAqX25leHQ7CiAgaW50IF9rLCBfbWF4d2RzLCBfc2lnbiwgX3dkczsKICBf X1VMb25nIF94WzFdOwp9OwoKCnN0cnVjdCBfX3RtCnsKICBpbnQgX190bV9zZWM7CiAgaW50IF9f dG1fbWluOwogIGludCBfX3RtX2hvdXI7CiAgaW50IF9fdG1fbWRheTsKICBpbnQgX190bV9tb247 CiAgaW50IF9fdG1feWVhcjsKICBpbnQgX190bV93ZGF5OwogIGludCBfX3RtX3lkYXk7CiAgaW50 IF9fdG1faXNkc3Q7Cn07CiMgNjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CnN0cnVj dCBfYXRleGl0IHsKICAgICAgICBzdHJ1Y3QgX2F0ZXhpdCAqX25leHQ7CiAgICAgICAgaW50IF9p bmQ7CiAgICAgICAgdm9pZCAoKl9mbnNbMzJdKSh2b2lkKTsKICAgICAgICB2b2lkICpfZm5hcmdz WzMyXTsKICAgICAgICBfX1VMb25nIF9mbnR5cGVzOwp9OwojIDkxICIvdXNyL2luY2x1ZGUvc3lz L3JlZW50LmgiIDMgNApzdHJ1Y3QgX19zYnVmIHsKICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFz ZTsKICAgICAgICBpbnQgX3NpemU7Cn07CgoKCgoKCnR5cGVkZWYgbG9uZyBfZnBvc190OwojIDE1 NiAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzIDQKc3RydWN0IF9fc0ZJTEUgewogIHVuc2ln bmVkIGNoYXIgKl9wOwogIGludCBfcjsKICBpbnQgX3c7CiAgc2hvcnQgX2ZsYWdzOwogIHNob3J0 IF9maWxlOwogIHN0cnVjdCBfX3NidWYgX2JmOwogIGludCBfbGJmc2l6ZTsKCgoKCgoKICB2b2lk ICogX2Nvb2tpZTsKCiAgX3NzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfcmVh ZCkgKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBpbnQgX24pOwogIF9zc2l6ZV90IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpICgqX3dyaXRlKSAodm9pZCAqIF9jb29raWUsIGNvbnN0IGNo YXIgKl9idWYsIGludCBfbik7CgogIF9mcG9zX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg KCpfc2VlaykgKHZvaWQgKiBfY29va2llLCBfZnBvc190IF9vZmZzZXQsIGludCBfd2hlbmNlKTsK ICBpbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfY2xvc2UpICh2b2lkICogX2Nvb2tp ZSk7CgoKICBzdHJ1Y3QgX19zYnVmIF91YjsKICB1bnNpZ25lZCBjaGFyICpfdXA7CiAgaW50IF91 cjsKCgogIHVuc2lnbmVkIGNoYXIgX3VidWZbM107CiAgdW5zaWduZWQgY2hhciBfbmJ1ZlsxXTsK CgogIHN0cnVjdCBfX3NidWYgX2xiOwoKCiAgaW50IF9ibGtzaXplOwogIGludCBfb2Zmc2V0OwoK CiAgc3RydWN0IF9yZWVudCAqX2RhdGE7CgoKCiAgX2Zsb2NrX3QgX2xvY2s7Cgp9OwojIDI0OSAi L3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19zRklMRSBfX0ZJ TEU7CgoKc3RydWN0IF9nbHVlCnsKICBzdHJ1Y3QgX2dsdWUgKl9uZXh0OwogIGludCBfbmlvYnM7 CiAgX19GSUxFICpfaW9iczsKfTsKIyAyODAgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0 CnN0cnVjdCBfcmFuZDQ4IHsKICB1bnNpZ25lZCBzaG9ydCBfc2VlZFszXTsKICB1bnNpZ25lZCBz aG9ydCBfbXVsdFszXTsKICB1bnNpZ25lZCBzaG9ydCBfYWRkOwoKCgoKfTsKIyA1MzIgIi91c3Iv aW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CnN0cnVjdCBfcmVlbnQKewogIGludCBfZXJybm87CgoK CgogIF9fRklMRSAqX3N0ZGluLCAqX3N0ZG91dCwgKl9zdGRlcnI7CgogIGludCBfaW5jOwogIGNo YXIgX2VtZXJnZW5jeVsyNV07CgogIGludCBfY3VycmVudF9jYXRlZ29yeTsKICBjb25zdCBjaGFy ICpfY3VycmVudF9sb2NhbGU7CgogIGludCBfX3NkaWRpbml0OwoKICB2b2lkIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpICgqX19jbGVhbnVwKSAoc3RydWN0IF9yZWVudCAqKTsKCgogIHN0cnVj dCBfQmlnaW50ICpfcmVzdWx0OwogIGludCBfcmVzdWx0X2s7CiAgc3RydWN0IF9CaWdpbnQgKl9w NXM7CiAgc3RydWN0IF9CaWdpbnQgKipfZnJlZWxpc3Q7CgoKICBpbnQgX2N2dGxlbjsKICBjaGFy ICpfY3Z0YnVmOwoKICB1bmlvbgogICAgewogICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAg ICB1bnNpZ25lZCBpbnQgX3VudXNlZF9yYW5kOwogICAgICAgICAgY2hhciAqIF9zdHJ0b2tfbGFz dDsKICAgICAgICAgIGNoYXIgX2FzY3RpbWVfYnVmWzI2XTsKICAgICAgICAgIHN0cnVjdCBfX3Rt IF9sb2NhbHRpbWVfYnVmOwogICAgICAgICAgaW50IF9nYW1tYV9zaWduZ2FtOwogICAgICAgICAg X19leHRlbnNpb25fXyB1bnNpZ25lZCBsb25nIGxvbmcgX3JhbmRfbmV4dDsKICAgICAgICAgIHN0 cnVjdCBfcmFuZDQ4IF9yNDg7CiAgICAgICAgICBfbWJzdGF0ZV90IF9tYmxlbl9zdGF0ZTsKICAg ICAgICAgIF9tYnN0YXRlX3QgX21idG93Y19zdGF0ZTsKICAgICAgICAgIF9tYnN0YXRlX3QgX3dj dG9tYl9zdGF0ZTsKICAgICAgICAgIGNoYXIgX2w2NGFfYnVmWzhdOwogICAgICAgICAgY2hhciBf c2lnbmFsX2J1ZlsyNF07CiAgICAgICAgICBpbnQgX2dldGRhdGVfZXJyOwogICAgICAgICAgX21i c3RhdGVfdCBfbWJybGVuX3N0YXRlOwogICAgICAgICAgX21ic3RhdGVfdCBfbWJydG93Y19zdGF0 ZTsKICAgICAgICAgIF9tYnN0YXRlX3QgX21ic3J0b3djc19zdGF0ZTsKICAgICAgICAgIF9tYnN0 YXRlX3QgX3djcnRvbWJfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3NydG9tYnNfc3Rh dGU7CiAgICAgICAgfSBfcmVlbnQ7CgoKCiAgICAgIHN0cnVjdAogICAgICAgIHsKCiAgICAgICAg ICB1bnNpZ25lZCBjaGFyICogX25leHRmWzMwXTsKICAgICAgICAgIHVuc2lnbmVkIGludCBfbm1h bGxvY1szMF07CiAgICAgICAgfSBfdW51c2VkOwogICAgfSBfbmV3OwoKCiAgc3RydWN0IF9hdGV4 aXQgKl9hdGV4aXQ7CiAgc3RydWN0IF9hdGV4aXQgX2F0ZXhpdDA7CgoKICB2b2lkICgqKihfc2ln X2Z1bmMpKShpbnQpOwoKCgoKICBzdHJ1Y3QgX2dsdWUgX19zZ2x1ZTsKICBfX0ZJTEUgX19zZlsz XTsKfTsKIyA3MjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CmV4dGVybiBzdHJ1Y3Qg X3JlZW50ICpfaW1wdXJlX3B0ciA7Cgp2b2lkIF9yZWNsYWltX3JlZW50IChzdHJ1Y3QgX3JlZW50 ICopOwojIDc0NiAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzIDQKfQojIDEyICIvdXNyL2lu Y2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0 CiMgMTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgoKCgpleHRlcm4gIkMiIHsKCnZv aWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50 LCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY21wIChjb25zdCB2 b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIG1lbWNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKiBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1tb3ZlICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6 ZV90KTsKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbXNldCAodm9pZCAqLCBp bnQsIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNhdCAoY2hh ciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJj aHIgKGNvbnN0IGNoYXIgKiwgaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0 cmNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgc3RyY29sbCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKc2l6 ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNzcG4gKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyZXJyb3IgKGlu dCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJsZW4gKGNvbnN0IGNoYXIg Kik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cm5jYXQgKGNoYXIgKiwgY29u c3QgY2hhciAqLCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybmNt cCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHN0cm5jcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpj aGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJwYnJrIChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnJjaHIgKGNv bnN0IGNoYXIgKiwgaW50KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnNw biAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzdHJzdHIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgpjaGFyICpfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2sgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgpz aXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyeGZybSAoY2hhciAqLCBjb25zdCBj aGFyICosIHNpemVfdCk7CgoKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9r X3IgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKTsKCmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBiY21wIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKdm9p ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBiY29weSAoY29uc3Qgdm9pZCAqLCB2b2lkICos IHNpemVfdCk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYnplcm8gKHZvaWQgKiwg c2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZmcyAoaW50KTsKY2hhciAq X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsKdm9p ZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNjcHkgKHZvaWQgKiwgY29uc3Qgdm9p ZCAqLCBpbnQsIHNpemVfdCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1w Y3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgcmluZGV4IChjb25zdCBjaGFyICosIGludCk7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBzdHJjYXNlY21wIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmNo YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmR1cCAoY29uc3QgY2hhciAqKTsKY2hh ciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cmR1cF9yIChzdHJ1Y3QgX3JlZW50ICos IGNvbnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cm5kdXAg KGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg X3N0cm5kdXBfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmNoYXIg Kl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmVycm9yX3IgKGludCwgY2hhciAqLCBzaXpl X3QpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybGNhdCAoY2hhciAqLCBj b25zdCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz dHJsY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHN0cm5jYXNlY21wIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6 ZV90KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cm5sZW4gKGNvbnN0IGNo YXIgKiwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ryc2VwIChj aGFyICoqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz dHJsd3IgKGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnVwciAo Y2hhciAqKTsKCgpjb25zdCBjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJzaWdu YWwgKGludCBfX3NpZ25vKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b3Np Z25vIChjb25zdCBjaGFyICpfX25hbWUpOwojIDk4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMg NAp9CiMgNTIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0cmluZyIgMiAzCiMgNzcgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2lu ZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5n IDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6 OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6 c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpz dHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0 cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBf X3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29u c3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5l IGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGlu X3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6 OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hh ciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNo YXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioK ICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJj aHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJz dHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3My KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19z MSksIF9fczIpOyB9Cn0KIyA0NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2NoYXJfdHJhaXRzLmgi IDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9mcG9zLmgiIDEgMwojIDQzICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2JpdHMvZnBvcy5oIiAzCgojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1j eWd3aW4vYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5 Z3dpbi9iaXRzL2MrK2lvLmgiIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NzdGRpbyIgMSAzCiMg NDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0ZGlvIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoj IDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL3N0ZGFy Zy5oIiAzIDQKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAzOCAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CiMgNDYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz IDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjQgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKCgoKCgp0eXBlZGVmIGludCBfX2ludDMyX3Q7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgoKCgoKCl9fZXh0ZW5zaW9uX18gdHlw ZWRlZiBsb25nIGxvbmcgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIF9fdWludDY0X3Q7CiMgNTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0 CiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDYwICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvdHlwZXMuaCIgMSAzIDQK IyAzNiAiL3Vzci9pbmNsdWRlL21hY2hpbmUvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQg X19vZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25n IGxvbmcgaW50IF9fbG9mZl90OwojIDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0 CiMgODIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgY2hh ciB1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7CgoKCnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwoKCgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgY2xvY2tfdDsKCgoKCnR5cGVkZWYgbG9uZyB0aW1lX3Q7CgoKCgpzdHJ1 Y3QgdGltZXNwZWMgewogIHRpbWVfdCB0dl9zZWM7CiAgbG9uZyB0dl9uc2VjOwp9OwoKc3RydWN0 IGl0aW1lcnNwZWMgewogIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICBzdHJ1Y3QgdGlt ZXNwZWMgaXRfdmFsdWU7Cn07CgoKdHlwZWRlZiBsb25nIGRhZGRyX3Q7CnR5cGVkZWYgY2hhciAq IGNhZGRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlub190OwojIDEzMCAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHZtX29mZnNldF90Owp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1fc2l6ZV90OwoKCgp0eXBlZGVmIGNoYXIgaW50OF90Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9pbnQ4X3Q7CnR5cGVkZWYgc2hvcnQgaW50MTZfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCB1X2ludDE2X3Q7CnR5cGVkZWYgaW50IGludDMyX3Q7CnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdDsKdHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9pbnQ2NF90Owp0eXBlZGVmIGludDMyX3QgcmVnaXN0 ZXJfdDsKIyAxNjkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IHBp ZF90Owp0eXBlZGVmIGxvbmcga2V5X3Q7CnR5cGVkZWYgX3NzaXplX3Qgc3NpemVfdDsKCgp0eXBl ZGVmIGNoYXIgKiBhZGRyX3Q7CnR5cGVkZWYgaW50IG1vZGVfdDsKIyAxODggIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxpbmtfdDsKIyAyMTAg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBmZF9tYXNrOwoKCgoK CgoKdHlwZWRlZiBzdHJ1Y3QgX3R5cGVzX2ZkX3NldCB7CiAgICAgICAgZmRfbWFzayBmZHNfYml0 c1soKCg2NCkrKCgoc2l6ZW9mIChmZF9tYXNrKSAqIDgpKS0xKSkvKChzaXplb2YgKGZkX21hc2sp ICogOCkpKV07Cn0gX3R5cGVzX2ZkX3NldDsKIyAyNDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBjbG9ja2lkX3Q7CgoKCgp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgdGltZXJfdDsKCgoKCnR5cGVkZWYgbG9uZyB1c2Vjb25kc190OwoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL2Zl YXR1cmVzLmgiIDMgNApleHRlcm4gIkMiIHsKIyA5MyAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl cy5oIiAzIDQKfQojIDI2MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDM2NCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvY3lnd2luL3R5 cGVzLmgiIDEgMyA0CiMgMTMgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMyA0CmV4dGVy biAiQyIKewoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzIDQKIyAy MSAiL3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAyIDMgNAoKdHlwZWRlZiBzdHJ1Y3QgdGlt ZXNwZWMgdGltZXNwZWNfdCwgdGltZXN0cnVjX3Q7Cgp0eXBlZGVmIGxvbmcgX19vZmYzMl90Owp0 eXBlZGVmIGxvbmcgbG9uZyBfX29mZjY0X3Q7CgoKCnR5cGVkZWYgX19vZmYzMl90IG9mZl90OwoK CnR5cGVkZWYgc2hvcnQgX19kZXYxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19kZXYzMl90 OwoKCgp0eXBlZGVmIF9fZGV2MTZfdCBkZXZfdDsKCgp0eXBlZGVmIGxvbmcgYmxrc2l6ZV90OwoK dHlwZWRlZiBsb25nIF9fYmxrY250MzJfdDsKdHlwZWRlZiBsb25nIGxvbmcgX19ibGtjbnQ2NF90 OwoKCgp0eXBlZGVmIF9fYmxrY250MzJfdCBibGtjbnRfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IF9fdWlkMTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2dpZDE2X3Q7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBfX3VpZDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2dpZDMyX3Q7 CgoKCgp0eXBlZGVmIF9fdWlkMTZfdCB1aWRfdDsKdHlwZWRlZiBfX2dpZDE2X3QgZ2lkX3Q7CgoK Cgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfdDsK dHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX211dGV4X3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFk X211dGV4X3Q7Cgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfa2V5X3Qge2NoYXIgX19kdW1teTt9 ICpwdGhyZWFkX2tleV90Owp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl90IHtjaGFyIF9f ZHVtbXk7fSAqcHRocmVhZF9hdHRyX3Q7CnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9tdXRleGF0 dHJfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfbXV0ZXhhdHRyX3Q7CnR5cGVkZWYgc3RydWN0 IF9fcHRocmVhZF9jb25kYXR0cl90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF9jb25kYXR0cl90 Owp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfY29uZF90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVh ZF9jb25kX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKICBp bnQgc3RhdGU7Cn0KcHRocmVhZF9vbmNlX3Q7CnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9yd2xv Y2tfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfcndsb2NrX3Q7CnR5cGVkZWYgc3RydWN0IF9f cHRocmVhZF9yd2xvY2thdHRyX3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX3J3bG9ja2F0dHJf dDsKIyAxMDQgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMyA0Cn0KIyAzNjUgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyA0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIg MyA0CgpleHRlcm4gIkMiIHsKCnR5cGVkZWYgX2Zwb3NfdCBmcG9zX3Q7CnR5cGVkZWYgX19GSUxF IEZJTEU7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N0ZGlvLmgiIDEgMyA0CiMgNTggIi91 c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDE2MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMg NApGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG1wZmlsZSAodm9pZCk7CmNoYXIg KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0bXBuYW0gKGNoYXIgKik7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBmY2xvc2UgKEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBmZmx1c2ggKEZJTEUgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBmcmVvcGVuIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKdm9pZCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRidWYgKEZJTEUgKiwgY2hhciAqKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldHZidWYgKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNp emVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcHJpbnRmIChGSUxFICosIGNv bnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZzY2FuZiAo RklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIHNjYW5mIChjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzc2NhbmYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgdmZwcmludGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2du dWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2cHJpbnRmIChjb25z dCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHZzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmdldGMgKEZJTEUgKik7CmNoYXIgKiBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBmZ2V0cyAoY2hhciAqLCBpbnQsIEZJTEUgKik7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBmcHV0YyAoaW50LCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgZnB1dHMgKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGdldGMgKEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBnZXRjaGFyICh2b2lkKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGdldHMgKGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjIChpbnQs IEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjaGFyIChpbnQpOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0cyAoY29uc3QgY2hhciAqKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVuZ2V0YyAoaW50LCBGSUxFICopOwpzaXplX3QgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnJlYWQgKHZvaWQgKiwgc2l6ZV90IF9zaXplLCBzaXpl X3QgX24sIEZJTEUgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmd3JpdGUg KGNvbnN0IHZvaWQgKiAsIHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmdldHBvcyAoRklMRSAqLCBmcG9zX3QgKik7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc2VlayAoRklMRSAqLCBsb25nLCBpbnQpOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNldHBvcyAoRklMRSAqLCBjb25zdCBmcG9zX3Qg Kik7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRlbGwgKCBGSUxFICopOwp2b2lk IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJld2luZCAoRklMRSAqKTsKdm9pZCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBjbGVhcmVyciAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGZlb2YgKEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBmZXJyb3IgKEZJTEUgKik7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcGVycm9y IChjb25zdCBjaGFyICopOwoKRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZvcGVu IChjb25zdCBjaGFyICpfbmFtZSwgY29uc3QgY2hhciAqX3R5cGUpOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgc3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZW1vdmUgKGNvbnN0IGNoYXIgKik7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZW5hbWUgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKCgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXNwcmludGYgKGNoYXIgKiosIGNv bnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZzZWVrbyAo RklMRSAqLCBvZmZfdCwgaW50KTsKb2ZmX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRl bGxvICggRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZmaXByaW50ZiAo RklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGlwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIGZpcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNpcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIg KiwgLi4uKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRlbXBuYW0gKGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZh c3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBj aGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZm c2NhbmYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB2c2NhbmYgKGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3Qp OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNzY2FuZiAoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBmY2xvc2VhbGwgKHZvaWQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc25w cmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CiMgMjMxICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMyA0CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZG9w ZW4gKGludCwgY29uc3QgY2hhciAqKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBm aWxlbm8gKEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXR3IChGSUxF ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcGNsb3NlIChGSUxFICopOwpGSUxF ICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcG9wZW4gKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dHcgKGludCwgRklMRSAq KTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRidWZmZXIgKEZJTEUgKiwgY2hh ciAqLCBpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0bGluZWJ1ZiAoRklM RSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGNfdW5sb2NrZWQgKEZJTEUg Kik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRjaGFyX3VubG9ja2VkICh2b2lk KTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmbG9ja2ZpbGUgKEZJTEUgKik7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdHJ5bG9ja2ZpbGUgKEZJTEUgKik7CnZvaWQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnVubG9ja2ZpbGUgKEZJTEUgKik7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjX3VubG9ja2VkIChpbnQsIEZJTEUgKik7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjaGFyX3VubG9ja2VkIChpbnQpOwoKCgoKCgpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2FzcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQg KiwgY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX2ZjbG9zZWFsbF9yIChzdHJ1Y3QgX3JlZW50ICopOwpGSUxFICogX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgX2Zkb3Blbl9yIChzdHJ1Y3QgX3JlZW50ICosIGludCwgY29uc3QgY2hh ciAqKTsKRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9mb3Blbl9yIChzdHJ1Y3Qg X3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIF9mc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNo YXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9nZXRjaGFyX3IgKHN0 cnVjdCBfcmVlbnQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0c19y IChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfaXByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ta3N0ZW1wX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hh ciAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ta3RlbXBfciAoc3RydWN0 IF9yZWVudCAqLCBjaGFyICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wZXJy b3JfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgX3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4u KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRjaGFyX3IgKHN0cnVjdCBfcmVl bnQgKiwgaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRzX3IgKHN0cnVj dCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IF9yZW1vdmVfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX3JlbmFtZV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIg Kl9vbGQsIGNvbnN0IGNoYXIgKl9uZXcpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IF9zY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9zcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAq LCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc25w cmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAu Li4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NzY2FuZl9yIChzdHJ1Y3QgX3Jl ZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpjaGFyICogX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX3RlbXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG1w ZmlsZV9yIChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX3RtcG5hbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfdmFzcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29u c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfdmZwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZwcmludGZfciAo c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF92c3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIg KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBfdnNucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNv bnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX3Zmc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZzY2FuZl9yIChz dHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKc3NpemVfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBfX2dldGRlbGltIChjaGFyICoqLCBzaXplX3QgKiwgaW50LCBGSUxF ICopOwpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0bGluZSAoY2hhciAq Kiwgc2l6ZV90ICosIEZJTEUgKik7CiMgMzA5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX3NyZ2V0IChGSUxFICopOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX19zd2J1ZiAoaW50LCBGSUxFICopOwoKCgoKCgpGSUxFICpf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdW5vcGVuIChjb25zdCB2b2lkICogX2Nvb2tpZSwg aW50ICgqcmVhZGZuKSh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKSwgaW50ICgq d3JpdGVmbikodm9pZCAqIF9jb29raWUsIGNvbnN0IGNoYXIgKl9idWYsIGludCBfbiksIGZwb3Nf dCAoKnNlZWtmbikodm9pZCAqIF9jb29raWUsIGZwb3NfdCBfb2ZmLCBpbnQgX3doZW5jZSksIGlu dCAoKmNsb3NlZm4pKHZvaWQgKiBfY29va2llKSk7CiMgMzM0ICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMyA0CnN0YXRpYyBfX2lubGluZV9fIGludCBfX3NnZXRjKEZJTEUgKl9fcCkKICB7CiAgICBp bnQgX19jID0gKC0tKF9fcCktPl9yIDwgMCA/IF9fc3JnZXQoX19wKSA6IChpbnQpKCooX19wKS0+ X3ArKykpOwogICAgaWYgKChfX3AtPl9mbGFncyAmIDB4NDAwMCkgJiYgKF9fYyA9PSAnXHInKSkK ICAgICAgewogICAgICBpbnQgX19jMiA9ICgtLShfX3ApLT5fciA8IDAgPyBfX3NyZ2V0KF9fcCkg OiAoaW50KSgqKF9fcCktPl9wKyspKTsKICAgICAgaWYgKF9fYzIgPT0gJ1xuJykKICAgICAgICBf X2MgPSBfX2MyOwogICAgICBlbHNlCiAgICAgICAgdW5nZXRjKF9fYzIsIF9fcCk7CiAgICAgIH0K ICAgIHJldHVybiBfX2M7CiAgfQojIDQxNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp9CiMg NTMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0ZGlvIiAyIDMKIyA5NyAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9j c3RkaW8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190 OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsK ICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVz aW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcg OjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZy ZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVr OwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwog IHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5n IDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1 dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1l OwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAg dXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1 c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNp bmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQoj IDM2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvYysraW8uaCIgMiAzCgoj IDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLmgiIDEgMwojIDk2 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci5oIiAzCiMgMSAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAz NyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3ln d2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItZGVmYXVsdC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzIDQKIyAxNCAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMgNAoKCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAxIDMgNAoKCgoKCgpleHRlcm4gIkMiIHsKIyAxOSAi L3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdz ZXRfdDsKIyAxMDkgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIHZvaWQg KCpfc2lnX2Z1bmNfcHRyKShpbnQpOwoKc3RydWN0IHNpZ2FjdGlvbgp7CiAgICAgICAgX3NpZ19m dW5jX3B0ciBzYV9oYW5kbGVyOwogICAgICAgIHNpZ3NldF90IHNhX21hc2s7CiAgICAgICAgaW50 IHNhX2ZsYWdzOwp9OwojIDEzOSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaWdwcm9jbWFzayAoaW50IGhvdywgY29uc3Qgc2ln c2V0X3QgKnNldCwgc2lnc2V0X3QgKm9zZXQpOwoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBwdGhyZWFkX3NpZ21hc2sgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3Nl dF90ICpvc2V0KTsKIyAxNTMgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkga2lsbCAoaW50LCBpbnQpOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkga2lsbHBnIChwaWRfdCwgaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHNpZ2FjdGlvbiAoaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVj dCBzaWdhY3Rpb24gKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaWdhZGRzZXQg KHNpZ3NldF90ICosIGNvbnN0IGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz aWdkZWxzZXQgKHNpZ3NldF90ICosIGNvbnN0IGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzaWdpc21lbWJlciAoY29uc3Qgc2lnc2V0X3QgKiwgaW50KTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHNpZ2ZpbGxzZXQgKHNpZ3NldF90ICopOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgc2lnZW1wdHlzZXQgKHNpZ3NldF90ICopOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgc2lncGVuZGluZyAoc2lnc2V0X3QgKik7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBzaWdzdXNwZW5kIChjb25zdCBzaWdzZXRfdCAqKTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHNpZ3BhdXNlIChpbnQpOwoKCgoKCgoKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHB0aHJlYWRfa2lsbCAocHRocmVhZF90IHRocmVhZCwgaW50IHNp Zyk7CiMgMzQwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKfQojIDYgIi91c3IvaW5j bHVkZS9zaWduYWwuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBpbnQgc2lnX2F0b21p Y190OwoKCgoKCnN0cnVjdCBfcmVlbnQ7Cgpfc2lnX2Z1bmNfcHRyIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF9zaWduYWxfciAoc3RydWN0IF9yZWVudCAqLCBpbnQsIF9zaWdfZnVuY19wdHIp OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3JhaXNlX3IgKHN0cnVjdCBfcmVlbnQg KiwgaW50KTsKCgpfc2lnX2Z1bmNfcHRyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNpZ25h bCAoaW50LCBfc2lnX2Z1bmNfcHRyKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJh aXNlIChpbnQpOwoKCn0KIyAxNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIv dXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzIDQKIyAxNyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMg NAojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMTggIi91c3IvaW5jbHVkZS90aW1l LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3RpbWUuaCIgMSAzIDQKIyAxOSAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CiMg MSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3ln d2luLzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvdGltZS5o IiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQg dG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50 IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0Owp9 OwoKY2xvY2tfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjbG9jayAodm9pZCk7CmRvdWJs ZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkaWZmdGltZSAodGltZV90IF90aW1lMiwgdGlt ZV90IF90aW1lMSk7CnRpbWVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3RpbWUgKHN0 cnVjdCB0bSAqX3RpbWVwdHIpOwp0aW1lX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdGlt ZSAodGltZV90ICpfdGltZXIpOwoKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXNj dGltZSAoY29uc3Qgc3RydWN0IHRtICpfdGJsb2NrKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgY3RpbWUgKGNvbnN0IHRpbWVfdCAqX3RpbWUpOwpzdHJ1Y3QgdG0gKl9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGdtdGltZSAoY29uc3QgdGltZV90ICpfdGltZXIpOwpzdHJ1Y3Qg dG0gKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxvY2FsdGltZSAoY29uc3QgdGltZV90ICpf dGltZXIpOwoKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmZ0aW1lIChjaGFy ICpfcywgc2l6ZV90IF9tYXhzaXplLCBjb25zdCBjaGFyICpfZm10LCBjb25zdCBzdHJ1Y3QgdG0g Kl90KTsKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFzY3RpbWVfciAoY29uc3Qg c3RydWN0IHRtICosIGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGN0 aW1lX3IgKGNvbnN0IHRpbWVfdCAqLCBjaGFyICopOwpzdHJ1Y3QgdG0gKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGdtdGltZV9yIChjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpzdHJ1 Y3QgdG0gKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxvY2FsdGltZV9yIChjb25zdCB0aW1l X3QgKiwgc3RydWN0IHRtICopOwoKfQoKCmV4dGVybiAiQyIgewoKCgpjaGFyICpfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBzdHJwdGltZSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0 cnVjdCB0bSAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0enNldCAodm9pZCk7 CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3R6c2V0X3IgKHN0cnVjdCBfcmVlbnQg Kik7CiMgOTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgdGltZV90IF90aW1lem9uZTsKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIGludCBfZGF5bGlnaHQ7CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBj aGFyICpfdHpuYW1lWzJdOwojIDExNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmNoYXIgKl9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRpbWV6b25lICh2b2lkKTsKCgoKCgp9CiMgMTY5ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVj dCB0aW1lc3BlYyAqcm10cCk7Cgp9CgoKCgoKZXh0ZXJuICJDIiB7CiMgMjQ3ICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAzIDQKfQojIDE4ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQKCgoKCgoK c3RydWN0IHNjaGVkX3BhcmFtCnsKICBpbnQgc2NoZWRfcHJpb3JpdHk7Cn07CgoKZXh0ZXJuICJD IiB7CgoKCmludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQpOwoKaW50IHNjaGVkX2dldF9w cmlvcml0eV9taW4gKGludCk7CgppbnQgc2NoZWRfZ2V0cGFyYW0gKHBpZF90LCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKik7CgppbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChwaWRfdCk7CgppbnQgc2NoZWRf cnJfZ2V0X2ludGVydmFsIChwaWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwoKaW50IHNjaGVkX3Nl dHBhcmFtIChwaWRfdCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwoKaW50IHNjaGVkX3Nl dHNjaGVkdWxlciAocGlkX3QsIGludCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwoKaW50 IHNjaGVkX3lpZWxkICh2b2lkKTsKIyA2MiAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMgNAp9CiMg MTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoKCgoKZXh0ZXJuICJDIgp7CiMgNzEg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAppbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0 aHJlYWRfYXR0cl90ICopOwppbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChjb25zdCBw dGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVk IChjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0c2No ZWRwYXJhbSAoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgc3RydWN0IHNjaGVkX3BhcmFtICopOwpp bnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBp bnQgKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICos IGludCAqKTsKaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqKTsKaW50IHB0 aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKaW50IHB0 aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICosIGludCk7CmludCBw dGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKiwgY29uc3Qgc3RydWN0 IHNjaGVkX3BhcmFtICopOwppbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFk X2F0dHJfdCAqLCBpbnQpOwppbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJf dCAqLCBpbnQpOwojIDk0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKaW50IHB0aHJlYWRf YXR0cl9nZXRzdGFja3NpemUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAqKTsKaW50 IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7CgoK aW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QpOwoKCgoKCnR5cGVkZWYgdm9pZCAoKl9fY2xl YW51cF9yb3V0aW5lX3R5cGUpICh2b2lkICopOwp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jbGVh bnVwX2hhbmRsZXIKewogIF9fY2xlYW51cF9yb3V0aW5lX3R5cGUgZnVuY3Rpb247CiAgdm9pZCAq YXJnOwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2hhbmRsZXIgKm5leHQ7Cn0gX19wdGhyZWFk X2NsZWFudXBfaGFuZGxlcjsKCnZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChfX3B0aHJlYWRf Y2xlYW51cF9oYW5kbGVyICpoYW5kbGVyKTsKdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoaW50 IGV4ZWN1dGUpOwoKCgoKCgoKaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29u ZF90ICopOwppbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZF90ICopOwppbnQg cHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICosIGNvbnN0IHB0aHJlYWRfY29uZGF0 dHJfdCAqKTsKaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICopOwppbnQg cHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7 CmludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90 ICopOwppbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKik7 CmludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQgKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJf dCAqLCBpbnQgKik7CmludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJf dCAqKTsKaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90 ICosIGludCk7CgppbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqLCBjb25zdCBwdGhyZWFk X2F0dHJfdCAqLAogICAgICAgICAgICAgICAgICAgIHZvaWQgKigqKSh2b2lkICopLCB2b2lkICop OwppbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCk7CmludCBwdGhyZWFkX2VxdWFsIChwdGhy ZWFkX3QsIHB0aHJlYWRfdCk7CnZvaWQgcHRocmVhZF9leGl0ICh2b2lkICopOwppbnQgcHRocmVh ZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7 CnZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QpOwppbnQgcHRocmVhZF9q b2luIChwdGhyZWFkX3QsIHZvaWQgKiopOwppbnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFk X2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOwppbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhy ZWFkX2tleV90KTsKCgppbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3Qg Kik7CmludCBwdGhyZWFkX211dGV4X2dldHByaW9jZWlsaW5nIChjb25zdCBwdGhyZWFkX211dGV4 X3QgKiwgaW50ICopOwppbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKiwg Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRo cmVhZF9tdXRleF90ICopOwppbnQgcHRocmVhZF9tdXRleF9zZXRwcmlvY2VpbGluZyAocHRocmVh ZF9tdXRleF90ICosIGludCwgaW50ICopOwppbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhy ZWFkX211dGV4X3QgKik7CmludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90 ICopOwppbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAq KTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByaW9jZWlsaW5nIChjb25zdCBwdGhyZWFkX211 dGV4YXR0cl90ICosIGludCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByb3RvY29sIChj b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRy X2dldHBzaGFyZWQgKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwppbnQgcHRo cmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQg Kik7CmludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICopOwpp bnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJpb2NlaWxpbmcgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg KiwgaW50KTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByb3RvY29sIChwdGhyZWFkX211dGV4 YXR0cl90ICosIGludCk7CmludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFk X211dGV4YXR0cl90ICosIGludCk7CmludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhy ZWFkX211dGV4YXR0cl90ICosIGludCk7CgppbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2Vf dCAqLCB2b2lkICgqKSh2b2lkKSk7CgoKaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQp OwppbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50KTsKCgpwdGhyZWFkX3QgcHRocmVhZF9z ZWxmICh2b2lkKTsKaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCwgaW50ICopOwppbnQg cHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQsIGludCAqKTsKaW50IHB0aHJlYWRfc2V0c2NoZWRw YXJhbSAocHRocmVhZF90LCBpbnQsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKaW50IHB0 aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QsIGNvbnN0IHZvaWQgKik7CnZvaWQgcHRo cmVhZF90ZXN0Y2FuY2VsICh2b2lkKTsKCgoKaW50IHB0aHJlYWRfc3VzcGVuZCAocHRocmVhZF90 KTsKaW50IHB0aHJlYWRfY29udGludWUgKHB0aHJlYWRfdCk7CgoKfQojIDM4ICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3Rk LmgiIDEgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMgNAojIDE0ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNAoKZXh0ZXJu IGNoYXIgKiplbnZpcm9uOwoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZXhpdCAo aW50IF9fc3RhdHVzICkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CgppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgYWNjZXNzIChjb25zdCBjaGFyICpfX3BhdGgsIGludCBfX2Ftb2Rl ICk7CnVuc2lnbmVkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFsYXJtICh1bnNpZ25lZCBf X3NlY3MgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNoZGlyIChjb25zdCBjaGFy ICpfX3BhdGggKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNobW9kIChjb25zdCBj aGFyICpfX3BhdGgsIG1vZGVfdCBfX21vZGUgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGNob3duIChjb25zdCBjaGFyICpfX3BhdGgsIHVpZF90IF9fb3duZXIsIGdpZF90IF9fZ3Jv dXAgKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjaHJvb3QgKGNvbnN0IGNoYXIg Kl9fcGF0aCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNsb3NlIChpbnQgX19m aWxkZXMgKTsKY2hhciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAqY3Rlcm1pZCAoY2hhciAq X19zICk7CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKmN1c2VyaWQgKGNoYXIgKl9f cyApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZHVwIChpbnQgX19maWxkZXMgKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGR1cDIgKGludCBfX2ZpbGRlcywgaW50IF9f ZmlsZGVzMiApOwoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlbmR1c2Vyc2hlbGwg KHZvaWQpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4ZWNsIChjb25zdCBjaGFy ICpfX3BhdGgsIGNvbnN0IGNoYXIgKiwgLi4uICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBleGVjbGUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3QgY2hhciAqLCAuLi4gKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4ZWNscCAoY29uc3QgY2hhciAqX19maWxlLCBj b25zdCBjaGFyICosIC4uLiApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhlY3Yg KGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqIGNvbnN0IF9fYXJndltdICk7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBleGVjdmUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqIGNv bnN0IF9fYXJndltdLCBjaGFyICogY29uc3QgX19lbnZwW10gKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGV4ZWN2cCAoY29uc3QgY2hhciAqX19maWxlLCBjaGFyICogY29uc3QgX19h cmd2W10gKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY2hkaXIgKGludCBfX2Zp bGRlcyk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNobW9kIChpbnQgX19maWxk ZXMsIG1vZGVfdCBfX21vZGUgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZjaG93 biAoaW50IF9fZmlsZGVzLCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICk7CnBpZF90IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZvcmsgKHZvaWQgKTsKbG9uZyBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lICk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc3luYyAoaW50IF9fZmQpOwpjaGFyIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplICk7Cgpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19uYW1l LCBzaXplX3QgX19sZW4pOwoKZ2lkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZWdp ZCAodm9pZCApOwp1aWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRldWlkICh2b2lk ICk7CmdpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGdpZCAodm9pZCApOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0Z3JvdXBzIChpbnQgX19naWRzZXRzaXplLCBn aWRfdCBfX2dyb3VwbGlzdFtdICk7CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKmdl dGxvZ2luICh2b2lkICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0bG9naW5f ciAoY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVzaXplKTsKCmNoYXIgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpOwpzaXplX3QgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0cGFnZXNpemUgKHZvaWQpOwpwaWRfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBnZXRwZ2lkIChwaWRfdCk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGdldHBncnAgKHZvaWQgKTsKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZ2V0cGlkICh2b2lkICk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHBw aWQgKHZvaWQgKTsKCnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHNpZCAocGlk X3QpOwoKdWlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0dWlkICh2b2lkICk7Cgpj aGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0dXNlcnNoZWxsICh2b2lkKTsKY2hh ciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAqZ2V0d2QgKGNoYXIgKl9fYnVmICk7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpcnVzZXJvayAodW5zaWduZWQgbG9uZyByYWRkciwg aW50IHN1cGVydXNlciwgY29uc3QgY2hhciAqcnVzZXIsIGNvbnN0IGNoYXIgKmx1c2VyKTsKCmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2F0dHkgKGludCBfX2ZpbGRlcyApOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGNob3duIChjb25zdCBjaGFyICpfX3BhdGgsIHVp ZF90IF9fb3duZXIsIGdpZF90IF9fZ3JvdXAgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGxpbmsgKGNvbnN0IGNoYXIgKl9fcGF0aDEsIGNvbnN0IGNoYXIgKl9fcGF0aDIgKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG5pY2UgKGludCBfX25pY2VfdmFsdWUgKTsKb2Zm X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbHNlZWsgKGludCBfX2ZpbGRlcywgb2ZmX3Qg X19vZmZzZXQsIGludCBfX3doZW5jZSApOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHBhdGhjb25mIChjb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUgKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHBhdXNlICh2b2lkICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCopKHZvaWQpLCB2b2lkICgqKSh2b2lkKSwg dm9pZCAoKikodm9pZCkpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHBpcGUgKGlu dCBfX2ZpbGRlc1syXSApOwpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHByZWFk IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgb2ZmX3QgX19vZmZzZXQp Owpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB3cml0ZSAoaW50IF9fZmQsIGNv bnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIG9mZl90IF9fb2Zmc2V0KTsKX3NzaXpl X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVm LCBzaXplX3QgX19uYnl0ZSApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJyZXN2 cG9ydCAoaW50ICpfX2FscG9ydCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZXZv a2UgKGNoYXIgKl9fcGF0aCk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcm1kaXIg KGNvbnN0IGNoYXIgKl9fcGF0aCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJ1 c2Vyb2sgKGNvbnN0IGNoYXIgKnJob3N0LCBpbnQgc3VwZXJ1c2VyLCBjb25zdCBjaGFyICpydXNl ciwgY29uc3QgY2hhciAqbHVzZXIpOwoKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHNicmsgKHB0cmRpZmZfdCBfX2luY3IpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHNldGVnaWQgKGdpZF90IF9fZ2lkICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz ZXRldWlkICh1aWRfdCBfX3VpZCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNl dGdpZCAoZ2lkX3QgX19naWQgKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRn cm91cHMgKGludCBuZ3JvdXBzLCBjb25zdCBnaWRfdCAqZ3JvdXBsaXN0ICk7CgppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0cGdpZCAocGlkX3QgX19waWQsIHBpZF90IF9fcGdpZCAp OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0cGdycCAodm9pZCApOwoKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldHJlZ2lkIChnaWRfdCBfX3JnaWQsIGdpZF90IF9f ZWdpZCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRyZXVpZCAodWlkX3QgX19y dWlkLCB1aWRfdCBfX2V1aWQpOwoKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0 c2lkICh2b2lkICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXR1aWQgKHVpZF90 IF9fdWlkICk7Cgp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldHVzZXJzaGVsbCAo dm9pZCk7Cgp1bnNpZ25lZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzbGVlcCAodW5zaWdu ZWQgaW50IF9fc2Vjb25kcyApOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN3YWIg KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzc2l6ZV90KTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzeXNjb25mIChpbnQgX19uYW1lICk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIHRjZ2V0cGdycCAoaW50IF9fZmlsZGVzICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSB0Y3NldHBncnAgKGludCBfX2ZpbGRlcywgcGlkX3QgX19wZ3JwX2lkICk7CmNoYXIg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKnR0eW5hbWUgKGludCBfX2ZpbGRlcyApOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdW5saW5rIChjb25zdCBjaGFyICpfX3BhdGggKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZoYW5ndXAgKHZvaWQgKTsKX3NzaXplX3Qg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd3JpdGUgKGludCBfX2ZkLCBjb25zdCB2b2lkICpf X2J1Ziwgc2l6ZV90IF9fbmJ5dGUgKTsKCgojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMSAz IDQKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKZXh0ZXJu IGludCBvcHRlcnI7CmV4dGVybiBpbnQgb3B0aW5kOwpleHRlcm4gaW50IG9wdG9wdDsKZXh0ZXJu IGludCBvcHRyZXNldDsKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKCmludCBnZXRvcHQgKGludCwgY2hh ciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CgoKfQojIDYwICIvdXNyL2luY2x1ZGUvZ2V0b3B0 LmgiIDMgNApleHRlcm4gIkMiIHsKCgpzdHJ1Y3Qgb3B0aW9uIHsKICAgICAgICBjb25zdCBjaGFy ICpuYW1lOwogICAgICAgIGludCBoYXNfYXJnOwogICAgICAgIGludCAqZmxhZzsKICAgICAgICBp bnQgdmFsOwp9OwoKaW50IGdldG9wdF9sb25nIChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0IGNo YXIgKiwgY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBpbnQgKik7CiMgODAgIi91c3IvaW5jbHVkZS9n ZXRvcHQuaCIgMyA0Cn0KIyAxMzAgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDIgMyA0CiMg MTM4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQKcGlkX3QgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgdmZvcmsgKHZvaWQgKTsKCmV4dGVybiBjaGFyICpzdWJvcHRhcmc7CmludCBn ZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiopOwoKCgoKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9jbG9zZSAoaW50IF9fZmlsZGVzICk7CnBpZF90IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9mb3JrICh2b2lkICk7CnBpZF90IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIF9nZXRwaWQgKHZvaWQgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF9saW5rIChjb25zdCBjaGFyICpfX3BhdGgxLCBjb25zdCBjaGFyICpfX3BhdGgyICk7Cm9m Zl90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9sc2VlayAoaW50IF9fZmlsZGVzLCBvZmZf dCBfX29mZnNldCwgaW50IF9fd2hlbmNlICk7Cl9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIF9yZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlICk7CnZv aWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2JyayAocHRyZGlmZl90IF9faW5jcik7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdW5saW5rIChjb25zdCBjaGFyICpfX3Bh dGggKTsKX3NzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3dyaXRlIChpbnQgX19m ZCwgY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlICk7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfZXhlY3ZlIChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKiBjb25zdCBf X2FyZ3ZbXSwgY2hhciAqIGNvbnN0IF9fZW52cFtdICk7CgoKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGdldGR0YWJsZXNpemUgKHZvaWQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgc2V0ZHRhYmxlc2l6ZSAoaW50KTsKdXNlY29uZHNfdCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSB1YWxhcm0gKHVzZWNvbmRzX3QgX191c2Vjb25kcywgdXNlY29uZHNfdCBfX2ludGVy dmFsKTsKdW5zaWduZWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdXNsZWVwICh1bnNpZ25l ZCBpbnQgX191c2Vjb25kcyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdHJ1bmNh dGUgKGludCBfX2ZkLCBvZmZfdCBfX2xlbmd0aCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSB0cnVuY2F0ZSAoY29uc3QgY2hhciAqLCBvZmZfdCBfX2xlbmd0aCk7CgoKIGludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3Qg X19sZW4pOwoKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rdGVtcCAoY2hhciAq KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5bmMgKHZvaWQpOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgcmVhZGxpbmsgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAq X19idWYsIGludCBfX2J1Zmxlbik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzeW1s aW5rIChjb25zdCBjaGFyICpfX25hbWUxLCBjb25zdCBjaGFyICpfX25hbWUyKTsKIyAyOTQgIi91 c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDMgNAp9CiMgNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAyIDMgNAojIDM5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2lu L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoKdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVh ZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29uY2VfdCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVm IHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0 aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBw dGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdt YSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgoj cHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4 X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrCiMgODcgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5s aW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9pZCAqY29uc3Qg X19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CiAgcmV0dXJu IF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0KIyA0NDkgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4 Ni1wYy1jeWd3aW4vYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkK ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChv bmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2 b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3Rh dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkp CnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1 cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhy ZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsK ICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5l IGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAg aWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sg KG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhy ZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0 aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRl eCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9t dXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRf YWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBl bHNlCiAgICByZXR1cm4gMDsKfQojIDk3ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2lu L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9i aXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1v ZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCgoKICB0eXBlZGVmIGZwb3NfdCBf X2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAg dHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlw ZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jv b2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4 MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0 ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMg Y29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5p dGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9 IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgw MDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFz ZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0 ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf aW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3dj aGFyIiAxIDMKIyA0OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jd2NoYXIiIDMKCgoKIyAxICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2N0aW1lIiAxIDMKIyA0OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jdGltZSIgMwojIDY0 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xv Y2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwog IHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVz aW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5n IDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9jd2NoYXIiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgOSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQK IyAxMCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgX21ic3RhdGVfdCBtYnN0YXRlX3Q7CgoK d2ludF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJ0b3djIChpbnQpOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgd2N0b2IgKHdpbnRfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBtYnJsZW4gKGNvbnN0IGNoYXIgKiAsIHNpemVfdCwgbWJzdGF0ZV90ICop OwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWJydG93YyAod2NoYXJfdCAqICwg Y29uc3QgY2hhciAqICwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBtYnNpbml0IChjb25zdCBtYnN0YXRlX3QgKik7CnNpemVfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBtYnNydG93Y3MgKHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiogLCBz aXplX3QsIG1ic3RhdGVfdCAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdj cnRvbWIgKGNoYXIgKiAsIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsKc2l6ZV90IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHdjc3J0b21icyAoY2hhciAqICwgY29uc3Qgd2NoYXJfdCAqKiAsIHNp emVfdCwgbWJzdGF0ZV90ICopOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3 Y3NjYXQgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHdjc2NociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc2NtcCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3 Y2hhcl90ICopOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjcHkgKHdj aGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSB3Y3Njc3BuIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CnNpemVfdCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NsY2F0ICh3Y2hhcl90ICosIGNvbnN0IHdjaGFy X3QgKiwgc2l6ZV90KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc2xjcHkg KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpzaXplX3QgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgd2NzbGVuIChjb25zdCB3Y2hhcl90ICopOwp3Y2hhcl90ICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NuY2F0ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICog LCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzbmNtcCAoY29uc3Qg d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CndjaGFyX3QgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHdjc25jcHkgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIHNp emVfdCk7CndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc3BicmsgKGNvbnN0 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgd2NzcmNociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKc2l6ZV90IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc3NwbiAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh cl90ICopOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NzdHIgKGNvbnN0 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgd21lbWNociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd21lbWNtcCAoY29uc3Qgd2NoYXJfdCAqLCBjb25z dCB3Y2hhcl90ICosIHNpemVfdCk7CndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHdtZW1jcHkgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIHNpemVfdCk7CndjaGFyX3Qg Kl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdtZW1tb3ZlICh3Y2hhcl90ICosIGNvbnN0IHdj aGFyX3QgKiwgc2l6ZV90KTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd21l bXNldCAod2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOwoKfQojIDU1ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2N3Y2hhciIgMiAzCiMgNjkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3djaGFyIiAzCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgNDYgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29m ZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90 eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAg ICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZw b3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAg ICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBl KCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRv ciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAg IG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0 aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBf TV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRv cisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAg ICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9z CiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9f dCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAg IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QK ICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAg ICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9v ZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24o KSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24o c3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBm cG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKCgoKfQojIDQ3ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA2MSAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoK ICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVh bXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5 cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3Np Z24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGlj IGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBj b25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNv bnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsK CiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsK CiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBl KiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBj aGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9f czIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFy X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBz dGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24s IGNoYXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5 cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9f aW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAg ZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsK CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlw ZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFy IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3Ry ZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAg dHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFz c2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2Mx ID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBf X2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg fQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25z dCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBz dGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy X3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3My LCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5 cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24s IGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBj aGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90 eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz aXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3Zl KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5 KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19u KSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9f cywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJf dHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlw ZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9 CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19j MSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoK ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu dF90eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29u c3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19j OyB9CiAgfTsKIyAyNTAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9D aGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJh aXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wK ICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEo X01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL3N0cmluZyIgMiAz CiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDEgMwojIDUzICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L21lbW9yeSIgMwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEg MwojIDY2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2NsaW1pdHMiIDEgMwojIDQ4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NsaW1pdHMi IDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDExICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv bGltaXRzLmgiIDMgNAojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKCgoKCgoK IyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIyICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvbGlt aXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMjMgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIg MyA0CiMgMTIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA1MCAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9jbGltaXRzIiAyIDMKIyA2NyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NzdGRsaWIiIDEgMwojIDQ4ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMg NAojIDE0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAojIDEgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzIDQKIyAxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCiMgMSAiL3Vz ci9pbmNsdWRlL21hY2hpbmUvc3RkbGliLmgiIDEgMyA0CiMgMTggIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMgNAojIDIwICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IHF1b3Q7CiAgaW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0CnsKICBsb25n IHF1b3Q7CiAgbG9uZyByZW07Cn0gbGRpdl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMgNApleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgaW50IF9fbWJfY3VyX21heDsK CgoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhYm9ydCAodm9pZCkgX19hdHRyaWJ1 dGVfXyAoKG5vcmV0dXJuKSk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhYnMgKGlu dCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMp KHZvaWQpKTsKZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2YgKGNvbnN0IGNo YXIgKl9fbnB0cik7CgpmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mZiAoY29u c3QgY2hhciAqX19ucHRyKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9pIChj b25zdCBjaGFyICpfX25wdHIpOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2wg KGNvbnN0IGNoYXIgKl9fbnB0cik7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBi c2VhcmNoIChjb25zdCB2b2lkICogX19rZXksIGNvbnN0IHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBf X25tZW1iLCBzaXplX3QgX19zaXplLCBpbnQgKCogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg X2NvbXBhcikgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CgoKCgp2b2lkICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6 ZSk7CmRpdl90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGRpdiAoaW50IF9fbnVtZXIsIGlu dCBfX2Rlbm9tKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBleGl0IChpbnQgX19z dGF0dXMpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGZyZWUgKHZvaWQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBnZXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF9nZXRlbnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX3N0cmlu Zyk7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudiAoY29uc3QgY2hh ciAqLCBpbnQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudl9y IChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgaW50ICopOwpsb25nIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIGxhYnMgKGxvbmcpOwpsZGl2X3QgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgbGRpdiAobG9uZyBfX251bWVyLCBsb25nIF9fZGVub20pOwp2b2lkICogX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgbWFsbG9jIChzaXplX3QgX19zaXplKTsKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIG1ibGVuIChjb25zdCBjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBfbWJsZW5fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFy ICosIHNpemVfdCwgX21ic3RhdGVfdCAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IG1idG93YyAod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBfbWJ0b3djX3IgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCAqLCBj b25zdCBjaGFyICosIHNpemVfdCwgX21ic3RhdGVfdCAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHdjdG9tYiAoY2hhciAqLCB3Y2hhcl90KTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF93Y3RvbWJfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIHdjaGFyX3QsIF9t YnN0YXRlX3QgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnN0b3djcyAo d2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfbWJzdG93Y3NfciAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgd2NzdG9tYnMgKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpzaXpl X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3djc3RvbWJzX3IgKHN0cnVjdCBfcmVlbnQg KiwgY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCwgX21ic3RhdGVfdCAqKTsKCgppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWtzdGVtcCAoY2hhciAqKTsKY2hhciAqIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIG1rdGVtcCAoY2hhciAqKTsKCgp2b2lkIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHFzb3J0ICh2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSwgaW50KCpfY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZCAodm9pZCk7CnZvaWQgKiBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSByZWFsbG9jICh2b2lkICogX19yLCBzaXplX3QgX19zaXplKTsK dm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzcmFuZCAodW5zaWduZWQgX19zZWVkKTsK ZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvZCAoY29uc3QgY2hhciAqX19u LCBjaGFyICoqX19lbmRfUFRSKTsKZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9z dHJ0b2RfciAoc3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BU Uik7CmZsb2F0IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvZiAoY29uc3QgY2hhciAq X19uLCBjaGFyICoqX19lbmRfUFRSKTsKCgoKCgoKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzdHJ0b2wgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFz ZSk7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cnRvbF9yIChzdHJ1Y3QgX3Jl ZW50ICosY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKdW5z aWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b3VsIChjb25zdCBjaGFy ICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25lZCBsb25nIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJ0b3VsX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBj aGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwoKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHN5c3RlbSAoY29uc3QgY2hhciAqX19zdHJpbmcpOwoKCmxvbmcgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYTY0bCAoY29uc3QgY2hhciAqX19pbnB1dCk7CmNoYXIg KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsNjRhIChsb25nIF9faW5wdXQpOwpjaGFyICog X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2w2NGFfciAoc3RydWN0IF9yZWVudCAqLGxvbmcg X19pbnB1dCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBvbl9leGl0ICh2b2lkICgq X19mdW5jKShpbnQsIHZvaWQgKiksdm9pZCAqIF9fYXJnKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfRXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4p KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dGVudiAoY29uc3QgY2hhciAqX19z dHJpbmcpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3B1dGVudl9yIChzdHJ1Y3Qg X3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIHNldGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcsIGNvbnN0IGNoYXIgKl9fdmFsdWUs IGludCBfX292ZXJ3cml0ZSk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2V0ZW52 X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJpbmcsIGNvbnN0IGNoYXIgKl9f dmFsdWUsIGludCBfX292ZXJ3cml0ZSk7CgpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZ2N2dCAoZG91YmxlLGludCxjaGFyICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgZ2N2dGYgKGZsb2F0LGludCxjaGFyICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgZmN2dCAoZG91YmxlLGludCxpbnQgKixpbnQgKik7CmNoYXIgKiBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBmY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsKY2hhciAqIF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGVjdnQgKGRvdWJsZSxpbnQsaW50ICosaW50ICopOwpj aGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZWN2dGJ1ZiAoZG91YmxlLCBpbnQsIGlu dCosIGludCosIGNoYXIgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY3Z0 YnVmIChkb3VibGUsIGludCwgaW50KiwgaW50KiwgY2hhciAqKTsKY2hhciAqIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIGVjdnRmIChmbG9hdCxpbnQsaW50ICosaW50ICopOwpjaGFyICogX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZHRvYSAoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGlu dCosIGNoYXIqKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByYW5kX3IgKHVuc2ln bmVkICpfX3NlZWQpOwoKZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGRyYW5kNDgg KHZvaWQpOwpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2RyYW5kNDhfciAoc3Ry dWN0IF9yZWVudCAqKTsKZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGVyYW5kNDgg KHVuc2lnbmVkIHNob3J0IFszXSk7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBf ZXJhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7CmxvbmcgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgWzNdKTsKbG9u ZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfanJhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICos IHVuc2lnbmVkIHNob3J0IFszXSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGNv bmc0OCAodW5zaWduZWQgc2hvcnQgWzddKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfbGNvbmc0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFs3XSk7Cmxvbmcg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbHJhbmQ0OCAodm9pZCk7CmxvbmcgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX2xyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsKbG9uZyBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtcmFuZDQ4ICh2b2lkKTsKbG9uZyBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfbXJhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICopOwpsb25nIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7CmxvbmcgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX25yYW5kNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNp Z25lZCBzaG9ydCBbM10pOwp1bnNpZ25lZCBzaG9ydCAqCiAgICAgICBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBzZWVkNDggKHVuc2lnbmVkIHNob3J0IFszXSk7CnVuc2lnbmVkIHNob3J0ICoK ICAgICAgIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zZWVkNDhfciAoc3RydWN0IF9yZWVu dCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHNyYW5kNDggKGxvbmcpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zcmFuZDQ4 X3IgKHN0cnVjdCBfcmVlbnQgKiwgbG9uZyk7CmxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzdHJ0b2xsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBf X2Jhc2UpOwpsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cnRvbGxfciAo c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBf X2Jhc2UpOwp1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ry dG91bGwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7CnVu c2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RydG91bGxfciAo c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBf X2Jhc2UpOwoKCgoKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWxwYXRoIChj b25zdCBjaGFyICosIGNoYXIgKik7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdW5z ZXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfdW5zZXRlbnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX3N0cmluZyk7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByYW5kb20gKHZvaWQpOwpsb25nIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHNyYW5kb20gKHVuc2lnbmVkIF9fc2VlZCk7CmNoYXIgKiBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdHNuYW1lIChpbnQpOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgZ3JhbnRwdCAoaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIHVubG9ja3B0IChpbnQpOwoKCgoKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IF9kdG9hX3IgKHN0cnVjdCBfcmVlbnQgKiwgZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCos IGNoYXIqKik7CgoKCgoKCgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N5c3RlbV9y IChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKik7Cgp2b2lkIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF9fZXByaW50ZiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVk IGludCwgY29uc3QgY2hhciAqKTsKIyAyMTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0Cn0K IyA1MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jc3RkbGliIiAyIDMKIyA4NCAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjps ZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7 CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcg Ojpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhp dDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVz aW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6 bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJh bmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7 CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwog IHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJz KGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihs b25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0KIyA2OCAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9uZXciIDEgMwojIDQyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL25ldyIgMwojIDEgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9leGNlcHRpb24i IDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewojIDUyICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2V4Y2VwdGlvbiIgMwogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRp b24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAg dmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNz IGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9l eGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhy b3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0 eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRs ZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVy bWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9o YW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZv aWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAxMDAgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0 aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTUgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv ZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0K IyA0MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFj ZSBzdGQKewoKCgoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBw dWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxs b2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25z dCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoK ICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA4 MiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3ln d2luLzMuNC9pbmNsdWRlL2MrKy9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90 KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVf dCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRo cm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJh dG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk KiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv dygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0 aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3df dCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9p ZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3 W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxp bmUgdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KaW5saW5l IHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQoKfQojIDcw ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvaW9zZndkIiAxIDMKIyA0NCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pb3Nmd2QiIDMKCgoj IDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytsb2NhbGUuaCIgMSAz CiMgNDAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytsb2NhbGUuaCIg MwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Nsb2NhbGUiIDEgMwojIDQ4ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNAojIDI0ICIv dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNApleHRlcm4gIkMiIHsKCnN0cnVjdCBsY29udgp7CiAg Y2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwogIGNoYXIgKmdyb3Vw aW5nOwogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAg Y2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hh ciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVf c2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwogIGNoYXIg cF9jc19wcmVjZWRlczsKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwogIGNoYXIgbl9jc19wcmVjZWRl czsKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3Np Z25fcG9zbjsKfTsKCgpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRsb2NhbGUg KGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsKc3RydWN0IGxjb252ICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbGVjb252ICh2b2lkKTsKCgpzdHJ1Y3QgX3JlZW50Owpj aGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2V0bG9jYWxlX3IgKHN0cnVjdCBfcmVl bnQgKiwgaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOwpzdHJ1Y3QgbGNvbnYgKl9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9sb2NhbGVjb252X3IgKHN0cnVjdCBfcmVlbnQgKik7 Cgp9CiMgNTAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2Fs ZWNvbnY7Cn0KIyA0MiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRzL2MrK2xv Y2FsZS5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7 CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9t X3YoY2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAg ICAgICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9 IC0xKQogICAgewogICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZSgwLCBfX251bGwpOwogICAg ICBjaGFyKiBfX3NhdiA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc3RybGVuKF9fb2xkKSAr IDEpKTsKICAgICAgaWYgKF9fc2F2KQogICAgICAgIHN0cmNweShfX3NhdiwgX19vbGQpOwogICAg ICBzZXRsb2NhbGUoMCwgIkMiKTsKCiAgICAgIGludCBfX3JldDsKCgoKCgoKICAgICAgaWYgKF9f cHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc3ByaW50ZihfX291dCwgX19mbXQsIF9fcHJlYywg X192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc3ByaW50ZihfX291dCwgX19mbXQsIF9f dik7CgogICAgICBzZXRsb2NhbGUoMCwgX19zYXYpOwogICAgICBmcmVlKF9fc2F2KTsKICAgICAg cmV0dXJuIF9fcmV0OwogICAgfQp9CiMgNDcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaW9zZndkIiAyIDMK IyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2NjdHlwZSIgMSAzCiMgNDcgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Y2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQKCgoKCgpleHRlcm4g IkMiIHsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2FsbnVtIChpbnQgX19jKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzYWxwaGEgKGludCBfX2MpOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNjbnRybCAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBpc2RpZ2l0IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGlzZ3JhcGggKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgaXNsb3dlciAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3By aW50IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzcHVuY3QgKGlu dCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNzcGFjZSAoaW50IF9fYyk7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3VwcGVyIChpbnQgX19jKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzeGRpZ2l0IChpbnQgX19jKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHRvbG93ZXIgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgdG91cHBlciAoaW50IF9fYyk7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIGlzYmxhbmsgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg aXNhc2NpaSAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0b2FzY2lp IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90b2xvd2VyIChpbnQg X19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90b3VwcGVyIChpbnQgX19jKTsK IyAzOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgY29uc3QgY2hhciBfY3R5cGVfW107CiMgNjggIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzIDQKfQojIDUwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NjdHlwZSIgMiAzCiMgNjYgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvY2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1 c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1 c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1 c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1 c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0K IyA0OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pb3Nmd2QiIDIgMwoKCiMgMSAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvZnVu Y3RleGNlcHQuaCIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvZXhjZXB0aW9uX2RlZmluZXMuaCIg MSAzCiMgMzUgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaW9z ZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9z OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJl YW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAg ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2Mg PSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlw ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5n c3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g PgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf b2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz IG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CiMgMTM2ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2lvc2Z3ZCIgMwogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBl ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3Ry ZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07 CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj X3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFt PGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+ IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5n c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYg YmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxj aGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKIyAx NjYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvaW9zZndkIiAzCn0KIyA3MSAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3Bh aXIuaCIgMSAzCiMgNjQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVz cGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIg ewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7Cgog IF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQo KSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChf X2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgog IHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNv bmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9f eC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8 CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5z ZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv cGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+ JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CgoK dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICBy ZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CiMgMTQwICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz cyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195 KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA1MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3R5 cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3R5cGVfdHJhaXRzLmgi IDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hh cj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGlu dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0 czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+ IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAg dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf aW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQg c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxv bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1h bF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNw YWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf Q29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRv cjwgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNzMgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODAgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgc3RydWN0IGlu cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307Cgog IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcg e307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJk X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDog cHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwojIDEwMiAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90 LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5j ZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IKICAgIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVn b3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAg ICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1Bv aW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9 OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0 b3JfdHJhaXRzIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2Nh dGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv cjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv cjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl cmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5k b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog ICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsK ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFp dHM8Y29uc3QgX1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1Rw KiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdv cnkoY29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfaXRl cmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9p dGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvY29uY2Vw dF9jaGVjay5oIiAxIDMKIyAzOSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2NvbmNlcHRfY2hlY2su aCIgMwojIDY5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3Mu aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv cj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojpk aWZmZXJlbmNlX3R5cGUKICAgIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAg ICB7CgogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogICAgICAgICsrX19maXJzdDsgKytfX247CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5s aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUKICAgIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgcmV0dXJuIF9fbGFzdCAtIF9fZmly c3Q7CiAgICB9CiMgMTA5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf ZnVuY3MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5l IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw ZQogICAgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KQogICAgewoKICAgICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5j ZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKICAg IHsKCiAgICAgCiAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu bGluZSB2b2lkCiAgICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlz dGFuY2UgX19uLAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg ewoKICAgICAKCiAgICAgIGlmIChfX24gPiAwKQogICAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7 CiAgICAgIGVsc2UKICAgICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAg IGlubGluZSB2b2lkCiAgICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9E aXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAg ICB7CgogICAgIAogICAgICBfX2kgKz0gX19uOwogICAgfQojIDE2MiAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIGFk dmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIF9f YWR2YW5jZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICAgIH0KfQojIDc1 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjggIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4OSAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVl X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewog ICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJl bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv cj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICBwdWJsaWM6CgoKCiAgICAg IHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIHJldmVyc2Vf aXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHsgfQoKCgoKICAgICAg cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yJiBfX3gpCiAgICAgIDogY3Vy cmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+ CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYg X194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9y X3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KCgoKCgoKICAgICAg cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKICAgICAgICBfSXRlcmF0 b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVybiAqLS1fX3RtcDsKICAgICAgfQoKCgoK CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh dG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr KCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAg ICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICAtLWN1 cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2Vf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiAgICAgICAgKytjdXJyZW50Owog ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y IG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9 ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0K CgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90 eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0g X19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRp ZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50IC09IF9fbjsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg ICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAg ICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qg eyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMgMjY5ICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChj b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNl KCkgPCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m IF9feSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBf X3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsg cmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg ICBpbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkK ICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAg IG9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJh c2UoKSAtIF9fbik7IH0KIyAzMjkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2Vy dF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9p ZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5l ciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250 YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihf Q29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1NSAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFs dWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVy YXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19p bnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAg ICB9OwojIDM4NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPgogICAgYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJl dHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q29udGFpbmVyPgogICAgY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBp dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAg ewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxp Y2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZf X3gpIHsgfQojIDQyNiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250 YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVy LT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo aXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7 IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVy YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDU3ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy PgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJvbnRf aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBp bnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcs IHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250 YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7 CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kp IHt9CiMgNTE4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAg aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l cjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFp bmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVy biAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU1MCAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh aW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAg ewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5n IHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90 ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAg X19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAg ZXhwbGljaXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDog X01fY3VycmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAg ICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIs IF9Db250YWluZXI+JiBfX2kpCiAgICAgICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoK CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3Vy cmVudDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g X01fY3VycmVudDsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKyso KSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRv cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy cmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkg eyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IK ICAgICAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl bnQtLSk7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJl bmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9Cgog ICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90 eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl bnQgKyBfX24pOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShj b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29u c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAg IGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY1MSAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp bmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9 PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0 dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp bmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y TCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSAhPSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz ZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog IGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0 dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu bGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JM LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp IDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyBy ZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog IGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz ZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAg Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg eyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRh aW5lcj4KICBpbmxpbmUgdHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv bnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZQogIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1 cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgogIG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg ICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kp CiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2ku YmFzZSgpICsgX19uKTsgfQp9CiMgNzYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJk SXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBf VmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0g X190bXA7CiAgICB9CiMgMTE4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfVHAm IF9fYSwgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwogICAg ICBfX2EgPSBfX2I7CiAgICAgIF9fYiA9IF9fdG1wOwogICAgfQojIDE0NiAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Ip CiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f YTsKICAgIH0KIyAxNjYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29u c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2Eg PCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9f YSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2Nv bXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIwNCAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3Qg X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBp ZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ dGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsr X19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZv ciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsr X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3Qg X1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAg ICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19m aXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs IF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl cgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg cmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1Rw KgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAg ICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZp YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29u c3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlw ZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0 SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBf X2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAg ICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8 X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9U cml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJp dmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J c19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICBy ZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQs IF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog ICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1h bCgpKTsKICAgIH0KIyAzMzkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgog ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+Ojpf Tm9ybWFsIF9fTm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxp bmUgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFs SXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyCiAg ICBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAg IHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9fbjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24g PiAwOyAtLV9fbikKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l IF9Cb29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAgIHsKICAg ICAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2Jh Y2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0KSk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+ CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNvbnN0IHB0 cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9fcmVzdWx0 IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1cm4gX19y ZXN1bHQgLSBfTnVtOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1 ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19m aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBy ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgog ICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C STIKICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJ MiBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJpdmlhbDsK ICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlh bD4KICAgICAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwog ICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGlu ZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9f Zmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkkyKF9fY29w eV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsgfQoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAg ICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C STEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ MiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJ MSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5w dXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46 Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25v cm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1h bCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg ICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihf QkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsK ICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl bmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0 LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1h bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRl cmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK CiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAg ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVu YW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmlsbF9uKF9PdXRw dXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAg ICAKCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19m aXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2 b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qs IGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0g X19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9Cgog IGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9f bGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9 IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt cCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9f Zmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAg PSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190 bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgog ICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJz dCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwo X19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFy KgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXIm IF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAg ICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+ CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv bnN0IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBf X2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0 ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2Zp cnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJz dDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihf X2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY0MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5wdXRJ dGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAg ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAg ICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9f Zmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmly c3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4o X19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMj4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBf X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghKCpfX2ZpcnN0MSA9 PSAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsK ICAgIH0KIyA2OTkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoK ICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0 MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19m aXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0K IyA3MzIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAg IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAK CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9f Zmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpf X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAg ICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAg fQojIDc2NyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAg ICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg ICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAo X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg ICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyOwogICAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0 IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBj b25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjEg PSBfX2xhc3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAt IF9fZmlyc3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp cnN0Miwgc3RkOjptaW4oX19sZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAw ID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBs ZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciog X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0Miwg Y29uc3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21w YXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0 Mik7CgoKCgoKCiAgfQoKfQojIDU1ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL21lbW9yeSIgMiAzCiMgMSAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA4NCAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2Z1bmN0 ZXhjZXB0LmgiIDEgMwojIDM0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvZnVuY3RleGNlcHQuaCIg MwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK ICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df YmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZv aWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3Zl cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShj b25zdCBjaGFyKiBfX3MpOwp9CiMgODUgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxsb2Mu aCIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK CgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoKICAgIHR5cGVkZWYgc2l6ZV90IF9SQ190 OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKICAgIF9fZ3RocmVhZF9tdXRl eF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBf TV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190bXAgPSAo cHRocmVhZF9tdXRleF90KTIwOwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoK CiAgICB9CgogICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRl eF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50OwogICAgICBf X2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9CgogICAgX1JD X3QKICAgIF9NX2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVm X2NvdW50X2xvY2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50 OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAg IHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDEwOSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0 bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBfU3dhcF9s b2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9 OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAgICBfU3dh cF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2NrID0gKHB0aHJlYWRfbXV0ZXhfdCky MDsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25n ICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygm X1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25nIF9f cmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jlc3Vs dDsKICB9Cgp9CiMgMTU1ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0 aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAg ewojIDE5MiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAg ICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0 ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkK ICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAg fTsKIyAyMjggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0 IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9T VExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQog ICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkg eyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJh dG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NU TF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDg2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Fs bG9jLmgiIDIgMwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvYXRv bWljaXR5LmgiIDEgMwojIDMzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMv YXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBf QXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9h ZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJlZ2lzdGVy IF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhh ZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKF9fcmVzdWx0KSwgIitt IiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpCiAgICAgICAg ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGlj IGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2 b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoImxvY2s7IGFkZGwgJTEsJTAiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIitt IiAoKl9fbWVtKSA6ICJpciIgKF9fdmFsKSA6ICJtZW1vcnkiKTsKfQojIDg4ICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTkgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewog IHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsg cmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQog IH07CiMgMTIyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0 ZTxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxsb2NfYWxsb2MKICAgIHsKICAgIHByaXZhdGU6 CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgICAgIHN0YXRpYyB2 b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAg c3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2 b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0 KF9fcmVzdWx0ID09IDAsIDApKQogICAgICAgICAgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9f bik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAog ICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBmcmVlKF9fcCk7IH0K CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkp KSgpCiAgICAgIHsKICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29t X2hhbmRsZXI7CiAgICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAg ICAgcmV0dXJuIF9fb2xkOwogICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4K ICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2M8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXIpKCkgPSAwOwoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFs bG9jX2FsbG9jPF9faW5zdD46OgogICAgX1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQogICAgewog ICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0 OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVy ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdChfX215X21hbGxvY19oYW5kbGVyID09IDAsIDApKQogICAgICAgICAgICBfX3Rocm93X2Jh ZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAg X19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgIH0KCgogIHR5cGVkZWYgX19uZXdfYWxs b2MgX19tZW1faW50ZXJmYWNlOwojIDE4OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGxv Yy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFz cyBfX3NpbXBsZV9hbGxvYwogICAgewogICAgcHVibGljOgogICAgICBzdGF0aWMgX1RwKgogICAg ICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7CiAg ICAgICAgaWYgKF9fbikKICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9j OjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAgIHJldHVybiBfX3JldDsKICAg ICAgfQoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoKQogICAgICB7IHJldHVybiAo X1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0aWMgdm9p ZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9 IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAg ICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6 OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9OwojIDIyNyAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgog ICAgY2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0ZToKCgogICAgICBlbnVtIHtf U19leHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9j YXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilf QWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCop X19yZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7 CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBz aXplX3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0g KGludCkgX1NfZXh0cmE7CiAgICAgICAgaWYgKCooc2l6ZV90KilfX3JlYWxfcCAhPSBfX24pCiAg ICAgICAgICBhYm9ydCgpOwogICAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19u ICsgKGludCkgX1NfZXh0cmEpOwogICAgICB9CiAgICB9OwojIDI4NSAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CiAgICBjbGFzcyBfX3Bvb2xfYWxsb2MKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIGVudW0g e19BTElHTiA9IDh9OwogICAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgICAgZW51bSB7 X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTIC8gX0FMSUdOfTsKCiAgICAgIHVuaW9uIF9PYmoKICAg ICAgewogICAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIg X01fY2xpZW50X2RhdGFbMV07CiAgICAgIH07CgogICAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUg X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRf ZnJlZTsKICAgICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgICBzdGF0aWMgc2l6ZV90 IF9TX2hlYXBfc2l6ZTsKCiAgICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1NfbG9jazsKICAg ICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19mb3JjZV9uZXc7CgogICAgICBzdGF0aWMgc2l6ZV90 CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5 dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9Cgog ICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVz KQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVf dClfQUxJR04gLSAxKTsgfQoKCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNp emVfdCBfX24pOwoKCgogICAgICBzdGF0aWMgY2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6 ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsK ICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1NfbG9jay5fTV9hY3F1aXJlX2xvY2so KTsgfQogICAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1NfbG9jay5fTV9yZWxlYXNl X2xvY2soKTsgfQogICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZy aWVuZCBzdHJ1Y3QgX0xvY2s7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAg IGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoK CgogICAgICAgIGlmIChfU19mb3JjZV9uZXcgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAg aWYgKGdldGVudigiR0xJQkNQUF9GT1JDRV9ORVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19h ZGQoJl9TX2ZvcmNlX25ldywgMSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0 b21pY19hZGQoJl9TX2ZvcmNlX25ldywgLTEpOwogICAgICAgICAgfQoKICAgICAgICBpZiAoKF9f biA+IChzaXplX3QpIF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAg IF9fcmV0ID0gX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICAgICAgZWxzZQogICAgICAg ICAgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAg ICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX09iaiogX19yZXN0cmljdF9f IF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChf U19yb3VuZF91cChfX24pKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5r OwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmV0ID09IDAsIDApKQogICAgICAgICAgICAg IF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0Owog ICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp emVfdCBfX24pCiAgICAgIHsKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMp IHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9fbmV3X2FsbG9jOjpkZWFsbG9jYXRl KF9fcCwgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZv bGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsK CgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX19xIC0+ IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9m cmVlX2xpc3QgPSBfX3E7CiAgICAgICAgICB9CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PiBfQXRvbWljX3dvcmQKICBfX3Bvb2xfYWxsb2M8X190 aHJlYWRzLCBfX2luc3Q+OjpfU19mb3JjZV9uZXcgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9f cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fcG9v bF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBs YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAgICAgICAgICAg ICAgY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JikKICAgIHsgcmV0dXJuIGZh bHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNo YXIqCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjoKICAgIF9TX2NodW5rX2Fs bG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciogX19yZXN1 bHQ7CiAgICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAg c2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAg IGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRlcykKICAgICAgICB7CiAgICAgICAgICBf X3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90 YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQgOwogICAgICAgIH0KICAgICAgZWxz ZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpz ID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0g X19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAg ICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg X19ieXRlc190b19nZXQgPQogICAgICAgICAgICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5k X3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlz dCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5 dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2Zy ZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICpfX215X2ZyZWVf bGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgICAgICB9CiAgICAgICAgICBfU19z dGFydF9mcmVlID0gKGNoYXIqKSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQp OwogICAgICAgICAgaWYgKF9TX3N0YXJ0X2ZyZWUgPT0gMCkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJl ZV9saXN0OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgICBfX2kgPSBf X3NpemU7CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBf X2kgKz0gKHNpemVfdCkgX0FMSUdOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7 CiAgICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAg ICAgaWYgKF9fcCAhPSAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAg ICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAg ICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CgoKICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUg PSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19uZXdfYWxsb2M6OmFs bG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBfU19oZWFw X3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0 X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxvYyhf X3NpemUsIF9fbm9ianMpOwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMs IF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBpbnQgX19ub2JqcyA9 IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsK ICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBfT2JqKiBfX3Jlc3Vs dDsKICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19uZXh0X29iajsKICAg ICAgaW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpCiAgICAgICAgcmV0dXJuIF9fY2h1 bms7CiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9m cmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9y IChfX2kgPSAxOyA7IF9faSsrKQogICAgICAgIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogPSBf X25leHRfb2JqOwogICAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9v YmogKyBfX24pOwogICAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwog ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCiAgdGVtcGxhdGU8Ym9vbCBfX3Ro cmVhZHMsIGludCBfX2luc3Q+CiAgICBfU1RMX211dGV4X2xvY2sKICAgIF9fcG9vbF9hbGxvYzxf X3RocmVhZHMsX19pbnN0Pjo6X1NfbG9jayA9IHsgKHB0aHJlYWRfbXV0ZXhfdCkyMCB9OwoKICB0 ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fcG9vbF9hbGxv YzxfX3RocmVhZHMsX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19wb29sX2FsbG9jPF9fdGhyZWFkcyxf X2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogICAgc2l6ZV90IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVh cF9zaXplID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0 eXBlbmFtZSBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAg ICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU U107CgogIHR5cGVkZWYgX19wb29sX2FsbG9jPHRydWUsMD4gX19hbGxvYzsKICB0eXBlZGVmIF9f cG9vbF9hbGxvYzxmYWxzZSwwPiBfX3NpbmdsZV9jbGllbnRfYWxsb2M7CiMgNTY0ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBjbGFzcyBhbGxvY2F0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKICAg IHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAg ICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJl ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAg ICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3Ro ZXI7IH07CgogICAgICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFsbG9jYXRvcihjb25z dCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAg ICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICAgICAg fmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhyZWZl cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVyCiAg ICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoK CgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g MCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAgICAg ICAgICB7CiAgICAgICAgICAgIGlmIChfX24gPD0gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAg ICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6 ZW9mKF9UcCkpKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2Fs bG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAg dm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7 IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEp IC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25z dCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICAgICAgdm9pZCBkZXN0cm95 KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBj bGFzcyBhbGxvY2F0b3I8dm9pZD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXpl X3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg ICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25z dF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBh bGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Qx LCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBhbGxv Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIHRydWU7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+ JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgNjYwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHN0cnVjdCBfX2FsbG9jYXRvcgogICAgewogICAgICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9j OwoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBl ZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j ZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRl ZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAg c3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+ IG90aGVyOyB9OwoKICAgICAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIF9fYWxsb2Nh dG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgICAgOiBfX3VuZGVybHlpbmdf YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcDE+CiAgICAgICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j PiYgX19hKSB0aHJvdygpCiAgICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJs eWluZ19hbGxvYykge30KCiAgICAgIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBv aW50ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9 CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkg Y29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVf dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAw OwogICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9B bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7 CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVf dHlwZSBfX24pCiAgICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24g KiBzaXplb2YoX1RwKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0 IHRocm93KCkgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lk CiAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19w KSBfVHAoX192YWwpOyB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsg X19wLT5+X1RwKCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0 cnVjdCBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgc2l6ZV90 IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAg ICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3Rf cG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19h bGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsgfTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o Y29uc3QgX19hbGxvY2F0b3I8X1RwLF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0 IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVy bHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNv bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191 bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgoKCgoKCgogIHRl bXBsYXRlPGludCBpbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19t YWxsb2NfYWxsb2M8aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvYzxp bnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvYzxfX2luc3Q+JiwK ICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2M8X19pbnN0PiYpCiAgICB7IHJldHVy biBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVn X2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2Fs bG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4g ZmFsc2U7IH0KIyA4MTMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIHN0cnVjdCBfQWxs b2NfdHJhaXRzCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IGZhbHNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmlu ZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRv cjxfVHAxPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2Nf dHlwZTsKICAgICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07 CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxs b2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1w bGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAg IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gYWxsb2Nh dG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX3Bvb2xfYWxsb2M8 X190aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9v bF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlw ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgog ICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9j PF9BbGxvYz4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxf QWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0Fs bG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx LCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U cCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9f YWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhy LCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxf VHAxLCBfX3Bvb2xfYWxsb2M8X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVf YWxsb2M8X1RwLCBfX3Bvb2xfYWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBl OwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyLF9faW5z dD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFp dHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5 cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2Nf dHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9j PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YWxsb2NhdG9yPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8d2NoYXJf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fcG9vbF9hbGxvYzx0cnVlLDA+OwoKfQojIDU2 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL21lbW9yeSIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfY29u c3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0 IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9f dmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAog ICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19w KSkgX1QxKCk7IH0KIyA5OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg MwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAg IF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0KIyAxMTIgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9G b3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNs YXNzIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAg IHsgX19wb2ludGVyLT5+X1RwKCk7IH0KIyAxMzQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf Y29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlu bGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk SXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAg IF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl X3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hh c190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA1NyAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9tZW1vcnkiIDIgMwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaCIgMSAzCiMgNjYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfdW5pbml0aWFsaXpl ZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p bml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHko X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5p dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2Fy ZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYq X19jdXIsICpfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0 Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAg ICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTA2ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5p dGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRm9y d2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9E OwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6 ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9f cmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly c3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5s aW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3Qs IGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19y ZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3Qp ICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBf X2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0 LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJ dGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9 IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAg ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJz dCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDE2NCAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRp YWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAg ICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9E KCkpOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0 aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAg ICB7CiAgICAgIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19j dXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24s ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgICAgcmV0 dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf RGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9 CiMgMjEwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9U cD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVU eXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9m aWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQojIDIyNyAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2Nv cHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQp CiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmlu aXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAgICBj YXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsK ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxp bmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFsaXpl ZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4g dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAgICAg IGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQp OwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJz dDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBf X21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsK ICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBf X3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJv eShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCn0K IyA1OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyA2NCAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9i aXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgcmF3X3N0b3Jh Z2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZv aWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX01faXRlcjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHJhd19z dG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQoK ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0 aGlzOyB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0 IF9UcCYgX19lbGVtZW50KQogICAgICB7CiAgICAgICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9f ZWxlbWVudCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFn ZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+JgogICAgICBvcGVyYXRvcisrKCkKICAg ICAgewogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAg ICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KICAgICAgb3Bl cmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2Fy ZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAg IHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKfQojIDYwICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL21l bW9yeSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA3MSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnki IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9UcCosIHB0cmRpZmZfdD4KICAg IF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQogICAgewogICAg ICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAg ICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICAgIHdoaWxlIChfX2xlbiA+ IDApCiAgICAgICAgewogICAgICAgICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygo c3RkOjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgICAgICBpZiAoX190bXAgIT0g MCkKICAgICAgICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4p OwogICAgICAgICAgX19sZW4gLz0gMjsKICAgICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9UcCos IHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7CiAgICB9CiMgMTAzICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL21l bW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBwYWlyPF9UcCoscHRy ZGlmZl90PgogICAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQogICAgeyBy ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOyB9CiMgMTE1ICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHZv aWQKICAgIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQogICAgeyBzdGQ6OmZyZWUo X19wKTsgfQojIDEyNyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAxPgogICAgc3RydWN0IGF1dG9fcHRyX3JlZgogICAgewogICAgICBfVHAxKiBfTV9w dHI7CgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKTogX01fcHRy KF9fcCkgeyB9CiAgICB9OwojIDE2NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhdXRvX3B0cgogICAgewogICAgcHJpdmF0ZToK ICAgICAgX1RwKiBfTV9wdHI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfVHAgZWxlbWVu dF90eXBlOwoKCgoKCgoKICAgICAgZXhwbGljaXQKICAgICAgYXV0b19wdHIoZWxlbWVudF90eXBl KiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkgeyB9CiMgMTkyICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL21lbW9yeSIgMwogICAgICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygpIDogX01f cHRyKF9fYS5yZWxlYXNlKCkpIHsgfQojIDIwMyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMK ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBhdXRvX3B0cihhdXRvX3B0cjxf VHAxPiYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQojIDIxNCAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMKICAgICAgYXV0b19wdHImCiAgICAgIG9wZXJhdG9yPShh dXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICAgIHsKICAgICAgICByZXNldChfX2EucmVsZWFzZSgp KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KIyAyMzEgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv bWVtb3J5IiAzCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYXV0b19wdHIm CiAgICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgICAgICB7 CiAgICAgICAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgICB9CiMgMjUxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL21lbW9yeSIgMwogICAgICB+YXV0b19w dHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KIyAyNjEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAz CiAgICAgIGVsZW1lbnRfdHlwZSYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7IHJl dHVybiAqX01fcHRyOyB9CgoKCgoKCgogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIG9wZXJhdG9y LT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI4MyAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9tZW1vcnkiIDMKICAgICAgZWxlbWVudF90eXBlKgogICAgICBnZXQoKSBjb25zdCB0aHJv dygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI5NyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMK ICAgICAgZWxlbWVudF90eXBlKgogICAgICByZWxlYXNlKCkgdGhyb3coKQogICAgICB7CiAgICAg ICAgZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0cjsKICAgICAgICBfTV9wdHIgPSAwOwogICAg ICAgIHJldHVybiBfX3RtcDsKICAgICAgfQojIDMxMiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnki IDMKICAgICAgdm9pZAogICAgICByZXNldChlbGVtZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkK ICAgICAgewogICAgICAgIGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgICAgewogICAgICAgICAg ICBkZWxldGUgX01fcHRyOwogICAgICAgICAgICBfTV9wdHIgPSBfX3A7CiAgICAgICAgICB9CiAg ICAgIH0KIyAzMzMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAzCiAgICAgIGF1dG9fcHRyKGF1 dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAgIDogX01fcHRyKF9f cmVmLl9NX3B0cikgeyB9CgogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRy X3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAgIHsKICAgICAgICBpZiAoX19y ZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKQogICAgICAgICAgewogICAgICAgICAgICBkZWxldGUg X01fcHRyOwogICAgICAgICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7CiAgICAgICAgICB9CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgICB7 IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9 CgogIH07Cn0KIyA0OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9zdHJpbmciIDIgMwoKCgojIDEgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgNjQgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyAxMDEgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh c3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1l bnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1 bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBf QXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7 Cn07CiMgMTI3ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1Rw IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy biBfX3ggLSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGll cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9f eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u PF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsKICBf VHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9Owoj IDE3MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f eSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9v bD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9v bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsg fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKIyAyMjIg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBs b2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf UHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0 eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBf UHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3Qg X1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25z dCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4K aW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9f cHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKCnRl bXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9h cmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3Rl ZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRl KGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9y KCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAog ICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAg fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxf UHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5h cnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KIyAzNDkgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3Mg YmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6 c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg X09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAg dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgog IGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVu YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gp LCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVy YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBf T3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6 c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBf X3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5s aW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4s IGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h cmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihf X2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNs YXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h bWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7 CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1Ymxp YzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9w KF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQog IG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5h bWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwg dmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4K aW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f Zm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNv bmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlv bj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQojIDQzOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgpj bGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9B cmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJs aWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90 b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQog IF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50 ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194 KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1 bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf UmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQg KCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1 bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1 bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1 bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4g X01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248 X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIp KSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1 bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0 cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf UGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0 IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBl JiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwog IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxf VHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3Bm KSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsg cmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu X3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBl eHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVy biAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg bWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0 IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJp dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1Jl dCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6 CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChf UmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp KF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhw bGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBf TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkg Y29uc3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAo X1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90 KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y KCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9 CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Qg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6 IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194 KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw OjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVt X2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9f cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgp OyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f dCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh dG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToK ICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNs YXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3Bm KSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsg KF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25z dF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgp OyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4g OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K ICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9m KShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBf VHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lk PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYp KF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw KiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAg dm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBt ZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAg dm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShf X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwg X1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShf QXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9p ZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6 OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1Rw PiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f ZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+ CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6Oipf X2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1Jl dCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBj b25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn PiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxf UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj bGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFf dDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw LCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1 bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxf UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj bGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVt X2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9t ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgoKCn0KIyA1MyAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9zdHJpbmciIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9iYXNpY19zdHJp bmcuaCIgMSAzCiMgNDQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwoK CgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9iYXNpY19zdHJp bmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9j YXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZm ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVm ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNv bnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9p bnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3Rf cG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50 ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25v cm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJh dG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0 b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxNDMgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAg ICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hh cj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTYxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv YmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9z aXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNp emVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAg IF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNf bGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAg ICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBf TV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgp CiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9N X3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBf Q2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWlu dGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAg ICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVm ZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9B bGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAgICAg ICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAgICAg ICAgICAgICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAgICAg IH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0 IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2Mm IF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZl cmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0K CiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsK CiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewog ICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVy biBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xv bmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAg c3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVy KF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSks IF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVi bGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxz aXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIg X01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3Jh Z2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAx KS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25z dAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAg IF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0g X19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4g JigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAg aXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0 YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0 ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01f bGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAg ICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9j aGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0 aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n OjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9 CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0 aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3Rv ZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJl Z2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFz cyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9D aGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAg ICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJh aXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZv aWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0 b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFz ZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9f cCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19j b3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGlj IHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hh clQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19r MSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As IGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190 eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9N X211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xl bjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVw JgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxf UmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlu bGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0 cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9 IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6 ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0Fs bG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7 CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2Eg PSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j LCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywg X0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYg X19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCkt Pl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhp cy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0o Y29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5h c3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewog ICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAg ICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJl dHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBl bmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9y CiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEo KSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2lu KCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAg IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1 cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2Vf aXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhp cy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4o KSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5n dGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoK ICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAg ICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9D aGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1 cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6 ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0 YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25z dCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQog ICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVf dHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01f ZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUo KSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAg ICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAg ICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQog ICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAg ICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5k KF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19j KSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhp cy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAg ICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkK ICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2Zp cnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQog ICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp OwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3Mg PiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n Ojphc3NpZ24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUg LSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9f biA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIu X01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7 CiAgICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCkt Pl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkK ICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNp emUoKSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCks IF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAg ICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAg ICAgICAgaWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf TV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAg ICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAg IF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0g X1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0K ICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBf X3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24s IF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9N X2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBs YWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZv aWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK ICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f cCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsg dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3Ry LnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBf X3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f c3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQog ICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAg ICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXpl IC0gX19wb3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9k YXRhKCkgKyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6 ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlz LT5tYXhfc2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2lj X3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8 fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxl c3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICBy ZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsg X19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsK ICAgICAgICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBf X29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBf X24pOwogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0No YXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8 PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAg ICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6 OmNvcHkoX19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19z KTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBf X3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg IHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsg cmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01f Y2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9Cgog ICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0No YXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4o KTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9f Yyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhp cy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAg ewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChf X3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2Rh dGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9z aXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2li ZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEs IF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp OwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0 b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7 CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0 aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAg ICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkg KyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAg IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0 ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBl IF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAg ICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv bnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAg ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAo X19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjpyZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBfX3Np emUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/ IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEgPiB0 aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi YXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJl ZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAg fHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAg ICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBf X3MsIF9fcyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBfTV9y ZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRu MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+Ojpp dGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z KQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190 eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9f YykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo X19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9k YXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+ cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf X2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx LCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5 cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0 ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJ dGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19r MSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9D aGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVn aW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBf X2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRv ciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCog X19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwg X19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0g X19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAgIHsg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAg ICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs IGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIp CiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIg LSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIg LSBfX2sxKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Zv cndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0No YXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5 cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29u c3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25z dHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAg ICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQp LCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRl ciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg ICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwo KSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3Rh dGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3Rh dGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVy IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNp emVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1Ymxp YzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9D aGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24g PSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19u XSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0K CiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEo KTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg cmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgp LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDAp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmly c3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf bGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9z KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBf X3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf bGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9 IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s YXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBu cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRh dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k X2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBu cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0 OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBz aXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRo aXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24p OwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo KTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXpl X3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19y ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsK ICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAg ICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsK CiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24x LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3Bv czIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0 IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAg aW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3Qg X0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3Jl ZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBl bmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9f bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs b2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4g X19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAg ICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXpl X3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl KF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f bGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz KSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg cmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo cykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hh clQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAw OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJu IF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jo cy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU KiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFy VCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0 cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAg ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwp9 CiMgNTQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvc3RyaW5nIiAyIDMKCgojIDEgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9hbGdvcml0aG0iIDMKCgoK CiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDY0ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9z dGxfaGVhcC5oIiAxIDMKIyA2MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9oZWFwLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVz aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAg ICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAg ICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVu dCkgPCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2Zp cnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAg X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0 ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19w dXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwg X0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAt IDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f Zmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf X3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlz dGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hv bGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192 YWx1ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBf X3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVu dCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hv bGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVl X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg ICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9E aXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAg ICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rp c3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5j ZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk ID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xl bikgewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCAr IChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAg ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwog ICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxk ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hp bGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmly c3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25k Q2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4 LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3Bf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBf VHAgX192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3Rh bmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAog ICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAg IAoKICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0g MSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAg ICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3 aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmly c3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQog ICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4 KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19z ZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsg MSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAq KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAg IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBf X2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is IHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19w b3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0 LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3Rf aGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwK ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5s aW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQog ICAgewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hl YXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAt IDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBl CiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8 IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7 CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hp bGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xl biwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJl bnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAg ICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBf X2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAo X19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFw KF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5 cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQg PT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg PiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBw b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF90ZW1w YnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf dGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+ CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxf bGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2Fs bG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1 ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXpl b2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3 aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xl biAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAg ICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNv bnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29u c3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01f YnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25z dCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9N X2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoK ICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46 Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7Cgog ICAgdHJ5IHsKICAgICAgX01fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAg X01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0 Y2goLi4uKQogICAgICB7CiAgICAgICAgZnJlZShfTV9idWZmZXIpOwogICAgICAgIF9NX2J1ZmZl ciA9IDA7CiAgICAgICAgX01fbGVuID0gMDsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAg fl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgX0Rlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIg KyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3Jh cnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShj b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGlu ZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is IGNvbnN0IF9UcCYgX19jKQogICAgewoKICAgICAKICAgICAgaWYgKF9fYSA8IF9fYikKICAgICAg ICBpZiAoX19iIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChf X2EgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJl dHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICByZXR1cm4gX19hOwog ICAgICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQog ICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTE4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U cCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg ICAgaWYgKF9fY29tcChfX2EsIF9fYikpCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAg ICAgICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAg ICAgICAgICByZXR1cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAg ICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAg ZWxzZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNl CiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxNTAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Z1 bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAgewoKICAgICAKICAgICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9fZigqX19maXJzdCk7CiAg ICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwK ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRf aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1By ZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAg ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg ICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nl c3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9 IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAw IDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19m aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz dDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAz OgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBp ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK ICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kX2lmKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19m aXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2Nv dW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19m aXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAg c3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChfX3By ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh c2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBk ZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyAyODkgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3Zh bCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3Qs IF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5k X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kX2lm KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK ICAgIH0KIyAzMjkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9m aW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAg ICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19s YXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytf X25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAg ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAg ICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzU4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0Zvcndh cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg ewogICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzODcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAg IGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg X192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAogICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsdWUpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0MTEg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICArK19fbjsK ICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0NTAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9f Zmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBf X2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAK CgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIp CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19m aXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgICAg ICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICAgICAgX0Zv cndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAg ICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19s YXN0MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAg ICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVu dCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAg ICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsK ICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19maXJz dDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0 dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICAg IHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1MjIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBz ZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAg ICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3Qy KQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f Zmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsKICAg ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICByZXR1cm4gX19maXJz dDE7CiAgICAgIH0KCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3Ax ID0gX19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19m aXJzdDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmly c3QxLCAqX19maXJzdDIpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDE7 CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRp Y2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAg ICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYg KCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAo X19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBf X2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1 cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoK ICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0K IyA1OTYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAg X0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192 YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAg ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5k KF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUg KF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICAg ICArK19faTsKICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19u ID09IDApCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAg ICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192YWwpOwogICAgICAgIH0KICAgICAg ICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjQzICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJl ZD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBf VHAmIF9fdmFsLAogICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlfcHJlZCkKICAgIHsK CiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19m aXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg ICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgICAgICBi cmVhazsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmly c3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAg ICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpf X2ksIF9fdmFsKSkgewogICAgICAgICAgICArK19faTsKICAgICAgICAgICAgLS1fX247CiAgICAg ICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAg ICAgICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg X19maXJzdCA9IF9faTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFz dDsKICAgICAgfQogICAgfQojIDY5NyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIyPgogICAgX0ZvcndhcmRJdGVyMgogICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2Zp cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy MiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAg IGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgICByZXR1cm4gX19maXJzdDI7CiAg ICB9CiMgNzMyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVW5h cnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAKICAgICAKCgoKICAg ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAg ICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CiMgNzY1ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KICAg IF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3Ap CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVz dWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CiMgNzk2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog ICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAg ICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDgyNSAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25l d192YWx1ZTsKICAgIH0KIyA4NTYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5 cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBf VHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHA+ CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19u ZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0g X19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgIH0KIyA5MTggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgog ICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fZ2Vu KCk7CiAgICB9CiMgOTQyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0dl bmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9fZmly c3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAgIGZv ciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fZ2Vu KCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDk2OSAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl ciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9p ZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgfQojIDEwMzkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9y d2FyZEl0ZXIKICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoK ICAgICAKCgogICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwog ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0g X19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf Y29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKICAgIH0KIyAxMDczICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3Zl X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBfX2ZpcnN0 ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgICAgIF9Gb3J3YXJkSXRlciBf X2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xh c3QsIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5p cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9p dGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBf X3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIShf X3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAg ICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19y ZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmly c3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAgICAg ICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAg IH0KIyAxMTQ1ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9P dXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAg IAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf T3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0 ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAg ICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9 ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2Zp cnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmly c3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICAgICAqKytfX3Jlc3Vs dCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAx MTk5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVBy ZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl ZCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoK CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBf X2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAq KytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAx MjMyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl ZGljYXRlPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1 ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlw ZSgpKTsKICAgIH0KIyAxMjYzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5p cXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAg ICAgICAgCiAgICAgICAgIAoKCiAgICAgICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFz dCwgX19maXJzdCk7CiAgICB9CiMgMTI5MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQ cmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu YXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRf ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5pcXVl X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0KCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAg X19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnKQogICAgewogICAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICByZXR1 cm47CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qr KywgX19sYXN0KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBf X2xhc3QpCiAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0K IyAxMzQ5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAg ewoKICAgICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJldmVyc2VfY29weShf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg ICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgLS1f X2xhc3Q7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICAgICArK19fcmVzdWx0Owog ICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMzk5ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9FdWNsaWRlYW5SaW5n RWxlbWVudD4KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19nY2QoX0V1Y2xpZGVhblJp bmdFbGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKICAgIHsKICAgICAgd2hp bGUgKF9fbiAhPSAwKSB7CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAl IF9fbjsKICAgICAgICBfX20gPSBfX247CiAgICAgICAgX19uID0gX190OwogICAgICB9CiAgICAg IHJldHVybiBfX207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy PgogICAgdm9pZAogICAgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoKF9f Zmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVy bjsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiAg ICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3Qg PT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICB9IHdoaWxl IChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgICAg IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpf X2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9f bWlkZGxlID0gX19maXJzdDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQog ICAgICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAg aWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAg ICByZXR1cm47CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9u YWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX21p ZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAoKl9fZmlyc3QrKywgKi0t X19sYXN0KTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICAgICAgX19yZXZl cnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAg ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9f Zmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVy bjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CgogICAgICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNl IF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9f azsKCiAgICAgIGlmIChfX2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9yYW5nZXMoX19maXJzdCwg X19taWRkbGUsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9EaXN0 YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAw OyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0 OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgICAgIGlmIChf X2sgPCBfX2wpIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9f X2Q7IF9faisrKSB7CiAgICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAg ICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgICAgICBfX3AgLT0gX19sOwog ICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAg ICBfX3AgKz0gX19rOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAg ICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7 CiAgICAgICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICAgICAqX19w ID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgICAgICBfX3AgLT0gX19s OwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9fdG1wOwogICAgICAgICsr X19maXJzdDsKICAgICAgfQogICAgfQojIDE1NjEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZv aWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxl LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVy VHlwZTsKICAgICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBl KCkpOwogICAgfQojIDE1ODkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg IF9PdXRwdXRJdGVyCiAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX091 dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBjb3B5 KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7CiAg ICB9CiMgMTYxMiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9u dW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247 CgoKCiAgICB9CiMgMTYzNCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBy YW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg IT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5k b21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KIyAxNjYwICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgogICAgdm9pZAogICAgcmFu ZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5k KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAg ICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFz dDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0g X19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19wYXJ0aXRp b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoK ICAgICAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgaWYgKCsrX19maXJzdCA9PSBf X2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmly c3Q7CgogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQogICAgICAgIGlmIChfX3ByZWQo Kl9fbmV4dCkpIHsKICAgICAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOwogICAgICAgICAg KytfX2ZpcnN0OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0 ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICh0cnVlKQogICAg ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsK ICAgICAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAgICsrX19maXJz dDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgLS1fX2xhc3Q7CiAg ICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg ICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0 KSkKICAgICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFr OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsK ICAgICAgfQogICAgfQojIDE3NDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgog ICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQog ICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19s YXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5 cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19pbnBsYWNlX3N0YWJsZV9w YXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9f bGVuKQogICAgewogICAgICBpZiAoX19sZW4gPT0gMSkKICAgICAgICByZXR1cm4gX19wcmVkKCpf X2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9 IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3 YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9faW5w bGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAv IDIpOwogICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgYWR2YW5j ZShfX2JlZ2luLCBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4g X19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1l IF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0 aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7 CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVy IF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZm ZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAg ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19m aXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVz dWx0MjsKICAgICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVz dWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19t aWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJs ZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu IC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9f ZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19w cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAg ICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2Jl Z2luLCBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2Jl Z2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAgICAgX1RlbXBv cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xh c3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgICAgICAgcmV0dXJuIF9fc3Rh YmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5y ZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAgICAgICBlbHNlCiAgICAgICAg ICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3By ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl VHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRv bUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUg KCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFz dDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgICAgICAtLV9fbGFzdDsK ICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsK ICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIK ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2 b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3 aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgICAgICsrX19maXJzdDsKICAg ICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQog ICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAg ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsK ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5ICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2 b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwgX1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xh c3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAg ICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0t X19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg d2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4 dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAg ICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9f dmFsID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29w eV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBf X3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNj ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsK ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkp IHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAg ICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAg fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5l IHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAh PSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBf VmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1 YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAg X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2 b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f Zmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVz aG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3Ro cmVzaG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2Zp cnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xn KF9TaXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9f biAhPSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAg IHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo X2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xh c3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQg PT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsK ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s YXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2Rl cHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhy ZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFy dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0 dXJuOwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVk aWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19j b21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0 LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7 CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQK ICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJz dCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICAgICAgX19maW5hbF9p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9CiMgMjE5NyAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAg ICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9s b29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7 CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7 CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0 IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv cnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRs ZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRk bGUpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0 IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9f aW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19p bnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNl PgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAg ICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsK ICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2UoX19sYXN0IC0g X19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9f c3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAgICAgX19y ZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2Us IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRv bUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0 ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp OwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAgICBfX3N0ZXBfc2l6 ZSA9IHN0ZDo6bWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoK ICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICBf X2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQsCiAgICAg ICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgog ICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7 CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNl LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6 ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtf c2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQog ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgog ICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl OwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50 ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19z dGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwg X19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVm ZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21l cmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3Np emUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19s YXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg X19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAg ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9f Y29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVy Z2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2Nv bXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3Ao X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwog ICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFu Y2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewog ICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChf X2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFi bGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6 ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhf YnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdl X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAt IF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21p ZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFu Y2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9z b3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9E aXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0 ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBf X2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxl X3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX3N0YWJs ZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUs IF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgfQogICAgICBfX21lcmdlX2Fk YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9f Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRs ZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CiAgICB9CiMgMjQzMCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBz dGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf RGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1Jh bmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBp ZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz dCwgX19sYXN0KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19m aXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAg ICB9CiMgMjQ2NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp bmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg IAoKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBl PiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAg ICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAg ZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZv aWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAg ICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQog ICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJz dCwgX19taWRkbGUpOwogICAgfQojIDI1NDAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAg CgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQog ICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBz b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAg ICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6 dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAg ICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9f cmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9 IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3Vs dF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xh c3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9y ZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo Kl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVz dWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlz dGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2Zp cnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh bF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJl dHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFs X2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYg X19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRf cmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19y ZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp IHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAg ICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jl c3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19m aXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s YXN0LCBfX2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2 ODYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgs CiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m aXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBf X3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0 IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkK ICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3Qg PSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7 CiAgICB9CiMgMjcyOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAg d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9f bnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9f bGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s YXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoK ICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs ZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJz dCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xl biAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4MTYgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVy CiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAg IAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJz dCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBf X2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9f bWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsK ICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAg ICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAg IH0KIyAyODU2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAg ICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg X0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5 cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19s ZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9 IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAo X192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNl IHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAg ICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0 YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9E aXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3 aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg ICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hh bGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAg ICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAg ICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAg ICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg X0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5 cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsK CiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog ICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh bGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9 IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAt IF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxl KQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xl ZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICAgICAgYWR2 YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytf X21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ dGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAg ICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2Zp cnN0KTsKICAgIH0KIyAzMDAzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9y YW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw JiBfX3ZhbCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy ZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAg IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19s YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0 LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp OwogICAgfQojIDMwNTIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBi aW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgog ICAgIAoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz dCwgX192YWwpOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7 CiAgICB9CiMgMzA4MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0 ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAg ICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMg MzExNSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAq X19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsr X19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jl c3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9 PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9f bGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAg ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNl IF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xl bjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZh bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBz dGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRf Y3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3Qs IF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjExID0gc3RkOjpkaXN0YW5j ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0 LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3 X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgc3RkOjpk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1 ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rp c3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19s ZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIp IHsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAg IGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9f bGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEg PiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNl KF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3Vu ZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4y MiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAg ZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3Nl Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9 IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0 ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19t aWRkbGUsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21l cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAg ICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVu MiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg ICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0 ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf X2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2Vu ZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkg ewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIp OwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAg ICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0K ICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZl cl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShf X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChf X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAg ICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9f Zmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVybiBf X2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19t ZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg X19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFz dDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0 dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1f X2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYg KCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7 CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNv cHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1f X2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0g Kl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAg cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAg ICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRp cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0 aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAo dHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAg ICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh c3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy LCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2Ug ewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAg ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0 eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJn ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s ZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1 ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4x IDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAg ICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3Qs IF9fZmlyc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgICAg ICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25k X2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9f bGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAg ICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAg IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1 dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBf X3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg ICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShf X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVw cGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAg ICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg ICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQog ICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs IF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x IC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9f Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAg ICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3Qs IF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgfQogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3Rh bmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAg ICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4xIDw9 IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRl ciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAg ICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9f Zmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0g X19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5 KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAg ICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u ZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAg ICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAg ICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAg ICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9j dXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9f bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ugewog ICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAg YWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0 X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2Nv bXApOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBf X2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmly c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9f bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4x MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRk bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl LCBfX2NvbXApOwogICAgICAgICAgfQogICAgfQojIDM1MDggIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgog ICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAg ICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf QmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5 cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21p ZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl bjEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX2xlbjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBv cmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0 LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIp OwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwg X19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJl Z2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJn ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVl X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg X0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21p ZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2xlbjEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoK ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBf X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s ZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAg ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBp bmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8 ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19j b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2Zp cnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0 ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAg ICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2Ug aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNl IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3lt bWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9P dXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBl bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVu dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg PSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBf X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19j b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19p aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24o X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7 CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19p aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg ICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19p KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19p KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09 ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZp bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu IF9fbGFzdDE7CiAgICB9CiMgNDIwMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJz dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAg ICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsK ICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNo KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19u ZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg ICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAg ICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJ dGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAg ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9y d2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAg ICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJz dDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9f bmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg ICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAg ICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAg ICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRp cmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRl cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9f cmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAg ICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3Qy KSwgX19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICBy ZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLXN0 ZDo6ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7 CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIx IF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsK ICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9f cmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xh c3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w KTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBf X3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6OmRpc3RhbmNl KF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAg ICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyMj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0 ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAg IAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19m aXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QyKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0 ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9f Zmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIy IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJl ZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBf X2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAg ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogICAgfQoKfQojIDcwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2FsZ29y aXRobSIgMiAzCiMgNTcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvc3RyaW5nIiAyIDMKIyAxICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDUgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNv bnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVw OjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAt IDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihf Q2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVj dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChfX2Jl ZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlf cmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAgICBz aXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwg c2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAgICBf X2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9CiAg ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0cmFp dHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAgX19y LT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoKCiAgICAgICAgICAg IGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBf X3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0NoYXJU KiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAgICAg ICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg aWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAg ICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsKICAg ICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAg ICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2Ep OwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRh KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKSwg X19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAg ICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9f bGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJv dzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywg X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBf X2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29w eSgpOwoKCiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAw KSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNfZXJyb3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmlu ZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGlj X2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OmRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKCiAgICAgICAg X1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAg ICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsg fQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0 cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01f bGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1Jl cDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3Qg X0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkp CiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVw KiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAg ICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01f cmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAg ewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAg ICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtf X25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRh cGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRv cigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj X3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQog ICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0Fs bG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBj b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9N X2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2Zv bGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs dXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0 cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFw bHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19z KSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBucG9zLCBfX2EpLCBfX2Ep CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxs b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBf X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco X0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAg ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAg IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3Jl cCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRf YWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9N X2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9N X2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2Mm IF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVw KSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNf YWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3Np emUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+ X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6 ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0No YXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXpl X3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlm IChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAg ICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsK CgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCop OwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6 ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAg ICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYg X19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9T X2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAg ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgp LCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0 cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf X3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAg IF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93 X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5 cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsK ICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVw KCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9 IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAg IHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNf c2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUo KSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2 ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19y ZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxs b2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9f YSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2Uo X19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNf c3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAg ICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgp LT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgp OwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkp CiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAg IF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAg ICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3Rt cDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAg ICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAg ICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl cDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxv YykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkK CgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUi KTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9D aGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvYmFzaWNf c3RyaW5nLnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAg IGNvbnN0IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19t YWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXpl ICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAg ICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBf X21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2Vz aXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAg ICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXpl b2YoX1JlcCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXpl KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3Vi cGFnZXNpemUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNp emUpKQogICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9 IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5 ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAg IHZvaWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6 ZSk7CiAgICAgIF9SZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9j YXBhY2l0eSA9IF9fY2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAg IF9fcC0+X01fbGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf Q2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoK ICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAg ewoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9f cmVzOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25z dCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7Cgog ICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6 ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkp CiAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19y ZXF1ZXN0ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2Nh cGFjaXR5KQoKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4g MipfTV9jYXBhY2l0eSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVk X2NhcCA6IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0g X1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01f bGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBl Ojpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAg ICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVz dHJveShfX2FsbG9jKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9N X3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg IHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJy b3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9f biAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRo aXMtPmVyYXNlKF9fbik7CgogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIgX19rMSwKICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewoK ICAgICAgICBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIpOwogICAgICAgIHJldHVybiBfTV9y ZXBsYWNlX3NhZmUoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsK ICAgICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2syKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9f ZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpkaXN0YW5jZShfX2sxLCBfX2syKSk7 CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlw ZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5l dykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxh Y2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAg ICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3 KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7 CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs IHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0g X19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9v bCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVf dHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAg ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUo KTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBp ZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4p OwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0 ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5k KCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVu ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc3RyLnNpemUo KSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5j YXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01f cmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3Bvcyks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYK ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19s ZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5 KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNl X3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6 ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJl c2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p ZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo cykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6 c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6 Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJl c2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9f bGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19z dHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJp bmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAg ICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90 eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQg X19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXpl X3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAt ICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9f bjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihf TV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25z dAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19v dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMt PnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAg ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAg IHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBf Q2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBf X3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEg KyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAg cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBz aXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAg ewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBz aXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f cCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAg ICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBf X3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsK ICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7CiAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19w b3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAg ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg KF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsK ICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7 CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlm ICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAg cmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5k X2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7 ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNf dHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19w KQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlm ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19z LCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7 CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9 CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAg ICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXpl KCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9N X2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7 IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlw ZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwog ICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAg IHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBf X3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0 c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAg ICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0p OwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2Yo X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAg ICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAg ICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpl cShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7 CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAg ICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0g X19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19v dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9f cnNpemU9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOwogICAgICBzaXplX3R5cGUgX19s ZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190 eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAg ICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVy biBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9f bjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3Bv czIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg ICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlw ZSBfX3JzaXplID0gc3RkOjptaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90 eXBlIF9fcm9zaXplID0gc3RkOjptaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7CiAgICAgIHNp emVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwog ICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJl dHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAog ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5 cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9f bGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190 eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAg ICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq IF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi YXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRz X3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IHN0ZDo6bWluKF9f c2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19y c2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9k YXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9 IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu dAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAg ICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Ro cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5 cGUgX19vc2l6ZSA9IHN0ZDo6bWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAg ICAgIHNpemVfdHlwZSBfX3JzaXplID0gc3RkOjptaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwog ICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAg aW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f bGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAg ICAgIHJldHVybiBfX3I7CiAgICB9CgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNf c3RyaW5nPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYK ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVybiB0 ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf aXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYs IGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdl dGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwojIDk2NyAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKfQojIDU4ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL3N0 cmluZyIgMiAzCiMgMiAiYnJlYWtpdC5jYyIgMgoKY2xhc3Mgc3N0cmluZ190IDogcHVibGljIHN0 ZDo6c3RyaW5nCnsKcHVibGljOgogICAgc3N0cmluZ190KHZvaWQpIHt9CiAgICBzc3RyaW5nX3Qo Y29uc3QgY2hhciogc3JjKSB7fQoKICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3QKICAg IHsKICAgICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBvcGVyYXRvciBib29sKHZvaWQpIGNvbnN0 IHsKICAgICAgICByZXR1cm4gMCAhPSAxOwogICAgfQoKfTsKCnZvaWQgbG9nKGNvbnN0IGNoYXIq IHN0cik7Cgp2b2lkIG5vdGhpbmcoKQp7CiAgICBzc3RyaW5nX3QgdGVtcCA9ICIiOwogICAgbG9n KHRlbXApOwp9Cg==