From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7976 invoked by alias); 19 May 2003 21:40:05 -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 31290 invoked by uid 71); 19 May 2003 21:36:00 -0000 Resent-Date: 19 May 2003 21:36:00 -0000 Resent-Message-ID: <20030519213600.31289.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, pajones57@hotmail.com Received: (qmail 18583 invoked by uid 48); 19 May 2003 21:30:45 -0000 Message-Id: <20030519213045.18582.qmail@sources.redhat.com> Date: Mon, 19 May 2003 21:40:00 -0000 From: pajones57@hotmail.com Reply-To: pajones57@hotmail.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10874: ICE: unrecognized symbol type "" X-SW-Source: 2003-05/txt/msg02117.txt.bz2 List-Id: >Number: 10874 >Category: c++ >Synopsis: ICE: unrecognized symbol type "" >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Mon May 19 21:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Paul Jones >Release: gcc version 3.2.2 >Organization: >Environment: gentoo rc1.4 >Description: Configured with: /var/tmp/portage/gcc-3.2.2/work/gcc-3.2.2/configure --prefix=/usr --bindir=/usr/i586-pc-linux-gnu/gcc-bin/3.2 --includedir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/include --datadir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2 --mandir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2/man --infodir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2/info --enable-shared --host=i586-pc-linux-gnu --target=i586-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/include/g++-v3 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext Thread model: posix gcc version 3.2.2 This command line triggers the bug: g++ -o nsDOMClassInfo.o -c -DOSTYPE=\"Linux2.4\" -DOSARCH=\"Linux\" -DOJI -I../../../dist/include/xpcom -I../../../dist/include/string -I../../../dist/include/webbrwsr -I../../../dist/include/js -I../../../dist/include/widget -I../../../dist/include/gfx -I../../../dist/include/layout -I../../../dist/include/content -I../../../dist/include/caps -I../../../dist/include/docshell -I../../../dist/include/xpconnect -I../../../dist/include/pref -I../../../dist/include/oji -I../../../dist/include/necko -I../../../dist/include/java -I../../../dist/include/locale -I../../../dist/include/uriloader -I../../../dist/include/sidebar -I../../../dist/include/xuldoc -I../../../dist/include/webshell -I../../../dist/include/view -I../../../dist/include/uconv -I../../../dist/include/shistory -I../../../dist/include/plugin -I../../../dist/include/windowwatcher -I../../../dist/include/htmlparser -I../../../dist/include/chardet -I../../../dist/include/find -I../../../dist/include/appshell -I../../../dist/include/intl -I../../../dist/include/dom -I../../../dist/include -I/var/tmp/portage/mozilla-1.3-r1/work/mozilla/dist/include/nspr -I/usr/X11R6/include -fPIC -I/usr/X11R6/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-long-long -march=pentium2 -pipe -Wno-deprecated -fshort-wchar -pthread -pipe -DNDEBUG -DTRIMMED -ffunction-sections -O2 -I. -I./../build -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../../mozilla-config.h -Wp,-MD,.deps/nsDOMClassInfo.pp nsDOMClassInfo.cpp Error Output: {standard input}: Assembler messages: {standard input}:6542: Warning: end of file not at end of a line; newline inserted {standard input}:7087: Error: unrecognized symbol type "" g++: Internal error: Terminated (program cc1plus) Please submit a full bug report. See for instructions. make[4]: *** [nsDOMClassInfo.o] Error 1 make[4]: *** Deleting file `nsDOMClassInfo.o' >How-To-Repeat: emerge mozilla-1.3 under gentoo Does not crash when only the one file is compiled >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="nsDOMClassInfo.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nsDOMClassInfo.ii" IyAxICJuc0RPTUNsYXNzSW5mby5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBs aW5lPiIKIyAxICIuLi8uLi8uLi9tb3ppbGxhLWNvbmZpZy5oIiAxCiMgMiAiPGNvbW1hbmQgbGlu ZT4iIDIKIyAxICJuc0RPTUNsYXNzSW5mby5jcHAiCiMgNDAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3JlLmgiIDEKIyA0MyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zY29yZS5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj IDU1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcnR5cGVzLmgiCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjcHVjZmcuaCIgMQojIDU2ICIvdmFy L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcnR5cGVzLmgiIDIKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlm Zl90OwojIDIxMyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA1OSAiL3Zhci90 bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0eXBlcy5oIiAyCiMgMjUyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCmV4dGVybiAiQyIgewojIDI2MiAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFJVaW50ODsKIyAyNzYgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBQUkludDg7CiMgMzAxICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cnR5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUFJVaW50MTY7CnR5cGVkZWYgc2hvcnQg UFJJbnQxNjsKIyAzMjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUFJV aW50MzI7CnR5cGVkZWYgaW50IFBSSW50MzI7CiMgMzcyICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVk ZWYgbG9uZyBsb25nIFBSSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0 OwojIDM5NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIGludCBQUkludG47CnR5cGVkZWYgdW5z aWduZWQgaW50IFBSVWludG47CiMgNDA3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgZG91Ymxl IFBSRmxvYXQ2NDsKCgoKCgoKdHlwZWRlZiBzaXplX3QgUFJTaXplOwoKCgoKCgoKdHlwZWRlZiBQ UkludDMyIFBST2Zmc2V0MzI7CnR5cGVkZWYgUFJJbnQ2NCBQUk9mZnNldDY0OwoKCgoKCgoKdHlw ZWRlZiBwdHJkaWZmX3QgUFJQdHJkaWZmOwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBS VXB0cmRpZmY7CiMgNDQ5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsK IyA0NTkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBQUlVpbnQ4IFBSUGFja2VkQm9vbDsKCgoK Cgp0eXBlZGVmIGVudW0geyBQUl9GQUlMVVJFID0gLTEsIFBSX1NVQ0NFU1MgPSAwIH0gUFJTdGF0 dXM7CiMgNDkyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBQUldvcmQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBQUlV3b3JkOwojIDUzNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L29ic29sZXRlL3Byb3R5cGVzLmgiIDEKIyA0NSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIK dHlwZWRlZiBQUlVpbnRuIHVpbnRuOwoKdHlwZWRlZiBQUkludG4gaW50bjsKIyA4MyAiL3Zhci90 bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv b2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwoj IDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz CiMgMzIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUv c3R1YnMuaCIgMSAzCiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVm IHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0 Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191 X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Vf cXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0 OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50 OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9y dCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0 eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQz Ml90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRf dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRf dDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rl dl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5 cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVm IF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19x dWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVf dDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0 X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBf X3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBj aGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBl ZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5 cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlw ZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRf dDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQg X19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3Vf bG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0 eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxj bnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZf dCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoK CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3Iv aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg X19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw ZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1 czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2Ny X3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0 dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0 IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQg X19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2 b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7 CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7 CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50 IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25l cjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9 IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsK fSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoK CnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19y d193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRf ZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNo YXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9j a2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVk ZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAg c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsK ICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhy ZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhy ZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFk X3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYg X191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9u ZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9x dWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2Zm X3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5v NjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRf dDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qgbmxp bmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2Zm X3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3Qg cGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np emVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj YWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU4ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEw NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEz MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3Qg dXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ X18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ X18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ X18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ X18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBl ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7 CiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5k aWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMg MjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIv dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBz aWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7 CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2lu Y2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9z ZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRl ZiBsb25nIGludCBfX2ZkX21hc2s7CiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICog c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk X21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4g IkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0 cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193 cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk cywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91 dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQg Kl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0 cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf X2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3Qg Kl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAz CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3Np emVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlw ZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNm aWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxr Y250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsK dHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDg0ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNv bGV0ZS9wcm90eXBlcy5oIiAyCiMgMTA1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBl ZGVmIFBSVWludDY0IHVpbnQ2NDsKIyAxMTQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMt cjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL29ic29sZXRlL3Byb3R5cGVzLmgiCnR5 cGVkZWYgUFJVaW50MzIgdWludDMyOwojIDEyNSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIK dHlwZWRlZiBQUlVpbnQxNiB1aW50MTY7CgoKCgoKCgp0eXBlZGVmIFBSVWludDggdWludDg7CiMg MTQyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CiMg MTU0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50MzIgaW50MzI7CiMg MTY4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CiMg MTc4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50OCBpbnQ4OwoKCnR5 cGVkZWYgUFJGbG9hdDY0IGZsb2F0NjQ7CnR5cGVkZWYgUFJVcHRyZGlmZiB1cHRyZGlmZl90Owp0 eXBlZGVmIFBSVXdvcmQgdXByd29yZF90Owp0eXBlZGVmIFBSV29yZCBwcndvcmRfdDsKIyA1MzUg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydHlwZXMuaCIgMgoKCgoKCn0KIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zY29yZS5oIiAyCiMgMTQ5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3Jl LmgiCnR5cGVkZWYgUFJVaW50MzIgbnNyZXN1bHQ7CgoKCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zRXJyb3IuaCIgMQojIDI5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zRXJyb3IuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX0Vycm9yQWNjb3JkaW5nVG9OU1BSKCk7 CiMgMTU3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3JlLmgiIDIKIyAyMjQgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc2NvcmUuaCIKICAgIHR5cGVkZWYgUFJVaW50MTYg UFJVbmljaGFyOwojIDQxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICJuc0RPTUNsYXNzSW5m by5oIiAxCiMgNDMgIm5zRE9NQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01DbGFzc0luZm8uaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTUNsYXNzSW5mby5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lD bGFzc0luZm8uaCIgMQojIDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ2xhc3NJ bmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDEK IyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zcm9vdGlkbC5oIiAxCiMgMTIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc3Jvb3RpZGwuaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDQ4 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcnRpbWUuaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDQ4ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv bmcuaCIKZXh0ZXJuICJDIiB7CiMgNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEv d29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgpleHRlcm4gUFJJbnQ2NCBM TF9NYXhJbnQodm9pZCk7CmV4dGVybiBQUkludDY0IExMX01pbkludCh2b2lkKTsKZXh0ZXJuIFBS SW50NjQgTExfWmVybyh2b2lkKTsKIyA0MjMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMt cjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgNDkgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BydGltZS5oIiAyCgpleHRlcm4gIkMiIHsKIyA3NyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCnR5cGVkZWYg UFJJbnQ2NCBQUlRpbWU7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVGltZVBhcmFtZXRlcnMgewog ICAgUFJJbnQzMiB0cF9nbXRfb2Zmc2V0OwogICAgUFJJbnQzMiB0cF9kc3Rfb2Zmc2V0Owp9IFBS VGltZVBhcmFtZXRlcnM7CiMgMTEyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJF eHBsb2RlZFRpbWUgewogICAgUFJJbnQzMiB0bV91c2VjOwogICAgUFJJbnQzMiB0bV9zZWM7Cgog ICAgUFJJbnQzMiB0bV9taW47CiAgICBQUkludDMyIHRtX2hvdXI7CiAgICBQUkludDMyIHRtX21k YXk7CgogICAgUFJJbnQzMiB0bV9tb250aDsKICAgIFBSSW50MTYgdG1feWVhcjsKCgogICAgUFJJ bnQ4IHRtX3dkYXk7CgogICAgUFJJbnQxNiB0bV95ZGF5OwoKCiAgICBQUlRpbWVQYXJhbWV0ZXJz IHRtX3BhcmFtczsKfSBQUkV4cGxvZGVkVGltZTsKIyAxNTUgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBl ZGVmIFBSVGltZVBhcmFtZXRlcnMgKCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRp bWUgKmdtdCk7CiMgMTc3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVGltZQoKUFJfTm93KHZv aWQpOwojIDE5MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX0V4cGxvZGVUaW1lKAog ICAgUFJUaW1lIHVzZWNzLCBQUlRpbWVQYXJhbUZuIHBhcmFtcywgUFJFeHBsb2RlZFRpbWUgKmV4 cGxvZGVkKTsKCgoKCgpleHRlcm4gUFJUaW1lCgpQUl9JbXBsb2RlVGltZShjb25zdCBQUkV4cGxv ZGVkVGltZSAqZXhwbG9kZWQpOwojIDIxNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBS X05vcm1hbGl6ZVRpbWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFt Rm4gcGFyYW1zKTsKCgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFy YW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1l dGVycyBQUl9HTVRQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4 dGVybiBQUlRpbWVQYXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBS RXhwbG9kZWRUaW1lICpnbXQpOwojIDI2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlN0YXR1 cyBQUl9QYXJzZVRpbWVTdHJpbmcgKAogICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZywKICAgICAg ICBQUkJvb2wgZGVmYXVsdF90b19nbXQsCiAgICAgICAgUFJUaW1lICpyZXN1bHQpOwojIDI4MSAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9Gb3JtYXRUaW1lKGNoYXIgKmJ1Ziwg aW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqZm10LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUFJFeHBsb2RlZFRpbWUgKnRtKTsKCgoKCmV4dGVybiBQUlVp bnQzMgpQUl9Gb3JtYXRUaW1lVVNFbmdsaXNoKCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZlNpemUs CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgUFJFeHBs b2RlZFRpbWUqIHRtICk7CgoKCn0KIyAxMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z cm9vdGlkbC5oIiAyCgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNBQ1N0cmluZzsKIyAxMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDIKIyAxMTYgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0Jhc2UuaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJU3VwcG9ydHNCYXNlLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUQuaCIgMQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5o IgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19k ZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rl c3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChf X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAo X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz dHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz dHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jl c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVk ZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYg c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVz WzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGlu dCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwoKCiAgY29u c3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7CiMgMTE1ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm1fbCAoY2hhciAqX19k ZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAo X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTYw ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0 IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19z LCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j b25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj aGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9f c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w dHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAq X19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2 b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5 ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZv aWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9f ZXJybnVtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJu dW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv aWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9p ZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4 IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4g aW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIg Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXBfbCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBpbnQgc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf X2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl cm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19z dHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf dCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9f c3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNo YXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM3OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz Cn0KIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUQuaCIgMgojIDUyICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5oIgpzdHJ1Y3QgbnNJRCB7CgoKCgoKICBQUlVp bnQzMiBtMDsKICBQUlVpbnQxNiBtMTsKICBQUlVpbnQxNiBtMjsKICBQUlVpbnQ4IG0zWzhdOwoj IDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5oIgogIGlubGluZSBQUkJvb2wg RXF1YWxzKGNvbnN0IG5zSUQmIG90aGVyKSBjb25zdCB7CgoKCgoKCgogICAgcmV0dXJuIChQUkJv b2wpCiAgICAgICgoKChQUlVpbnQzMiopICZtMClbMF0gPT0gKChQUlVpbnQzMiopICZvdGhlci5t MClbMF0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbMV0gPT0gKChQUlVpbnQzMiopICZv dGhlci5tMClbMV0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbMl0gPT0gKChQUlVpbnQz MiopICZvdGhlci5tMClbMl0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbM10gPT0gKChQ UlVpbnQzMiopICZvdGhlci5tMClbM10pKTsKICB9CgoKCgoKICBQUkJvb2wgUGFyc2UoY29uc3Qg Y2hhciAqYUlEU3RyKTsKCgoKCgogIGNoYXIqIFRvU3RyaW5nKCkgY29uc3Q7Cgp9OwoKCgoKCnR5 cGVkZWYgbnNJRCBuc0NJRDsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lE LmgiCnR5cGVkZWYgbnNJRCBuc0lJRDsKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSVN1cHBvcnRzQmFzZS5oIiAyCiMgNzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lTdXBwb3J0c0Jhc2UuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc3JlZmNudDsKIyA4MCAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzQmFzZS5oIgpjbGFzcyBuc0lTdXBwb3J0 cyB7CnB1YmxpYzoKIyA5NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRz QmFzZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJ SUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3JlZmNudCBB ZGRSZWYodm9pZCkgPSAwOwojIDExNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1 cHBvcnRzQmFzZS5oIgogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7CgoKfTsK IyAxMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0cy5oIiAyCgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1V0aWxzLmgiIDEKIyA1NyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzVXRpbHMuaCIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEZWJ1Zy5oIiAxCiMgNjIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0RlYnVnLmgiCmNsYXNzIG5zRGVidWcgewpwdWJsaWM6CgoKCgoKCiAg c3RhdGljIHZvaWQgQWJvcnRJZkZhbHNlKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFF eHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs IFBSSW50biBhTGluZSk7CiMgODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0RlYnVn LmgiCiAgc3RhdGljIHZvaWQgV2FybklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hh ciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFG aWxlLCBQUkludG4gYUxpbmUpOwojIDk4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNE ZWJ1Zy5oIgogIHN0YXRpYyB2b2lkIFNldFdhcm5pbmdNZXNzYWdlQm94RW5hYmxlKFBSQm9vbCBh T25PZmYpOwoKCgoKICBzdGF0aWMgUFJCb29sIEdldFdhcm5pbmdNZXNzYWdlQm94RW5hYmxlKHZv aWQpOwojIDExNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zRGVidWcuaCIKICBzdGF0 aWMgdm9pZCBBYm9ydChjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3Rh dGljIHZvaWQgQnJlYWsoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0 YXRpYyB2b2lkIFByZUNvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhw ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQb3N0Q29uZGl0aW9uKGNvbnN0IGNoYXIq IGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBB c3NlcnRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoK CiAgc3RhdGljIHZvaWQgTm90WWV0SW1wbGVtZW50ZWQoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBOb3RSZWFjaGVkKGNvbnN0IGNoYXIqIGFN ZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxl LCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBFcnJvcihjb25zdCBjaGFyKiBhTWVz c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50 biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIFdhcm5pbmcoY29uc3QgY2hhciogYU1lc3NhZ2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBh TGluZSk7Cn07CiMgNTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1V0 aWxzLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNJ bXBsLmgiIDEKIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzSW1w bC5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgNDQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxs YS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgojIDEgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BybG9jay5oIiAxCiMgNTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29y ay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gIkMiIHsKIyA2MyAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJsb2NrLmgiCnR5cGVkZWYgc3RydWN0IFBSTG9jayBQUkxvY2s7CiMgODAgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BybG9jay5oIgpleHRlcm4gUFJMb2NrKiBQUl9OZXdMb2NrKHZvaWQpOwojIDkxICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmxvY2suaCIKZXh0ZXJuIHZvaWQgUFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyAxMDIg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQUl9Mb2NrKFBSTG9jayAqbG9jayk7CiMgMTE0 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQUkxvY2sgKmxvY2sp OwoKfQojIDQ1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMgoKZXh0ZXJuICJDIiB7CiMgNTcgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By YXRvbS5oIgpleHRlcm4gUFJJbnQzMiBQUl9BdG9taWNJbmNyZW1lbnQoUFJJbnQzMiAqdmFsKTsK IyA2OCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0RlY3JlbWVudChQ UkludDMyICp2YWwpOwojIDgwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRv bWljU2V0KFBSSW50MzIgKnZhbCwgUFJJbnQzMiBuZXd2YWwpOwojIDkyICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u aCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRvbWljQWRkKFBSSW50MzIgKnB0ciwgUFJJbnQzMiB2YWwp OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJTdGFja0VsZW1TdHIgUFJTdGFja0VsZW07CgpzdHJ1Y3Qg UFJTdGFja0VsZW1TdHIgewogICAgUFJTdGFja0VsZW0gKnByc3RrX2VsZW1fbmV4dDsKCn07Cgp0 eXBlZGVmIHN0cnVjdCBQUlN0YWNrU3RyIFBSU3RhY2s7CiMgMTE1ICIvdmFyL3RtcC9wb3J0YWdl L21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIK ZXh0ZXJuIFBSU3RhY2sgKiBQUl9DcmVhdGVTdGFjayhjb25zdCBjaGFyICpzdGFja19uYW1lKTsK IyAxMjcgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gdm9pZCBQUl9TdGFja1B1c2goUFJTdGFjayAq c3RhY2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVtKTsKIyAxNDAgIi92YXIvdG1wL3BvcnRhZ2Uv bW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpl eHRlcm4gUFJTdGFja0VsZW0gKiBQUl9TdGFja1BvcChQUlN0YWNrICpzdGFjayk7CiMgMTU0ICIv dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Rlc3Ryb3lTdGFjayhQUlN0YWNrICpz dGFjayk7Cgp9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0lt cGwuaCIgMgojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNJbXBs LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVHJhY2VSZWZjbnQuaCIgMQoj IDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbS5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc1RyYWNlUmVmY250LmgiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gIkMiIHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4y L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTMgIi91c3IvbGliL2djYy1saWIv aTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKdHlwZWRlZiBzdHJ1 Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBf X0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMg MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzU0ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0 OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1 bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1 ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5 cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0 ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2dj b252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoj IDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVu dW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwK ICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9P VVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBV VCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJP Ugp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05P UkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2Nv bnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2dj b252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hh ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90 ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3Qg X19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3Qg X19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3Ry dWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKios CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp bnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9f Z2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKios CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlw ZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAq KTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVj dCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsK ICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29u dl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0 IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsK ICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0 IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7 CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRf ZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19t aW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVk ZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lk ICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hh ciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxh Z3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3Vz ZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAg c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3Qg X19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAq X19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEg W107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlw ZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAg IHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBf X2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQx Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19p bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln bmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251 LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5f dmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj IDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBf SU9fRklMRTsKIyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9f bG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVj dnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2 dF9ub2NvbnYKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklM RSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19y ZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwog IGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9f YnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAg Y2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9J T19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9m aWxlbm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5z aWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAg Y2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQx OwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6 ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklM RV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRl cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9J T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0 eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90 KSB0aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP X2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50 IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9f RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9f ZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikg dGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cg KCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMg NDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9f RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpf X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93 ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUyMCAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDgyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9s aXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4 LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7 CgoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxNDcgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2 LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0 IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4g c3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25z dCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0 IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRt cG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93 ICgpOwojIDIwMiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIs IF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpmb3Bl biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJ TEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAg ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyNDgg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5o IiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp bGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9f ZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv cGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhy b3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwg X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21l bXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg ICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0 YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVy biB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0 ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv dyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNu cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jl c3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50 ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYg KGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChp bnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQg X19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0 ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg dGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoK CmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdl dGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFy X3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhy b3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAo aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50 IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNf dW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAi L3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u LCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAo Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0cyAoX19j b25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpf X3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXpl X3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZv aWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2Up IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCiMgNTM3 ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgp OwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9f cG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0 IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNs ZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo KTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMwpleHRlcm4gaW50IHN5c19uZXJyOwpl eHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBf c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CiMg NjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19j b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgp OwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0 IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGlu dCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMg NjgzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2lu Y2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVy biB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFy ICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGlu ZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9f ZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2Zw KSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGlu ZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGlu KS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGlu KSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlu bGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAo X19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0 ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVh bSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSkt Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2Nr ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl cmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIp ICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQK cHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQp LT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cg KHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRv dXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApn ZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3Ry ZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoK CmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewog IHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjg0ICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAz CgoKfQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIiAy CgpjbGFzcyBuc0lTdXBwb3J0czsKIyAxNTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c1RyYWNlUmVmY250LmgiCnN0cnVjdCBuc1RyYWNlUmVmY250U3RhdHMgewogIG5zcmVmY250IG1B ZGRSZWZzOwogIG5zcmVmY250IG1SZWxlYXNlczsKICBuc3JlZmNudCBtQ3JlYXRlczsKICBuc3Jl ZmNudCBtRGVzdHJveXM7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdUb3RhbDsKICBkb3VibGUg bVJlZnNPdXRzdGFuZGluZ1NxdWFyZWQ7CiAgZG91YmxlIG1PYmpzT3V0c3RhbmRpbmdUb3RhbDsK ICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1NxdWFyZWQ7Cn07CiMgMTczICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIgp0eXBlZGVmIFBSQm9vbCAoICpuc1RyYWNl UmVmY250U3RhdEZ1bmMpCiAgKGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgUFJVaW50MzIgYUlu c3RhbmNlU2l6ZSwKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhQ3VycmVudFN0YXRzLAogICBuc1Ry YWNlUmVmY250U3RhdHMqIGFQcmV2U3RhdHMsCiAgIHZvaWQgKmFDbG9zdXJlKTsKCgoKCgpjbGFz cyBuc1RyYWNlUmVmY250IHsKcHVibGljOgogIHN0YXRpYyB2b2lkIFN0YXJ0dXAoKTsKCiAgc3Rh dGljIHZvaWQgU2h1dGRvd24oKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkUmVmKHZvaWQqIGFQdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRp YyB2b2lkIExvZ1JlbGVhc2Uodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIqIGFUeXBlTmFtZSk7CgogIHN0YXRpYyB2b2lkIExvZ05ld1hQQ09NKHZvaWQq IGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFUeXBl TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNl U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyB2 b2lkIExvZ0RlbGV0ZVhQQ09NKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nQWRkUmVmQ2FsbCh2b2lk KiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBh TmV3UmVmY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFM aW5lKTsKCiAgc3RhdGljIG5zcmVmY250IExvZ1JlbGVhc2VDYWxsKHZvaWQqIGFQdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBz dGF0aWMgdm9pZCBMb2dDdG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3Rh dGljIHZvaWQgTG9nRHRvcih2b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRp YyB2b2lkIExvZ0FkZENPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVjdCk7 CgogIHN0YXRpYyB2b2lkIExvZ1JlbGVhc2VDT01QdHIodm9pZCAqYUNPTVB0ciwgbnNJU3VwcG9y dHMgKmFPYmplY3QpOwoKICBlbnVtIFN0YXRpc3RpY3NUeXBlIHsKICAgIEFMTF9TVEFUUywKICAg IE5FV19TVEFUUwogIH07CgogIHN0YXRpYyBuc3Jlc3VsdCBEdW1wU3RhdGlzdGljcyhTdGF0aXN0 aWNzVHlwZSB0eXBlID0gQUxMX1NUQVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSogb3V0ID0gMCk7CgogIHN0YXRpYyB2b2lkIFJlc2V0U3RhdGlzdGljcyh2 b2lkKTsKCiAgc3RhdGljIHZvaWQgR2F0aGVyU3RhdGlzdGljcyhuc1RyYWNlUmVmY250U3RhdEZ1 bmMgYUZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNs b3N1cmUpOwoKICBzdGF0aWMgdm9pZCBMb2FkTGlicmFyeVN5bWJvbHMoY29uc3QgY2hhciogYUxp YnJhcnlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog YUxpYnJheUhhbmRsZSk7CgogIHN0YXRpYyB2b2lkIERlbWFuZ2xlU3ltYm9sKGNvbnN0IGNoYXIg KiBhU3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYUJ1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFCdWZMZW4pOwoK ICBzdGF0aWMgdm9pZCBXYWxrVGhlU3RhY2soRklMRSogYVN0cmVhbSk7CgogIHN0YXRpYyB2b2lk IFNldFByZWZTZXJ2aWNlQXZhaWxhYmlsaXR5KFBSQm9vbCBhdmFpbCk7CgoKCgoKCiAgc3RhdGlj IHZvaWQgU2V0QWN0aXZpdHlJc0xlZ2FsKFBSQm9vbCBhTGVnYWwpOwp9OwoKCgoKZXh0ZXJuICJD IiB2b2lkCk5TX01lYW5BbmRTdGREZXYoZG91YmxlIG4sIGRvdWJsZSBzdW1PZlZhbHVlcywgZG91 YmxlIHN1bU9mU3F1YXJlZFZhbHVlcywKICAgICAgICAgICAgICAgICBkb3VibGUgKm1lYW5SZXN1 bHQsIGRvdWJsZSAqc3RkRGV2UmVzdWx0KTsKIyA2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSVN1cHBvcnRzSW1wbC5oIiAyCiMgOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lTdXBwb3J0c0ltcGwuaCIKY2xhc3MgbnNBdXRvUmVmQ250IHsKCiBwdWJsaWM6CiAgICBu c0F1dG9SZWZDbnQoKSA6IG1WYWx1ZSgwKSB7fQogICAgbnNBdXRvUmVmQ250KG5zcmVmY250IGFW YWx1ZSkgOiBtVmFsdWUoYVZhbHVlKSB7fQoKCiAgICBuc3JlZmNudCBvcGVyYXRvcisrKCkgeyBy ZXR1cm4gKyttVmFsdWU7IH0KICAgIG5zcmVmY250IG9wZXJhdG9yLS0oKSB7IHJldHVybiAtLW1W YWx1ZTsgfQoKICAgIG5zcmVmY250IG9wZXJhdG9yPShuc3JlZmNudCBhVmFsdWUpIHsgcmV0dXJu IChtVmFsdWUgPSBhVmFsdWUpOyB9CiAgICBvcGVyYXRvciBuc3JlZmNudCgpIGNvbnN0IHsgcmV0 dXJuIG1WYWx1ZTsgfQogICAgbnNyZWZjbnQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9 CiBwcml2YXRlOgoKICAgIG5zcmVmY250IG9wZXJhdG9yKysoaW50KTsKICAgIG5zcmVmY250IG9w ZXJhdG9yLS0oaW50KTsKICAgIG5zcmVmY250IG1WYWx1ZTsKfTsKIyA4MjkgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0ltcGwuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ2xhc3NJbmZvLmgiIDEKIyA4MzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS9uc0lTdXBwb3J0c0ltcGwuaCIgMgojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgp0ZW1wbGF0ZSA8Y2xh c3MgVD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZiggVCBleHByICkKCgoKICB7CiAgICBy ZXR1cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9Cgp9CiMgMjM0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgpj bGFzcyBuc0lTdXBwb3J0czsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNDT01UeXBlSW5m bwogIHsKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyByZXR1cm4gVDo6R2V0SUlE KCk7IH0KICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+ CiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7CiAgICAgICAgc3RhdGljIGNv bnN0IG5zSUlEIGlpZF9OU19JU1VQUE9SVFNfSUlEID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4 MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07 IHJldHVybiBpaWRfTlNfSVNVUFBPUlRTX0lJRDsKICAgIH0KICB9OwoKCgoKdGVtcGxhdGUgPGNs YXNzIFQsIGNsYXNzIERlc3RpbmF0aW9uVHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxRdWVyeUlu dGVyZmFjZSggVCogYVNvdXJjZSwgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKICB7 CiAgICA7CiAgICA7CgogICAgcmV0dXJuIGFTb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKG5zQ09NVHlw ZUluZm88RGVzdGluYXRpb25UeXBlPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7CiAg fQoKfQojIDExOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDIK IyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNsYXNzSW5mby5oIiAyCgoKCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIg MQojIDMyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUHJvZ3JhbW1pbmdMYW5ndWFn ZS5oIgpjbGFzcyBuc0lQcm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGVhNjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAw LCAweDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51 bSB7IFVOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7 IEpBVkFTQ1JJUFQgPSAyVSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBF UkwgPSA0VSB9OwoKICBlbnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0g NlUgfTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lDbGFzc0luZm8uaCIgMgojIDMzICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ2xhc3NJbmZvLmgiCmNsYXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5ODZjMTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5 MCwgMHg3NSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlp ZDt9CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDbGFzc0luZm8uaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZXMoUFJVaW50MzIgKmNvdW50LCBuc0lJRCAqICoq YXJyYXkpID0gMDsKIyA2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNsYXNzSW5m by5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFu Z3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFDb250cmFjdElEKSA9IDA7CgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENsYXNzRGVzY3JpcHRpb24oY2hhciAqICphQ2xhc3NEZXNjcmlwdGlvbikg PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NJRChuc0NJRCAqICphQ2xhc3NJ RCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbkxhbmd1YWdl KFBSVWludDMyICphSW1wbGVtZW50YXRpb25MYW5ndWFnZSkgPSAwOwoKCgoKICBlbnVtIHsgU0lO R0xFVE9OID0gMVUgfTsKCiAgZW51bSB7IFRIUkVBRFNBRkUgPSAyVSB9OwoKICBlbnVtIHsgTUFJ Tl9USFJFQURfT05MWSA9IDRVIH07CgogIGVudW0geyBET01fT0JKRUNUID0gOFUgfTsKCiAgZW51 bSB7IFBMVUdJTl9PQkpFQ1QgPSAxNlUgfTsKCiAgZW51bSB7IEVBR0VSX0NMQVNTSU5GTyA9IDMy VSB9OwoKCgoKCiAgZW51bSB7IENPTlRFTlRfTk9ERSA9IDY0VSB9OwoKICBlbnVtIHsgUkVTRVJW RUQgPSAyMTQ3NDgzNjQ4VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQz MiAqYUZsYWdzKSA9IDA7CiMgMTI0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ2xh c3NJbmZvLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCAqYUNs YXNzSUROb0FsbG9jKSA9IDA7Cgp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUNsYXNzSW5mby5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVm9p ZEFycmF5LmgiIDEKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVm9pZEFycmF5 LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIgMQojIDI4 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmdGd2QuaCIgMQojIDMwICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nRndkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc1N0cmluZ0RlZmluZXMuaCIgMQojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zU3RyaW5nRndkLmgiIDIKCgoKCgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNB Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNBRmxhdFN0cmluZzsKY2xhc3MgbnNBRmxhdENTdHJpbmc7 CgoKCgoKCmNsYXNzIG5zRGVwZW5kZW50U3RyaW5nOwpjbGFzcyBuc0RlcGVuZGVudENTdHJpbmc7 CiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiIDIKCgoKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQnVmZmVySGFuZGxlLmgiIDEKIyA4OSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0J1ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8 Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICB0 eXBlZGVmIFBSVWludDMyIHNpemVfdHlwZTsKCiAgICAgIG5zQnVmZmVySGFuZGxlKCkgeyB9CiAg ICAgIG5zQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kICkg OiBtRGF0YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9CgogICAgICB2 b2lkIERhdGFTdGFydCggQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3RhcnQgPSBhTmV3 RGF0YVN0YXJ0OyB9CiAgICAgIENoYXJUKiBEYXRhU3RhcnQoKSB7IHJldHVybiBtRGF0YVN0YXJ0 OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVybiBtRGF0YVN0 YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIENoYXJUKiBhTmV3RGF0YUVuZCApIHsgbURhdGFF bmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBDaGFyVCogRGF0YUVuZCgpIHsgcmV0dXJuIG1EYXRh RW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1cm4gbURhdGFF bmQ7IH0KCiAgICAgIHNpemVfdHlwZSBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbURhdGFF bmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCogbURhdGFTdGFy dDsKICAgICAgQ2hhclQqIG1EYXRhRW5kOwogIH07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJU PgpjbGFzcyBuc0NvbnN0QnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm IFBSVWludDMyIHNpemVfdHlwZTsKCiAgICAgIG5zQ29uc3RCdWZmZXJIYW5kbGUoKSB7IH0KICAg ICAgbnNDb25zdEJ1ZmZlckhhbmRsZSggY29uc3QgQ2hhclQqIGFEYXRhU3RhcnQsIGNvbnN0IENo YXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFydChhRGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFF bmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3RhcnQoIGNvbnN0IENoYXJUKiBhTmV3RGF0YVN0YXJ0 ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFydDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0 YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFTdGFydDsgfQoKICAgICAgdm9pZCBEYXRhRW5k KCBjb25zdCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7IG1EYXRhRW5kID0gYU5ld0RhdGFFbmQ7IH0K ICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBjb25zdCB7IHJldHVybiBtRGF0YUVuZDsgfQoK ICAgICAgc2l6ZV90eXBlIERhdGFMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtRGF0YUVuZCAtIG1E YXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IENoYXJUKiBtRGF0YVN0YXJ0 OwogICAgICBjb25zdCBDaGFyVCogbURhdGFFbmQ7CiAgfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFz cyBDaGFyVD4KY2xhc3MgbnNTdHJpbmdBbGxvY2F0b3IKICB7CiAgICBwdWJsaWM6CgogICAgICB2 aXJ0dWFsIHZvaWQgRGVhbGxvY2F0ZSggQ2hhclQqICkgY29uc3QgPSAwOwogIH07CgoKCgogbnNT dHJpbmdBbGxvY2F0b3I8Y2hhcj4mIFN0cmluZ0FsbG9jYXRvcl9jaGFyKCk7CiBuc1N0cmluZ0Fs bG9jYXRvcjxQUlVuaWNoYXI+JiBTdHJpbmdBbGxvY2F0b3Jfd2NoYXJfdCgpOwoKCgoKCnRlbXBs YXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHMKICB7CiAgfTsKCnRl bXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxjaGFyPgogIHsKICAgIHN0 YXRpYyBuc1N0cmluZ0FsbG9jYXRvcjxjaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7 IHJldHVybiBTdHJpbmdBbGxvY2F0b3JfY2hhcigpOyB9CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVj dCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxQUlVuaWNoYXI+CiAgewogICAgc3RhdGljIG5zU3Ry aW5nQWxsb2NhdG9yPFBSVW5pY2hhcj4mIGdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1 cm4gU3RyaW5nQWxsb2NhdG9yX3djaGFyX3QoKTsgfQogIH07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg Q2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlCiAgICA6IHB1YmxpYyBuc0J1ZmZlckhh bmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90 eXBlOwoKICAgICAgZW51bQogICAgICAgIHsKICAgICAgICAgIGtJc0ltbXV0YWJsZSA9IDB4MDEw MDAwMDAsCiAgICAgICAgICBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlciA9IDB4MDIwMDAw MDAsCiAgICAgICAgICBrSXNVc2VyQWxsb2NhdG9yID0gMHgwNDAwMDAwMCwKCgogICAgICAgICAg a0lzTlVMTCA9IDB4ODAwMDAwMDAsCiAgICAgICAgICBrSW1wbGVtZW50YXRpb25GbGFnc01hc2sg PSAweEYwMDAwMDAwLAoKICAgICAgICAgIGtGbGFnc01hc2sgPSAweEZGMDAwMDAwLAogICAgICAg ICAga1JlZkNvdW50TWFzayA9IDB4MDBGRkZGRkYKICAgICAgICB9OwoKICAgIHB1YmxpYzoKICAg ICAgbnNTaGFyZWRCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFF bmQsIHNpemVfdHlwZSBhU3RvcmFnZUxlbmd0aCwgUFJCb29sIGlzU2luZ2xlQWxsb2NhdGlvbiAp CiAgICAgICAgICA6IG5zQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCks CiAgICAgICAgICAgIG1GbGFncygwKSwKICAgICAgICAgICAgbVN0b3JhZ2VMZW5ndGgoYVN0b3Jh Z2VMZW5ndGgpCiAgICAgICAgewogICAgICAgICAgaWYgKCBpc1NpbmdsZUFsbG9jYXRpb24gKQog ICAgICAgICAgICBtRmxhZ3MgfD0ga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXI7CiAgICAg ICAgfQoKICAgICAgfm5zU2hhcmVkQnVmZmVySGFuZGxlKCk7CgogICAgICB2b2lkCiAgICAgIEFj cXVpcmVSZWZlcmVuY2UoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVy SGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlzID0gY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJI YW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAgICAgICAgbXV0YWJsZV90aGlzLT5zZXRfcmVmY291 bnQoIGdldF9yZWZjb3VudCgpKzEgKTsKICAgICAgICB9CgogICAgICB2b2lkIFJlbGVhc2VSZWZl cmVuY2UoKSBjb25zdDsKCiAgICAgIFBSQm9vbAogICAgICBJc1JlZmVyZW5jZWQoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXRfcmVmY291bnQoKSAhPSAwOwogICAgICAgIH0K CiAgICAgIFBSQm9vbAogICAgICBJc011dGFibGUoKSBjb25zdAogICAgICAgIHsKCiAgICAgICAg ICByZXR1cm4gKG1GbGFncyAmIChrUmVmQ291bnRNYXNrIHwga0lzSW1tdXRhYmxlKSA9PSAxKTsK ICAgICAgICB9CgogICAgICB2b2lkIFN0b3JhZ2VMZW5ndGgoIHNpemVfdHlwZSBhTmV3U3RvcmFn ZUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgbVN0b3JhZ2VMZW5ndGggPSBhTmV3U3RvcmFn ZUxlbmd0aDsKICAgICAgICB9CgogICAgICBzaXplX3R5cGUKICAgICAgU3RvcmFnZUxlbmd0aCgp IGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1TdG9yYWdlTGVuZ3RoOwogICAgICAg IH0KCiAgICAgIFBSVWludDMyCiAgICAgIEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRmxhZ3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01h c2s7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBTZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCBQ UlVpbnQzMiBhTmV3RmxhZ3MgKQogICAgICAgIHsKICAgICAgICAgIG1GbGFncyA9IChtRmxhZ3Mg JiB+a0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNrKSB8IChhTmV3RmxhZ3MgJiBrSW1wbGVtZW50YXRp b25GbGFnc01hc2spOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIFBSVWludDMyIG1G bGFnczsKICAgICAgc2l6ZV90eXBlIG1TdG9yYWdlTGVuZ3RoOwoKICAgICAgUFJVaW50MzIKICAg ICAgZ2V0X3JlZmNvdW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZsYWdz ICYga1JlZkNvdW50TWFzazsKICAgICAgICB9CgogICAgICBQUlVpbnQzMgogICAgICBzZXRfcmVm Y291bnQoIFBSVWludDMyIGFOZXdSZWZDb3VudCApCiAgICAgICAgewogICAgICAgICAgOwoKICAg ICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiBrRmxhZ3NNYXNrKSB8IGFOZXdSZWZDb3VudDsKICAg ICAgICAgIHJldHVybiBhTmV3UmVmQ291bnQ7CiAgICAgICAgfQoKICAgICAgbnNTdHJpbmdBbGxv Y2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3Q7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgQ2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcgogICAgOiBw dWJsaWMgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdp dGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsIHNpemVfdHlw ZSBhU3RvcmFnZUxlbmd0aCwgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBhQWxsb2NhdG9yICkK ICAgICAgICAgIDogbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVN0b3JhZ2VMZW5n dGgsIDApLAogICAgICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAg ICAgICAgdGhpcy0+bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoK ICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy ZXR1cm4gbUFsbG9jYXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0 b3I8Q2hhclQ+JiBtQWxsb2NhdG9yOwogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xh c3MgbnNTaGFyZWRCdWZmZXJIYW5kbGVXaXRoRGVzdHJveQogICAgOiBwdWJsaWMgbnNTaGFyZWRC dWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBQUlVpbnQz MiBzaXplX3R5cGU7CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhEZXN0cm95KCBDaGFy VCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBzaXplX3R5cGUgYVN0b3JhZ2VMZW5ndGgp CiAgICAgICAgICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0 YUVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFTdG9yYWdlTGVu Z3RoLCAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PQogICAgICAgICAgICAg IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3IgfCB0aGlzLT5rSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1 ZmZlcjsKICAgICAgICB9CgogICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveSgpID0gMDsKCgoKCiAg ICAgIHZpcnR1YWwgfm5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3koKSB7IH0KCgogIH07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zTm9uRGVzdHJ1Y3RpbmdTaGFyZWRCdWZm ZXJIYW5kbGUKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hh clQ+CiAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7Cgog ICAgICBuc05vbkRlc3RydWN0aW5nU2hhcmVkQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFy dCwgQ2hhclQqIGFEYXRhRW5kLCBzaXplX3R5cGUgYVN0b3JhZ2VMZW5ndGgpCiAgICAgICAgICA6 IG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh U3RvcmFnZUxlbmd0aCkKICAgICAgICB7CiAgICAgICAgfQoKICAgICAgdmlydHVhbCB2b2lkIERl c3Ryb3koKQogICAgICAgIHsKCgogICAgICAgICAgdGhpcy0+c2V0X3JlZmNvdW50KDEpOwogICAg ICAgIH0KCiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU3RyaW5nQWxsb2NhdG9yPENo YXJUPiYKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpnZXRfYWxsb2NhdG9yKCkgY29uc3QK CiAgewogICAgaWYgKCBtRmxhZ3MgJiBrSXNVc2VyQWxsb2NhdG9yICkKICAgICAgewogICAgICAg IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhB bGxvY2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgIH0KCiAgICBy ZXR1cm4gbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8Q2hhclQ+OjpnbG9iYWxfc3RyaW5nX2FsbG9j YXRvcigpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU2hhcmVkQnVmZmVySGFuZGxl PENoYXJUPjo6fm5zU2hhcmVkQnVmZmVySGFuZGxlKCkKCiAgewogICAgOwoKICAgIGlmICggISht RmxhZ3MgJiBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQogICAgICB7CiAgICAgICAg Q2hhclQqIHN0cmluZ19zdG9yYWdlID0gdGhpcy0+bURhdGFTdGFydDsKICAgICAgICBnZXRfYWxs b2NhdG9yKCkuRGVhbGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAgICAgIH0KICB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQ2hhclQ+CnZvaWQKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpSZWxlYXNl UmVmZXJlbmNlKCkgY29uc3QKICB7CiAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG11 dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPih0 aGlzKTsKICAgIGlmICggIW11dGFibGVfdGhpcy0+c2V0X3JlZmNvdW50KCBnZXRfcmVmY291bnQo KS0xICkgKQogICAgICB7CiAgICAgICAgaWYgKCB+bUZsYWdzICYgKGtJc1VzZXJBbGxvY2F0b3J8 a0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIpICkKICAgICAgICAgIGRlbGV0ZSBtdXRhYmxl X3RoaXM7CiAgICAgICAgZWxzZQoKCgogICAgICAgICAgc3RhdGljX2Nhc3Q8IG5zU2hhcmVkQnVm ZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hhclQ+KiA+KG11dGFibGVfdGhpcyktPkRlc3Ryb3koKTsK CiAgICAgIH0KICB9CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5n LmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5o IiAxCiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCiMg MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MwpleHRlcm4gIkMiIHsKIyA0OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZW51bQp7CiAgX0lT dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0 KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8 IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9 ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgODEgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqKl9fY3R5cGVfYl9sb2MgKHZv aWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQz Ml90ICoqX19jdHlwZV90b2xvd2VyX2xvYyAodm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j b25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipfX2N0eXBlX3RvdXBwZXJfbG9jICh2 b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CiMgOTYgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAzCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xv d2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQp IHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg aXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgaXNibGFuayAo aW50KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2N0eXBlIChpbnQgX19jLCBpbnQgX19t YXNrKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJv dyAoKTsKIyAyNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bV9s IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGFfbCAoaW50LCBf X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsX2wgKGludCwgX19sb2NhbGVf dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93 ICgpOwpleHRlcm4gaW50IGlzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBpc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg aXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3Rf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlX2wgKGludCwg X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlcl9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy b3cgKCk7CgpleHRlcm4gaW50IGlzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93 ICgpOwpleHRlcm4gaW50IHRvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCB0b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0 aHJvdyAoKTsKIyAzMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyA0NyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3N0cmluZy9uc0NoYXJUcmFpdHMuaCIgMgojIDcwICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvclV0aWxzLmgiIDEKIyAzMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0ZXJhdG9yVXRpbHMuaCIKdGVtcGxhdGUgPGNsYXNzIEl0 ZXJhdG9yPgppbmxpbmUKUFJCb29sClNhbWVGcmFnbWVudCggY29uc3QgSXRlcmF0b3ImIGxocywg Y29uc3QgSXRlcmF0b3ImIHJocyApCiAgewogICAgcmV0dXJuIGxocy5mcmFnbWVudCgpLm1TdGFy dCA9PSByaHMuZnJhZ21lbnQoKS5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPiBj bGFzcyBuc1JlYWRpbmdJdGVyYXRvcjsKCgoKCiBzaXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVh ZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mLCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQUlVuaWNo YXI+JiApOwogc2l6ZV90IERpc3RhbmNlKCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyPiYs IGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiApOwojIDcxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5oIiAyCgoKCgoKICB0eXBlZGVmIFBSQm9vbCBuc0No YXJUcmFpdHNfYm9vbDsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IHN0cnVjdCBuc0NoYXJUcmFp dHMge307Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDaGFyVHJhaXRzPFBSVW5pY2hhcj4KICB7CiAg ICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIFBSVWludDE2IHVuc2ln bmVkX2NoYXJfdHlwZTsKICAgIHR5cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoK ICAgIHN0YXRpYwogICAgdm9pZAogICAgYXNzaWduKCBjaGFyX3R5cGUmIGxocywgY2hhcl90eXBl IHJocyApCiAgICAgIHsKICAgICAgICBsaHMgPSByaHM7CiAgICAgIH0KCgoKCgoKCiAgICB0eXBl ZGVmIGludCBpbnRfdHlwZTsKCgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUKICAgIHRvX2NoYXJf dHlwZSggaW50X3R5cGUgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcl90eXBlKGMpOwog ICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50X3R5cGUoIGNoYXJfdHlw ZSBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRfdHlwZSggc3RhdGljX2Nhc3Q8IHVuc2ln bmVkX2NoYXJfdHlwZSA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0 c19ib29sCiAgICBlcV9pbnRfdHlwZSggaW50X3R5cGUgbGhzLCBpbnRfdHlwZSByaHMgKQogICAg ICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAg IG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY2hhcl90eXBlIGxocywgY2hhcl90eXBlIHJocyAp CiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKICAgIHN0YXRpYwog ICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyX3R5cGUgbGhzLCBjaGFyX3R5cGUgcmhz ICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0 aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw ZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY2hh cl90eXBlKiA+KG1lbW1vdmUoczEsIHMyLCBuICogc2l6ZW9mKGNoYXJfdHlwZSkpKTsKICAgICAg fQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSggY2hhcl90eXBlKiBzMSwgY29u c3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRp Y19jYXN0PCBjaGFyX3R5cGUqID4obWVtY3B5KHMxLCBzMiwgbiAqIHNpemVvZihjaGFyX3R5cGUp KSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIGFzc2lnbiggY2hhcl90 eXBlKiBzLCBzaXplX3QgbiwgY2hhcl90eXBlIGMgKQogICAgICB7CgoKCiAgICAgICAgY2hhcl90 eXBlKiByZXN1bHQgPSBzOwogICAgICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIGFzc2lnbigq cysrLCBjKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwoKICAgICAgfQoKICAgIHN0YXRpYwogICAg aW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy LCBzaXplX3QgbiApCiAgICAgIHsKCgoKICAgICAgICBmb3IgKCA7IG4tLTsgKytzMSwgKytzMiAp CiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMxLCAqczIpICkKICAgICAgICAgICAg ICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMyLCAqczEpICkKICAgICAgICAgICAg ICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDA7CgogICAgICB9CgogICAg c3RhdGljCiAgICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkKICAgICAg ewoKCgogICAgICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgICAgIHdoaWxlICggIWVxKCpzKyss IGNoYXJfdHlwZSgwKSkgKQogICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgcmV0dXJuIHJlc3Vs dDsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgIGZpbmQoIGNv bnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNoYXJfdHlwZSBjICkKICAgICAgewoKCgogICAg ICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCBlcSgqcywgYykg KQogICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICArK3M7CiAgICAgICAgICB9Cgog ICAgICAgIHJldHVybiAwOwoKICAgICAgfQojIDI1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0 cmluZy9uc0NoYXJUcmFpdHMuaCIKICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ2hhclRyYWl0 czxjaGFyPgogIHsKICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIHVuc2ln bmVkIGNoYXIgdW5zaWduZWRfY2hhcl90eXBlOwogICAgdHlwZWRlZiBQUlVuaWNoYXIgaW5jb21w YXRpYmxlX2NoYXJfdHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90 eXBlJiBsaHMsIGNoYXJfdHlwZSByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0gcmhzOwogICAg ICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAgICBjaGFyX3R5 cGUKICAgIHRvX2NoYXJfdHlwZSggaW50X3R5cGUgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4g Y2hhcl90eXBlKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50 X3R5cGUoIGNoYXJfdHlwZSBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRfdHlwZSggc3Rh dGljX2Nhc3Q8IHVuc2lnbmVkX2NoYXJfdHlwZSA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMK ICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcV9pbnRfdHlwZSggaW50X3R5cGUgbGhzLCBpbnRf dHlwZSByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoK CiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY2hhcl90eXBlIGxocywg Y2hhcl90eXBlIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAg fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyX3R5cGUgbGhz LCBjaGFyX3R5cGUgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAg IH0KCgoKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEs IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBz dGF0aWNfY2FzdDwgY2hhcl90eXBlKiA+KG1lbW1vdmUoczEsIHMyLCBuICogc2l6ZW9mKGNoYXJf dHlwZSkpKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSggY2hh cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAg ICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyX3R5cGUqID4obWVtY3B5KHMxLCBzMiwgbiAqIHNp emVvZihjaGFyX3R5cGUpKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAg IGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY2hhcl90eXBlIGMgKQogICAgICB7CiAg ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyX3R5cGUqID4obWVtc2V0KHMsIHRvX2ludF90 eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAogICAgY29tcGFyZSggY29u c3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7 CiAgICAgICAgcmV0dXJuIG1lbWNtcChzMSwgczIsIG4pOwogICAgICB9CgogICAgc3RhdGljCiAg ICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkKICAgICAgewogICAgICAg IHJldHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlw ZSoKICAgIGZpbmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNoYXJfdHlwZSBjICkK ICAgICAgewogICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyX3R5cGUq ID4obWVtY2hyKHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KIyAzNzggIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCiAgfTsKCnRlbXBsYXRlIDxjbGFz cyBJbnB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU291cmNlVHJhaXRzCiAgewogICAgdHlwZWRl ZiB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBl OwojIDM5NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0NoYXJUcmFpdHMuaCIKICAg IHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0 ZXJhdG9yJiBpdGVyICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLnNpemVfZm9yd2FyZCgp OwogICAgICB9CgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2Uo IGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0ICkK ICAgICAgewogICAgICAgIHJldHVybiBQUlVpbnQzMihTYW1lRnJhZ21lbnQoZmlyc3QsIGxhc3Qp ID8gbGFzdC5nZXQoKS1maXJzdC5nZXQoKSA6IGZpcnN0LnNpemVfZm9yd2FyZCgpKTsKICAgICAg fQoKICAgIHN0YXRpYwogICAgY29uc3QgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjo6dmFsdWVfdHlw ZSoKICAgIHJlYWQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGl0ZXIgKQogICAgICB7CiAgICAgICAg cmV0dXJuIGl0ZXIuZ2V0KCk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFu Y2UoIElucHV0SXRlcmF0b3ImIHMsIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgewogICAgICAg IHMuYWR2YW5jZShuKTsKICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3Ry dWN0IG5zQ2hhclNvdXJjZVRyYWl0czxDaGFyVCo+CiAgewogICAgdHlwZWRlZiBwdHJkaWZmX3Qg ZGlmZmVyZW5jZV90eXBlOwojIDQzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0No YXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNl KCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobnNDaGFyVHJhaXRz PENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAg ICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFyVCogbGFzdCApCiAgICAgIHsK ICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAgICAgIH0KCiAgICBzdGF0aWMK ICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQogICAgICB7CiAgICAgICAgcmV0 dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFuY2UoIENoYXJUKiYg cywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcyArPSBuOwogICAgICB9CiAg fTsKIyA1NjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCnRl bXBsYXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvcj4Kc3RydWN0IG5zQ2hhclNpbmtUcmFpdHMKICB7 CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggT3V0cHV0SXRlcmF0b3ImIGl0ZXIs IGNvbnN0IHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlKiBzLCBQUlVpbnQzMiBu ICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLndyaXRlKHMsIG4pOwogICAgICB9CiAgfTsK CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyU2lua1RyYWl0czxDaGFyVCo+ CiAgewogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgd3JpdGUoIENoYXJUKiYgaXRlciwgY29u c3QgQ2hhclQqIHMsIFBSVWludDMyIG4gKQogICAgICB7CiAgICAgICAgbnNDaGFyVHJhaXRzPENo YXJUPjo6bW92ZShpdGVyLCBzLCBuKTsKICAgICAgICBpdGVyICs9IG47CiAgICAgICAgcmV0dXJu IG47CiAgICAgIH0KICB9OwojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0 cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0 ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0 ZXJhdG9yLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdt ZW50LmgiIDEKIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdt ZW50LmgiCmVudW0gbnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFn bWVudCwga0xhc3RGcmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1NyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdtZW50LmgiCnRlbXBsYXRl IDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zUmVhZGFibGVGcmFnbWVudAogIHsKICAgIGNvbnN0IENo YXJUKiBtU3RhcnQ7CiAgICBjb25zdCBDaGFyVCogbUVuZDsKICAgIGNvbnN0IHZvaWQqIG1GcmFn bWVudElkZW50aWZpZXI7CgogICAgbnNSZWFkYWJsZUZyYWdtZW50KCkKICAgICAgICA6IG1TdGFy dCgwKSwgbUVuZCgwKSwgbUZyYWdtZW50SWRlbnRpZmllcigwKQogICAgICB7CgogICAgICB9Cgog ICAgY29uc3Qgdm9pZCoKICAgIEdldElEKCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiBt RnJhZ21lbnRJZGVudGlmaWVyOwogICAgICB9CgogICAgdW5zaWduZWQgbG9uZwogICAgR2V0SURB c0ludCgpIGNvbnN0CiAgICAgIHsKICAgICAgICB0eXBlZGVmIGNoYXIqIGNoYXJfcHRyOwogICAg ICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKICAgICAgICByZXR1cm4gdWxvbmcoY2hh cl9wdHIobUZyYWdtZW50SWRlbnRpZmllciktY2hhcl9wdHIoMCkpOwogICAgICB9CgogICAgdm9p ZAogICAgU2V0SUQoIGNvbnN0IHZvaWQqIGFJRCApCiAgICAgIHsKICAgICAgICBtRnJhZ21lbnRJ ZGVudGlmaWVyID0gYUlEOwogICAgICB9CgogICAgdm9pZAogICAgU2V0SUQoIHVuc2lnbmVkIGxv bmcgYUlEICkKICAgICAgewogICAgICAgIHR5cGVkZWYgY2hhciogY2hhcl9wdHI7CiAgICAgICAg dHlwZWRlZiB2b2lkKiB2b2lkX3B0cjsKICAgICAgICBtRnJhZ21lbnRJZGVudGlmaWVyID0gdm9p ZF9wdHIoY2hhcl9wdHIoMCkrYUlEKTsKICAgICAgfQogIH07CiMgMTEzICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJU PgpzdHJ1Y3QgbnNXcml0YWJsZUZyYWdtZW50CiAgewogICAgQ2hhclQqIG1TdGFydDsKICAgIENo YXJUKiBtRW5kOwogICAgdm9pZCogbUZyYWdtZW50SWRlbnRpZmllcjsKCiAgICBuc1dyaXRhYmxl RnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5kKDApLCBtRnJhZ21lbnRJZGVudGlm aWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3N0cmluZy9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVj dCBuc1N0cmluZ1RyYWl0cwogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIGFic3RyYWN0X3N0cmlu Z190eXBlOwogICAgdHlwZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAg IHR5cGVkZWYgY29uc3QgbnNEZXBlbmRlbnRTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9 OwojIDY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nVHJhaXRzLmgiCnRl bXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ1RyYWl0czxjaGFyPgogIHsKICAgIHR5cGVkZWYgbnNB Q1N0cmluZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYgbnNBRmxhdENTdHJpbmcg YWJzdHJhY3RfZmxhdF90eXBlOwogICAgdHlwZWRlZiBjb25zdCBuc0RlcGVuZGVudENTdHJpbmcg bGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9OwojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNBbGdvcml0aG0uaCIgMQojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zQWxnb3JpdGhtLmgiCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgVCYKTlNfTUlO KCBjb25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAgICByZXR1cm4gYiA8IGEgPyBiIDogYTsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IFQmCk5TX01BWCggY29uc3QgVCYg YSwgY29uc3QgVCYgYiApCiAgewogICAgcmV0dXJuIGEgPiBiID8gYSA6IGI7CiAgfQoKdGVtcGxh dGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQ+CmlubGluZQpQUlVpbnQzMgpOU19DT1VO VCggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0b3ImIGxhc3QsIGNvbnN0 IFQmIHZhbHVlICkKICB7CiAgICBQUlVpbnQzMiByZXN1bHQgPSAwOwogICAgZm9yICggOyBmaXJz dCAhPSBsYXN0OyArK2ZpcnN0ICkKICAgICAgaWYgKCAqZmlyc3QgPT0gdmFsdWUgKQogICAgICAg ICsrcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJ dGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZQpPdXRwdXRJdGVyYXRvciYKY29w eV9zdHJpbmcoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0 LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB0eXBlZGVmIG5zQ2hhclNvdXJjZVRy YWl0czxJbnB1dEl0ZXJhdG9yPiBzb3VyY2VfdHJhaXRzOwogICAgdHlwZWRlZiBuc0NoYXJTaW5r VHJhaXRzPE91dHB1dEl0ZXJhdG9yPiBzaW5rX3RyYWl0czsKCiAgICB3aGlsZSAoIGZpcnN0ICE9 IGxhc3QgKQogICAgICB7CiAgICAgICAgUFJJbnQzMiBjb3VudF9jb3BpZWQgPSBQUkludDMyKHNp bmtfdHJhaXRzOjp3cml0ZShyZXN1bHQsIHNvdXJjZV90cmFpdHM6OnJlYWQoZmlyc3QpLCBzb3Vy Y2VfdHJhaXRzOjpyZWFkYWJsZV9kaXN0YW5jZShmaXJzdCwgbGFzdCkpKTsKICAgICAgICA7CiAg ICAgICAgc291cmNlX3RyYWl0czo6YWR2YW5jZShmaXJzdCwgY291bnRfY29waWVkKTsKICAgICAg fQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3Is IGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJdGVyYXRvciYKY29weV9zdHJpbmdfYmFja3dh cmQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBJbnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRw dXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB3aGlsZSAoIGZpcnN0ICE9IGxhc3QgKQogICAg ICB7CiAgICAgICAgbGFzdC5ub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICByZXN1bHQubm9y bWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgUFJVaW50MzIgbGVuZ3RoVG9Db3B5ID0gUFJVaW50 MzIoIE5TX01JTihsYXN0LnNpemVfYmFja3dhcmQoKSwgcmVzdWx0LnNpemVfYmFja3dhcmQoKSkg KTsKICAgICAgICBpZiAoIGZpcnN0LmZyYWdtZW50KCkubVN0YXJ0ID09IGxhc3QuZnJhZ21lbnQo KS5tU3RhcnQgKQogICAgICAgICAgbGVuZ3RoVG9Db3B5ID0gTlNfTUlOKGxlbmd0aFRvQ29weSwg UFJVaW50MzIobGFzdC5nZXQoKSAtIGZpcnN0LmdldCgpKSk7CgogICAgICAgIDsKCgoKCgogICAg ICAgIG5zQ2hhclRyYWl0czx0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlwZT46Om1v dmUocmVzdWx0LmdldCgpLWxlbmd0aFRvQ29weSwgbGFzdC5nZXQoKS1sZW5ndGhUb0NvcHksIGxl bmd0aFRvQ29weSk7CgoKICAgICAgICBsYXN0LmFkdmFuY2UoIC1QUkludDMyKGxlbmd0aFRvQ29w eSkgKTsKICAgICAgICByZXN1bHQuYWR2YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwog ICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIiAyCiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNz IG5zUmVhZGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBwdHJkaWZm X3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJUIHZhbHVlX3R5cGU7CiAgICAg IHR5cGVkZWYgY29uc3QgQ2hhclQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgQ2hhclQm IHJlZmVyZW5jZTsKCgogICAgICB0eXBlZGVmIG5zUmVhZGFibGVGcmFnbWVudDxDaGFyVD4gY29u c3RfZnJhZ21lbnRfdHlwZTsKICAgICAgdHlwZWRlZiBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+ IGZyYWdtZW50X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIG5zQVN0cmlu ZzsKICAgICAgZnJpZW5kIGNsYXNzIG5zQUNTdHJpbmc7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg bnNTdHJpbmdUcmFpdHM8Q2hhclQ+OjphYnN0cmFjdF9zdHJpbmdfdHlwZSBhYnN0cmFjdF9zdHJp bmdfdHlwZTsKCiAgICAgIGNvbnN0X2ZyYWdtZW50X3R5cGUgbUZyYWdtZW50OwogICAgICBjb25z dCBDaGFyVCogbVBvc2l0aW9uOwogICAgICBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSogbU93 bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yKCkgeyB9CgoK CiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlubGluZSB2b2lk IG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgQ2hh clQKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKmdl dCgpOwogICAgICAgIH0KIyAxMDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJp bmdJdGVyYXRvci5oIgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9wZXJh dG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFs aXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBu c1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50ICkKICAgICAgICB7 CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0aGlzKTsKICAgICAg ICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAg IHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+ JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dh cmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvci0tKCBp bnQgKQogICAgICAgIHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQo KnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAtLW1Qb3Np dGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgY29u c3RfZnJhZ21lbnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgYWJzdHJhY3Rfc3Ry aW5nX3R5cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgOwogICAg ICAgICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2Vf dHlwZQogICAgICBzaXplX2ZvcndhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy biBtRnJhZ21lbnQubUVuZCAtIG1Qb3NpdGlvbjsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNl X3R5cGUKICAgICAgc2l6ZV9iYWNrd2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0 dXJuIG1Qb3NpdGlvbiAtIG1GcmFnbWVudC5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFk aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBhZHZhbmNlKCBkaWZmZXJlbmNlX3R5cGUgbiApCiAg ICAgICAgewogICAgICAgICAgd2hpbGUgKCBuID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01JTihuLCBzaXplX2ZvcndhcmQoKSk7 CgogICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwog ICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBvbmVf aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAgICAg ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7CiAgICAgICAg ICAgICAgbiAtPSBvbmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KICB9OwojIDIwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0 cmluZ0l0ZXJhdG9yLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNXcml0aW5nSXRl cmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBDaGFy VCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFyVCYgcmVmZXJlbmNlOwoKCiAgICAgIHR5cGVk ZWYgbnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiBjb25zdF9mcmFnbWVudF90eXBlOwogICAgICB0 eXBlZGVmIG5zV3JpdGFibGVGcmFnbWVudDxDaGFyVD4gZnJhZ21lbnRfdHlwZTsKCiAgICBwcml2 YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5nOwogICAgICBmcmllbmQgY2xhc3MgbnNB Q1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBuc1N0cmluZ1RyYWl0czxDaGFyVD46OmFi c3RyYWN0X3N0cmluZ190eXBlIGFic3RyYWN0X3N0cmluZ190eXBlOwoKICAgICAgZnJhZ21lbnRf dHlwZSBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBtUG9zaXRpb247CiAgICAgIGFic3RyYWN0X3N0 cmluZ190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgbnNXcml0aW5nSXRl cmF0b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAg ICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAgICBwb2ludGVyCiAgICAg IGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Qb3NpdGlvbjsKICAgICAg ICB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAg ICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNTkgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxD aGFyVD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9u OwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3Ir KyggaW50ICkKICAgICAgICB7CiAgICAgICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4gcmVz dWx0KCp0aGlzKTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2Zv cndhcmQoKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNXcml0 aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAg ICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgog ICAgICBvcGVyYXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJh dG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7 CiAgICAgICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg fQoKICAgICAgY29uc3QgZnJhZ21lbnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAg ICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgZnJhZ21l bnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJh Z21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmCiAgICAg IHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICpt T3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGFic3RyYWN0X3N0cmluZ190eXBlJgogICAg ICBzdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIHJldHVybiAqbU93bmlu Z1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5cGUKICAgICAgc2l6ZV9mb3J3 YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZyYWdtZW50Lm1FbmQgLSBt UG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfYmFj a3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb24gLSBtRnJh Z21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYK ICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICAgIHsKICAgICAgICAgIHdo aWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl IG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoKICAgICAgICAgICAgICA7CgoK ICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3JtYWxp emVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoK ICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbm9y bWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3Ag PSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIDsKCgogICAgICAg ICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsK ICAgICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBQ UlVpbnQzMgogICAgICB3cml0ZSggY29uc3QgdmFsdWVfdHlwZSogcywgUFJVaW50MzIgbiApCiAg ICAgICAgewogICAgICAgICAgOwoKICAgICAgICAgIG4gPSBOU19NSU4obiwgUFJVaW50MzIoc2l6 ZV9mb3J3YXJkKCkpKTsKICAgICAgICAgIG5zQ2hhclRyYWl0czx2YWx1ZV90eXBlPjo6bW92ZSht UG9zaXRpb24sIHMsIG4pOwogICAgICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlKG4pICk7 CiAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFy VD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2Fy ZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAg JiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJh Z21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubVN0YXJ0OwogIH0KCnRlbXBs YXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpu b3JtYWxpemVfYmFja3dhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVu dC5tU3RhcnQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudCht RnJhZ21lbnQsIGtQcmV2RnJhZ21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQu bUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9 PSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVhZGluZ0l0 ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQo KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSgg Y29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVhZGluZ0l0ZXJh dG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsK ICB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNXcml0aW5nSXRl cmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2FyZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRp b24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0V3JpdGFi bGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJhZ21lbnQpICkKICAgICAgbVBvc2l0aW9uID0g bUZyYWdtZW50Lm1TdGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lk Cm5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3 aGlsZSAoIG1Qb3NpdGlvbiA9PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdT dHJpbmctPkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAg ICAgIG1Qb3NpdGlvbiA9IG1GcmFnbWVudC5tRW5kOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFy VD4KaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRvcjxDaGFy VD4mIGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsKICAgIHJl dHVybiBsaHMuZ2V0KCkgPT0gcmhzLmdldCgpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K aW5saW5lClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4m IGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsKICAgIHJldHVy biBsaHMuZ2V0KCkgIT0gcmhzLmdldCgpOwogIH0KIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc0FTdHJpbmcuaCIgMgoKCgoKCgpjbGFzcyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7 CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKCiAgICAgIHZp cnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSos IFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9y KCkoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3QgPSAwOwogIH07CgpjbGFzcyBuc0RlZmF1 bHRTdHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7CiAg ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSos IGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICAgICAgdmlydHVh bCBpbnQgb3BlcmF0b3IoKSAoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3Q7CiAgfTsKCgoK CgoKY2xhc3MgbnNDU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBjaGFyIGNoYXJfdHlwZTsKCiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNo YXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7 CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkgKCBjaGFyX3R5cGUsIGNoYXJfdHlwZSApIGNv bnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IKICAgIDogcHVi bGljIG5zQ1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50 IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMy IGFMZW5ndGggKSBjb25zdDsKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0b3IoKSggY2hhcl90eXBl LCBjaGFyX3R5cGUgKSBjb25zdDsKICB9OwojIDk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zQVN0cmluZy5oIgpjbGFzcyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGluY29tcGF0aWJs ZV9jaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gYnVm ZmVyX2hhbmRsZV90eXBlOwogICAgICB0eXBlZGVmIG5zQ29uc3RCdWZmZXJIYW5kbGU8Y2hhcl90 eXBlPiBjb25zdF9idWZmZXJfaGFuZGxlX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNTaGFyZWRCdWZm ZXJIYW5kbGU8Y2hhcl90eXBlPiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOwoKICAgICAgdHlw ZWRlZiBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiBjb25zdF9mcmFnbWVudF90eXBlOwog ICAgICB0eXBlZGVmIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+IGZyYWdtZW50X3R5cGU7 CgogICAgICB0eXBlZGVmIG5zQVN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3Ry aW5nIGFic3RyYWN0X3N0cmluZ190eXBlOwoKICAgICAgdHlwZWRlZiBuc1JlYWRpbmdJdGVyYXRv cjxjaGFyX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3JpdGluZ0l0ZXJh dG9yPGNoYXJfdHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMyIHNpemVfdHlw ZTsKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCiAgICBwdWJsaWM6CgoKICAg ICAgdmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBlbnVtIHsKICAgICAgICBrSGFzU3Rh Y2tCdWZmZXIgPSAweDAwMDAwMDAxCgoKCgogICAgICB9OwogICAgICB2aXJ0dWFsIFBSVWludDMy IEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgYnVm ZmVyX2hhbmRsZV90eXBlKiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1 YWwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAg ICAgdmlydHVhbCBjb25zdCBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRTaGFyZWRCdWZm ZXJIYW5kbGUoKSBjb25zdDsKIyAxNDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNB U3RyaW5nLmgiCiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgQmVnaW5SZWFkaW5nKCBjb25z dF9pdGVyYXRvciYgKSBjb25zdDsKICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBFbmRSZWFk aW5nKCBjb25zdF9pdGVyYXRvciYgKSBjb25zdDsKCiAgICAgIGlubGluZSBpdGVyYXRvciYgQmVn aW5Xcml0aW5nKCBpdGVyYXRvciYgKTsKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBFbmRXcml0aW5n KCBpdGVyYXRvciYgKTsKCiAgICAgIHZpcnR1YWwgc2l6ZV90eXBlIExlbmd0aCgpIGNvbnN0ID0g MDsKICAgICAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7IHJldHVybiBMZW5ndGgoKSA9PSAwOyB9 CgogICAgICBpbmxpbmUgUFJCb29sIEVxdWFscyggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUm LCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigp ICkgY29uc3Q7CiAgICAgIFBSQm9vbCBFcXVhbHMoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IG5z U3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkgKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgUFJCb29sIElzVm9pZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQg U2V0SXNWb2lkKCBQUkJvb2wgKTsKIyAxNzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv bnNBU3RyaW5nLmgiCiAgICAgIGNoYXJfdHlwZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5 cGUgTGFzdCgpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkg Y29uc3Q7CgoKCgogICAgICBQUkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUg YU9mZnNldCA9IDAgKSBjb25zdDsKIyAxOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv bnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlICkg eyB9CiMgMjE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgogICAg ICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgKSB7IH0KCgogICAgICB2b2lkCiAg ICAgIFRydW5jYXRlKCBzaXplX3R5cGUgYU5ld0xlbmd0aD0wICkKICAgICAgICB7CiAgICAgICAg ICA7CgoKICAgICAgICAgIFNldExlbmd0aChhTmV3TGVuZ3RoKTsKICAgICAgICB9CiMgMjU4ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgogICAgICB2b2lkIEFzc2ln biggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IGRvX0Fzc2lnbkZyb21SZWFkYWJsZShh UmVhZGFibGUpOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7 IGFQdHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsgfQog ICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0 aCApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAg ICAgdm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnQo YUNoYXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYg YVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBz ZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0 cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBl IGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZv aWQgQXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgZG9fQXBwZW5kRnJvbVJl YWRhYmxlKGFSZWFkYWJsZSk7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSog YVB0ciApIHsgaWYgKGFQdHIpIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAg IHZvaWQgQXBwZW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkg eyBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2 b2lkIEFwcGVuZCggY2hhcl90eXBlIGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hh cik7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVh ZGFibGUgKSB7IEFwcGVuZChhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90 eXBlJiBvcGVyYXRvcis9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFwcGVuZChhUHRyKTsg cmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY2hhcl90eXBlIGFD aGFyICkgeyBBcHBlbmQoYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KIyAyOTUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBz ZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRG cm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lkIEluc2VydCgg Y29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGlmIChhUHRy KSBkb19JbnNlcnRGcm9tRWxlbWVudFB0cihhUHRyLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lk IEluc2VydCggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24sIHNp emVfdHlwZSBhTGVuZ3RoICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBh dFBvc2l0aW9uLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEluc2VydCggY2hhcl90eXBlIGFDaGFy LCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21FbGVtZW50KGFDaGFyLCBh dFBvc2l0aW9uKTsgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQgQ3V0KCBpbmRleF90eXBlIGN1dFN0 YXJ0LCBzaXplX3R5cGUgY3V0TGVuZ3RoICk7CgoKCiAgICAgIHZvaWQgUmVwbGFjZSggaW5kZXhf dHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCwgY29uc3Qgc2VsZl90eXBlJiBhUmVh ZGFibGUgKSB7IGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoY3V0U3RhcnQsIGN1dExlbmd0aCwgYVJl YWRhYmxlKTsgfQoKICAgIHByaXZhdGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5j b21wYXRpYmxlX2NoYXJfdHlwZSApIGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29t cGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hh cl90eXBlICk7CiAgICAgIHZvaWQgb3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUg KTsKICAgICAgdm9pZCBBcHBlbmQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZv aWQgSW5zZXJ0ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBw cm90ZWN0ZWQ6CiAgICAgICAgICAgICAgdm9pZCBVbmNoZWNrZWRBc3NpZ25Gcm9tUmVhZGFibGUo IGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFk YWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJv bUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fz c2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsK ICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAg ICAgICAgICAgICAgdm9pZCBVbmNoZWNrZWRBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZf dHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qg c2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIo IGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVt ZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVh bCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAg dm9pZCBVbmNoZWNrZWRJbnNlcnRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4 X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21SZWFkYWJsZSggY29uc3Qg c2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJv bUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVh bCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBp bmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21F bGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBVbmNo ZWNrZWRSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNl bGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGlu ZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggY29uc3Rf ZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiA9IDAgKSBjb25zdCA9 IDA7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVu dF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsKCiAgICAgIFBS Qm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBjb25zdDsKICB9 OwoKCgoKCmNsYXNzIG5zQUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgY2hh ciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5 cGU7CgogICAgICB0eXBlZGVmIG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gYnVmZmVyX2hhbmRs ZV90eXBlOwogICAgICB0eXBlZGVmIG5zQ29uc3RCdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBjb25z dF9idWZmZXJfaGFuZGxlX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNTaGFyZWRCdWZmZXJIYW5kbGU8 Y2hhcl90eXBlPiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOwoKICAgICAgdHlwZWRlZiBuc1Jl YWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiBjb25zdF9mcmFnbWVudF90eXBlOwogICAgICB0eXBl ZGVmIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+IGZyYWdtZW50X3R5cGU7CgogICAgICB0 eXBlZGVmIG5zQUNTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgYWJz dHJhY3Rfc3RyaW5nX3R5cGU7CgogICAgICB0eXBlZGVmIG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXJf dHlwZT4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgbnNXcml0aW5nSXRlcmF0b3I8Y2hh cl90eXBlPiBpdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90eXBlOwogICAg ICB0eXBlZGVmIFBSVWludDMyIGluZGV4X3R5cGU7CgoKCgoKCiAgICAgIHZpcnR1YWwgfm5zQUNT dHJpbmcoKSB7IH0KCiAgICAgIGVudW0gewogICAgICAgIGtIYXNTdGFja0J1ZmZlciA9IDB4MDAw MDAwMDEKCgoKCiAgICAgIH07CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRp b25GbGFncygpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUq IEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJf aGFuZGxlX3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0 IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0 OwojIDQwMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIKICAgICAg aW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiApIGNv bnN0OwogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJh dG9yJiApIGNvbnN0OwoKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBCZWdpbldyaXRpbmcoIGl0ZXJh dG9yJiApOwogICAgICBpbmxpbmUgaXRlcmF0b3ImIEVuZFdyaXRpbmcoIGl0ZXJhdG9yJiApOwoK ICAgICAgdmlydHVhbCBzaXplX3R5cGUgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICBQUkJvb2wg SXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIExlbmd0aCgpID09IDA7IH0KCiAgICAgIGlubGluZSBQ UkJvb2wgRXF1YWxzKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYsIGNvbnN0IG5zQ1N0cmlu Z0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApIGNvbnN0OwogICAg ICBQUkJvb2wgRXF1YWxzKCBjb25zdCBjaGFyX3R5cGUqLCBjb25zdCBuc0NTdHJpbmdDb21wYXJh dG9yJiA9IG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yKCkgKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgUFJCb29sIElzVm9pZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgU2V0SXNWb2lkKCBQ UkJvb2wgKTsKIyA0MzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgi CiAgICAgIGNoYXJfdHlwZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5cGUgTGFzdCgpIGNv bnN0OwoKICAgICAgc2l6ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkgY29uc3Q7CgoKCiAg ICAgIFBSSW50MzIgRmluZENoYXIoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSBhT2Zmc2V0ID0gMCAp IGNvbnN0OwojIDQ1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIK ICAgICAgdmlydHVhbCB2b2lkIFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyA0NzMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9p ZCBTZXRMZW5ndGgoIHNpemVfdHlwZSApIHsgfQoKCiAgICAgIHZvaWQKICAgICAgVHJ1bmNhdGUo IHNpemVfdHlwZSBhTmV3TGVuZ3RoPTAgKQogICAgICAgIHsKICAgICAgICAgIDsKCgogICAgICAg ICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAgICAgIH0KIyA1MTIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBzZWxm X3R5cGUmIGFSZWFkYWJsZSApIHsgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0K ICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fz c2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNz aWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3Np Z25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2ln biggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgog ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7 IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3Bl cmF0b3I9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0 aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFz c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoKCgoKCgoKICAgICAgdm9pZCBBcHBlbmQoIGNv bnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBkb19BcHBlbmRGcm9tUmVhZGFibGUoYVJlYWRh YmxlKTsgfQogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBpZiAo YVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9pZCBBcHBlbmQo IGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0FwcGVuZEZy b21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBj aGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsgfQoKICAgICAg c2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBw ZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9y Kz0oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7 IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVu ZChhQ2hhcik7IHJldHVybiAqdGhpczsgfQojIDU0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0 cmluZy9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IHNlbGZfdHlwZSYgYVJl YWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21SZWFkYWJsZShh UmVhZGFibGUsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5 cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZy b21FbGVtZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25z dCBjaGFyX3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5n dGggKSB7IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFM ZW5ndGgpOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUg YXRQb3NpdGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9 CgoKCiAgICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlw ZSBjdXRMZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0 LCBzaXplX3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgZG9f UmVwbGFjZUZyb21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9Cgog ICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBhdGlibGVfY2hh cl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRpYmxlX2NoYXJf dHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAg ICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lk IEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJbnNlcnQgKCBp bmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3RlY3RlZDoKICAg ICAgICAgICAgICB2b2lkIFVuY2hlY2tlZEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90 eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRhYmxlKCBjb25zdCBz ZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cigg Y29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1l bnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFs IHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2 b2lkIFVuY2hlY2tlZEFwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAg ICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7 CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90 eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgo IGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBw ZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFVuY2hlY2tl ZEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAg ICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp bmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0cigg Y29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5z ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNp emVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJf dHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFVuY2hlY2tlZFJlcGxhY2VG cm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwog ICAgICB2aXJ0dWFsIHZvaWQgZG9fUmVwbGFjZUZyb21SZWFkYWJsZSggaW5kZXhfdHlwZSwgc2l6 ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9mcmFnbWVudF90eXBl JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAgICAgdmly dHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0Zy YWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgPSAwOwoKICAgICAgUFJCb29sIElzRGVwZW5k ZW50T24oIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhU3RyaW5nICkgY29uc3Q7CiAgfTsK CgoKCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luUmVh ZGluZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93 bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdt ZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZy YWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVy biBhUmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJp bmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBh UmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVz dWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFS ZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5z QVN0cmluZzo6aXRlcmF0b3ImCm5zQVN0cmluZzo6QmVnaW5Xcml0aW5nKCBpdGVyYXRvciYgYVJl c3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRh YmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtGaXJzdEZyYWdtZW50KTsKICAgIGFSZXN1 bHQubVBvc2l0aW9uID0gYVJlc3VsdC5tRnJhZ21lbnQubVN0YXJ0OwogICAgYVJlc3VsdC5ub3Jt YWxpemVfZm9yd2FyZCgpOwogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKCmlubGluZQpuc0FTdHJp bmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkK ICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFn bWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3Np dGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoK IGludCBDb21wYXJlKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMs IGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkg KTsKCmlubGluZQpQUkJvb2wKbnNBU3RyaW5nOjpFcXVhbHMoIGNvbnN0IGFic3RyYWN0X3N0cmlu Z190eXBlJiByaHMsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgYUNvbXBhcmF0b3IgKSBjb25z dAogIHsKICAgIHJldHVybiBMZW5ndGgoKT09cmhzLkxlbmd0aCgpICYmIENvbXBhcmUoKnRoaXMs IHJocywgYUNvbXBhcmF0b3IpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29u c3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4g IWxocy5FcXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5z QVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBh cmUobGhzLCByaHMpPCAwOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNB U3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFy ZShsaHMsIHJocyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FT dHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1 YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FTdHJpbmcm IGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywg cmhzKT49MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQVN0cmluZyYg bGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCBy aHMpPiAwOwogIH0KCgoKCgoKaW5saW5lCm5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FD U3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7 CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVu dChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRp b24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3 YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6Y29uc3Rf aXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0 ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVh ZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVz dWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1 bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpbldy aXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcg PSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0 RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3Rh cnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsK ICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpFbmRXcml0aW5n KCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhp czsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21l bnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAg IHJldHVybiBhUmVzdWx0OwogIH0KCgpjbGFzcyBuc0Nhc2VJbnNlbnNpdGl2ZUNTdHJpbmdDb21w YXJhdG9yCiAgICA6IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgog ICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyX3R5cGUqLCBjb25zdCBjaGFy X3R5cGUqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgaW50IG9wZXJh dG9yKCkoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3Q7CiAgfTsKCiBpbnQgQ29tcGFyZSgg Y29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0 cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5l ClBSQm9vbApuc0FDU3RyaW5nOjpFcXVhbHMoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBy aHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImIGFDb21wYXJhdG9yICkgY29uc3QKICB7CiAg ICByZXR1cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMsIGFD b21wYXJhdG9yKT09MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zQUNT dHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gIWxocy5F cXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5zQUNTdHJp bmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShs aHMsIHJocyk8IDA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjw9KCBjb25zdCBuc0FDU3Ry aW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUo bGhzLCByaHMpPD0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBQ1N0 cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1 YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FDU3RyaW5n JiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhz LCByaHMpPj0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I+ICggY29uc3QgbnNBQ1N0cmlu ZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxo cywgcmhzKT4gMDsKICB9CgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNE ZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiIDEKIyA1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0 cmluZy9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIKY2xhc3MgbnNEZXBlbmRlbnRDb25jYXRl bmF0aW9uCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk ZWYgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uIHNlbGZfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9m cmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAg IHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVudF90eXBlJiwg bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsgfQoKICAgICAgZW51bSB7 IGtGaXJzdFN0cmluZywga0xhc3RTdHJpbmcgfTsKCiAgICAgIGludAogICAgICBHZXRDdXJyZW50 U3RyaW5nRnJvbUZyYWdtZW50KCBjb25zdCBjb25zdF9mcmFnbWVudF90eXBlJiBhRnJhZ21lbnQg KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAoYUZyYWdtZW50LkdldElEQXNJbnQo KSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtMYXN0U3RyaW5nIDoga0ZpcnN0U3RyaW5n OwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRGaXJzdFN0cmluZ0luRnJhZ21lbnQoIGNv bnN0X2ZyYWdtZW50X3R5cGUmIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg YUZyYWdtZW50LlNldElEKGFGcmFnbWVudC5HZXRJREFzSW50KCkgJiB+bUZyYWdtZW50SWRlbnRp Zmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtGaXJzdFN0cmluZzsKICAgICAgICB9CgogICAg ICBpbnQKICAgICAgU2V0TGFzdFN0cmluZ0luRnJhZ21lbnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUm IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50LlNldElEKGFG cmFnbWVudC5HZXRJREFzSW50KCkgfCBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAg ICByZXR1cm4ga0xhc3RTdHJpbmc7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXBl bmRlbnRDb25jYXRlbmF0aW9uKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUZpcnN0U3Ry aW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJpbmcsIFBSVWludDMyIGFN YXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFNYXNrKQogICAg ICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tGaXJzdFN0cmluZ10gPSAmYUZpcnN0U3RyaW5nOwog ICAgICAgICAgbVN0cmluZ3Nba0xhc3RTdHJpbmddID0gJmFMYXN0U3RyaW5nOwogICAgICAgIH0K CiAgICAgIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBhRmlyc3RT dHJpbmcsIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhTGFzdFN0cmluZyApCiAgICAgICAg ICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFGaXJzdFN0cmluZy5tRnJhZ21lbnRJZGVudGlm aWVyTWFzazw8MSkKICAgICAgICB7CiAgICAgICAgICBtU3RyaW5nc1trRmlyc3RTdHJpbmddID0g JmFGaXJzdFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tMYXN0U3RyaW5nXSA9ICZhTGFzdFN0 cmluZzsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBj b25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGljOgoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBM ZW5ndGgoKSBjb25zdDsKCgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmllck1h c2soKSBjb25zdCB7IHJldHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHByaXZh dGU6CiAgICAgIHZvaWQgb3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwcml2 YXRlOgogICAgICBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAg IFBSVWludDMyIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOwogIH07CgpjbGFzcyBuc0RlcGVuZGVu dENDb25jYXRlbmF0aW9uCiAgICA6IHB1YmxpYyBuc0FDU3RyaW5nCiAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBlOwoKICAgIHBy b3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21l bnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBj b25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdt ZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9Cgog ICAgICBlbnVtIHsga0ZpcnN0U3RyaW5nLCBrTGFzdFN0cmluZyB9OwoKICAgICAgaW50CiAgICAg IEdldEN1cnJlbnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IGNvbnN0X2ZyYWdtZW50X3R5cGUm IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChhRnJhZ21lbnQu R2V0SURBc0ludCgpICYgbUZyYWdtZW50SWRlbnRpZmllck1hc2spID8ga0xhc3RTdHJpbmcgOiBr Rmlyc3RTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldEZpcnN0U3RyaW5nSW5G cmFnbWVudCggY29uc3RfZnJhZ21lbnRfdHlwZSYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7 CiAgICAgICAgICBhRnJhZ21lbnQuU2V0SUQoYUZyYWdtZW50LkdldElEQXNJbnQoKSAmIH5tRnJh Z21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0ZpcnN0U3RyaW5nOwogICAg ICAgIH0KCiAgICAgIGludAogICAgICBTZXRMYXN0U3RyaW5nSW5GcmFnbWVudCggY29uc3RfZnJh Z21lbnRfdHlwZSYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21l bnQuU2V0SUQoYUZyYWdtZW50LkdldElEQXNJbnQoKSB8IG1GcmFnbWVudElkZW50aWZpZXJNYXNr KTsKICAgICAgICAgIHJldHVybiBrTGFzdFN0cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgog ICAgICBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlw ZSYgYUZpcnN0U3RyaW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJpbmcs IFBSVWludDMyIGFNYXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNr KGFNYXNrKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tGaXJzdFN0cmluZ10gPSAmYUZp cnN0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba0xhc3RTdHJpbmddID0gJmFMYXN0U3RyaW5n OwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHNlbGZf dHlwZSYgYUZpcnN0U3RyaW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJp bmcgKQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhRmlyc3RTdHJpbmcubUZy YWdtZW50SWRlbnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0Zp cnN0U3RyaW5nXSA9ICZhRmlyc3RTdHJpbmc7CiAgICAgICAgICBtU3RyaW5nc1trTGFzdFN0cmlu Z10gPSAmYUxhc3RTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lk IG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1 YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CgoKCgogICAgICBQUlVpbnQzMiBHZXRGcmFnbWVu dElkZW50aWZpZXJNYXNrKCkgY29uc3QgeyByZXR1cm4gbUZyYWdtZW50SWRlbnRpZmllck1hc2s7 IH0KCiAgICBwcml2YXRlOgogICAgICB2b2lkIG9wZXJhdG9yKyggY29uc3Qgc2VsZl90eXBlJiAp OwoKCgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUqIG1TdHJp bmdzWzJdOwogICAgICBQUlVpbnQzMiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsKICB9OwojIDIx NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24u aCIKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0 IG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAg ewogICAgcmV0dXJuIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbihsaHMsIHJocywgbGhzLkdldEZy YWdtZW50SWRlbnRpZmllck1hc2soKTw8MSk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50 Q0NvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9u JiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50 Q0NvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8 PDEpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3Ir KCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJl dHVybiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24obGhzLCByaHMpOwogIH0KCmlubGluZQpjb25z dCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBQ1N0cmluZyYg bGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudEND b25jYXRlbmF0aW9uKGxocywgcmhzKTsKICB9CiMgODE2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zQVN0cmluZy5oIiAyCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c1ZvaWRBcnJheS5oIiAyCgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgaW50ICgq IG5zVm9pZEFycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChjb25zdCB2b2lkKiBhRWxl bWVudDEsIGNvbnN0IHZvaWQqIGFFbGVtZW50Miwgdm9pZCogYURhdGEpOwoKCnR5cGVkZWYgUFJC b29sICgqIG5zVm9pZEFycmF5RW51bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7 CgoKY2xhc3MgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRB cnJheShQUkludDMyIGFDb3VudCk7CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lk QXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKCgoKCiAgaW5saW5l IFBSSW50MzIgQ291bnQoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUNvdW50 IDogMDsKICB9CgogIGlubGluZSBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNvbnN0IHsKICAgIHJl dHVybiBtSW1wbCA/IChQUkludDMyKG1JbXBsLT5tQml0cykgJiBrQXJyYXlTaXplTWFzaykgOiAw OwogIH0KCiAgdm9pZCogRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KSBjb25zdAogIHsKICAgIDsK ICAgIDsKCgoKICAgIGlmIChhSW5kZXggPj0gQ291bnQoKSkKICAgIHsKICAgICAgcmV0dXJuIDA7 CiAgICB9CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUFycmF5W2FJbmRleF0gOiAwOwogIH0K CgogIHZvaWQqIFNhZmVFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0CiAgewogICAgaWYg KGFJbmRleCA8IDAgfHwgYUluZGV4ID49IENvdW50KCkpCiAgICB7CiAgICAgIHJldHVybiAwOwog ICAgfQogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1BcnJheVthSW5kZXhdIDogMDsKICB9Cgog IHZvaWQqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRB dChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBj b25zdDsKCiAgUFJCb29sIEluc2VydEVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBh SW5kZXgpOwogIFBSQm9vbCBJbnNlcnRFbGVtZW50c0F0KGNvbnN0IG5zVm9pZEFycmF5ICZvdGhl ciwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUVsZW1lbnRBdCh2b2lkKiBhRWxl bWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKCiAgUFJCb29sIE1vdmVFbGVtZW50KFBSSW50MzIgYUZy b20sIFBSSW50MzIgYVRvKTsKCiAgUFJCb29sIEFwcGVuZEVsZW1lbnQodm9pZCogYUVsZW1lbnQp IHsKICAgIHJldHVybiBJbnNlcnRFbGVtZW50QXQoYUVsZW1lbnQsIENvdW50KCkpOwogIH0KCiAg UFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zVm9pZEFycmF5JiBhRWxlbWVudHMpIHsKICAgIHJldHVy biBJbnNlcnRFbGVtZW50c0F0KGFFbGVtZW50cywgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVt b3ZlRWxlbWVudCh2b2lkKiBhRWxlbWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRzQXQoUFJJ bnQzMiBhSW5kZXgsIFBSSW50MzIgYUNvdW50KTsKICBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBS SW50MzIgYUluZGV4KSB7IHJldHVybiBSZW1vdmVFbGVtZW50c0F0KGFJbmRleCwxKTsgfQoKICB2 aXJ0dWFsIHZvaWQgQ2xlYXIoKTsKCiAgdmlydHVhbCBQUkJvb2wgU2l6ZVRvKFBSSW50MzIgYU1p bik7CgoKICB2aXJ0dWFsIHZvaWQgQ29tcGFjdCgpOwoKICB2b2lkIFNvcnQobnNWb2lkQXJyYXlD b21wYXJhdG9yRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKICBQUkJvb2wgRW51bWVyYXRlRm9y d2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwogIFBSQm9vbCBF bnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEp OwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgUFJCb29sIEdyb3dBcnJheUJ5KFBSSW50MzIgYUdyb3dC eSk7CgogIHN0cnVjdCBJbXBsIHsKCgoKCgoKICAgIFBSVWludDMyIG1CaXRzOwoKCgoKICAgIFBS SW50MzIgbUNvdW50OwoKCgoKICAgIHZvaWQqIG1BcnJheVsxXTsKICB9OwoKICBJbXBsKiBtSW1w bDsKCgoKCgoKICBlbnVtIHsKICAgIGtBcnJheU93bmVyTWFzayA9IDEgPDwgMzEsCiAgICBrQXJy YXlTaXplTWFzayA9IH5rQXJyYXlPd25lck1hc2sKICB9OwoKCgogIHZvaWQgU2V0QXJyYXkoSW1w bCAqbmV3SW1wbCwgUFJJbnQzMiBhU2l6ZSwgUFJJbnQzMiBhQ291bnQsIFBSQm9vbCBvd25lcik7 CiAgaW5saW5lIFBSQm9vbCBJc0FycmF5T3duZXIoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwg PyAoUFJCb29sKG1JbXBsLT5tQml0cykgJiBrQXJyYXlPd25lck1hc2spIDogMDsKICB9Cgpwcml2 YXRlOgoKICBuc1ZvaWRBcnJheShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwp9OwoKCgpjbGFz cyBuc0F1dG9Wb2lkQXJyYXkgOiBwdWJsaWMgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNBdXRv Vm9pZEFycmF5KCk7CiAgdm9pZCBDbGVhcigpOwoKICB2aXJ0dWFsIFBSQm9vbCBTaXplVG8oUFJJ bnQzMiBhTWluKTsKICB2aXJ0dWFsIHZvaWQgQ29tcGFjdCgpOwoKcHJvdGVjdGVkOgoKICBlbnVt IHsga0F1dG9CdWZTaXplID0gOCB9OwogIGNoYXIgbUF1dG9CdWZbc2l6ZW9mKEltcGwpICsgKGtB dXRvQnVmU2l6ZSAtIDEpICogc2l6ZW9mKHZvaWQqKV07Cn07CgoKY2xhc3MgbnNTdHJpbmc7Cgp0 eXBlZGVmIGludCAoKiBuc1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChj b25zdCBuc1N0cmluZyogYUVsZW1lbnQxLCBjb25zdCBuc1N0cmluZyogYUVsZW1lbnQyLCB2b2lk KiBhRGF0YSk7Cgp0eXBlZGVmIFBSQm9vbCAoKm5zU3RyaW5nQXJyYXlFbnVtRnVuYykobnNTdHJp bmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgpjbGFzcyBuc1N0cmluZ0FycmF5OiBwcm90ZWN0 ZWQgbnNWb2lkQXJyYXkKewpwdWJsaWM6CiAgbnNTdHJpbmdBcnJheSh2b2lkKTsKICBuc1N0cmlu Z0FycmF5KFBSSW50MzIgYUNvdW50KTsKICB2aXJ0dWFsIH5uc1N0cmluZ0FycmF5KHZvaWQpOwoK ICBuc1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwoK CgoKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lkQXJyYXk6 OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FTdHJpbmcm IGFTdHJpbmcpIGNvbnN0OwogIG5zU3RyaW5nKiBTdHJpbmdBdChQUkludDMyIGFJbmRleCkgY29u c3Q7CiAgbnNTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJu IFN0cmluZ0F0KGFJbmRleCk7IH0KCiAgUFJJbnQzMiBJbmRleE9mKGNvbnN0IG5zQVN0cmluZyYg YVBvc3NpYmxlU3RyaW5nKSBjb25zdDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5z QVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZVN0cmlu Z0F0KGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wg QXBwZW5kU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykgewogICAgcmV0dXJuIEluc2Vy dFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZVN0cmluZyhj b25zdCBuc0FTdHJpbmcmIGFTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVTdHJpbmdBdChQUkludDMy IGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsKCiAgdm9pZCBDb21wYWN0KHZvaWQpIHsKICAg IG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoKICB2b2lkIFNvcnQodm9pZCk7CiAgdm9pZCBT b3J0KG5zU3RyaW5nQXJyYXlDb21wYXJhdG9yRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKICBQ UkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk KiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1 bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29uc3Qg bnNTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYgaW50 ICgqIG5zQ1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChjb25zdCBuc0NT dHJpbmcqIGFFbGVtZW50MSwgY29uc3QgbnNDU3RyaW5nKiBhRWxlbWVudDIsIHZvaWQqIGFEYXRh KTsKCnR5cGVkZWYgUFJCb29sICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBh RWxlbWVudCwgdm9pZCAqYURhdGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBu c1ZvaWRBcnJheQp7CnB1YmxpYzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICBuc0NTdHJpbmdB cnJheShQUkludDMyIGFDb3VudCk7CiAgdmlydHVhbCB+bnNDU3RyaW5nQXJyYXkodm9pZCk7Cgog IG5zQ1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNDU3RyaW5nQXJyYXkmIG90aGVyKTsK CgoKCgoKICB2b2lkIFBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3QgY2hhciog ZGVsaW1pdGVyKTsKCgoKCgogIFBSSW50MzIgQ291bnQodm9pZCkgY29uc3QgewogICAgcmV0dXJu IG5zVm9pZEFycmF5OjpDb3VudCgpOwogIH0KCiAgdm9pZCBDU3RyaW5nQXQoUFJJbnQzMiBhSW5k ZXgsIG5zQ1N0cmluZyYgYUNTdHJpbmcpIGNvbnN0OwogIG5zQ1N0cmluZyogQ1N0cmluZ0F0KFBS SW50MzIgYUluZGV4KSBjb25zdDsKICBuc0NTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5k ZXgpIGNvbnN0IHsgcmV0dXJuIENTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhP Zihjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJbmRl eE9mSWdub3JlQ2FzZShjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7Cgog IFBSQm9vbCBJbnNlcnRDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBhQ1N0cmluZywgUFJJbnQz MiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUNTdHJpbmdBdChjb25zdCBuc0NTdHJpbmcmIGFD U3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRDU3RyaW5nKGNvbnN0IG5z Q1N0cmluZyYgYUNTdHJpbmcpIHsKICAgIHJldHVybiBJbnNlcnRDU3RyaW5nQXQoYUNTdHJpbmcs IENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZUNTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBh Q1N0cmluZyk7CiAgUFJCb29sIFJlbW92ZUNTdHJpbmdJZ25vcmVDYXNlKGNvbnN0IG5zQ1N0cmlu ZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgpOwog IHZvaWQgQ2xlYXIodm9pZCk7CgogIHZvaWQgQ29tcGFjdCh2b2lkKSB7CiAgICBuc1ZvaWRBcnJh eTo6Q29tcGFjdCgpOwogIH0KCiAgdm9pZCBTb3J0KHZvaWQpOwogIHZvaWQgU29ydElnbm9yZUNh c2Uodm9pZCk7CiAgdm9pZCBTb3J0KG5zQ1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMgYUZ1bmMs IHZvaWQqIGFEYXRhKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5zQ1N0cmluZ0FycmF5 RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRz KG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6Cgog IG5zQ1N0cmluZ0FycmF5KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7Cn07CiMgMzQ5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNWb2lkQXJyYXkuaCIKY2xhc3MgbnNTbWFsbFZv aWRBcnJheQp7CnB1YmxpYzoKICBuc1NtYWxsVm9pZEFycmF5KCk7CiAgfm5zU21hbGxWb2lkQXJy YXkoKTsKCiAgbnNTbWFsbFZvaWRBcnJheSYgb3BlcmF0b3I9KG5zU21hbGxWb2lkQXJyYXkmIG90 aGVyKTsKICB2b2lkKiBvcGVyYXRvcltdKFBSSW50MzIgYUluZGV4KSBjb25zdCB7IHJldHVybiBF bGVtZW50QXQoYUluZGV4KTsgfQoKCgoKICBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNvbnN0OwoK ICBQUkludDMyIENvdW50KCkgY29uc3Q7CiAgdm9pZCogRWxlbWVudEF0KFBSSW50MzIgYUluZGV4 KSBjb25zdDsKICB2b2lkKiBTYWZlRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KSBjb25zdCB7Cgog ICAgaWYgKGFJbmRleCA8IDAgfHwgYUluZGV4ID49IENvdW50KCkpCiAgICAgIHJldHVybiAwOwog ICAgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOwogIH0KICBQUkludDMyIEluZGV4T2Yodm9pZCog YVBvc3NpYmxlRWxlbWVudCkgY29uc3Q7CiAgUFJCb29sIEluc2VydEVsZW1lbnRBdCh2b2lkKiBh RWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwogIFBSQm9vbCBJbnNlcnRFbGVtZW50c0F0KGNvbnN0 IG5zVm9pZEFycmF5ICZvdGhlciwgUFJJbnQzMiBhSW5kZXgpOwogIFBSQm9vbCBSZXBsYWNlRWxl bWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CiAgUFJCb29sIE1vdmVFbGVt ZW50KFBSSW50MzIgYUZyb20sIFBSSW50MzIgYVRvKTsKICBQUkJvb2wgQXBwZW5kRWxlbWVudCh2 b2lkKiBhRWxlbWVudCk7CiAgUFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zVm9pZEFycmF5JiBhRWxl bWVudHMpIHsKICAgIHJldHVybiBJbnNlcnRFbGVtZW50c0F0KGFFbGVtZW50cywgQ291bnQoKSk7 CiAgfQogIFBSQm9vbCBSZW1vdmVFbGVtZW50KHZvaWQqIGFFbGVtZW50KTsKICBQUkJvb2wgUmVt b3ZlRWxlbWVudHNBdChQUkludDMyIGFJbmRleCwgUFJJbnQzMiBhQ291bnQpOwogIFBSQm9vbCBS ZW1vdmVFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpOwoKICB2b2lkIENsZWFyKCk7CiAgUFJCb29s IFNpemVUbyhQUkludDMyIGFNaW4pOwogIHZvaWQgQ29tcGFjdCgpOwogIHZvaWQgU29ydChuc1Zv aWRBcnJheUNvbXBhcmF0b3JGdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CgogIFBSQm9vbCBFbnVt ZXJhdGVGb3J3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAg UFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk KiBhRGF0YSk7Cgpwcml2YXRlOgogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBQdHJCaXRzOwoKICBQ UkJvb2wgSGFzU2luZ2xlQ2hpbGQoKSBjb25zdAogIHsKICAgIHJldHVybiAobUNoaWxkcmVuICYm IChQdHJCaXRzKG1DaGlsZHJlbikgJiAweDEpKTsKICB9CiAgUFJCb29sIEhhc1ZlY3RvcigpIGNv bnN0CiAgewogICAgcmV0dXJuIChtQ2hpbGRyZW4gJiYgIShQdHJCaXRzKG1DaGlsZHJlbikgJiAw eDEpKTsKICB9CiAgdm9pZCogR2V0U2luZ2xlQ2hpbGQoKSBjb25zdAogIHsKICAgIHJldHVybiAo bUNoaWxkcmVuID8gKCh2b2lkKikoUHRyQml0cyhtQ2hpbGRyZW4pICYgfjB4MSkpIDogMCk7CiAg fQogIHZvaWQgU2V0U2luZ2xlQ2hpbGQodm9pZCAqYUNoaWxkKTsKICBuc1ZvaWRBcnJheSogR2V0 Q2hpbGRWZWN0b3IoKSBjb25zdAogIHsKICAgIHJldHVybiAobnNWb2lkQXJyYXkqKW1DaGlsZHJl bjsKICB9CiAgbnNWb2lkQXJyYXkqIFN3aXRjaFRvVmVjdG9yKCk7CgoKCgoKICB2b2lkICptQ2hp bGRyZW47Cn07CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ2xhc3NJbmZv LmgiIDIKCmVudW0gbnNET01DbGFzc0luZm9JRCB7CgogIGVET01DbGFzc0luZm9fV2luZG93X2lk LAogIGVET01DbGFzc0luZm9fTG9jYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19OYXZpZ2F0b3Jf aWQsCiAgZURPTUNsYXNzSW5mb19QbHVnaW5faWQsCiAgZURPTUNsYXNzSW5mb19QbHVnaW5BcnJh eV9pZCwKICBlRE9NQ2xhc3NJbmZvX01pbWVUeXBlX2lkLAogIGVET01DbGFzc0luZm9fTWltZVR5 cGVBcnJheV9pZCwKICBlRE9NQ2xhc3NJbmZvX0JhclByb3BfaWQsCiAgZURPTUNsYXNzSW5mb19I aXN0b3J5X2lkLAogIGVET01DbGFzc0luZm9fU2NyZWVuX2lkLAoKCiAgZURPTUNsYXNzSW5mb19Y TUxEb2N1bWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0RvY3VtZW50VHlwZV9pZCwKICBlRE9NQ2xh c3NJbmZvX0RPTUltcGxlbWVudGF0aW9uX2lkLAogIGVET01DbGFzc0luZm9fRE9NRXhjZXB0aW9u X2lkLAogIGVET01DbGFzc0luZm9fRG9jdW1lbnRGcmFnbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZv X0VsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19BdHRyX2lkLAogIGVET01DbGFzc0luZm9fVGV4 dF9pZCwKICBlRE9NQ2xhc3NJbmZvX0NvbW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19DREFUQVNl Y3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25faWQsCiAgZURP TUNsYXNzSW5mb19FbnRpdHlfaWQsCiAgZURPTUNsYXNzSW5mb19FbnRpdHlSZWZlcmVuY2VfaWQs CiAgZURPTUNsYXNzSW5mb19Ob3RhdGlvbl9pZCwKICBlRE9NQ2xhc3NJbmZvX05vZGVMaXN0X2lk LAogIGVET01DbGFzc0luZm9fTmFtZWROb2RlTWFwX2lkLAoKCiAgZURPTUNsYXNzSW5mb19Eb2N1 bWVudFN0eWxlU2hlZXRMaXN0X2lkLAoKCiAgZURPTUNsYXNzSW5mb19FdmVudF9pZCwKICBlRE9N Q2xhc3NJbmZvX011dGF0aW9uRXZlbnRfaWQsCgoKICBlRE9NQ2xhc3NJbmZvX0hUTUxEb2N1bWVu dF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxDb2xsZWN0aW9uX2lkLAogIGVET01DbGFzc0luZm9f SFRNTE9wdGlvbkNvbGxlY3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19IVE1MRm9ybUNvbnRyb2xD b2xsZWN0aW9uX2lkLAogIGVET01DbGFzc0luZm9fSFRNTEdlbmVyaWNDb2xsZWN0aW9uX2lkLAoK CiAgZURPTUNsYXNzSW5mb19IVE1MQW5jaG9yRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hU TUxBcHBsZXRFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTEFyZWFFbGVtZW50X2lkLAog IGVET01DbGFzc0luZm9fSFRNTEJSRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxCYXNl RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxCYXNlRm9udEVsZW1lbnRfaWQsCiAgZURP TUNsYXNzSW5mb19IVE1MQm9keUVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MQnV0dG9u RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxETGlzdEVsZW1lbnRfaWQsCiAgZURPTUNs YXNzSW5mb19IVE1MRGVsRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxEaXJlY3RvcnlF bGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTERpdkVsZW1lbnRfaWQsCiAgZURPTUNsYXNz SW5mb19IVE1MRW1iZWRFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTEZpZWxkU2V0RWxl bWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxGb250RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJ bmZvX0hUTUxGb3JtRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxGcmFtZUVsZW1lbnRf aWQsCiAgZURPTUNsYXNzSW5mb19IVE1MRnJhbWVTZXRFbGVtZW50X2lkLAogIGVET01DbGFzc0lu Zm9fSFRNTEhSRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkRWxlbWVudF9pZCwK ICBlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkaW5nRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hU TUxIdG1sRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxJRnJhbWVFbGVtZW50X2lkLAog IGVET01DbGFzc0luZm9fSFRNTEltYWdlRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxJ bnB1dEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MSW5zRWxlbWVudF9pZCwKICBlRE9N Q2xhc3NJbmZvX0hUTUxJc0luZGV4RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxMSUVs ZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTGFiZWxFbGVtZW50X2lkLAogIGVET01DbGFz c0luZm9fSFRNTExlZ2VuZEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTGlua0VsZW1l bnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTWFwRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZv X0hUTUxNZW51RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxNZXRhRWxlbWVudF9pZCwK ICBlRE9NQ2xhc3NJbmZvX0hUTUxNb2RFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTE9M aXN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxPYmplY3RFbGVtZW50X2lkLAogIGVE T01DbGFzc0luZm9fSFRNTE9wdEdyb3VwRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxP cHRpb25FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFBhcmFncmFwaEVsZW1lbnRfaWQs CiAgZURPTUNsYXNzSW5mb19IVE1MUGFyYW1FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRN TFByZUVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MUXVvdGVFbGVtZW50X2lkLAogIGVE T01DbGFzc0luZm9fSFRNTFNjcmlwdEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MU2Vs ZWN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxTcGFjZXJFbGVtZW50X2lkLAogIGVE T01DbGFzc0luZm9fSFRNTFNwYW5FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFN0eWxl RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxUYWJsZUNhcHRpb25FbGVtZW50X2lkLAog IGVET01DbGFzc0luZm9fSFRNTFRhYmxlQ2VsbEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19I VE1MVGFibGVDb2xFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFRhYmxlQ29sR3JvdXBF bGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFRhYmxlRWxlbWVudF9pZCwKICBlRE9NQ2xh c3NJbmZvX0hUTUxUYWJsZVJvd0VsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MVGFibGVT ZWN0aW9uRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxUZXh0QXJlYUVsZW1lbnRfaWQs CiAgZURPTUNsYXNzSW5mb19IVE1MVGl0bGVFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRN TFVMaXN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxVbmtub3duRWxlbWVudF9pZCwK ICBlRE9NQ2xhc3NJbmZvX0hUTUxXQlJFbGVtZW50X2lkLAoKCiAgZURPTUNsYXNzSW5mb19DU1NT dHlsZVJ1bGVfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NDaGFyc2V0UnVsZV9pZCwKICBlRE9NQ2xh c3NJbmZvX0NTU0ltcG9ydFJ1bGVfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NNZWRpYVJ1bGVfaWQs CiAgZURPTUNsYXNzSW5mb19DU1NOYW1lU3BhY2VSdWxlX2lkLAogIGVET01DbGFzc0luZm9fQ1NT UnVsZUxpc3RfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NHcm91cFJ1bGVSdWxlTGlzdF9pZCwKICBl RE9NQ2xhc3NJbmZvX01lZGlhTGlzdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1N0eWxlU2hlZXRMaXN0 X2lkLAogIGVET01DbGFzc0luZm9fQ1NTU3R5bGVTaGVldF9pZCwKICBlRE9NQ2xhc3NJbmZvX0NT U1N0eWxlRGVjbGFyYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19Db21wdXRlZENTU1N0eWxlRGVj bGFyYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19ST0NTU1ByaW1pdGl2ZVZhbHVlX2lkLAoKCiAg ZURPTUNsYXNzSW5mb19SYW5nZV9pZCwKICBlRE9NQ2xhc3NJbmZvX1NlbGVjdGlvbl9pZCwKCgog IGVET01DbGFzc0luZm9fWFVMRG9jdW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19YVUxFbGVtZW50 X2lkLAogIGVET01DbGFzc0luZm9fWFVMQ29tbWFuZERpc3BhdGNoZXJfaWQsCiAgZURPTUNsYXNz SW5mb19YVUxOb2RlTGlzdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1hVTE5hbWVkTm9kZU1hcF9pZCwK ICBlRE9NQ2xhc3NJbmZvX1hVTEF0dHJfaWQsCiAgZURPTUNsYXNzSW5mb19YVUxDb250cm9sbGVy c19pZCwKICBlRE9NQ2xhc3NJbmZvX0JveE9iamVjdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1RyZWVT ZWxlY3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19UcmVlQ29udGVudFZpZXdfaWQsCgoKICBlRE9N Q2xhc3NJbmZvX0NyeXB0b19pZCwKICBlRE9NQ2xhc3NJbmZvX0NSTUZPYmplY3RfaWQsCiAgZURP TUNsYXNzSW5mb19Qa2NzMTFfaWQsCiMgMjQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUNsYXNzSW5mby5oIgogIGVET01DbGFzc0luZm9fVHJlZVdhbGtlcl9pZCwKCgoKCgoKICBl RE9NQ2xhc3NJbmZvX0NTU1JlY3RfaWQsCgoKICBlRE9NQ2xhc3NJbmZvX0Nocm9tZVdpbmRvd19p ZCwKCgogIGVET01DbGFzc0luZm9fQ1NTUkdCQ29sb3JfaWQsCgogIGVET01DbGFzc0luZm9fUmFu Z2VFeGNlcHRpb25faWQsCgoKCiAgZURPTUNsYXNzSW5mb19DU1NWYWx1ZUxpc3RfaWQsCgoKICBl RE9NQ2xhc3NJbmZvX0NvbnRlbnRMaXN0X2lkLAoKCiAgZURPTUNsYXNzSW5mb19YTUxTdHlsZXNo ZWV0UHJvY2Vzc2luZ0luc3RydWN0aW9uX2lkLAoKICBlRE9NQ2xhc3NJbmZvX0ltYWdlRG9jdW1l bnRfaWQsCgoKICBlRE9NQ2xhc3NJbmZvSURDb3VudAp9OwoKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIiAxCiMgMTggIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29ubmVjdC94cGNleGNlcHRpb24uaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb25uZWN0L3hwY2V4Y2VwdGlvbi5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lFeGNlcHRpb24uaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ RXhjZXB0aW9uLmgiCmNsYXNzIG5zSVN0YWNrRnJhbWUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4OTFkODIxMDUsIDB4N2M2MiwgMHg0ZjhiLCB7IDB4OTcsIDB4NzksIDB4MTUs IDB4NDIsIDB4NzcsIDB4YzAsIDB4ZWUsIDB4OTAgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShQUlVpbnQzMiAqYUxhbmd1YWdlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlTmFtZShjaGFyICogKmFMYW5ndWFnZU5hbWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZW5hbWUoY2hhciAqICphRmlsZW5hbWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShjaGFyICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldExpbmVOdW1iZXIoUFJJbnQzMiAqYUxpbmVOdW1iZXIpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U291cmNlTGluZShjaGFyICogKmFTb3VyY2VMaW5lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlcihuc0lTdGFja0ZyYW1lICogKmFDYWxsZXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsK Cn07CiMgMTgwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRXhjZXB0aW9uLmgiCmNs YXNzIG5zSUV4Y2VwdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmM2E4 ZDNiNCwgMHhjNDI0LCAweDRlZGMsIHsgMHg4YiwgMHhmNiwgMHg4OSwgMHg3NCwgMHhjOSwgMHg4 MywgMHhiYSwgMHg3OCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1l c3NhZ2UoY2hhciAqICphTWVzc2FnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXN1 bHQobnNyZXN1bHQgKmFSZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShj aGFyICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVuYW1lKGNoYXIg KiAqYUZpbGVuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmVOdW1iZXIoUFJV aW50MzIgKmFMaW5lTnVtYmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbHVtbk51 bWJlcihQUlVpbnQzMiAqYUNvbHVtbk51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRMb2NhdGlvbihuc0lTdGFja0ZyYW1lICogKmFMb2NhdGlvbikgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbm5lcihuc0lFeGNlcHRpb24gKiAqYUlubmVyKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldERhdGEobnNJU3VwcG9ydHMgKiAqYURhdGEpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjZXhjZXB0aW9uLmgiIDIKIyAyOSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRXhjZXB0 aW9uIDogcHVibGljIG5zSUV4Y2VwdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiMmEzNDAxMCwgMHgzOTgz LCAweDExZDMsIHsgMHg5OCwgMHg4OCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgy MiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRpYWxpemUoY29uc3Qg Y2hhciAqYU1lc3NhZ2UsIG5zcmVzdWx0IGFSZXN1bHQsIGNvbnN0IGNoYXIgKmFOYW1lLCBuc0lT dGFja0ZyYW1lICphTG9jYXRpb24sIG5zSVN1cHBvcnRzICphRGF0YSwgbnNJRXhjZXB0aW9uICph SW5uZXIpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBj Y29tcG9uZW50cy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94 cGNqc2lkLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNqc2lk LmgiCmNsYXNzIG5zSUpTSUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Yzg2 YWUxMzEsIDB4ZDEwMSwgMHgxMWQyLCB7IDB4OTgsIDB4NDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4 OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRO YW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TnVtYmVyKGNo YXIgKiAqYU51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJZChuc0lEICogKmFJ ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWxpZChQUkJvb2wgKmFWYWxpZCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJSlNJRCAqb3RoZXIsIFBSQm9vbCAqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0aWFsaXplKGNvbnN0IGNoYXIgKmlk U3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDE2NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNqc2lk LmgiCmNsYXNzIG5zSUpTSUlEIDogcHVibGljIG5zSUpTSUQgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZTA4ZGNk YTAsIDB4ZDY1MSwgMHgxMWQyLCB7IDB4OTgsIDB4NDMsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYs IDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAyMjIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbm5lY3QveHBjanNpZC5oIgpjbGFzcyBuc0lKU0NJRCA6IHB1YmxpYyBuc0lKU0lE IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGUzYTI0YTYwLCAweGQ2NTEsIDB4MTFkMiwgeyAweDk4LCAweDQzLCAw eDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZp cnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlcnZpY2UobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVu dHMuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRN YW5hZ2VyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVu dE1hbmFnZXIuaCIKY2xhc3MgbnNJRmFjdG9yeTsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdlciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhODhlNWE2MCwgMHgyMDVhLCAweDRi YjEsIHsgMHg5NCwgMHhlMSwgMHgyNiwgMHgyOCwgMHhkYSwgMHhmNSwgMHgxZSwgMHhhZSB9fTsg cmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJ RCAmIGFDbGFzcywgY29uc3QgbnNJSUQgJiBhSUlELCB2b2lkICogKnJlc3VsdCkgPSAwOwojIDUy ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3RCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNv bnRyYWN0SUQsIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKIyA2NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBw b3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7 CiMgNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChjb25zdCBjaGFy ICphQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwgY29uc3QgbnNJSUQgJiBhSUlE LCB2b2lkICogKnJlc3VsdCkgPSAwOwoKfTsKIyAxNTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyOCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zQ09NUHRyLmgiIDEKIyAxMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0NPTVB0ci5oIgogIHR5cGVkZWYgUFJCb29sIE5TQ0FQX0JPT0w7CiMgMTc0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNs YXNzIG5zRGVyaXZlZFNhZmUgOiBwdWJsaWMgVAojIDE4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zQ09NUHRyLmgiCiAgewogICAgcHJpdmF0ZToKCiAgICAgIHVzaW5nIFQ6OkFkZFJl ZjsKICAgICAgdXNpbmcgVDo6UmVsZWFzZTsKCgoKCgoKICAgICAgdm9pZCBvcGVyYXRvciBkZWxl dGUoIHZvaWQqLCBzaXplX3QgKTsKCgoKICAgICAgbnNEZXJpdmVkU2FmZTxUPiYgb3BlcmF0b3I9 KCBjb25zdCBUJiApOwojIDIwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRy LmgiCiAgfTsKIyAyMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGFscmVhZHlfQWRkUmVmZWQKIyAyNDcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogIHsKICAgIGFscmVhZHlfQWRkUmVmZWQo IFQqIGFSYXdQdHIgKQogICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQogICAgICB7CgogICAgICB9 CgogICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbVJhd1B0cjsgfQoKICAgIFQqIG1SYXdQdHI7 CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxU PgpnZXR0ZXJfQWRkUmVmcyggVCogYVJhd1B0ciApCgoKCgogIHsKICAgIHJldHVybiBhbHJlYWR5 X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpnZXR0ZXJfQWRkUmVmcyggY29uc3QgYWxyZWFkeV9BZGRS ZWZlZDxUPiYgYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRk UmVmZWRQdHI7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0Fk ZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBUKiBhUmF3UHRyICkKICB7CiAgICByZXR1cm4gYWxyZWFk eV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNv bnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZG9udF9BZGRSZWYoIGNvbnN0IGFscmVhZHlfQWRkUmVm ZWQ8VD4gYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRkUmVm ZWRQdHI7CiAgfQojIDMwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgi CnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKVCoKZG9udF9RdWVyeUludGVyZmFjZSggVCogZXhw ciApCiAgewogICAgcmV0dXJuIGV4cHI7CiAgfQoKCgpjbGFzcyBuc0NPTVB0cl9oZWxwZXIKIyAz MzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogIHsKICAgIHB1Ymxp YzoKICAgICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQq KiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNRdWVyeUludGVyZmFjZSA6IHB1YmxpYyBuc0NP TVB0cl9oZWxwZXIKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zUXVlcnlJbnRlcmZhY2UoIG5zSVN1 cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCogZXJyb3IgKQogICAgICAgICAgOiBtUmF3UHRyKGFS YXdQdHIpLAogICAgICAgICAgICBtRXJyb3JQdHIoZXJyb3IpCiAgICAgICAgewoKICAgICAgICB9 CgogICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiBhSUlELCB2 b2lkKiogKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBuc0lTdXBwb3J0cyogbVJhd1B0cjsK ICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zUXVlcnlJbnRl cmZhY2UKZG9fUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCog ZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNRdWVyeUludGVyZmFjZShhUmF3UHRyLCBlcnJv cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2b2lkCmRvX1F1ZXJ5SW50ZXJmYWNl KCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiApCiAgewoKCgogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgpp bmxpbmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxyZWFkeV9BZGRSZWZlZDxUPiYsIG5zcmVz dWx0KiApCiAgewoKCgogIH0KCgoKY2xhc3MgbnNDT01QdHJfYmFzZQojIDM5NiAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgoKICAgICAgbnND T01QdHJfYmFzZSggbnNJU3VwcG9ydHMqIHJhd1B0ciA9IDAgKQogICAgICAgICAgOiBtUmF3UHRy KHJhd1B0cikKICAgICAgICB7CgogICAgICAgIH0KCgogICAgICB+bnNDT01QdHJfYmFzZSgpOwoK CgoKCgogICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAgICAg IHZvaWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25zdCBu c0lJRCYgKTsKICAgICAgdm9pZCoqIGJlZ2luX2Fzc2lnbm1lbnQoKTsKCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwoKICAgICAgdm9pZAogICAgICBhc3NpZ25fYXNz dW1pbmdfQWRkUmVmKCBuc0lTdXBwb3J0cyogbmV3UHRyICkKICAgICAgICB7CiMgNDMxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgICAgIG5zSVN1cHBvcnRz KiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAgbVJhd1B0ciA9IG5ld1B0cjsKICAgICAgICAg IDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAgICAgICAgICAgIChvbGRQdHIpLT5SZWxlYXNl KCk7CiAgICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0NPTVB0cgoK ICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCgogIHsKICAgIGVudW0geyBfZm9yY2VfZXZlbl9j b21wbGlhbnRfY29tcGlsZXJzX3RvX2ZhaWxfID0gc2l6ZW9mKFQpIH07CiMgNDgzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBUIGVsZW1lbnRfdHlwZTsKIyA1MTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NP TVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoK ICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBu c0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFy dFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAg ICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBu c0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhUmF3UHRy KQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0 ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAgIDsKICAgICAgICB9CgogICAgICBu c0NPTVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAg ICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAg ICA7OwogICAgICAgICAgOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0 cl9oZWxwZXImIGhlbHBlciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAg ICAgewogICAgICAgICAgOzsKICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5z Q09NVHlwZUluZm88VD46OkdldElJRCgpKTsKICAgICAgICAgIDsKICAgICAgICB9CiMgNTcyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4m CiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHI8VD4mIHJocyApCgogICAgICAgIHsKICAg ICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggVCog cmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocyk7CiAgICAg ICAgICA7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8 VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgcmhzICkKCiAg ICAgICAgewogICAgICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAg ICAgICAgICA7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q dHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHJfaGVscGVyJiByaHMgKQoKCiAg ICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVyKHJocywgbnNDT01UeXBlSW5mbzxU Pjo6R2V0SUlEKCkpOwogICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg IH0KIyA2MjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogICAgICBu c0Rlcml2ZWRTYWZlPFQ+KgogICAgICBnZXQoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAg ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRTYWZlPFQ+KiA+KG1SYXdQdHIp OwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8VD4qKCkgY29uc3QKCgoK CgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICAgIG5z RGVyaXZlZFNhZmU8VD4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIDsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgNjY3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4qCiAgICAgIGdl dF9hZGRyZXNzKCkKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0K CiAgICAgIGNvbnN0IG5zQ09NUHRyPFQ+KgogICAgICBnZXRfYWRkcmVzcygpIGNvbnN0CgoKICAg ICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgoKCiAgICBwdWJsaWM6CiAg ICAgIG5zRGVyaXZlZFNhZmU8VD4mCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CgoKCgoKCiAgICAg IFQqKgogICAgICBTdGFydEFzc2lnbm1lbnQoKQogICAgICAgIHsKCiAgICAgICAgICByZXR1cm4g cmVpbnRlcnByZXRfY2FzdDwgVCoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoKCiAgICAgICAg fQogIH07CiMgNzIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVt cGxhdGUgPD4KY2xhc3MgbnNDT01QdHI8bnNJU3VwcG9ydHM+CiAgICA6IHByaXZhdGUgbnNDT01Q dHJfYmFzZQogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0lTdXBwb3J0cyBlbGVtZW50 X3R5cGU7CiMgNzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAg ICAgbnNDT01QdHIoKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkKCiAgICAgICAgewog ICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHI8bnNJ U3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVNtYXJ0 UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAg ICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5z Q09NUHRyKCBuc0lTdXBwb3J0cyogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFz ZShhUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAg ICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NP TVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lTdXBwb3J0cz4mIGFTbWFydFB0ciApCiAg ICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikKCiAgICAgICAgewog ICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHJfaGVs cGVyJiBoZWxwZXIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkKCgogICAgICAgIHsK ICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIoaGVscGVyLCBuc0NPTVR5 cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgIH0KCgoKCiAgICAgIG5zQ09N UHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cjxuc0lTdXBw b3J0cz4mIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMu bVJhd1B0cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q dHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0oIG5zSVN1cHBvcnRzKiByaHMgKQoKICAg ICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzKTsKICAgICAgICAgIHJldHVy biAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9w ZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lTdXBwb3J0cz4mIHJocyApCgogICAg ICAgIHsKICAgICAgICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYocmhzLm1SYXdQdHIpOwogICAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRz PiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIHJocyApCgoKICAgICAg ICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIocmhzLCBuc0NPTVR5cGVJbmZvPG5zSVN1 cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgoK CiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KgogICAgICBnZXQoKSBjb25zdAoKCgoK CgogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRT YWZlPG5zSVN1cHBvcnRzPiogPihtUmF3UHRyKTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBu c0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPiooKSBjb25zdAoKCgoKCgoKICAgICAgICB7CiAgICAg ICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBw b3J0cz4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIDsKICAg ICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgODYzICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBn ZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9 CgogICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkg Y29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCgoKICAg IHB1YmxpYzoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRv ciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIHJldHVybiAqZ2V0KCk7 CiAgICAgICAgfQoKCgoKCgogICAgICBuc0lTdXBwb3J0cyoqCiAgICAgIFN0YXJ0QXNzaWdubWVu dCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0lTdXBw b3J0cyoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoKCiAgICAgICAgfQogIH07CiMgOTUwICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+ CmlubGluZQpuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggbnNDT01QdHI8VD4mIGFQdHIgKQogIHsK ICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu bGluZQpjb25zdCBuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggY29uc3QgbnNDT01QdHI8VD4mIGFQ dHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzCiMgOTg3ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAg IG5zR2V0dGVyQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1U YXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAgICB9CiMgMTAwOSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQq KigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+ KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3Bl cmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJw cmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50 KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIFQqKigpCiAgICAgICAgewogICAgICAgICAg cmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAgICAgICB9CgogICAg ICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKihtVGFy Z2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgog ICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVtcGxhdGUgPD4KY2xh c3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRzPgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhw bGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFTbWFy dFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoK ICAgICAgICB9CiMgMTA1MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgi CiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7 CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAg ICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAgICAgICB9 CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigpCiAgICAgICAgewogICAgICAg ICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9 CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiBtVGFyZ2V0U21hcnRQ dHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zR2V0dGVyQWRkUmVmczxUPgpn ZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCgoKCgogIHsKICAgIHJldHVy biBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoKCgoKdGVtcGxhdGUgPGNsYXNz IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRy PFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNf Y2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lk KiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUK TlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBuc0NP TVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4o bGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0K CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRv cj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiByaHMgKQogIHsKICAgIHJldHVy biBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBj b25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGlu ZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywgY29uc3QgbnNDT01QdHI8VD4m IHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocykgPT0g c3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnNDT01Q dHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNv bnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMp OwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVy YXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQogIHsKICAgIHJl dHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRpY19jYXN0PCBjb25z dCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDExNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQ X0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhzICkKICB7CiAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBzdGF0aWNf Y2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxp bmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMg KQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0YXRpY19jYXN0 PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz IFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMs IFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5n ZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhzLCBjb25zdCBu c0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQqID4obGhz KSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgoKCgoKY2xh c3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApvcGVy YXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMgKQoKICB7CiAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSByZWludGVy cHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu bGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29uc3QgbnNDT01Q dHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lk KiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnND T01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJuIHN0YXRpY19j YXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qg dm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApv cGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQoKICB7 CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRp Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyNjAgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09NSWRl bnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJldHVy biBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBuc0NP TVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRlbXBs YXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jl c3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNlUHRy LCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVyeUlu dGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDI5ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMgoKCgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAx CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNv bGV0ZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5h Z2VyLmgiIDEKIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ29tcG9uZW50TWFu YWdlck9ic29sZXRlLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29t cG9uZW50TWFuYWdlck9ic29sZXRlLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lGYWN0b3J5LmgiIDEKIyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUZhY3RvcnkuaCIKY2xhc3MgbnNJRmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwgMHgwMDAwLCAweDAwMDAsIHsgMHhjMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiB9fTsgcmV0dXJuIGlpZDt9CiMgNTMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGYWN0b3J5LmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBDcmVhdGVJbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCAmIGlpZCwg dm9pZCAqICpyZXN1bHQpID0gMDsKIyA2NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SUZhY3RvcnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExvY2tGYWN0b3J5KFBSQm9vbCBsb2NrKSA9 IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFu YWdlck9ic29sZXRlLmgiIDIKCgoKCgoKY2xhc3MgbnNJRmlsZTsKCmNsYXNzIG5zSUVudW1lcmF0 b3I7CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2Vy T2Jzb2xldGUuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDg0NThhNzQwLCAweGQ1ZGMsIDB4MTFkMiwgeyAweDky LCAweGZiLCAweDAwLCAweGUwLCAweDk4LCAweDA1LCAweDU3LCAweDBmIH19OyByZXR1cm4gaWlk O30KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJP YnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQgJiBh Q2xhc3MsIG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNTggIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEdldENsYXNzT2JqZWN0KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJ SUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj b20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250 cmFjdElEVG9DbGFzc0lEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBuc0NJRCAqYUNsYXNzKSA9 IDA7CiMgODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2Vy T2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5z Q0lEICYgYUNsYXNzLCBjaGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5 NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0 ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJiBhQ2xh c3MsIG5zSVN1cHBvcnRzICphRGVsZWdhdGUsIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpf cmV0dmFsKSA9IDA7CiMgMTEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9u ZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZUJ5 Q29udHJhY3RJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0 ZSwgY29uc3QgbnNJSUQgJiBJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDEyMiAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAqYVNwZWMsIGNo YXIgKipfcmV0dmFsKSA9IDA7CiMgMTMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ Q29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGVjRm9yUmVn aXN0cnlMb2NhdGlvbihjb25zdCBjaGFyICphTG9jYXRpb24sIG5zSUZpbGUgKipfcmV0dmFsKSA9 IDA7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdl ck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3RvcnkoY29uc3QgbnND SUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250cmFj dElELCBuc0lGYWN0b3J5ICphRmFjdG9yeSwgUFJCb29sIGFSZXBsYWNlKSA9IDA7CiMgMTY3ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFDbGFz cywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0 IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsK IyAxODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jz b2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50V2l0aFR5cGUoY29u c3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFD b250cmFjdElELCBuc0lGaWxlICphU3BlYywgY29uc3QgY2hhciAqYUxvY2F0aW9uLCBQUkJvb2wg YVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCwgY29uc3QgY2hhciAqYVR5cGUpID0gMDsKIyAyMDcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAm IGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs IG5zSUZpbGUgKmFMaWJyYXJ5LCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCkgPSAw OwojIDIyNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJP YnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRMaWIoY29uc3Qg bnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250 cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl cnNpc3QpID0gMDsKIyAyMzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l bnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJGYWN0b3J5 KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDI1MiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5o IgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFD bGFzcywgY29uc3QgY2hhciAqYUxvY2F0aW9uKSA9IDA7CiMgMjYxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmls ZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJh cmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19TdGFydHVwID0gMCB9OwoKICBlbnVtIHsg TlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGltZXIgPSAyIH07CgogIGVudW0geyBOU19T aHV0ZG93biA9IDMgfTsKIyAyOTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21w b25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQ UkludDMyIHdoZW4sIG5zSUZpbGUgKmRpcmVjdG9yeSkgPSAwOwojIDMwNiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqYUZp bGVMb2NhdGlvbikgPSAwOwojIDMxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNv bXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0 ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMg MzI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29s ZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQgJiBhQ2xh c3MsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMzNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRW51 bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CiMgMzQ3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDb250cmFjdElEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZh bCkgPSAwOwoKfTsKIyA1OTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l bnRNYW5hZ2VyT2Jzb2xldGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnND b21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMQojIDYwMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAyCiMgNDIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAyCgpjbGFzcyBuc0lF bnVtZXJhdG9yOwpjbGFzcyBuc0lGYWN0b3J5OwpjbGFzcyBuc0lGaWxlOwojIDY4ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKZXh0ZXJu IG5zcmVzdWx0Ck5TX0dldEdsb2JhbENvbXBvbmVudE1hbmFnZXIobnNJQ29tcG9uZW50TWFuYWdl ciogKnJlc3VsdCk7CgoKCgpjbGFzcyBuc0NvbXBvbmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3Rh dGljIG5zcmVzdWx0IEluaXRpYWxpemUodm9pZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZh Y3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRmFjdG9yeSAqKmFGYWN0b3J5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVj dChjb25zdCBuc0NJRCAmYUNsYXNzLCBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENv bnRyYWN0SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNDSUQgKmFDbGFzcyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENM U0lEVG9Db250cmFjdElEKG5zQ0lEICphQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciogKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciogKmFDb250cmFjdElEKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShj b25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT dXBwb3J0cyAqYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFS ZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFD b250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq YURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAm YUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoK CiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElE LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3Rvcnks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDEy MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ29tcG9uZW50TWFuYWdlck9ic29sZXRl LmgiCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICZhQ2xh c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeVBlcnNp c3RlbnREZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFS ZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsK CgoKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICZh Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNs YXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICph Q29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICph TGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxh Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsK CgoKCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50TGliKGNvbnN0IG5zQ0lEICZh Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICphZGxsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkJvb2wgYVBlcnNpc3QpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFj dG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lGYWN0b3J5ICphRmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3Rl ckNvbXBvbmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFMaWJyYXJ5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBV bnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeVNwZWMpOwoKCiAg c3RhdGljIG5zcmVzdWx0IEZyZWVMaWJyYXJpZXModm9pZCk7CgoKCgoKICBzdGF0aWMgbnNyZXN1 bHQgQXV0b1JlZ2lzdGVyKFBSSW50MzIgd2hlbiwgbnNJRmlsZSogZGlyZWN0b3J5KTsKICBzdGF0 aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAq Y29tcG9uZW50KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJ bnQzMiB3aGVuLCBuc0lGaWxlICpjb21wb25lbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IElzUmVn aXN0ZXJlZChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICphUmVnaXN0ZXJlZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ0xT SURzKG5zSUVudW1lcmF0b3IqKiBhRW11bWVyYXRvcik7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51 bWVyYXRlQ29udHJhY3RJRHMobnNJRW51bWVyYXRvcioqIGFFbXVtZXJhdG9yKTsKCn07CiMgMzMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIiAy CiMgNDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJVdGls cy5oIgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlQnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVy CnsKcHVibGljOgogICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBjb25zdCBuc0NJRCYgYUNJRCwg bnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0ciApCiAgICAgICAgOiBtQ0lE KGFDSUQpLAogICAgICAgICAgbU91dGVyKGFPdXRlciksCiAgICAgICAgICBtRXJyb3JQdHIoYUVy cm9yUHRyKQogICAgewoKICAgIH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNv bnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7Cgpwcml2YXRlOgogICAgY29uc3QgbnNDSUQmIG1D SUQ7CiAgICBuc0lTdXBwb3J0cyogbU91dGVyOwogICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKfTsK CmNsYXNzIG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVs cGVyCnsKcHVibGljOgogICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hh ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg KQogICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgICAgbU91dGVyKGFP dXRlciksCiAgICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgIHZp cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK CnByaXZhdGU6CiAgICBjb25zdCBjaGFyKiBtQ29udHJhY3RJRDsKICAgIG5zSVN1cHBvcnRzKiBt T3V0ZXI7CiAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zQ3JlYXRl SW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zcmVz dWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQs IDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVh dGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVz dWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQs IGFPdXRlciwgZXJyb3IpOwp9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJh Y3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0 KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChh Q29udHJhY3RJRCwgMCwgZXJyb3IpOwp9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5 Q29udHJhY3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5z SVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnND cmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChhQ29udHJhY3RJRCwgYU91dGVyLCBlcnJvcik7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbENy ZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgIG5z SVN1cHBvcnRzICphRGVsZWdhdGUsCiAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBl KiogYURlc3RpbmF0aW9uICkKewogICAgOwoKICAgIHJldHVybiBuc0NvbXBvbmVudE1hbmFnZXI6 OkNyZWF0ZUluc3RhbmNlKGFDbGFzcywgYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpH ZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl aW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KGFEZXN0aW5hdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbENyZWF0ZUluc3RhbmNlKCBj b25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uVHlwZSoq IGFEZXN0aW5hdGlvbiApCnsKICAgIDsKCiAgICByZXR1cm4gbnNDb21wb25lbnRNYW5hZ2VyOjpD cmVhdGVJbnN0YW5jZShhQ2xhc3MsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf Y2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5h dGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIg KmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphRGVsZWdhdGUs CiAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKewog ICAgOwogICAgOwoKICAgIHJldHVybiBuc0NvbXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNl KGFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQq KiA+KGFEZXN0aW5hdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgpp bmxpbmUKbnNyZXN1bHQKQ2FsbENyZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFyICphQ29udHJhY3RJ RCwKICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdGluYXRpb24gKQp7 CiAgICA7CiAgICA7CgogICAgcmV0dXJuIG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFu Y2UoYUNvbnRyYWN0SUQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwg dm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5h bWVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4g Y29uc3QgY2hhciBsYXN0TW9kVmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXpl VmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKZXh0 ZXJuIGNvbnN0IGNoYXIgc3RhdGljQ29tcG9uZW50VHlwZVtdOwojIDE1OSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMgojIDIzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIgMgoKCgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJU2NyaXB0YWJsZUludGVyZmFjZXMuaCIgMQojIDE0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVNjcmlwdGFibGVJbnRlcmZhY2Vz LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFjZUluZm9NYW5h Z2VyLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFjZUlu Zm9NYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFj ZUluZm8uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJmYWNl SW5mby5oIgpjbGFzcyBuc1hQVE1ldGhvZEluZm87CmNsYXNzIG5zWFBUQ29uc3RhbnQ7CmNsYXNz IG5zWFBUUGFyYW1JbmZvOwpjbGFzcyBuc1hQVFR5cGU7CiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lJbnRlcmZhY2VJbmZvLmgiCmNsYXNzIG5zSUludGVyZmFjZUluZm8gOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MjE1ZGJlMDQsIDB4OTRhNywgMHgxMWQy LCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlSUlEKG5zSUlEICogKmFJbnRlcmZh Y2VJSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTY3JpcHRhYmxlKFBSQm9vbCAqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJSW50ZXJmYWNlSW5m byAqICphUGFyZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZENvdW50 KFBSVWludDE2ICphTWV0aG9kQ291bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29u c3RhbnRDb3VudChQUlVpbnQxNiAqYUNvbnN0YW50Q291bnQpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNZXRob2RJbmZvKFBSVWludDE2IGluZGV4LCBjb25zdCBuc1hQVE1ldGhv ZEluZm8gKiAqaW5mbykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRob2RJbmZvRm9y TmFtZShjb25zdCBjaGFyICptZXRob2ROYW1lLCBQUlVpbnQxNiAqaW5kZXgsIGNvbnN0IG5zWFBU TWV0aG9kSW5mbyAqICppbmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnN0YW50 KFBSVWludDE2IGluZGV4LCBjb25zdCBuc1hQVENvbnN0YW50ICogKmNvbnN0YW50KSA9IDA7CgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9yUGFyYW0oUFJVaW50MTYgbWV0aG9kSW5k ZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIG5zSUludGVyZmFjZUluZm8gKipfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJREZvclBhcmFtKFBSVWludDE2IG1l dGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBuc0lJRCAqICpfcmV0dmFs KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGVGb3JQYXJhbShQUlVpbnQxNiBt ZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgUFJVaW50MTYgZGltZW5z aW9uLCBuc1hQVFR5cGUgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6 ZUlzQXJnTnVtYmVyRm9yUGFyYW0oUFJVaW50MTYgbWV0aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFy YW1JbmZvICogcGFyYW0sIFBSVWludDE2IGRpbWVuc2lvbiwgUFJVaW50OCAqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGhJc0FyZ051bWJlckZvclBhcmFtKFBSVWlu dDE2IG1ldGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQxNiBk aW1lbnNpb24sIFBSVWludDggKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SW50ZXJmYWNlSXNBcmdOdW1iZXJGb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3Qg bnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgUFJVaW50OCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBJc0lJRChjb25zdCBuc0lJRCAqIElJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVTaGFyZWQoY29uc3QgY2hhciAqKm5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUlEU2hhcmVkKGNvbnN0IG5zSUlEICogKmlpZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0Z1bmN0aW9uKFBSQm9vbCAqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBbmNlc3Rvcihjb25zdCBuc0lJRCAqIGlpZCwgUFJC b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJREZvclBhcmFtTm9B bGxvYyhQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwg bnNJSUQgKmlpZCkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SUludGVyZmFjZUluZm9NYW5hZ2VyLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJRW51bWVyYXRvci5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lFbnVtZXJhdG9yLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNp bXBsZUVudW1lcmF0b3IuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ U2ltcGxlRW51bWVyYXRvci5oIgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxODk5MjQwLCAweGY5ZDIsIDB4MTFkMiwgeyAweGJk LCAweGQ2LCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0IH19OyByZXR1cm4gaWlk O30KIyA1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNpbXBsZUVudW1lcmF0b3Iu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc01vcmVFbGVtZW50cyhQUkJvb2wgKl9yZXR2YWwpID0g MDsKIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNpbXBsZUVudW1lcmF0b3Iu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHQobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7 Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRW51bWVyYXRvci5oIiAy CgoKCgoKCgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld0VtcHR5RW51bWVyYXRvcihuc0lTaW1w bGVFbnVtZXJhdG9yKiogYVJlc3VsdCk7CiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUVudW1lcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YWQzODUyODYsIDB4Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2Es IDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0KHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBOZXh0KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3VycmVudEl0ZW0obnNJ U3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRG9uZSh2 b2lkKSA9IDA7Cgp9OwojIDE0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUVudW1l cmF0b3IuaCIKY2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IgOiBwdWJsaWMgbnNJRW51 bWVyYXRvciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3NWYxNThhMCwgMHhjYWRkLCAweDExZDIsIHsgMHg4Yywg MHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9 CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFzdCh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgUHJldih2b2lkKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj b20vbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIuaCIgMgojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIuaCIKY2xhc3MgbnNJSW50ZXJmYWNlSW5m b01hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGIxNjE5MDAsIDB4 YmUyYiwgMHgxMWQyLCB7IDB4OTgsIDB4MzEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQs IDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9ySUlE KGNvbnN0IG5zSUlEICogaWlkLCBuc0lJbnRlcmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9yTmFtZShjb25zdCBjaGFyICpuYW1lLCBuc0lJbnRl cmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSURGb3JO YW1lKGNvbnN0IGNoYXIgKm5hbWUsIG5zSUlEICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TmFtZUZvcklJRChjb25zdCBuc0lJRCAqIGlpZCwgY2hhciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlSW50ZXJmYWNlcyhuc0lFbnVtZXJh dG9yICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvUmVnaXN0ZXJJbnRl cmZhY2VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlSW50ZXJmYWNl c1dob3NlTmFtZXNTdGFydFdpdGgoY29uc3QgY2hhciAqcHJlZml4LCBuc0lFbnVtZXJhdG9yICoq X3JldHZhbCkgPSAwOwoKfTsKIyAxNzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJ bnRlcmZhY2VJbmZvTWFuYWdlci5oIgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvU3VwZXJNYW5hZ2Vy IDogcHVibGljIG5zSUludGVyZmFjZUluZm9NYW5hZ2VyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDBlZTIyODUw LCAweGJjNmEsIDB4MTFkNSwgeyAweDkxLCAweDM0LCAweDAwLCAweDEwLCAweGE0LCAweGU3LCAw eDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQWRkaXRp b25hbE1hbmFnZXIobnNJSW50ZXJmYWNlSW5mb01hbmFnZXIgKm1hbmFnZXIpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQWRkaXRpb25hbE1hbmFnZXIobnNJSW50ZXJmYWNlSW5mb01h bmFnZXIgKm1hbmFnZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQWRkaXRpb25hbE1h bmFnZXJzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh dGVBZGRpdGlvbmFsTWFuYWdlcnMobnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsK Cn07CiMgMTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJU2NyaXB0YWJsZUlu dGVyZmFjZXMuaCIgMgojIDMzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVNj cmlwdGFibGVJbnRlcmZhY2VzLmgiCmNsYXNzIG5zSVNjcmlwdGFibGVJbnRlcmZhY2VzIDogcHVi bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAxYzc4YzY1LCAweDMxZGEsIDB4NDU2Yiwg eyAweDkwLCAweGJmLCAweGRhLCAweDM5LCAweGQwLCAweDlmLCAweGRjLCAweGJmIH19OyByZXR1 cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFuYWdlcihuc0lJbnRlcmZhY2VJbmZv TWFuYWdlciAqICphTWFuYWdlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFuYWdlcihu c0lJbnRlcmZhY2VJbmZvTWFuYWdlciAqIGFNYW5hZ2VyKSA9IDA7Cgp9OwojIDI3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIgMgojIDQ1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29t cG9uZW50c19DbGFzc2VzIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDk3OGZm NTIwLCAweGQyNmMsIDB4MTFkMiwgeyAweDk4LCAweDQyLCAweDAwLCAweDYwLCAweDA4LCAweDk2 LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCn07CiMgMTA3ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19D bGFzc2VzQnlJRCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMzZhOTU5MCwg MHg0ZDE5LCAweDExZDMsIHsgMHg5OCwgMHg5MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgy NCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDE2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfUmVzdWx0 cyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyZmMyMjlhMCwgMHg1ODYwLCAw eDExZDMsIHsgMHg5OCwgMHg5OSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9 fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVj dC94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfSUQgOiBwdWJsaWMgbnNJ U3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Nzk5NGE2ZTAsIDB4ZTAyOCwgMHgxMWQzLCB7IDB4OGYs IDB4NWQsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7 fQoKfTsKIyAyOTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjY29tcG9uZW50 cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0V4Y2VwdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0 cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7MHg1YmYwMzljMCwgMHhlMDI4LCAweDExZDMsIHsgMHg4ZiwgMHg1ZCwg MHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9Cgp9Owoj IDM1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNs YXNzIG5zSVhQQ0NvbXBvbmVudHNfQ29uc3RydWN0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4ODg2NTU2NDAsIDB4ZTAyOCwgMHgxMWQzLCB7IDB4OGYsIDB4NWQsIDB4MDAs IDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKfTsKIyA0MTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjY29tcG9uZW50cy5oIgpjbGFzcyBu c0lYUENDb25zdHJ1Y3RvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhjODE0 Y2EyMCwgMHhlMGRjLCAweDExZDMsIHsgMHg4ZiwgMHg1ZiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhl NywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENs YXNzSUQobnNJSlNDSUQgKiAqYUNsYXNzSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SW50ZXJmYWNlSUQobnNJSlNJSUQgKiAqYUludGVyZmFjZUlEKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEluaXRpYWxpemVyKGNoYXIgKiAqYUluaXRpYWxpemVyKSA9IDA7Cgp9OwojIDUx MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNsYXNz IG5zSVhQQ0NvbXBvbmVudHMgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NDI2 MjRmODAsIDB4ZDI2YywgMHgxMWQyLCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4 OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ bnRlcmZhY2VzKG5zSVNjcmlwdGFibGVJbnRlcmZhY2VzICogKmFJbnRlcmZhY2VzKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzZXMobnNJWFBDQ29tcG9uZW50c19DbGFzc2VzICog KmFDbGFzc2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzZXNCeUlEKG5zSVhQ Q0NvbXBvbmVudHNfQ2xhc3Nlc0J5SUQgKiAqYUNsYXNzZXNCeUlEKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFN0YWNrKG5zSVN0YWNrRnJhbWUgKiAqYVN0YWNrKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFJlc3VsdHMobnNJWFBDQ29tcG9uZW50c19SZXN1bHRzICogKmFSZXN1 bHRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1hbmFnZXIobnNJQ29tcG9uZW50TWFu YWdlciAqICphTWFuYWdlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJRChuc0lYUEND b21wb25lbnRzX0lEICogKmFJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRp b24obnNJWFBDQ29tcG9uZW50c19FeGNlcHRpb24gKiAqYUV4Y2VwdGlvbikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb25zdHJ1Y3Rvcihuc0lYUENDb21wb25lbnRzX0NvbnN0cnVjdG9y ICogKmFDb25zdHJ1Y3RvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N1Y2Nlc3NDb2Rl KG5zcmVzdWx0IHJlc3VsdCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IExvb2t1cE1ldGhvZCh2b2lkKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIiAyCiMgMzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUV4Y2VwdGlvblNlcnZpY2UuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJRXhjZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25Qcm92aWRlciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc3NzQ0YywgMHhjMWQyLCAweDQ3 ZjIsIHsgMHg4YiwgMHhjYywgMHhjZSwgMHg3YSwgMHg5ZSwgMHg1YSwgMHg4OCwgMHhmYyB9fTsg cmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRpb24obnNyZXN1bHQg cmVzdWx0LCBuc0lFeGNlcHRpb24gKmRlZmF1bHRFeGNlcHRpb24sIG5zSUV4Y2VwdGlvbiAqKl9y ZXR2YWwpID0gMDsKCn07CiMgOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lFeGNl cHRpb25TZXJ2aWNlLmgiCmNsYXNzIG5zSUV4Y2VwdGlvbk1hbmFnZXIgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4ZWZjOWQwMGIsIDB4MjMxYywgMHg0ZmViLCB7IDB4ODUsIDB4 MmMsIDB4YWMsIDB4MDEsIDB4NzIsIDB4NjYsIDB4YTQsIDB4MTUgfX07IHJldHVybiBpaWQ7fQoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q3VycmVudEV4Y2VwdGlvbihuc0lFeGNlcHRpb24gKmVy cm9yKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50RXhjZXB0aW9uKG5zSUV4 Y2VwdGlvbiAqKl9yZXR2YWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRp b25Gcm9tUHJvdmlkZXIobnNyZXN1bHQgcmMsIG5zSUV4Y2VwdGlvbiAqZGVmYXVsdEV4Y2VwdGlv biwgbnNJRXhjZXB0aW9uICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxOTIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lFeGNlcHRpb25TZXJ2aWNlLmgiCmNsYXNzIG5zSUV4Y2VwdGlvblNl cnZpY2UgOiBwdWJsaWMgbnNJRXhjZXB0aW9uTWFuYWdlciB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzNWE4OGY1 NCwgMHhmMjY3LCAweDQ0MTQsIHsgMHg5MiwgMHhhNywgMHgxOSwgMHgxZiwgMHg2NCwgMHg1NCwg MHhhYiwgMHg1MiB9fTsgcmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJy ZW50RXhjZXB0aW9uTWFuYWdlcihuc0lFeGNlcHRpb25NYW5hZ2VyICogKmFDdXJyZW50RXhjZXB0 aW9uTWFuYWdlcikgPSAwOwojIDIxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUV4 Y2VwdGlvblNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRXhjZXB0aW9uUHJv dmlkZXIobnNJRXhjZXB0aW9uUHJvdmlkZXIgKnByb3ZpZGVyLCBQUlVpbnQzMiBtb2R1bGVDb2Rl KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJFeGNlcHRpb25Qcm92aWRlcihu c0lFeGNlcHRpb25Qcm92aWRlciAqcHJvdmlkZXIsIFBSVWludDMyIG1vZHVsZUNvZGUpID0gMDsK Cn07CiMgMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0Lmgi IDIKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIiAxCiMgNDAg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2pzL2pzdHlwZXMuaCIgMQojIDYzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0 eXBlcy5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVz LmgiIDIKIyAyMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXV0b2NmZy5oIiAxCiMgMjM2ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvanMvanN0eXBlcy5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pz b3NkZXAuaCIgMQojIDIzNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlwZXMuaCIgMgoK CgoKZXh0ZXJuICJDIiB7CiMgMjUxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5o Igp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgSlNVaW50ODsKdHlwZWRlZiBzaWduZWQgY2hhciBKU0lu dDg7CiMgMjY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5oIgp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IEpTVWludDE2Owp0eXBlZGVmIHNob3J0IEpTSW50MTY7CiMgMjc3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBKU1Vp bnQzMjsKdHlwZWRlZiBpbnQgSlNJbnQzMjsKIyAzMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9q cy9qc3R5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIEpTSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIEpTVWludDY0OwojIDMzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlw ZXMuaCIKdHlwZWRlZiBpbnQgSlNJbnRuOwp0eXBlZGVmIHVuc2lnbmVkIGludCBKU1VpbnRuOwoj IDM0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlwZXMuaCIKdHlwZWRlZiBkb3VibGUg SlNGbG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBKU1NpemU7CgoKCgoKCgp0eXBlZGVmIHB0 cmRpZmZfdCBKU1B0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgSlNVcHRyZGlm ZjsKIyAzNzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCnR5cGVkZWYgSlNJ bnRuIEpTQm9vbDsKIyAzODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCnR5 cGVkZWYgSlNVaW50OCBKU1BhY2tlZEJvb2w7CgoKCgp0eXBlZGVmIGxvbmcgSlNXb3JkOwp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgSlNVd29yZDsKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz L2pzb3R5cGVzLmgiIDEKIyAzOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgi IDIKCn0KIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2NvbXBhdC5oIiAxCiMgNDUgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9qcy9qc2NvbXBhdC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2xv bmcuaCIgMQojIDQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNsb25nLmgiCmV4dGVybiAi QyIgewojIDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNsb25nLmgiCmV4dGVybiBKU0lu dDY0IEpTTExfTWF4SW50KHZvaWQpOwpleHRlcm4gSlNJbnQ2NCBKU0xMX01pbkludCh2b2lkKTsK ZXh0ZXJuIEpTSW50NjQgSlNMTF9aZXJvKHZvaWQpOwojIDQzMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2pzL2pzbG9uZy5oIgp9CiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2NvbXBh dC5oIiAyCgp0eXBlZGVmIEpTSW50biBpbnROOwp0eXBlZGVmIEpTVWludG4gdWludE47CnR5cGVk ZWYgSlNVd29yZCBqc3V3b3JkOwp0eXBlZGVmIEpTV29yZCBqc3dvcmQ7CnR5cGVkZWYgZmxvYXQg ZmxvYXQzMjsKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIgMgoKZXh0 ZXJuICJDIiB7CgoKdHlwZWRlZiB1aW50MTYganNjaGFyOwp0eXBlZGVmIGludDMyIGpzaW50Owp0 eXBlZGVmIHVpbnQzMiBqc3VpbnQ7CnR5cGVkZWYgZmxvYXQ2NCBqc2RvdWJsZTsKdHlwZWRlZiBq c3dvcmQganN2YWw7CnR5cGVkZWYganN3b3JkIGpzaWQ7CnR5cGVkZWYgaW50MzIganNyZWZjb3Vu dDsKCnR5cGVkZWYgZW51bSBKU1ZlcnNpb24gewogICAgSlNWRVJTSU9OXzFfMCA9IDEwMCwKICAg IEpTVkVSU0lPTl8xXzEgPSAxMTAsCiAgICBKU1ZFUlNJT05fMV8yID0gMTIwLAogICAgSlNWRVJT SU9OXzFfMyA9IDEzMCwKICAgIEpTVkVSU0lPTl8xXzQgPSAxNDAsCiAgICBKU1ZFUlNJT05fMV81 ID0gMTUwLAogICAgSlNWRVJTSU9OX0RFRkFVTFQgPSAwLAogICAgSlNWRVJTSU9OX1VOS05PV04g PSAtMQp9IEpTVmVyc2lvbjsKCgoKCgp0eXBlZGVmIGVudW0gSlNUeXBlIHsKICAgIEpTVFlQRV9W T0lELAogICAgSlNUWVBFX09CSkVDVCwKICAgIEpTVFlQRV9GVU5DVElPTiwKICAgIEpTVFlQRV9T VFJJTkcsCiAgICBKU1RZUEVfTlVNQkVSLAogICAgSlNUWVBFX0JPT0xFQU4sCiAgICBKU1RZUEVf TElNSVQKfSBKU1R5cGU7CgoKdHlwZWRlZiBlbnVtIEpTQWNjZXNzTW9kZSB7CiAgICBKU0FDQ19Q Uk9UTyA9IDAsCiAgICBKU0FDQ19QQVJFTlQgPSAxLAogICAgSlNBQ0NfSU1QT1JUID0gMiwKICAg IEpTQUNDX1dBVENIID0gMywKICAgIEpTQUNDX1JFQUQgPSA0LAogICAgSlNBQ0NfV1JJVEUgPSA4 LAogICAgSlNBQ0NfTElNSVQKfSBKU0FjY2Vzc01vZGU7CgoKCgoKCgp0eXBlZGVmIGVudW0gSlNJ dGVyYXRlT3AgewogICAgSlNFTlVNRVJBVEVfSU5JVCwKICAgIEpTRU5VTUVSQVRFX05FWFQsCiAg ICBKU0VOVU1FUkFURV9ERVNUUk9ZCn0gSlNJdGVyYXRlT3A7CgoKdHlwZWRlZiBzdHJ1Y3QgSlND bGFzcyBKU0NsYXNzOwp0eXBlZGVmIHN0cnVjdCBKU0NvbnN0RG91YmxlU3BlYyBKU0NvbnN0RG91 YmxlU3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNDb250ZXh0IEpTQ29udGV4dDsKdHlwZWRlZiBzdHJ1 Y3QgSlNFcnJvclJlcG9ydCBKU0Vycm9yUmVwb3J0Owp0eXBlZGVmIHN0cnVjdCBKU0Z1bmN0aW9u IEpTRnVuY3Rpb247CnR5cGVkZWYgc3RydWN0IEpTRnVuY3Rpb25TcGVjIEpTRnVuY3Rpb25TcGVj Owp0eXBlZGVmIHN0cnVjdCBKU0lkQXJyYXkgSlNJZEFycmF5Owp0eXBlZGVmIHN0cnVjdCBKU1By b3BlcnR5IEpTUHJvcGVydHk7CnR5cGVkZWYgc3RydWN0IEpTUHJvcGVydHlTcGVjIEpTUHJvcGVy dHlTcGVjOwp0eXBlZGVmIHN0cnVjdCBKU09iamVjdCBKU09iamVjdDsKdHlwZWRlZiBzdHJ1Y3Qg SlNPYmplY3RNYXAgSlNPYmplY3RNYXA7CnR5cGVkZWYgc3RydWN0IEpTT2JqZWN0T3BzIEpTT2Jq ZWN0T3BzOwp0eXBlZGVmIHN0cnVjdCBKU1J1bnRpbWUgSlNSdW50aW1lOwp0eXBlZGVmIHN0cnVj dCBKU1J1bnRpbWUgSlNUYXNrU3RhdGU7CnR5cGVkZWYgc3RydWN0IEpTU2NyaXB0IEpTU2NyaXB0 Owp0eXBlZGVmIHN0cnVjdCBKU1N0cmluZyBKU1N0cmluZzsKdHlwZWRlZiBzdHJ1Y3QgSlNYRFJT dGF0ZSBKU1hEUlN0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU0V4Y2VwdGlvblN0YXRlIEpTRXhjZXB0 aW9uU3RhdGU7CnR5cGVkZWYgc3RydWN0IEpTTG9jYWxlQ2FsbGJhY2tzIEpTTG9jYWxlQ2FsbGJh Y2tzOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBK U0Jvb2wKKCogSlNQcm9wZXJ0eU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3Zh bCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKIyAxNjMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVkZWYgSlNCb29sCigqIEpT TmV3RW51bWVyYXRlT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0l0ZXJhdGVPcCBlbnVtX29wLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnN0YXRlcCwganNpZCAqaWRwKTsKCgoK Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0VudW1lcmF0ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqKTsKIyAxODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVk ZWYgSlNCb29sCigqIEpTUmVzb2x2ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBq c3ZhbCBpZCk7CiMgMjAwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBl ZGVmIEpTQm9vbAooKiBKU05ld1Jlc29sdmVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gZmxh Z3MsIEpTT2JqZWN0ICoqb2JqcCk7CgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNDb252ZXJ0T3Ap KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTVHlwZSB0eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CgoKCgoKCnR5cGVkZWYgdm9pZAooKiBKU0Zp bmFsaXplT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKCgoKCnR5cGVkZWYgdm9p ZAooKiBKU1N0cmluZ0ZpbmFsaXplT3ApKEpTQ29udGV4dCAqY3gsIEpTU3RyaW5nICpzdHIpOwoj IDI0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBKU09iamVj dE9wcyAqCigqIEpTR2V0T2JqZWN0T3BzKShKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCk7 CiMgMjYxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9v bAooKiBKU0NoZWNrQWNjZXNzT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFs IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FjY2Vzc01vZGUgbW9k ZSwganN2YWwgKnZwKTsKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU1hEUk9iamVjdE9wKShKU1hE UlN0YXRlICp4ZHIsIEpTT2JqZWN0ICoqb2JqcCk7CgoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpT SGFzSW5zdGFuY2VPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgdiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCb29sICpicCk7CiMgMjk5ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIHVpbnQzMgooKiBKU01hcmtP cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdm9pZCAqYXJnKTsKIyAzMTcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVkZWYgSlNPYmplY3RNYXAgKgooKiBK U05ld09iamVjdE1hcE9wKShKU0NvbnRleHQgKmN4LCBqc3JlZmNvdW50IG5yZWZzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RPcHMgKm9wcywgSlNDbGFzcyAq Y2xhc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq KTsKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNPYmplY3RNYXBPcCkoSlNDb250ZXh0ICpjeCwgSlNP YmplY3RNYXAgKm1hcCk7CiMgMzQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5o Igp0eXBlZGVmIEpTQm9vbAooKiBKU0xvb2t1cFByb3BPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i amVjdCAqKm9ianAsIEpTUHJvcGVydHkgKipwcm9wcAoKCgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKIyAzNjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgi CnR5cGVkZWYgSlNCb29sCigqIEpTRGVmaW5lUHJvcE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaWQgaWQsIGpzdmFs IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBn ZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludE4gYXR0cnMsIEpTUHJvcGVydHkgKipwcm9wcCk7CiMgMzgwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU1Byb3BlcnR5SWRP cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKCgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCog SlNBdHRyaWJ1dGVzT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eSAqcHJvcCwgdWludE4g KmF0dHJzcCk7CgoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpTQ2hlY2tBY2Nlc3NJZE9wKShKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2lkIGlkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTQWNjZXNzTW9kZSBtb2RlLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gKmF0dHJzcCk7CgoKCgoKCnR5cGVkZWYg SlNPYmplY3QgKgooKiBKU09iamVjdE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsK CgoKCgoKCnR5cGVkZWYgdm9pZAooKiBKU1Byb3BlcnR5UmVmT3ApKEpTQ29udGV4dCAqY3gsIEpT T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVy dHkgKnByb3ApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU1NldE9iamVjdFNsb3RPcCkoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzIgc2xvdCwgSlNPYmplY3QgKnBvYmopOwojIDQ0NCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBqc3ZhbAooKiBKU0dldFJlcXVpcmVkU2xv dE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyIHNsb3QpOwoKdHlwZWRlZiB2b2lkCigqIEpTU2V0UmVx dWlyZWRTbG90T3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgc2xvdCwganN2YWwgdik7CgoKCnR5cGVk ZWYgSlNCb29sCigqIEpTTmF0aXZlKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCB1aW50 TiBhcmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICphcmd2LCBqc3ZhbCAq cnZhbCk7CgoKCnR5cGVkZWYgZW51bSBKU0dDU3RhdHVzIHsKICAgIEpTR0NfQkVHSU4sCiAgICBK U0dDX0VORCwKICAgIEpTR0NfTUFSS19FTkQsCiAgICBKU0dDX0ZJTkFMSVpFX0VORAp9IEpTR0NT dGF0dXM7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0dDQ2FsbGJhY2spKEpTQ29udGV4dCAqY3gsIEpT R0NTdGF0dXMgc3RhdHVzKTsKCnR5cGVkZWYgSlNCb29sCigqIEpTQnJhbmNoQ2FsbGJhY2spKEpT Q29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKdHlwZWRlZiB2b2lkCigqIEpTRXJyb3JS ZXBvcnRlcikoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvclJlcG9ydCAqcmVwb3J0KTsKCnR5cGVkZWYg c3RydWN0IEpTRXJyb3JGb3JtYXRTdHJpbmcgewogICAgY29uc3QgY2hhciAqZm9ybWF0OwogICAg dWludE4gYXJnQ291bnQ7Cn0gSlNFcnJvckZvcm1hdFN0cmluZzsKCnR5cGVkZWYgY29uc3QgSlNF cnJvckZvcm1hdFN0cmluZyAqCigqIEpTRXJyb3JDYWxsYmFjaykodm9pZCAqdXNlclJlZiwgY29u c3QgY2hhciAqbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50TiBlcnJvck51bWJlcik7CiMgNDk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNw dWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU0xvY2FsZVRvVXBwZXJDYXNlKShKU0NvbnRleHQg KmN4LCBKU1N0cmluZyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganN2YWwgKnJ2YWwpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb2NhbGVUb0xvd2VyQ2FzZSko SlNDb250ZXh0ICpjeCwgSlNTdHJpbmcgKnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzdmFsICpydmFsKTsKCnR5cGVkZWYgSlNCb29sCigqIEpTTG9jYWxlQ29t cGFyZSkoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SlNTdHJpbmcgKnNyYzEsIEpTU3RyaW5nICpzcmMyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgoKCgp0eXBlZGVmIHN0cnVjdCBKU1ByaW5jaXBhbHMg SlNQcmluY2lwYWxzOwojIDUyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIK dHlwZWRlZiBKU0Jvb2wKKCogSlNQcmluY2lwYWxzVHJhbnNjb2RlcikoSlNYRFJTdGF0ZSAqeGRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxz ICoqcHJpbmNpcGFsc3ApOwoKfQojIDQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0 L25zSVhQQ29ubmVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdGlu Zm8uaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0aW5mby5oIgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiIDEKIyA0NiAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20veHB0X2FyZW5hLmgiIDEKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL3hwdF9hcmVuYS5oIgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0 ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp dHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QK ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNp Z25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2Rl Ojg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWlu YXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZh bDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVk IGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDIgMwojIDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgp0eXBl ZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0 eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAg fSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9u ZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwoKCiMg MTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9t Yl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25z dCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25w dHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUg c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBm bG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBs b25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0 b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg ICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRv cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg IHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp OwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog ICAgIHRocm93ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9u ZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpl eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVy biBsb25nIGxvbmcgaW50IHN0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHN0 cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAg ICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3Ry dG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBk b3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkK ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n IGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg X19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFy ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkK ICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBf X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0 cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3Ry dG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJu IF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2Zf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK ewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg MCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGlu dApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf X3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBf X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBp bnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0 ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRv ZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25w dHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25z dCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIs IChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIs IChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsK ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KCiMgNDA4 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9f bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyA0MjEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoK CgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAq cnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5k X2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVy biBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv bV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBz ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1 bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNp Z25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgg KHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkg dGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194 c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93 ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb M10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkg dGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2ln bmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9k YXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0 IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVk IHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoK CmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBf X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBt cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNl ZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgoKCgoKCgoK CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwg c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwoKCgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXpl KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJl ZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9f cHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxs b2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90 IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy IDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2 b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIHZvaWQgYWJv cnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0 ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2Fy ZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChp bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK CgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNo YXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChf X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNo YXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDY2MSAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVt cGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBs YXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50 IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjg4ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19j b25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRo cm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQg KiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2Zu X3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2Nv bnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBz aXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNv cnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGlu dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcg aW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxv bmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxv bmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRp diAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hh ciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpx ZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv dyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hh ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhy b3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2 dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJv dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBf X3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFy X3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2Nz dG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp OwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0 aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1 Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBz ZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw b3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3Jh bnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19m ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9f bmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L3hwdF9hcmVuYS5oIiAyCiMgNzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfYXJl bmEuaCIKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgWFBUQXJlbmEgWFBUQXJlbmE7 CgpYUFRBcmVuYSAqClhQVF9OZXdBcmVuYShQUlVpbnQzMiBibG9ja19zaXplLCBzaXplX3QgYWxp Z25tZW50LCBjb25zdCBjaGFyKiBuYW1lKTsKCnZvaWQKWFBUX0Rlc3Ryb3lBcmVuYShYUFRBcmVu YSAqYXJlbmEpOwoKdm9pZApYUFRfRHVtcFN0YXRzKFhQVEFyZW5hICphcmVuYSk7Cgp2b2lkICoK WFBUX0FyZW5hTWFsbG9jKFhQVEFyZW5hICphcmVuYSwgc2l6ZV90IHNpemUpOwoKY2hhciAqClhQ VF9BcmVuYVN0ckR1cChYUFRBcmVuYSAqYXJlbmEsIGNvbnN0IGNoYXIgKiBzKTsKCnZvaWQKWFBU X05vdGlmeURvbmVMb2FkaW5nKFhQVEFyZW5hICphcmVuYSk7Cgp2b2lkClhQVF9BcmVuYUZyZWUo WFBUQXJlbmEgKmFyZW5hLCB2b2lkKiBibG9jayk7CiMgMTMyICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20veHB0X2FyZW5hLmgiCn0KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L3hwdF9zdHJ1Y3QuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS94cHRfc3RydWN0LmgiCnR5cGVkZWYgc3RydWN0IFhQVEhlYWRlciBYUFRIZWFkZXI7 CnR5cGVkZWYgc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IFhQVEludGVyZmFjZURp cmVjdG9yeUVudHJ5Owp0eXBlZGVmIHN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIFhQVElu dGVyZmFjZURlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVENvbnN0RGVzY3JpcHRvciBYUFRD b25zdERlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVE1ldGhvZERlc2NyaXB0b3IgWFBUTWV0 aG9kRGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUUGFyYW1EZXNjcmlwdG9yIFhQVFBhcmFt RGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUVHlwZURlc2NyaXB0b3IgWFBUVHlwZURlc2Ny aXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IFhQVFR5cGVEZXNj cmlwdG9yUHJlZml4Owp0eXBlZGVmIHN0cnVjdCBYUFRTdHJpbmcgWFBUU3RyaW5nOwp0eXBlZGVm IHN0cnVjdCBYUFRBbm5vdGF0aW9uIFhQVEFubm90YXRpb247CiMgMTA0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgpzdHJ1Y3QgWFBUSGVhZGVyIHsKICAgIFBSVWlu dDggbWFnaWNbMTZdOwogICAgUFJVaW50OCBtYWpvcl92ZXJzaW9uOwogICAgUFJVaW50OCBtaW5v cl92ZXJzaW9uOwogICAgUFJVaW50MTYgbnVtX2ludGVyZmFjZXM7CiAgICBQUlVpbnQzMiBmaWxl X2xlbmd0aDsKICAgIFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5ICppbnRlcmZhY2VfZGlyZWN0 b3J5OwogICAgUFJVaW50MzIgZGF0YV9wb29sOwogICAgWFBUQW5ub3RhdGlvbiAqYW5ub3RhdGlv bnM7Cn07CiMgMTczICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgp0 eXBlZGVmIHN0cnVjdCB7CiAgICBjb25zdCBjaGFyKiBzdHI7CiAgICBQUlVpbnQ4IG1ham9yOwog ICAgUFJVaW50OCBtaW5vcjsKICAgIFBSVWludDE2IGNvZGU7Cn0gWFBUX1RZUEVMSUJfVkVSU0lP TlNfU1RSVUNUOwojIDE4NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3Qu aCIKZXh0ZXJuIFBSVWludDE2ClhQVF9QYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgY2hhciogc3Ry LCBQUlVpbnQ4KiBtYWpvciwgUFJVaW50OCogbWlub3IpOwoKZXh0ZXJuIFhQVEhlYWRlciAqClhQ VF9OZXdIZWFkZXIoWFBUQXJlbmEgKmFyZW5hLCBQUlVpbnQxNiBudW1faW50ZXJmYWNlcywKICAg ICAgICAgICAgICBQUlVpbnQ4IG1ham9yX3ZlcnNpb24sIFBSVWludDggbWlub3JfdmVyc2lvbik7 CgpleHRlcm4gdm9pZApYUFRfRnJlZUhlYWRlcihYUFRBcmVuYSAqYXJlbmEsIFhQVEhlYWRlciog YUhlYWRlcik7CgoKZXh0ZXJuIFBSVWludDMyClhQVF9TaXplT2ZIZWFkZXIoWFBUSGVhZGVyICpo ZWFkZXIpOwoKCmV4dGVybiBQUlVpbnQzMgpYUFRfU2l6ZU9mSGVhZGVyQmxvY2soWFBUSGVhZGVy ICpoZWFkZXIpOwoKCgoKCgoKc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IHsKICAg IG5zSUQgaWlkOwogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKm5hbWVfc3BhY2U7CiAgICBYUFRJ bnRlcmZhY2VEZXNjcmlwdG9yICppbnRlcmZhY2VfZGVzY3JpcHRvcjsKCgoKCgp9OwoKZXh0ZXJu IFBSQm9vbApYUFRfRmlsbEludGVyZmFjZURpcmVjdG9yeUVudHJ5KFhQVEFyZW5hICphcmVuYSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRy eSAqaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUQgKmlpZCwgY2hhciAq bmFtZSwgY2hhciAqbmFtZV9zcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY UFRJbnRlcmZhY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yKTsKCmV4dGVybiB2b2lkClhQVF9EZXN0 cm95SW50ZXJmYWNlRGlyZWN0b3J5RW50cnkoWFBUQXJlbmEgKmFyZW5hLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5KiBpZGUpOwoK CgoKCnN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIHsKICAgIFBSVWludDE2IHBhcmVudF9p bnRlcmZhY2U7CiAgICBQUlVpbnQxNiBudW1fbWV0aG9kczsKICAgIFhQVE1ldGhvZERlc2NyaXB0 b3IgKm1ldGhvZF9kZXNjcmlwdG9yczsKICAgIFBSVWludDE2IG51bV9jb25zdGFudHM7CiAgICBY UFRDb25zdERlc2NyaXB0b3IgKmNvbnN0X2Rlc2NyaXB0b3JzOwogICAgUFJVaW50OCBmbGFnczsK IyAyNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiCiAgICBYUFRU eXBlRGVzY3JpcHRvciAqYWRkaXRpb25hbF90eXBlczsKICAgIFBSVWludDE2IG51bV9hZGRpdGlv bmFsX3R5cGVzOwp9OwojIDI3NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1 Y3QuaCIKZXh0ZXJuIFBSQm9vbApYUFRfR2V0SW50ZXJmYWNlSW5kZXhCeU5hbWUoWFBUSW50ZXJm YWNlRGlyZWN0b3J5RW50cnkgKmlkZV9ibG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBSVWludDE2IG51bV9pbnRlcmZhY2VzLCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJVaW50MTYgKmluZGV4cCk7CgpleHRlcm4gWFBUSW50ZXJmYWNlRGVzY3JpcHRv ciAqClhQVF9OZXdJbnRlcmZhY2VEZXNjcmlwdG9yKFhQVEFyZW5hICphcmVuYSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJVaW50MTYgcGFyZW50X2ludGVyZmFjZSwgUFJVaW50MTYgbnVt X21ldGhvZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2IG51bV9jb25zdGFu dHMsIFBSVWludDggZmxhZ3MpOwoKZXh0ZXJuIHZvaWQKWFBUX0ZyZWVJbnRlcmZhY2VEZXNjcmlw dG9yKFhQVEFyZW5hICphcmVuYSwgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciogaWQpOwoKZXh0ZXJu IFBSQm9vbApYUFRfSW50ZXJmYWNlRGVzY3JpcHRvckFkZFR5cGVzKFhQVEFyZW5hICphcmVuYSwg WFBUSW50ZXJmYWNlRGVzY3JpcHRvciAqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJVaW50MTYgbnVtKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURlc2NyaXB0b3JB ZGRNZXRob2RzKFhQVEFyZW5hICphcmVuYSwgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciAqaWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQxNiBudW0pOwoKZXh0ZXJuIFBS Qm9vbApYUFRfSW50ZXJmYWNlRGVzY3JpcHRvckFkZENvbnN0cyhYUFRBcmVuYSAqYXJlbmEsIFhQ VEludGVyZmFjZURlc2NyaXB0b3IgKmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUlVpbnQxNiBudW0pOwoKCgoKCnN0cnVjdCBYUFRTdHJpbmcgewogICAgUFJVaW50MTYgbGVu Z3RoOwogICAgY2hhciAqYnl0ZXM7Cn07CgpleHRlcm4gWFBUU3RyaW5nICoKWFBUX05ld1N0cmlu ZyhYUFRBcmVuYSAqYXJlbmEsIFBSVWludDE2IGxlbmd0aCwgY2hhciAqYnl0ZXMpOwoKZXh0ZXJu IFhQVFN0cmluZyAqClhQVF9OZXdTdHJpbmdaKFhQVEFyZW5hICphcmVuYSwgY2hhciAqYnl0ZXMp OwojIDMzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3QuaCIKc3RydWN0 IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IHsKICAgIFBSVWludDggZmxhZ3M7Cn07CiMgMzUyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgplbnVtIFhQVFR5cGVEZXNj cmlwdG9yVGFncyB7CiAgICBURF9JTlQ4ID0gMCwKICAgIFREX0lOVDE2ID0gMSwKICAgIFREX0lO VDMyID0gMiwKICAgIFREX0lOVDY0ID0gMywKICAgIFREX1VJTlQ4ID0gNCwKICAgIFREX1VJTlQx NiA9IDUsCiAgICBURF9VSU5UMzIgPSA2LAogICAgVERfVUlOVDY0ID0gNywKICAgIFREX0ZMT0FU ID0gOCwKICAgIFREX0RPVUJMRSA9IDksCiAgICBURF9CT09MID0gMTAsCiAgICBURF9DSEFSID0g MTEsCiAgICBURF9XQ0hBUiA9IDEyLAogICAgVERfVk9JRCA9IDEzLAogICAgVERfUE5TSUlEID0g MTQsCiAgICBURF9ET01TVFJJTkcgPSAxNSwKICAgIFREX1BTVFJJTkcgPSAxNiwKICAgIFREX1BX U1RSSU5HID0gMTcsCiAgICBURF9JTlRFUkZBQ0VfVFlQRSA9IDE4LAogICAgVERfSU5URVJGQUNF X0lTX1RZUEUgPSAxOSwKICAgIFREX0FSUkFZID0gMjAsCiAgICBURF9QU1RSSU5HX1NJWkVfSVMg PSAyMSwKICAgIFREX1BXU1RSSU5HX1NJWkVfSVMgPSAyMiwKICAgIFREX1VURjhTVFJJTkcgPSAy MywKICAgIFREX0NTVFJJTkcgPSAyNCwKICAgIFREX0FTVFJJTkcgPSAyNQp9OwoKc3RydWN0IFhQ VFR5cGVEZXNjcmlwdG9yIHsKICAgIFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IHByZWZpeDsKICAg IFBSVWludDggYXJnbnVtOwogICAgUFJVaW50OCBhcmdudW0yOwogICAgdW5pb24gewogICAgICAg IFBSVWludDE2IGlmYWNlOwogICAgICAgIFBSVWludDE2IGFkZGl0aW9uYWxfdHlwZTsKICAgIH0g dHlwZTsKfTsKIyA0MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0Lmgi CnVuaW9uIFhQVENvbnN0VmFsdWUgewogICAgUFJJbnQ4IGk4OwogICAgUFJVaW50OCB1aTg7CiAg ICBQUkludDE2IGkxNjsKICAgIFBSVWludDE2IHVpMTY7CiAgICBQUkludDMyIGkzMjsKICAgIFBS VWludDMyIHVpMzI7CiAgICBQUkludDY0IGk2NDsKICAgIFBSVWludDY0IHVpNjQ7CiAgICBmbG9h dCBmbHQ7CiAgICBkb3VibGUgZGJsOwogICAgUFJCb29sIGJ1bDsKICAgIGNoYXIgY2g7CiAgICBQ UlVpbnQxNiB3Y2g7CiAgICBuc0lEICppaWQ7CiAgICBYUFRTdHJpbmcgKnN0cmluZzsKICAgIGNo YXIgKnN0cjsKICAgIFBSVWludDE2ICp3c3RyOwp9OwoKc3RydWN0IFhQVENvbnN0RGVzY3JpcHRv ciB7CiAgICBjaGFyICpuYW1lOwogICAgWFBUVHlwZURlc2NyaXB0b3IgdHlwZTsKICAgIHVuaW9u IFhQVENvbnN0VmFsdWUgdmFsdWU7Cn07CgoKCgoKc3RydWN0IFhQVFBhcmFtRGVzY3JpcHRvciB7 CiAgICBQUlVpbnQ4IGZsYWdzOwogICAgWFBUVHlwZURlc2NyaXB0b3IgdHlwZTsKfTsKIyA0Njcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wK WFBUX0ZpbGxQYXJhbURlc2NyaXB0b3IoWFBUQXJlbmEgKmFyZW5hLAogICAgICAgICAgICAgICAg ICAgICAgICBYUFRQYXJhbURlc2NyaXB0b3IgKnBkLCBQUlVpbnQ4IGZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICBYUFRUeXBlRGVzY3JpcHRvciAqdHlwZSk7CgoKCgoKc3RydWN0IFhQVE1l dGhvZERlc2NyaXB0b3IgewogICAgY2hhciAqbmFtZTsKICAgIFhQVFBhcmFtRGVzY3JpcHRvciAq cGFyYW1zOwogICAgWFBUUGFyYW1EZXNjcmlwdG9yICpyZXN1bHQ7CiAgICBQUlVpbnQ4IGZsYWdz OwogICAgUFJVaW50OCBudW1fYXJnczsKfTsKIyA0OTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wKWFBUX0ZpbGxNZXRob2REZXNjcmlwdG9y KFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAgICAgICAgIFhQVE1ldGhvZERlc2Ny aXB0b3IgKm1ldGgsIFBSVWludDggZmxhZ3MsIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBQUlVpbnQ4IG51bV9hcmdzKTsKIyA1MjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRBbm5vdGF0aW9uIHsKICAgIFhQVEFubm90YXRp b24gKm5leHQ7CiAgICBQUlVpbnQ4IGZsYWdzOwoKICAgIFhQVFN0cmluZyAqY3JlYXRvcjsKICAg IFhQVFN0cmluZyAqcHJpdmF0ZV9kYXRhOwp9OwoKCgoKCgpleHRlcm4gWFBUQW5ub3RhdGlvbiAq ClhQVF9OZXdBbm5vdGF0aW9uKFhQVEFyZW5hICphcmVuYSwgUFJVaW50OCBmbGFncywgWFBUU3Ry aW5nICpjcmVhdG9yLAogICAgICAgICAgICAgICAgICBYUFRTdHJpbmcgKnByaXZhdGVfZGF0YSk7 Cgp9CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRpbmZvLmgiIDIKIyA3NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdGluZm8uaCIKY2xhc3MgbnNJSW50ZXJmYWNl SW5mb01hbmFnZXI7CmV4dGVybiAiQyIgewoKbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIqClhQVElf R2V0SW50ZXJmYWNlSW5mb01hbmFnZXIoKTsKCgp2b2lkClhQVElfRnJlZUludGVyZmFjZUluZm9N YW5hZ2VyKCk7Cn0KCgoKCgoKCmNsYXNzIG5zWFBUVHlwZSA6IHB1YmxpYyBYUFRUeXBlRGVzY3Jp cHRvclByZWZpeAp7CgpwdWJsaWM6CiAgICBuc1hQVFR5cGUoKQogICAgICAgIHt9CiAgICBuc1hQ VFR5cGUoY29uc3QgWFBUVHlwZURlc2NyaXB0b3JQcmVmaXgmIHByZWZpeCkKICAgICAgICB7KihY UFRUeXBlRGVzY3JpcHRvclByZWZpeCopdGhpcyA9IHByZWZpeDt9CgogICAgbnNYUFRUeXBlKGNv bnN0IHVpbnQ4JiBwcmVmaXgpCiAgICAgICAgeyoodWludDgqKXRoaXMgPSBwcmVmaXg7fQoKICAg IG5zWFBUVHlwZSYgb3BlcmF0b3I9KHVpbnQ4IHZhbCkKICAgICAgICB7ZmxhZ3MgPSB2YWw7IHJl dHVybiAqdGhpczt9CgogICAgbnNYUFRUeXBlJiBvcGVyYXRvcj0oY29uc3QgbnNYUFRUeXBlJiBv dGhlcikKICAgICAgICB7ZmxhZ3MgPSBvdGhlci5mbGFnczsgcmV0dXJuICp0aGlzO30KCiAgICBv cGVyYXRvciB1aW50OCgpIGNvbnN0CiAgICAgICAge3JldHVybiBmbGFnczt9CgogICAgUFJCb29s IElzUG9pbnRlcigpIGNvbnN0CiAgICAgICAge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDgwKSk7 fQoKICAgIFBSQm9vbCBJc1VuaXF1ZVBvaW50ZXIoKSBjb25zdAogICAgICAgIHtyZXR1cm4gMCAh PSAoKGZsYWdzICYgMHg0MCkpO30KCiAgICBQUkJvb2wgSXNSZWZlcmVuY2UoKSBjb25zdAogICAg ICAgIHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgyMCkpO30KCiAgICBQUkJvb2wgSXNBcml0aG1l dGljKCkgY29uc3QKICAgICAgICB7cmV0dXJuIGZsYWdzIDw9IFRfV0NIQVI7fQoKICAgIFBSQm9v bCBJc0ludGVyZmFjZVBvaW50ZXIoKSBjb25zdAogICAgICAgIHsgc3dpdGNoIChUYWdQYXJ0KCkp IHsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg ICAgICAgY2FzZSBUX0lOVEVSRkFDRToKICAgICAgICAgICAgIGNhc2UgVF9JTlRFUkZBQ0VfSVM6 CiAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgIH0KICAgICAgICB9CgogICAgUFJC b29sIElzQXJyYXkoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgVGFnUGFydCgpID09 IFRfQVJSQVk7fQoKCgoKICAgIFBSQm9vbCBJc0RlcGVuZGVudCgpIGNvbnN0CiAgICAgICAgeyBz d2l0Y2ggKFRhZ1BhcnQoKSkgewogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg cmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIFRfSU5URVJGQUNFX0lTOgogICAgICAgICAgICAg Y2FzZSBURF9BUlJBWToKICAgICAgICAgICAgIGNhc2UgVF9QU1RSSU5HX1NJWkVfSVM6CiAgICAg ICAgICAgICBjYXNlIFRfUFdTVFJJTkdfU0laRV9JUzoKICAgICAgICAgICAgICAgcmV0dXJuIDE7 CiAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB1aW50OCBUYWdQYXJ0KCkgY29uc3QKICAgICAg ICB7cmV0dXJuICh1aW50OCkgKGZsYWdzICYgKH4weGUwKSk7fQoKICAgIGVudW0KICAgIHsKICAg ICAgICBUX0k4ID0gVERfSU5UOCAsCiAgICAgICAgVF9JMTYgPSBURF9JTlQxNiAsCiAgICAgICAg VF9JMzIgPSBURF9JTlQzMiAsCiAgICAgICAgVF9JNjQgPSBURF9JTlQ2NCAsCiAgICAgICAgVF9V OCA9IFREX1VJTlQ4ICwKICAgICAgICBUX1UxNiA9IFREX1VJTlQxNiAsCiAgICAgICAgVF9VMzIg PSBURF9VSU5UMzIgLAogICAgICAgIFRfVTY0ID0gVERfVUlOVDY0ICwKICAgICAgICBUX0ZMT0FU ID0gVERfRkxPQVQgLAogICAgICAgIFRfRE9VQkxFID0gVERfRE9VQkxFICwKICAgICAgICBUX0JP T0wgPSBURF9CT09MICwKICAgICAgICBUX0NIQVIgPSBURF9DSEFSICwKICAgICAgICBUX1dDSEFS ID0gVERfV0NIQVIgLAogICAgICAgIFRfVk9JRCA9IFREX1ZPSUQgLAogICAgICAgIFRfSUlEID0g VERfUE5TSUlEICwKICAgICAgICBUX0RPTVNUUklORyA9IFREX0RPTVNUUklORyAsCiAgICAgICAg VF9DSEFSX1NUUiA9IFREX1BTVFJJTkcgLAogICAgICAgIFRfV0NIQVJfU1RSID0gVERfUFdTVFJJ TkcgLAogICAgICAgIFRfSU5URVJGQUNFID0gVERfSU5URVJGQUNFX1RZUEUgLAogICAgICAgIFRf SU5URVJGQUNFX0lTID0gVERfSU5URVJGQUNFX0lTX1RZUEUsCiAgICAgICAgVF9BUlJBWSA9IFRE X0FSUkFZICwKICAgICAgICBUX1BTVFJJTkdfU0laRV9JUyA9IFREX1BTVFJJTkdfU0laRV9JUyAs CiAgICAgICAgVF9QV1NUUklOR19TSVpFX0lTID0gVERfUFdTVFJJTkdfU0laRV9JUyAsCiAgICAg ICAgVF9VVEY4U1RSSU5HID0gVERfVVRGOFNUUklORyAsCiAgICAgICAgVF9DU1RSSU5HID0gVERf Q1NUUklORyAsCiAgICAgICAgVF9BU1RSSU5HID0gVERfQVNUUklORwogICAgfTsKCn07CgpjbGFz cyBuc1hQVFBhcmFtSW5mbyA6IHB1YmxpYyBYUFRQYXJhbURlc2NyaXB0b3IKewoKcHVibGljOgog ICAgbnNYUFRQYXJhbUluZm8oY29uc3QgWFBUUGFyYW1EZXNjcmlwdG9yJiBkZXNjKQogICAgICAg IHsqKFhQVFBhcmFtRGVzY3JpcHRvciopdGhpcyA9IGRlc2M7fQoKCiAgICBQUkJvb2wgSXNJbigp IGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg4MCkpO30KICAgIFBSQm9vbCBJc091dCgp IGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg0MCkpO30KICAgIFBSQm9vbCBJc1JldHZh bCgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgyMCkpO30KICAgIFBSQm9vbCBJc1No YXJlZCgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgxMCkpO30KICAgIFBSQm9vbCBJ c0RpcHBlcigpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgwOCkpO30KICAgIGNvbnN0 IG5zWFBUVHlwZSBHZXRUeXBlKCkgY29uc3Qge3JldHVybiB0eXBlLnByZWZpeDt9CgoKCnByaXZh dGU6CiAgICBuc1hQVFBhcmFtSW5mbygpOwoKfTsKCmNsYXNzIG5zWFBUTWV0aG9kSW5mbyA6IHB1 YmxpYyBYUFRNZXRob2REZXNjcmlwdG9yCnsKCnB1YmxpYzoKICAgIG5zWFBUTWV0aG9kSW5mbyhj b25zdCBYUFRNZXRob2REZXNjcmlwdG9yJiBkZXNjKQogICAgICAgIHsqKFhQVE1ldGhvZERlc2Ny aXB0b3IqKXRoaXMgPSBkZXNjO30KCiAgICBQUkJvb2wgSXNHZXR0ZXIoKSBjb25zdCB7cmV0dXJu IDAgIT0gKChmbGFncyAmIDB4ODApICk7fQogICAgUFJCb29sIElzU2V0dGVyKCkgY29uc3Qge3Jl dHVybiAwICE9ICgoZmxhZ3MgJiAweDQwKSApO30KICAgIFBSQm9vbCBJc05vdFhQQ09NKCkgY29u c3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDIwKSk7fQogICAgUFJCb29sIElzQ29uc3RydWN0 b3IoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFncyAmIDB4MTApICk7fQogICAgUFJCb29sIElz SGlkZGVuKCkgY29uc3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDA4KSApO30KICAgIGNvbnN0 IGNoYXIqIEdldE5hbWUoKSBjb25zdCB7cmV0dXJuIG5hbWU7fQogICAgdWludDggR2V0UGFyYW1D b3VudCgpIGNvbnN0IHtyZXR1cm4gbnVtX2FyZ3M7fQoKICAgIGNvbnN0IG5zWFBUUGFyYW1JbmZv IEdldFBhcmFtKHVpbnQ4IGlkeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIDsKICAgICAg ICAgICAgcmV0dXJuIHBhcmFtc1tpZHhdOwogICAgICAgIH0KICAgIGNvbnN0IG5zWFBUUGFyYW1J bmZvIEdldFJlc3VsdCgpIGNvbnN0CiAgICAgICAge3JldHVybiAqcmVzdWx0O30KcHJpdmF0ZToK ICAgIG5zWFBUTWV0aG9kSW5mbygpOwoKfTsKCgoKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50OwoK Y2xhc3MgbnNYUFRDb25zdGFudCA6IHB1YmxpYyBYUFRDb25zdERlc2NyaXB0b3IKewoKcHVibGlj OgogICAgbnNYUFRDb25zdGFudChjb25zdCBYUFRDb25zdERlc2NyaXB0b3ImIGRlc2MpCiAgICAg ICAgeyooWFBUQ29uc3REZXNjcmlwdG9yKil0aGlzID0gZGVzYzt9CgogICAgY29uc3QgY2hhciog R2V0TmFtZSgpIGNvbnN0CiAgICAgICAge3JldHVybiBuYW1lO30KCiAgICBjb25zdCBuc1hQVFR5 cGUgR2V0VHlwZSgpIGNvbnN0CiAgICAgICAge3JldHVybiB0eXBlLnByZWZpeDt9CgoKCgoKICAg IGNvbnN0IG5zWFBUQ01pbmlWYXJpYW50KiBHZXRWYWx1ZSgpIGNvbnN0CiAgICAgICAge3JldHVy biAobnNYUFRDTWluaVZhcmlhbnQqKSAmdmFsdWU7fQpwcml2YXRlOgogICAgbnNYUFRDb25zdGFu dCgpOwoKfTsKIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lYUENvbm5l Y3QuaCIgMgojIDExNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lYUENvbm5l Y3QuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZTsKCmNsYXNzIG5zSVhQQ29ubmVjdDsKCmNsYXNz IG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU7CgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvOwoKY2xh c3MgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29ubmVjdC9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBDb25uZWN0SlNPYmplY3RIb2xkZXIg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODkxNmEzMjAsIDB4ZDExOCwgMHgx MWQzLCB7IDB4OGYsIDB4M2EsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRKU09iamVjdChKU09iamVjdCAq ICphSlNPYmplY3QpID0gMDsKCn07CiMgMjAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25u ZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlIDogcHVi bGljIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIxNWRiZTAyLCAw eDk0YTcsIDB4MTFkMiwgeyAweGJhLCAweDU4LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDVk LCAweGQ3IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmF0aXZlKG5z SVN1cHBvcnRzICogKmFOYXRpdmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SlNPYmpl Y3RQcm90b3R5cGUoSlNPYmplY3QgKiAqYUpTT2JqZWN0UHJvdG90eXBlKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFhQQ29ubmVjdChuc0lYUENvbm5lY3QgKiAqYVhQQ29ubmVjdCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kSW50ZXJmYWNlV2l0aE1lbWJlcihqc3ZhbCBu YW1lSUQsIG5zSUludGVyZmFjZUluZm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEZpbmRJbnRlcmZhY2VXaXRoTmFtZShqc3ZhbCBuYW1lSUQsIG5zSUludGVyZmFjZUluZm8g KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRl cHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZnJlc2hQcm90b3R5cGUodm9pZCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWN1cml0eUluZm9BZGRyZXNzKHZvaWQqICogKl9y ZXR2YWwpID0gMDsKCn07CiMgMzU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25z SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RXcmFwcGVkSlMgOiBwdWJsaWMgbnNJWFBD b25uZWN0SlNPYmplY3RIb2xkZXIgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YmVkNTIwMzAsIDB4YmNhNiwgMHgx MWQyLCB7IDB4YmEsIDB4NzksIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnRlcmZhY2VJbmZvKG5zSUlu dGVyZmFjZUluZm8gKiAqYUludGVyZmFjZUluZm8pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SW50ZXJmYWNlSUlEKG5zSUlEICogKmFJbnRlcmZhY2VJSUQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgRGVidWdEdW1wKFBSSW50MTYgZGVwdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgQWdncmVnYXRlZFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEICYgdXVpZCwgdm9pZCAqICpy ZXN1bHQpID0gMDsKCn07CiMgNDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25z SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwZmE2OGE2MCwgMHg4Mjg5LCAweDExZDMsIHsgMHhiYiwg MHgxYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZShuc0lTdXBwb3J0cyAqICphQ2FsbGVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZU1ldGhvZEluZGV4KFBSVWludDE2ICph Q2FsbGVlTWV0aG9kSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVlV3Jh cHBlcihuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICogKmFDYWxsZWVXcmFwcGVyKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTQ29udGV4dChKU0NvbnRleHQgKiAqYUpTQ29udGV4dCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmdjKFBSVWludDMyICphQXJnYykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmd2UHRyKGpzdmFsICogKmFBcmd2UHRyKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldFZhbFB0cihqc3ZhbCAqICphUmV0VmFsUHRyKSA9 IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uV2FzVGhyb3duKFBSQm9v bCAqYUV4Y2VwdGlvbldhc1Rocm93bikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RXhjZXB0 aW9uV2FzVGhyb3duKFBSQm9vbCBhRXhjZXB0aW9uV2FzVGhyb3duKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UmV0dXJuVmFsdWVXYXNTZXQoUFJCb29sICphUmV0dXJuVmFsdWVX YXNTZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJldHVyblZhbHVlV2FzU2V0KFBSQm9v bCBhUmV0dXJuVmFsdWVXYXNTZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVl SW50ZXJmYWNlKG5zSUludGVyZmFjZUluZm8gKiAqYUNhbGxlZUludGVyZmFjZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDYWxsZWVDbGFzc0luZm8obnNJQ2xhc3NJbmZvICogKmFDYWxs ZWVDbGFzc0luZm8pID0gMDsKCn07CiMgNzUzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25u ZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENXcmFwcGVkSlNPYmplY3RHZXR0ZXIgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MjU0YmIyZTAsIDB4NjQzOSwgMHgxMWQ0 LCB7IDB4OGYsIDB4ZTAsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXZlckNhbGxlZChuc0lTdXBwb3J0 cyAqICphTmV2ZXJDYWxsZWQpID0gMDsKCn07CiMgODIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENGdW5jdGlvblRoaXNUcmFuc2xh dG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAzOWVmMjYwLCAweDJhMGQs IDB4MTFkNSwgeyAweDkwLCAweGE3LCAweDAwLCAweDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlh IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgVHJhbnNsYXRlVGhpcyhuc0lT dXBwb3J0cyAqYUluaXRpYWxUaGlzLCBuc0lJbnRlcmZhY2VJbmZvICphSW50ZXJmYWNlSW5mbywg UFJVaW50MTYgYU1ldGhvZEluZGV4LCBQUkJvb2wgKmFIaWRlRmlyc3RQYXJhbUZyb21KUywgbnNJ SUQgKiAqYUlJRE9mUmVzdWx0LCBuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCn07CiMgODkz ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBu c0lYUENvbm5lY3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWZhZTM3YjAs IDB4OTQ2ZCwgMHgxMWQyLCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4 NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKICBzdGF0aWMgY29uc3QgbnNJRCYgR2V0Q0lEKCkg e3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHhjYjY1OTNlMCwgMHhmOWIyLCAweDExZDIsIHsg MHhiZCwgMHhkNiwgMHgwLCAweDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfSB9OyByZXR1cm4g Y2lkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXMoSlNDb250ZXh0ICogYUpTQ29u dGV4dCwgSlNPYmplY3QgKiBhR2xvYmFsSlNPYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg SW5pdENsYXNzZXNXaXRoTmV3V3JhcHBlZEdsb2JhbChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBu c0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBhSUlELCBQUkJvb2wgYUNhbGxKU19J bml0U3RhbmRhcmRDbGFzc2VzLCBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRlciAqKl9yZXR2YWwp ID0gMDsKIyA5MzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0 LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBXcmFwTmF0aXZlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQs IEpTT2JqZWN0ICogYVNjb3BlLCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBh SUlELCBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRlciAqKl9yZXR2YWwpID0gMDsKIyA5NjUgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBXcmFwSlMoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmos IGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFdyYXBwZWROYXRpdmVPZkpTT2JqZWN0KEpTQ29udGV4dCAqIGFKU0NvbnRl eHQsIEpTT2JqZWN0ICogYUpTT2JqLCBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICoqX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWN1cml0eU1hbmFnZXJGb3JKU0NvbnRl eHQoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyICphTWFuYWdl ciwgUFJVaW50MTYgZmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlN YW5hZ2VyRm9ySlNDb250ZXh0KEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIG5zSVhQQ1NlY3VyaXR5 TWFuYWdlciAqKmFNYW5hZ2VyLCBQUlVpbnQxNiAqZmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFNldERlZmF1bHRTZWN1cml0eU1hbmFnZXIobnNJWFBDU2VjdXJpdHlNYW5hZ2Vy ICphTWFuYWdlciwgUFJVaW50MTYgZmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 RGVmYXVsdFNlY3VyaXR5TWFuYWdlcihuc0lYUENTZWN1cml0eU1hbmFnZXIgKiphTWFuYWdlciwg UFJVaW50MTYgKmZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVN0YWNrRnJh bWVMb2NhdGlvbihQUlVpbnQzMiBhTGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKmFGaWxlbmFtZSwgY29u c3QgY2hhciAqYUZ1bmN0aW9uTmFtZSwgUFJJbnQzMiBhTGluZU51bWJlciwgbnNJU3RhY2tGcmFt ZSAqYUNhbGxlciwgbnNJU3RhY2tGcmFtZSAqKl9yZXR2YWwpID0gMDsKIyAxMDAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgU3luY0pTQ29udGV4dHModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJy ZW50SlNTdGFjayhuc0lTdGFja0ZyYW1lICogKmFDdXJyZW50SlNTdGFjaykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50TmF0aXZlQ2FsbENvbnRleHQobnNJWFBDTmF0aXZlQ2Fs bENvbnRleHQgKiAqYUN1cnJlbnROYXRpdmVDYWxsQ29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQZW5kaW5nRXhjZXB0aW9uKG5zSUV4Y2VwdGlvbiAqICphUGVuZGluZ0V4Y2Vw dGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVuZGluZ0V4Y2VwdGlvbihuc0lFeGNl cHRpb24gKiBhUGVuZGluZ0V4Y2VwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1 Z0R1bXAoUFJJbnQxNiBkZXB0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXBP YmplY3QobnNJU3VwcG9ydHMgKmFDT01PYmosIFBSSW50MTYgZGVwdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRGVidWdEdW1wSlNTdGFjayhQUkJvb2wgc2hvd0FyZ3MsIFBSQm9vbCBzaG93 TG9jYWxzLCBQUkJvb2wgc2hvd1RoaXNQcm9wcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBE ZWJ1Z0R1bXBFdmFsSW5KU1N0YWNrRnJhbWUoUFJVaW50MzIgYUZyYW1lTnVtYmVyLCBjb25zdCBj aGFyICphU291cmNlVGV4dCkgPSAwOwojIDEwMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTYWZlSlNDb250ZXh0 Rm9yQ3VycmVudFRocmVhZChKU0NvbnRleHQgKiBjeCkgPSAwOwojIDEwNTAgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBX cmFwSlNBZ2dyZWdhdGVkVG9OYXRpdmUobnNJU3VwcG9ydHMgKmFPdXRlciwgSlNDb250ZXh0ICog YUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAq ICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdyYXBwZWROYXRpdmVP Zk5hdGl2ZU9iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwg bnNJU3VwcG9ydHMgKmFDT01PYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgbnNJWFBDb25uZWN0V3Jh cHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnVuY3Rp b25UaGlzVHJhbnNsYXRvcihjb25zdCBuc0lJRCAmIGFJSUQsIG5zSVhQQ0Z1bmN0aW9uVGhpc1Ry YW5zbGF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZ1bmN0aW9u VGhpc1RyYW5zbGF0b3IoY29uc3QgbnNJSUQgJiBhSUlELCBuc0lYUENGdW5jdGlvblRoaXNUcmFu c2xhdG9yICphVHJhbnNsYXRvciwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRvciAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwYXJlbnRXcmFwcGVkTmF0aXZlSWZGb3Vu ZChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwgSlNPYmplY3QgKiBh TmV3UGFyZW50LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgbnNJWFBDb25uZWN0SlNPYmplY3RIb2xk ZXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyQWxsV3JhcHBlZE5h dGl2ZVNlY3VyaXR5UG9saWNpZXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRX cmFwcGVkTmF0aXZlUHJvdG90eXBlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpTT2JqZWN0ICog YVNjb3BlLCBuc0lDbGFzc0luZm8gKmFDbGFzc0luZm8sIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9s ZGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xsZWN0R2FyYmFn ZU9uTWFpblRocmVhZE9ubHkoUFJCb29sICphQ29sbGVjdEdhcmJhZ2VPbk1haW5UaHJlYWRPbmx5 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xsZWN0R2FyYmFnZU9uTWFpblRocmVhZE9u bHkoUFJCb29sIGFDb2xsZWN0R2FyYmFnZU9uTWFpblRocmVhZE9ubHkpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGVmZXJSZWxlYXNlc1VudGlsQWZ0ZXJHYXJiYWdlQ29sbGVjdGlvbihQ UkJvb2wgKmFEZWZlclJlbGVhc2VzVW50aWxBZnRlckdhcmJhZ2VDb2xsZWN0aW9uKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZlclJlbGVhc2VzVW50aWxBZnRlckdhcmJhZ2VDb2xsZWN0 aW9uKFBSQm9vbCBhRGVmZXJSZWxlYXNlc1VudGlsQWZ0ZXJHYXJiYWdlQ29sbGVjdGlvbikgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWxlYXNlSlNDb250ZXh0KEpTQ29udGV4dCAqIGFKU0Nv bnRleHQsIFBSQm9vbCBub0dDKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIgMgojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZSA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmYTJjM2I4MCwgMHgwZTlkLCAweDEx ZDUsIHsgMHg5MCwgMHg5MiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsg cmV0dXJuIGlpZDt9CgogIGVudW0geyBXQU5UX1BSRUNSRUFURSA9IDFVIH07CgogIGVudW0geyBX QU5UX0NSRUFURSA9IDJVIH07CgogIGVudW0geyBXQU5UX1BPU1RDUkVBVEUgPSA0VSB9OwoKICBl bnVtIHsgV0FOVF9BRERQUk9QRVJUWSA9IDhVIH07CgogIGVudW0geyBXQU5UX0RFTFBST1BFUlRZ ID0gMTZVIH07CgogIGVudW0geyBXQU5UX0dFVFBST1BFUlRZID0gMzJVIH07CgogIGVudW0geyBX QU5UX1NFVFBST1BFUlRZID0gNjRVIH07CgogIGVudW0geyBXQU5UX0VOVU1FUkFURSA9IDEyOFUg fTsKCiAgZW51bSB7IFdBTlRfTkVXRU5VTUVSQVRFID0gMjU2VSB9OwoKICBlbnVtIHsgV0FOVF9O RVdSRVNPTFZFID0gNTEyVSB9OwoKICBlbnVtIHsgV0FOVF9DT05WRVJUID0gMTAyNFUgfTsKCiAg ZW51bSB7IFdBTlRfRklOQUxJWkUgPSAyMDQ4VSB9OwoKICBlbnVtIHsgV0FOVF9DSEVDS0FDQ0VT UyA9IDQwOTZVIH07CgogIGVudW0geyBXQU5UX0NBTEwgPSA4MTkyVSB9OwoKICBlbnVtIHsgV0FO VF9DT05TVFJVQ1QgPSAxNjM4NFUgfTsKCiAgZW51bSB7IFdBTlRfSEFTSU5TVEFOQ0UgPSAzMjc2 OFUgfTsKCiAgZW51bSB7IFdBTlRfTUFSSyA9IDY1NTM2VSB9OwoKICBlbnVtIHsgVVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkgPSAxMzEwNzJVIH07CgogIGVudW0geyBVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSA9IDI2MjE0NFUgfTsKCiAgZW51bSB7IFVTRV9KU1NUVUJfRk9SX1NFVFBST1BF UlRZID0gNTI0Mjg4VSB9OwoKICBlbnVtIHsgRE9OVF9FTlVNX1NUQVRJQ19QUk9QUyA9IDEwNDg1 NzZVIH07CgogIGVudW0geyBET05UX0VOVU1fUVVFUllfSU5URVJGQUNFID0gMjA5NzE1MlUgfTsK CiAgZW51bSB7IERPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFID0gNDE5NDMwNFUgfTsK CiAgZW51bSB7IENMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkgPSA4Mzg4NjA4VSB9OwoKICBlbnVt IHsgQUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFID0gMTY3NzcyMTZVIH07CgogIGVudW0g eyBBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFID0gMzM1NTQ0MzJVIH07CgogIGVudW0geyBE T05UX1NIQVJFX1BST1RPVFlQRSA9IDY3MTA4ODY0VSB9OwoKICBlbnVtIHsgRE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyA9IDEzNDIxNzcyOFUgfTsKCiAgZW51bSB7IFJFU0VSVkVEID0gMjE0 NzQ4MzY0OFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NOYW1lKGNoYXIgKiAqYUNs YXNzTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRhYmxlRmxhZ3MoUFJV aW50MzIgKmFTY3JpcHRhYmxlRmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJlQ3Jl YXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIGds b2JhbE9iaiwgSlNPYmplY3QgKiAqcGFyZW50T2JqKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENyZWF0ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBj eCwgSlNPYmplY3QgKiBvYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdENyZWF0ZShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmpl Y3QgKiBvYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkUHJvcGVydHkobnNJWFBDb25u ZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2Jq LCBqc3ZhbCBpZCwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs IEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwgaWQsIGpzdmFsICogdnAsIFBS Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lY UENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3Qg KiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3Jh cHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwganN2YWwgKiB2 cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmpl Y3QgKiBvYmosIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdF bnVtZXJhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICog Y3gsIEpTT2JqZWN0ICogb2JqLCBQUlVpbnQzMiBlbnVtX29wLCBqc3ZhbCAqIHN0YXRlcCwganNp ZCAqaWRwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVz b2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwg SlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywgSlNPYmplY3QgKiAqb2Jq cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnQobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0 ICogb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq d3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IENoZWNrQWNjZXNzKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs IEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwgaWQsIFBSVWludDMyIG1vZGUs IGpzdmFsICogdnAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBD YWxsKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBK U09iamVjdCAqIG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZwLCBQ UkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29uc3RydWN0KG5zSVhQ Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAq IG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzSW5zdGFuY2UobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBq c3ZhbCB2YWwsIFBSQm9vbCAqYnAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBNYXJrKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4 dCAqIGN4LCBKU09iamVjdCAqIG9iaiwgdm9pZCAqIGFyZywgUFJVaW50MzIgKl9yZXR2YWwpID0g MDsKCn07CiMgMjc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5o IiAyCiMgMjkzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5oIgp0 eXBlZGVmIG5zSUNsYXNzSW5mbyogKCpuc0RPTUNsYXNzSW5mb0V4dGVybmFsQ29uc3RydWN0b3JG bmMpCiAgKGNvbnN0IGNoYXIqIGFOYW1lKTsKIyAzMTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVNlcnZpY2VNYW5hZ2VyLmgiIDEKIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVNlcnZpY2VNYW5hZ2VyLmgiCmNsYXNzIG5zSVNlcnZpY2VNYW5hZ2VyIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweDhiYjM1ZWQ5LCAweGUzMzIsIDB4NDYyZCwgeyAweDkxLCAw eDU1LCAweDRhLCAweDAwLCAweDJhLCAweGI1LCAweGM5LCAweDU4IH19OyByZXR1cm4gaWlkO30K IyA1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTZXJ2aWNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBu c0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNlcnZpY2VCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0IG5zSUlE ICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKIyA3NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NlcnZpY2VJ bnN0YW50aWF0ZWQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IG5zSUlEICYgYUlJRCwgUFJC b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2VydmljZUluc3RhbnRp YXRlZEJ5Q29udHJhY3RJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgY29uc3QgbnNJSUQgJiBh SUlELCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMTY2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJU2VydmljZU1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNYUENPTS5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1hQ Q09NLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT01DSUQuaCIgMQoj IDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNYUENPTS5oIiAyCgpjbGFzcyBuc0FT dHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgpjbGFzcyBuc0lDb21wb25lbnRNYW5hZ2VyOwpjbGFz cyBuc0lDb21wb25lbnRSZWdpc3RyYXI7CmNsYXNzIG5zSVNlcnZpY2VNYW5hZ2VyOwpjbGFzcyBu c0lGaWxlOwpjbGFzcyBuc0lMb2NhbEZpbGU7CmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQcm92 aWRlcjsKY2xhc3MgbnNJTWVtb3J5OwojIDkwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNYUENPTS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX0luaXRYUENPTTIobnNJU2VydmljZU1h bmFnZXIqICpyZXN1bHQsCiAgICAgICAgICAgICAgbnNJRmlsZSogYmluRGlyZWN0b3J5LAogICAg ICAgICAgICAgIG5zSURpcmVjdG9yeVNlcnZpY2VQcm92aWRlciogYXBwRmlsZUxvY2F0aW9uUHJv dmlkZXIpOwojIDEwNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00uaCIKZXh0 ZXJuICJDIiBuc3Jlc3VsdApOU19TaHV0ZG93blhQQ09NKG5zSVNlcnZpY2VNYW5hZ2VyKiBzZXJ2 TWdyKTsKIyAxMjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1hQQ09NLmgiCmV4dGVy biAiQyIgbnNyZXN1bHQKTlNfR2V0U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpy ZXN1bHQpOwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00uaCIKZXh0 ZXJuICJDIiBuc3Jlc3VsdApOU19HZXRDb21wb25lbnRNYW5hZ2VyKG5zSUNvbXBvbmVudE1hbmFn ZXIqICpyZXN1bHQpOwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00u aCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19HZXRDb21wb25lbnRSZWdpc3RyYXIobnNJQ29tcG9u ZW50UmVnaXN0cmFyKiAqcmVzdWx0KTsKIyAxNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc1hQQ09NLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfR2V0TWVtb3J5TWFuYWdlcihuc0lN ZW1vcnkqICpyZXN1bHQpOwojIDE4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBD T00uaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdMb2NhbEZpbGUoY29uc3QgbnNBU3RyaW5n ICZwYXRoLAogICAgICAgICAgICAgICAgUFJCb29sIGZvbGxvd0xpbmtzLAogICAgICAgICAgICAg ICAgbnNJTG9jYWxGaWxlKiAqcmVzdWx0KTsKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3TmF0 aXZlTG9jYWxGaWxlKGNvbnN0IG5zQUNTdHJpbmcgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgZm9sbG93TGlua3MsCiAgICAgICAgICAgICAgICAgICAgICBuc0lMb2NhbEZpbGUq ICpyZXN1bHQpOwojIDE2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VN YW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VydmljZU1h bmFnZXJVdGlscy5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJ2 aWNlTWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNl cnZpY2VNYW5hZ2VyLmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNl cnZpY2VNYW5hZ2VyVXRpbHMuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lTZXJ2aWNlTWFuYWdlck9ic29sZXRlLmgiIDEKIyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJU2VydmljZU1hbmFn ZXI7CmNsYXNzIG5zSVNodXRkb3duTGlzdGVuZXI7CmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQ cm92aWRlcjsKCmNsYXNzIG5zU2VydmljZU1hbmFnZXJPYnNvbGV0ZTsKIyA3NyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJ U2VydmljZU1hbmFnZXJPYnNvbGV0ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKCiAg ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g eyAweGNmMGRmM2IwLCAweDM0MDEsIDB4MTFkMiwgezB4ODEsIDB4NjMsIDB4MDAsIDB4NjAsIDB4 MDgsIDB4MTEsIDB4OWQsIDB4N2F9IH07IHJldHVybiBpaWQ7fTsKCgoKCgoKCiAgICB2aXJ0dWFs IG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3Vw cG9ydHMqIGFTZXJ2aWNlKSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJU2VydmljZU1hbmFnZXJPYnNvbGV0ZS5oIgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgVW5y ZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcykgPSAwOwoKICAgIHZpcnR1YWwgbnNy ZXN1bHQKICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJ SUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBu c0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0 dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzLCBuc0lT dXBwb3J0cyogc2VydmljZSwKICAgICAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIq IHNodXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAg UmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNl cnZpY2UpID0gMDsKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShj b25zdCBjaGFyKiBhQ29udHJhY3RJRCkgPSAwOwoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIEdl dFNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIGNvbnN0IG5zSUlEJiBhSUlELAogICAg ICAgICAgICAgICBuc0lTdXBwb3J0cyogKnJlc3VsdCwKICAgICAgICAgICAgICAgbnNJU2h1dGRv d25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCgogICAgdmlydHVhbCBuc3Jl c3VsdAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBv cnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1 dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCn07CgoKY2xhc3MgbnNTZXJ2aWNlTWFuYWdlciB7CnB1 YmxpYzoKCiAgICBzdGF0aWMgbnNyZXN1bHQKICAgIFJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJ RCYgYUNsYXNzLCBuc0lTdXBwb3J0cyogYVNlcnZpY2UpOwoKICAgIHN0YXRpYyBuc3Jlc3VsdAog ICAgVW5yZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcyk7CgogICAgc3RhdGljIG5z cmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIGNvbnN0IG5zSUlEJiBh SUlELAogICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogKnJlc3VsdCwKICAgICAgICAgICAgICAg bnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApOwoKCiAgICBzdGF0aWMg bnNyZXN1bHQKICAgIFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBv cnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1 dGRvd25MaXN0ZW5lciA9IDApOwoKCgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJT ZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2UpOwoK ICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgVW5yZWdpc3RlclNlcnZpY2UoY29uc3QgY2hhciogYUNv bnRyYWN0SUQpOwoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFy KiBhQ29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBv cnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93 bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVsZWFzZVNlcnZpY2Uo Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAgICAgICAg ICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApOwoKCgoK CiAgICBzdGF0aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1h bmFnZXIqICpyZXN1bHQpOwogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2Vydmlj ZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwojIDIwMyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJ U2h1dGRvd25MaXN0ZW5lcjsKCgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxp bmUKbnNyZXN1bHQKQ2FsbEdldFNlcnZpY2UoIGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAg ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyLAogICAgICAgICAg ICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uKQp7CiAgICA7CgogICAgcmV0dXJu IG5zU2VydmljZU1hbmFnZXI6OkdldFNlcnZpY2UoYUNsYXNzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJ SUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihhRGVzdGluYXRpb24pLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25MaXN0ZW5lcik7Cn0KCnRlbXBsYXRlIDxjbGFz cyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0U2VydmljZSggY29uc3Qg Y2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBz aHV0ZG93bkxpc3RlbmVyLAogICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3Rp bmF0aW9uKQp7CiAgICA7CiAgICA7CgogICAgcmV0dXJuIG5zU2VydmljZU1hbmFnZXI6OkdldFNl cnZpY2UoYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgbnNJU3VwcG9ydHMq KiA+KGFEZXN0aW5hdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaHV0ZG93bkxpc3RlbmVyKTsKfQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJU2VydmljZU1hbmFnZXJVdGlscy5oIiAyCgoKCgpjbGFzcyBuc0dldFNlcnZpY2VCeUNJRCA6 IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKewogcHVibGljOgogICAgbnNHZXRTZXJ2aWNlQnlDSUQo IGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3Vs dCogYUVycm9yUHRyICkKICAgICAgICA6IG1DSUQoYUNJRCksCiAgICAgICAgbVNlcnZpY2VNYW5h Z2VyKCBkb19RdWVyeUludGVyZmFjZShhU2VydmljZU1hbmFnZXIpICksCiAgICAgICAgbUVycm9y UHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0 IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2aXJ0dWFsIH5u c0dldFNlcnZpY2VCeUNJRCgpIHt9OwoKIHByaXZhdGU6CiAgICBjb25zdCBuc0NJRCYgbUNJRDsK ICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICBuc3Jl c3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dl dFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKewogICAg cmV0dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0 IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lT dXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKewogICAgcmV0 dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwp9Cgpj bGFzcyBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsK IHB1YmxpYzoKICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRy YWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg KQogICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgIG1TZXJ2aWNlTWFu YWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAgICAgIG1FcnJv clB0cihhRXJyb3JQdHIpCiAgICAgICAgewoKICAgICAgICB9CgogICAgdmlydHVhbCBuc3Jlc3Vs dCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoKICAgIHZpcnR1YWwg fm5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCgpIHt9OwoKIHByaXZhdGU6CiAgICBjb25zdCBjaGFy KiBtQ29udHJhY3RJRDsKICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1h bmFnZXI7CiAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2Vy dmljZUJ5Q29udHJhY3RJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwg bnNyZXN1bHQqIGVycm9yID0gMCApCnsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0 SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5 Q29udHJhY3RJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3Vw cG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCnsKICAgIHJldHVy biBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIGFTZXJ2aWNlTWFuYWdlciwg ZXJyb3IpOwp9CgpjbGFzcyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01Q dHJfaGVscGVyCnsKIHB1YmxpYzoKICAgIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBj aGFyKiBhQ2F0ZWdvcnksIGNvbnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zcmVzdWx0KiBhRXJyb3JQdHIpCiAgICAgICAgOiBtQ2F0ZWdvcnkoYUNhdGVn b3J5KSwKICAgICAgICBtRW50cnkoYUVudHJ5KSwKICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRv X1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikgKSwKICAgICAgICBtRXJyb3JQdHIoYUVy cm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0 b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsKICAgIHZpcnR1YWwgfm5zR2V0U2Vy dmljZUZyb21DYXRlZ29yeSgpIHt9OwogcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciogbUNhdGVn b3J5OwogICAgY29uc3QgY2hhciogbUVudHJ5OwogICAgbnNDT01QdHI8bnNJU2VydmljZU1hbmFn ZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUK Y29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnko IGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKewogICAgcmV0dXJuIG5zR2V0U2Vydmlj ZUZyb21DYXRlZ29yeShjYXRlZ29yeSwgZW50cnksIDAsIGVycm9yKTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0U2VydmljZSggY29u c3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uVHlwZSoqIGFEZXN0 aW5hdGlvbikKewogICAgOwoKICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtZ3I7CiAg ICBuc3Jlc3VsdCBydiA9IE5TX0dldFNlcnZpY2VNYW5hZ2VyKGdldHRlcl9BZGRSZWZzKG1ncikp OwoKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKQogICAgICAgIHJldHVybiBydjsKCiAgICBy ZXR1cm4gbWdyLT5HZXRTZXJ2aWNlKGFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0 U2VydmljZSggY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICBEZXN0aW5h dGlvblR5cGUqKiBhRGVzdGluYXRpb24pCnsKICAgIDsKICAgIDsKCiAgICBuc0NPTVB0cjxuc0lT ZXJ2aWNlTWFuYWdlcj4gbWdyOwogICAgbnNyZXN1bHQgcnYgPSBOU19HZXRTZXJ2aWNlTWFuYWdl cihnZXR0ZXJfQWRkUmVmcyhtZ3IpKTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkKICAg ICAgICByZXR1cm4gcnY7CgogICAgcmV0dXJuIG1nci0+R2V0U2VydmljZUJ5Q29udHJhY3RJRChh Q29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01U eXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9u KSk7Cn0KIyAxNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJ2aWNlTWFuYWdl ci5oIiAyCiMgMzEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5o IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JpcHRPYmplY3RGYWN0 b3J5LmgiIDEKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JpcHRPYmpl Y3RGYWN0b3J5LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DbGFzc0lu Zm8uaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVNjcmlwdE9iamVj dEZhY3RvcnkuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcu aCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMQojIDU4ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9zdHJpbmcvbnNBRmxhdFN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNBRmxhdFN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJp bmcvbnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcuaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zQVNpbmdsZUZyYWdtZW50U3RyaW5nLmgiCmNsYXNzIG5zQVNpbmdsZUZyYWdt ZW50U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CgoKCgoKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBjb25zdCBjaGFyX3R5cGUqIGNvbnN0X2NoYXJfaXRlcmF0b3I7CiAgICAgIHR5 cGVkZWYgY2hhcl90eXBlKiBjaGFyX2l0ZXJhdG9yOwoKCiAgICAgIHVzaW5nIGFic3RyYWN0X3N0 cmluZ190eXBlOjpCZWdpblJlYWRpbmc7CiAgICAgIHVzaW5nIGFic3RyYWN0X3N0cmluZ190eXBl OjpFbmRSZWFkaW5nOwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6QmVnaW5Xcml0 aW5nOwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6RW5kV3JpdGluZzsKCgoKCgoK CiAgICAgIGlubGluZQogICAgICBjb25zdF9jaGFyX2l0ZXJhdG9yJgogICAgICBCZWdpblJlYWRp bmcoIGNvbnN0X2NoYXJfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIGNvbnN0X2ZyYWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFJlYWRhYmxlRnJhZ21lbnQo Ziwga0ZpcnN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1bHQgPSBmLm1TdGFy dDsKICAgICAgICB9CgogICAgICBpbmxpbmUKICAgICAgY29uc3RfY2hhcl9pdGVyYXRvciYKICAg ICAgRW5kUmVhZGluZyggY29uc3RfY2hhcl9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgICAg ICAgewogICAgICAgICAgY29uc3RfZnJhZ21lbnRfdHlwZSBmOwogICAgICAgICAgR2V0UmVhZGFi bGVGcmFnbWVudChmLCBrTGFzdEZyYWdtZW50LCAwKTsKICAgICAgICAgIHJldHVybiBhUmVzdWx0 ID0gZi5tRW5kOwogICAgICAgIH0KCiAgICAgIGlubGluZQogICAgICBjaGFyX2l0ZXJhdG9yJgog ICAgICBCZWdpbldyaXRpbmcoIGNoYXJfaXRlcmF0b3ImIGFSZXN1bHQgKQogICAgICAgIHsKICAg ICAgICAgIGZyYWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoZiwg a0ZpcnN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1bHQgPSBjb25zdF9jYXN0 PCBjaGFyX2l0ZXJhdG9yID4oZi5tU3RhcnQpOwogICAgICAgIH0KCiAgICAgIGlubGluZQogICAg ICBjaGFyX2l0ZXJhdG9yJgogICAgICBFbmRXcml0aW5nKCBjaGFyX2l0ZXJhdG9yJiBhUmVzdWx0 ICkKICAgICAgICB7CiAgICAgICAgICBmcmFnbWVudF90eXBlIGY7CiAgICAgICAgICBHZXRXcml0 YWJsZUZyYWdtZW50KGYsIGtMYXN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1 bHQgPSBjb25zdF9jYXN0PCBjaGFyX2l0ZXJhdG9yID4oZi5tRW5kKTsKICAgICAgICB9CgogICAg ICBjaGFyX3R5cGUgb3BlcmF0b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgY29uc3RfY2hhcl9p dGVyYXRvciB0ZW1wOyByZXR1cm4gQmVnaW5SZWFkaW5nKHRlbXApWyBpIF07IH0KICAgICAgY2hh cl90eXBlIENoYXJBdCggUFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIg TGVuZ3RoKCkgY29uc3Q7CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50 UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdy aXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50 MzIgKTsKICB9OwoKY2xhc3MgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nCiAgICA6IHB1YmxpYyBu c0FDU3RyaW5nCiAgewoKCgoKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgY29uc3QgY2hhcl90 eXBlKiBjb25zdF9jaGFyX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9p dGVyYXRvcjsKCgogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6QmVnaW5SZWFkaW5n OwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6RW5kUmVhZGluZzsKICAgICAgdXNp bmcgYWJzdHJhY3Rfc3RyaW5nX3R5cGU6OkJlZ2luV3JpdGluZzsKICAgICAgdXNpbmcgYWJzdHJh Y3Rfc3RyaW5nX3R5cGU6OkVuZFdyaXRpbmc7CgoKCgoKCgogICAgICBpbmxpbmUKICAgICAgY29u c3RfY2hhcl9pdGVyYXRvciYKICAgICAgQmVnaW5SZWFkaW5nKCBjb25zdF9jaGFyX2l0ZXJhdG9y JiBhUmVzdWx0ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBjb25zdF9mcmFnbWVudF90eXBl IGY7CiAgICAgICAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGYsIGtGaXJzdEZyYWdtZW50LCAwKTsK ICAgICAgICAgIHJldHVybiBhUmVzdWx0ID0gZi5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgaW5s aW5lCiAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3ImCiAgICAgIEVuZFJlYWRpbmcoIGNvbnN0X2No YXJfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2Zy YWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFJlYWRhYmxlRnJhZ21lbnQoZiwga0xhc3RGcmFn bWVudCwgMCk7CiAgICAgICAgICByZXR1cm4gYVJlc3VsdCA9IGYubUVuZDsKICAgICAgICB9Cgog ICAgICBpbmxpbmUKICAgICAgY2hhcl9pdGVyYXRvciYKICAgICAgQmVnaW5Xcml0aW5nKCBjaGFy X2l0ZXJhdG9yJiBhUmVzdWx0ICkKICAgICAgICB7CiAgICAgICAgICBmcmFnbWVudF90eXBlIGY7 CiAgICAgICAgICBHZXRXcml0YWJsZUZyYWdtZW50KGYsIGtGaXJzdEZyYWdtZW50LCAwKTsKICAg ICAgICAgIHJldHVybiBhUmVzdWx0ID0gY29uc3RfY2FzdDwgY2hhcl9pdGVyYXRvciA+KGYubVN0 YXJ0KTsKICAgICAgICB9CgogICAgICBpbmxpbmUKICAgICAgY2hhcl9pdGVyYXRvciYKICAgICAg RW5kV3JpdGluZyggY2hhcl9pdGVyYXRvciYgYVJlc3VsdCApCiAgICAgICAgewogICAgICAgICAg ZnJhZ21lbnRfdHlwZSBmOwogICAgICAgICAgR2V0V3JpdGFibGVGcmFnbWVudChmLCBrTGFzdEZy YWdtZW50LCAwKTsKICAgICAgICAgIHJldHVybiBhUmVzdWx0ID0gY29uc3RfY2FzdDwgY2hhcl9p dGVyYXRvciA+KGYubUVuZCk7CiAgICAgICAgfQoKICAgICAgY2hhcl90eXBlIG9wZXJhdG9yW10o IFBSVWludDMyIGkgKSBjb25zdCB7IGNvbnN0X2NoYXJfaXRlcmF0b3IgdGVtcDsgcmV0dXJuIEJl Z2luUmVhZGluZyh0ZW1wKVsgaSBdOyB9CiAgICAgIGNoYXJfdHlwZSBDaGFyQXQoIFBSVWludDMy ICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAgICBw dWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50 KCBjb25zdF9mcmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29u c3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVu dF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlubGluZQpuc0FT aW5nbGVGcmFnbWVudFN0cmluZzo6Y2hhcl90eXBlCm5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpD aGFyQXQoIFBSVWludDMyIGkgKSBjb25zdAogIHsKICAgIDsKICAgIHJldHVybiBvcGVyYXRvcltd KGkpOwogIH0KCmlubGluZQpuc0FTaW5nbGVGcmFnbWVudENTdHJpbmc6OmNoYXJfdHlwZQpuc0FT aW5nbGVGcmFnbWVudENTdHJpbmc6OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0CiAgewogICAg OwogICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zQUZsYXRTdHJpbmcuaCIgMgojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxhdFN0cmluZwogICAgOiBwdWJsaWMg bnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcKICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKiBnZXQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSogdGVtcDsKICAgICAgICAgIHJldHVybiBCZWdpblJlYWRpbmcodGVtcCk7CiAgICAg ICAgfQogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMgbnNBU2luZ2xlRnJh Z21lbnRDU3RyaW5nCiAgewogICAgcHVibGljOgoKCgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSogZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIHRl bXA7CiAgICAgICAgICByZXR1cm4gQmVnaW5SZWFkaW5nKHRlbXApOwogICAgICAgIH0KCiAgfTsK IyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMgoKCgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0xpdGVyYWxTdHJpbmcuaCIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zRGVwZW5kZW50U3RyaW5nLmgiIDEKIyA0NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN0cmluZy5oIgpjbGFzcyBuc0Rl cGVuZGVudFN0cmluZwogICAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVibGlj OgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50U3RyaW5nIHNlbGZfdHlwZTsKCiAgICAgIHZvaWQK ICAgICAgUmViaW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKQogICAgICAgIHsKICAgICAgICAg IDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFQdHIpOwoKCgogICAgICAgICAgbUhhbmRs ZS5EYXRhRW5kKGFQdHIgPyAoYVB0cituc0NoYXJUcmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKGFQ dHIpKSA6IDApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFy X3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hhcl90eXBlKiBhRW5kUHRyICkKICAgICAgICB7CiAg ICAgICAgICA7CiMgODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRT dHJpbmcuaCIKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0 cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAg dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0 aCApCiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxl bmd0aCk7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IGNoYXJfdHlw ZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQdHIgKSB7IFJlYmluZChhU3RhcnRQ dHIsIGFFbmRQdHIpOyB9CiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBjaGFyX3R5cGUq IGFQdHIsIFBSVWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAg ICBleHBsaWNpdCBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBS ZWJpbmQoYVB0cik7IH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNv bnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgYnVmZmVy X2hhbmRsZV90eXBlKiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl cnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQogICAg ICB2aXJ0dWFsIGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFuZGxlKCkgY29u c3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+ KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9oYW5kbGVfdHlw ZSBtSGFuZGxlOwogIH07CgoKCmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZwogICAgICA6IHB1Ymxp YyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVu dENTdHJpbmcgc2VsZl90eXBlOwoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJf dHlwZSogYVB0ciApCiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgbUhhbmRsZS5EYXRh U3RhcnQoYVB0cik7CgoKCiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRyK25z Q2hhclRyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoYVB0cikpIDogMCk7CiAgICAgICAgfQoKICAg ICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBj aGFyX3R5cGUqIGFFbmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIDsKIyAxNjAgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRTdHJpbmcuaCIKICAgICAgICAgIDsKICAg ICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRh dGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0 IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAg OwogICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxlbmd0aCk7CiAgICAgICAgfQoKICAgICAg bnNEZXBlbmRlbnRDU3RyaW5nKCBjb25zdCBjaGFyX3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hh cl90eXBlKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5kUHRyKTsgfQogICAgICBu c0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0 aCApIHsgUmViaW5kKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIGV4cGxpY2l0IG5zRGVwZW5kZW50 Q1N0cmluZyggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBSZWJpbmQoYVB0cik7IH0KCgoKCiAg ICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAg ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRGbGF0 QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVm ZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQogICAgICB2aXJ0dWFsIGNvbnN0IGJ1ZmZl cl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQoKICAgIHBy aXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9oYW5kbGVfdHlwZSBtSGFuZGxlOwogIH07CiMgMzMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNMaXRlcmFsU3RyaW5nLmgiIDIKIyA2MyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMgoKCgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRTdWJzdHJpbmcuaCIgMQojIDQ1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zRGVwZW5kZW50U3Vic3RyaW5nLmgiCmNsYXNz IG5zRGVwZW5kZW50U3Vic3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKIyA1NSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudFN1YnN0cmluZyBzZWxmX3R5cGU7CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFn bWVudCggY29uc3RfZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp IGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggZnJh Z21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0K CiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nKCBjb25zdCBhYnN0cmFjdF9z dHJpbmdfdHlwZSYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVpbnQzMiBhTGVuZ3Ro ICkKICAgICAgICAgIDogbVN0cmluZyhhU3RyaW5nKSwKICAgICAgICAgICAgbVN0YXJ0UG9zKCBO U19NSU4oYVN0YXJ0UG9zLCBhU3RyaW5nLkxlbmd0aCgpKSApLAogICAgICAgICAgICBtTGVuZ3Ro KCBOU19NSU4oYUxlbmd0aCwgYVN0cmluZy5MZW5ndGgoKS1tU3RhcnRQb3MpICkKICAgICAgICB7 CgogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVy YXRvciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1T dHJpbmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y IHplcm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAg ICAgICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAg ICBtTGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJp dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi bGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKICAgIHByaXZhdGU6 CiAgICAgIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQz MiBtU3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCmNsYXNzIG5zRGVwZW5k ZW50Q1N1YnN0cmluZwogICAgOiBwdWJsaWMgbnNBQ1N0cmluZwojIDEwNyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHB1YmxpYzoK ICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudENTdWJzdHJpbmcgc2VsZl90eXBlOwoKICAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQo IGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25z dDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50 X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAg cHVibGljOgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmlu Z190eXBlJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFMZW5ndGggKQog ICAgICAgICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAgICAgICAgICBtU3RhcnRQb3MoIE5TX01J TihhU3RhcnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICksCiAgICAgICAgICAgIG1MZW5ndGgoIE5T X01JTihhTGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1TdGFydFBvcykgKQogICAgICAgIHsKCiAg ICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDU3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVyYXRv ciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1TdHJp bmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHpl cm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAgICAg ICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAgICBt TGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJpdmF0 ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGlj OgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAg ICAgIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQzMiBt U3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCgpjbGFzcyBuc0RlcGVuZGVu dFNpbmdsZUZyYWdtZW50U3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVNpbmdsZUZyYWdtZW50 U3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50U2luZ2xlRnJh Z21lbnRTdWJzdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVNpbmdsZUZyYWdtZW50 U3RyaW5nIGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlOwoKICAgICAgdm9pZAogICAgICBS ZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQ dHIgKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFT dGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoK ICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90 eXBlJiBhU3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFM ZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3IgaXRlcjsKICAg ICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdHJpbmcuQmVnaW5SZWFkaW5nKGl0ZXIpICsgTlNf TUlOKGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkpOwogICAgICAgICAgbUhhbmRsZS5EYXRh RW5kKCBOU19NSU4obUhhbmRsZS5EYXRhU3RhcnQoKSArIGFMZW5ndGgsIGFTdHJpbmcuRW5kUmVh ZGluZyhpdGVyKSkgKTsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50 U3Vic3RyaW5nKCBjb25zdCBjaGFyX3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hhcl90eXBlKiBh RW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVu dFNpbmdsZUZyYWdtZW50U3Vic3RyaW5nKCBjb25zdCBhYnN0cmFjdF9zaW5nbGVfZnJhZ21lbnRf dHlwZSYgYVN0cmluZywgY29uc3QgUFJVaW50MzIgYVN0YXJ0UG9zLCBjb25zdCBQUlVpbnQzMiBh TGVuZ3RoICkgeyBSZWJpbmQoYVN0cmluZywgYVN0YXJ0UG9zLCBhTGVuZ3RoKTsgfQoKCgoKICAg IHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAg IHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEJ1ZmZl ckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IGJ1ZmZlcl9o YW5kbGVfdHlwZSogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgogICAgICBjb25zdF9idWZm ZXJfaGFuZGxlX3R5cGUgbUhhbmRsZTsKICB9OwoKCmNsYXNzIG5zRGVwZW5kZW50U2luZ2xlRnJh Z21lbnRDU3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVNpbmdsZUZyYWdtZW50Q1N0cmluZwog IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50Q1N1 YnN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5n IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlOwoKICAgICAgdm9pZAogICAgICBSZWJpbmQo IGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQdHIgKQog ICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0 cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAg dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlJiBh U3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFMZW5ndGgg KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3IgaXRlcjsKICAgICAgICAg IG1IYW5kbGUuRGF0YVN0YXJ0KGFTdHJpbmcuQmVnaW5SZWFkaW5nKGl0ZXIpICsgTlNfTUlOKGFT dGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkpOwogICAgICAgICAgbUhhbmRsZS5EYXRhRW5kKCBO U19NSU4obUhhbmRsZS5EYXRhU3RhcnQoKSArIGFMZW5ndGgsIGFTdHJpbmcuRW5kUmVhZGluZyhp dGVyKSkgKTsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50Q1N1YnN0 cmluZyggY29uc3QgY2hhcl90eXBlKiBhU3RhcnRQdHIsIGNvbnN0IGNoYXJfdHlwZSogYUVuZFB0 ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBlbmRlbnRTaW5n bGVGcmFnbWVudENTdWJzdHJpbmcoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBl JiBhU3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFMZW5n dGggKSB7IFJlYmluZChhU3RyaW5nLCBhU3RhcnRQb3MsIGFMZW5ndGgpOyB9CgoKCgogICAgcHJp dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi bGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFu ZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRs ZV90eXBlKiA+KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9o YW5kbGVfdHlwZSBtSGFuZGxlOwogIH07CgoKCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENTdWJz dHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3Rh cnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVu ZGVudENTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9 CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FT dHJpbmcmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xl bmd0aCApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50U3Vic3RyaW5nKGFTdHJpbmcsIGFTdGFy dFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q1N1 YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU3Rh cnQsIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhRW5kICkKICB7CiAgICByZXR1 cm4gbnNEZXBlbmRlbnRDU3Vic3RyaW5nKGFTdGFydCwgYUVuZCk7CiAgfQoKaW5saW5lCmNvbnN0 IG5zRGVwZW5kZW50U3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBU3RyaW5nOjpjb25zdF9p dGVyYXRvciYgYVN0YXJ0LCBjb25zdCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhRW5kICkK ICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9CgoK aW5saW5lCmNvbnN0IG5zRGVwZW5kZW50U2luZ2xlRnJhZ21lbnRDU3Vic3RyaW5nClN1YnN0cmlu ZyggY29uc3QgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3Rh cnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVu ZGVudFNpbmdsZUZyYWdtZW50Q1N1YnN0cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFTdWJzdHJp bmdMZW5ndGgpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50U3Vi c3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcmIGFTdHJpbmcs IFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewogICAg cmV0dXJuIG5zRGVwZW5kZW50U2luZ2xlRnJhZ21lbnRTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0 UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTaW5n bGVGcmFnbWVudENTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FTaW5nbGVGcmFnbWVudENT dHJpbmc6OmNvbnN0X2NoYXJfaXRlcmF0b3ImIGFTdGFydCwgY29uc3QgbnNBU2luZ2xlRnJhZ21l bnRDU3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhRW5kICkKICB7CiAgICByZXR1cm4gbnNE ZXBlbmRlbnRTaW5nbGVGcmFnbWVudENTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9Cgppbmxp bmUKY29uc3QgbnNEZXBlbmRlbnRTaW5nbGVGcmFnbWVudFN1YnN0cmluZwpTdWJzdHJpbmcoIGNv bnN0IG5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhU3RhcnQs IGNvbnN0IG5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhRW5k ICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTaW5nbGVGcmFnbWVudFN1YnN0cmluZyhhU3Rh cnQsIGFFbmQpOwogIH0KIyA2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmlu ZzIuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxh dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNl RmxhdFN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTaGFyYWJs ZVN0cmluZy5oIiAxCiMgMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTaGFyYWJs ZVN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJIYW5k bGVVdGlscy5oIiAxCiMgMzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJI YW5kbGVVdGlscy5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4y LjIvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyA0MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwoj IDQ3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvZysr LXYzL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNDIgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvbmV3IiAy IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv ZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7Cgpu YW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAg ZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7 CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoK ICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg ICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv bigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo KTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0 ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2 b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhw ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7 CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMg OTggIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9nKyst djMvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2Vf dGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsK Cm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgog IHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5i YWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVy biBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVy KSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7 Cn0KIyA3OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl L2crKy12My9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3Rk OjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0 ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQg b3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6 OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBu ZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w ZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7 CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJv dygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXpl X3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVy YXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJh dG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgMzcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJIYW5kbGVVdGlscy5oIiAyCgoKCnRlbXBsYXRl IDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNBdXRvQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgog ICAgICBuc0F1dG9CdWZmZXJIYW5kbGUoKSA6IG1IYW5kbGUoMCkgeyB9CgogICAgICBuc0F1dG9C dWZmZXJIYW5kbGUoIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIGFPdGhlciApCiAg ICAgICAgICA6IG1IYW5kbGUoYU90aGVyLmdldCgpKQogICAgICAgIHsKICAgICAgICAgIGlmICgg bUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAg ICB9CgogICAgICBleHBsaWNpdAogICAgICBuc0F1dG9CdWZmZXJIYW5kbGUoIGNvbnN0IG5zU2hh cmVkQnVmZmVySGFuZGxlPENoYXJUPiogYUhhbmRsZSApCiAgICAgICAgICA6IG1IYW5kbGUoIGNv bnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPihhSGFuZGxlKSApCiAgICAg ICAgewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+QWNxdWly ZVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgfm5zQXV0b0J1ZmZlckhhbmRsZSgpCiAgICAg ICAgewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+UmVsZWFz ZVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4m CiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiByaHMg KQogICAgICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogb2xkX2hh bmRsZSA9IG1IYW5kbGU7CiAgICAgICAgICBpZiAoIChtSGFuZGxlID0gY29uc3RfY2FzdDwgbnNT aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHJocykpICkKICAgICAgICAgICAgbUhhbmRsZS0+ QWNxdWlyZVJlZmVyZW5jZSgpOwogICAgICAgICAgaWYgKCBvbGRfaGFuZGxlICkKICAgICAgICAg ICAgb2xkX2hhbmRsZS0+UmVsZWFzZVJlZmVyZW5jZSgpOwogICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mCiAgICAgIG9wZXJh dG9yPSggY29uc3QgbnNBdXRvQnVmZmVySGFuZGxlPENoYXJUPiYgcmhzICkKICAgICAgICB7CiAg ICAgICAgICByZXR1cm4gb3BlcmF0b3I9KHJocy5nZXQoKSk7CiAgICAgICAgfQoKICAgICAgbnNT aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KgogICAgICBnZXQoKSBjb25zdAogICAgICAgIHsKICAg ICAgICAgIHJldHVybiBtSGFuZGxlOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zU2hhcmVk QnVmZmVySGFuZGxlPENoYXJUPiooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn ZXQoKTsKICAgICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qCiAgICAg IG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAg ICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiBt SGFuZGxlOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxp bmUKc2l6ZV90Ck5TX0FsaWduZWRIYW5kbGVTaXplKCBjb25zdCBIYW5kbGVUKiwgY29uc3QgQ2hh clQqICkKICB7CgogICAgcmV0dXJuICgoc2l6ZW9mKEhhbmRsZVQpICsgc2l6ZW9mKENoYXJUKSAt IDEpIC8gc2l6ZW9mKENoYXJUKSkgKiBzaXplb2YoQ2hhclQpOwogIH0KCnRlbXBsYXRlIDxjbGFz cyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCmNvbnN0IENoYXJUKgpOU19EYXRhQWZ0ZXJI YW5kbGUoIGNvbnN0IEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENoYXJUKiBhRHVtbXlDaGFy VFB0ciApCiAgewogICAgdHlwZWRlZiBjb25zdCBDaGFyVCogQ2hhclRfcHRyOwogICAgcmV0dXJu IENoYXJUX3B0cihzdGF0aWNfY2FzdDwgY29uc3QgdW5zaWduZWQgY2hhciogPihhSGFuZGxlUHRy KSArIE5TX0FsaWduZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7CiAg fQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxpbmUKQ2hhclQqCk5T X0RhdGFBZnRlckhhbmRsZSggSGFuZGxlVCogYUhhbmRsZVB0ciwgY29uc3QgQ2hhclQqIGFEdW1t eUNoYXJUUHRyICkKICB7CiAgICB0eXBlZGVmIENoYXJUKiBDaGFyVF9wdHI7CiAgICByZXR1cm4g Q2hhclRfcHRyKHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFyKiA+KGFIYW5kbGVQdHIpICsgTlNf QWxpZ25lZEhhbmRsZVNpemUoYUhhbmRsZVB0ciwgYUR1bW15Q2hhclRQdHIpKTsKICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KSGFuZGxlVCoKTlNfQWxsb2NhdGVD b250aWd1b3VzSGFuZGxlV2l0aERhdGEoIGNvbnN0IEhhbmRsZVQqIGFEdW1teUhhbmRsZVB0ciwg UFJVaW50MzIgYUFkZGl0aW9uYWxDYXBhY2l0eSwgY29uc3QgU3RyaW5nVCogYURhdGFTb3VyY2Ug KQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RyaW5nVDo6Y2hhcl90eXBlIGNoYXJfdHlwZTsK ICAgIHR5cGVkZWYgY2hhcl90eXBlKiBjaGFyX3B0cjsKCgogICAgc2l6ZV90IGhhbmRsZV9zaXpl ID0gTlNfQWxpZ25lZEhhbmRsZVNpemUoYUR1bW15SGFuZGxlUHRyLCBjaGFyX3B0cigwKSk7CgoK ICAgIHNpemVfdCBkYXRhX2xlbmd0aCA9IGFEYXRhU291cmNlPyBhRGF0YVNvdXJjZS0+TGVuZ3Ro KCkgOiAwOwogICAgc2l6ZV90IGJ1ZmZlcl9sZW5ndGggPSBkYXRhX2xlbmd0aCArIGFBZGRpdGlv bmFsQ2FwYWNpdHk7CgoKICAgIHNpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9sZW5ndGggKiBz aXplb2YoY2hhcl90eXBlKTsKCgogICAgSGFuZGxlVCogcmVzdWx0ID0gMDsKICAgIHZvaWQqIGhh bmRsZV9wdHIgPSA6Om9wZXJhdG9yIG5ldyhoYW5kbGVfc2l6ZSArIGJ1ZmZlcl9zaXplKTsKCiAg ICBpZiAoIGhhbmRsZV9wdHIgKQogICAgICB7CiAgICAgICAgY2hhcl9wdHIgZGF0YV9zdGFydF9w dHIgPSBjaGFyX3B0cihzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihoYW5kbGVfcHRyKSAr IGhhbmRsZV9zaXplKTsKICAgICAgICBjaGFyX3B0ciBkYXRhX2VuZF9wdHIgPSBkYXRhX3N0YXJ0 X3B0ciArIGRhdGFfbGVuZ3RoOwogICAgICAgIGNoYXJfcHRyIGJ1ZmZlcl9lbmRfcHRyID0gZGF0 YV9zdGFydF9wdHIgKyBidWZmZXJfbGVuZ3RoOwoKICAgICAgICBjaGFyX3B0ciB0b0JlZ2luID0g ZGF0YV9zdGFydF9wdHI7CgogICAgICAgIGlmICggZGF0YV9sZW5ndGggKQogICAgICAgICAgewog ICAgICAgICAgICB0eXBlbmFtZSBTdHJpbmdUOjpjb25zdF9pdGVyYXRvciBmcm9tQmVnaW4sIGZy b21FbmQ7CiAgICAgICAgICAgIGNvcHlfc3RyaW5nKGFEYXRhU291cmNlLT5CZWdpblJlYWRpbmco ZnJvbUJlZ2luKSwgYURhdGFTb3VyY2UtPkVuZFJlYWRpbmcoZnJvbUVuZCksIHRvQmVnaW4pOwog ICAgICAgICAgfQoKCiAgICAgICAgaWYgKCBhQWRkaXRpb25hbENhcGFjaXR5ID4gMCApCiAgICAg ICAgICAqdG9CZWdpbiA9IGNoYXJfdHlwZSgwKTsKCiAgICAgICAgcmVzdWx0ID0gbmV3IChoYW5k bGVfcHRyKSBIYW5kbGVUKGRhdGFfc3RhcnRfcHRyLCBkYXRhX2VuZF9wdHIsIGJ1ZmZlcl9lbmRf cHRyIC0gZGF0YV9zdGFydF9wdHIsIDEpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KaW5saW5lCkhhbmRsZVQq Ck5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVt bXlIYW5kbGVQdHIsIGNvbnN0IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQzMiBhQWRkaXRp b25hbENhcGFjaXR5ICkKICB7CiAgICByZXR1cm4gTlNfQWxsb2NhdGVDb250aWd1b3VzSGFuZGxl V2l0aERhdGEoYUR1bW15SGFuZGxlUHRyLCBhQWRkaXRpb25hbENhcGFjaXR5LCAmYURhdGFTb3Vy Y2UpOwogIH0KIyAzNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxlU3Ry aW5nLmgiIDIKIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxlU3Ry aW5nLmgiCmNsYXNzIG5zU2hhcmFibGVTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRTdHJpbmcK ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNTaGFyYWJsZVN0cmluZyBzZWxmX3R5cGU7 CgogICAgcHVibGljOgogICAgICBuc1NoYXJhYmxlU3RyaW5nKCkgOiBtQnVmZmVyKEdldFNoYXJl ZEVtcHR5QnVmZmVySGFuZGxlKCkpIHsgfQogICAgICBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBz ZWxmX3R5cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIubUJ1ZmZlcikgeyB9CiAgICAgIGV4 cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVh ZGFibGUgKQogICAgICAgIHsKCgogICAgICAgICAgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFk YWJsZSk7CiAgICAgICAgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBz aGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBhSGFuZGxlICkKICAgICAgICAgIDogbUJ1ZmZlcihh SGFuZGxlKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICB9CgoKICAgICAgc2VsZl90eXBl JiBvcGVyYXRvcj0oIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVhZGFibGUgKQogICAg ICAgIHsKICAgICAgICAgIEFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KIyA4MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxl U3RyaW5nLmgiCiAgICAgIHZvaWQgQWRvcHQoIGNoYXJfdHlwZSogYU5ld1ZhbHVlICk7CgoKCgoK CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIHZvaWQgU2V0Q2FwYWNpdHkoIHNpemVfdHlwZSBh TmV3Q2FwYWNpdHkgKTsKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBlIGFO ZXdMZW5ndGggKTsKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZy b21SZWFkYWJsZSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApOwogICAg ICB2aXJ0dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZl ckhhbmRsZSgpIGNvbnN0OwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdl dFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJV aW50MzIgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHN0YXRpYyBzaGFyZWRfYnVmZmVyX2hhbmRs ZV90eXBlKiBHZXRTaGFyZWRFbXB0eUJ1ZmZlckhhbmRsZSgpOwoKICAgIHByb3RlY3RlZDoKICAg ICAgbnNBdXRvQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gbUJ1ZmZlcjsKICB9OwoKCmNsYXNzIG5z U2hhcmFibGVDU3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBuc1NoYXJhYmxlQ1N0cmluZyBzZWxmX3R5cGU7CgogICAgcHVibGlj OgogICAgICBuc1NoYXJhYmxlQ1N0cmluZygpIDogbUJ1ZmZlcihHZXRTaGFyZWRFbXB0eUJ1ZmZl ckhhbmRsZSgpKSB7IH0KICAgICAgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0IHNlbGZfdHlwZSYg YU90aGVyICkgOiBtQnVmZmVyKGFPdGhlci5tQnVmZmVyKSB7IH0KICAgICAgZXhwbGljaXQgbnNT aGFyYWJsZUNTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVhZGFibGUgKQog ICAgICAgIHsKCgogICAgICAgICAgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7CiAg ICAgICAgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc2hhcmVkX2J1 ZmZlcl9oYW5kbGVfdHlwZSogYUhhbmRsZSApCiAgICAgICAgICA6IG1CdWZmZXIoYUhhbmRsZSkK ICAgICAgICB7CiAgICAgICAgICA7CiAgICAgICAgfQoKCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0 b3I9KCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYVJlYWRhYmxlICkKICAgICAgICB7CiAg ICAgICAgICBBc3NpZ24oYVJlYWRhYmxlKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg ICB9CiMgMTQ1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU2hhcmFibGVTdHJpbmcu aCIKICAgICAgdm9pZCBBZG9wdCggY2hhcl90eXBlKiBhTmV3VmFsdWUgKTsKCgoKCgoKCiAgICBw dWJsaWM6CiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlIGFOZXdDYXBh Y2l0eSApOwogICAgICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgYU5ld0xlbmd0 aCApOwogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRh YmxlKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYVJlYWRhYmxlICk7CiAgICAgIHZpcnR1 YWwgY29uc3Qgc2hhcmVkX2J1ZmZlcl9oYW5kbGVfdHlwZSogR2V0U2hhcmVkQnVmZmVySGFuZGxl KCkgY29uc3Q7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFi bGVGcmFnbWVudCggZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp OwoKICAgIHByb3RlY3RlZDoKICAgICAgc3RhdGljIHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUq IEdldFNoYXJlZEVtcHR5QnVmZmVySGFuZGxlKCk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc0F1 dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CiMgMjkgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxhdFN0cmluZy5oIiAyCiMgODMgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxhdFN0cmluZy5oIgpjbGFzcyBuc1Byb21p c2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgZnJpZW5kIGNv bnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IGFic3RyYWN0 X3N0cmluZ190eXBlJiApOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc1Byb21pc2VGbGF0 U3RyaW5nIHNlbGZfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZsYXRTdHJpbmco IGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zUHJvbWlzZUZsYXRT dHJpbmcoKSA6IG1Qcm9taXNlZFN0cmluZygmbUZsYXR0ZW5lZFN0cmluZykgeyB9CiAgICAgIGV4 cGxpY2l0IG5zUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBh U3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEZs YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxl X3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IHNoYXJl ZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCgog ICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogZ2V0KCkgY29uc3Q7CiAg ICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9mcmFn bWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CgoKICAgIHBy aXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZyYg KTsKCiAgICBwcml2YXRlOgogICAgICBuc1NoYXJhYmxlU3RyaW5nIG1GbGF0dGVuZWRTdHJpbmc7 CiAgICAgIGNvbnN0IG5zQUZsYXRTdHJpbmcqIG1Qcm9taXNlZFN0cmluZzsKICB9OwoKY2xhc3Mg bnNQcm9taXNlRmxhdENTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewogICAg ZnJpZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nIFByb21pc2VGbGF0Q1N0cmluZyggY29u c3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmICk7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5z UHJvbWlzZUZsYXRDU3RyaW5nIHNlbGZfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlz ZUZsYXRDU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBu c1Byb21pc2VGbGF0Q1N0cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5n KSB7IH0KICAgICAgZXhwbGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IGFic3RyYWN0 X3N0cmluZ190eXBlJiBhU3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFu ZGxlX3R5cGUqIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z dCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0 dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRs ZSgpIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSog Z2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdt ZW50KCBjb25zdF9mcmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg Y29uc3Q7CgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90 eXBlJiApOwoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmFibGVDU3RyaW5nIG1GbGF0dGVuZWRT dHJpbmc7CiAgICAgIGNvbnN0IG5zQUZsYXRDU3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsK CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZwpQcm9taXNlRmxhdFN0cmluZyggY29u c3QgbnNBU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlRmxhdFN0cmlu ZyhhU3RyaW5nKTsKICB9CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcKUHJvbWlz ZUZsYXRDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4g bnNQcm9taXNlRmxhdENTdHJpbmcoYVN0cmluZyk7CiAgfQojIDcxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc1hQSURMU3RyaW5nLmgiIDEKIyAxMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNYUElETFN0cmluZy5oIgpjbGFzcyBuc1hQSURMU3RyaW5nCiAgICA6IHB1YmxpYyBu c1NoYXJhYmxlU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zWFBJRExTdHJp bmcgc2VsZl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNYUElETFN0cmluZygpCiAgICAgICAg ICA6IG5zU2hhcmFibGVTdHJpbmcoR2V0U2hhcmVkRW1wdHlCdWZmZXJIYW5kbGUoKSkKICAgICAg ICB7CgoKCgoKICAgICAgICB9CgogICAgICBuc1hQSURMU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUm IGFTdHJpbmcgKQogICAgICAgICAgOiBuc1NoYXJhYmxlU3RyaW5nKGFTdHJpbmcubUJ1ZmZlci5n ZXQoKSkKCiAgICAgICAgewoKCgoKCiAgICAgICAgfQoKICAgICAgZXhwbGljaXQgbnNYUElETFN0 cmluZyggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgICA6 IG5zU2hhcmFibGVTdHJpbmcoYVJlYWRhYmxlKQogICAgICAgIHsKCgoKCgogICAgICAgIH0KIyAx NzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogICAgICBz ZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFS ZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgQXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKCgoKICAgICAgdm9pZCBBZG9wdCggY2hhcl90 eXBlKiBhTmV3VmFsdWUgKSB7ICpQcmVwYXJlRm9yVXNlQXNPdXRQYXJhbSgpID0gYU5ld1ZhbHVl OyB9CgoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIGdldCgpIGNvbnN0CiAgICAgICAg ewogICAgICAgICAgcmV0dXJuIChtQnVmZmVyLT5HZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgJiBz aGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOjprSXNOVUxMKQogICAgICAgICAgICAgICAgICAgPyAw CiAgICAgICAgICAgICAgICAgICA6IG1CdWZmZXItPkRhdGFTdGFydCgpOwogICAgICAgIH0KCgog ICAgICBvcGVyYXRvciBjb25zdCBjaGFyX3R5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K ICAgICAgY2hhcl90eXBlIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClb IGkgXTsgfQoKCiAgICAgIGNsYXNzIGdldHRlcl9Db3BpZXNfdAogICAgICAgIHsKICAgICAgICAg IHB1YmxpYzoKICAgICAgICAgICAgZ2V0dGVyX0NvcGllc190KCBuc1hQSURMU3RyaW5nJiBhU3Ry aW5nICkgOiBtU3RyaW5nKCZhU3RyaW5nKSB7IH0KCgoKICAgICAgICAgICAgb3BlcmF0b3IgY2hh cl90eXBlKiooKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLT5QcmVwYXJlRm9yVXNlQXNPdXRQYXJh bSgpOyB9CgogICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgbnNYUElETFN0cmluZyogbVN0 cmluZzsKICAgICAgICB9OwoKICAgICAgZnJpZW5kIGNsYXNzIGdldHRlcl9Db3BpZXNfdDsKCiAg ICBwcm90ZWN0ZWQ6CgoKCgogICAgICB2aXJ0dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxl X3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCiAgICAgIGNoYXJfdHlwZSoq IFByZXBhcmVGb3JVc2VBc091dFBhcmFtKCk7CgogICAgICBzdGF0aWMgc2hhcmVkX2J1ZmZlcl9o YW5kbGVfdHlwZSogR2V0U2hhcmVkRW1wdHlCdWZmZXJIYW5kbGUoKTsKIyAyMzkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogIH07CgppbmxpbmUKbnNYUElE TFN0cmluZzo6Z2V0dGVyX0NvcGllc190CmdldHRlcl9Db3BpZXMoIG5zWFBJRExTdHJpbmcmIGFT dHJpbmcgKQogIHsKICAgIHJldHVybiBuc1hQSURMU3RyaW5nOjpnZXR0ZXJfQ29waWVzX3QoYVN0 cmluZyk7CiAgfQoKCgpjbGFzcyBuc1hQSURMQ1N0cmluZwogICAgOiBwdWJsaWMgbnNTaGFyYWJs ZUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNYUElETENTdHJpbmcgc2Vs Zl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNYUElETENTdHJpbmcoKQogICAgICAgICAgOiBu c1NoYXJhYmxlQ1N0cmluZyhHZXRTaGFyZWRFbXB0eUJ1ZmZlckhhbmRsZSgpKQogICAgICAgIHsK CgoKCgogICAgICAgIH0KCiAgICAgIG5zWFBJRExDU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmIGFT dHJpbmcgKQogICAgICAgICAgOiBuc1NoYXJhYmxlQ1N0cmluZyhhU3RyaW5nLm1CdWZmZXIuZ2V0 KCkpCgogICAgICAgIHsKCgoKCgogICAgICAgIH0KIyAyODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9y PSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAg ICAgICAgQXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg fQoKCgoKCgoKICAgICAgdm9pZCBBZG9wdCggY2hhcl90eXBlKiBhTmV3VmFsdWUgKSB7ICpQcmVw YXJlRm9yVXNlQXNPdXRQYXJhbSgpID0gYU5ld1ZhbHVlOyB9CgoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqIGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChtQnVm ZmVyLT5HZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgJiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBl OjprSXNOVUxMKQogICAgICAgICAgICAgICAgICAgPyAwCiAgICAgICAgICAgICAgICAgICA6IG1C dWZmZXItPkRhdGFTdGFydCgpOwogICAgICAgIH0KCgogICAgICBvcGVyYXRvciBjb25zdCBjaGFy X3R5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KICAgICAgY2hhcl90eXBlIG9wZXJhdG9y W10oIGludCBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClbIGkgXTsgfQoKCiAgICAgIGNsYXNzIGdl dHRlcl9Db3BpZXNfdAogICAgICAgIHsKICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgZ2V0 dGVyX0NvcGllc190KCBuc1hQSURMQ1N0cmluZyYgYVN0cmluZyApIDogbVN0cmluZygmYVN0cmlu ZykgeyB9CgoKCiAgICAgICAgICAgIG9wZXJhdG9yIGNoYXJfdHlwZSoqKCkgY29uc3QgeyByZXR1 cm4gbVN0cmluZy0+UHJlcGFyZUZvclVzZUFzT3V0UGFyYW0oKTsgfQoKICAgICAgICAgIHByaXZh dGU6CiAgICAgICAgICAgIG5zWFBJRExDU3RyaW5nKiBtU3RyaW5nOwogICAgICAgIH07CgogICAg ICBmcmllbmQgY2xhc3MgZ2V0dGVyX0NvcGllc190OwoKICAgIHByb3RlY3RlZDoKCgoKCiAgICAg IHZpcnR1YWwgY29uc3Qgc2hhcmVkX2J1ZmZlcl9oYW5kbGVfdHlwZSogR2V0U2hhcmVkQnVmZmVy SGFuZGxlKCkgY29uc3Q7CgoKICAgICAgY2hhcl90eXBlKiogUHJlcGFyZUZvclVzZUFzT3V0UGFy YW0oKTsKCiAgICAgIHN0YXRpYyBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRTaGFyZWRF bXB0eUJ1ZmZlckhhbmRsZSgpOwojIDM1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9u c1hQSURMU3RyaW5nLmgiCiAgfTsKCmlubGluZQpuc1hQSURMQ1N0cmluZzo6Z2V0dGVyX0NvcGll c190CmdldHRlcl9Db3BpZXMoIG5zWFBJRExDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1 cm4gbnNYUElETENTdHJpbmc6OmdldHRlcl9Db3BpZXNfdChhU3RyaW5nKTsKICB9CiMgNzUgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiIDIKCgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHIuaCIgMQojIDIxMiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3N0cmluZy9uc1N0ci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01l bW9yeS5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lNZW1vcnkuaCIgMQojIDU0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTWVtb3J5LmgiCmNsYXNzIG5zSU1lbW9yeSA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1OWU3ZTc3YSwgMHgzOGU0LCAweDExZDQs IHsgMHg4YywgMHhmNSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0 dXJuIGlpZDt9CiMgNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lNZW1vcnkuaCIK ICB2aXJ0dWFsIHZvaWQgKiBBbGxvYyhzaXplX3Qgc2l6ZSkgPSAwOwojIDg1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkICogUmVhbGxvYyh2 b2lkICogcHRyLCBzaXplX3QgbmV3U2l6ZSkgPSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkIEZyZWUodm9pZCAqIHB0cikgPSAw OwojIDEwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU1lbW9yeS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgSGVhcE1pbmltaXplKFBSQm9vbCBpbW1lZGlhdGUpID0gMDsKCgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBJc0xvd01lbW9yeShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMg NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIiAyCiMgNjMgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIgpjbGFzcyBuc01lbW9yeQp7CnB1Ymxp YzoKICAgIHN0YXRpYyB2b2lkKiBBbGxvYyhzaXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMgdm9pZCog UmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyB2b2lkIEZyZWUodm9p ZCogcHRyKTsKICAgIHN0YXRpYyBuc3Jlc3VsdCBIZWFwTWluaW1pemUoUFJCb29sIGFJbW1lZGlh dGUpOwogICAgc3RhdGljIHZvaWQqIENsb25lKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUp OwogICAgc3RhdGljIG5zSU1lbW9yeSogR2V0R2xvYmFsTWVtb3J5U2VydmljZSgpOwp9OwojIDIx MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0ci5oIiAyCgoKIyAxICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w bGhhc2guaCIgMQojIDQzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0 cnVjdCBQTEhhc2hFbnRyeSBQTEhhc2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUExIYXNoVGFibGUg UExIYXNoVGFibGU7CnR5cGVkZWYgUFJVaW50MzIgUExIYXNoTnVtYmVyOwoKdHlwZWRlZiBQTEhh c2hOdW1iZXIgKCAqUExIYXNoRnVuY3Rpb24pKGNvbnN0IHZvaWQgKmtleSk7CnR5cGVkZWYgUFJJ bnRuICggKlBMSGFzaENvbXBhcmF0b3IpKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Mik7 CgoKCgp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hFbnVtZXJhdG9yKShQTEhhc2hFbnRyeSAqaGUs IFBSSW50biBpLCB2b2lkICphcmcpOwojIDY3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4z LXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKdHlwZWRlZiBzdHJ1 Y3QgUExIYXNoQWxsb2NPcHMgewogICAgdm9pZCAqICggKmFsbG9jVGFibGUpKHZvaWQgKnBvb2ws IFBSU2l6ZSBzaXplKTsKICAgIHZvaWQgKCAqZnJlZVRhYmxlKSh2b2lkICpwb29sLCB2b2lkICpp dGVtKTsKICAgIFBMSGFzaEVudHJ5ICogKCAqYWxsb2NFbnRyeSkodm9pZCAqcG9vbCwgY29uc3Qg dm9pZCAqa2V5KTsKICAgIHZvaWQgKCAqZnJlZUVudHJ5KSh2b2lkICpwb29sLCBQTEhhc2hFbnRy eSAqaGUsIFBSVWludG4gZmxhZyk7Cn0gUExIYXNoQWxsb2NPcHM7CgoKCgpzdHJ1Y3QgUExIYXNo RW50cnkgewogICAgUExIYXNoRW50cnkgKm5leHQ7CiAgICBQTEhhc2hOdW1iZXIga2V5SGFzaDsK ICAgIGNvbnN0IHZvaWQgKmtleTsKICAgIHZvaWQgKnZhbHVlOwp9OwoKc3RydWN0IFBMSGFzaFRh YmxlIHsKICAgIFBMSGFzaEVudHJ5ICoqYnVja2V0czsKICAgIFBSVWludDMyIG5lbnRyaWVzOwog ICAgUFJVaW50MzIgc2hpZnQ7CiAgICBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoOwogICAgUExIYXNo Q29tcGFyYXRvciBrZXlDb21wYXJlOwogICAgUExIYXNoQ29tcGFyYXRvciB2YWx1ZUNvbXBhcmU7 CiAgICBjb25zdCBQTEhhc2hBbGxvY09wcyAqYWxsb2NPcHM7CiAgICB2b2lkICphbGxvY1Bvb2w7 CgoKCgoKCn07CgoKCgoKZXh0ZXJuIFBMSGFzaFRhYmxlICoKUExfTmV3SGFzaFRhYmxlKFBSVWlu dDMyIG51bUJ1Y2tldHMsIFBMSGFzaEZ1bmN0aW9uIGtleUhhc2gsCiAgICAgICAgICAgICAgICBQ TEhhc2hDb21wYXJhdG9yIGtleUNvbXBhcmUsIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJl LAogICAgICAgICAgICAgICAgY29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzLCB2b2lkICph bGxvY1Bvb2wpOwoKZXh0ZXJuIHZvaWQKUExfSGFzaFRhYmxlRGVzdHJveShQTEhhc2hUYWJsZSAq aHQpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZUFkZChQTEhhc2hUYWJsZSAq aHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKZXh0ZXJuIFBSQm9vbApQTF9IYXNo VGFibGVSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIHZv aWQgKgpQTF9IYXNoVGFibGVMb29rdXAoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkp OwoKZXh0ZXJuIHZvaWQgKgpQTF9IYXNoVGFibGVMb29rdXBDb25zdChQTEhhc2hUYWJsZSAqaHQs IGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUFJJbnRuClBMX0hhc2hUYWJsZUVudW1lcmF0ZUVu dHJpZXMoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGYsIHZvaWQgKmFyZyk7CgoK ZXh0ZXJuIFBMSGFzaE51bWJlcgpQTF9IYXNoU3RyaW5nKGNvbnN0IHZvaWQgKmtleSk7CgoKZXh0 ZXJuIFBSSW50bgpQTF9Db21wYXJlU3RyaW5ncyhjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAq djIpOwoKCmV4dGVybiBQUkludG4KUExfQ29tcGFyZVZhbHVlcyhjb25zdCB2b2lkICp2MSwgY29u c3Qgdm9pZCAqdjIpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29r dXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwgY29uc3Qgdm9pZCAqa2V5 KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29rdXBDb25zdChQTEhh c2hUYWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlIYXNoLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoKUExfSGFzaFRhYmxl UmF3QWRkKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50cnkgKipoZXAsIFBMSGFzaE51bWJlciBr ZXlIYXNoLAogICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7 CgpleHRlcm4gdm9pZApQTF9IYXNoVGFibGVSYXdSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBQTEhh c2hFbnRyeSAqKmhlcCwgUExIYXNoRW50cnkgKmhlKTsKCgpleHRlcm4gUFJJbnRuClBMX0hhc2hU YWJsZUR1bXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGR1bXAsIEZJTEUgKmZw KTsKCn0KIyAyMTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHIuaCIgMgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJTaGFyZWQuaCIgMQoKCgoKCmVudW0g ZUNoYXJTaXplIHtlT25lQnl0ZT0wLGVUd29CeXRlPTF9OwojIDIxNyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0ci5oIiAyCiMgMjM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zU3RyLmgiCmNvbnN0IFBSSW50MzIga0RlZmF1bHRTdHJpbmdTaXplID0gNjQ7CmNvbnN0 IFBSSW50MzIga05vdEZvdW5kID0gLTE7CgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgQ0J1ZkRl c2NyaXB0b3IgewpwdWJsaWM6CiAgQ0J1ZkRlc2NyaXB0b3IoY2hhciogYVN0cmluZywgUFJCb29s IGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENC dWZEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVp bnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihQUlVu aWNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJ bnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcsUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9 LTEpOwoKICBjaGFyKiBtQnVmZmVyOwogIGVDaGFyU2l6ZSBtQ2hhclNpemU7CiAgUFJVaW50MzIg bUNhcGFjaXR5OwogIFBSSW50MzIgbUxlbmd0aDsKICBQUkJvb2wgbVN0YWNrQmFzZWQ7CiAgUFJC b29sIG1Jc0NvbnN0Owp9OwoKCgoKc3RydWN0IG5zU3RyIHsKCnByb3RlY3RlZDoKICBuc1N0cigp IHsKCgoKICB9CgogIH5uc1N0cigpIHsKCgoKICB9Cgpwcm90ZWN0ZWQ6CiAgdW5pb24gewogICAg Y2hhciogbVN0cjsKICAgIFBSVW5pY2hhciogbVVTdHI7CiAgfTsKCiAgUFJVaW50MzIgbUxlbmd0 aDsKICBQUlVpbnQzMiBtQ2FwYWNpdHlBbmRGbGFnczsKCiAgaW5saW5lIFBSVWludDMyIEdldENh cGFjaXR5KCkgY29uc3QgewoKICAgIHJldHVybiAobUNhcGFjaXR5QW5kRmxhZ3MgJiAofigoMTw8 KDMxKSkgfCAoMTw8KDMwKSkpKSk7CiAgfQoKICBpbmxpbmUgUFJCb29sIEdldE93bnNCdWZmZXIo KSBjb25zdCB7CiAgICByZXR1cm4gKChtQ2FwYWNpdHlBbmRGbGFncyAmICgxPDwoMzApKSkgIT0g MCk7CiAgfQoKICBpbmxpbmUgZUNoYXJTaXplIEdldENoYXJTaXplKCkgY29uc3QgewogICAgcmV0 dXJuIGVDaGFyU2l6ZShtQ2FwYWNpdHlBbmRGbGFncyA+PiAoMzEpKTsKICB9Cgpwcml2YXRlOgoK ICBpbmxpbmUgdm9pZCBTZXRJbnRlcm5hbENhcGFjaXR5KFBSVWludDMyIGFDYXBhY2l0eSkgewog ICAgbUNhcGFjaXR5QW5kRmxhZ3MgPQogICAgICAoKG1DYXBhY2l0eUFuZEZsYWdzICYgfih+KCgx PDwoMzEpKSB8ICgxPDwoMzApKSkpKSB8CiAgICAgICAoYUNhcGFjaXR5ICYgKH4oKDE8PCgzMSkp IHwgKDE8PCgzMCkpKSkpKTsKICB9CgogIGlubGluZSB2b2lkIFNldENoYXJTaXplKGVDaGFyU2l6 ZSBhQ2hhclNpemUpIHsKICAgIG1DYXBhY2l0eUFuZEZsYWdzID0KICAgICAgKChtQ2FwYWNpdHlB bmRGbGFncyAmIH4oMTw8KDMxKSkpIHwKICAgICAgIChQUlVpbnQzMihhQ2hhclNpemUpIDw8ICgz MSkpKTsKICB9CgogIGlubGluZSB2b2lkIFNldE93bnNCdWZmZXIoUFJCb29sIGFPd25zQnVmZmVy KSB7CiAgICBtQ2FwYWNpdHlBbmRGbGFncyA9CiAgICAgIChtQ2FwYWNpdHlBbmRGbGFncyAmIH4o MTw8KDMwKSkgfAogICAgICAgKGFPd25zQnVmZmVyID8gMSA6IDApIDw8ICgzMCkpOwogIH0KCiAg aW5saW5lIFBSVW5pY2hhciBHZXRDaGFyQXQoUFJVaW50MzIgYW5JbmRleCkgY29uc3QgewogICAg aWYoYW5JbmRleDxtTGVuZ3RoKSB7CiAgICAgIHJldHVybiAoZVR3b0J5dGU9PUdldENoYXJTaXpl KCkpID8gbVVTdHJbYW5JbmRleF0gOiAoUFJVbmljaGFyKW1TdHJbYW5JbmRleF07CiAgICB9CiAg ICByZXR1cm4gMDsKICB9CgpwdWJsaWM6CiAgZnJpZW5kCiAgY2hhcioKICBUb05ld1VURjhTdHJp bmcoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSApOwogIGZyaWVuZCBpbmxpbmUgdm9pZCBBZGRO dWxsVGVybWluYXRvcihuc1N0ciYgYURlc3QpOwogIGZyaWVuZCBjbGFzcyBuc1N0clByaXZhdGU7 CiAgZnJpZW5kIGNsYXNzIG5zU3RyaW5nOwogIGZyaWVuZCBjbGFzcyBuc0NTdHJpbmc7Cn07CiMg MzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyLmgiCmlubGluZSBQUkludDMy IE1pbkludChQUkludDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8 YW5JbnQyKSA/IGFuSW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50MzIgTWF4SW50KFBSSW50 MzIgYW5JbnQxLFBSSW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5J bnQyIDogYW5JbnQxOwp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWluYXRvcihuc1N0ciYgYURl c3QpIHsKICBpZihlVHdvQnl0ZT09YURlc3QuR2V0Q2hhclNpemUoKSkKICAgIGFEZXN0Lm1VU3Ry W2FEZXN0Lm1MZW5ndGhdPTA7CiAgZWxzZSBhRGVzdC5tU3RyW2FEZXN0Lm1MZW5ndGhdPTA7Cn0K CgoKCgoKCmlubGluZSB2b2lkIFJlY3ljbGUoIGNoYXIqIGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZy ZWUoYUJ1ZmZlcik7IH0KaW5saW5lIHZvaWQgUmVjeWNsZSggUFJVbmljaGFyKiBhQnVmZmVyKSB7 IG5zTWVtb3J5OjpGcmVlKGFCdWZmZXIpOyB9CiMgNzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNTdHJpbmcyLmgiIDIKCmNsYXNzIFVURjh0cmFpdHMKICB7CiAgICBwdWJsaWM6CiAg ICAgIHN0YXRpYyBQUkJvb2wgaXNBU0NJSShjaGFyIGMpIHsgcmV0dXJuIChjICYgMHg4MCkgPT0g MHgwMDsgfQogICAgICBzdGF0aWMgUFJCb29sIGlzSW5TZXEoY2hhciBjKSB7IHJldHVybiAoYyAm IDB4QzApID09IDB4ODA7IH0KICAgICAgc3RhdGljIFBSQm9vbCBpczJieXRlKGNoYXIgYykgeyBy ZXR1cm4gKGMgJiAweEUwKSA9PSAweEMwOyB9CiAgICAgIHN0YXRpYyBQUkJvb2wgaXMzYnl0ZShj aGFyIGMpIHsgcmV0dXJuIChjICYgMHhGMCkgPT0gMHhFMDsgfQogICAgICBzdGF0aWMgUFJCb29s IGlzNGJ5dGUoY2hhciBjKSB7IHJldHVybiAoYyAmIDB4RjgpID09IDB4RjA7IH0KICAgICAgc3Rh dGljIFBSQm9vbCBpczVieXRlKGNoYXIgYykgeyByZXR1cm4gKGMgJiAweEZDKSA9PSAweEY4OyB9 CiAgICAgIHN0YXRpYyBQUkJvb2wgaXM2Ynl0ZShjaGFyIGMpIHsgcmV0dXJuIChjICYgMHhGRSkg PT0gMHhGQzsgfQogIH07CgoKCgoKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNDU3Ry aW5nOwoKCmNsYXNzIG5zU3RyaW5nIDoKICBwdWJsaWMgbnNBRmxhdFN0cmluZywKICBwdWJsaWMg bnNTdHIgewoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBuc0NTdHJpbmc7CiAgZnJpZW5kIGNsYXNz IG5zTGluZWJyZWFrQ29udmVydGVyOwogIGZyaWVuZCB2b2lkIFRvTG93ZXJDYXNlKCBuc1N0cmlu ZyYgKTsKICBmcmllbmQgdm9pZCBUb1VwcGVyQ2FzZSggbnNTdHJpbmcmICk7Cgpwcm90ZWN0ZWQ6 CiAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVy SGFuZGxlKCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxlRnJh Z21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3Qs IFBSVWludDMyICkgY29uc3Q7CiAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxlRnJhZ21l bnQoIG5zV3JpdGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBS VWludDMyICk7CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0 OwoKcHVibGljOgoKCgogIG5zU3RyaW5nKCk7CgoKCgoKICBuc1N0cmluZyhjb25zdCBuc1N0cmlu ZyYgYVN0cmluZyk7CgogIGV4cGxpY2l0IG5zU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYpOwoKICBl eHBsaWNpdCBuc1N0cmluZyhjb25zdCBQUlVuaWNoYXIqKTsKICBuc1N0cmluZyhjb25zdCBQUlVu aWNoYXIqLCBQUkludDMyKTsKCgoKCgoKICB2aXJ0dWFsIH5uc1N0cmluZygpOwoKCgoKCiAgdmly dHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CgoKCgoKCgog IHZvaWQgU2V0TGVuZ3RoKFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCgogIHZvaWQgU2V0Q2FwYWNp dHkoUFJVaW50MzIgYUxlbmd0aCk7CiMgMTcwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zU3RyaW5nMi5oIgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMy IGFuSW5kZXgpOwojIDE4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIu aCIKICB2b2lkIFN0cmlwQ2hhcnMoIGNvbnN0IGNoYXIqIGFTZXQgKTsKICB2b2lkIFN0cmlwQ2hh ciggUFJVbmljaGFyIGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0PTAgKTsKCgoKCgogIHZvaWQgU3Ry aXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hhciggUFJVbmljaGFyIGFuT2xk Q2hhciwgUFJVbmljaGFyIGFOZXdDaGFyICk7CiAgdm9pZCBSZXBsYWNlQ2hhciggY29uc3QgY2hh ciogYVNldCwgUFJVbmljaGFyIGFOZXdDaGFyICk7CgogIHZvaWQgUmVwbGFjZVN1YnN0cmluZygg Y29uc3QgbnNTdHJpbmcmIGFUYXJnZXQsIGNvbnN0IG5zU3RyaW5nJiBhTmV3VmFsdWUgKTsKICB2 b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVRhcmdldCwgY29uc3QgUFJV bmljaGFyKiBhTmV3VmFsdWUgKTsKIyAyMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv bnNTdHJpbmcyLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5h dGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVv dGVzPTApOwojIDIyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIK ICB2b2lkIENvbXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJC b29sIGFFbGltaW5hdGVUcmFpbGluZz0xKTsKIyAyNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNTdHJpbmcyLmgiCiAgY2hhciogVG9DU3RyaW5nKGNoYXIqIGFCdWYsUFJVaW50MzIg YUJ1Zkxlbmd0aCxQUlVpbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKCgoKCgoKICBmbG9hdCBUb0Zs b2F0KFBSSW50MzIqIGFFcnJvckNvZGUpIGNvbnN0OwoKCgoKCgoKICBQUkludDMyIFRvSW50ZWdl cihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWludDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAyNzIg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcmIG9w ZXJhdG9yPSggY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0 dXJuICp0aGlzOyB9CiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVh ZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdHJpbmcm IG9wZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVy biAqdGhpczsgfQogIG5zU3RyaW5nJiBvcGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hhciApIHsgQXNz aWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24o Y29uc3QgY2hhciopOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBS SW50MzIpOwojIDI5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIK ICB2b2lkIEFwcGVuZEludChQUkludDMyLCBQUkludDMyPTEwKTsKICB2b2lkIEFwcGVuZEZsb2F0 KGRvdWJsZSk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJJbnQz Mj0tMSk7CgogIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudCggUFJVbmljaGFyICk7 CgoKCiAgdm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJVaW50MzIsIFBS SW50MzI9LTEpOwoKCiAgdm9pZCBBZG9wdCggUFJVbmljaGFyKiBhUHRyLCBQUkludDMyIGFMZW5n dGggPSAtMSApOwojIDMyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIu aCIKICBzaXplX3R5cGUgTGVmdCggc2VsZl90eXBlJiwgc2l6ZV90eXBlICkgY29uc3Q7CiAgc2l6 ZV90eXBlIE1pZCggc2VsZl90eXBlJiwgUFJVaW50MzIsIFBSVWludDMyICkgY29uc3Q7CiAgc2l6 ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKIyAzMzcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhcihQ UlVuaWNoYXIgYUNoYXIsIFBSSW50MzIgYW5PZmZzZXQ9MCwgUFJJbnQzMiBhQ291bnQ9LTEpIGNv bnN0OwojIDM0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIKICBQ UkludDMyIEZpbmQoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0w LFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBG aW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9m ZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5z QUZsYXRTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYW5PZmZzZXQ9MCwgUFJJbnQzMiBhQ291bnQ9 LTEpIGNvbnN0OwoKICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUklu dDMyIGFuT2Zmc2V0PTAsIFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKIyAzNjMgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0 KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMy IEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9 MCkgY29uc3Q7CiMgMzc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5o IgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hhciogYUNTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CgogIFBSSW50 MzIgUkZpbmQoY29uc3QgbnNBRmxhdFN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhbk9mZnNldD0t MSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNo YXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7 CiMgMzg5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgogIFBSSW50 MzIgUkZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIg YUNvdW50PS0xKSBjb25zdDsKIyAzOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNT dHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiMgNDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9uKGNv bnN0IGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhSWdub3JlQ2FzZT0wLCBQUkludDMyIGFDb3VudD0t MSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3Ry aW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJC b29sIEVxdWFsc0lnbm9yZUNhc2UoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFDb3VudD0t MSkgY29uc3Q7CgoKCgoKCgogIFBSQm9vbCBJc0FTQ0lJKGNvbnN0IFBSVW5pY2hhciogYUJ1ZmZl cj0wKTsKCgoKCgoKCiAgc3RhdGljIFBSQm9vbCBJc1NwYWNlKFBSVW5pY2hhciBjaCk7CiMgNDQ0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgpwcml2YXRlOgoKCiAg dm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25z dCBQUlVuaWNoYXIqLCBQUkludDMyPS0xICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbigg Y29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNp b24oIGNvbnN0IFBSVW5pY2hhciosIFBSVWludDMyLCBQUkludDMyPS0xICk7Cn07CgppbmxpbmUK bnNTdHJpbmc6OnNpemVfdHlwZQpuc1N0cmluZzo6TGVmdCggbnNBU3RyaW5nJiBhUmVzdWx0LCBz aXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVzdWx0 LCAwLCBhTGVuZ3RoVG9Db3B5KTsKICB9CgppbmxpbmUKbnNTdHJpbmc6OnNpemVfdHlwZQpuc1N0 cmluZzo6UmlnaHQoIHNlbGZfdHlwZSYgYVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkg KSBjb25zdAogIHsKICAgIHNpemVfdHlwZSBteUxlbmd0aCA9IExlbmd0aCgpOwogICAgYUxlbmd0 aFRvQ29weSA9IE5TX01JTihteUxlbmd0aCwgYUxlbmd0aFRvQ29weSk7CiAgICByZXR1cm4gTWlk KGFSZXN1bHQsIG15TGVuZ3RoLWFMZW5ndGhUb0NvcHksIGFMZW5ndGhUb0NvcHkpOwogIH0KIyA0 NzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCmNsYXNzIG5zQXV0 b1N0cmluZyA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5uc0F1dG9T dHJpbmcoKSB7fQoKICAgIG5zQXV0b1N0cmluZygpOwogICAgbnNBdXRvU3RyaW5nKGNvbnN0IG5z QXV0b1N0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgbnNB U3RyaW5nJiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBuc1N0cmlu ZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgUFJVbmljaGFyKiBh U3RyaW5nKTsKICAgIG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQz MiBhTGVuZ3RoKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhQUlVuaWNoYXIgYUNoYXIpOwog ICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlwdG9yJiBhQnVmZmVyKTsK CiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBdXRvU3RyaW5nJiBhU3RyaW5n ICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6CiAgICB2b2lk IG9wZXJhdG9yPSggY2hhciApOwogIHB1YmxpYzoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9 KCBjb25zdCBuc0FTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVy biAqdGhpczsgfQoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBQUlVuaWNoYXIq IGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBuc0F1dG9TdHJpbmcm IG9wZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRo aXM7IH0KIyA1MDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAg ICBQUlVuaWNoYXIgbUJ1ZmZlcltrRGVmYXVsdFN0cmluZ1NpemVdOwp9OwoKCgpjbGFzcyBOU19D b252ZXJ0QVNDSUl0b1VDUzIKICAgICAgOiBwdWJsaWMgbnNBdXRvU3RyaW5nCgoKCiAgewogICAg cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0 IG5zQUNTdHJpbmcmIGFDU3RyaW5nICk7CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0 QVNDSUl0b1VDUzIoIGNvbnN0IG5zQUZsYXRDU3RyaW5nJiBhQ1N0cmluZyApCiAgICAgICAgewog ICAgICAgICAgSW5pdCggYUNTdHJpbmcuZ2V0KCksIGFDU3RyaW5nLkxlbmd0aCgpICk7CiAgICAg ICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjb25zdCBj aGFyKiBhQ1N0cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcsIH5QUlVp bnQzMigwKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRBU0NJSXRvVUNTMiggY29uc3Qg Y2hhciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIElu aXQoIGFDU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQojIDU0OCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBJbml0 KCBjb25zdCBjaGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApOwoKICAgIHByaXZhdGU6 CgogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgpjbGFzcyBO U19Db252ZXJ0VVRGOHRvVUNTMgogICAgICA6IHB1YmxpYyBuc0F1dG9TdHJpbmcKICB7CiAgICBw dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjb25zdCBu c0FDU3RyaW5nJiBhQ1N0cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcg KTsKICAgICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMigg Y29uc3QgY2hhciogYUNTdHJpbmcgKQogICAgICAgIHsKICAgICAgICAgIEluaXQoIG5zRGVwZW5k ZW50Q1N0cmluZyggYUNTdHJpbmcgKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRVVEY4 dG9VQ1MyKCBjb25zdCBjaGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAg ewogICAgICAgICAgSW5pdCggU3Vic3RyaW5nKCBhQ1N0cmluZywgYUNTdHJpbmcgKyBhTGVuZ3Ro ICkgKTsKICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEluaXQoIGNvbnN0IG5z QUNTdHJpbmcmIGFDU3RyaW5nICk7CgogICAgcHJpdmF0ZToKICAgICAgTlNfQ29udmVydFVURjh0 b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgoKCgpjbGFzcyBDb252ZXJ0VVRGOHRvVUNTMgogIHsK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nOjpjaGFyX3R5cGUgdmFsdWVfdHlw ZTsKICAgICAgdHlwZWRlZiBuc0FTdHJpbmc6OmNoYXJfdHlwZSBidWZmZXJfdHlwZTsKCiAgICBD b252ZXJ0VVRGOHRvVUNTMiggYnVmZmVyX3R5cGUqIGFCdWZmZXIgKQogICAgICAgIDogbVN0YXJ0 KGFCdWZmZXIpLCBtQnVmZmVyKGFCdWZmZXIpLCBtRXJyb3JFbmNvdW50ZXJlZCgwKSB7fQoKICAg IHNpemVfdCBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyIC0gbVN0YXJ0OyB9CgogICAg UFJVaW50MzIgd3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHN0YXJ0LCBQUlVpbnQzMiBOICkKICAg ICAgewogICAgICAgIGlmICggbUVycm9yRW5jb3VudGVyZWQgKQogICAgICAgICAgcmV0dXJuIE47 CgoKCiAgICAgICAgY29uc3QgdmFsdWVfdHlwZSogcCA9IHN0YXJ0OwogICAgICAgIGNvbnN0IHZh bHVlX3R5cGUqIGVuZCA9IHN0YXJ0ICsgTjsKICAgICAgICBmb3IgKCA7IHAgIT0gZW5kIDsgKQog ICAgICAgICAgewogICAgICAgICAgICBjaGFyIGMgPSAqcCsrOwoKICAgICAgICAgICAgaWYgKCBV VEY4dHJhaXRzOjppc0FTQ0lJKGMpICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAq bUJ1ZmZlcisrID0gYnVmZmVyX3R5cGUoYyk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg ICAgICAgICAgICB9CgogICAgICAgICAgICBQUlVpbnQzMiB1Y3M0OwogICAgICAgICAgICBQUlVp bnQzMiBtaW5VY3M0OwogICAgICAgICAgICBQUkludDMyIHN0YXRlID0gMDsKCiAgICAgICAgICAg IGlmICggVVRGOHRyYWl0czo6aXMyYnl0ZShjKSApCiAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8PCA2KSAmIDB4MDAwMDA3QzBMOwogICAgICAgICAg ICAgICAgc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgbWluVWNzNCA9IDB4MDAwMDAwODA7CiAg ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICggVVRGOHRyYWl0czo6aXMzYnl0ZShj KSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8 PCAxMikgJiAweDAwMDBGMDAwTDsKICAgICAgICAgICAgICAgIHN0YXRlID0gMjsKICAgICAgICAg ICAgICAgIG1pblVjczQgPSAweDAwMDAwODAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg ZWxzZSBpZiAoIFVURjh0cmFpdHM6OmlzNGJ5dGUoYykgKQogICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIHVjczQgPSAoUFJVaW50MzIoYykgPDwgMTgpICYgMHgwMDFGMDAwMEw7CiAgICAg ICAgICAgICAgICBzdGF0ZSA9IDM7CiAgICAgICAgICAgICAgICBtaW5VY3M0ID0gMHgwMDAxMDAw MDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCBVVEY4dHJhaXRzOjppczVi eXRlKGMpICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1Y3M0ID0gKFBSVWludDMy KGMpIDw8IDI0KSAmIDB4MDMwMDAwMDBMOwogICAgICAgICAgICAgICAgc3RhdGUgPSA0OwogICAg ICAgICAgICAgICAgbWluVWNzNCA9IDB4MDAyMDAwMDA7CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlIGlmICggVVRGOHRyYWl0czo6aXM2Ynl0ZShjKSApCiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8PCAzMCkgJiAweDQwMDAwMDAwTDsK ICAgICAgICAgICAgICAgIHN0YXRlID0gNTsKICAgICAgICAgICAgICAgIG1pblVjczQgPSAweDA0 MDAwMDAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIG1FcnJvckVuY291bnRlcmVkID0gMTsK ICAgICAgICAgICAgICAgIHJldHVybiBOOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdo aWxlICggc3RhdGUtLSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYyA9ICpwKys7 CgogICAgICAgICAgICAgICAgaWYgKCBVVEY4dHJhaXRzOjppc0luU2VxKGMpICkKICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFBSSW50MzIgc2hpZnQgPSBzdGF0ZSAqIDY7 CiAgICAgICAgICAgICAgICAgICAgdWNzNCB8PSAoUFJVaW50MzIoYykgJiAweDNGKSA8PCBzaGlm dDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIG1FcnJvckVu Y291bnRlcmVkID0gMTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gTjsKICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggdWNzNCA8IG1pblVjczQg KQogICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwog ICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIHVjczQgPD0gMHhEN0ZGICkKICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gdWNzNDsKICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCB1Y3M0IDw9IDB4REZGRiApCiAgICAgICAgICAg ICAgewoKICAgICAgICAgICAgICAgICptQnVmZmVyKysgPSAweGZmZmQ7CiAgICAgICAgICAgICAg fQogICAgICAgICAgICBlbHNlIGlmICggdWNzNCA9PSAweEZGRkUgfHwgdWNzNCA9PSAweEZGRkYg KQogICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwog ICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIHVjczQgPj0gMHgwMDAxMDAwMCAp CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCB1Y3M0ID49IDB4MDAxMTAwMDAg KQogICAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwogICAgICAgICAgICAgICAg ZWxzZSB7CgogICAgICAgICAgICAgICAgICB1Y3M0IC09IDB4MDAwMTAwMDA7CiAgICAgICAgICAg ICAgICAgICptQnVmZmVyKysgPSAoUFJVbmljaGFyKSh1Y3M0ID4+IDEwKSB8IDB4ZDgwMHU7CiAg ICAgICAgICAgICAgICAgICptQnVmZmVyKysgPSAoUFJVbmljaGFyKSh1Y3M0ICYgMHgzZmYpIHwg MHhkYzAwdTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIHVjczQgIT0gMHhGRUZGICkK ICAgICAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gdWNzNDsKICAgICAgICAgICAgICB9CiAg ICAgICAgICB9CiAgICAgICAgcmV0dXJuIHAgLSBzdGFydDsKICAgICAgfQoKICAgIHByaXZhdGU6 CiAgICAgIGJ1ZmZlcl90eXBlKiBtU3RhcnQ7CiAgICAgIGJ1ZmZlcl90eXBlKiBtQnVmZmVyOwog ICAgICBQUkJvb2wgbUVycm9yRW5jb3VudGVyZWQ7CiAgfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIiAyCgoKY2xhc3MgbnNDU3RyaW5nIDoKICBwdWJsaWMg bnNBRmxhdENTdHJpbmcsCiAgcHVibGljIG5zU3RyIHsKCnB1YmxpYzoKICBmcmllbmQgY2xhc3Mg bnNTdHJpbmc7CiAgZnJpZW5kIHZvaWQgVG9VcHBlckNhc2UoIG5zQ1N0cmluZyYgKTsKICBmcmll bmQgdm9pZCBUb0xvd2VyQ2FzZSggbnNDU3RyaW5nJiApOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwg Y29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsK ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFn bWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogIHZpcnR1 YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXI+Jiwg bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBj aGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CgpwdWJsaWM6CgoKCiAgbnNDU3RyaW5n KCk7CgoKCgoKICBuc0NTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nKTsKCiAgZXhwbGlj aXQgbnNDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiApOwoKICBleHBsaWNpdCBuc0NTdHJpbmco Y29uc3QgY2hhciopOwogIG5zQ1N0cmluZyhjb25zdCBjaGFyKiwgUFJJbnQzMik7CgoKCgoKICB2 aXJ0dWFsIH5uc0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29u c3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCgoKICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBh TGVuZ3RoKTsKCgoKCgoKICB2b2lkIFNldENhcGFjaXR5KFBSVWludDMyIGFMZW5ndGgpOwoKCgoK CiAgUFJCb29sIFNldENoYXJBdChQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5JbmRleCk7CiMg MTM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgdm9pZCBTdHJp cENoYXJzKGNvbnN0IGNoYXIqIGFTZXQpOwogIHZvaWQgU3RyaXBDaGFyKGNoYXIgYUNoYXIsUFJJ bnQzMiBhbk9mZnNldD0wKTsKCgoKCgoKICB2b2lkIFN0cmlwV2hpdGVzcGFjZSgpOwoKCgoKCgog IHZvaWQgUmVwbGFjZUNoYXIoY2hhciBhT2xkQ2hhcixjaGFyIGFOZXdDaGFyKTsKICB2b2lkIFJl cGxhY2VDaGFyKGNvbnN0IGNoYXIqIGFTZXQsY2hhciBhTmV3Q2hhcik7CgogIHZvaWQgUmVwbGFj ZVN1YnN0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFUYXJnZXQsY29uc3QgbnNDU3RyaW5nJiBhTmV3 VmFsdWUpOwogIHZvaWQgUmVwbGFjZVN1YnN0cmluZyhjb25zdCBjaGFyKiBhVGFyZ2V0LGNvbnN0 IGNoYXIqIGFOZXdWYWx1ZSk7CiMgMTY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25z U3RyaW5nLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVM ZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVvdGVz PTApOwojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIHZv aWQgQ29tcHJlc3NXaGl0ZXNwYWNlKCBQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wg YUVsaW1pbmF0ZVRyYWlsaW5nPTEpOwojIDE5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc1N0cmluZy5oIgogIGZsb2F0IFRvRmxvYXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7 CiMgMTk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgUFJJbnQz MiBUb0ludGVnZXIoUFJJbnQzMiogYUVycm9yQ29kZSxQUlVpbnQzMiBhUmFkaXg9KDEwKSkgY29u c3Q7CiMgMjE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgbnND U3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFT dHJpbmcpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNB Q1N0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9 CgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBjaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0 cik7IHJldHVybiAqdGhpczsgfQogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjaGFyIGFDaGFyICkg eyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCiAgdm9pZCBBc3NpZ25XaXRoQ29udmVy c2lvbihjb25zdCBQUlVuaWNoYXIqLFBSSW50MzI9LTEpOwogIHZvaWQgQXNzaWduV2l0aENvbnZl cnNpb24oIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVy c2lvbiggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CiMgMjM1ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25z dCBuc1N0cmluZyYsIFBSSW50MzI9LTEpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNv bnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29u c3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSk7CgogIHZvaWQgQXBwZW5kSW50KFBSSW50MzIgYUlu dGVnZXIsUFJJbnQzMiBhUmFkaXg9MTApOwogIHZvaWQgQXBwZW5kRmxvYXQoIGRvdWJsZSBhRmxv YXQgKTsKIyAyNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcuaCIKICB2 b2lkIEFkb3B0KCBjaGFyKiBhUHRyLCBQUkludDMyIGFMZW5ndGggPSAtMSApOwojIDI2OSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIHNpemVfdHlwZSBMZWZ0KCBz ZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5cGUm LCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICBzaXplX3R5cGUgUmlnaHQoIHNlbGZfdHlw ZSYsIHNpemVfdHlwZSApIGNvbnN0OwojIDI4OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZChjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsUFJC b29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBj b25zdDsKICBQUkludDMyIEZpbmQoY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNh c2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDI5OSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZENo YXIoUFJVbmljaGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkg Y29uc3Q7CiMgMzA4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAg UFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNl dD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgbnNDU3RyaW5nJiBhU3Ry aW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzE5ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZChjb25zdCBjaGFyKiBhQ1N0cmlu ZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyxQUkJv b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBj b25zdDsKIyAzMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcuaCIKICBQ UkludDMyIFJGaW5kQ2hhcihQUlVuaWNoYXIgYUNoYXIsUFJJbnQzMiBhbk9mZnNldD0tMSxQUklu dDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgMzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBjaGFyKiBhU3RyaW5n LFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29u c3QgbnNDU3RyaW5nJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwojIDM1NiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIFBSSW50MzIgQ29tcGFy ZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKCiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFT dHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQ UkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKIyAzNzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcu aCIKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICB2b2lkIEFzc2ln bldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0 V2l0aENvbnZlcnNpb24oIGNoYXIsIFBSVWludDMyICk7Cn07CgppbmxpbmUKbnNDU3RyaW5nOjpz aXplX3R5cGUKbnNDU3RyaW5nOjpMZWZ0KCBuc0FDU3RyaW5nJiBhUmVzdWx0LCBzaXplX3R5cGUg YUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVzdWx0LCAwLCBhTGVu Z3RoVG9Db3B5KTsKICB9CgppbmxpbmUKbnNDU3RyaW5nOjpzaXplX3R5cGUKbnNDU3RyaW5nOjpS aWdodCggc2VsZl90eXBlJiBhUmVzdWx0LCBzaXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0 CiAgewogICAgc2l6ZV90eXBlIG15TGVuZ3RoID0gTGVuZ3RoKCk7CiAgICBhTGVuZ3RoVG9Db3B5 ID0gTlNfTUlOKG15TGVuZ3RoLCBhTGVuZ3RoVG9Db3B5KTsKICAgIHJldHVybiBNaWQoYVJlc3Vs dCwgbXlMZW5ndGgtYUxlbmd0aFRvQ29weSwgYUxlbmd0aFRvQ29weSk7CiAgfQojIDQwNiAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgpjbGFzcyBuc0NBdXRvU3RyaW5n IDogcHVibGljIG5zQ1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5uc0NBdXRvU3RyaW5n KCkge30KCiAgICBuc0NBdXRvU3RyaW5nKCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNv bnN0IG5zQ1N0cmluZyYgKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnNBQ1N0 cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFT dHJpbmcpOwogICAgbnNDQXV0b1N0cmluZyhjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUxl bmd0aCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlwdG9yJiBh QnVmZmVyKTsKCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQ0F1dG9TdHJp bmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgcHJpdmF0 ZToKICAgIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICBwdWJsaWM6CiAgICBuc0NBdXRv U3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWdu KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICAgIG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9y PSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAg IG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsg cmV0dXJuICp0aGlzOyB9CiMgNDM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3Ry aW5nLmgiCiAgICBjaGFyIG1CdWZmZXJba0RlZmF1bHRTdHJpbmdTaXplXTsKfTsKCgoKCgoKY2xh c3MgTlNfQ29udmVydFVDUzJ0b1VURjgKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoKCgog IHsKICAgIHB1YmxpYzoKICAgICAgZnJpZW5kIGNoYXIqIFRvTmV3VVRGOFN0cmluZyggY29uc3Qg bnNBU3RyaW5nJiBhU291cmNlICk7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBO U19Db252ZXJ0VUNTMnRvVVRGOCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nICkKICAgICAgICB7 CiAgICAgICAgICBBcHBlbmQoIGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0KCiAg ICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWlu dDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgYUxlbmd0 aCApOwogICAgICAgIH0KCiAgICAgIGV4cGxpY2l0IE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25z dCBuc0FTdHJpbmcmIGFTdHJpbmcgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgQXBwZW5k KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKTsKCiAgICBwcml2 YXRlOgoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNoYXIgKTsKICB9OwoKCgoKY2xhc3Mg TlNfTG9zc3lDb252ZXJ0VUNTMnRvQVNDSUkKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoK CgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgTlNfTG9zc3lDb252ZXJ0VUNT MnRvQVNDSUkoIGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyApCiAgICAgICAgewogICAgICAgICAg QXBwZW5kV2l0aENvbnZlcnNpb24oIGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0K CiAgICAgIE5TX0xvc3N5Q29udmVydFVDUzJ0b0FTQ0lJKCBjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZFdpdGhDb252 ZXJzaW9uKCBhU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQgTlNf TG9zc3lDb252ZXJ0VUNTMnRvQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwoKICAg IHByaXZhdGU6CgogICAgICBOU19Mb3NzeUNvbnZlcnRVQ1MydG9BU0NJSSggY2hhciApOwogIH07 CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9y eS5oIiAyCgoKCgoKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJU2NyaXB0R2xvYmFs T2JqZWN0OwpjbGFzcyBuc0lET01FdmVudExpc3RlbmVyOwoKY2xhc3MgbnNJRE9NU2NyaXB0T2Jq ZWN0RmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2Y2Y5MDY0LCAw eDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRk LCAweDMyIH0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3U2NyaXB0Q29u dGV4dChuc0lTY3JpcHRHbG9iYWxPYmplY3QgKmFHbG9iYWwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zSVNjcmlwdENvbnRleHQgKiphQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5z cmVzdWx0IE5ld0pTRXZlbnRMaXN0ZW5lcihuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogYU9iamVjdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01FdmVudExpc3RlbmVyICoqIGFJbnN0YW5j ZVB0clJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1NjcmlwdEdsb2JhbE9iamVj dChQUkJvb2wgYUlzQ2hyb21lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVNjcmlwdEdsb2JhbE9iamVjdCAqKmFHbG9iYWwpID0gMDsKCiAgdmlydHVhbCBuc0lTdXBwb3J0 cyAqR2V0Q2xhc3NJbmZvSW5zdGFuY2UobnNET01DbGFzc0luZm9JRCBhSUQpID0gMDsKICB2aXJ0 dWFsIG5zSVN1cHBvcnRzICpHZXRFeHRlcm5hbENsYXNzSW5mb0luc3RhbmNlKGNvbnN0IG5zQVN0 cmluZyYgYU5hbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRE9NQ2xh c3NJbmZvKGNvbnN0IGNoYXIgKmFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNET01DbGFzc0luZm9FeHRlcm5hbENvbnN0cnVjdG9yRm5jIGFDb25zdHJ1Y3RvckZwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAqYVByb3RvQ2hh aW5JbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ RCAqKmFJbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50 MzIgYVNjcmlwdGFibGVGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCBhSGFzQ2xhc3NJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc0NJRCAqYUNvbnN0cnVjdG9yQ0lEKSA9IDA7Cn07CiMgMzE0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0RPTUNJRC5oIiAxCiMgMzE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTUNsYXNzSW5mby5oIiAyCiMgMzc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUNsYXNzSW5mby5oIgpjbGFzcyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5OwoKY2xhc3Mg bnNJRE9NQ0lFeHRlbnNpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg4OTFh N2IwMSwgMHgxYjYxLCAweDExZDYsIHsgMHhhNywgMHhmMiwgMHhmNiwgMHg5MCwgMHhiNiwgMHgz OCwgMHg4OSwgMHg5YyB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lz dGVyRE9NQ0koY29uc3QgY2hhciogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SURPTVNjcmlwdE9iamVjdEZhY3RvcnkqIGFET01TT0ZhY3RvcnkpID0gMDsKfTsKIyA0NCAibnNE T01DbGFzc0luZm8uaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIg MQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIgMgoKCgpleHRlcm4gIkMiIHsKIyAx NDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gaW50NjQKSlNfTm93 KCk7CgoKZXh0ZXJuIGpzdmFsCkpTX0dldE5hTlZhbHVlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IGpzdmFsCkpTX0dldE5lZ2F0aXZlSW5maW5pdHlWYWx1ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVy biBqc3ZhbApKU19HZXRQb3NpdGl2ZUluZmluaXR5VmFsdWUoSlNDb250ZXh0ICpjeCk7CgpleHRl cm4ganN2YWwKSlNfR2V0RW1wdHlTdHJpbmdWYWx1ZShKU0NvbnRleHQgKmN4KTsKIyAxOTYgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0NvbnZlcnRB cmd1bWVudHMoSlNDb250ZXh0ICpjeCwgdWludE4gYXJnYywganN2YWwgKmFyZ3YsIGNvbnN0IGNo YXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAuLi4pOwojIDIxNiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBqc3ZhbCAqCkpTX1B1c2hBcmd1bWVudHMoSlND b250ZXh0ICpjeCwgdm9pZCAqKm1hcmtwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgoK CmV4dGVybiB2b2lkCkpTX1BvcEFyZ3VtZW50cyhKU0NvbnRleHQgKmN4LCB2b2lkICptYXJrKTsK IyAyNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpT X0NvbnZlcnRWYWx1ZShKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBKU1R5cGUgdHlwZSwganN2YWwg KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb09iamVjdChKU0NvbnRleHQgKmN4LCBqc3Zh bCB2LCBKU09iamVjdCAqKm9ianApOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19WYWx1ZVRvRnVu Y3Rpb24oSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX1Zh bHVlVG9Db25zdHJ1Y3RvcihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKCmV4dGVybiBKU1N0cmlu ZyAqCkpTX1ZhbHVlVG9TdHJpbmcoSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNC b29sCkpTX1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0ICpjeCwganN2YWwgdiwganNkb3VibGUgKmRw KTsKCgoKCgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9FQ01BSW50MzIoSlNDb250ZXh0ICpjeCwg anN2YWwgdiwgaW50MzIgKmlwKTsKCgoKCgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9FQ01BVWlu dDMyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIHVpbnQzMiAqaXApOwoKCgoKCgpleHRlcm4gSlNC b29sCkpTX1ZhbHVlVG9JbnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBpbnQzMiAqaXApOwoK CgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvVWludDE2KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYs IHVpbnQxNiAqaXApOwoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvQm9vbGVhbihKU0NvbnRleHQg KmN4LCBqc3ZhbCB2LCBKU0Jvb2wgKmJwKTsKCmV4dGVybiBKU1R5cGUKSlNfVHlwZU9mVmFsdWUo SlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX0dldFR5cGVO YW1lKEpTQ29udGV4dCAqY3gsIEpTVHlwZSB0eXBlKTsKIyAzNDIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNSdW50aW1lICoKSlNfSW5pdCh1aW50MzIgbWF4Ynl0 ZXMpOwoKZXh0ZXJuIHZvaWQKSlNfRmluaXNoKEpTUnVudGltZSAqcnQpOwoKZXh0ZXJuIHZvaWQK SlNfU2h1dERvd24odm9pZCk7Cgp2b2lkICoKSlNfR2V0UnVudGltZVByaXZhdGUoSlNSdW50aW1l ICpydCk7Cgp2b2lkCkpTX1NldFJ1bnRpbWVQcml2YXRlKEpTUnVudGltZSAqcnQsIHZvaWQgKmRh dGEpOwoKCgpleHRlcm4gdm9pZApKU19CZWdpblJlcXVlc3QoSlNDb250ZXh0ICpjeCk7CgpleHRl cm4gdm9pZApKU19FbmRSZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKCmV4dGVybiB2b2lkCkpTX1lp ZWxkUmVxdWVzdChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBqc3JlZmNvdW50CkpTX1N1c3BlbmRS ZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNfUmVzdW1lUmVxdWVzdChKU0Nv bnRleHQgKmN4LCBqc3JlZmNvdW50IHNhdmVEZXB0aCk7CgoKCmV4dGVybiB2b2lkCkpTX0xvY2so SlNSdW50aW1lICpydCk7CgpleHRlcm4gdm9pZApKU19VbmxvY2soSlNSdW50aW1lICpydCk7Cgpl eHRlcm4gSlNDb250ZXh0ICoKSlNfTmV3Q29udGV4dChKU1J1bnRpbWUgKnJ0LCBzaXplX3Qgc3Rh Y2tDaHVua1NpemUpOwoKZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUNvbnRleHQoSlNDb250ZXh0ICpj eCk7CgpleHRlcm4gdm9pZApKU19EZXN0cm95Q29udGV4dE5vR0MoSlNDb250ZXh0ICpjeCk7Cgpl eHRlcm4gdm9pZApKU19EZXN0cm95Q29udGV4dE1heWJlR0MoSlNDb250ZXh0ICpjeCk7CgpleHRl cm4gdm9pZCAqCkpTX0dldENvbnRleHRQcml2YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv aWQKSlNfU2V0Q29udGV4dFByaXZhdGUoSlNDb250ZXh0ICpjeCwgdm9pZCAqZGF0YSk7CgpleHRl cm4gSlNSdW50aW1lICoKSlNfR2V0UnVudGltZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0Nv bnRleHQgKgpKU19Db250ZXh0SXRlcmF0b3IoSlNSdW50aW1lICpydCwgSlNDb250ZXh0ICoqaXRl cnApOwoKZXh0ZXJuIEpTVmVyc2lvbgpKU19HZXRWZXJzaW9uKEpTQ29udGV4dCAqY3gpOwoKZXh0 ZXJuIEpTVmVyc2lvbgpKU19TZXRWZXJzaW9uKEpTQ29udGV4dCAqY3gsIEpTVmVyc2lvbiB2ZXJz aW9uKTsKCmV4dGVybiBjb25zdCBjaGFyICoKSlNfVmVyc2lvblRvU3RyaW5nKEpTVmVyc2lvbiB2 ZXJzaW9uKTsKCmV4dGVybiBKU1ZlcnNpb24KSlNfU3RyaW5nVG9WZXJzaW9uKGNvbnN0IGNoYXIg KnN0cmluZyk7CiMgNDM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJu IHVpbnQzMgpKU19HZXRPcHRpb25zKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHVpbnQzMgpKU19T ZXRPcHRpb25zKEpTQ29udGV4dCAqY3gsIHVpbnQzMiBvcHRpb25zKTsKCmV4dGVybiB1aW50MzIK SlNfVG9nZ2xlT3B0aW9ucyhKU0NvbnRleHQgKmN4LCB1aW50MzIgb3B0aW9ucyk7CgpleHRlcm4g Y29uc3QgY2hhciAqCkpTX0dldEltcGxlbWVudGF0aW9uVmVyc2lvbih2b2lkKTsKCmV4dGVybiBK U09iamVjdCAqCkpTX0dldEdsb2JhbE9iamVjdChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lk CkpTX1NldEdsb2JhbE9iamVjdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKIyA0NjEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0luaXRT dGFuZGFyZENsYXNzZXMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CiMgNDc3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19SZXNvbHZlU3Rh bmRhcmRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAg ICAgICAgICAgICAgICAgICAgSlNCb29sICpyZXNvbHZlZCk7CgpleHRlcm4gSlNCb29sCkpTX0Vu dW1lcmF0ZVN0YW5kYXJkQ2xhc3NlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4 dGVybiBKU09iamVjdCAqCkpTX0dldFNjb3BlQ2hhaW4oSlNDb250ZXh0ICpjeCk7CgpleHRlcm4g dm9pZCAqCkpTX21hbGxvYyhKU0NvbnRleHQgKmN4LCBzaXplX3QgbmJ5dGVzKTsKCmV4dGVybiB2 b2lkICoKSlNfcmVhbGxvYyhKU0NvbnRleHQgKmN4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsK CmV4dGVybiB2b2lkCkpTX2ZyZWUoSlNDb250ZXh0ICpjeCwgdm9pZCAqcCk7CgpleHRlcm4gY2hh ciAqCkpTX3N0cmR1cChKU0NvbnRleHQgKmN4LCBjb25zdCBjaGFyICpzKTsKCmV4dGVybiBqc2Rv dWJsZSAqCkpTX05ld0RvdWJsZShKU0NvbnRleHQgKmN4LCBqc2RvdWJsZSBkKTsKCmV4dGVybiBK U0Jvb2wKSlNfTmV3RG91YmxlVmFsdWUoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCwganN2YWwg KnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19OZXdOdW1iZXJWYWx1ZShKU0NvbnRleHQgKmN4LCBq c2RvdWJsZSBkLCBqc3ZhbCAqcnZhbCk7CiMgNTI0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv anNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19BZGRSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJw KTsKCmV4dGVybiBKU0Jvb2wKSlNfQWRkTmFtZWRSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJw LCBjb25zdCBjaGFyICpuYW1lKTsKCmV4dGVybiBKU0Jvb2wKSlNfQWRkTmFtZWRSb290UlQoSlNS dW50aW1lICpydCwgdm9pZCAqcnAsIGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIEpTQm9vbApK U19SZW1vdmVSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJwKTsKCmV4dGVybiBKU0Jvb2wKSlNf UmVtb3ZlUm9vdFJUKEpTUnVudGltZSAqcnQsIHZvaWQgKnJwKTsKIyA1NTQgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19DbGVhck5ld2Jvcm5Sb290cyhK U0NvbnRleHQgKmN4KTsKIyA1ODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgp0 eXBlZGVmIGludE4KKCogSlNHQ1Jvb3RNYXBGdW4pKHZvaWQgKnJwLCBjb25zdCBjaGFyICpuYW1l LCB2b2lkICpkYXRhKTsKCmV4dGVybiB1aW50MzIKSlNfTWFwR0NSb290cyhKU1J1bnRpbWUgKnJ0 LCBKU0dDUm9vdE1hcEZ1biBtYXAsIHZvaWQgKmRhdGEpOwoKZXh0ZXJuIEpTQm9vbApKU19Mb2Nr R0NUaGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZyk7CgpleHRlcm4gSlNCb29sCkpTX0xv Y2tHQ1RoaW5nUlQoSlNSdW50aW1lICpydCwgdm9pZCAqdGhpbmcpOwoKZXh0ZXJuIEpTQm9vbApK U19VbmxvY2tHQ1RoaW5nKEpTQ29udGV4dCAqY3gsIHZvaWQgKnRoaW5nKTsKCmV4dGVybiBKU0Jv b2wKSlNfVW5sb2NrR0NUaGluZ1JUKEpTUnVudGltZSAqcnQsIHZvaWQgKnRoaW5nKTsKIyA2MTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19NYXJrR0NU aGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YXJnKTsKCmV4dGVybiB2b2lkCkpTX0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNf TWF5YmVHQyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0dDQ2FsbGJhY2sKSlNfU2V0R0NDYWxs YmFjayhKU0NvbnRleHQgKmN4LCBKU0dDQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpTR0NDYWxsYmFj awpKU19TZXRHQ0NhbGxiYWNrUlQoSlNSdW50aW1lICpydCwgSlNHQ0NhbGxiYWNrIGNiKTsKCmV4 dGVybiBKU0Jvb2wKSlNfSXNBYm91dFRvQmVGaW5hbGl6ZWQoSlNDb250ZXh0ICpjeCwgdm9pZCAq dGhpbmcpOwojIDY0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBp bnROCkpTX0FkZEV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBmaW5h bGl6ZXIpOwojIDY2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBp bnROCkpTX1JlbW92ZUV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBm aW5hbGl6ZXIpOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdFeHRlcm5hbFN0cmluZyhK U0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLCBpbnROIHR5cGUpOwoK CgoKCmV4dGVybiBpbnROCkpTX0dldEV4dGVybmFsU3RyaW5nR0NUeXBlKEpTUnVudGltZSAqcnQs IEpTU3RyaW5nICpzdHIpOwojIDY4OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgi CnN0cnVjdCBKU0NsYXNzIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB1aW50MzIgZmxhZ3M7 CgoKICAgIEpTUHJvcGVydHlPcCBhZGRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBkZWxQcm9w ZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBnZXRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBzZXRQ cm9wZXJ0eTsKICAgIEpTRW51bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNSZXNvbHZlT3AgcmVz b2x2ZTsKICAgIEpTQ29udmVydE9wIGNvbnZlcnQ7CiAgICBKU0ZpbmFsaXplT3AgZmluYWxpemU7 CgoKICAgIEpTR2V0T2JqZWN0T3BzIGdldE9iamVjdE9wczsKICAgIEpTQ2hlY2tBY2Nlc3NPcCBj aGVja0FjY2VzczsKICAgIEpTTmF0aXZlIGNhbGw7CiAgICBKU05hdGl2ZSBjb25zdHJ1Y3Q7CiAg ICBKU1hEUk9iamVjdE9wIHhkck9iamVjdDsKICAgIEpTSGFzSW5zdGFuY2VPcCBoYXNJbnN0YW5j ZTsKICAgIEpTTWFya09wIG1hcms7CiAgICBqc3dvcmQgc3BhcmU7Cn07CiMgNzM3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKc3RydWN0IEpTT2JqZWN0T3BzIHsKCiAgICBKU05l d09iamVjdE1hcE9wIG5ld09iamVjdE1hcDsKICAgIEpTT2JqZWN0TWFwT3AgZGVzdHJveU9iamVj dE1hcDsKICAgIEpTTG9va3VwUHJvcE9wIGxvb2t1cFByb3BlcnR5OwogICAgSlNEZWZpbmVQcm9w T3AgZGVmaW5lUHJvcGVydHk7CiAgICBKU1Byb3BlcnR5SWRPcCBnZXRQcm9wZXJ0eTsKICAgIEpT UHJvcGVydHlJZE9wIHNldFByb3BlcnR5OwogICAgSlNBdHRyaWJ1dGVzT3AgZ2V0QXR0cmlidXRl czsKICAgIEpTQXR0cmlidXRlc09wIHNldEF0dHJpYnV0ZXM7CiAgICBKU1Byb3BlcnR5SWRPcCBk ZWxldGVQcm9wZXJ0eTsKICAgIEpTQ29udmVydE9wIGRlZmF1bHRWYWx1ZTsKICAgIEpTTmV3RW51 bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNDaGVja0FjY2Vzc0lkT3AgY2hlY2tBY2Nlc3M7CgoK ICAgIEpTT2JqZWN0T3AgdGhpc09iamVjdDsKICAgIEpTUHJvcGVydHlSZWZPcCBkcm9wUHJvcGVy dHk7CiAgICBKU05hdGl2ZSBjYWxsOwogICAgSlNOYXRpdmUgY29uc3RydWN0OwogICAgSlNYRFJP YmplY3RPcCB4ZHJPYmplY3Q7CiAgICBKU0hhc0luc3RhbmNlT3AgaGFzSW5zdGFuY2U7CiAgICBK U1NldE9iamVjdFNsb3RPcCBzZXRQcm90bzsKICAgIEpTU2V0T2JqZWN0U2xvdE9wIHNldFBhcmVu dDsKICAgIEpTTWFya09wIG1hcms7CiAgICBKU0ZpbmFsaXplT3AgY2xlYXI7CiAgICBKU0dldFJl cXVpcmVkU2xvdE9wIGdldFJlcXVpcmVkU2xvdDsKICAgIEpTU2V0UmVxdWlyZWRTbG90T3Agc2V0 UmVxdWlyZWRTbG90Owp9OwojIDc3NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgi CnN0cnVjdCBKU1Byb3BlcnR5IHsKICAgIGpzaWQgaWQ7Cn07CgpzdHJ1Y3QgSlNJZEFycmF5IHsK ICAgIGpzaW50IGxlbmd0aDsKICAgIGpzaWQgdmVjdG9yWzFdOwp9OwoKZXh0ZXJuIHZvaWQKSlNf RGVzdHJveUlkQXJyYXkoSlNDb250ZXh0ICpjeCwgSlNJZEFycmF5ICppZGEpOwoKZXh0ZXJuIEpT Qm9vbApKU19WYWx1ZVRvSWQoSlNDb250ZXh0ICpjeCwganN2YWwgdiwganNpZCAqaWRwKTsKCmV4 dGVybiBKU0Jvb2wKSlNfSWRUb1ZhbHVlKEpTQ29udGV4dCAqY3gsIGpzaWQgaWQsIGpzdmFsICp2 cCk7CgoKCgpleHRlcm4gSlNCb29sCkpTX1Byb3BlcnR5U3R1YihKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRW51bWVy YXRlU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNf UmVzb2x2ZVN0dWIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQpOwoKZXh0 ZXJuIEpTQm9vbApKU19Db252ZXJ0U3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK U1R5cGUgdHlwZSwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpTX0ZpbmFsaXplU3R1YihKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCnN0cnVjdCBKU0NvbnN0RG91YmxlU3BlYyB7CiAg ICBqc2RvdWJsZSBkdmFsOwogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHVpbnQ4IGZsYWdzOwog ICAgdWludDggc3BhcmVbM107Cn07CgoKCgoKCnN0cnVjdCBKU1Byb3BlcnR5U3BlYyB7CiAgICBj b25zdCBjaGFyICpuYW1lOwogICAgaW50OCB0aW55aWQ7CiAgICB1aW50OCBmbGFnczsKICAgIEpT UHJvcGVydHlPcCBnZXR0ZXI7CiAgICBKU1Byb3BlcnR5T3Agc2V0dGVyOwp9OwoKc3RydWN0IEpT RnVuY3Rpb25TcGVjIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICBKU05hdGl2ZSBjYWxsOwog ICAgdWludDggbmFyZ3M7CiAgICB1aW50OCBmbGFnczsKICAgIHVpbnQxNiBleHRyYTsKfTsKCmV4 dGVybiBKU09iamVjdCAqCkpTX0luaXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LCBKU09iamVjdCAqcGFyZW50X3Byb3RvLAogICAgICAgICAgICAgSlNDbGFzcyAqY2xhc3AsIEpT TmF0aXZlIGNvbnN0cnVjdG9yLCB1aW50TiBuYXJncywKICAgICAgICAgICAgIEpTUHJvcGVydHlT cGVjICpwcywgSlNGdW5jdGlvblNwZWMgKmZzLAogICAgICAgICAgICAgSlNQcm9wZXJ0eVNwZWMg KnN0YXRpY19wcywgSlNGdW5jdGlvblNwZWMgKnN0YXRpY19mcyk7CgoKZXh0ZXJuIEpTQ2xhc3Mg KgpKU19HZXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKIyA4NTkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0luc3RhbmNlT2Yo SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNDbGFzcyAqY2xhc3AsIGpzdmFsICphcmd2 KTsKCmV4dGVybiB2b2lkICoKSlNfR2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLCB2b2lkICpkYXRhKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0SW5zdGFuY2VQcml2YXRl KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAg ICAgICAgICAgICAganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0UHJvdG90 eXBlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRQ cm90b3R5cGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNPYmplY3QgKnByb3RvKTsK CmV4dGVybiBKU09iamVjdCAqCkpTX0dldFBhcmVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UGFyZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0 ICpvYmosIEpTT2JqZWN0ICpwYXJlbnQpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0Q29uc3Ry dWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnByb3RvKTsKCmV4dGVybiBKU09iamVjdCAq CkpTX05ld09iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3QgKnBy b3RvLCBKU09iamVjdCAqcGFyZW50KTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0NvbnN0cnVjdE9i amVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3QgKnByb3RvLAogICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCk7CgpleHRlcm4gSlNPYmplY3QgKgpKU19D b25zdHJ1Y3RPYmplY3RXaXRoQXJndW1lbnRzKEpTQ29udGV4dCAqY3gsIEpTQ2xhc3MgKmNsYXNw LCBKU09iamVjdCAqcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl Y3QgKnBhcmVudCwgdWludE4gYXJnYywganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK SlNfRGVmaW5lT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg Km5hbWUsIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAgICAgICAgSlNPYmplY3QgKnByb3RvLCB1 aW50TiBhdHRycyk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUNvbnN0RG91YmxlcyhKU0NvbnRl eHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU0NvbnN0RG91YmxlU3BlYyAqY2RzKTsKCmV4dGVybiBK U0Jvb2wKSlNfRGVmaW5lUHJvcGVydGllcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK U1Byb3BlcnR5U3BlYyAqcHMpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQcm9wZXJ0eShKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBqc3ZhbCB2YWx1ZSwK ICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRl ciwgdWludE4gYXR0cnMpOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19HZXRQcm9wZXJ0eUF0dHJp YnV0ZXMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3AsIEpTQm9vbCAqZm91bmRwKTsKCgoK CgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gs IEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50TiBhdHRycywgSlNCb29sICpmb3VuZHApOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQ cm9wZXJ0eVdpdGhUaW55SWQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hh ciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDggdGlueWlkLCBqc3ZhbCB2 YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpT UHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50TiBhdHRy cyk7CgpleHRlcm4gSlNCb29sCkpTX0FsaWFzUHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICph bGlhcyk7CgpleHRlcm4gSlNCb29sCkpTX0xvb2t1cFByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpT T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29s CkpTX0dldFByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg Km5hbWUsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1NldFByb3BlcnR5KEpTQ29udGV4 dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFsICp2cCk7CgpleHRl cm4gSlNCb29sCkpTX0RlbGV0ZVByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos IGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWxldGVQcm9wZXJ0eTIoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg ICAgICAgIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lVUNQcm9wZXJ0eShK U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGpz Y2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAg ICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAg ICAgICAgICAgdWludE4gYXR0cnMpOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19HZXRVQ1Byb3Bl cnR5QXR0cmlidXRlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50TiAqYXR0cnNwLCBKU0Jvb2wgKmZvdW5kcCk7CgoKCgoK CgpleHRlcm4gSlNCb29sCkpTX1NldFVDUHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gs IEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAq bmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGF0 dHJzLCBKU0Jvb2wgKmZvdW5kcCk7CgoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVVQ1Byb3BlcnR5 V2l0aFRpbnlJZChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQ4IHRpbnlpZCwganN2YWwgdmFsdWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBz ZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGF0dHJzKTsKCmV4dGVy biBKU0Jvb2wKSlNfTG9va3VwVUNQcm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s CiAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0VUNQ cm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNv bnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAganN2YWwg KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0VUNQcm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5h bWVsZW4sCiAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVs ZXRlVUNQcm9wZXJ0eTIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAg ICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAg ICAgICAgICAganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3QXJyYXlPYmpl Y3QoSlNDb250ZXh0ICpjeCwganNpbnQgbGVuZ3RoLCBqc3ZhbCAqdmVjdG9yKTsKCmV4dGVybiBK U0Jvb2wKSlNfSXNBcnJheU9iamVjdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4 dGVybiBKU0Jvb2wKSlNfR2V0QXJyYXlMZW5ndGgoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwganN1aW50ICpsZW5ndGhwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0QXJyYXlMZW5ndGgoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN1aW50IGxlbmd0aCk7CgpleHRlcm4gSlNCb29s CkpTX0hhc0FycmF5TGVuZ3RoKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdWludCAq bGVuZ3RocCk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUVsZW1lbnQoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwganNpbnQgaW5kZXgsIGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAg IEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsIHVpbnROIGF0dHJzKTsK CmV4dGVybiBKU0Jvb2wKSlNfQWxpYXNFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpv YmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzaW50IGFsaWFzKTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9v a3VwRWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2 YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0RWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0 RWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwg KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRlRWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc2ludCBpbmRleCk7CgpleHRlcm4gSlNCb29sCkpTX0RlbGV0ZUVsZW1lbnQy KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4LCBqc3ZhbCAqcnZhbCk7 CgpleHRlcm4gdm9pZApKU19DbGVhclNjb3BlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmop OwoKZXh0ZXJuIEpTSWRBcnJheSAqCkpTX0VudW1lcmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2hlY2tBY2Nlc3MoSlNDb250ZXh0ICpjeCwgSlNP YmplY3QgKm9iaiwganNpZCBpZCwgSlNBY2Nlc3NNb2RlIG1vZGUsCiAgICAgICAgICAgICAgIGpz dmFsICp2cCwgdWludE4gKmF0dHJzcCk7CgpleHRlcm4gSlNDaGVja0FjY2Vzc09wCkpTX1NldENo ZWNrT2JqZWN0QWNjZXNzQ2FsbGJhY2soSlNSdW50aW1lICpydCwgSlNDaGVja0FjY2Vzc09wIGFj Yik7CgpleHRlcm4gSlNCb29sCkpTX0dldFJlc2VydmVkU2xvdChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCB1aW50MzIgaW5kZXgsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1Nl dFJlc2VydmVkU2xvdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCB1aW50MzIgaW5kZXgs IGpzdmFsIHYpOwoKCgoKCgpzdHJ1Y3QgSlNQcmluY2lwYWxzIHsKICAgIGNoYXIgKmNvZGViYXNl OwogICAgdm9pZCAqICgqIGdldFByaW5jaXBhbEFycmF5KShKU0NvbnRleHQgKmN4LCBKU1ByaW5j aXBhbHMgKik7CiAgICBKU0Jvb2wgKCogZ2xvYmFsUHJpdmlsZWdlc0VuYWJsZWQpKEpTQ29udGV4 dCAqY3gsIEpTUHJpbmNpcGFscyAqKTsKCgogICAgdWludE4gcmVmY291bnQ7CiAgICB2b2lkICgq IGRlc3Ryb3kpKEpTQ29udGV4dCAqY3gsIHN0cnVjdCBKU1ByaW5jaXBhbHMgKik7Cn07CiMgMTA5 MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBKU1ByaW5jaXBhbHNU cmFuc2NvZGVyCkpTX1NldFByaW5jaXBhbHNUcmFuc2NvZGVyKEpTUnVudGltZSAqcnQsIEpTUHJp bmNpcGFsc1RyYW5zY29kZXIgcHgpOwoKCgoKCgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX05ld0Z1 bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTTmF0aXZlIGNhbGwsIHVpbnROIG5hcmdzLCB1aW50TiBm bGFncywKICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSk7 CgpleHRlcm4gSlNPYmplY3QgKgpKU19HZXRGdW5jdGlvbk9iamVjdChKU0Z1bmN0aW9uICpmdW4p OwoKCgoKCmV4dGVybiBjb25zdCBjaGFyICoKSlNfR2V0RnVuY3Rpb25OYW1lKEpTRnVuY3Rpb24g KmZ1bik7CiMgMTEyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBK U1N0cmluZyAqCkpTX0dldEZ1bmN0aW9uSWQoSlNGdW5jdGlvbiAqZnVuKTsKCgoKCmV4dGVybiB1 aW50TgpKU19HZXRGdW5jdGlvbkZsYWdzKEpTRnVuY3Rpb24gKmZ1bik7CgoKCgoKCgpleHRlcm4g SlNCb29sCkpTX09iamVjdElzRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7 CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUZ1bmN0aW9ucyhKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLCBKU0Z1bmN0aW9uU3BlYyAqZnMpOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19EZWZp bmVGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1l LCBKU05hdGl2ZSBjYWxsLAogICAgICAgICAgICAgICAgICB1aW50TiBuYXJncywgdWludE4gYXR0 cnMpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfQ2xvbmVGdW5jdGlvbk9iamVjdChKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqZnVub2JqLCBKU09iamVjdCAqcGFyZW50KTsKIyAxMTU5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19CdWZmZXJJc0NvbXBp bGFibGVVbml0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgpOwojIDExNzAgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxl U2NyaXB0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxl U2NyaXB0Rm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4g bGluZW5vKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVVQ1NjcmlwdChKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFy cywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1l LCB1aW50TiBsaW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVVDU2NyaXB0Rm9y UHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFscywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBs aW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZUZpbGUoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwoKZXh0ZXJuIEpTU2NyaXB0ICoK SlNfQ29tcGlsZUZpbGVIYW5kbGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIEZJTEUgKmZoKTsKCmV4dGVybiBK U1NjcmlwdCAqCkpTX0NvbXBpbGVGaWxlSGFuZGxlRm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZmlsZW5hbWUsIEZJTEUgKmZoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzKTsKIyAxMjIwICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3U2NyaXB0T2JqZWN0KEpTQ29u dGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKCgoKCmV4dGVybiBKU09iamVjdCAqCkpTX0dl dFNjcmlwdE9iamVjdChKU1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lT Y3JpcHQoSlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCk7CgpleHRlcm4gSlNGdW5jdGlv biAqCkpTX0NvbXBpbGVGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25z dCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIg KiphcmduYW1lcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3Qg bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxp bmVubyk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVGdW5jdGlvbkZvclByaW5jaXBh bHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmdu YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywg c2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpmaWxlbmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfQ29tcGls ZVVDRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1l cywKICAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0 aCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu byk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVVQ0Z1bmN0aW9uRm9yUHJpbmNpcGFs cyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLCBjb25zdCBjaGFyICpuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiph cmduYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAq Y2hhcnMsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU1N0cmluZyAqCkpT X0RlY29tcGlsZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBjb25zdCBj aGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdWludE4gaW5kZW50KTsKCgoKCgoKCmV4dGVy biBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTRnVuY3Rp b24gKmZ1biwgdWludE4gaW5kZW50KTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1 bmN0aW9uQm9keShKU0NvbnRleHQgKmN4LCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGluZGVudCk7 CiMgMTMxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wK SlNfRXhlY3V0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1NjcmlwdCAq c2NyaXB0LCBqc3ZhbCAqcnZhbCk7CgoKCgoKdHlwZWRlZiBlbnVtIEpTRXhlY1BhcnQgeyBKU0VY RUNfUFJPTE9HLCBKU0VYRUNfTUFJTiB9IEpTRXhlY1BhcnQ7CgpleHRlcm4gSlNCb29sCkpTX0V4 ZWN1dGVTY3JpcHRQYXJ0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NyaXB0ICpz Y3JpcHQsCiAgICAgICAgICAgICAgICAgICAgIEpTRXhlY1BhcnQgcGFydCwganN2YWwgKnJ2YWwp OwoKZXh0ZXJuIEpTQm9vbApKU19FdmFsdWF0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgdWludE4gbGVuZ3Ro LAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAog ICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRl U2NyaXB0Rm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHVpbnROIGxlbmd0aCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50 TiBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7Cgpl eHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg Km9iaiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCB1aW50TiBsZW5n dGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu bywKICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2 YWx1YXRlVUNTY3JpcHRGb3JQcmluY2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFs cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywg dWludE4gbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0NhbGxGdW5jdGlvbihKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGFyZ2MsCiAgICAgICAg ICAgICAgICBqc3ZhbCAqYXJndiwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19DYWxs RnVuY3Rpb25OYW1lKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5h bWUsIHVpbnROIGFyZ2MsCiAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFsICpy dmFsKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2FsbEZ1bmN0aW9uVmFsdWUoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwganN2YWwgZnZhbCwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAg ICAganN2YWwgKmFyZ3YsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0JyYW5jaENhbGxiYWNrCkpT X1NldEJyYW5jaENhbGxiYWNrKEpTQ29udGV4dCAqY3gsIEpTQnJhbmNoQ2FsbGJhY2sgY2IpOwoK ZXh0ZXJuIEpTQm9vbApKU19Jc1J1bm5pbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29s CkpTX0lzQ29uc3RydWN0aW5nKEpTQ29udGV4dCAqY3gpOwoKCgoKCgpleHRlcm4gSlNCb29sCkpT X0lzQXNzaWduaW5nKEpTQ29udGV4dCAqY3gpOwojIDEzODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19TZXRDYWxsUmV0dXJuVmFsdWUyKEpTQ29udGV4 dCAqY3gsIGpzdmFsIHYpOwojIDE0MDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5o IgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdTdHJpbmcoSlNDb250ZXh0ICpjeCwgY2hhciAqYnl0 ZXMsIHNpemVfdCBsZW5ndGgpOwoKZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3U3RyaW5nQ29weU4o SlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcywgc2l6ZV90IG4pOwoKZXh0ZXJuIEpTU3RyaW5n ICoKSlNfTmV3U3RyaW5nQ29weVooSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRl cm4gSlNTdHJpbmcgKgpKU19JbnRlcm5TdHJpbmcoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAq cyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZyhKU0NvbnRleHQgKmN4LCBqc2No YXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX05ld1VDU3Ry aW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3Qgbik7CgpleHRl cm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZ0NvcHlaKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpz Y2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19JbnRlcm5VQ1N0cmluZ04oSlNDb250ZXh0 ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVybiBKU1N0cmluZyAq CkpTX0ludGVyblVDU3RyaW5nKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcyk7CgpleHRl cm4gY2hhciAqCkpTX0dldFN0cmluZ0J5dGVzKEpTU3RyaW5nICpzdHIpOwoKZXh0ZXJuIGpzY2hh ciAqCkpTX0dldFN0cmluZ0NoYXJzKEpTU3RyaW5nICpzdHIpOwoKZXh0ZXJuIHNpemVfdApKU19H ZXRTdHJpbmdMZW5ndGgoSlNTdHJpbmcgKnN0cik7CgpleHRlcm4gaW50TgpKU19Db21wYXJlU3Ry aW5ncyhKU1N0cmluZyAqc3RyMSwgSlNTdHJpbmcgKnN0cjIpOwojIDE0NTggIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdHcm93YWJsZVN0 cmluZyhKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCgoKCgoK ZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3RGVwZW5kZW50U3RyaW5nKEpTQ29udGV4dCAqY3gsIEpT U3RyaW5nICpzdHIsIHNpemVfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBs ZW5ndGgpOwojIDE0NzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4g SlNTdHJpbmcgKgpKU19Db25jYXRTdHJpbmdzKEpTQ29udGV4dCAqY3gsIEpTU3RyaW5nICpsZWZ0 LCBKU1N0cmluZyAqcmlnaHQpOwoKCgoKCmV4dGVybiBjb25zdCBqc2NoYXIgKgpKU19VbmRlcGVu ZFN0cmluZyhKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyKTsKCgoKCgpleHRlcm4gSlNCb29s CkpTX01ha2VTdHJpbmdJbW11dGFibGUoSlNDb250ZXh0ICpjeCwgSlNTdHJpbmcgKnN0cik7CgoK CgoKCnN0cnVjdCBKU0xvY2FsZUNhbGxiYWNrcyB7CiAgICBKU0xvY2FsZVRvVXBwZXJDYXNlIGxv Y2FsZVRvVXBwZXJDYXNlOwogICAgSlNMb2NhbGVUb0xvd2VyQ2FzZSBsb2NhbGVUb0xvd2VyQ2Fz ZTsKICAgIEpTTG9jYWxlQ29tcGFyZSBsb2NhbGVDb21wYXJlOwp9OwoKCgoKCmV4dGVybiB2b2lk CkpTX1NldExvY2FsZUNhbGxiYWNrcyhKU0NvbnRleHQgKmN4LCBKU0xvY2FsZUNhbGxiYWNrcyAq Y2FsbGJhY2tzKTsKCgoKCgpleHRlcm4gSlNMb2NhbGVDYWxsYmFja3MgKgpKU19HZXRMb2NhbGVD YWxsYmFja3MoSlNDb250ZXh0ICpjeCk7CiMgMTUzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz L2pzYXBpLmgiCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yKEpTQ29udGV4dCAqY3gsIGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKTsKCgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yTnVtYmVy KEpTQ29udGV4dCAqY3gsIEpTRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAogICAgICAgICAg ICAgICAgICAgICB2b2lkICp1c2VyUmVmLCBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsK CgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yTnVtYmVyVUMoSlNDb250ZXh0ICpjeCwgSlNF cnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVz ZXJSZWYsIGNvbnN0IHVpbnROIGVycm9yTnVtYmVyLCAuLi4pOwoKCgoKCgoKZXh0ZXJuIEpTQm9v bApKU19SZXBvcnRXYXJuaW5nKEpTQ29udGV4dCAqY3gsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u KTsKCmV4dGVybiBKU0Jvb2wKSlNfUmVwb3J0RXJyb3JGbGFnc0FuZE51bWJlcihKU0NvbnRleHQg KmN4LCB1aW50TiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0Vycm9yQ2Fs bGJhY2sgZXJyb3JDYWxsYmFjaywgdm9pZCAqdXNlclJlZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsKCmV4dGVybiBKU0Jvb2wKSlNf UmVwb3J0RXJyb3JGbGFnc0FuZE51bWJlclVDKEpTQ29udGV4dCAqY3gsIHVpbnROIGZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh Y2ssIHZvaWQgKnVzZXJSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 aW50TiBlcnJvck51bWJlciwgLi4uKTsKCgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydE91dE9mTWVt b3J5KEpTQ29udGV4dCAqY3gpOwoKc3RydWN0IEpTRXJyb3JSZXBvcnQgewogICAgY29uc3QgY2hh ciAqZmlsZW5hbWU7CiAgICB1aW50TiBsaW5lbm87CiAgICBjb25zdCBjaGFyICpsaW5lYnVmOwog ICAgY29uc3QgY2hhciAqdG9rZW5wdHI7CiAgICBjb25zdCBqc2NoYXIgKnVjbGluZWJ1ZjsKICAg IGNvbnN0IGpzY2hhciAqdWN0b2tlbnB0cjsKICAgIHVpbnROIGZsYWdzOwogICAgdWludE4gZXJy b3JOdW1iZXI7CiAgICBjb25zdCBqc2NoYXIgKnVjbWVzc2FnZTsKICAgIGNvbnN0IGpzY2hhciAq Km1lc3NhZ2VBcmdzOwp9OwojIDE2MDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5o IgpleHRlcm4gSlNFcnJvclJlcG9ydGVyCkpTX1NldEVycm9yUmVwb3J0ZXIoSlNDb250ZXh0ICpj eCwgSlNFcnJvclJlcG9ydGVyIGVyKTsKIyAxNjE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv anNhcGkuaCIKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3UmVnRXhwT2JqZWN0KEpTQ29udGV4dCAq Y3gsIGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLCB1aW50TiBmbGFncyk7CgpleHRlcm4gSlNP YmplY3QgKgpKU19OZXdVQ1JlZ0V4cE9iamVjdChKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJz LCBzaXplX3QgbGVuZ3RoLCB1aW50TiBmbGFncyk7CgpleHRlcm4gdm9pZApKU19TZXRSZWdFeHBJ bnB1dChKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqaW5wdXQsIEpTQm9vbCBtdWx0aWxpbmUpOwoK ZXh0ZXJuIHZvaWQKSlNfQ2xlYXJSZWdFeHBTdGF0aWNzKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IHZvaWQKSlNfQ2xlYXJSZWdFeHBSb290cyhKU0NvbnRleHQgKmN4KTsKCgoKCgpleHRlcm4gSlNC b29sCkpTX0lzRXhjZXB0aW9uUGVuZGluZyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0Jvb2wK SlNfR2V0UGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCAqdnApOwoKZXh0ZXJu IHZvaWQKSlNfU2V0UGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKCmV4 dGVybiB2b2lkCkpTX0NsZWFyUGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4KTsKIyAxNjU5 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTRXhjZXB0aW9uU3Rh dGUgKgpKU19TYXZlRXhjZXB0aW9uU3RhdGUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gdm9pZApK U19SZXN0b3JlRXhjZXB0aW9uU3RhdGUoSlNDb250ZXh0ICpjeCwgSlNFeGNlcHRpb25TdGF0ZSAq c3RhdGUpOwoKZXh0ZXJuIHZvaWQKSlNfRHJvcEV4Y2VwdGlvblN0YXRlKEpTQ29udGV4dCAqY3gs IEpTRXhjZXB0aW9uU3RhdGUgKnN0YXRlKTsKIyAxNjc1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv anMvanNhcGkuaCIKZXh0ZXJuIEpTRXJyb3JSZXBvcnQgKgpKU19FcnJvckZyb21FeGNlcHRpb24o SlNDb250ZXh0ICpjeCwganN2YWwgdik7CiMgMTY5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz L2pzYXBpLmgiCmV4dGVybiBpbnROCkpTX0dldENvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7 CgpleHRlcm4gaW50TgpKU19TZXRDb250ZXh0VGhyZWFkKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IGludE4KSlNfQ2xlYXJDb250ZXh0VGhyZWFkKEpTQ29udGV4dCAqY3gpOwoKCgoKCn0KIyA0NiAi bnNET01DbGFzc0luZm8uaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVNj cmlwdFNlY3VyaXR5TWFuYWdlci5oIiAxCiMgMTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBz L25zSVNjcmlwdFNlY3VyaXR5TWFuYWdlci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j YXBzL25zSVByaW5jaXBhbC5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25z SVByaW5jaXBhbC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJpYWxp emFibGUuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXph YmxlLmgiCmNsYXNzIG5zSU9iamVjdElucHV0U3RyZWFtOwoKY2xhc3MgbnNJT2JqZWN0T3V0cHV0 U3RyZWFtOwojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXphYmxl LmgiCmNsYXNzIG5zSVNlcmlhbGl6YWJsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg5MWNjYTk4MSwgMHhjMjZkLCAweDQ0YTgsIHsgMHhiZSwgMHhiZSwgMHhkOSwgMHhlZCwg MHg0OCwgMHg5MSwgMHg1MCwgMHgzYSB9fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lTZXJpYWxpemFibGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJl YWQobnNJT2JqZWN0SW5wdXRTdHJlYW0gKmFJbnB1dFN0cmVhbSkgPSAwOwojIDUzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXphYmxlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBXcml0ZShuc0lPYmplY3RPdXRwdXRTdHJlYW0gKmFPdXRwdXRTdHJlYW0pID0gMDsKCn07CiMg MTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVByaW5jaXBhbC5oIiAyCgoKCgoKCnN0 cnVjdCBKU1ByaW5jaXBhbHM7CiMgMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVBy aW5jaXBhbC5oIgpjbGFzcyBuc0lQcmluY2lwYWwgOiBwdWJsaWMgbnNJU2VyaWFsaXphYmxlIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGZmOTMxM2QwLCAweDI1ZTEsIDB4MTFkMiwgeyAweDgxLCAweDYwLCAweDAw LCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7 IEVOQUJMRV9ERU5JRUQgPSAxIH07CgogIGVudW0geyBFTkFCTEVfVU5LTk9XTiA9IDIgfTsKCiAg ZW51bSB7IEVOQUJMRV9XSVRIX1VTRVJfUEVSTUlTU0lPTiA9IDMgfTsKCiAgZW51bSB7IEVOQUJM RV9HUkFOVEVEID0gNCB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1VzZXJWaXNpYmxlU3RyaW5nKGNoYXIg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZWZlcmVuY2VzKGNoYXIg KipwcmVmTmFtZSwgY2hhciAqKmlkLCBjaGFyICoqZ3JhbnRlZExpc3QsIGNoYXIgKipkZW5pZWRM aXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lQcmluY2lwYWwgKm90aGVy LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzaFZhbHVlKFBS VWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTUHJpbmNpcGFs cyhKU1ByaW5jaXBhbHMgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5F bmFibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksIFBSSW50MTYgKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FuRW5hYmxlQ2FwYWJpbGl0eShjb25zdCBj aGFyICpjYXBhYmlsaXR5LCBQUkludDE2IGNhbkVuYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBJc0NhcGFiaWxpdHlFbmFibGVkKGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksIHZvaWQgKiBh bm5vdGF0aW9uLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h YmxlQ2FwYWJpbGl0eShjb25zdCBjaGFyICpjYXBhYmlsaXR5LCB2b2lkICogKmFubm90YXRpb24p ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZXJ0Q2FwYWJpbGl0eShjb25zdCBjaGFyICpj YXBhYmlsaXR5LCB2b2lkICogKmFubm90YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg RGlzYWJsZUNhcGFiaWxpdHkoY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgdm9pZCAqICphbm5vdGF0 aW9uKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY2Fwcy9uc0lTY3JpcHRT ZWN1cml0eU1hbmFnZXIuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5l Y3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29ubmVjdC9uc0lYUENTZWN1cml0eU1hbmFnZXIuaCIKY2xhc3MgbnNJQ2xhc3NJbmZvOwoK Y2xhc3MgbnNJWFBDTmF0aXZlQ2FsbENvbnRleHQ7CiMgMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbm5lY3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiCmNsYXNzIG5zSVhQQ1NlY3VyaXR5 TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMTQzMTQ0MCwgMHhm MWNlLCAweDExZDIsIHsgMHg5OCwgMHg1YSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwg MHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIGVudW0geyBIT09LX0NSRUFURV9XUkFQUEVSID0g MVUgfTsKCiAgZW51bSB7IEhPT0tfQ1JFQVRFX0lOU1RBTkNFID0gMlUgfTsKCiAgZW51bSB7IEhP T0tfR0VUX1NFUlZJQ0UgPSA0VSB9OwoKICBlbnVtIHsgSE9PS19DQUxMX01FVEhPRCA9IDhVIH07 CgogIGVudW0geyBIT09LX0dFVF9QUk9QRVJUWSA9IDE2VSB9OwoKICBlbnVtIHsgSE9PS19TRVRf UFJPUEVSVFkgPSAzMlUgfTsKCiAgZW51bSB7IEhPT0tfQUxMID0gNjNVIH07CiMgNjAgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDYW5DcmVhdGVXcmFwcGVyKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIGNv bnN0IG5zSUlEICYgYUlJRCwgbnNJU3VwcG9ydHMgKmFPYmosIG5zSUNsYXNzSW5mbyAqYUNsYXNz SW5mbywgdm9pZCAqICphUG9saWN5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNyZWF0 ZUluc3RhbmNlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIGNvbnN0IG5zQ0lEICYgYUNJRCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5HZXRTZXJ2aWNlKEpTQ29udGV4dCAqIGFKU0NvbnRl eHQsIGNvbnN0IG5zQ0lEICYgYUNJRCkgPSAwOwoKICBlbnVtIHsgQUNDRVNTX0NBTExfTUVUSE9E ID0gMFUgfTsKCiAgZW51bSB7IEFDQ0VTU19HRVRfUFJPUEVSVFkgPSAxVSB9OwoKICBlbnVtIHsg QUNDRVNTX1NFVF9QUk9QRVJUWSA9IDJVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkFjY2Vz cyhQUlVpbnQzMiBhQWN0aW9uLCBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCAqYUNhbGxDb250ZXh0 LCBKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFKU09iamVjdCwgbnNJU3VwcG9y dHMgKmFPYmosIG5zSUNsYXNzSW5mbyAqYUNsYXNzSW5mbywganN2YWwgYU5hbWUsIHZvaWQgKiAq YVBvbGljeSkgPSAwOwoKfTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2Ny aXB0U2VjdXJpdHlNYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgbnNJVVJJOwojIDM1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY2Fwcy9uc0lTY3JpcHRTZWN1cml0eU1hbmFnZXIuaCIKY2xhc3MgbnNJ U2NyaXB0U2VjdXJpdHlNYW5hZ2VyIDogcHVibGljIG5zSVhQQ1NlY3VyaXR5TWFuYWdlciB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHg1OGRmNTc4MCwgMHg4MDA2LCAweDExZDIsIHsgMHhiZCwgMHg5MSwgMHgwMCwg MHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHhmNCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IENoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICogYUpTQ29udGV4dCwg SlNPYmplY3QgKiBhSlNPYmplY3QsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGpzdmFsIGFQcm9w ZXJ0eSwgUFJVaW50MzIgYUFjdGlvbikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVj a0Nvbm5lY3QoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgbnNJVVJJICphVGFyZ2V0VVJJLCBjb25z dCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphUHJvcGVydHkpID0gMDsKIyA2MiAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDaGVja0xvYWRVUklGcm9tU2NyaXB0KEpTQ29udGV4dCAqIGN4LCBuc0lV UkkgKnVyaSkgPSAwOwoKCgoKICBlbnVtIHsgU1RBTkRBUkQgPSAwVSB9OwoKICBlbnVtIHsgRElT QUxMT1dfRlJPTV9NQUlMID0gMVUgfTsKCiAgZW51bSB7IEFMTE9XX0NIUk9NRSA9IDJVIH07CiMg ODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVNjcmlwdFNlY3VyaXR5TWFuYWdlci5o IgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tMb2FkVVJJKG5zSVVSSSAqZnJvbSwgbnNJVVJJICp1 cmksIFBSVWludDMyIGZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja0xv YWRVUklTdHIoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdXJpLCBQUlVpbnQzMiBmbGFn cykgPSAwOwojIDEwNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJp dHlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja0Z1bmN0aW9uQWNjZXNzKEpTQ29u dGV4dCAqIGN4LCB2b2lkICogZnVuT2JqLCB2b2lkICogdGFyZ2V0T2JqKSA9IDA7CgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDYW5FeGVjdXRlU2NyaXB0cyhKU0NvbnRleHQgKiBjeCwgbnNJUHJp bmNpcGFsICpwcmluY2lwYWwsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFN1YmplY3RQcmluY2lwYWwobnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1QcmluY2lwYWwobnNJUHJpbmNpcGFs ICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZXJ0aWZpY2F0ZVBy aW5jaXBhbChjb25zdCBjaGFyICpDZXJ0SUQsIG5zSVByaW5jaXBhbCAqKl9yZXR2YWwpID0gMDsK CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvZGViYXNlUHJpbmNpcGFsKG5zSVVSSSAqYVVS SSwgbnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAwOwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXF1ZXN0Q2FwYWJpbGl0eShuc0lQcmluY2lwYWwgKnByaW5jaXBhbCwgY29uc3QgY2hhciAqY2Fw YWJpbGl0eSwgUFJJbnQxNiAqcmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElz Q2FwYWJpbGl0eUVuYWJsZWQoY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVDYXBhYmlsaXR5KGNvbnN0IGNo YXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXZlcnRDYXBh YmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IERpc2FibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhbkVuYWJsZUNhcGFiaWxpdHkoY29uc3QgY2hhciAqY2Vy dGlmaWNhdGVJRCwgY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgUFJJbnQxNiBjYW5FbmFibGUpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2JqZWN0UHJpbmNpcGFsKEpTQ29udGV4dCAq IGN4LCBKU09iamVjdCAqIG9iaiwgbnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAwOwoKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgU3ViamVjdFByaW5jaXBhbElzU3lzdGVtKFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tTYW1lT3JpZ2luKEpTQ29udGV4 dCAqIGFKU0NvbnRleHQsIG5zSVVSSSAqYVRhcmdldFVSSSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQ2hlY2tTYW1lT3JpZ2luVVJJKG5zSVVSSSAqYVNvdXJjZVVSSSwgbnNJVVJJICph VGFyZ2V0VVJJKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja1NhbWVPcmlnaW5Q cmluY2lwYWwobnNJUHJpbmNpcGFsICphU291cmNlUHJpbmNpcGFsLCBuc0lQcmluY2lwYWwgKmFU YXJnZXRQcmluY2lwYWwpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByaW5jaXBh bEZyb21Db250ZXh0KEpTQ29udGV4dCAqIGN4LCBuc0lQcmluY2lwYWwgKipfcmV0dmFsKSA9IDA7 Cgp9OwojIDQ3ICJuc0RPTUNsYXNzSW5mby5oIiAyCgpjbGFzcyBuc0lET01XaW5kb3c7CmNsYXNz IG5zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3Rpb247CmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwpj bGFzcyBuc0lGb3JtOwoKc3RydWN0IG5zRE9NQ2xhc3NJbmZvRGF0YTsKCnR5cGVkZWYgbnNJQ2xh c3NJbmZvKiAoKm5zRE9NQ2xhc3NJbmZvQ29uc3RydWN0b3JGbmMpCiAgKG5zRE9NQ2xhc3NJbmZv RGF0YSogYURhdGEpOwoKCnN0cnVjdCBuc0RPTUNsYXNzSW5mb0RhdGEKewogIGNvbnN0IGNoYXIg Km1OYW1lOwogIHVuaW9uIHsKICAgIG5zRE9NQ2xhc3NJbmZvQ29uc3RydWN0b3JGbmMgbUNvbnN0 cnVjdG9yRnB0cjsKICAgIG5zRE9NQ2xhc3NJbmZvRXh0ZXJuYWxDb25zdHJ1Y3RvckZuYyBtRXh0 ZXJuYWxDb25zdHJ1Y3RvckZwdHI7CiAgfSB1OwogIG5zSUNsYXNzSW5mbyAqbUNhY2hlZENsYXNz SW5mbzsKCiAgY29uc3QgbnNJSUQgKm1Qcm90b0NoYWluSW50ZXJmYWNlOwogIGNvbnN0IG5zSUlE ICoqbUludGVyZmFjZXM7CiAgUFJVaW50MzIgbVNjcmlwdGFibGVGbGFncyA6IDMxOwogIFBSQm9v bCBtSGFzQ2xhc3NJbnRlcmZhY2UgOiAxOwoKCgp9OwoKc3RydWN0IG5zRXh0ZXJuYWxET01DbGFz c0luZm9EYXRhIDogcHVibGljIG5zRE9NQ2xhc3NJbmZvRGF0YQp7CiAgY29uc3QgbnNDSUQgKm1D b25zdHJ1Y3RvckNJRDsKfTsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUHRyQml0czsKIyA5MyAi bnNET01DbGFzc0luZm8uaCIKY2xhc3MgbnNET01DbGFzc0luZm8gOiBwdWJsaWMgbnNJWFBDU2Ny aXB0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNJQ2xhc3NJbmZvCnsKcHVi bGljOgogIG5zRE9NQ2xhc3NJbmZvKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpOwogIHZpcnR1 YWwgfm5zRE9NQ2xhc3NJbmZvKCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NOYW1lKGNo YXIgKiAqYUNsYXNzTmFtZSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyaXB0YWJsZUZsYWdzKFBS VWludDMyICphU2NyaXB0YWJsZUZsYWdzKTsgdmlydHVhbCBuc3Jlc3VsdCBQcmVDcmVhdGUobnNJ U3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogZ2xvYmFsT2Jq LCBKU09iamVjdCAqICpwYXJlbnRPYmopOyB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZShuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBv YmopOyB2aXJ0dWFsIG5zcmVzdWx0IFBvc3RDcmVhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2 ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqKTsgdmlydHVhbCBuc3Jl c3VsdCBBZGRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0Nv bnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAqIHZwLCBQUkJvb2wg Kl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwg aWQsIGpzdmFsICogdnAsIFBSQm9vbCAqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJv cGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gs IEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKTsg dmlydHVhbCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3 cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAq IHZwLCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBv YmosIFBSQm9vbCAqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgTmV3RW51bWVyYXRlKG5zSVhQ Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAq IG9iaiwgUFJVaW50MzIgZW51bV9vcCwganN2YWwgKiBzdGF0ZXAsIGpzaWQgKmlkcCwgUFJCb29s ICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwg aWQsIFBSVWludDMyIGZsYWdzLCBKU09iamVjdCAqICpvYmpwLCBQUkJvb2wgKl9yZXR2YWwpOyB2 aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnQobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl ciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAq IHZwLCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IEZpbmFsaXplKG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9i aik7IHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tBY2Nlc3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2 ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwgUFJV aW50MzIgbW9kZSwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3Vs dCBDYWxsKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4 LCBKU09iamVjdCAqIG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZw LCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IENvbnN0cnVjdChuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmos IFBSVWludDMyIGFyZ2MsIGpzdmFsICogYXJndiwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFs KTsgdmlydHVhbCBuc3Jlc3VsdCBIYXNJbnN0YW5jZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZl ICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIHZhbCwgUFJC b29sICpicCwgUFJCb29sICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3VsdCBNYXJrKG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9i aiwgdm9pZCAqIGFyZywgUFJVaW50MzIgKl9yZXR2YWwpOwoKICBwdWJsaWM6IHZpcnR1YWwgbnNy ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQ dHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxl YXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zQXV0b1JlZkNudCBtUmVmQ250OyBwdWJsaWM6CgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlcyhQUlVpbnQzMiAqY291bnQsIG5zSUlEICogKiph cnJheSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFu Z3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJh Y3RJRChjaGFyICogKmFDb250cmFjdElEKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0Rlc2Ny aXB0aW9uKGNoYXIgKiAqYUNsYXNzRGVzY3JpcHRpb24pOyB2aXJ0dWFsIG5zcmVzdWx0IEdldENs YXNzSUQobnNDSUQgKiAqYUNsYXNzSUQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdldEltcGxlbWVudGF0 aW9uTGFuZ3VhZ2UoUFJVaW50MzIgKmFJbXBsZW1lbnRhdGlvbkxhbmd1YWdlKTsgdmlydHVhbCBu c3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQzMiAqYUZsYWdzKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRD bGFzc0lETm9BbGxvYyhuc0NJRCAqYUNsYXNzSUROb0FsbG9jKTsKIyAxMTUgIm5zRE9NQ2xhc3NJ bmZvLmgiCiAgc3RhdGljIG5zSUNsYXNzSW5mbyogR2V0Q2xhc3NJbmZvSW5zdGFuY2UobnNET01D bGFzc0luZm9JRCBhSUQpOwogIHN0YXRpYyBuc0lDbGFzc0luZm8qIEdldENsYXNzSW5mb0luc3Rh bmNlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpOwoKICBzdGF0aWMgdm9pZCBTaHV0RG93bigp OwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFE YXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNET01DbGFzc0luZm8oYURhdGEpOwogIH0KCiAgc3Rh dGljIG5zcmVzdWx0IFdyYXBOYXRpdmUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnNjb3BlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICpuYXRpdmUsIGNvbnN0IG5z SUlEJiBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CiAgc3Rh dGljIG5zcmVzdWx0IFRocm93SlNFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwgbnNyZXN1bHQgYVJl c3VsdCk7CgogIHN0YXRpYyBuc3Jlc3VsdCBJbml0RE9NSlNDbGFzcyhKU0NvbnRleHQgKmN4LCBK U09iamVjdCAqb2JqKTsKCiAgc3RhdGljIEpTQ2xhc3Mgc0RPTUpTQ2xhc3M7Cgpwcm90ZWN0ZWQ6 CiAgY29uc3QgbnNET01DbGFzc0luZm9EYXRhKiBtRGF0YTsKCiAgc3RhdGljIG5zcmVzdWx0IElu aXQoKTsKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDbGFzc05hbWUoUFJJbnQzMiBhRE9NQ2xh c3NJbmZvSUQpOwogIHN0YXRpYyBuc3Jlc3VsdCBSZWdpc3RlckNsYXNzUHJvdG9zKFBSSW50MzIg YURPTUNsYXNzSW5mb0lEKTsKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbENsYXNz ZXMoKTsKICBuc3Jlc3VsdCBSZXNvbHZlQ29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwKTsK CgoKCiAgc3RhdGljIFBSSW50MzIgR2V0QXJyYXlJbmRleEZyb21JZChKU0NvbnRleHQgKmN4LCBq c3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYUlz TnVtYmVyID0gMCk7CgogIHN0YXRpYyBpbmxpbmUgUFJCb29sIElzUmVhZG9ubHlSZXBsYWNlYWJs ZShqc3ZhbCBpZCkKICB7CiAgICByZXR1cm4gKGlkID09IHNUb3BfaWQgfHwKICAgICAgICAgICAg aWQgPT0gc1Njcm9sbGJhcnNfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc0NvbnRlbnRfaWQgfHwK ICAgICAgICAgICAgaWQgPT0gc1NpZGViYXJfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc01lbnVi YXJfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1Rvb2xiYXJfaWQgfHwKICAgICAgICAgICAgaWQg PT0gc0xvY2F0aW9uYmFyX2lkIHx8CiAgICAgICAgICAgIGlkID09IHNQZXJzb25hbGJhcl9pZCB8 fAogICAgICAgICAgICBpZCA9PSBzU3RhdHVzYmFyX2lkIHx8CiAgICAgICAgICAgIGlkID09IHNE aXJlY3Rvcmllc19pZCB8fAogICAgICAgICAgICBpZCA9PSBzQ29udHJvbGxlcnNfaWQgfHwKICAg ICAgICAgICAgaWQgPT0gc1Njcm9sbFhfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1Njcm9sbFlf aWQgfHwKICAgICAgICAgICAgaWQgPT0gc0xlbmd0aF9pZCB8fAogICAgICAgICAgICBpZCA9PSBz RnJhbWVzX2lkKTsKICB9CgogIHN0YXRpYyBpbmxpbmUgUFJCb29sIElzV3JpdGFibGVSZXBsYWNl YWJsZShqc3ZhbCBpZCkKICB7CiAgICByZXR1cm4gKGlkID09IHNJbm5lckhlaWdodF9pZCB8fAog ICAgICAgICAgICBpZCA9PSBzSW5uZXJXaWR0aF9pZCB8fAogICAgICAgICAgICBpZCA9PSBzT3V0 ZXJIZWlnaHRfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc091dGVyV2lkdGhfaWQgfHwKICAgICAg ICAgICAgaWQgPT0gc1NjcmVlblhfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1NjcmVlbllfaWQg fHwKICAgICAgICAgICAgaWQgPT0gc1N0YXR1c19pZCB8fAogICAgICAgICAgICBpZCA9PSBzTmFt ZV9pZCk7CiAgfQoKICBuc3Jlc3VsdCBkb0NoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICpj eCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSVWludDMyIGFjY2Vzc01vZGUsIFBSQm9vbCBpc1dpbmRvdyk7Cgog IHN0YXRpYyBKU0NsYXNzIHNET01Db25zdHJ1Y3RvclByb3RvQ2xhc3M7CiAgc3RhdGljIEpTRnVu Y3Rpb25TcGVjIHNET01KU0NsYXNzX21ldGhvZHNbXTsKCiAgc3RhdGljIG5zSVhQQ29ubmVjdCAq c1hQQ29ubmVjdDsKICBzdGF0aWMgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyICpzU2VjTWFuOwoK CiAgc3RhdGljIG5zcmVzdWx0IERlZmluZVN0YXRpY0pTVmFscyhKU0NvbnRleHQgKmN4KTsKCiAg c3RhdGljIFBSQm9vbCBzSXNJbml0aWFsaXplZDsKCiAgc3RhdGljIGpzdmFsIHNUb3BfaWQ7CiAg c3RhdGljIGpzdmFsIHNTY3JvbGxiYXJzX2lkOwogIHN0YXRpYyBqc3ZhbCBzTG9jYXRpb25faWQ7 CiAgc3RhdGljIGpzdmFsIHNDb21wb25lbnRzX2lkOwogIHN0YXRpYyBqc3ZhbCBzQ29uc3RydWN0 b3JfaWQ7CiAgc3RhdGljIGpzdmFsIHNfY29udGVudF9pZDsKICBzdGF0aWMganN2YWwgc0NvbnRl bnRfaWQ7CiAgc3RhdGljIGpzdmFsIHNTaWRlYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBzTWVudWJh cl9pZDsKICBzdGF0aWMganN2YWwgc1Rvb2xiYXJfaWQ7CiAgc3RhdGljIGpzdmFsIHNMb2NhdGlv bmJhcl9pZDsKICBzdGF0aWMganN2YWwgc1BlcnNvbmFsYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBz U3RhdHVzYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBzRGlyZWN0b3JpZXNfaWQ7CiAgc3RhdGljIGpz dmFsIHNDb250cm9sbGVyc19pZDsKICBzdGF0aWMganN2YWwgc0xlbmd0aF9pZDsKICBzdGF0aWMg anN2YWwgc0lubmVySGVpZ2h0X2lkOwogIHN0YXRpYyBqc3ZhbCBzSW5uZXJXaWR0aF9pZDsKICBz dGF0aWMganN2YWwgc091dGVySGVpZ2h0X2lkOwogIHN0YXRpYyBqc3ZhbCBzT3V0ZXJXaWR0aF9p ZDsKICBzdGF0aWMganN2YWwgc1NjcmVlblhfaWQ7CiAgc3RhdGljIGpzdmFsIHNTY3JlZW5ZX2lk OwogIHN0YXRpYyBqc3ZhbCBzU3RhdHVzX2lkOwogIHN0YXRpYyBqc3ZhbCBzTmFtZV9pZDsKICBz dGF0aWMganN2YWwgc09ubW91c2Vkb3duX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25tb3VzZXVwX2lk OwogIHN0YXRpYyBqc3ZhbCBzT25jbGlja19pZDsKICBzdGF0aWMganN2YWwgc09uY29udGV4dG1l bnVfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbm1vdXNlb3Zlcl9pZDsKICBzdGF0aWMganN2YWwgc09u bW91c2VvdXRfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbmtleWRvd25faWQ7CiAgc3RhdGljIGpzdmFs IHNPbmtleXVwX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25rZXlwcmVzc19pZDsKICBzdGF0aWMganN2 YWwgc09ubW91c2Vtb3ZlX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25mb2N1c19pZDsKICBzdGF0aWMg anN2YWwgc09uYmx1cl9pZDsKICBzdGF0aWMganN2YWwgc09uc3VibWl0X2lkOwogIHN0YXRpYyBq c3ZhbCBzT25yZXNldF9pZDsKICBzdGF0aWMganN2YWwgc09uY2hhbmdlX2lkOwogIHN0YXRpYyBq c3ZhbCBzT25zZWxlY3RfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbmxvYWRfaWQ7CiAgc3RhdGljIGpz dmFsIHNPbnVubG9hZF9pZDsKICBzdGF0aWMganN2YWwgc09uYWJvcnRfaWQ7CiAgc3RhdGljIGpz dmFsIHNPbmVycm9yX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25wYWludF9pZDsKICBzdGF0aWMganN2 YWwgc09ucmVzaXplX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25zY3JvbGxfaWQ7CiAgc3RhdGljIGpz dmFsIHNTY3JvbGxJbnRvVmlld19pZDsKICBzdGF0aWMganN2YWwgc1Njcm9sbFhfaWQ7CiAgc3Rh dGljIGpzdmFsIHNTY3JvbGxZX2lkOwogIHN0YXRpYyBqc3ZhbCBzT3Blbl9pZDsKICBzdGF0aWMg anN2YWwgc0l0ZW1faWQ7CiAgc3RhdGljIGpzdmFsIHNFbnVtZXJhdGVfaWQ7CiAgc3RhdGljIGpz dmFsIHNOYXZpZ2F0b3JfaWQ7CiAgc3RhdGljIGpzdmFsIHNEb2N1bWVudF9pZDsKICBzdGF0aWMg anN2YWwgc1dpbmRvd19pZDsKICBzdGF0aWMganN2YWwgc0ZyYW1lc19pZDsKCiAgc3RhdGljIGNv bnN0IEpTQ2xhc3MgKnNPYmplY3RDbGFzczsKCiAgc3RhdGljIFBSQm9vbCBzRG9TZWN1cml0eUNo ZWNrSW5BZGRQcm9wZXJ0eTsKfTsKCnR5cGVkZWYgbnNET01DbGFzc0luZm8gbnNET01HZW5lcmlj U0g7CgoKCgoKCmNsYXNzIG5zRXZlbnRSZWNpZXZlclNIIDogcHVibGljIG5zRE9NR2VuZXJpY1NI CnsKcHJvdGVjdGVkOgogIG5zRXZlbnRSZWNpZXZlclNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh dGEpIDogbnNET01HZW5lcmljU0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNFdmVudFJl Y2lldmVyU0goKQogIHsKICB9CgogIHN0YXRpYyBQUkJvb2wgUmVhbGx5SXNFdmVudE5hbWUoanN2 YWwgaWQsIGpzY2hhciBhRmlyc3RDaGFyKTsKCiAgc3RhdGljIGlubGluZSBQUkJvb2wgSXNFdmVu dE5hbWUoanN2YWwgaWQpCiAgewogICAgOwoKICAgIGpzY2hhciAqc3RyID0gOjpKU19HZXRTdHJp bmdDaGFycygoKEpTU3RyaW5nICopKCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMy KTEgPDwgKDMpKSAtIDEpKSkpKTsKCiAgICBpZiAoc3RyWzBdID09ICdvJyAmJiBzdHJbMV0gPT0g J24nKSB7CiAgICAgIHJldHVybiBSZWFsbHlJc0V2ZW50TmFtZShpZCwgc3RyWzJdKTsKICAgIH0K CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcGlsZUhhbmRsZXIobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGNvbXBpbGUsIFBSQm9vbCAqZGlkX2Nv bXBpbGUpOwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAg ICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwgUFJVaW50MzIgZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICpf cmV0dmFsKTsKfTsKCgoKCmNsYXNzIG5zV2luZG93U0ggOiBwdWJsaWMgbnNFdmVudFJlY2lldmVy U0gKewpwcm90ZWN0ZWQ6CiAgbnNXaW5kb3dTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6 IG5zRXZlbnRSZWNpZXZlclNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zV2luZG93U0go KQogIHsKICB9CgogIHN0YXRpYyBuc3Jlc3VsdCBHbG9iYWxSZXNvbHZlKG5zSVN1cHBvcnRzICph TmF0aXZlLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT T2JqZWN0ICpvYmosIEpTU3RyaW5nICpzdHIsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqZGlkX3Jlc29sdmUpOwoKcHVibGljOgogIHZpcnR1 YWwgbnNyZXN1bHQgUHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3Qg KipwYXJlbnRPYmopOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJvcGVydHkobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg ICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZh bCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0 aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IEFkZFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1 bHQgRGVsUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250 ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk LCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNv bHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAg ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBm bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJvb2wgKl9y ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgRmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5h dGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq ZWN0ICpvYmopOwoKICBzdGF0aWMgbnNyZXN1bHQgQ2FjaGVEb2N1bWVudFByb3BlcnR5KEpTQ29u dGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lET01XaW5kb3cgKndpbmRvdyk7CgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRv Q3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc1dp bmRvd1NIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0xvY2F0aW9uU0ggOiBwdWJsaWMgbnNE T01HZW5lcmljU0gKewpwcm90ZWN0ZWQ6CiAgbnNMb2NhdGlvblNIKG5zRE9NQ2xhc3NJbmZvRGF0 YSogYURhdGEpIDogbnNET01HZW5lcmljU0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNM b2NhdGlvblNIKCkKICB7CiAgfQoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tBY2Nl c3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAg ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBt b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwp OwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFE YXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNMb2NhdGlvblNIKGFEYXRhKTsKICB9Cn07CgoKCgoK Y2xhc3MgbnNOb2RlU0ggOiBwdWJsaWMgbnNFdmVudFJlY2lldmVyU0gKewpwcm90ZWN0ZWQ6CiAg bnNOb2RlU0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0V2ZW50UmVjaWV2ZXJTSChh RGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc05vZGVTSCgpCiAgewogIH0KCnB1YmxpYzoKICB2 aXJ0dWFsIG5zcmVzdWx0IFByZUNyZWF0ZShuc0lTdXBwb3J0cyAqbmF0aXZlT2JqLCBKU0NvbnRl eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpnbG9iYWxPYmosIEpTT2Jq ZWN0ICoqcGFyZW50T2JqKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxhZ3MoUFJVaW50MzIgKmFGbGFncyk7Cgog IHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEp CiAgewogICAgcmV0dXJuIG5ldyBuc05vZGVTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNF bGVtZW50U0ggOiBwdWJsaWMgbnNOb2RlU0gKewpwcm90ZWN0ZWQ6CiAgbnNFbGVtZW50U0gobnNE T01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05vZGVTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0 dWFsIH5uc0VsZW1lbnRTSCgpCiAgewogIH0KCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IFBv c3RDcmVhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpj eCwKICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqKTsKCiAgc3RhdGljIG5zSUNsYXNz SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g bmV3IG5zRWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0FycmF5U0ggOiBwdWJs aWMgbnNET01DbGFzc0luZm8Kewpwcm90ZWN0ZWQ6CiAgbnNBcnJheVNIKG5zRE9NQ2xhc3NJbmZv RGF0YSogYURhdGEpIDogbnNET01DbGFzc0luZm8oYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+ bnNBcnJheVNIKCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBw b3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQg KmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zQXJyYXlT SChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNOYW1lZEFycmF5U0ggOiBwdWJsaWMgbnNBcnJh eVNICnsKcHJvdGVjdGVkOgogIG5zTmFtZWRBcnJheVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh dGEpIDogbnNBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zTmFtZWRBcnJheVNI KCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAq YU5hdGl2ZSwgY29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpT Q29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3Zh bCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwp9OwoKCgoKY2xhc3MgbnNOYW1lZE5v ZGVNYXBTSCA6IHB1YmxpYyBuc05hbWVkQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc05hbWVkTm9k ZU1hcFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEp CiAgewogIH0KCiAgdmlydHVhbCB+bnNOYW1lZE5vZGVNYXBTSCgpCiAgewogIH0KCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUlu ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwg Y29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRv Q3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc05h bWVkTm9kZU1hcFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0hUTUxDb2xsZWN0aW9uU0gg OiBwdWJsaWMgbnNOYW1lZEFycmF5U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MQ29sbGVjdGlvblNI KG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewog IH0KCiAgdmlydHVhbCB+bnNIVE1MQ29sbGVjdGlvblNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25z dCBuc0FTdHJpbmcmIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1 cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSFRNTENv bGxlY3Rpb25TSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNDb250ZW50TGlzdFNIIDogcHVi bGljIG5zSFRNTENvbGxlY3Rpb25TSAp7CnByb3RlY3RlZDoKICBuc0NvbnRlbnRMaXN0U0gobnNE T01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0hUTUxDb2xsZWN0aW9uU0goYURhdGEpCiAgewog IH0KCiAgdmlydHVhbCB+bnNDb250ZW50TGlzdFNIKCkKICB7CiAgfQoKcHVibGljOgogIHZpcnR1 YWwgbnNyZXN1bHQgUHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3Qg KipwYXJlbnRPYmopOwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNz SW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNDb250ZW50TGlzdFNIKGFEYXRh KTsKICB9Cn07CgoKCgoKY2xhc3MgbnNGb3JtQ29udHJvbExpc3RTSCA6IHB1YmxpYyBuc0hUTUxD b2xsZWN0aW9uU0gKewpwcm90ZWN0ZWQ6CiAgbnNGb3JtQ29udHJvbExpc3RTSChuc0RPTUNsYXNz SW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRNTENvbGxlY3Rpb25TSChhRGF0YSkKICB7CiAgfQoKICB2 aXJ0dWFsIH5uc0Zvcm1Db250cm9sTGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFO YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3Vs dCk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0lu Zm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zRm9ybUNvbnRyb2xMaXN0U0goYURh dGEpOwogIH0KfTsKCgoKCmNsYXNzIG5zRG9jdW1lbnRTSCA6IHB1YmxpYyBuc05vZGVTSAp7CnB1 YmxpYzoKICBuc0RvY3VtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05vZGVT SChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc0RvY3VtZW50U0goKQogIHsKICB9CgpwdWJs aWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0 aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1 bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRl eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwg UFJVaW50MzIgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwg UFJCb29sICpfcmV0dmFsKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBl ZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg IEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCk7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQzMiogYUZsYWdzKTsKCiAgc3RhdGljIG5z SUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICBy ZXR1cm4gbmV3IG5zRG9jdW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1MRG9j dW1lbnRTSCA6IHB1YmxpYyBuc0RvY3VtZW50U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MRG9jdW1l bnRTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRG9jdW1lbnRTSChhRGF0YSkKICB7 CiAgfQoKICB2aXJ0dWFsIH5uc0hUTUxEb2N1bWVudFNIKCkKICB7CiAgfQoKICBzdGF0aWMgbnNy ZXN1bHQgUmVzb2x2ZUltcGwoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwganN2YWwgaWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqcmVzdWx0KTsKICBzdGF0aWMg SlNCb29sIERvY3VtZW50T3BlbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50TiBhcmdjLCBqc3ZhbCAq YXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwg KnJ2YWwpOwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAg ICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwgUFJVaW50MzIgZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwoKICBzdGF0aWMgbnNJQ2xh c3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVy biBuZXcgbnNIVE1MRG9jdW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1MRWxl bWVudFNIIDogcHVibGljIG5zRWxlbWVudFNICnsKcHJvdGVjdGVkOgogIG5zSFRNTEVsZW1lbnRT SChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRWxlbWVudFNIKGFEYXRhKQogIHsKICB9 CgogIHZpcnR1YWwgfm5zSFRNTEVsZW1lbnRTSCgpCiAgewogIH0KCiAgc3RhdGljIEpTQm9vbCBT Y3JvbGxJbnRvVmlldyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGFyZ2MsIGpzdmFsICphcmd2 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpy dmFsKTsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1Jlc29sdmUobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg ICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCk7CgogIHN0YXRp YyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewog ICAgcmV0dXJuIG5ldyBuc0hUTUxFbGVtZW50U0goYURhdGEpOwogIH0KfTsKCgoKCmNsYXNzIG5z SFRNTEZvcm1FbGVtZW50U0ggOiBwdWJsaWMgbnNIVE1MRWxlbWVudFNICnsKcHJvdGVjdGVkOgog IG5zSFRNTEZvcm1FbGVtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0hUTUxF bGVtZW50U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNIVE1MRm9ybUVsZW1lbnRTSCgp CiAgewogIH0KCiAgc3RhdGljIG5zcmVzdWx0IEZpbmROYW1lZEl0ZW0obnNJRm9ybSAqYUZvcm0s IEpTU3RyaW5nICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9y dHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1Jlc29sdmUobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCk7 CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZl ICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl Y3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCAqX3JldHZhbCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3RW51bWVyYXRlKG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVp bnQzMiBlbnVtX29wLCBqc3ZhbCAqc3RhdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGpz aWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSFRNTEZv cm1FbGVtZW50U0goYURhdGEpOwogIH0KfTsKCgoKCmNsYXNzIG5zSFRNTFNlbGVjdEVsZW1lbnRT SCA6IHB1YmxpYyBuc0hUTUxFbGVtZW50U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MU2VsZWN0RWxl bWVudFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNIVE1MRWxlbWVudFNIKGFEYXRh KQogIHsKICB9CgogIHZpcnR1YWwgfm5zSFRNTFNlbGVjdEVsZW1lbnRTSCgpCiAgewogIH0KCnB1 YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWRO YXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBK U09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KG5zSVhQ Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAg ICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wg Kl9yZXR2YWwpOwoKICBzdGF0aWMgbnNyZXN1bHQgU2V0T3B0aW9uKEpTQ29udGV4dCAqY3gsIGpz dmFsICp2cCwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ RE9NTlNIVE1MT3B0aW9uQ29sbGVjdGlvbiAqYU9wdENvbGxlY3Rpb24pOwoKICBzdGF0aWMgbnNJ Q2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJl dHVybiBuZXcgbnNIVE1MU2VsZWN0RWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoKCgoKY2xhc3Mg bnNIVE1MRXh0ZXJuYWxPYmpTSCA6IHB1YmxpYyBuc0hUTUxFbGVtZW50U0gKewpwcm90ZWN0ZWQ6 CiAgbnNIVE1MRXh0ZXJuYWxPYmpTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRN TEVsZW1lbnRTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc0hUTUxFeHRlcm5hbE9ialNI KCkKICB7CiAgfQoKICBuc3Jlc3VsdCBHZXRQbHVnaW5JbnN0YW5jZShuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlICphV3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVn aW5JbnN0YW5jZSAqKmFSZXN1bHQpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdpbkpTT2Jq ZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAqcGx1Z2luX2luc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9vYmosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9wcm90bykgPSAw OwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdENyZWF0ZShuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAg ICBKU09iamVjdCAqb2JqKTsKfTsKCgoKCmNsYXNzIG5zSFRNTEFwcGxldEVsZW1lbnRTSCA6IHB1 YmxpYyBuc0hUTUxFeHRlcm5hbE9ialNICnsKcHJvdGVjdGVkOgogIG5zSFRNTEFwcGxldEVsZW1l bnRTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRNTEV4dGVybmFsT2JqU0goYURh dGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNIVE1MQXBwbGV0RWxlbWVudFNIKCkKICB7CiAgfQoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdpbkpTT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5J bnN0YW5jZSAqcGx1Z2luX2luc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBKU09iamVjdCAqKnBsdWdpbl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBKU09iamVjdCAqKnBsdWdpbl9wcm90byk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNz SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g bmV3IG5zSFRNTEFwcGxldEVsZW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1M UGx1Z2luT2JqRWxlbWVudFNIIDogcHVibGljIG5zSFRNTEFwcGxldEVsZW1lbnRTSAp7CnByb3Rl Y3RlZDoKICBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0 YSkgOiBuc0hUTUxBcHBsZXRFbGVtZW50U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNI VE1MUGx1Z2luT2JqRWxlbWVudFNIKCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBs dWdpbkpTT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAqcGx1Z2luX2luc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9vYmos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9w cm90byk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNvbHZlKG5zSVhQQ29ubmVj dFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAg ICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJvb2wgKl9yZXR2YWwpOwoKICBzdGF0 aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsK ICAgIHJldHVybiBuZXcgbnNIVE1MUGx1Z2luT2JqRWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoK CgpjbGFzcyBuc0hUTUxPcHRpb25Db2xsZWN0aW9uU0ggOiBwdWJsaWMgbnNIVE1MQ29sbGVjdGlv blNICnsKcHJvdGVjdGVkOgogIG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSChuc0RPTUNsYXNzSW5m b0RhdGEqIGFEYXRhKSA6IG5zSFRNTENvbGxlY3Rpb25TSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0 dWFsIH5uc0hUTUxPcHRpb25Db2xsZWN0aW9uU0goKQogIHsKICB9CgpwdWJsaWM6CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy LCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNz SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g bmV3IG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNQ bHVnaW5TSCA6IHB1YmxpYyBuc05hbWVkQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc1BsdWdpblNI KG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewog IH0KCiAgdmlydHVhbCB+bnNQbHVnaW5TSCgpCiAgewogIH0KCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgY29uc3QgbnNBU3Ry aW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq KmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9N Q2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc1BsdWdpblNIKGFEYXRh KTsKICB9Cn07CgoKCgpjbGFzcyBuc1BsdWdpbkFycmF5U0ggOiBwdWJsaWMgbnNOYW1lZEFycmF5 U0gKewpwcm90ZWN0ZWQ6CiAgbnNQbHVnaW5BcnJheVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh dGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNQbHVnaW5B cnJheVNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0KG5zSVN1cHBv cnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJ dGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6 CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0 YSkKICB7CiAgICByZXR1cm4gbmV3IG5zUGx1Z2luQXJyYXlTSChhRGF0YSk7CiAgfQp9OwoKCgoK Y2xhc3MgbnNNaW1lVHlwZUFycmF5U0ggOiBwdWJsaWMgbnNOYW1lZEFycmF5U0gKewpwcm90ZWN0 ZWQ6CiAgbnNNaW1lVHlwZUFycmF5U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05h bWVkQXJyYXlTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc01pbWVUeXBlQXJyYXlTSCgp CiAgewogIH0KCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5h dGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1 cHBvcnRzICoqYVJlc3VsdCk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lT dXBwb3J0cyAqYU5hdGl2ZSwgY29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRp YyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewog ICAgcmV0dXJuIG5ldyBuc01pbWVUeXBlQXJyYXlTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3Mg bnNTdHJpbmdBcnJheVNIIDogcHVibGljIG5zRE9NQ2xhc3NJbmZvCnsKcHJvdGVjdGVkOgogIG5z U3RyaW5nQXJyYXlTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRE9NQ2xhc3NJbmZv KGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zU3RyaW5nQXJyYXlTSCgpCiAgewogIH0KCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHJpbmdBdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJJbnQz MiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFSZXN1 bHQpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y ZXR2YWwpOwp9OwoKCgoKY2xhc3MgbnNIaXN0b3J5U0ggOiBwdWJsaWMgbnNTdHJpbmdBcnJheVNI CnsKcHJvdGVjdGVkOgogIG5zSGlzdG9yeVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zSGlzdG9yeVNIKCkK ICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ0F0KG5zSVN1cHBvcnRzICphTmF0 aXZlLCBQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0 cmluZyYgYVJlc3VsdCk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAg ICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJC b29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFz c0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSGlzdG9yeVNIKGFEYXRhKTsK ICB9Cn07CgoKCgpjbGFzcyBuc01lZGlhTGlzdFNIIDogcHVibGljIG5zU3RyaW5nQXJyYXlTSAp7 CnByb3RlY3RlZDoKICBuc01lZGlhTGlzdFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zTWVkaWFMaXN0U0go KQogIHsKICB9CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nQXQobnNJU3VwcG9ydHMgKmFO YXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNB U3RyaW5nJiBhUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0 ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNNZWRpYUxp c3RTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNTdHlsZVNoZWV0TGlzdFNIIDogcHVibGlj IG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc1N0eWxlU2hlZXRMaXN0U0gobnNET01DbGFzc0lu Zm9EYXRhKiBhRGF0YSkgOiBuc0FycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNT dHlsZVNoZWV0TGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0 KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJ Q2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJl dHVybiBuZXcgbnNTdHlsZVNoZWV0TGlzdFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0NT U1ZhbHVlTGlzdFNIIDogcHVibGljIG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc0NTU1ZhbHVl TGlzdFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNBcnJheVNIKGFEYXRhKQogIHsK ICB9CgogIHZpcnR1YWwgfm5zQ1NTVmFsdWVMaXN0U0goKQogIHsKICB9CgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJdGVtQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBSVWludDMyIGFJbmRleCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVi bGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSog YURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc0NTU1ZhbHVlTGlzdFNIKGFEYXRhKTsKICB9Cn07 CgoKCgpjbGFzcyBuc0NTU1N0eWxlRGVjbFNIIDogcHVibGljIG5zU3RyaW5nQXJyYXlTSAp7CnBy b3RlY3RlZDoKICBuc0NTU1N0eWxlRGVjbFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zQ1NTU3R5bGVEZWNs U0goKQogIHsKICB9CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nQXQobnNJU3VwcG9ydHMg KmFOYXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNBU3RyaW5nJiBhUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0Ny ZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNDU1NT dHlsZURlY2xTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNDU1NSdWxlTGlzdFNIIDogcHVi bGljIG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc0NTU1J1bGVMaXN0U0gobnNET01DbGFzc0lu Zm9EYXRhKiBhRGF0YSkgOiBuc0FycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnND U1NSdWxlTGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0KG5z SVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xh c3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVy biBuZXcgbnNDU1NSdWxlTGlzdFNIKGFEYXRhKTsKICB9Cn07CiMgMTEzMCAibnNET01DbGFzc0lu Zm8uaCIKY2xhc3MgbnNFdmVudExpc3RlbmVyVGhpc1RyYW5zbGF0b3IgOiBwdWJsaWMgbnNJWFBD RnVuY3Rpb25UaGlzVHJhbnNsYXRvcgp7CnB1YmxpYzoKICBuc0V2ZW50TGlzdGVuZXJUaGlzVHJh bnNsYXRvcigpCiAgewogIH0KCiAgdmlydHVhbCB+bnNFdmVudExpc3RlbmVyVGhpc1RyYW5zbGF0 b3IoKQogIHsKICB9CgoKICBwdWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2Uo Y29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250 IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6 IG5zQXV0b1JlZkNudCBtUmVmQ250OyBwdWJsaWM6CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRyYW5z bGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFsVGhpcywgbnNJSW50ZXJmYWNlSW5mbyAqYUlu dGVyZmFjZUluZm8sIFBSVWludDE2IGFNZXRob2RJbmRleCwgUFJCb29sICphSGlkZUZpcnN0UGFy YW1Gcm9tSlMsIG5zSUlEICogKmFJSURPZlJlc3VsdCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKTsK fTsKCgp2b2lkIEludmFsaWRhdGVDb250ZXh0QW5kV3JhcHBlckNhY2hlKCk7CiMgNDIgIm5zRE9N Q2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5o IiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5oIgojIDEgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3Bsc3RyLmgiIDEKIyA2MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVy biBQUlVpbnQzMgpQTF9zdHJsZW4oY29uc3QgY2hhciAqc3RyKTsKIyA3OSAiL3Zhci90bXAvcG9y dGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu aCIKZXh0ZXJuIFBSVWludDMyClBMX3N0cm5sZW4oY29uc3QgY2hhciAqc3RyLCBQUlVpbnQzMiBt YXgpOwojIDkwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShjaGFyICpk ZXN0LCBjb25zdCBjaGFyICpzcmMpOwojIDEwMyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsK IyAxMjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNweXooY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBQUlVpbnQzMiBtYXgpOwojIDE0MCAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK ZXh0ZXJuIGNoYXIgKgpQTF9zdHJkdXAoY29uc3QgY2hhciAqcyk7CgoKCgoKCgpleHRlcm4gdm9p ZApQTF9zdHJmcmVlKGNoYXIgKnMpOwojIDE2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBSVWludDMyIG1heCk7CiMgMTc2ICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w bHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy Yyk7CiMgMTkxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jYXQoY2hhciAq ZHN0LCBjb25zdCBjaGFyICpzcmMsIFBSVWludDMyIG1heCk7CiMgMjA1ICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o IgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAqZHN0LCBQUlVpbnQzMiBtYXgsIGNvbnN0 IGNoYXIgKnNyYyk7CiMgMjE3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRuClBMX3N0cmNt cChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKIyAyMzEgIi92YXIvdG1wL3BvcnRhZ2Uv bW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4 dGVybiBQUkludG4KUExfc3RybmNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBQUlVp bnQzMiBtYXgpOwojIDI0MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjYXNl Y21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDI1NSAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK ZXh0ZXJuIFBSSW50bgpQTF9zdHJuY2FzZWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpi LCBQUlVpbnQzMiBtYXgpOwojIDI2NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93 b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9z dHJjaHIoY29uc3QgY2hhciAqcywgY2hhciBjKTsKIyAyNzcgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVy biBjaGFyICoKUExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI4OSAiL3Zhci90 bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywg UFJVaW50MzIgbik7CiMgMzAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5y Y2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywgUFJVaW50MzIgbik7CiMgMzE3ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0 ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAq bGlzdCk7CiMgMzI4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnByYnJrKGNv bnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QpOwojIDMzOSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0 ZXJuIGNoYXIgKgpQTF9zdHJucGJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0LCBQ UlVpbnQzMiBuKTsKIyAzNTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnBy YnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwojIDM2MCAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJzdHIoY29uc3QgY2hhciAqYmlnLCBj b25zdCBjaGFyICpsaXR0bGUpOwojIDM3MCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ TF9zdHJyc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyAzODEgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBjaGFyICpiaWcsIGNv bnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzkyICIvdmFyL3RtcC9wb3J0YWdlL21v emlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl cm4gY2hhciAqClBMX3N0cm5yc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxl LCBQUlVpbnQzMiBtYXgpOwojIDQwMiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93 b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9z dHJjYXNlc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyA0MTIgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hhciAqYmln LCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQyMyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuY2FzZXN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJV aW50MzIgbWF4KTsKIyA0MzQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNh c2Vyc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlLCBQUlVpbnQzMiBtYXgp OwojIDQ1NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJ0b2tfcihjaGFyICpz MSwgY29uc3QgY2hhciAqczIsIGNoYXIgKipsYXN0cyk7CgoKCgoKCgp9CiMgNDMgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5oIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIgMQojIDIzICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3lz bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n bnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRz L3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMK IyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv bGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg MiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vz ci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJf bGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hv cGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1 ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUv Yml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEg MwojIDEzNyAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAy IDMKIyAyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ3BwU2hhcmVkQWxsb2NhdG9y LmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ3BwU2hhcmVkQWxsb2NhdG9yCgoK CgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk ZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwoKICAgICAgdHlwZWRlZiBUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IFQqIGNv bnN0X3BvaW50ZXI7CgogICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBj b25zdCBUJiBjb25zdF9yZWZlcmVuY2U7CgoKCiAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkg eyB9CgoKCgoKCiAgICAgfm5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKICAgICAgcG9pbnRl cgogICAgICBhZGRyZXNzKCByZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg cmV0dXJuICZyOwogICAgICAgIH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcygg Y29uc3RfcmVmZXJlbmNlIHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsK ICAgICAgICB9CgogICAgICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKCBzaXplX3R5cGUgbiwgY29u c3Qgdm9pZCogPTAgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0 PCBwb2ludGVyID4obnNNZW1vcnk6OkFsbG9jKHN0YXRpY19jYXN0PCBQUlVpbnQzMiA+KG4qc2l6 ZW9mKFQpKSkpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZSggcG9pbnRl ciBwLCBzaXplX3R5cGUgKQogICAgICAgIHsKICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKHApOwog ICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KCBwb2ludGVyIHAsIGNvbnN0IFQm IHZhbCApCiAgICAgICAgewogICAgICAgICAgbmV3IChwKSBUKHZhbCk7CiAgICAgICAgfQoKICAg ICAgdm9pZAogICAgICBkZXN0cm95KCBwb2ludGVyIHAgKQogICAgICAgIHsKICAgICAgICAgIHAt Pn5UKCk7CiAgICAgICAgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QK ICAgICAgICB7CgoKCiAgICAgICAgICByZXR1cm4gKDIxNDc0ODM2NDdMICogMlVMICsgMSkgLyBz aXplb2YoVCk7CgogICAgICAgIH0KIyAxMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0NwcFNoYXJlZEFsbG9jYXRvci5oIgogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApv cGVyYXRvcj09KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hh cmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDE7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFQ+ClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNv bnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDA7CiAgfQojIDQ2 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDUlQuaCIgMgojIDYyICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNDUlQuaCIKZXh0ZXJuIGNvbnN0IFBSVW5pY2hhciBrSXNvTGF0 aW4xVG9VQ1MyWzI1Nl07CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDUlQu aCIKY2xhc3MgbnNDUlQgewpwdWJsaWM6CiAgZW51bSB7CiAgICBUQUI9J1x0JyAsCiAgICBMRj0n XG4nICwKICAgIFZUQUI9J1x2JyAsCiAgICBGRj0nXGYnICwKICAgIENSPSdccicKICB9OwojIDEz NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ1JULmgiCiAgc3RhdGljIFBSVWludDMy IHN0cmxlbihjb25zdCBjaGFyKiBzKSB7CiAgICByZXR1cm4gUFJVaW50MzIoOjpzdHJsZW4ocykp OwogIH0KCgogIHN0YXRpYyBQUkludDMyIHN0cmNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hh ciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cmNtcChzMSwgczIpKTsKICB9CgogIHN0 YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLAogICAg ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYU1heExlbikgewogICAgcmV0dXJuIFBSSW50 MzIoUExfc3RybmNtcChzMSwgczIsIGFNYXhMZW4pKTsKICB9CgoKICBzdGF0aWMgUFJJbnQzMiBz dHJjYXNlY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMikgewogICAgcmV0dXJuIFBS SW50MzIoUExfc3RyY2FzZWNtcChzMSwgczIpKTsKICB9CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJu Y2FzZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIFBSVWludDMyIGFNYXhMZW4p IHsKICAgIFBSSW50MzIgcmVzdWx0PVBSSW50MzIoUExfc3RybmNhc2VjbXAoczEsIHMyLCBhTWF4 TGVuKSk7CgoKICAgIGlmIChyZXN1bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJl c3VsdDsKICB9CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0 IGNoYXIqIHMyLCBQUkludDMyIGFNYXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0 IHVuc2lnbmVkIGNoYXIqKXMxKVswXSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwog ICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJu Y21wKHMxLHMyLHVuc2lnbmVkKGFNYXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVw KGNvbnN0IGNoYXIqIHN0cikgewogICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3Rh dGljIGNoYXIqIHN0cm5kdXAoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJl dHVybiBQTF9zdHJuZHVwKHN0ciwgbGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciog c3RyKSB7CiAgICBQTF9zdHJmcmVlKHN0cik7CiAgfQojIDIwMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL25zQ1JULmgiCiAgc3RhdGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0 IGNoYXIqIGRlbGltcywgY2hhciogKm5ld1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVu KGNvbnN0IFBSVW5pY2hhciogcyk7CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJV bmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5j bXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAg ICAgICAgICAgICAgIFBSVWludDMyIGFNYXhMZW4pOwoKCgogIHN0YXRpYyBQUlVuaWNoYXIqIHN0 cmR1cChjb25zdCBQUlVuaWNoYXIqIHN0cik7CgoKCiAgc3RhdGljIFBSVW5pY2hhciogc3RybmR1 cChjb25zdCBQUlVuaWNoYXIqIHN0ciwgUFJVaW50MzIgbGVuKTsKCiAgc3RhdGljIHZvaWQgZnJl ZShQUlVuaWNoYXIqIHN0cikgewogICAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFBSVW5pY2hh cj4gc2hhcmVkX2FsbG9jYXRvcjsKICAgICAgICBzaGFyZWRfYWxsb2NhdG9yLmRlYWxsb2NhdGUo c3RyLCAwICk7CiAgfQoKCgogIHN0YXRpYyBQUlVpbnQzMiBIYXNoQ29kZShjb25zdCBjaGFyKiBz dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiByZXN1bHRpbmdTdHJMZW4g PSAwKTsKCgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiByZXN1bHRpbmdTdHJMZW4gPSAw KTsKCgoKCiAgc3RhdGljIFBSVWludDMyIEhhc2hDb2RlQXNVVEY4KGNvbnN0IFBSVW5pY2hhciog c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiogcmVzdWx0aW5n U3RyTGVuID0gMCk7CgoKICBzdGF0aWMgUFJVaW50MzIgQnVmZmVySGFzaENvZGUoY29uc3QgY2hh ciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3RhdGljIFBSVWludDMyIEJ1ZmZlckhhc2hD b2RlKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3RhdGljIFBS SW50NjQgYXRvbGwoY29uc3QgY2hhciAqc3RyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFy IGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBS Qm9vbCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBh Q2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRp YyBQUkJvb2wgSXNBc2NpaShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJv b2wgSXNBc2NpaUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lp RGlnaXQoUFJVbmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVu aWNoYXIgYUNoYXIpOwogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShjb25zdCBjaGFyKiBhU3RyaW5n KTsKfTsKIyA0MyAibnNET01DbGFzc0luZm8uY3BwIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCmNsYXNzIG5zSUNhdGVnb3J5TWFuYWdl ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMjc1YjJjZCwgMHhhZjZkLCAw eDQyOWEsIHsgMHg4MCwgMHhkNywgMHhmMCwgMHhjNSwgMHgxMiwgMHgwMywgMHg0MiwgMHhhYyB9 fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDYXRl Z29yeU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhdGVnb3J5RW50cnkoY29uc3Qg Y2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksIGNoYXIgKipfcmV0dmFsKSA9IDA7 CiMgNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IEFkZENhdGVnb3J5RW50cnkoY29uc3QgY2hhciAqYUNhdGVnb3J5 LCBjb25zdCBjaGFyICphRW50cnksIGNvbnN0IGNoYXIgKmFWYWx1ZSwgUFJCb29sIGFQZXJzaXN0 LCBQUkJvb2wgYVJlcGxhY2UsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgNjIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IERlbGV0ZUNhdGVnb3J5RW50cnkoY29uc3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICph RW50cnksIFBSQm9vbCBhUGVyc2lzdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERl bGV0ZUNhdGVnb3J5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgRW51bWVyYXRlQ2F0ZWdvcnkoY29uc3QgY2hhciAqYUNhdGVnb3J5LCBuc0lTaW1w bGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51 bWVyYXRlQ2F0ZWdvcmllcyhuc0lTaW1wbGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsK IyA0NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKY2xhc3MgbnNJRmlsZTsKCmNsYXNzIG5z SUZhY3Rvcnk7CgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwojIDMxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCmNsYXNzIG5zSUNvbXBvbmVu dFJlZ2lzdHJhciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyNDE3Y2JmZSwg MHg2NWFkLCAweDQ4YTYsIHsgMHhiNCwgMHhiNiwgMHhlYiwgMHg4NCwgMHhkYiwgMHgxNywgMHg0 MywgMHg5MiB9fTsgcmV0dXJuIGlpZDt9CiMgNTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3Rl cihuc0lGaWxlICphU3BlYykgPSAwOwojIDc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvVW5yZWdpc3Rl cihuc0lGaWxlICphU3BlYykgPSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3Rv cnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNo YXIgKmFDb250cmFjdElELCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDEwOSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIgogIHZpcnR1YWwg bnNyZXN1bHQgVW5yZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIG5zSUZhY3Rv cnkgKmFGYWN0b3J5KSA9IDA7CiMgMTM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ Q29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3RvcnlM b2NhdGlvbihjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29u c3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZpbGUgKmFGaWxlLCBjb25zdCBjaGFyICphTG9hZGVy U3RyLCBjb25zdCBjaGFyICphVHlwZSkgPSAwOwojIDE0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdp c3RlckZhY3RvcnlMb2NhdGlvbihjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUZpbGUp ID0gMDsKIyAxNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRSZWdp c3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzQ0lEUmVnaXN0ZXJlZChjb25zdCBuc0NJRCAm IGFDbGFzcywgUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMTczICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0Nv bnRyYWN0SURSZWdpc3RlcmVkKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBQUkJvb2wgKl9yZXR2 YWwpID0gMDsKIyAxODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRS ZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNJRHMobnNJU2ltcGxlRW51 bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNv bnRyYWN0SURzKG5zSVNpbXBsZUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CiMgMjA4ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBDSURUb0NvbnRyYWN0SUQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNoYXIgKipf cmV0dmFsKSA9IDA7CiMgMjE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9u ZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250cmFjdElEVG9DSUQoY29uc3Qg Y2hhciAqYUNvbnRyYWN0SUQsIG5zQ0lEICogKl9yZXR2YWwpID0gMDsKCn07CiMgNDYgIm5zRE9N Q2xhc3NJbmZvLmNwcCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3Vw cG9ydHNQcmltaXRpdmVzLmgiIDEKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkMGQ0YjEzNiwgMHgxZGQxLCAweDExYjIsIHsg MHg5MywgMHg3MSwgMHhmMCwgMHg3MiwgMHg3ZSwgMHhmOCwgMHgyNywgMHhjMCB9fTsgcmV0dXJu IGlpZDt9CgogIGVudW0geyBUWVBFX0lEID0gMVUgfTsKCiAgZW51bSB7IFRZUEVfQ1NUUklORyA9 IDJVIH07CgogIGVudW0geyBUWVBFX1NUUklORyA9IDNVIH07CgogIGVudW0geyBUWVBFX1BSQk9P TCA9IDRVIH07CgogIGVudW0geyBUWVBFX1BSVUlOVDggPSA1VSB9OwoKICBlbnVtIHsgVFlQRV9Q UlVJTlQxNiA9IDZVIH07CgogIGVudW0geyBUWVBFX1BSVUlOVDMyID0gN1UgfTsKCiAgZW51bSB7 IFRZUEVfUFJVSU5UNjQgPSA4VSB9OwoKICBlbnVtIHsgVFlQRV9QUlRJTUUgPSA5VSB9OwoKICBl bnVtIHsgVFlQRV9DSEFSID0gMTBVIH07CgogIGVudW0geyBUWVBFX1BSSU5UMTYgPSAxMVUgfTsK CiAgZW51bSB7IFRZUEVfUFJJTlQzMiA9IDEyVSB9OwoKICBlbnVtIHsgVFlQRV9QUklOVDY0ID0g MTNVIH07CgogIGVudW0geyBUWVBFX0ZMT0FUID0gMTRVIH07CgogIGVudW0geyBUWVBFX0RPVUJM RSA9IDE1VSB9OwoKICBlbnVtIHsgVFlQRV9WT0lEID0gMTZVIH07CgogIGVudW0geyBUWVBFX0lO VEVSRkFDRV9QT0lOVEVSID0gMTdVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJV aW50MTYgKmFUeXBlKSA9IDA7Cgp9OwojIDEzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c0lEIDogcHVibGljIG5z SVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxODI5MGEwLCAweDRhMWMsIDB4MTFk MywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyBy ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShuc0lEICogKmFEYXRhKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKGNvbnN0IG5zSUQgKiBhRGF0YSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAy MzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIK Y2xhc3MgbnNJU3VwcG9ydHNDU3RyaW5nIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGQ2NWZmMjcwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAw LCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGF0YShuc0FDU3RyaW5nICYgYURhdGEpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldERhdGEoY29uc3QgbnNBQ1N0cmluZyAmIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDMyMyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lT dXBwb3J0c1N0cmluZyA6IHB1YmxpYyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhkNzlkYzk3MCwgMHg0YTFjLCAweDExZDMsIHsgMHg5OCwgMHg5MCwgMHgwMCwgMHg2MCwgMHgw OCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldERhdGEobnNBU3RyaW5nICYgYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERh dGEoY29uc3QgbnNBU3RyaW5nICYgYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9T dHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA0MTggIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQ UkJvb2wgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZGRjM2I0 OTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYs IDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRh KFBSQm9vbCAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERhdGEoUFJCb29sIGFE YXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDUxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJp bWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c1BSVWludDggOiBwdWJsaWMgbnNJU3VwcG9ydHNQ cmltaXRpdmUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZGVjMmU0ZTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgs IDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7 fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRhKFBSVWludDggKmFEYXRhKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVWludDggYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgNjAyICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBv cnRzUFJVaW50MTYgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 ZGZhY2IwOTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgs IDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXREYXRhKFBSVWludDE2ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQ UlVpbnQxNiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoq X3JldHZhbCkgPSAwOwoKfTsKIyA2OTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lT dXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUlVpbnQzMiA6IHB1YmxpYyBu c0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlMDFkYzQ3MCwgMHg0YTFjLCAweDEx ZDMsIHsgMHg5OCwgMHg5MCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGEoUFJVaW50MzIgKmFEYXRh KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVWludDMyIGFEYXRhKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDc4 NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpj bGFzcyBuc0lTdXBwb3J0c1BSVWludDY0IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGUxMzU2N2MwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAw LCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGF0YShQUlVpbnQ2NCAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldERhdGEoUFJVaW50NjQgYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9T dHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgODc4ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBvcnRzUFJUaW1l IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUyNTYzNjMwLCAw eDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0 LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUlRp bWUgKmFEYXRhKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVGltZSBhRGF0YSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoK fTsKIyA5NzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2 ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNDaGFyIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZl IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGUyYjA1ZTQwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAw eDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0RGF0YShjaGFyICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0RGF0YShjaGFyIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5n KGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEwNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUkludDE2IDog cHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUzMGQ5NGIwLCAweDRh MWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAw eDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUkludDE2 ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQUkludDE2IGFEYXRhKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9 OwojIDExNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2 ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUkludDMyIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0 aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGUzNmM1MjUwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkw LCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUkludDMyICphRGF0YSkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0RGF0YShQUkludDMyIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEyNDcgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQ UkludDY0IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUzY2Iw ZmYwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2 LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0 YShQUkludDY0ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQUkludDY0 IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDEzMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0 c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNGbG9hdCA6IHB1YmxpYyBuc0lTdXBwb3J0 c1ByaW1pdGl2ZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhYmVhYTM5MCwgMHg0YWMwLCAweDExZDMsIHsgMHhi YSwgMHhlYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGEoZmxvYXQgKmFEYXRhKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREYXRhKGZsb2F0IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE0MzEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9y dHNEb3VibGUgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YjMy NTIzYTAsIDB4NGFjMCwgMHgxMWQzLCB7IDB4YmEsIDB4ZWEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4 OGEsIDB4NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE YXRhKGRvdWJsZSAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERhdGEoZG91Ymxl IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDE1MjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0 c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNWb2lkIDogcHVibGljIG5zSVN1cHBvcnRz UHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQ2NDQ4NGYwLCAweDU2OGQsIDB4MTFkMywgeyAweGJh LCAweGY4LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDVkLCAweGQ3IH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YSh2b2lkICogKmFEYXRhKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREYXRhKHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjE1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBv cnRzSW50ZXJmYWNlUG9pbnRlciA6IHB1YmxpYyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJs aWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7MHg5OTVlYTcyNCwgMHgxZGQxLCAweDExYjIsIHsgMHg5MiwgMHgxMSwgMHhjMiwgMHgx YiwgMHhkZCwgMHgzZSwgMHg3ZSwgMHhkMCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERhdGEobnNJU3VwcG9ydHMgKiAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldERhdGEobnNJU3VwcG9ydHMgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXREYXRhSUlEKG5zSUQgKiAqYURhdGFJSUQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dERhdGFJSUQoY29uc3QgbnNJRCAqIGFEYXRhSUlEKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDQ4ICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lKU0NvbnRleHRT dGFjay5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJSlNDb250 ZXh0U3RhY2suaCIKY2xhc3MgbnNJSlNDb250ZXh0U3RhY2sgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YzY3ZDgyNzAsIDB4MzE4OSwgMHgxMWQzLCB7IDB4OTgsIDB4ODUsIDB4 MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb3VudChQUkludDMyICphQ291bnQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgUGVlayhKU0NvbnRleHQgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBQb3AoSlNDb250ZXh0ICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg UHVzaChKU0NvbnRleHQgKiBjeCkgPSAwOwoKfTsKIyAxMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbm5lY3QvbnNJSlNDb250ZXh0U3RhY2suaCIKY2xhc3MgbnNJVGhyZWFkSlNDb250ZXh0 U3RhY2sgOiBwdWJsaWMgbnNJSlNDb250ZXh0U3RhY2sgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTEzMzlhZTAs IDB4MDVjMSwgMHgxMWQ0LCB7IDB4OGYsIDB4OTIsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4 M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTYWZlSlND b250ZXh0KEpTQ29udGV4dCAqICphU2FmZUpTQ29udGV4dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0U2FmZUpTQ29udGV4dChKU0NvbnRleHQgKiBhU2FmZUpTQ29udGV4dCkgPSAwOwoKfTsK IyA1MCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lTY3JpcHRDb250ZXh0LmgiIDEKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lTY3JpcHRDb250ZXh0LmgiCmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdDsKY2xhc3MgbnNJ U2NyaXB0U2VjdXJpdHlNYW5hZ2VyOwpjbGFzcyBuc0lTY3JpcHRDb250ZXh0T3duZXI7CmNsYXNz IG5zSVByaW5jaXBhbDsKY2xhc3MgbnNJQXRvbTsKCnR5cGVkZWYgdm9pZCAoKm5zU2NyaXB0VGVy bWluYXRpb25GdW5jKShuc0lTdXBwb3J0cyogYVJlZik7CiMgNjYgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgpjbGFzcyBuc0lTY3JpcHRDb250ZXh0IDogcHVi bGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OGY2YmNhN2QsIDB4Y2U0MiwgMHgxMWQxLCB7 MHhiNywgMHgyNCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHhkOCwgMHhjOX0gfTsgcmV0dXJu IGlpZDt9CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgRXZhbHVhdGVTdHJpbmcoY29uc3QgbnNBU3RyaW5nJiBhU2Ny aXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmlu ZyYgYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRl ZmluZWQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBFdmFsdWF0ZVN0cmluZ1dpdGhWYWx1ZShj b25zdCBuc0FTdHJpbmcmIGFTY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICphU2NvcGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lQcmluY2lwYWwgKmFQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICphVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIGFWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCogYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsKIyAxMjMgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZVNj cmlwdChjb25zdCBQUlVuaWNoYXIqIGFUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkludDMyIGFUZXh0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhU2Nv cGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByaW5jaXBhbCogYVByaW5j aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVVSTCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogYVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQqKiBhU2NyaXB0T2JqZWN0KSA9IDA7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEV4ZWN1dGVTY3JpcHQo dm9pZCogYVNjcmlwdE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVNj b3BlT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcqIGFSZXRWYWx1 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsK IyAxNzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgogIHZp cnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50SGFuZGxlcih2b2lkKiBhVGFyZ2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhQm9keSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJCb29sIGFTaGFyZWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQqKiBhSGFuZGxlcikgPSAwOwojIDE5MSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDYWxsRXZlbnRI YW5kbGVyKHZvaWQqIGFUYXJnZXQsIHZvaWQqIGFIYW5kbGVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCB2b2lkKiBhcmd2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUkJvb2wqIGFCb29sUmVzdWx0LCBQUkJvb2wgYVJldmVyc2VSZXR1cm5SZXN1 bHQpID0gMDsKIyAyMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4 dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQmluZENvbXBpbGVkRXZlbnRIYW5kbGVyKHZvaWQqIGFU YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUhhbmRsZXIp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21waWxlRnVuY3Rpb24odm9pZCogYVRhcmdldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NTdHJpbmcmIGFOYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFBcmdDb3VudCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogYUFyZ0FycmF5LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYUJvZHksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogYVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UlVpbnQzMiBhTGluZU5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2hh cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhRnVuY3Rpb25PYmplY3Qp ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0TGFuZ3VhZ2VWZXJzaW9u KGNvbnN0IGNoYXIqIGFWZXJzaW9uKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEds b2JhbE9iamVjdChuc0lTY3JpcHRHbG9iYWxPYmplY3QqKiBhR2xvYmFsT2JqZWN0KSA9IDA7CgoK CgoKICB2aXJ0dWFsIHZvaWQqIEdldE5hdGl2ZUNvbnRleHQoKSA9IDA7CiMgMjUzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IEluaXRDb250ZXh0KG5zSVNjcmlwdEdsb2JhbE9iamVjdCAqYUdsb2JhbE9iamVjdCkgPSAwOwoj IDI2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBJc0NvbnRleHRJbml0aWFsaXplZCgpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHQygpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlN YW5hZ2VyKG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcioqIGFJbnN0YW5jZVB0cikgPSAwOwojIDI5 MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBTY3JpcHRFdmFsdWF0ZWQoUFJCb29sIGFUZXJtaW5hdGVkKSA9IDA7CgoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3duZXIobnNJU2NyaXB0Q29udGV4dE93bmVyKiBvd25l cikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyKG5zSVNjcmlwdENvbnRl eHRPd25lcioqIG93bmVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGVybWlu YXRpb25GdW5jdGlvbihuc1NjcmlwdFRlcm1pbmF0aW9uRnVuYyBhRnVuYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFSZWYpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgKmFFbmFibGVkKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgYUVuYWJsZWQsIFBSQm9v bCBhRmlyZVRpbWVvdXRzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3Np bmdTY3JpcHRUYWcoUFJCb29sICogYVJlc3VsdCkgPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQ cm9jZXNzaW5nU2NyaXB0VGFnKFBSQm9vbCBhUmVzdWx0KSA9MDsKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRHQ09uRGVzdHJ1Y3Rpb24oUFJCb29sIGFHQ09uRGVzdHJ1Y3Rpb24pID0gMDsKfTsK IyA1MSAibnNET01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zUmVhZGFibGVVdGlscy5oIiAxCiMgMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc0FTdHJpbmdHZW5lcmF0b3IuaCIgMQojIDM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zQVN0cmluZ0dlbmVyYXRvci5oIgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJp bmc7CgpjbGFzcyBuc0FTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1 YWwgfm5zQVN0cmluZ0dlbmVyYXRvcigpIHsgfQoKICAgICAgdmlydHVhbCBQUlVuaWNoYXIqIG9w ZXJhdG9yKCkoIFBSVW5pY2hhciogYURlc3RCdWZmZXIgKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1 YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1h eExlbmd0aCgpIGNvbnN0ID0gMDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbigg Y29uc3QgbnNBU3RyaW5nJiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNBQ1N0cmluZ0dlbmVy YXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNBQ1N0cmluZ0dlbmVyYXRvcigp IHsgfQoKICAgICAgdmlydHVhbCBjaGFyKiBvcGVyYXRvcigpKCBjaGFyKiBhRGVzdEJ1ZmZlciAp IGNvbnN0ID0gMDsKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCA9IDA7CiAg ICAgIHZpcnR1YWwgUFJVaW50MzIgTWF4TGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFs IFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBuc0FDU3RyaW5nJiApIGNvbnN0ID0gMDsKICB9 OwojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zUmVhZGFibGVVdGlscy5oIiAy CgoKY2xhc3MgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nOwpjbGFzcyBuc0NTdHJpbmc7Cgogc2l6 ZV90IERpc3RhbmNlKCBjb25zdCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgbnNB U3RyaW5nOjpjb25zdF9pdGVyYXRvciYgKTsKIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNBQ1N0 cmluZzo6Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYg KTsKCgogdm9pZCBDb3B5VUNTMnRvQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSwgbnNB Q1N0cmluZyYgYURlc3QgKTsKIHZvaWQgQ29weUFTQ0lJdG9VQ1MyKCBjb25zdCBuc0FDU3RyaW5n JiBhU291cmNlLCBuc0FTdHJpbmcmIGFEZXN0ICk7CiMgNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBjaGFyKiBUb05ld0NTdHJpbmcoIGNvbnN0IG5z QVN0cmluZyYgYVNvdXJjZSApOwojIDc1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25z UmVhZGFibGVVdGlscy5oIgogY2hhciogVG9OZXdDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBh U291cmNlICk7CiMgODggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0 aWxzLmgiCiBjaGFyKiBUb05ld1VURjhTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSAp OwojIDEwMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIK IFBSVW5pY2hhciogVG9OZXdVbmljb2RlKCBjb25zdCBuc0FTdHJpbmcmIGFTb3VyY2UgKTsKIyAx MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBQUlVu aWNoYXIqIFRvTmV3VW5pY29kZSggY29uc3QgbnNBQ1N0cmluZyYgYVNvdXJjZSApOwojIDEyOCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIKIFBSVW5pY2hh ciogQ29weVVuaWNvZGVUbyggY29uc3QgbnNBU3RyaW5nJiBhU291cmNlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhU3JjT2Zmc2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUlVuaWNoYXIqIGFEZXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBhTGVuZ3RoICk7CiMgMTQ1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zUmVhZGFibGVVdGlscy5oIgogdm9pZCBDb3B5VW5pY29kZVRvKCBjb25zdCBu c0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU3JjU3RhcnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTcmNFbmQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYURlc3QgKTsKIyAxNTkgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiB2b2lkIEFwcGVuZFVuaWNvZGVU byggY29uc3QgbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYgYVNyY1N0YXJ0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTcmNF bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhRGVzdCApOwoKCgoK CgogUFJCb29sIElzQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwoKCgoKCgogUFJC b29sIElzQVNDSUkoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsKCgoKCgoKIHZvaWQgVG9V cHBlckNhc2UoIG5zQUNTdHJpbmcmICk7Cgogdm9pZCBUb0xvd2VyQ2FzZSggbnNBQ1N0cmluZyYg KTsKCiB2b2lkIFRvVXBwZXJDYXNlKCBuc0FTaW5nbGVGcmFnbWVudENTdHJpbmcmICk7Cgogdm9p ZCBUb0xvd2VyQ2FzZSggbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nJiApOwoKIHZvaWQgVG9VcHBl ckNhc2UoIG5zQ1N0cmluZyYgKTsKCiB2b2lkIFRvTG93ZXJDYXNlKCBuc0NTdHJpbmcmICk7CgoK Cgogdm9pZCBUb1VwcGVyQ2FzZSggY29uc3QgbnNBQ1N0cmluZyYgYVNvdXJjZSwgbnNBQ1N0cmlu ZyYgYURlc3QgKTsKCiB2b2lkIFRvTG93ZXJDYXNlKCBjb25zdCBuc0FDU3RyaW5nJiBhU291cmNl LCBuc0FDU3RyaW5nJiBhRGVzdCApOwojIDIxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc1JlYWRhYmxlVXRpbHMuaCIKIFBSQm9vbCBGaW5kSW5SZWFkYWJsZSggY29uc3QgbnNBU3Ry aW5nJiBhUGF0dGVybiwgbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQVN0cmluZzo6Y29u c3RfaXRlcmF0b3ImLCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5n Q29tcGFyYXRvcigpICk7CiBQUkJvb2wgRmluZEluUmVhZGFibGUoIGNvbnN0IG5zQUNTdHJpbmcm IGFQYXR0ZXJuLCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQUNTdHJpbmc6OmNvbnN0 X2l0ZXJhdG9yJiwgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRDU3RyaW5n Q29tcGFyYXRvcigpICk7CgoKCmlubGluZSBQUkJvb2wgRmluZEluUmVhZGFibGUoIGNvbnN0IG5z QVN0cmluZyYgYVBhdHRlcm4sIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSwgY29uc3QgbnNTdHJp bmdDb21wYXJhdG9yJiBjb21wYXJlID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigpICkKewog IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3Igc3RhcnQsIGVuZDsKICBhU291cmNlLkJlZ2luUmVh ZGluZyhzdGFydCk7CiAgYVNvdXJjZS5FbmRSZWFkaW5nKGVuZCk7CiAgcmV0dXJuIEZpbmRJblJl YWRhYmxlKGFQYXR0ZXJuLCBzdGFydCwgZW5kLCBjb21wYXJlKTsKfQoKaW5saW5lIFBSQm9vbCBG aW5kSW5SZWFkYWJsZSggY29uc3QgbnNBQ1N0cmluZyYgYVBhdHRlcm4sIGNvbnN0IG5zQUNTdHJp bmcmIGFTb3VyY2UsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImIGNvbXBhcmUgPSBuc0RlZmF1 bHRDU3RyaW5nQ29tcGFyYXRvcigpICkKewogIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIHN0 YXJ0LCBlbmQ7CiAgYVNvdXJjZS5CZWdpblJlYWRpbmcoc3RhcnQpOwogIGFTb3VyY2UuRW5kUmVh ZGluZyhlbmQpOwogIHJldHVybiBGaW5kSW5SZWFkYWJsZShhUGF0dGVybiwgc3RhcnQsIGVuZCwg Y29tcGFyZSk7Cn0KCgogUFJCb29sIENhc2VJbnNlbnNpdGl2ZUZpbmRJblJlYWRhYmxlKCBjb25z dCBuc0FDU3RyaW5nJiBhUGF0dGVybiwgbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImLCBuc0FD U3RyaW5nOjpjb25zdF9pdGVyYXRvciYgKTsKIyAyNDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBQUkJvb2wgUkZpbmRJblJlYWRhYmxlKCBjb25zdCBu c0FTdHJpbmcmIGFQYXR0ZXJuLCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiwgbnNBU3RyaW5n Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRT dHJpbmdDb21wYXJhdG9yKCkgKTsKIFBSQm9vbCBSRmluZEluUmVhZGFibGUoIGNvbnN0IG5zQUNT dHJpbmcmIGFQYXR0ZXJuLCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQUNTdHJpbmc6 OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRD U3RyaW5nQ29tcGFyYXRvcigpICk7CiMgMjU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zUmVhZGFibGVVdGlscy5oIgogUFJCb29sIEZpbmRDaGFySW5SZWFkYWJsZSggUFJVbmljaGFy IGFDaGFyLCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNoU3RhcnQsIGNvbnN0IG5z QVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTZWFyY2hFbmQgKTsKIFBSQm9vbCBGaW5kQ2hhcklu UmVhZGFibGUoIGNoYXIgYUNoYXIsIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNo U3RhcnQsIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNoRW5kICk7CgoK CgogUFJVaW50MzIgQ291bnRDaGFySW5SZWFkYWJsZSggY29uc3QgbnNBU3RyaW5nJiBhU3RyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVbmljaGFyIGFDaGFyICk7CiBQ UlVpbnQzMiBDb3VudENoYXJJblJlYWRhYmxlKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBhQ2hhciApOwoKIFBSVWludDMy IEhhc2hTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0ciApOwogUFJVaW50MzIgSGFzaFN0cmlu ZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0ciApOwojIDI3NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIKY2xhc3MgbnNTdWJzdGl0dXRlU3RyaW5nCiAgICA6 IHB1YmxpYyBuc0FTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zU3Vic3Rp dHV0ZVN0cmluZyggY29uc3QgbnNBU3RyaW5nJiBhVGV4dCwgY29uc3QgbnNBU3RyaW5nJiBhUGF0 dGVybiwgY29uc3QgbnNBU3RyaW5nJiBhUmVwbGFjZW1lbnQgKQogICAgICAgICAgOiBtVGV4dChh VGV4dCksCiAgICAgICAgICAgIG1QYXR0ZXJuKGFQYXR0ZXJuKSwKICAgICAgICAgICAgbVJlcGxh Y2VtZW50KGFSZXBsYWNlbWVudCksCiAgICAgICAgICAgIG1OdW1iZXJPZk1hdGNoZXMoLTEpCiAg ICAgICAgewoKICAgICAgICB9CgogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogb3BlcmF0b3IoKSgg UFJVbmljaGFyKiBhRGVzdEJ1ZmZlciApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIExl bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1heExlbmd0aCgpIGNvbnN0Owog ICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBuc0FTdHJpbmcmICkgY29u c3Q7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBDb3VudE1hdGNoZXMoKSBjb25zdDsKCiAgICBw cml2YXRlOgogICAgICBjb25zdCBuc0FTdHJpbmcmIG1UZXh0OwogICAgICBjb25zdCBuc0FTdHJp bmcmIG1QYXR0ZXJuOwogICAgICBjb25zdCBuc0FTdHJpbmcmIG1SZXBsYWNlbWVudDsKICAgICAg ICAgICAgICAgICAgICBQUkludDMyIG1OdW1iZXJPZk1hdGNoZXM7CiAgfTsKCmNsYXNzIG5zU3Vi c3RpdHV0ZUNTdHJpbmcKICAgIDogcHVibGljIG5zQUNTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBw dWJsaWM6CiAgICAgIG5zU3Vic3RpdHV0ZUNTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFUZXh0 LCBjb25zdCBuc0FDU3RyaW5nJiBhUGF0dGVybiwgY29uc3QgbnNBQ1N0cmluZyYgYVJlcGxhY2Vt ZW50ICkKICAgICAgICAgIDogbVRleHQoYVRleHQpLAogICAgICAgICAgICBtUGF0dGVybihhUGF0 dGVybiksCiAgICAgICAgICAgIG1SZXBsYWNlbWVudChhUmVwbGFjZW1lbnQpLAogICAgICAgICAg ICBtTnVtYmVyT2ZNYXRjaGVzKC0xKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgdmlydHVh bCBjaGFyKiBvcGVyYXRvcigpKCBjaGFyKiBhRGVzdEJ1ZmZlciApIGNvbnN0OwogICAgICB2aXJ0 dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1heExl bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBu c0FDU3RyaW5nJiApIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgQ291bnRNYXRjaGVz KCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgbnNBQ1N0cmluZyYgbVRleHQ7CiAg ICAgIGNvbnN0IG5zQUNTdHJpbmcmIG1QYXR0ZXJuOwogICAgICBjb25zdCBuc0FDU3RyaW5nJiBt UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBtTnVtYmVyT2ZNYXRjaGVz OwogIH07CiMgNTQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS94cHRjYWxsLmgiIDEKIyA4MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L3hwdGNhbGwuaCIKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50CnsKCgogICAgdW5pb24KICAgIHsK ICAgICAgICBQUkludDggaTg7CiAgICAgICAgUFJJbnQxNiBpMTY7CiAgICAgICAgUFJJbnQzMiBp MzI7CiAgICAgICAgUFJJbnQ2NCBpNjQ7CiAgICAgICAgUFJVaW50OCB1ODsKICAgICAgICBQUlVp bnQxNiB1MTY7CiAgICAgICAgUFJVaW50MzIgdTMyOwogICAgICAgIFBSVWludDY0IHU2NDsKICAg ICAgICBmbG9hdCBmOwogICAgICAgIGRvdWJsZSBkOwogICAgICAgIFBSQm9vbCBiOwogICAgICAg IGNoYXIgYzsKICAgICAgICBQUlVuaWNoYXIgd2M7CiAgICAgICAgdm9pZCogcDsKICAgIH0gdmFs Owp9OwoKc3RydWN0IG5zWFBUQ1ZhcmlhbnQgOiBwdWJsaWMgbnNYUFRDTWluaVZhcmlhbnQKewoK CgoKICAgIHZvaWQqIHB0cjsKICAgIG5zWFBUVHlwZSB0eXBlOwogICAgUFJVaW50OCBmbGFnczsK CiAgICBlbnVtCiAgICB7CgogICAgICAgIFBUUl9JU19EQVRBID0gMHgxLAogICAgICAgIFZBTF9J U19BTExPQ0QgPSAweDIsCiAgICAgICAgVkFMX0lTX0lGQUNFID0gMHg0LAogICAgICAgIFZBTF9J U19BUlJBWSA9IDB4OCwKICAgICAgICBWQUxfSVNfRE9NU1RSID0gMHgxMCwKICAgICAgICBWQUxf SVNfVVRGOFNUUiA9IDB4MjAsCiAgICAgICAgVkFMX0lTX0NTVFIgPSAweDQwCiAgICB9OwoKICAg IHZvaWQgQ2xlYXJGbGFncygpIHtmbGFncyA9IDA7fQogICAgdm9pZCBTZXRQdHJJc0RhdGEoKSB7 ZmxhZ3MgfD0gUFRSX0lTX0RBVEE7fQogICAgdm9pZCBTZXRWYWxJc0FsbG9jYXRlZCgpIHtmbGFn cyB8PSBWQUxfSVNfQUxMT0NEO30KICAgIHZvaWQgU2V0VmFsSXNJbnRlcmZhY2UoKSB7ZmxhZ3Mg fD0gVkFMX0lTX0lGQUNFO30KICAgIHZvaWQgU2V0VmFsSXNBcnJheSgpIHtmbGFncyB8PSBWQUxf SVNfQVJSQVk7fQogICAgdm9pZCBTZXRWYWxJc0RPTVN0cmluZygpIHtmbGFncyB8PSBWQUxfSVNf RE9NU1RSO30KICAgIHZvaWQgU2V0VmFsSXNVVEY4U3RyaW5nKCkge2ZsYWdzIHw9IFZBTF9JU19V VEY4U1RSO30KICAgIHZvaWQgU2V0VmFsSXNDU3RyaW5nKCkge2ZsYWdzIHw9IFZBTF9JU19DU1RS O30KCiAgICBQUkJvb2wgSXNQdHJEYXRhKCkgY29uc3Qge3JldHVybiAwICE9IChmbGFncyAmIFBU Ul9JU19EQVRBKTt9CiAgICBQUkJvb2wgSXNWYWxBbGxvY2F0ZWQoKSBjb25zdCB7cmV0dXJuIDAg IT0gKGZsYWdzICYgVkFMX0lTX0FMTE9DRCk7fQogICAgUFJCb29sIElzVmFsSW50ZXJmYWNlKCkg Y29uc3Qge3JldHVybiAwICE9IChmbGFncyAmIFZBTF9JU19JRkFDRSk7fQogICAgUFJCb29sIElz VmFsQXJyYXkoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFMX0lTX0FSUkFZKTt9CiAg ICBQUkJvb2wgSXNWYWxET01TdHJpbmcoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFM X0lTX0RPTVNUUik7fQogICAgUFJCb29sIElzVmFsVVRGOFN0cmluZygpIGNvbnN0IHtyZXR1cm4g MCAhPSAoZmxhZ3MgJiBWQUxfSVNfVVRGOFNUUik7fQogICAgUFJCb29sIElzVmFsQ1N0cmluZygp IGNvbnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxfSVNfQ1NUUik7fQoKICAgIHZvaWQgSW5p dChjb25zdCBuc1hQVENNaW5pVmFyaWFudCYgbXYsIGNvbnN0IG5zWFBUVHlwZSYgdCwgUFJVaW50 OCBmKQogICAgewogICAgICAgIHR5cGUgPSB0OwogICAgICAgIGZsYWdzID0gZjsKCiAgICAgICAg aWYoZiAmIFBUUl9JU19EQVRBKQogICAgICAgIHsKICAgICAgICAgICAgcHRyID0gbXYudmFsLnA7 CiAgICAgICAgICAgIHZhbC5wID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgcHRyID0gMDsKICAgICAgICAgICAgc3dpdGNoKHQuVGFnUGFydCgpKSB7CiAg ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTg6IHZhbC5pOCA9IG12LnZhbC5pODsgYnJl YWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTE2OiB2YWwuaTE2ID0gbXYudmFs LmkxNjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTMyOiB2YWwuaTMy ID0gbXYudmFsLmkzMjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTY0 OiB2YWwuaTY0ID0gbXYudmFsLmk2NDsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5 cGU6OlRfVTg6IHZhbC51OCA9IG12LnZhbC51ODsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBu c1hQVFR5cGU6OlRfVTE2OiB2YWwudTE2ID0gbXYudmFsLnUxNjsgYnJlYWs7CiAgICAgICAgICAg ICAgY2FzZSBuc1hQVFR5cGU6OlRfVTMyOiB2YWwudTMyID0gbXYudmFsLnUzMjsgYnJlYWs7CiAg ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfVTY0OiB2YWwudTY0ID0gbXYudmFsLnU2NDsg YnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRkxPQVQ6IHZhbC5mID0gbXYu dmFsLmY7IGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0RPVUJMRTogdmFs LmQgPSBtdi52YWwuZDsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfQk9P TDogdmFsLmIgPSBtdi52YWwuYjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6 OlRfQ0hBUjogdmFsLmMgPSBtdi52YWwuYzsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQ VFR5cGU6OlRfV0NIQVI6IHZhbC53YyA9IG12LnZhbC53YzsgYnJlYWs7CiAgICAgICAgICAgICAg Y2FzZSBuc1hQVFR5cGU6OlRfVk9JRDoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9J SUQ6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRE9NU1RSSU5HOgogICAgICAgICAg ICAgIGNhc2UgbnNYUFRUeXBlOjpUX0NIQVJfU1RSOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRU eXBlOjpUX1dDSEFSX1NUUjoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JTlRFUkZB Q0U6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSU5URVJGQUNFX0lTOgogICAgICAg ICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0FSUkFZOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRU eXBlOjpUX1BTVFJJTkdfU0laRV9JUzoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9Q V1NUUklOR19TSVpFX0lTOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1VURjhTVFJJ Tkc6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfQ1NUUklORzoKICAgICAgICAgICAg ICBkZWZhdWx0OiB2YWwucCA9IG12LnZhbC5wOyBicmVhazsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgIH0KfTsKCgoKY2xhc3MgbnNYUFRDU3R1YkJhc2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMK ewpwdWJsaWM6CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBu c0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7CgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL3hwdGNzdHVic2RlY2wuaW5jIiAxCiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS94cHRjc3R1YnNkZWNsLmluYyIKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjMoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjUoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjcoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjkoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjEwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMSgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMTIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzKCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxNCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTUoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjE2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNygpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMTgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIyMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjIyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMygpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMjQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjI1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIyNigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjcoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjI4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMzAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjMxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIzMigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMzMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjM0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIzNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MzYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjM3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIz OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMzkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQw KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDIo KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0NCgp OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQ2KCk7 CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDgoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQ5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1MCgpOwog dmlydHVhbCBuc3Jlc3VsdCBTdHViNTEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjUyKCk7CiB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWI1MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNTQoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjU1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1NigpOwogdmly dHVhbCBuc3Jlc3VsdCBTdHViNTcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjU4KCk7CiB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWI1OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNjAoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjYxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI2MigpOwogdmlydHVh bCBuc3Jlc3VsdCBTdHViNjMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjY0KCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWI2NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNjYoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjY3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI2OCgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViNjkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjcwKCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWI3MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNzIoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjczKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI3NCgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViNzUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjc2KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWI3NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNzgoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1Yjc5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4MCgpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViODEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjgyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWI4MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViODQoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1Yjg1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4NigpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViODcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjg4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWI4OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjkxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5MigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi OTMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjk0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5 NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjk3 KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTko KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAx KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEw MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx MDUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwNigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTA3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjEwOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIxMTEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMigpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMTEzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMTQoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjExNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTE2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIxMTcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExOCgpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMTE5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjAoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjEyMSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTIyKCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIxMjMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEyNCgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMTI1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjYoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjEyNygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTI4KCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxMjkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzMCgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMTMxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzIoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjEzMygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM0KCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIxMzUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzNigpOwogdmlydHVh bCBuc3Jlc3VsdCBTdHViMTM3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzgoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjEzOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQwKCk7CiB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIxNDEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MigpOwogdmly dHVhbCBuc3Jlc3VsdCBTdHViMTQzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDQoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjE0NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQ2KCk7CiB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0OCgpOwog dmlydHVhbCBuc3Jlc3VsdCBTdHViMTQ5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTAoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTUyKCk7 CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1NCgp OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTYo KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU4 KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2 MCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx NjIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTY0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNjUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjE2NigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIxNjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMTcwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzEoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjE3MigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTczKCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIxNzQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3NSgpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMTc2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzcoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjE3OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTc5KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIxODAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE4MSgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMTgyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODMoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjE4NCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg1KCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxODYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE4NygpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMTg4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODkoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjE5MCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkxKCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIxOTIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5MygpOwogdmlydHVh bCBuc3Jlc3VsdCBTdHViMTk0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxOTUoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjE5NigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk3KCk7CiB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIxOTgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5OSgpOwogdmly dHVhbCBuc3Jlc3VsdCBTdHViMjAwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDEoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjIwMigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjAzKCk7CiB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwNSgpOwog dmlydHVhbCBuc3Jlc3VsdCBTdHViMjA2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDcoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwOCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjA5KCk7 CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIxMSgp OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTMo KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIxNCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE1 KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIx NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIy MTkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MjIxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMjIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjIyMygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjI0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIyMjUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNigpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMjI3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjIyOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjMwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIyMzEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMigpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMjMzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzQoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjIzNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjM2KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIyMzcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzOCgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMjM5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDAoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjI0MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQyKCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIyNDMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjI0NCgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMjQ1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDYoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjI0NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ4KCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIyNDkoKTsKCgogdmlydHVhbCBuc3Jlc3VsdCBTZW50aW5lbDAoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU2VudGluZWwxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMigp OwogdmlydHVhbCBuc3Jlc3VsdCBTZW50aW5lbDMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU2VudGlu ZWw0KCk7CiMgMjAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0Y2FsbC5oIiAyCgoK CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlSW5mbyhuc0lJbnRlcmZhY2VJbmZv KiogaW5mbykgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IENhbGxNZXRob2QoUFJVaW50MTYg bWV0aG9kSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNYUFRNZXRob2RJ bmZvKiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zWFBUQ01pbmlWYXJpYW50KiBw YXJhbXMpID0gMDsKfTsKCgpleHRlcm4gIkMiIHsKCm5zcmVzdWx0ClhQVENfSW52b2tlQnlJbmRl eChuc0lTdXBwb3J0cyogdGhhdCwgUFJVaW50MzIgbWV0aG9kSW5kZXgsCiAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBwYXJhbUNvdW50LCBuc1hQVENWYXJpYW50KiBwYXJhbXMpOwoKCmV4dGVy biB2b2lkIHhwdGNfZHVtbXkoKTsKZXh0ZXJuIHZvaWQgeHB0Y19kdW1teTIoKTsKCn0KIyA1NSAi bnNET01DbGFzc0luZm8uY3BwIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pz bnVtLmgiIDEKIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzbnVtLmgiCmV4dGVybiAi QyIgewojIDY3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNudW0uaCIKdHlwZWRlZiB1bmlv biB7CiAgICBqc2RvdWJsZSB2YWx1ZTsKICAgIHN0cnVjdCB7CgogICAgICAgIHVpbnQzMiBsc3c7 CiAgICAgICAgdWludDMyIG1zdzsKCgoKCiAgICB9IHBhcnRzOwp9IGpzX2llZWVfZG91YmxlX3No YXBlX3R5cGU7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNudW0uaCIKZXh0ZXJu IEpTQm9vbApqc19Jbml0UnVudGltZU51bWJlclN0YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IHZvaWQKanNfRmluaXNoUnVudGltZU51bWJlclN0YXRlKEpTQ29udGV4dCAqY3gpOwoKCmV4dGVy biBKU09iamVjdCAqCmpzX0luaXROdW1iZXJDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKCgoKCmV4dGVybiBjb25zdCBjaGFyIGpzX0luZmluaXR5X3N0cltdOwpleHRlcm4gY29u c3QgY2hhciBqc19OYU5fc3RyW107CmV4dGVybiBjb25zdCBjaGFyIGpzX2lzTmFOX3N0cltdOwpl eHRlcm4gY29uc3QgY2hhciBqc19pc0Zpbml0ZV9zdHJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIganNf cGFyc2VGbG9hdF9zdHJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIganNfcGFyc2VJbnRfc3RyW107CgoK ZXh0ZXJuIGpzZG91YmxlICoKanNfTmV3RG91YmxlKEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQp OwoKZXh0ZXJuIHZvaWQKanNfRmluYWxpemVEb3VibGUoSlNDb250ZXh0ICpjeCwganNkb3VibGUg KmRwKTsKCmV4dGVybiBKU0Jvb2wKanNfTmV3RG91YmxlVmFsdWUoSlNDb250ZXh0ICpjeCwganNk b3VibGUgZCwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApqc19OZXdOdW1iZXJWYWx1ZShK U0NvbnRleHQgKmN4LCBqc2RvdWJsZSBkLCBqc3ZhbCAqcnZhbCk7CgoKZXh0ZXJuIEpTT2JqZWN0 ICoKanNfTnVtYmVyVG9PYmplY3QoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCk7CgoKZXh0ZXJu IEpTU3RyaW5nICoKanNfTnVtYmVyVG9TdHJpbmcoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCk7 CgoKCgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvTnVtYmVyKEpTQ29udGV4dCAqY3gsIGpzdmFs IHYsIGpzZG91YmxlICpkcCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvRUNNQUludDMy KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIGludDMyICppcCk7CgpleHRlcm4gSlNCb29sCmpzX0Rv dWJsZVRvRUNNQUludDMyKEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQsIGludDMyICppcCk7CgoK CgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvRUNNQVVpbnQzMihKU0NvbnRleHQgKmN4LCBqc3Zh bCB2LCB1aW50MzIgKmlwKTsKCmV4dGVybiBKU0Jvb2wKanNfRG91YmxlVG9FQ01BVWludDMyKEpT Q29udGV4dCAqY3gsIGpzZG91YmxlIGQsIHVpbnQzMiAqaXApOwoKCgoKCgpleHRlcm4gSlNCb29s CmpzX1ZhbHVlVG9JbnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBpbnQzMiAqaXApOwoKCgoK CmV4dGVybiBKU0Jvb2wKanNfVmFsdWVUb1VpbnQxNihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCB1 aW50MTYgKmlwKTsKCgoKCgpleHRlcm4ganNkb3VibGUKanNfRG91YmxlVG9JbnRlZ2VyKGpzZG91 YmxlIGQpOwojIDI0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzbnVtLmgiCmV4dGVybiBK U0Jvb2wKanNfc3RydG9kKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcywgY29uc3QganNj aGFyICoqZXAsIGpzZG91YmxlICpkcCk7CiMgMjU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv anNudW0uaCIKZXh0ZXJuIEpTQm9vbApqc19zdHJ0b2ludGVnZXIoSlNDb250ZXh0ICpjeCwgY29u c3QganNjaGFyICpzLCBjb25zdCBqc2NoYXIgKiplcCwganNpbnQgcmFkaXgsIGpzZG91YmxlICpk cCk7Cgp9CiMgNTkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9qcy9qc2RiZ2FwaS5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2Ri Z2FwaS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAxCiMgNDAg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgojIDEgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2pzL2pzcHJ2dGQuaCIgMQojIDU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNw cnZ0ZC5oIgp0eXBlZGVmIHVpbnQ4IGpzYnl0ZWNvZGU7CnR5cGVkZWYgdWludDgganNzcmNub3Rl Owp0eXBlZGVmIHVpbnQzMiBqc2F0b21pZDsKCgp0eXBlZGVmIHN0cnVjdCBKU0FyZ3VtZW50Rm9y bWF0TWFwIEpTQXJndW1lbnRGb3JtYXRNYXA7CnR5cGVkZWYgc3RydWN0IEpTQ29kZUdlbmVyYXRv ciBKU0NvZGVHZW5lcmF0b3I7CnR5cGVkZWYgc3RydWN0IEpTRGVwZW5kZW50U3RyaW5nIEpTRGVw ZW5kZW50U3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBKU0dDTG9ja0hhc2hFbnRyeSBKU0dDTG9ja0hh c2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgSlNHQ1Jvb3RIYXNoRW50cnkgSlNHQ1Jvb3RIYXNoRW50 cnk7CnR5cGVkZWYgc3RydWN0IEpTR0NUaGluZyBKU0dDVGhpbmc7CnR5cGVkZWYgc3RydWN0IEpT UGFyc2VOb2RlIEpTUGFyc2VOb2RlOwp0eXBlZGVmIHN0cnVjdCBKU1NoYXJwT2JqZWN0TWFwIEpT U2hhcnBPYmplY3RNYXA7CnR5cGVkZWYgc3RydWN0IEpTVG9rZW4gSlNUb2tlbjsKdHlwZWRlZiBz dHJ1Y3QgSlNUb2tlblBvcyBKU1Rva2VuUG9zOwp0eXBlZGVmIHN0cnVjdCBKU1Rva2VuUHRyIEpT VG9rZW5QdHI7CnR5cGVkZWYgc3RydWN0IEpTVG9rZW5TdHJlYW0gSlNUb2tlblN0cmVhbTsKdHlw ZWRlZiBzdHJ1Y3QgSlNUcmVlQ29udGV4dCBKU1RyZWVDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBK U1RyeU5vdGUgSlNUcnlOb3RlOwoKCnR5cGVkZWYgc3RydWN0IEpTQXRvbSBKU0F0b207CnR5cGVk ZWYgc3RydWN0IEpTQXRvbUxpc3QgSlNBdG9tTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgSlNBdG9tTGlz dEVsZW1lbnQgSlNBdG9tTGlzdEVsZW1lbnQ7CnR5cGVkZWYgc3RydWN0IEpTQXRvbU1hcCBKU0F0 b21NYXA7CnR5cGVkZWYgc3RydWN0IEpTQXRvbVN0YXRlIEpTQXRvbVN0YXRlOwp0eXBlZGVmIHN0 cnVjdCBKU0NvZGVTcGVjIEpTQ29kZVNwZWM7CnR5cGVkZWYgc3RydWN0IEpTUHJpbnRlciBKU1By aW50ZXI7CnR5cGVkZWYgc3RydWN0IEpTUmVnRXhwIEpTUmVnRXhwOwp0eXBlZGVmIHN0cnVjdCBK U1JlZ0V4cFN0YXRpY3MgSlNSZWdFeHBTdGF0aWNzOwp0eXBlZGVmIHN0cnVjdCBKU1Njb3BlIEpT U2NvcGU7CnR5cGVkZWYgc3RydWN0IEpTU2NvcGVPcHMgSlNTY29wZU9wczsKdHlwZWRlZiBzdHJ1 Y3QgSlNTY29wZVByb3BlcnR5IEpTU2NvcGVQcm9wZXJ0eTsKdHlwZWRlZiBzdHJ1Y3QgSlNTdGFj a0ZyYW1lIEpTU3RhY2tGcmFtZTsKdHlwZWRlZiBzdHJ1Y3QgSlNTdGFja0hlYWRlciBKU1N0YWNr SGVhZGVyOwp0eXBlZGVmIHN0cnVjdCBKU1N1YlN0cmluZyBKU1N1YlN0cmluZzsKCgp0eXBlZGVm IGVudW0gSlNUcmFwU3RhdHVzIHsKICAgIEpTVFJBUF9FUlJPUiwKICAgIEpTVFJBUF9DT05USU5V RSwKICAgIEpTVFJBUF9SRVRVUk4sCiAgICBKU1RSQVBfVEhST1csCiAgICBKU1RSQVBfTElNSVQK fSBKU1RyYXBTdGF0dXM7Cgp0eXBlZGVmIEpTVHJhcFN0YXR1cwooKiBKU1RyYXBIYW5kbGVyKShK U0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpydmFsLCB2b2lkICpjbG9zdXJlKTsKCnR5 cGVkZWYgSlNCb29sCigqIEpTV2F0Y2hQb2ludEhhbmRsZXIpKEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganN2YWwgb2xkLCBqc3ZhbCAqbmV3cCwgdm9pZCAqY2xvc3VyZSk7CgoKdHlwZWRlZiB2b2lk CigqIEpTTmV3U2NyaXB0SG9vaykoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnROIGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSlNGdW5jdGlvbiAqZnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpjYWxsZXJkYXRhKTsKCgp0eXBlZGVmIHZvaWQKKCogSlNEZXN0cm95U2NyaXB0SG9v aykoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTU2NyaXB0ICpzY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpjYWxsZXJkYXRhKTsKCnR5cGVkZWYgdm9pZAooKiBKU1NvdXJjZUhhbmRsZXIpKGNv bnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzY2hhciAqc3RyLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqbGlzdGVuZXJUU0RhdGEsIHZvaWQgKmNsb3N1cmUp OwojIDE1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHJ2dGQuaCIKdHlwZWRlZiB2b2lk ICoKKCogSlNJbnRlcnByZXRlckhvb2spKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAs IEpTQm9vbCBiZWZvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNC b29sICpvaywgdm9pZCAqY2xvc3VyZSk7Cgp0eXBlZGVmIHZvaWQKKCogSlNPYmplY3RIb29rKShK U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU0Jvb2wgaXNOZXcsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNE ZWJ1Z0Vycm9ySG9vaykoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JSZXBvcnQgKnJlcG9ydCwgdm9p ZCAqY2xvc3VyZSk7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAy CgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIGVudW0gSlNPcCB7CgoKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvanMvanNvcGNvZGUudGJsIiAxCiMgNjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9qcy9qc29wY29kZS50YmwiCkpTT1BfTk9QID0gMCwKSlNPUF9QVVNIID0gMSwKSlNPUF9QT1BW ID0gMiwKSlNPUF9FTlRFUldJVEggPSAzLApKU09QX0xFQVZFV0lUSCA9IDQsCkpTT1BfUkVUVVJO ID0gNSwKSlNPUF9HT1RPID0gNiwKSlNPUF9JRkVRID0gNywKSlNPUF9JRk5FID0gOCwKCgpKU09Q X0FSR1VNRU5UUyA9IDksCgoKSlNPUF9GT1JBUkcgPSAxMCwKSlNPUF9GT1JWQVIgPSAxMSwKCgpK U09QX0RVUCA9IDEyLApKU09QX0RVUDIgPSAxMywKSlNPUF9TRVRDT05TVCA9IDE0LApKU09QX0JJ VE9SID0gMTUsCkpTT1BfQklUWE9SID0gMTYsCkpTT1BfQklUQU5EID0gMTcsCkpTT1BfRVEgPSAx OCwKSlNPUF9ORSA9IDE5LApKU09QX0xUID0gMjAsCkpTT1BfTEUgPSAyMSwKSlNPUF9HVCA9IDIy LApKU09QX0dFID0gMjMsCkpTT1BfTFNIID0gMjQsCkpTT1BfUlNIID0gMjUsCkpTT1BfVVJTSCA9 IDI2LApKU09QX0FERCA9IDI3LApKU09QX1NVQiA9IDI4LApKU09QX01VTCA9IDI5LApKU09QX0RJ ViA9IDMwLApKU09QX01PRCA9IDMxLApKU09QX05PVCA9IDMyLApKU09QX0JJVE5PVCA9IDMzLApK U09QX05FRyA9IDM0LApKU09QX05FVyA9IDM1LApKU09QX0RFTE5BTUUgPSAzNiwKSlNPUF9ERUxQ Uk9QID0gMzcsCkpTT1BfREVMRUxFTSA9IDM4LApKU09QX1RZUEVPRiA9IDM5LApKU09QX1ZPSUQg PSA0MCwKSlNPUF9JTkNOQU1FID0gNDEsCkpTT1BfSU5DUFJPUCA9IDQyLApKU09QX0lOQ0VMRU0g PSA0MywKSlNPUF9ERUNOQU1FID0gNDQsCkpTT1BfREVDUFJPUCA9IDQ1LApKU09QX0RFQ0VMRU0g PSA0NiwKSlNPUF9OQU1FSU5DID0gNDcsCkpTT1BfUFJPUElOQyA9IDQ4LApKU09QX0VMRU1JTkMg PSA0OSwKSlNPUF9OQU1FREVDID0gNTAsCkpTT1BfUFJPUERFQyA9IDUxLApKU09QX0VMRU1ERUMg PSA1MiwKSlNPUF9HRVRQUk9QID0gNTMsCkpTT1BfU0VUUFJPUCA9IDU0LApKU09QX0dFVEVMRU0g PSA1NSwKSlNPUF9TRVRFTEVNID0gNTYsCkpTT1BfUFVTSE9CSiA9IDU3LApKU09QX0NBTEwgPSA1 OCwKSlNPUF9OQU1FID0gNTksCkpTT1BfTlVNQkVSID0gNjAsCkpTT1BfU1RSSU5HID0gNjEsCkpT T1BfWkVSTyA9IDYyLApKU09QX09ORSA9IDYzLApKU09QX05VTEwgPSA2NCwKSlNPUF9USElTID0g NjUsCkpTT1BfRkFMU0UgPSA2NiwKSlNPUF9UUlVFID0gNjcsCkpTT1BfT1IgPSA2OCwKSlNPUF9B TkQgPSA2OSwKCgpKU09QX1RBQkxFU1dJVENIID0gNzAsCkpTT1BfTE9PS1VQU1dJVENIID0gNzEs CgoKSlNPUF9ORVdfRVEgPSA3MiwKSlNPUF9ORVdfTkUgPSA3MywKCgpKU09QX0NMT1NVUkUgPSA3 NCwKCgpKU09QX0VYUE9SVEFMTCA9IDc1LApKU09QX0VYUE9SVE5BTUUgPSA3NiwKSlNPUF9JTVBP UlRBTEwgPSA3NywKSlNPUF9JTVBPUlRQUk9QID0gNzgsCkpTT1BfSU1QT1JURUxFTSA9IDc5LAoK CkpTT1BfT0JKRUNUID0gODAsCgoKSlNPUF9QT1AgPSA4MSwKCgpKU09QX1BPUyA9IDgyLAoKCkpT T1BfVFJBUCA9IDgzLAoKCkpTT1BfR0VUQVJHID0gODQsCkpTT1BfU0VUQVJHID0gODUsCkpTT1Bf R0VUVkFSID0gODYsCkpTT1BfU0VUVkFSID0gODcsCgoKSlNPUF9VSU5UMTYgPSA4OCwKCgpKU09Q X05FV0lOSVQgPSA4OSwKSlNPUF9FTkRJTklUID0gOTAsCkpTT1BfSU5JVFBST1AgPSA5MSwKSlNP UF9JTklURUxFTSA9IDkyLApKU09QX0RFRlNIQVJQID0gOTMsCkpTT1BfVVNFU0hBUlAgPSA5NCwK CgpKU09QX0lOQ0FSRyA9IDk1LApKU09QX0lOQ1ZBUiA9IDk2LApKU09QX0RFQ0FSRyA9IDk3LApK U09QX0RFQ1ZBUiA9IDk4LApKU09QX0FSR0lOQyA9IDk5LApKU09QX1ZBUklOQyA9IDEwMCwKSlNP UF9BUkdERUMgPSAxMDEsCkpTT1BfVkFSREVDID0gMTAyLAoKCkpTT1BfVE9PQkpFQ1QgPSAxMDMs CkpTT1BfRk9STkFNRSA9IDEwNCwKSlNPUF9GT1JQUk9QID0gMTA1LApKU09QX0ZPUkVMRU0gPSAx MDYsCkpTT1BfUE9QMiA9IDEwNywKCgpKU09QX0JJTkROQU1FID0gMTA4LApKU09QX1NFVE5BTUUg PSAxMDksCgoKSlNPUF9USFJPVyA9IDExMCwKCgpKU09QX0lOID0gMTExLApKU09QX0lOU1RBTkNF T0YgPSAxMTIsCgoKSlNPUF9ERUJVR0dFUiA9IDExMywKCgpKU09QX0dPU1VCID0gMTE0LApKU09Q X1JFVFNVQiA9IDExNSwKCgpKU09QX0VYQ0VQVElPTiA9IDExNiwKSlNPUF9TRVRTUCA9IDExNywK CgoKCgoKSlNPUF9DT05EU1dJVENIID0gMTE4LApKU09QX0NBU0UgPSAxMTksCkpTT1BfREVGQVVM VCA9IDEyMCwKCgoKCkpTT1BfRVZBTCA9IDEyMSwKCgoKCkpTT1BfRU5VTUVMRU0gPSAxMjIsCgoK CgoKCkpTT1BfR0VUVEVSID0gMTIzLApKU09QX1NFVFRFUiA9IDEyNCwKCgoKCkpTT1BfREVGRlVO ID0gMTI1LApKU09QX0RFRkNPTlNUID0gMTI2LApKU09QX0RFRlZBUiA9IDEyNywKCgpKU09QX0FO T05GVU5PQkogPSAxMjgsCgoKSlNPUF9OQU1FREZVTk9CSiA9IDEyOSwKCgpKU09QX0lOSVRDQVRD SFZBUiA9IDEzMCwKCgpKU09QX0dST1VQID0gMTMxLAoKCkpTT1BfU0VUQ0FMTCA9IDEzMiwKCgoK CgpKU09QX1RSWSA9IDEzMywKSlNPUF9GSU5BTExZID0gMTM0LAoKCgoKCgoKSlNPUF9TV0FQID0g MTM1LAoKCgoKCgpKU09QX0FSR1NVQiA9IDEzNiwKSlNPUF9BUkdDTlQgPSAxMzcsCgoKCgoKCkpT T1BfREVGTE9DQUxGVU4gPSAxMzgsCgoKSlNPUF9HT1RPWCA9IDEzOSwKSlNPUF9JRkVRWCA9IDE0 MCwKSlNPUF9JRk5FWCA9IDE0MSwKSlNPUF9PUlggPSAxNDIsCkpTT1BfQU5EWCA9IDE0MywKSlNP UF9HT1NVQlggPSAxNDQsCkpTT1BfQ0FTRVggPSAxNDUsCkpTT1BfREVGQVVMVFggPSAxNDYsCkpT T1BfVEFCTEVTV0lUQ0hYID0gMTQ3LApKU09QX0xPT0tVUFNXSVRDSFggPSAxNDgsCgoKSlNPUF9C QUNLUEFUQ0ggPSAxNDksCkpTT1BfQkFDS1BBVENIX1BPUCA9IDE1MCwKSlNPUF9CQUNLUEFUQ0hf UFVTSCA9IDE1MSwKCgpKU09QX1NFVFJWQUwgPSAxNTIsCkpTT1BfUkVUUlZBTCA9IDE1MywKIyA1 MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzb3Bjb2RlLmgiIDIKCiAgICBKU09QX0xJTUlU Cn0gSlNPcDsKIyAxNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgpzdHJ1 Y3QgSlNDb2RlU3BlYyB7CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgY29uc3QgY2hhciAqdG9r ZW47CiAgICBpbnQ4IGxlbmd0aDsKICAgIGludDggbnVzZXM7CiAgICBpbnQ4IG5kZWZzOwogICAg dWludDggcHJlYzsKICAgIHVpbnQzMiBmb3JtYXQ7Cn07CgpleHRlcm4gY2hhciBqc19jb25zdF9z dHJbXTsKZXh0ZXJuIGNoYXIganNfdmFyX3N0cltdOwpleHRlcm4gY2hhciBqc19mdW5jdGlvbl9z dHJbXTsKZXh0ZXJuIGNoYXIganNfaW5fc3RyW107CmV4dGVybiBjaGFyIGpzX2luc3RhbmNlb2Zf c3RyW107CmV4dGVybiBjaGFyIGpzX25ld19zdHJbXTsKZXh0ZXJuIGNoYXIganNfZGVsZXRlX3N0 cltdOwpleHRlcm4gY2hhciBqc190eXBlb2Zfc3RyW107CmV4dGVybiBjaGFyIGpzX3ZvaWRfc3Ry W107CmV4dGVybiBjaGFyIGpzX251bGxfc3RyW107CmV4dGVybiBjaGFyIGpzX3RoaXNfc3RyW107 CmV4dGVybiBjaGFyIGpzX2ZhbHNlX3N0cltdOwpleHRlcm4gY2hhciBqc190cnVlX3N0cltdOwpl eHRlcm4gSlNDb2RlU3BlYyBqc19Db2RlU3BlY1tdOwpleHRlcm4gdWludE4ganNfTnVtQ29kZVNw ZWNzOwpleHRlcm4ganNjaGFyIGpzX0VzY2FwZU1hcFtdOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcg Kgpqc19RdW90ZVN0cmluZyhKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyLCBqc2NoYXIgcXVv dGUpOwoKCgoKCgpleHRlcm4gSlNQcmludGVyICoKanNfTmV3UHJpbnRlcihKU0NvbnRleHQgKmN4 LCBjb25zdCBjaGFyICpuYW1lLCB1aW50TiBpbmRlbnQsIEpTQm9vbCBwcmV0dHkpOwoKZXh0ZXJu IHZvaWQKanNfRGVzdHJveVByaW50ZXIoSlNQcmludGVyICpqcCk7CgpleHRlcm4gSlNTdHJpbmcg Kgpqc19HZXRQcmludGVyT3V0cHV0KEpTUHJpbnRlciAqanApOwoKZXh0ZXJuIGludApqc19wcmlu dGYoSlNQcmludGVyICpqcCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIEpTQm9v bApqc19wdXRzKEpTUHJpbnRlciAqanAsIGNvbnN0IGNoYXIgKnMpOwojIDIzNyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2pzL2pzb3Bjb2RlLmgiCmV4dGVybiBKU0Jvb2wKanNfRGVjb21waWxlQ29k ZShKU1ByaW50ZXIgKmpwLCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywgdWludE4g bGVuKTsKCmV4dGVybiBKU0Jvb2wKanNfRGVjb21waWxlU2NyaXB0KEpTUHJpbnRlciAqanAsIEpT U2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIEpTQm9vbApqc19EZWNvbXBpbGVGdW5jdGlvbkJvZHko SlNQcmludGVyICpqcCwgSlNGdW5jdGlvbiAqZnVuKTsKCmV4dGVybiBKU0Jvb2wKanNfRGVjb21w aWxlRnVuY3Rpb24oSlNQcmludGVyICpqcCwgSlNGdW5jdGlvbiAqZnVuKTsKIyAyNTkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgpleHRlcm4gSlNTdHJpbmcgKgpqc19EZWNv bXBpbGVWYWx1ZUdlbmVyYXRvcihKU0NvbnRleHQgKmN4LCBpbnROIHNwaW5kZXgsIGpzdmFsIHYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nICpmYWxsYmFjayk7CgoKCgp9CiMg NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2RiZ2FwaS5oIiAyCgoKZXh0ZXJuICJDIiB7 CgpleHRlcm4gdm9pZApqc19QYXRjaE9wY29kZShKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2Ny aXB0LCBqc2J5dGVjb2RlICpwYywgSlNPcCBvcCk7CgpleHRlcm4gSlNCb29sCkpTX1NldFRyYXAo SlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCwganNieXRlY29kZSAqcGMsCiAgICAgICAg ICAgSlNUcmFwSGFuZGxlciBoYW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU09wCkpT X0dldFRyYXBPcGNvZGUoSlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCwganNieXRlY29k ZSAqcGMpOwoKZXh0ZXJuIHZvaWQKSlNfQ2xlYXJUcmFwKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0 ICpzY3JpcHQsIGpzYnl0ZWNvZGUgKnBjLAogICAgICAgICAgICAgSlNUcmFwSGFuZGxlciAqaGFu ZGxlcnAsIHZvaWQgKipjbG9zdXJlcCk7CgpleHRlcm4gdm9pZApKU19DbGVhclNjcmlwdFRyYXBz KEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIHZvaWQKSlNfQ2xlYXJB bGxUcmFwcyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU1RyYXBTdGF0dXMKSlNfSGFuZGxlVHJh cChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywganN2YWwg KnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRJbnRlcnJ1cHQoSlNSdW50aW1lICpydCwgSlNU cmFwSGFuZGxlciBoYW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xl YXJJbnRlcnJ1cHQoSlNSdW50aW1lICpydCwgSlNUcmFwSGFuZGxlciAqaGFuZGxlcnAsIHZvaWQg KipjbG9zdXJlcCk7CgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0V2F0Y2hQb2ludChKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICBKU1dhdGNoUG9p bnRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNsb3N1cmUpOwoKZXh0ZXJuIEpTQm9vbApKU19DbGVh cldhdGNoUG9pbnQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAg ICAgICAgICAgICAgICBKU1dhdGNoUG9pbnRIYW5kbGVyICpoYW5kbGVycCwgdm9pZCAqKmNsb3N1 cmVwKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xlYXJXYXRjaFBvaW50c0Zvck9iamVjdChKU0NvbnRl eHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xlYXJBbGxXYXRjaFBv aW50cyhKU0NvbnRleHQgKmN4KTsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2Ri Z2FwaS5oIgpleHRlcm4gdWludE4KSlNfUENUb0xpbmVOdW1iZXIoSlNDb250ZXh0ICpjeCwgSlNT Y3JpcHQgKnNjcmlwdCwganNieXRlY29kZSAqcGMpOwoKZXh0ZXJuIGpzYnl0ZWNvZGUgKgpKU19M aW5lTnVtYmVyVG9QQyhKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCB1aW50TiBsaW5l bm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfR2V0RnVuY3Rpb25TY3JpcHQoSlNDb250ZXh0ICpj eCwgSlNGdW5jdGlvbiAqZnVuKTsKCmV4dGVybiBKU1ByaW5jaXBhbHMgKgpKU19HZXRTY3JpcHRQ cmluY2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwojIDEzOSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgiCmV4dGVybiBKU1N0YWNrRnJhbWUgKgpKU19G cmFtZUl0ZXJhdG9yKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqKml0ZXJhdG9ycCk7Cgpl eHRlcm4gSlNTY3JpcHQgKgpKU19HZXRGcmFtZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU1N0YWNr RnJhbWUgKmZwKTsKCmV4dGVybiBqc2J5dGVjb2RlICoKSlNfR2V0RnJhbWVQQyhKU0NvbnRleHQg KmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfSXNOYXRpdmVGcmFtZShK U0NvbnRleHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0RnJh bWVBbm5vdGF0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIHZv aWQKSlNfU2V0RnJhbWVBbm5vdGF0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAs IHZvaWQgKmFubm90YXRpb24pOwoKZXh0ZXJuIHZvaWQgKgpKU19HZXRGcmFtZVByaW5jaXBhbEFy cmF5KEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKCmV4dGVybiBKU09iamVjdCAq CkpTX0dldEZyYW1lT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0 ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVTY29wZUNoYWluKEpTQ29udGV4dCAqY3gsIEpTU3Rh Y2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVDYWxsT2JqZWN0KEpT Q29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0 RnJhbWVUaGlzKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTRnVu Y3Rpb24gKgpKU19HZXRGcmFtZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAq ZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVGdW5jdGlvbk9iamVjdChKU0NvbnRl eHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCgoKZXh0ZXJuIEpTQm9vbApKU19Jc0NvbnN0cnVj dG9yRnJhbWUoSlNDb250ZXh0ICpjeCwgSlNTdGFja0ZyYW1lICpmcCk7CgpleHRlcm4gSlNCb29s CkpTX0lzRGVidWdnZXJGcmFtZShKU0NvbnRleHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4 dGVybiBqc3ZhbApKU19HZXRGcmFtZVJldHVyblZhbHVlKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tG cmFtZSAqZnApOwoKZXh0ZXJuIHZvaWQKSlNfU2V0RnJhbWVSZXR1cm5WYWx1ZShKU0NvbnRleHQg KmN4LCBKU1N0YWNrRnJhbWUgKmZwLCBqc3ZhbCBydmFsKTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIg KgpKU19HZXRTY3JpcHRGaWxlbmFtZShKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0KTsK CmV4dGVybiB1aW50TgpKU19HZXRTY3JpcHRCYXNlTGluZU51bWJlcihKU0NvbnRleHQgKmN4LCBK U1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB1aW50TgpKU19HZXRTY3JpcHRMaW5lRXh0ZW50KEpT Q29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIEpTVmVyc2lvbgpKU19HZXRT Y3JpcHRWZXJzaW9uKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwojIDIxNyAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgiCmV4dGVybiB2b2lkCkpTX1NldE5ld1Nj cmlwdEhvb2tQcm9jKEpTUnVudGltZSAqcnQsIEpTTmV3U2NyaXB0SG9vayBob29rLCB2b2lkICpj YWxsZXJkYXRhKTsKCmV4dGVybiB2b2lkCkpTX1NldERlc3Ryb3lTY3JpcHRIb29rUHJvYyhKU1J1 bnRpbWUgKnJ0LCBKU0Rlc3Ryb3lTY3JpcHRIb29rIGhvb2ssCiAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmNhbGxlcmRhdGEpOwoKCgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNJblN0 YWNrRnJhbWUoSlNDb250ZXh0ICpjeCwgSlNTdGFja0ZyYW1lICpmcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBqc2NoYXIgKmJ5dGVzLCB1aW50TiBsZW5ndGgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubywKICAgICAg ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1 YXRlSW5TdGFja0ZyYW1lKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCB1aW50TiBsZW5ndGgsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAg ICAgICAgICAgICAgICAgICAgIGpzdmFsICpydmFsKTsKCgoKdHlwZWRlZiBzdHJ1Y3QgSlNQcm9w ZXJ0eURlc2MgewogICAganN2YWwgaWQ7CiAgICBqc3ZhbCB2YWx1ZTsKICAgIHVpbnQ4IGZsYWdz OwogICAgdWludDggc3BhcmU7CiAgICB1aW50MTYgc2xvdDsKICAgIGpzdmFsIGFsaWFzOwp9IEpT UHJvcGVydHlEZXNjOwojIDI2MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgi CnR5cGVkZWYgc3RydWN0IEpTUHJvcGVydHlEZXNjQXJyYXkgewogICAgdWludDMyIGxlbmd0aDsK ICAgIEpTUHJvcGVydHlEZXNjICphcnJheTsKfSBKU1Byb3BlcnR5RGVzY0FycmF5OwoKZXh0ZXJu IEpTU2NvcGVQcm9wZXJ0eSAqCkpTX1Byb3BlcnR5SXRlcmF0b3IoSlNPYmplY3QgKm9iaiwgSlNT Y29wZVByb3BlcnR5ICoqaXRlcmF0b3JwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0UHJvcGVydHlE ZXNjKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NvcGVQcm9wZXJ0eSAqc3Byb3As CiAgICAgICAgICAgICAgICAgICBKU1Byb3BlcnR5RGVzYyAqcGQpOwoKZXh0ZXJuIEpTQm9vbApK U19HZXRQcm9wZXJ0eURlc2NBcnJheShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1By b3BlcnR5RGVzY0FycmF5ICpwZGEpOwoKZXh0ZXJuIHZvaWQKSlNfUHV0UHJvcGVydHlEZXNjQXJy YXkoSlNDb250ZXh0ICpjeCwgSlNQcm9wZXJ0eURlc2NBcnJheSAqcGRhKTsKCgoKZXh0ZXJuIEpT Qm9vbApKU19TZXREZWJ1Z2dlckhhbmRsZXIoSlNSdW50aW1lICpydCwgSlNUcmFwSGFuZGxlciBo YW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0U291cmNlSGFuZGxl cihKU1J1bnRpbWUgKnJ0LCBKU1NvdXJjZUhhbmRsZXIgaGFuZGxlciwgdm9pZCAqY2xvc3VyZSk7 CgpleHRlcm4gSlNCb29sCkpTX1NldEV4ZWN1dGVIb29rKEpTUnVudGltZSAqcnQsIEpTSW50ZXJw cmV0ZXJIb29rIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRDYWxs SG9vayhKU1J1bnRpbWUgKnJ0LCBKU0ludGVycHJldGVySG9vayBob29rLCB2b2lkICpjbG9zdXJl KTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0T2JqZWN0SG9vayhKU1J1bnRpbWUgKnJ0LCBKU09iamVj dEhvb2sgaG9vaywgdm9pZCAqY2xvc3VyZSk7CgpleHRlcm4gSlNCb29sCkpTX1NldFRocm93SG9v ayhKU1J1bnRpbWUgKnJ0LCBKU1RyYXBIYW5kbGVyIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKZXh0 ZXJuIEpTQm9vbApKU19TZXREZWJ1Z0Vycm9ySG9vayhKU1J1bnRpbWUgKnJ0LCBKU0RlYnVnRXJy b3JIb29rIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKCgpleHRlcm4gc2l6ZV90CkpTX0dldE9iamVj dFRvdGFsU2l6ZShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBzaXplX3QK SlNfR2V0RnVuY3Rpb25Ub3RhbFNpemUoSlNDb250ZXh0ICpjeCwgSlNGdW5jdGlvbiAqZnVuKTsK CmV4dGVybiBzaXplX3QKSlNfR2V0U2NyaXB0VG90YWxTaXplKEpTQ29udGV4dCAqY3gsIEpTU2Ny aXB0ICpzY3JpcHQpOwoKfQojIDYwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIgMQojIDQzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3dpZGdldC9uc0V2ZW50LmgiIDEKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3dpZGdl dC9uc0V2ZW50LmgiCmVudW0gbnNFdmVudFN0YXR1cyB7CgogIG5zRXZlbnRTdGF0dXNfZUlnbm9y ZSwKCiAgbnNFdmVudFN0YXR1c19lQ29uc3VtZU5vRGVmYXVsdCwKCiAgbnNFdmVudFN0YXR1c19l Q29uc3VtZURvRGVmYXVsdAp9OwoKc3RydWN0IG5zRXZlbnQ7CgpzdHJ1Y3QgbnNHVUlFdmVudDsK c3RydWN0IG5zU2l6ZUV2ZW50OwpzdHJ1Y3QgbnNTaXplTW9kZUV2ZW50OwpzdHJ1Y3QgbnNaTGV2 ZWxFdmVudDsKc3RydWN0IG5zUGFpbnRFdmVudDsKc3RydWN0IG5zU2Nyb2xsYmFyRXZlbnQ7CnN0 cnVjdCBuc1Njcm9sbFBvcnRFdmVudDsKc3RydWN0IG5zSW5wdXRFdmVudDsKc3RydWN0IG5zTW91 c2VFdmVudDsKc3RydWN0IG5zQWNjZXNzaWJsZUV2ZW50OwpzdHJ1Y3QgbnNLZXlFdmVudDsKc3Ry dWN0IG5zVGV4dEV2ZW50OwpzdHJ1Y3QgbnNDb21wb3NpdGlvbkV2ZW50OwpzdHJ1Y3QgbnNNb3Vz ZVNjcm9sbEV2ZW50OwpzdHJ1Y3QgbnNSZWNvbnZlcnNpb25FdmVudDsKc3RydWN0IG5zVG9vbHRp cEV2ZW50OwpzdHJ1Y3QgbnNNZW51RXZlbnQ7CgpzdHJ1Y3QgbnNUZXh0RXZlbnRSZXBseTsKc3Ry dWN0IG5zUmVjb252ZXJzaW9uRXZlbnRSZXBseTsKIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJQ29udGVudC5oIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250 ZW50L25zQ29udGVudEVycm9ycy5oIiAxCiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250 ZW50L25zSUNvbnRlbnQuaCIgMgoKCmNsYXNzIG5zSUF0b207CmNsYXNzIG5zSURvY3VtZW50Owpj bGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNWb2lkQXJyYXk7CmNsYXNzIG5zSURPTUV2ZW50 OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lET01S YW5nZTsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJTm9kZUluZm87CmNsYXNzIG5z SUV2ZW50TGlzdGVuZXJNYW5hZ2VyOwojIDY5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVu dC9uc0lDb250ZW50LmgiCmNsYXNzIG5zSUNvbnRlbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpw dWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsgMHg3ODAzMDIyMCwgMHg5NDQ3LCAweDExZDEsIHsweDkzLCAweDIzLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnQobnNJRG9jdW1lbnQqJiBhUmVzdWx0KSBjb25zdCA9IDA7 CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldERvY3VtZW50KG5zSURvY3VtZW50KiBhRG9jdW1lbnQsIFBSQm9vbCBh RGVlcCwgUFJCb29sIGFDb21waWxlRXZlbnRIYW5kbGVycykgPSAwOwoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQYXJlbnQobnNJQ29udGVudComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhcmVudChuc0lDb250ZW50KiBhUGFyZW50KSA9IDA7CgoK CgoKCiAgdmlydHVhbCBQUkJvb2wgSXNOYXRpdmVBbm9ueW1vdXMoKSBjb25zdCA9IDA7CgoKCgoK CiAgdmlydHVhbCB2b2lkIFNldE5hdGl2ZUFub255bW91cyhQUkJvb2wgYUFub255bW91cykgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lU3BhY2VJRChQUkludDMyJiBhUmVzdWx0 KSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhZyhuc0lBdG9tKiYgYVJl c3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlSW5mbyhuc0lO b2RlSW5mbyomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2Fu Q29udGFpbkNoaWxkcmVuKFBSQm9vbCYgYVJlc3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDaGlsZENvdW50KFBSSW50MzImIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IENoaWxkQXQoUFJJbnQzMiBhSW5kZXgsIG5zSUNvbnRlbnQqJiBh UmVzdWx0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbmRleE9mKG5zSUNv bnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0ID0gMDsKIyAxNzAg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEluc2VydENoaWxkQXQobnNJQ29udGVudCogYUtpZCwgUFJJbnQzMiBhSW5kZXgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LCBQUkJvb2wgYURlZXBTZXRE b2N1bWVudCkgPSAwOwojIDE4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29u dGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkQXQobnNJQ29udGVudCogYUtp ZCwgUFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5v dGlmeSwgUFJCb29sIGFEZWVwU2V0RG9jdW1lbnQpID0gMDsKIyAxOTMgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZENo aWxkVG8obnNJQ29udGVudCogYUtpZCwgUFJCb29sIGFOb3RpZnksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9IDA7CiMgMjAzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1v dmVDaGlsZEF0KFBSSW50MzIgYUluZGV4LCBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDIxNSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgTm9ybWFsaXplQXR0clN0cmluZyhjb25zdCBuc0FTdHJpbmcmIGFTdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSU5vZGVJbmZvKiYgYU5vZGVJbmZvKSA9IDA7CiMgMjMx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAg ICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7CiMgMjQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv Y29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyKG5zSU5vZGVJ bmZvKiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh bHVlLAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDI2NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgIG5zQVN0cmluZyYgYVJlc3VsdCkgY29uc3QgPSAwOwojIDI4MyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAgICAg ICAgICAgICAgIG5zSUF0b20qJiBhUHJlZml4LCBuc0FTdHJpbmcmIGFSZXN1bHQpIGNvbnN0ID0g MDsKIyAyOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2 aXJ0dWFsIFBSQm9vbCBIYXNBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFt ZSkgY29uc3QgPSAwOwojIDMwNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29u dGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlE LCBuc0lBdG9tKiBhQXR0ciwKICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkg PSAwOwojIDMxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ck5hbWVBdChQUkludDMyIGFJbmRleCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lBdG9tKiYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUF0b20qJiBhUHJlZml4KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB dHRyQ291bnQoUFJJbnQzMiYgYUNvdW50UmVzdWx0KSBjb25zdCA9IDA7CiMgMzQxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS YW5nZUFkZChuc0lET01SYW5nZSogYVJhbmdlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg UmFuZ2VSZW1vdmUobnNJRE9NUmFuZ2UqIGFSYW5nZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFJhbmdlTGlzdChuc1ZvaWRBcnJheSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKIyAzODUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEhhbmRsZURPTUV2ZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50KiBhRXZlbnQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lET01FdmVudCoqIGFET01FdmVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZl bnRTdGF0dXMqIGFFdmVudFN0YXR1cykgPSAwOwojIDQwNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudElEKFBS VWludDMyKiBhSUQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250ZW50SUQoUFJV aW50MzIgYUlEKSA9IDA7CiMgNDIzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lD b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2N1cyhuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0KSA9IDA7CiMgNDM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lD b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGb2N1cyhuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0KSA9IDA7CiMgNDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u c0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaW5kaW5nUGFyZW50KG5zSUNvbnRl bnQqIGFDb250ZW50KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZ1Bh cmVudChuc0lDb250ZW50KiogYUNvbnRlbnQpID0gMDsKCgoKCiAgZW51bSB7CgogICAgZVRFWFQg PSAweDAwMDAwMDAxLAoKICAgIGVFTEVNRU5UID0gMHgwMDAwMDAwMiwKCiAgICBlSFRNTCA9IDB4 MDAwMDAwMDQsCgogICAgZUhUTUxfRk9STV9DT05UUk9MID0gMHgwMDAwMDAwOCwKCiAgICBlWFVM ID0gMHgwMDAwMDAxMAogIH07CiMgNDc5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u c0lDb250ZW50LmgiCiAgdmlydHVhbCBQUkJvb2wgSXNDb250ZW50T2ZUeXBlKFBSVWludDMyIGFG bGFncykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlzdGVuZXJNYW5hZ2VyKG5z SUV2ZW50TGlzdGVuZXJNYW5hZ2VyKiogYVJlc3VsdCkgPSAwOwojIDUxNCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRG9uZUNy ZWF0aW5nRWxlbWVudCgpID0gMDsKIyA1NDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50 L25zSUNvbnRlbnQuaCIKfTsKIyA2MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIgMQojIDQ1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvY29udGVudC9uc0lEb2N1bWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9jb250ZW50L25zQ2hhbmdlSGludC5oIiAxCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9jb250ZW50L25zQ2hhbmdlSGludC5oIgplbnVtIG5zQ2hhbmdlSGludCB7CiAgbnNDaGFuZ2VI aW50X05vbmUgPSAwLAogIG5zQ2hhbmdlSGludF9Vbmtub3duID0gMHgwMSwKICBuc0NoYW5nZUhp bnRfQXR0ckNoYW5nZSA9IDB4MDIsCiAgbnNDaGFuZ2VIaW50X0F1cmFsID0gMHgwNCwKICBuc0No YW5nZUhpbnRfQ29udGVudCA9IDB4MDgsCiAgbnNDaGFuZ2VIaW50X1JlcGFpbnRGcmFtZSA9IDB4 MTAsCiAgbnNDaGFuZ2VIaW50X1JlZmxvd0ZyYW1lID0gMHgyMCwKICBuc0NoYW5nZUhpbnRfU3lu Y0ZyYW1lVmlldyA9IDB4NDAsCiAgbnNDaGFuZ2VIaW50X1JlY29uc3RydWN0RnJhbWUgPSAweDgw LAoKICBuc0NoYW5nZUhpbnRfUmVjb25zdHJ1Y3REb2MgPSAweDEwMAoKCgoKCn07CiMgNzggIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zQ2hhbmdlSGludC5oIgppbmxpbmUgbnNDaGFu Z2VIaW50IE5TX0NvbWJpbmVIaW50KG5zQ2hhbmdlSGludCBhSDEsIG5zQ2hhbmdlSGludCBhSDIp IHsKICByZXR1cm4gKG5zQ2hhbmdlSGludCkoYUgxIHwgYUgyKTsKfQoKCmlubGluZSBuc0NoYW5n ZUhpbnQgTlNfU3VidHJhY3RIaW50KG5zQ2hhbmdlSGludCBhSDEsIG5zQ2hhbmdlSGludCBhSDIp IHsKICByZXR1cm4gKG5zQ2hhbmdlSGludCkoYUgxICYgfmFIMik7Cn0KCgoKaW5saW5lIFBSQm9v bCBOU19VcGRhdGVIaW50KG5zQ2hhbmdlSGludCYgYURlc3QsIG5zQ2hhbmdlSGludCBhU3JjKSB7 CiAgbnNDaGFuZ2VIaW50IHIgPSAobnNDaGFuZ2VIaW50KShhRGVzdCB8IGFTcmMpOwogIFBSQm9v bCBjaGFuZ2VkID0gKGludClyICE9IChpbnQpYURlc3Q7CiAgYURlc3QgPSByOwogIHJldHVybiBj aGFuZ2VkOwp9CgoKaW5saW5lIFBSQm9vbCBOU19Jc0hpbnRTdWJzZXQobnNDaGFuZ2VIaW50IGFT dWJzZXQsIG5zQ2hhbmdlSGludCBhU3VwZXJTZXQpIHsKICByZXR1cm4gKGFTdWJzZXQgJiBhU3Vw ZXJTZXQpID09IGFTdWJzZXQ7Cn0KCgpjb25zdCBuc0NoYW5nZUhpbnQgTlNfU1RZTEVfSElOVF9V TktOT1dOID0gbnNDaGFuZ2VIaW50X1Vua25vd247CmNvbnN0IG5zQ2hhbmdlSGludCBOU19TVFlM RV9ISU5UX05PTkUgPSBuc0NoYW5nZUhpbnRfTm9uZTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NU WUxFX0hJTlRfQVRUUkNIQU5HRSA9IG5zQ2hhbmdlSGludF9BdHRyQ2hhbmdlOwpjb25zdCBuc0No YW5nZUhpbnQgTlNfU1RZTEVfSElOVF9BVVJBTCA9IChuc0NoYW5nZUhpbnQpCiAgKG5zQ2hhbmdl SGludF9BdHRyQ2hhbmdlIHwgbnNDaGFuZ2VIaW50X0F1cmFsKTsKY29uc3QgbnNDaGFuZ2VIaW50 IE5TX1NUWUxFX0hJTlRfQ09OVEVOVCA9IChuc0NoYW5nZUhpbnQpCiAgKG5zQ2hhbmdlSGludF9B dHRyQ2hhbmdlIHwgbnNDaGFuZ2VIaW50X0F1cmFsIHwgbnNDaGFuZ2VIaW50X0NvbnRlbnQpOwpj b25zdCBuc0NoYW5nZUhpbnQgTlNfU1RZTEVfSElOVF9WSVNVQUwgPSAobnNDaGFuZ2VIaW50KQog IChuc0NoYW5nZUhpbnRfQXR0ckNoYW5nZSB8IG5zQ2hhbmdlSGludF9BdXJhbCB8IG5zQ2hhbmdl SGludF9Db250ZW50IHwgbnNDaGFuZ2VIaW50X1JlcGFpbnRGcmFtZQogICB8IG5zQ2hhbmdlSGlu dF9TeW5jRnJhbWVWaWV3KTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NUWUxFX0hJTlRfUkVGTE9X ID0gKG5zQ2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhp bnRfQXVyYWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8IG5zQ2hhbmdlSGludF9SZXBhaW50RnJh bWUKICAgfCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmlldyB8IG5zQ2hhbmdlSGludF9SZWZsb3dG cmFtZSk7CmNvbnN0IG5zQ2hhbmdlSGludCBOU19TVFlMRV9ISU5UX0ZSQU1FQ0hBTkdFID0gKG5z Q2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhpbnRfQXVy YWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8IG5zQ2hhbmdlSGludF9SZXBhaW50RnJhbWUKICAg fCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmlldyB8IG5zQ2hhbmdlSGludF9SZWZsb3dGcmFtZSB8 IG5zQ2hhbmdlSGludF9SZWNvbnN0cnVjdEZyYW1lKTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NU WUxFX0hJTlRfUkVDT05TVFJVQ1RfQUxMID0gKG5zQ2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50 X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhpbnRfQXVyYWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8 IG5zQ2hhbmdlSGludF9SZXBhaW50RnJhbWUKICAgfCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmll dyB8IG5zQ2hhbmdlSGludF9SZWZsb3dGcmFtZSB8IG5zQ2hhbmdlSGludF9SZWNvbnN0cnVjdEZy YW1lCiAgIHwgbnNDaGFuZ2VIaW50X1JlY29uc3RydWN0RG9jKTsKIyA0NiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0NPTUFycmF5LmgiIDEKIyA1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zQ09NQXJyYXkuaCIKY2xhc3MgbnNDT01BcnJheV9iYXNlCnsKICAgIGZyaWVuZCBjbGFz cyBuc0FycmF5Owpwcm90ZWN0ZWQ6CiAgICBuc0NPTUFycmF5X2Jhc2UoKSB7fQogICAgbnNDT01B cnJheV9iYXNlKFBSSW50MzIgYUNvdW50KSA6IG1BcnJheShhQ291bnQpIHt9CiAgICBuc0NPTUFy cmF5X2Jhc2UoY29uc3QgbnNDT01BcnJheV9iYXNlJiBvdGhlcik7CiAgICB+bnNDT01BcnJheV9i YXNlKCk7CgogICAgUFJJbnQzMiBJbmRleE9mKG5zSVN1cHBvcnRzKiBhT2JqZWN0KSBjb25zdCB7 CiAgICAgICAgcmV0dXJuIG1BcnJheS5JbmRleE9mKGFPYmplY3QpOwogICAgfQoKICAgIFBSQm9v bCBFbnVtZXJhdGVGb3J3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0 YSkgewogICAgICAgIHJldHVybiBtQXJyYXkuRW51bWVyYXRlRm9yd2FyZHMoYUZ1bmMsIGFEYXRh KTsKICAgIH0KCiAgICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1 bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKSB7CiAgICAgICAgcmV0dXJuIG1BcnJheS5FbnVtZXJhdGVC YWNrd2FyZHMoYUZ1bmMsIGFEYXRhKTsKICAgIH0KCgoKCiAgICB2b2lkIENsZWFyKCk7CiAgICBQ UkJvb2wgSW5zZXJ0T2JqZWN0QXQobnNJU3VwcG9ydHMqIGFPYmplY3QsIFBSSW50MzIgYUluZGV4 KTsKICAgIFBSQm9vbCBJbnNlcnRPYmplY3RzQXQoY29uc3QgbnNDT01BcnJheV9iYXNlJiBhT2Jq ZWN0cywgUFJJbnQzMiBhSW5kZXgpOwogICAgUFJCb29sIFJlcGxhY2VPYmplY3RBdChuc0lTdXBw b3J0cyogYU9iamVjdCwgUFJJbnQzMiBhSW5kZXgpOwogICAgUFJCb29sIEFwcGVuZE9iamVjdChu c0lTdXBwb3J0cyAqYU9iamVjdCkgewogICAgICAgIHJldHVybiBJbnNlcnRPYmplY3RBdChhT2Jq ZWN0LCBDb3VudCgpKTsKICAgIH0KICAgIFBSQm9vbCBBcHBlbmRPYmplY3RzKGNvbnN0IG5zQ09N QXJyYXlfYmFzZSYgYU9iamVjdHMpIHsKICAgICAgICByZXR1cm4gSW5zZXJ0T2JqZWN0c0F0KGFP YmplY3RzLCBDb3VudCgpKTsKICAgIH0KICAgIFBSQm9vbCBSZW1vdmVPYmplY3QobnNJU3VwcG9y dHMgKmFPYmplY3QpOwogICAgUFJCb29sIFJlbW92ZU9iamVjdEF0KFBSSW50MzIgYUluZGV4KTsK CnB1YmxpYzoKCgogICAgUFJJbnQzMiBDb3VudCgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbUFy cmF5LkNvdW50KCk7CiAgICB9CgogICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qIE9iamVj dEF0KFBSSW50MzIgYUluZGV4KSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh c3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KiA+KG1BcnJheS5FbGVtZW50QXQoYUluZGV4 KSk7CiAgICB9CgogICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qIG9wZXJhdG9yW10oUFJJ bnQzMiBhSW5kZXgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gT2JqZWN0QXQoYUluZGV4KTsKICAg IH0KCnByaXZhdGU6CgoKICAgIG5zVm9pZEFycmF5IG1BcnJheTsKCgogICAgbnNDT01BcnJheV9i YXNlJiBvcGVyYXRvcj0oY29uc3QgbnNDT01BcnJheV9iYXNlJiBvdGhlcik7Cn07CiMgMTI5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01BcnJheS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4KY2xhc3MgbnNDT01BcnJheSA6IHB1YmxpYyBuc0NPTUFycmF5X2Jhc2UKewogcHVibGljOgog ICAgbnNDT01BcnJheSgpIHt9CiAgICBuc0NPTUFycmF5KFBSSW50MzIgYUNvdW50KSA6IG5zQ09N QXJyYXlfYmFzZShhQ291bnQpIHt9CgoKCiAgICBuc0NPTUFycmF5KGNvbnN0IG5zQ09NQXJyYXk8 VD4mIGFPdGhlcikgOiBuc0NPTUFycmF5X2Jhc2UoYU90aGVyKSB7IH0KCiAgICB+bnNDT01BcnJh eSgpIHt9CgoKICAgIG5zRGVyaXZlZFNhZmU8VD4qIE9iamVjdEF0KFBSSW50MzIgYUluZGV4KSBj b25zdCB7CiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4q ID4obnNDT01BcnJheV9iYXNlOjpPYmplY3RBdChhSW5kZXgpKTsKICAgIH0KCgogICAgbnNEZXJp dmVkU2FmZTxUPiogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkgY29uc3QgewogICAgICAgIHJl dHVybiBPYmplY3RBdChhSW5kZXgpOwogICAgfQoKCiAgICBQUkludDMyIEluZGV4T2YoVCogYU9i amVjdCkgY29uc3QgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OkluZGV4T2Yoc3Rh dGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmplY3QpKTsKICAgIH0KCgoKICAgIFBSQm9vbCBJ bnNlcnRPYmplY3RBdChUKiBhT2JqZWN0LCBQUkludDMyIGFJbmRleCkgewogICAgICAgIHJldHVy biBuc0NPTUFycmF5X2Jhc2U6Okluc2VydE9iamVjdEF0KHN0YXRpY19jYXN0PCBuc0lTdXBwb3J0 cyogPihhT2JqZWN0KSwgYUluZGV4KTsKICAgIH0KCgoKICAgIFBSQm9vbCBJbnNlcnRPYmplY3Rz QXQoY29uc3QgbnNDT01BcnJheTxUPiYgYU9iamVjdHMsIFBSSW50MzIgYUluZGV4KSB7CiAgICAg ICAgcmV0dXJuIG5zQ09NQXJyYXlfYmFzZTo6SW5zZXJ0T2JqZWN0c0F0KGFPYmplY3RzLCBhSW5k ZXgpOwogICAgfQoKCgogICAgUFJCb29sIFJlcGxhY2VPYmplY3RBdChUKiBhT2JqZWN0LCBQUklu dDMyIGFJbmRleCkgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OlJlcGxhY2VPYmpl Y3RBdChzdGF0aWNfY2FzdDwgbnNJU3VwcG9ydHMqID4oYU9iamVjdCksIGFJbmRleCk7CiAgICB9 CgoKCgoKICAgIFBSSW50MzIgQ291bnQoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIG5zQ09NQXJy YXlfYmFzZTo6Q291bnQoKTsKICAgIH0KCgogICAgdm9pZCBDbGVhcigpIHsKICAgICAgICBuc0NP TUFycmF5X2Jhc2U6OkNsZWFyKCk7CiAgICB9CgoKCgogICAgdHlwZWRlZiBQUkJvb2wgKCogbnND T01BcnJheUVudW1GdW5jKQogICAgICAgIChUKiBhRWxlbWVudCwgdm9pZCAqYURhdGEpOwoKCiAg ICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNDT01BcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk KiBhRGF0YSkgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OkVudW1lcmF0ZUZvcndh cmRzKG5zVm9pZEFycmF5RW51bUZ1bmMoYUZ1bmMpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFEYXRhKTsKICAgIH0KCiAgICBQUkJvb2wgRW51bWVy YXRlQmFja3dhcmRzKG5zQ09NQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpIHsKICAg ICAgICByZXR1cm4gbnNDT01BcnJheV9iYXNlOjpFbnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJy YXlFbnVtRnVuYyhhRnVuYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYURhdGEpOwogICAgfQoKCiAgICBQUkJvb2wgQXBwZW5kT2JqZWN0KFQgKmFP YmplY3QpIHsKICAgICAgICByZXR1cm4gbnNDT01BcnJheV9iYXNlOjpBcHBlbmRPYmplY3Qoc3Rh dGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmplY3QpKTsKICAgIH0KCgogICAgUFJCb29sIEFw cGVuZE9iamVjdHMoY29uc3QgbnNDT01BcnJheTxUPiYgYU9iamVjdHMpIHsKICAgICAgICByZXR1 cm4gbnNDT01BcnJheV9iYXNlOjpBcHBlbmRPYmplY3RzKGFPYmplY3RzKTsKICAgIH0KCgoKCiAg ICBQUkJvb2wgUmVtb3ZlT2JqZWN0KFQgKmFPYmplY3QpIHsKICAgICAgICByZXR1cm4gbnNDT01B cnJheV9iYXNlOjpSZW1vdmVPYmplY3Qoc3RhdGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmpl Y3QpKTsKICAgIH0KCgoKICAgIFBSQm9vbCBSZW1vdmVPYmplY3RBdChQUkludDMyIGFJbmRleCkg ewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OlJlbW92ZU9iamVjdEF0KGFJbmRleCk7 CiAgICB9Cgpwcml2YXRlOgoKCiAgICBuc0NPTUFycmF5PFQ+JiBvcGVyYXRvcj0oY29uc3QgbnND T01BcnJheTxUPiYgb3RoZXIpOwp9OwojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVu dC9uc0lEb2N1bWVudC5oIiAyCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lBcmVuYTsKY2xhc3Mg bnNJQ29udGVudDsKY2xhc3MgbnNJRG9jdW1lbnRDb250YWluZXI7CmNsYXNzIG5zSURvY3VtZW50 T2JzZXJ2ZXI7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lQcmVzU2hlbGw7CgpjbGFz cyBuc0lTdHJlYW1MaXN0ZW5lcjsKY2xhc3MgbnNJU3RyZWFtT2JzZXJ2ZXI7CmNsYXNzIG5zSVN0 eWxlU2V0OwpjbGFzcyBuc0lTdHlsZVNoZWV0OwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5z SVVSSTsKY2xhc3MgbnNJTG9hZEdyb3VwOwpjbGFzcyBuc0lWaWV3TWFuYWdlcjsKY2xhc3MgbnNJ U2NyaXB0R2xvYmFsT2JqZWN0OwpjbGFzcyBuc0lET01FdmVudDsKY2xhc3MgbnNJRGV2aWNlQ29u dGV4dDsKY2xhc3MgbnNJUGFyc2VyOwpjbGFzcyBuc0lET01Ob2RlOwpjbGFzcyBuc0lET01Eb2N1 bWVudEZyYWdtZW50OwpjbGFzcyBuc0lMaW5lQnJlYWtlcjsKY2xhc3MgbnNJV29yZEJyZWFrZXI7 CmNsYXNzIG5zSVNlbGVjdGlvbjsKY2xhc3MgbnNJQ2hhbm5lbDsKY2xhc3MgbnNJUHJpbmNpcGFs OwpjbGFzcyBuc0lOb2RlSW5mb01hbmFnZXI7CmNsYXNzIG5zSURPTURvY3VtZW50OwpjbGFzcyBu c0lET01Eb2N1bWVudFR5cGU7CmNsYXNzIG5zSUJpbmRpbmdNYW5hZ2VyOwpjbGFzcyBuc0lPYnNl cnZlcjsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU2NyaXB0TG9hZGVyOwpjbGFz cyBuc1N0cmluZzsKY2xhc3MgbnNJQ29udGVudFNpbms7CmNsYXNzIG5zSVNjcmlwdEV2ZW50TWFu YWdlcjsKIyAxMDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSURvY3VtZW50Lmgi CmNsYXNzIG5zSURvY3VtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OTRj NmNlYjAsIDB4OTQ0NywgMHgxMWQxLCB7MHg5MywgMHgyMywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMn0gfTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QXJlbmEobnNJQXJlbmEqKiBhQXJlbmEpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydERv Y3VtZW50TG9hZChjb25zdCBjaGFyKiBhQ29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJTG9hZEdyb3VwKiBhTG9hZEdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJU3VwcG9ydHMqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdHJlYW1MaXN0ZW5lciAqKmFEb2NMaXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSQm9vbCBhUmVzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lDb250ZW50U2luayogYVNpbmsgPSAwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcERv Y3VtZW50TG9hZCgpID0gMDsKCgoKCiAgdmlydHVhbCBjb25zdCBuc1N0cmluZyogR2V0RG9jdW1l bnRUaXRsZSgpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudFVS TChuc0lVUkkqKiBhVVJMKSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREb2N1bWVu dFVSTChuc0lVUkkqIGFVUkwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmluY2lw YWwobnNJUHJpbmNpcGFsICoqYVByaW5jaXBhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBBZGRQcmluY2lwYWwobnNJUHJpbmNpcGFsICphUHJpbmNpcGFsKSA9IDA7CgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRMb2FkR3JvdXAobnNJTG9hZEdyb3VwKiogYUdyb3VwKSBj b25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFzZVVSTChuc0lVUkkqJiBhVVJM KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYXNlVVJMKG5zSVVSSSogYVVSTCkg PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VUYXJnZXQobnNBU3RyaW5nICZhQmFz ZVRhcmdldCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJhc2VUYXJnZXQoY29uc3QgbnNBU3Ry aW5nICZhQmFzZVRhcmdldCk9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRD aGFyYWN0ZXJTZXQobnNBU3RyaW5nJiBvQ2hhclNldElEKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXREb2N1bWVudENoYXJhY3RlclNldChjb25zdCBuc0FTdHJpbmcmIGFDaGFyU2V0SUQpID0g MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudENoYXJhY3RlclNldFNvdXJjZShQUklu dDMyKiBhQ2hhcnNldFNvdXJjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9jdW1lbnRD aGFyYWN0ZXJTZXRTb3VyY2UoUFJJbnQzMiBhQ2hhcnNldFNvdXJjZSkgPSAwOwoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQWRkQ2hhclNldE9ic2VydmVyKG5zSU9ic2VydmVyKiBhT2JzZXJ2ZXIpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGFyU2V0T2JzZXJ2ZXIobnNJT2JzZXJ2 ZXIqIGFPYnNlcnZlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRUeXBl KG5zQVN0cmluZyYgYUNvbnRlbnRUeXBlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 Q29udGVudFR5cGUoY29uc3QgbnNBU3RyaW5nJiBhQ29udGVudFR5cGUpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50TGFuZ3VhZ2UobnNBU3RyaW5nJiBhQ29udGVudExhbmd1 YWdlKSBjb25zdCA9IDA7CiMgMTk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lE b2N1bWVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaUVuYWJsZWQoUFJCb29sKiBhQmlk aUVuYWJsZWQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpRW5h YmxlZChQUkJvb2wgYUJpZGlFbmFibGVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TGluZUJyZWFrZXIobnNJTGluZUJyZWFrZXIqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRMaW5lQnJlYWtlcihuc0lMaW5lQnJlYWtlciogYUxpbmVCcmVha2VyKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRXb3JkQnJlYWtlcihuc0lXb3JkQnJlYWtlcioqIGFSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdvcmRCcmVha2VyKG5zSVdvcmRCcmVha2VyKiBh V29yZEJyZWFrZXIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVhZGVyRGF0YShu c0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBu c0FTdHJpbmcmIGFEYXRhKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVTaGVs bChuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lW aWV3TWFuYWdlciogYVZpZXdNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5 bGVTZXQqIGFTdHlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCoq IGFJbnN0YW5jZVB0clJlc3VsdCkgPSAwOwogIHZpcnR1YWwgUFJCb29sIERlbGV0ZVNoZWxsKG5z SVByZXNTaGVsbCogYVNoZWxsKSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mU2hl bGxzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hlbGxBdChQUkludDMyIGFJbmRleCwg bnNJUHJlc1NoZWxsKiogYVNoZWxsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ YXJlbnREb2N1bWVudChuc0lEb2N1bWVudCoqIGFQYXJlbnQpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRQYXJlbnREb2N1bWVudChuc0lEb2N1bWVudCogYVBhcmVudCkgPSAwOwoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN1YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQgKmFDb250ZW50 LCBuc0lEb2N1bWVudCogYVN1YkRvYykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN1 YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQgKmFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJRG9jdW1lbnQqKiBhU3ViRG9jKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgRmluZENvbnRlbnRGb3JTdWJEb2N1bWVudChuc0lEb2N1bWVudCAqYURvY3VtZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50ICoqYUNvbnRlbnQp ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290Q29udGVudChuc0lDb250ZW50Kiog YVJvb3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJvb3RDb250ZW50KG5zSUNvbnRlbnQq IGFSb290KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENoaWxkQXQoUFJJbnQzMiBhSW5k ZXgsIG5zSUNvbnRlbnQqJiBhUmVzdWx0KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJ bmRleE9mKG5zSUNvbnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0 ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkQ291bnQoUFJJbnQzMiYgYUNvdW50KSA9 IDA7CiMgMjk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lEb2N1bWVudC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TnVtYmVyT2ZTdHlsZVNoZWV0cyhQUkJvb2wgYUluY2x1ZGVT cGVjaWFsU2hlZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy KiBhQ291bnQpID0gMDsKIyAzMDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSURv Y3VtZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5k ZXgsIFBSQm9vbCBhSW5jbHVkZVNwZWNpYWxTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJU3R5bGVTaGVldCoqIGFTaGVldCkgPSAwOwojIDMxNiAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFN0 eWxlU2hlZXRBdChuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMiBhSW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRJbmRleE9mU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQsIFBSSW50MzIqIGFJbmRl eCkgPSAwOwojIDMzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZVN0eWxlU2hlZXRzKG5zQ09NQXJyYXk8bnNJU3R5 bGVTaGVldD4mIGFPbGRTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NP TUFycmF5PG5zSVN0eWxlU2hlZXQ+JiBhTmV3U2hlZXRzKSA9IDA7CgoKCgogIHZpcnR1YWwgdm9p ZCBBZGRTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCwgUFJVaW50MzIgYUZsYWdzKSA9 IDA7CgoKCgogIHZpcnR1YWwgdm9pZCBSZW1vdmVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFT aGVldCkgPSAwOwoKCgoKCiAgdmlydHVhbCB2b2lkIFNldFN0eWxlU2hlZXRBcHBsaWNhYmxlU3Rh dGUobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSQm9vbCBhQXBwbGljYWJsZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0U2NyaXB0R2xvYmFsT2JqZWN0KG5zSVNjcmlwdEdsb2JhbE9iamVjdCoqIGFHbG9i YWxPYmplY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdEdsb2JhbE9iamVjdChu c0lTY3JpcHRHbG9iYWxPYmplY3QqIGFHbG9iYWxPYmplY3QpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTY3JpcHRMb2FkZXIobnNJU2NyaXB0TG9hZGVyKiogYVNjcmlwdExvYWRlcikg PSAwOwojIDM3NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIK ICB2aXJ0dWFsIHZvaWQgQWRkT2JzZXJ2ZXIobnNJRG9jdW1lbnRPYnNlcnZlciogYU9ic2VydmVy KSA9IDA7CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBSZW1vdmVPYnNlcnZlcihuc0lEb2N1bWVudE9i c2VydmVyKiBhT2JzZXJ2ZXIpID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luVXBkYXRl KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kVXBkYXRlKCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgQmVnaW5Mb2FkKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kTG9hZCgpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSUNvbnRlbnQqIGFDb250ZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRTdGF0ZXNDaGFuZ2VkKG5zSUNvbnRlbnQqIGFD b250ZW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFD b250ZW50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVN0YXRl TWFzaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlV2lsbENoYW5nZShuc0lDb250 ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU5h bWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0 cmlidXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSUNvbnRl bnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNw YWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU1vZFR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zQ2hhbmdlSGludCBhSGludCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgQ29udGVudEFwcGVuZGVkKG5zSUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmV3SW5kZXhJbkNvbnRhaW5lcikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEluc2VydGVkKG5zSUNvbnRlbnQqIGFDb250YWluZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRSZXBsYWNlZChuc0lDb250ZW50KiBhQ29udGFpbmVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFPbGRDaGlsZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhTmV3Q2hpbGQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgQ29udGVudFJlbW92ZWQobnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFN0eWxlUnVsZUNoYW5nZWQobnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDaGFuZ2VIaW50IGFIaW50KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTdHlsZVJ1bGVBZGRlZChuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlUmVtb3ZlZChuc0lTdHlsZVNoZWV0KiBhU3R5 bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5 bGVSdWxlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnQobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQq IGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50KiogYURPTUV2 ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKSA9IDA7Cgog IHZpcnR1YWwgUFJCb29sIEV2ZW50Q2FwdHVyZVJlZ2lzdHJhdGlvbihQUkludDMyIGFDYXB0dXJl ckluY3JlbWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVuZGluZ05vdGlmaWNh dGlvbnMoUFJCb29sIGFGbHVzaFJlZmxvd3M9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVWaWV3cz0wKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QW5kSW5jcmVtZW50Q29udGVudElEKFBSSW50MzIqIGFJRCkgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEJpbmRpbmdNYW5hZ2VyKG5zSUJpbmRpbmdNYW5hZ2VyKiogYVJlc3VsdCkg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVJbmZvTWFuYWdlcihuc0lOb2RlSW5mb01h bmFnZXIqJiBhTm9kZUluZm9NYW5hZ2VyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXQo bnNJQ2hhbm5lbCogYUNoYW5uZWwsIG5zSUxvYWRHcm91cCogYUxvYWRHcm91cCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgUmVzZXRUb1VSSShuc0lVUkkgKmFVUkksIG5zSUxvYWRHcm91cCogYUxv YWRHcm91cCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFJlZmVyZW5jZSh2b2lkICphS2V5 LCBuc0lTdXBwb3J0cyAqYVJlZmVyZW5jZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3Zl UmVmZXJlbmNlKHZvaWQgKmFLZXksIG5zSVN1cHBvcnRzICoqYU9sZFJlZmVyZW5jZSkgPSAwOwoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRhaW5lcihuc0lTdXBwb3J0cyAqYUNvbnRhaW5l cikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRhaW5lcihuc0lTdXBwb3J0cyAq KmFDb250YWluZXIpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRFdmVudE1hbmFn ZXIobnNJU2NyaXB0RXZlbnRNYW5hZ2VyICoqYVJlc3VsdCkgPSAwOwp9OwoKCgpleHRlcm4gbnNy ZXN1bHQKICAgTlNfTmV3SFRNTERvY3VtZW50KG5zSURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVz dWx0KTsKCmV4dGVybiBuc3Jlc3VsdAogICBOU19OZXdYTUxEb2N1bWVudChuc0lEb2N1bWVudCoq IGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCgoKCmV4dGVybiBuc3Jlc3VsdAogICBOU19OZXdJbWFn ZURvY3VtZW50KG5zSURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCmV4dGVybiBuc3Jl c3VsdAogICBOU19OZXdEb2N1bWVudEZyYWdtZW50KG5zSURPTURvY3VtZW50RnJhZ21lbnQqKiBh SW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQq IGFPd25lckRvY3VtZW50KTsKZXh0ZXJuIG5zcmVzdWx0CiAgIE5TX05ld0RPTURvY3VtZW50KG5z SURPTURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBj b25zdCBuc0FTdHJpbmcmIGFOYW1lc3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zQVN0cmluZyYgYVF1YWxpZmllZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgIG5zSURPTURv Y3VtZW50VHlwZSogYURvY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYUJhc2VV UkkpOwojIDY0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTURvY3VtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01Eb2N1bWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N Tm9kZS5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTm9kZS5oIgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vZG9tc3R1YnMuaCIgMQojIDE4ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL2RvbXN0dWJzLmgiCmlubGluZSBQUkJvb2wgRE9NU3RyaW5nSXNO dWxsKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykKewogIHJldHVybiBhU3RyaW5nLklzVm9pZCgp Owp9CmlubGluZSB2b2lkIFNldERPTVN0cmluZ1RvTnVsbChuc0FTdHJpbmcmIGFTdHJpbmcpCnsK ICBhU3RyaW5nLlRydW5jYXRlKCk7CiAgYVN0cmluZy5TZXRJc1ZvaWQoMSk7Cn0KdHlwZWRlZiBQ UlVpbnQ2NCBET01UaW1lU3RhbXA7CgpjbGFzcyBuc0lET01BdHRyOwoKY2xhc3MgbnNJRE9NQ0RB VEFTZWN0aW9uOwoKY2xhc3MgbnNJRE9NQ2hhcmFjdGVyRGF0YTsKCmNsYXNzIG5zSURPTUNvbW1l bnQ7CgpjbGFzcyBuc0lET01ET01JbXBsZW1lbnRhdGlvbjsKCmNsYXNzIG5zSURPTURvY3VtZW50 OwoKY2xhc3MgbnNJRE9NRG9jdW1lbnRGcmFnbWVudDsKCmNsYXNzIG5zSURPTURvY3VtZW50VHlw ZTsKCmNsYXNzIG5zSURPTUVsZW1lbnQ7CgpjbGFzcyBuc0lET01FbnRpdHk7CgpjbGFzcyBuc0lE T01FbnRpdHlSZWZlcmVuY2U7CgpjbGFzcyBuc0lET01OU0RvY3VtZW50OwoKY2xhc3MgbnNJRE9N TmFtZWROb2RlTWFwOwoKY2xhc3MgbnNJRE9NTm9kZTsKCmNsYXNzIG5zSURPTU5vZGVMaXN0OwoK Y2xhc3MgbnNJRE9NTm90YXRpb247CgpjbGFzcyBuc0lET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247 CgpjbGFzcyBuc0lET01UZXh0OwoKY2xhc3MgRE9NRXhjZXB0aW9uOwoKY2xhc3MgUmFuZ2VFeGNl cHRpb247CgpjbGFzcyBuc0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHls ZTsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFz cyBuc0lET01BYnN0cmFjdFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBu c0lET01XaW5kb3c7CgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdp bmRvd0NvbGxlY3Rpb247CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5B cnJheTsKCmNsYXNzIG5zSURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsK CmNsYXNzIG5zSURPTUJhclByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lE T01TY3JlZW47CgpjbGFzcyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFz cyBuc0lET01FdmVudFRhcmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBu c0lET01FdmVudEdyb3VwOwoKY2xhc3MgbnNJRE9NSFRNTEVsZW1lbnQ7CgpjbGFzcyBuc0lET01I VE1MRm9ybUVsZW1lbnQ7CgpjbGFzcyBuc0lET01IVE1MQ29sbGVjdGlvbjsKCmNsYXNzIG5zSURP TUNTU1ZhbHVlOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWVMaXN0OwoKY2xhc3MgbnNJRE9NQ1NTUHJp bWl0aXZlVmFsdWU7CgpjbGFzcyBuc0lET01DU1NSdWxlOwoKY2xhc3MgbnNJRE9NQ1NTUnVsZUxp c3Q7CgpjbGFzcyBuc0lET01DU1NTdHlsZVNoZWV0OwoKY2xhc3MgbnNJRE9NQ1NTU3R5bGVEZWNs YXJhdGlvbjsKCmNsYXNzIG5zSURPTUNvdW50ZXI7CgpjbGFzcyBuc0lET01SZWN0OwoKY2xhc3Mg bnNJRE9NUkdCQ29sb3I7CgpjbGFzcyBuc0lET01DU1NTdHlsZVJ1bGU7CgpjbGFzcyBuc0lET01D U1NTdHlsZVJ1bGVDb2xsZWN0aW9uOwoKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l bnQ7CgpjbGFzcyBuc0lET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudDsKCmNsYXNzIG5zSURPTVJh bmdlOwoKY2xhc3MgbnNJRE9NQ1JNRk9iamVjdDsKCmNsYXNzIG5zSURPTUNyeXB0bzsKCmNsYXNz IG5zSURPTVBrY3MxMTsKIyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2Rl LmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTTNOb2RlLmgiIDEK IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET00zTm9kZS5oIgpjbGFzcyBuc0lE T00zTm9kZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyOWZiMmExOCwgMHgx ZGQyLCAweDExYjIsIHsgMHg4ZCwgMHhkOSwgMHhhNiwgMHhmZCwgMHg1ZCwgMHg1YSwgMHhkMSwg MHgyZiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VVUkkobnNB U3RyaW5nICYgYUJhc2VVUkkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZURvY3Vt ZW50UG9zaXRpb24obnNJRE9NTm9kZSAqb3RoZXIsIFBSVWludDE2ICpfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IElzU2FtZU5vZGUobnNJRE9NTm9kZSAqb3RoZXIsIFBSQm9vbCAq X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb29rdXBOYW1lc3BhY2VQcmVmaXgo Y29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBuc0FTdHJpbmcg JiBwcmVmaXgsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTm9kZS5oIiAyCiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NTm9kZS5oIgpjbGFzcyBuc0lET01Ob2RlIDogcHVibGljIG5zSVN1cHBvcnRz IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDdjLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAw eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2RlLmgiCiAgZW51bSB7IEVMRU1FTlRf Tk9ERSA9IDFVIH07CgogIGVudW0geyBBVFRSSUJVVEVfTk9ERSA9IDJVIH07CgogIGVudW0geyBU RVhUX05PREUgPSAzVSB9OwoKICBlbnVtIHsgQ0RBVEFfU0VDVElPTl9OT0RFID0gNFUgfTsKCiAg ZW51bSB7IEVOVElUWV9SRUZFUkVOQ0VfTk9ERSA9IDVVIH07CgogIGVudW0geyBFTlRJVFlfTk9E RSA9IDZVIH07CgogIGVudW0geyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgPSA3VSB9OwoK ICBlbnVtIHsgQ09NTUVOVF9OT0RFID0gOFUgfTsKCiAgZW51bSB7IERPQ1VNRU5UX05PREUgPSA5 VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTBVIH07CgogIGVudW0geyBET0NV TUVOVF9GUkFHTUVOVF9OT0RFID0gMTFVIH07CgogIGVudW0geyBOT1RBVElPTl9OT0RFID0gMTJV IH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVOYW1lKG5zQVN0cmluZyAmIGFOb2RlTmFt ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlVmFsdWUobnNBU3RyaW5nICYgYU5v ZGVWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9kZVZhbHVlKGNvbnN0IG5zQVN0 cmluZyAmIGFOb2RlVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVR5cGUo UFJVaW50MTYgKmFOb2RlVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnRO b2RlKG5zSURPTU5vZGUgKiAqYVBhcmVudE5vZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q2hpbGROb2Rlcyhuc0lET01Ob2RlTGlzdCAqICphQ2hpbGROb2RlcykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRGaXJzdENoaWxkKG5zSURPTU5vZGUgKiAqYUZpcnN0Q2hpbGQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdENoaWxkKG5zSURPTU5vZGUgKiAqYUxhc3RD aGlsZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJRE9N Tm9kZSAqICphUHJldmlvdXNTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5l eHRTaWJsaW5nKG5zSURPTU5vZGUgKiAqYU5leHRTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEF0dHJpYnV0ZXMobnNJRE9NTmFtZWROb2RlTWFwICogKmFBdHRyaWJ1dGVzKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQg KiAqYU93bmVyRG9jdW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0QmVmb3Jl KG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICpyZWZDaGlsZCwgbnNJRE9NTm9kZSAq Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkKG5zSURPTU5v ZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICpvbGRDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJRE9NTm9kZSAqb2xkQ2hp bGQsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVu ZENoaWxkKG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNDaGlsZE5vZGVzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZU5vZGUoUFJCb29sIGRlZXAsIG5zSURPTU5vZGUgKipf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vcm1hbGl6ZSh2b2lkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IElzU3VwcG9ydGVkKGNvbnN0IG5zQVN0cmluZyAmIGZlYXR1cmUs IGNvbnN0IG5zQVN0cmluZyAmIHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXROYW1lc3BhY2VVUkkobnNBU3RyaW5nICYgYU5hbWVzcGFjZVVSSSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVmaXgobnNBU3RyaW5nICYgYVByZWZpeCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZml4KGNvbnN0IG5zQVN0cmluZyAmIGFQcmVm aXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxOYW1lKG5zQVN0cmluZyAmIGFM b2NhbE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQXR0cmlidXRlcyhQUkJvb2wg Kl9yZXR2YWwpID0gMDsKCiAgZW51bSB7IERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9 IDMyVSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HID0gMVUgfTsKCiAg ZW51bSB7IERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyA9IDJVIH07CgogIGVudW0geyBET0NV TUVOVF9QT1NJVElPTl9DT05UQUlOUyA9IDRVIH07CgogIGVudW0geyBET0NVTUVOVF9QT1NJVElP Tl9JU19DT05UQUlORUQgPSA4VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVN RU5UQVRJT05fU1BFQ0lGSUMgPSAxNlUgfTsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NRG9jdW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTURvY3VtZW50LmgiCmNsYXNzIG5zSURPTURvY3VtZW50IDogcHVibGljIG5zSURPTU5v ZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQ1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXREb2N0eXBlKG5zSURPTURvY3VtZW50VHlwZSAqICphRG9jdHlwZSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbihuc0lET01ET01JbXBsZW1lbnRh dGlvbiAqICphSW1wbGVtZW50YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9j dW1lbnRFbGVtZW50KG5zSURPTUVsZW1lbnQgKiAqYURvY3VtZW50RWxlbWVudCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFbGVtZW50KGNvbnN0IG5zQVN0cmluZyAmIHRhZ05hbWUs IG5zSURPTUVsZW1lbnQgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0 ZURvY3VtZW50RnJhZ21lbnQobnNJRE9NRG9jdW1lbnRGcmFnbWVudCAqKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVGV4dE5vZGUoY29uc3QgbnNBU3RyaW5nICYgZGF0 YSwgbnNJRE9NVGV4dCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRl Q29tbWVudChjb25zdCBuc0FTdHJpbmcgJiBkYXRhLCBuc0lET01Db21tZW50ICoqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDREFUQVNlY3Rpb24oY29uc3QgbnNBU3Ry aW5nICYgZGF0YSwgbnNJRE9NQ0RBVEFTZWN0aW9uICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgbnNBU3RyaW5nICYg dGFyZ2V0LCBjb25zdCBuc0FTdHJpbmcgJiBkYXRhLCBuc0lET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp b24gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUF0dHJpYnV0ZShj b25zdCBuc0FTdHJpbmcgJiBuYW1lLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDcmVhdGVFbnRpdHlSZWZlcmVuY2UoY29uc3QgbnNBU3RyaW5nICYgbmFt ZSwgbnNJRE9NRW50aXR5UmVmZXJlbmNlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBuc0FTdHJpbmcgJiB0YWduYW1lLCBuc0lE T01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW1wb3J0Tm9k ZShuc0lET01Ob2RlICppbXBvcnRlZE5vZGUsIFBSQm9vbCBkZWVwLCBuc0lET01Ob2RlICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFbGVtZW50TlMoY29uc3QgbnNB U3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBxdWFsaWZpZWROYW1lLCBu c0lET01FbGVtZW50ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVB dHRyaWJ1dGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmlu ZyAmIHF1YWxpZmllZE5hbWUsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNw YWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTU5vZGVMaXN0ICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50QnlJZChjb25zdCBuc0FT dHJpbmcgJiBlbGVtZW50SWQsIG5zSURPTUVsZW1lbnQgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDY1 ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTVhNTERvY3VtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01YTUxEb2N1bWVudC5oIgpjbGFzcyBuc0lET01YTUxEb2N1bWVudCA6IHB1YmxpYyBuc0lET01E b2N1bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4ODE2ZDAwMywgMHhlN2M4LCAweDQwNjUsIHsgMHg4OCwg MHgyNywgMHg4MiwgMHg5YiwgMHg4ZCwgMHgwNywgMHhiNiwgMHhlMCB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoY29uc3QgbnNBU3RyaW5nICYgdXJsKSA9IDA7CiMg NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWE1MRG9jdW1lbnQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEV2YWx1YXRlRklYcHRyKGNvbnN0IG5zQVN0cmluZyAmIGV4cHJlc3Npb24s IG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2NiAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0RvY3VtZW50LmgiIDEK IyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0RvY3VtZW50LmgiCmNsYXNz IG5zSUJveE9iamVjdDsKCmNsYXNzIG5zSURPTUxvY2F0aW9uOwojIDI5ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTU5TRG9jdW1lbnQuaCIKY2xhc3MgbnNJRE9NTlNEb2N1bWVudCA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjZCwgMHgxNWIzLCAweDEx ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoYXJhY3RlclNldChuc0FTdHJp bmcgJiBhQ2hhcmFjdGVyU2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpcihuc0FT dHJpbmcgJiBhRGlyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXIoY29uc3QgbnNBU3Ry aW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2NhdGlvbihuc0lET01M b2NhdGlvbiAqICphTG9jYXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGl0bGUo bnNBU3RyaW5nICYgYVRpdGxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUaXRsZShjb25z dCBuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVu dFR5cGUobnNBU3RyaW5nICYgYUNvbnRlbnRUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEJveE9iamVjdEZvcihuc0lET01FbGVtZW50ICplbHQsIG5zSUJveE9iamVjdCAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm94T2JqZWN0Rm9yKG5zSURPTUVsZW1l bnQgKmVsdCwgbnNJQm94T2JqZWN0ICpib3hPYmplY3QpID0gMDsKCn07CiMgNjcgIm5zRE9NQ2xh c3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnQu aCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50LmgiCmNsYXNz IG5zSURPTUV2ZW50VGFyZ2V0OwojIDI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUV2ZW50LmgiCmNsYXNzIG5zSURPTUV2ZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweGE2NmI3YjgwLCAweGZmNDYsIDB4YmQ5NywgeyAweDAwLCAweDgwLCAweDVmLCAweDhh LCAweGUzLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudC5oIgogIGVudW0geyBDQVBUVVJJTkdfUEhBU0Ug PSAxVSB9OwoKCgoKICBlbnVtIHsgQVRfVEFSR0VUID0gMlUgfTsKCgoKCiAgZW51bSB7IEJVQkJM SU5HX1BIQVNFID0gM1UgfTsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBU3Ry aW5nICYgYVR5cGUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0lE T01FdmVudFRhcmdldCAqICphVGFyZ2V0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q3VycmVudFRhcmdldChuc0lET01FdmVudFRhcmdldCAqICphQ3VycmVudFRhcmdldCkgPSAw OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRQaGFzZShQUlVpbnQxNiAqYUV2ZW50 UGhhc2UpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1YmJsZXMoUFJCb29sICph QnViYmxlcykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbmNlbGFibGUoUFJC b29sICphQ2FuY2VsYWJsZSkgPSAwOwojIDEwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01FdmVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGltZVN0YW1wKERPTVRpbWVTdGFt cCAqYVRpbWVTdGFtcCkgPSAwOwojIDEyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01FdmVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcFByb3BhZ2F0aW9uKHZvaWQpID0gMDsK IyAxMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnQuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IFByZXZlbnREZWZhdWx0KHZvaWQpID0gMDsKIyAxNjQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NRXZlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRFdmVudChj b25zdCBuc0FTdHJpbmcgJiBldmVudFR5cGVBcmcsIFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9v bCBjYW5jZWxhYmxlQXJnKSA9IDA7Cgp9OwojIDY4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TRXZlbnQuaCIgMQojIDI1ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TRXZlbnQuaCIKY2xhc3MgbnNJRE9NTlNFdmVu dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhOTA5NzdkZCwgMHhhODBiLCAw eDQ5YmIsIHsgMHg4MSwgMHg2OSwgMHhjYywgMHg5MCwgMHhlMywgMHhkMSwgMHhkYSwgMHg5OCB9 fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBNT1VTRURPV04gPSAxIH07CgogIGVudW0geyBNT1VT RVVQID0gMiB9OwoKICBlbnVtIHsgTU9VU0VPVkVSID0gNCB9OwoKICBlbnVtIHsgTU9VU0VPVVQg PSA4IH07CgogIGVudW0geyBNT1VTRU1PVkUgPSAxNiB9OwoKICBlbnVtIHsgTU9VU0VEUkFHID0g MzIgfTsKCiAgZW51bSB7IENMSUNLID0gNjQgfTsKCiAgZW51bSB7IERCTENMSUNLID0gMTI4IH07 CgogIGVudW0geyBLRVlET1dOID0gMjU2IH07CgogIGVudW0geyBLRVlVUCA9IDUxMiB9OwoKICBl bnVtIHsgS0VZUFJFU1MgPSAxMDI0IH07CgogIGVudW0geyBEUkFHRFJPUCA9IDIwNDggfTsKCiAg ZW51bSB7IEZPQ1VTID0gNDA5NiB9OwoKICBlbnVtIHsgQkxVUiA9IDgxOTIgfTsKCiAgZW51bSB7 IFNFTEVDVCA9IDE2Mzg0IH07CgogIGVudW0geyBDSEFOR0UgPSAzMjc2OCB9OwoKICBlbnVtIHsg UkVTRVQgPSA2NTUzNiB9OwoKICBlbnVtIHsgU1VCTUlUID0gMTMxMDcyIH07CgogIGVudW0geyBT Q1JPTEwgPSAyNjIxNDQgfTsKCiAgZW51bSB7IExPQUQgPSA1MjQyODggfTsKCiAgZW51bSB7IFVO TE9BRCA9IDEwNDg1NzYgfTsKCiAgZW51bSB7IFhGRVJfRE9ORSA9IDIwOTcxNTIgfTsKCiAgZW51 bSB7IEFCT1JUID0gNDE5NDMwNCB9OwoKICBlbnVtIHsgRVJST1IgPSA4Mzg4NjA4IH07CgogIGVu dW0geyBMT0NBVEUgPSAxNjc3NzIxNiB9OwoKICBlbnVtIHsgTU9WRSA9IDMzNTU0NDMyIH07Cgog IGVudW0geyBSRVNJWkUgPSA2NzEwODg2NCB9OwoKICBlbnVtIHsgRk9SV0FSRCA9IDEzNDIxNzcy OCB9OwoKICBlbnVtIHsgSEVMUCA9IDI2ODQzNTQ1NiB9OwoKICBlbnVtIHsgQkFDSyA9IDUzNjg3 MDkxMiB9OwoKICBlbnVtIHsgVEVYVCA9IDEwNzM3NDE4MjQgfTsKCiAgZW51bSB7IEFMVF9NQVNL ID0gMSB9OwoKICBlbnVtIHsgQ09OVFJPTF9NQVNLID0gMiB9OwoKICBlbnVtIHsgU0hJRlRfTUFT SyA9IDQgfTsKCiAgZW51bSB7IE1FVEFfTUFTSyA9IDggfTsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFPcmlnaW5hbFRhcmdldCkg PSAwOwojIDExNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0V2ZW50LmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRFeHBsaWNpdE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFy Z2V0ICogKmFFeHBsaWNpdE9yaWdpbmFsVGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFRtcDEzUmVhbE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFUbXAxM1Jl YWxPcmlnaW5hbFRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmV2ZW50QnViYmxl KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudENhcHR1cmUodm9pZCkgPSAw OwoKfTsKIyA2OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01LZXlFdmVudC5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NS2V5RXZlbnQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TVVJRXZlbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVVJRXZl bnQuaCIKY2xhc3MgbnNJRE9NVUlFdmVudCA6IHB1YmxpYyBuc0lET01FdmVudCB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHhhNmNmOTBjMywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFZpZXcobnNJRE9NQWJzdHJhY3RWaWV3ICogKmFWaWV3KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldERldGFpbChQUkludDMyICphRGV0YWlsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEluaXRVSUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5C dWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01BYnN0cmFjdFZpZXcgKnZpZXdB cmcsIFBSSW50MzIgZGV0YWlsQXJnKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUtleUV2ZW50LmgiIDIKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01LZXlFdmVudC5oIgpjbGFzcyBuc0lET01LZXlFdmVudCA6IHB1YmxpYyBuc0lET01V SUV2ZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweDAyOGUwZTZlLCAweDhiMDEsIDB4MTFkMywgeyAweGFhLCAw eGU3LCAweDAwLCAweDEwLCAweDgzLCAweDhhLCAweDMxLCAweDIzIH19OyByZXR1cm4gaWlkO30K CiAgZW51bSB7IERPTV9WS19DQU5DRUwgPSAzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0hFTFAgPSA2 VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU1BBQ0UgPSA4VSB9OwoKICBlbnVtIHsgRE9NX1ZL X1RBQiA9IDlVIH07CgogIGVudW0geyBET01fVktfQ0xFQVIgPSAxMlUgfTsKCiAgZW51bSB7IERP TV9WS19SRVRVUk4gPSAxM1UgfTsKCiAgZW51bSB7IERPTV9WS19FTlRFUiA9IDE0VSB9OwoKICBl bnVtIHsgRE9NX1ZLX1NISUZUID0gMTZVIH07CgogIGVudW0geyBET01fVktfQ09OVFJPTCA9IDE3 VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0FMVCA9IDE4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BBVVNF ID0gMTlVIH07CgogIGVudW0geyBET01fVktfQ0FQU19MT0NLID0gMjBVIH07CgogIGVudW0geyBE T01fVktfRVNDQVBFID0gMjdVIH07CgogIGVudW0geyBET01fVktfU1BBQ0UgPSAzMlUgfTsKCiAg ZW51bSB7IERPTV9WS19QQUdFX1VQID0gMzNVIH07CgogIGVudW0geyBET01fVktfUEFHRV9ET1dO ID0gMzRVIH07CgogIGVudW0geyBET01fVktfRU5EID0gMzVVIH07CgogIGVudW0geyBET01fVktf SE9NRSA9IDM2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0xFRlQgPSAzN1UgfTsKCiAgZW51bSB7IERP TV9WS19VUCA9IDM4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1JJR0hUID0gMzlVIH07CgogIGVudW0g eyBET01fVktfRE9XTiA9IDQwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BSSU5UU0NSRUVOID0gNDRV IH07CgogIGVudW0geyBET01fVktfSU5TRVJUID0gNDVVIH07CgogIGVudW0geyBET01fVktfREVM RVRFID0gNDZVIH07CgogIGVudW0geyBET01fVktfMCA9IDQ4VSB9OwoKICBlbnVtIHsgRE9NX1ZL XzEgPSA0OVUgfTsKCiAgZW51bSB7IERPTV9WS18yID0gNTBVIH07CgogIGVudW0geyBET01fVktf MyA9IDUxVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzQgPSA1MlUgfTsKCiAgZW51bSB7IERPTV9WS181 ID0gNTNVIH07CgogIGVudW0geyBET01fVktfNiA9IDU0VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzcg PSA1NVUgfTsKCiAgZW51bSB7IERPTV9WS184ID0gNTZVIH07CgogIGVudW0geyBET01fVktfOSA9 IDU3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NFTUlDT0xPTiA9IDU5VSB9OwoKICBlbnVtIHsgRE9N X1ZLX0VRVUFMUyA9IDYxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0EgPSA2NVUgfTsKCiAgZW51bSB7 IERPTV9WS19CID0gNjZVIH07CgogIGVudW0geyBET01fVktfQyA9IDY3VSB9OwoKICBlbnVtIHsg RE9NX1ZLX0QgPSA2OFUgfTsKCiAgZW51bSB7IERPTV9WS19FID0gNjlVIH07CgogIGVudW0geyBE T01fVktfRiA9IDcwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0cgPSA3MVUgfTsKCiAgZW51bSB7IERP TV9WS19IID0gNzJVIH07CgogIGVudW0geyBET01fVktfSSA9IDczVSB9OwoKICBlbnVtIHsgRE9N X1ZLX0ogPSA3NFUgfTsKCiAgZW51bSB7IERPTV9WS19LID0gNzVVIH07CgogIGVudW0geyBET01f VktfTCA9IDc2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX00gPSA3N1UgfTsKCiAgZW51bSB7IERPTV9W S19OID0gNzhVIH07CgogIGVudW0geyBET01fVktfTyA9IDc5VSB9OwoKICBlbnVtIHsgRE9NX1ZL X1AgPSA4MFUgfTsKCiAgZW51bSB7IERPTV9WS19RID0gODFVIH07CgogIGVudW0geyBET01fVktf UiA9IDgyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1MgPSA4M1UgfTsKCiAgZW51bSB7IERPTV9WS19U ID0gODRVIH07CgogIGVudW0geyBET01fVktfVSA9IDg1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1Yg PSA4NlUgfTsKCiAgZW51bSB7IERPTV9WS19XID0gODdVIH07CgogIGVudW0geyBET01fVktfWCA9 IDg4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1kgPSA4OVUgfTsKCiAgZW51bSB7IERPTV9WS19aID0g OTBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMCA9IDk2VSB9OwoKICBlbnVtIHsgRE9NX1ZL X05VTVBBRDEgPSA5N1UgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQyID0gOThVIH07CgogIGVu dW0geyBET01fVktfTlVNUEFEMyA9IDk5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDQgPSAx MDBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFENSA9IDEwMVUgfTsKCiAgZW51bSB7IERPTV9W S19OVU1QQUQ2ID0gMTAyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDcgPSAxMDNVIH07Cgog IGVudW0geyBET01fVktfTlVNUEFEOCA9IDEwNFUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ5 ID0gMTA1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX01VTFRJUExZID0gMTA2VSB9OwoKICBlbnVtIHsg RE9NX1ZLX0FERCA9IDEwN1UgfTsKCiAgZW51bSB7IERPTV9WS19TRVBBUkFUT1IgPSAxMDhVIH07 CgogIGVudW0geyBET01fVktfU1VCVFJBQ1QgPSAxMDlVIH07CgogIGVudW0geyBET01fVktfREVD SU1BTCA9IDExMFUgfTsKCiAgZW51bSB7IERPTV9WS19ESVZJREUgPSAxMTFVIH07CgogIGVudW0g eyBET01fVktfRjEgPSAxMTJVIH07CgogIGVudW0geyBET01fVktfRjIgPSAxMTNVIH07CgogIGVu dW0geyBET01fVktfRjMgPSAxMTRVIH07CgogIGVudW0geyBET01fVktfRjQgPSAxMTVVIH07Cgog IGVudW0geyBET01fVktfRjUgPSAxMTZVIH07CgogIGVudW0geyBET01fVktfRjYgPSAxMTdVIH07 CgogIGVudW0geyBET01fVktfRjcgPSAxMThVIH07CgogIGVudW0geyBET01fVktfRjggPSAxMTlV IH07CgogIGVudW0geyBET01fVktfRjkgPSAxMjBVIH07CgogIGVudW0geyBET01fVktfRjEwID0g MTIxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMSA9IDEyMlUgfTsKCiAgZW51bSB7IERPTV9WS19G MTIgPSAxMjNVIH07CgogIGVudW0geyBET01fVktfRjEzID0gMTI0VSB9OwoKICBlbnVtIHsgRE9N X1ZLX0YxNCA9IDEyNVUgfTsKCiAgZW51bSB7IERPTV9WS19GMTUgPSAxMjZVIH07CgogIGVudW0g eyBET01fVktfRjE2ID0gMTI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxNyA9IDEyOFUgfTsKCiAg ZW51bSB7IERPTV9WS19GMTggPSAxMjlVIH07CgogIGVudW0geyBET01fVktfRjE5ID0gMTMwVSB9 OwoKICBlbnVtIHsgRE9NX1ZLX0YyMCA9IDEzMVUgfTsKCiAgZW51bSB7IERPTV9WS19GMjEgPSAx MzJVIH07CgogIGVudW0geyBET01fVktfRjIyID0gMTMzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Yy MyA9IDEzNFUgfTsKCiAgZW51bSB7IERPTV9WS19GMjQgPSAxMzVVIH07CgogIGVudW0geyBET01f VktfTlVNX0xPQ0sgPSAxNDRVIH07CgogIGVudW0geyBET01fVktfU0NST0xMX0xPQ0sgPSAxNDVV IH07CgogIGVudW0geyBET01fVktfQ09NTUEgPSAxODhVIH07CgogIGVudW0geyBET01fVktfUEVS SU9EID0gMTkwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NMQVNIID0gMTkxVSB9OwoKICBlbnVtIHsg RE9NX1ZLX0JBQ0tfUVVPVEUgPSAxOTJVIH07CgogIGVudW0geyBET01fVktfT1BFTl9CUkFDS0VU ID0gMjE5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU0xBU0ggPSAyMjBVIH07CgogIGVudW0g eyBET01fVktfQ0xPU0VfQlJBQ0tFVCA9IDIyMVUgfTsKCiAgZW51bSB7IERPTV9WS19RVU9URSA9 IDIyMlUgfTsKCiAgZW51bSB7IERPTV9WS19NRVRBID0gMjI0VSB9OwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDaGFyQ29kZShQUlVpbnQzMiAqYUNoYXJDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEtleUNvZGUoUFJVaW50MzIgKmFLZXlDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEFsdEtleShQUkJvb2wgKmFBbHRLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q3RybEtleShQUkJvb2wgKmFDdHJsS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFNoaWZ0S2V5KFBSQm9vbCAqYVNoaWZ0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE1ldGFLZXkoUFJCb29sICphTWV0YUtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ bml0S2V5RXZlbnQoY29uc3QgbnNBU3RyaW5nICYgdHlwZUFyZywgUFJCb29sIGNhbkJ1YmJsZUFy ZywgUFJCb29sIGNhbmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyAqdmlld0FyZywgUFJC b29sIGN0cmxLZXlBcmcsIFBSQm9vbCBhbHRLZXlBcmcsIFBSQm9vbCBzaGlmdEtleUFyZywgUFJC b29sIG1ldGFLZXlBcmcsIFBSVWludDMyIGtleUNvZGVBcmcsIFBSVWludDMyIGNoYXJDb2RlQXJn KSA9IDA7Cgp9OwojIDcwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50TGlzdGVuZXIuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50TGlzdGVuZXIuaCIKY2xhc3MgbnNJRE9NRXZlbnRMaXN0 ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkZjMxYzEyMCwgMHhkZWQ2 LCAweDExZDEsIHsgMHhiZCwgMHg4NSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHhm NCB9fTsgcmV0dXJuIGlpZDt9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RXZlbnRMaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJRE9NRXZl bnQgKmV2ZW50KSA9IDA7Cgp9OwojIDcxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIiAxCiMgMTcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgpjbGFzcyBuc0lQcmVzQ29u dGV4dDsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lDb250ZW50 Vmlld2VyOwoKY2xhc3MgbnNJVVJJQ29udGVudExpc3RlbmVyOwoKY2xhc3MgbnNJQ2hyb21lRXZl bnRIYW5kbGVyOwoKY2xhc3MgbnNJRG9jU2hlbGxMb2FkSW5mbzsKCmNsYXNzIG5zSURvY3VtZW50 Q2hhcnNldEluZm87CgpjbGFzcyBuc0lXZWJOYXZpZ2F0aW9uOwoKY2xhc3MgbnNJU2ltcGxlRW51 bWVyYXRvcjsKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwoKY2xhc3MgbnNJUmVxdWVzdDsKCmNsYXNz IG5zSVNIRW50cnk7CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NT aGVsbC5oIgpjbGFzcyBuc0lEb2NTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg2OWU1ZGUwMCwgMHg3YjhiLCAweDExZDMsIHsgMHhhZiwgMHg2MSwgMHgwMCwgMHhhMCwg MHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsgcmV0dXJuIGlpZDt9CiMgNzEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9h ZFVSSShuc0lVUkkgKnVyaSwgbnNJRG9jU2hlbGxMb2FkSW5mbyAqbG9hZEluZm8sIFBSVWludDMy IGFMb2FkRmxhZ3MsIFBSQm9vbCBmaXJzdFBhcnR5KSA9IDA7CiMgOTMgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZFN0 cmVhbShuc0lJbnB1dFN0cmVhbSAqYVN0cmVhbSwgbnNJVVJJICphVVJJLCBjb25zdCBuc0FDU3Ry aW5nICYgYUNvbnRlbnRUeXBlLCBjb25zdCBuc0FDU3RyaW5nICYgYUNvbnRlbnRDaGFyc2V0LCBu c0lEb2NTaGVsbExvYWRJbmZvICphTG9hZEluZm8pID0gMDsKIyAxMTUgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW50ZXJu YWxMb2FkKG5zSVVSSSAqYVVSSSwgbnNJVVJJICphUmVmZXJyZXIsIG5zSVN1cHBvcnRzICphT3du ZXIsIFBSQm9vbCBhSW5oZXJpdE93bmVyLCBjb25zdCBQUlVuaWNoYXIgKmFXaW5kb3dUYXJnZXQs IG5zSUlucHV0U3RyZWFtICphUG9zdERhdGFTdHJlYW0sIG5zSUlucHV0U3RyZWFtICphSGVhZGVy c1N0cmVhbSwgUFJVaW50MzIgYUxvYWRGbGFncywgbnNJU0hFbnRyeSAqYVNIRW50cnksIFBSQm9v bCBmaXJzdFBhcnR5LCBuc0lEb2NTaGVsbCAqKmFEb2NTaGVsbCwgbnNJUmVxdWVzdCAqKmFSZXF1 ZXN0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVMb2FkSW5mbyhuc0lEb2NT aGVsbExvYWRJbmZvICoqbG9hZEluZm8pID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBy ZXBhcmVGb3JOZXdDb250ZW50TW9kZWwodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IFNldEN1cnJlbnRVUkkobnNJVVJJICphVVJJKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBGaXJlVW5sb2FkTm90aWZpY2F0aW9uKHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UHJlc0NvbnRleHQobnNJUHJlc0NvbnRleHQgKiAqYVByZXNDb250ZXh0KSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXNTaGVsbChuc0lQcmVzU2hlbGwgKiAqYVBy ZXNTaGVsbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxkZXN0UHJlc1NoZWxs KG5zSVByZXNTaGVsbCAqICphRWxkZXN0UHJlc1NoZWxsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRDb250ZW50Vmlld2VyKG5zSUNvbnRlbnRWaWV3ZXIgKiAqYUNvbnRlbnRWaWV3 ZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENocm9tZUV2ZW50SGFuZGxlcihu c0lDaHJvbWVFdmVudEhhbmRsZXIgKiAqYUNocm9tZUV2ZW50SGFuZGxlcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Q2hyb21lRXZlbnRIYW5kbGVyKG5zSUNocm9tZUV2ZW50SGFuZGxlciAq IGFDaHJvbWVFdmVudEhhbmRsZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh cmVudFVSSUNvbnRlbnRMaXN0ZW5lcihuc0lVUklDb250ZW50TGlzdGVuZXIgKiAqYVBhcmVudFVS SUNvbnRlbnRMaXN0ZW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFyZW50VVJJQ29u dGVudExpc3RlbmVyKG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqIGFQYXJlbnRVUklDb250ZW50TGlz dGVuZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50Q2hhcnNldElu Zm8obnNJRG9jdW1lbnRDaGFyc2V0SW5mbyAqICphRG9jdW1lbnRDaGFyc2V0SW5mbykgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9jdW1lbnRDaGFyc2V0SW5mbyhuc0lEb2N1bWVudENoYXJz ZXRJbmZvICogYURvY3VtZW50Q2hhcnNldEluZm8pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QWxsb3dQbHVnaW5zKFBSQm9vbCAqYUFsbG93UGx1Z2lucykgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0QWxsb3dQbHVnaW5zKFBSQm9vbCBhQWxsb3dQbHVnaW5zKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93SmF2YXNjcmlwdChQUkJvb2wgKmFBbGxvd0phdmFz Y3JpcHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsbG93SmF2YXNjcmlwdChQUkJvb2wg YUFsbG93SmF2YXNjcmlwdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGxvd01l dGFSZWRpcmVjdHMoUFJCb29sICphQWxsb3dNZXRhUmVkaXJlY3RzKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRBbGxvd01ldGFSZWRpcmVjdHMoUFJCb29sIGFBbGxvd01ldGFSZWRpcmVjdHMp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxsb3dTdWJmcmFtZXMoUFJCb29sICph QWxsb3dTdWJmcmFtZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsbG93U3ViZnJhbWVz KFBSQm9vbCBhQWxsb3dTdWJmcmFtZXMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QWxsb3dJbWFnZXMoUFJCb29sICphQWxsb3dJbWFnZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFsbG93SW1hZ2VzKFBSQm9vbCBhQWxsb3dJbWFnZXMpID0gMDsKIyAyMzkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIGVudW0geyBFTlVNRVJBVEVf Rk9SV0FSRFMgPSAwIH07CgogIGVudW0geyBFTlVNRVJBVEVfQkFDS1dBUkRTID0gMSB9OwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXREb2NTaGVsbEVudW1lcmF0b3IoUFJJbnQzMiBhSXRlbVR5cGUs IFBSSW50MzIgYURpcmVjdGlvbiwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsK CgoKCiAgZW51bSB7IEFQUF9UWVBFX1VOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQVBQX1RZUEVf TUFJTCA9IDFVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFwcFR5cGUoUFJVaW50MzIgKmFB cHBUeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBcHBUeXBlKFBSVWludDMyIGFBcHBU eXBlKSA9IDA7CiMgMjY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hl bGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFpvb20oZmxvYXQgKmFab29tKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRab29tKGZsb2F0IGFab29tKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE1hcmdpbldpZHRoKFBSSW50MzIgKmFNYXJnaW5XaWR0aCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFyZ2luV2lkdGgoUFJJbnQzMiBhTWFyZ2luV2lkdGgpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luSGVpZ2h0KFBSSW50MzIgKmFNYXJnaW5IZWlnaHQpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1hcmdpbkhlaWdodChQUkludDMyIGFNYXJnaW5IZWln aHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGFzRm9jdXMoUFJCb29sICphSGFzRm9j dXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhhc0ZvY3VzKFBSQm9vbCBhSGFzRm9jdXMp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FudmFzSGFzRm9jdXMoUFJCb29sICphQ2Fu dmFzSGFzRm9jdXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhbnZhc0hhc0ZvY3VzKFBS Qm9vbCBhQ2FudmFzSGFzRm9jdXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVGFiVG9UcmVl T3duZXIoUFJCb29sIGZvcndhcmQsIFBSQm9vbCAqdG9va0ZvY3VzKSA9IDA7CgoKCgogIGVudW0g eyBCVVNZX0ZMQUdTX05PTkUgPSAwVSB9OwoKICBlbnVtIHsgQlVTWV9GTEFHU19CVVNZID0gMVUg fTsKCiAgZW51bSB7IEJVU1lfRkxBR1NfQkVGT1JFX1BBR0VfTE9BRCA9IDJVIH07CgogIGVudW0g eyBCVVNZX0ZMQUdTX1BBR0VfTE9BRElORyA9IDRVIH07CgoKCgogIGVudW0geyBMT0FEX0NNRF9O T1JNQUwgPSAxVSB9OwoKICBlbnVtIHsgTE9BRF9DTURfUkVMT0FEID0gMlUgfTsKCiAgZW51bSB7 IExPQURfQ01EX0hJU1RPUlkgPSA0VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdXN5Rmxh Z3MoUFJVaW50MzIgKmFCdXN5RmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9h ZFR5cGUoUFJVaW50MzIgKmFMb2FkVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9h ZFR5cGUoUFJVaW50MzIgYUxvYWRUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzQmVp bmdEZXN0cm95ZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDc0ICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hlbGxU cmVlSXRlbS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NT aGVsbFRyZWVJdGVtLmgiCmNsYXNzIG5zSURvY1NoZWxsVHJlZU93bmVyOwojIDMyICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hlbGxUcmVlSXRlbS5oIgpjbGFzcyBuc0lE b2NTaGVsbFRyZWVJdGVtIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGI1MmFl NzgwLCAweGE5NjYsIDB4MTFkMywgeyAweGFmLCAweGM3LCAweDAwLCAweGEwLCAweDI0LCAweGZm LCAweGMwLCAweDhjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFt ZShQUlVuaWNoYXIgKiAqYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29u c3QgUFJVbmljaGFyICogYU5hbWUpID0gMDsKIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv Y3NoZWxsL25zSURvY1NoZWxsVHJlZUl0ZW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5hbWVFcXVh bHMoY29uc3QgUFJVbmljaGFyICpuYW1lLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7 IHR5cGVDaHJvbWUgPSAwIH07CgogIGVudW0geyB0eXBlQ29udGVudCA9IDEgfTsKCiAgZW51bSB7 IHR5cGVDb250ZW50V3JhcHBlciA9IDIgfTsKCiAgZW51bSB7IHR5cGVDaHJvbWVXcmFwcGVyID0g MyB9OwoKICBlbnVtIHsgdHlwZUFsbCA9IDIxNDc0ODM2NDcgfTsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0SXRlbVR5cGUoUFJJbnQzMiAqYUl0ZW1UeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRJdGVtVHlwZShQUkludDMyIGFJdGVtVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRlbSAqICphUGFyZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRlbSAqIGFQYXJlbnQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2FtZVR5cGVQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRl bSAqICphU2FtZVR5cGVQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFRy ZWVJdGVtKG5zSURvY1NoZWxsVHJlZUl0ZW0gKiAqYVJvb3RUcmVlSXRlbSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTYW1lVHlwZVJvb3RUcmVlSXRlbShuc0lEb2NTaGVsbFRyZWVJdGVt ICogKmFTYW1lVHlwZVJvb3RUcmVlSXRlbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5k SXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pY2hhciAqbmFtZSwgbnNJU3VwcG9ydHMgKmFSZXF1ZXN0 b3IsIG5zSURvY1NoZWxsVHJlZUl0ZW0gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFRyZWVPd25lcihuc0lEb2NTaGVsbFRyZWVPd25lciAqICphVHJlZU93bmVyKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUcmVlT3duZXIobnNJRG9jU2hlbGxUcmVlT3duZXIgKiBh VHJlZU93bmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkT2Zmc2V0KFBSSW50 MzIgKmFDaGlsZE9mZnNldCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2hpbGRPZmZzZXQo UFJJbnQzMiBhQ2hpbGRPZmZzZXQpID0gMDsKCn07CiMgNzUgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbFRyZWVOb2Rl LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvY3NoZWxsL25zSURvY1NoZWxsVHJl ZU5vZGUuaCIKY2xhc3MgbnNJRG9jU2hlbGxUcmVlTm9kZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHhjMDk0ZjgxMCwgMHhhOGFiLCAweDExZDMsIHsgMHhhZiwgMHhjNiwgMHgw MCwgMHhhMCwgMHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldENoaWxkQ291bnQoUFJJbnQzMiAqYUNoaWxkQ291bnQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgQWRkQ2hpbGQobnNJRG9jU2hlbGxUcmVlSXRlbSAqY2hpbGQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJRG9jU2hlbGxUcmVlSXRlbSAq Y2hpbGQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hpbGRBdChQUkludDMyIGluZGV4 LCBuc0lEb2NTaGVsbFRyZWVJdGVtICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBGaW5kQ2hpbGRXaXRoTmFtZShjb25zdCBQUlVuaWNoYXIgKmFOYW1lLCBQUkJvb2wgYVJlY3Vy c2UsIFBSQm9vbCBhU2FtZVR5cGUsIG5zSURvY1NoZWxsVHJlZUl0ZW0gKmFSZXF1ZXN0b3IsIG5z SURvY1NoZWxsVHJlZUl0ZW0gKipfcmV0dmFsKSA9IDA7Cgp9OwojIDc2ICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdEV4dGVybmFs TmFtZVNldC5oIiAxCiMgNDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0RXh0 ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlwdENvbnRleHQ7CiMgNTggIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0RXh0ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlw dEV4dGVybmFsTmFtZVNldCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw ZGEsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO307CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlh bGl6ZU5hbWVTZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpID0gMDsKfTsKIyA3 NyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAibnNKU1V0aWxzLmgiIDEKIyA1MyAibnNKU1V0 aWxzLmgiCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CmNsYXNzIG5zSVNjcmlwdENvbnRleHQ7 CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdDsKY2xhc3MgbnNJU2NyaXB0U2VjdXJpdHlNYW5h Z2VyOwoKY2xhc3MgbnNKU1V0aWxzIHsKcHVibGljOgogIHN0YXRpYyBKU0Jvb2wgR2V0Q2FsbGlu Z0xvY2F0aW9uKEpTQ29udGV4dCogYUNvbnRleHQsIGNvbnN0IGNoYXIqICphRmlsZW5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgKmFMaW5lbm8pOwoKICBz dGF0aWMgdm9pZCBDb252ZXJ0U3RyaW5nVG9KU1ZhbChjb25zdCBuc1N0cmluZyYgYVByb3AsIEpT Q29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2 YWwqIGFSZXR1cm4pOwoKICBzdGF0aWMgUFJCb29sIENvbnZlcnRKU1ZhbFRvWFBDT2JqZWN0KG5z SVN1cHBvcnRzKiogYVN1cHBvcnRzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCogYUNvbnRleHQsIGpzdmFsIGFWYWx1 ZSk7CgogIHN0YXRpYyB2b2lkIENvbnZlcnRKU1ZhbFRvU3RyaW5nKG5zQVN0cmluZyYgYVN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQqIGFDb250ZXh0 LCBqc3ZhbCBhVmFsdWUpOwoKICBzdGF0aWMgUFJCb29sIENvbnZlcnRKU1ZhbFRvVWludDMyKFBS VWludDMyKiBhUHJvcCwgSlNDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGpzdmFsIGFWYWx1ZSk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRTdGF0 aWNTY3JpcHRHbG9iYWwoSlNDb250ZXh0KiBhQ29udGV4dCwgSlNPYmplY3QqIGFPYmosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRHbG9iYWxPYmplY3Qq KiBhR2xvYmFsKTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldFN0YXRpY1NjcmlwdENvbnRleHQoSlND b250ZXh0KiBhQ29udGV4dCwgSlNPYmplY3QqIGFPYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJU2NyaXB0Q29udGV4dCoqIGFTY3JpcHRDb250ZXh0KTsKCiAg c3RhdGljIG5zcmVzdWx0IEdldER5bmFtaWNTY3JpcHRHbG9iYWwoSlNDb250ZXh0ICphQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRHbG9i YWxPYmplY3QqKiBhR2xvYmFsKTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldER5bmFtaWNTY3JpcHRD b250ZXh0KEpTQ29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSVNjcmlwdENvbnRleHQqKiBhU2NyaXB0Q29udGV4dCk7Cn07CiMgNzgg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lJbnRlcmZhY2VSZXF1ZXN0b3IuaCIgMQojIDM4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj b20vbnNJSW50ZXJmYWNlUmVxdWVzdG9yLmgiCmNsYXNzIG5zSUludGVyZmFjZVJlcXVlc3RvciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMzNhMTQ3MCwgMHg4YjJhLCAweDEx ZDMsIHsgMHhhZiwgMHg4OCwgMHgwMCwgMHhhMCwgMHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsg cmV0dXJuIGlpZDt9CiMgNTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnRlcmZh Y2VSZXF1ZXN0b3IuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZShjb25zdCBuc0lJ RCAmIHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7Cgp9OwojIDc5ICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJmYWNlUmVxdWVz dG9yVXRpbHMuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJm YWNlUmVxdWVzdG9yVXRpbHMuaCIKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIERlc3RpbmF0aW9u VHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxHZXRJbnRlcmZhY2UoIFQqIGFTb3VyY2UsIERlc3Rp bmF0aW9uVHlwZSoqIGFEZXN0aW5hdGlvbiApCiAgewogICAgOwogICAgOwoKICAgIHJldHVybiBh U291cmNlLT5HZXRJbnRlcmZhY2UobnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJ SUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwg dm9pZCoqID4oYURlc3RpbmF0aW9uKSk7CiAgfQoKY2xhc3MgbnNHZXRJbnRlcmZhY2UgOiBwdWJs aWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dldEludGVyZmFjZSgg bnNJU3VwcG9ydHMqIGFTb3VyY2UsIG5zcmVzdWx0KiBlcnJvciApCiAgICAgICAgICA6IG1Tb3Vy Y2UoYVNvdXJjZSksCiAgICAgICAgICAgIG1FcnJvclB0cihlcnJvcikKICAgICAgICB7CgogICAg ICAgIH0KCiAgICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2 b2lkKiogKSBjb25zdDsKICAgICAgdmlydHVhbCB+bnNHZXRJbnRlcmZhY2UoKSB7fTsKCiAgICBw cml2YXRlOgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNvdXJjZTsKICAgICAgbnNyZXN1 bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0SW50ZXJmYWNlCmRvX0dldElu dGVyZmFjZSggbnNJU3VwcG9ydHMqIGFTb3VyY2UsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsK ICAgIHJldHVybiBuc0dldEludGVyZmFjZShhU291cmNlLCBlcnJvcik7CiAgfQojIDgwICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIu aCIgMQojIDM5ICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIgMQojIDQw ICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIgMgoKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIgMQojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vcGxkaGFzaC5oIgpleHRlcm4gIkMiIHsKIyA3MiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL3BsZGhhc2guaCIKdHlwZWRlZiBQUlVpbnQzMiBQTERIYXNoTnVtYmVyOwp0eXBl ZGVmIHN0cnVjdCBQTERIYXNoRW50cnlIZHIgUExESGFzaEVudHJ5SGRyOwp0eXBlZGVmIHN0cnVj dCBQTERIYXNoRW50cnlTdHViIFBMREhhc2hFbnRyeVN0dWI7CnR5cGVkZWYgc3RydWN0IFBMREhh c2hUYWJsZSBQTERIYXNoVGFibGU7CnR5cGVkZWYgc3RydWN0IFBMREhhc2hUYWJsZU9wcyBQTERI YXNoVGFibGVPcHM7CiMgMTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxkaGFzaC5o IgpzdHJ1Y3QgUExESGFzaEVudHJ5SGRyIHsKICAgIFBMREhhc2hOdW1iZXIga2V5SGFzaDsKfTsK IyAxODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9wbGRoYXNoLmgiCnN0cnVjdCBQTERI YXNoVGFibGUgewogICAgUExESGFzaFRhYmxlT3BzICpvcHM7CiAgICB2b2lkICpkYXRhOwogICAg UFJJbnQxNiBoYXNoU2hpZnQ7CiAgICB1aW50OCBtYXhBbHBoYUZyYWM7CiAgICB1aW50OCBtaW5B bHBoYUZyYWM7CiAgICBQUlVpbnQzMiBlbnRyeVNpemU7CiAgICBQUlVpbnQzMiBlbnRyeUNvdW50 OwogICAgUFJVaW50MzIgcmVtb3ZlZENvdW50OwogICAgUFJVaW50MzIgZ2VuZXJhdGlvbjsKICAg IGNoYXIgKmVudHJ5U3RvcmU7CiMgMjE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxk aGFzaC5oIgp9OwojIDIzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIK dHlwZWRlZiB2b2lkICoKKCogUExESGFzaEFsbG9jVGFibGUpKFBMREhhc2hUYWJsZSAqdGFibGUs IFBSVWludDMyIG5ieXRlcyk7Cgp0eXBlZGVmIHZvaWQKKCogUExESGFzaEZyZWVUYWJsZSkgKFBM REhhc2hUYWJsZSAqdGFibGUsIHZvaWQgKnB0cik7CgoKCgoKCgp0eXBlZGVmIGNvbnN0IHZvaWQg KgooKiBQTERIYXNoR2V0S2V5KSAoUExESGFzaFRhYmxlICp0YWJsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVudHJ5KTsKCgoKCgp0eXBl ZGVmIFBMREhhc2hOdW1iZXIKKCogUExESGFzaEhhc2hLZXkpIChQTERIYXNoVGFibGUgKnRhYmxl LCBjb25zdCB2b2lkICprZXkpOwoKCgoKCnR5cGVkZWYgUFJCb29sCigqIFBMREhhc2hNYXRjaEVu dHJ5KShQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFBMREhhc2hFbnRyeUhkciAqZW50cnksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5KTsKCgoKCgoKCnR5cGVkZWYgdm9pZAoo KiBQTERIYXNoTW92ZUVudHJ5KShQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUExESGFzaEVudHJ5SGRyICpmcm9tLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExESGFzaEVudHJ5SGRyICp0byk7CgoKCgoK CnR5cGVkZWYgdm9pZAooKiBQTERIYXNoQ2xlYXJFbnRyeSkoUExESGFzaFRhYmxlICp0YWJsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVu dHJ5KTsKCgoKCgoKdHlwZWRlZiB2b2lkCigqIFBMREhhc2hGaW5hbGl6ZSkgKFBMREhhc2hUYWJs ZSAqdGFibGUpOwojIDI5OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIK dHlwZWRlZiB2b2lkCigqIFBMREhhc2hJbml0RW50cnkpKFBMREhhc2hUYWJsZSAqdGFibGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVudHJ5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5KTsK IyAzMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9wbGRoYXNoLmgiCnN0cnVjdCBQTERI YXNoVGFibGVPcHMgewoKICAgIFBMREhhc2hBbGxvY1RhYmxlIGFsbG9jVGFibGU7CiAgICBQTERI YXNoRnJlZVRhYmxlIGZyZWVUYWJsZTsKICAgIFBMREhhc2hHZXRLZXkgZ2V0S2V5OwogICAgUExE SGFzaEhhc2hLZXkgaGFzaEtleTsKICAgIFBMREhhc2hNYXRjaEVudHJ5IG1hdGNoRW50cnk7CiAg ICBQTERIYXNoTW92ZUVudHJ5IG1vdmVFbnRyeTsKICAgIFBMREhhc2hDbGVhckVudHJ5IGNsZWFy RW50cnk7CiAgICBQTERIYXNoRmluYWxpemUgZmluYWxpemU7CgoKICAgIFBMREhhc2hJbml0RW50 cnkgaW5pdEVudHJ5Owp9OwoKCgoKZXh0ZXJuIHZvaWQgKgpQTF9ESGFzaEFsbG9jVGFibGUoUExE SGFzaFRhYmxlICp0YWJsZSwgUFJVaW50MzIgbmJ5dGVzKTsKCmV4dGVybiB2b2lkClBMX0RIYXNo RnJlZVRhYmxlKFBMREhhc2hUYWJsZSAqdGFibGUsIHZvaWQgKnB0cik7CgpleHRlcm4gUExESGFz aE51bWJlcgpQTF9ESGFzaFN0cmluZ0tleShQTERIYXNoVGFibGUgKnRhYmxlLCBjb25zdCB2b2lk ICprZXkpOwoKCnN0cnVjdCBQTERIYXNoRW50cnlTdHViIHsKICAgIFBMREhhc2hFbnRyeUhkciBo ZHI7CiAgICBjb25zdCB2b2lkICprZXk7Cn07CgpleHRlcm4gY29uc3Qgdm9pZCAqClBMX0RIYXNo R2V0S2V5U3R1YihQTERIYXNoVGFibGUgKnRhYmxlLCBQTERIYXNoRW50cnlIZHIgKmVudHJ5KTsK CmV4dGVybiBQTERIYXNoTnVtYmVyClBMX0RIYXNoVm9pZFB0cktleVN0dWIoUExESGFzaFRhYmxl ICp0YWJsZSwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQUkJvb2wKUExfREhhc2hNYXRjaEVu dHJ5U3R1YihQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFBMREhhc2hFbnRyeUhkciAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p ZCAqa2V5KTsKCmV4dGVybiB2b2lkClBMX0RIYXNoTW92ZUVudHJ5U3R1YihQTERIYXNoVGFibGUg KnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUExESGFzaEVudHJ5SGRyICpmcm9t LAogICAgICAgICAgICAgICAgICAgICAgUExESGFzaEVudHJ5SGRyICp0byk7CgpleHRlcm4gdm9p ZApQTF9ESGFzaENsZWFyRW50cnlTdHViKFBMREhhc2hUYWJsZSAqdGFibGUsIFBMREhhc2hFbnRy eUhkciAqZW50cnkpOwoKZXh0ZXJuIHZvaWQKUExfREhhc2hGaW5hbGl6ZVN0dWIoUExESGFzaFRh YmxlICp0YWJsZSk7CgoKCgoKCmV4dGVybiBQTERIYXNoVGFibGVPcHMgKgpQTF9ESGFzaEdldFN0 dWJPcHModm9pZCk7CgoKCgoKCgpleHRlcm4gUExESGFzaFRhYmxlICoKUExfTmV3REhhc2hUYWJs ZShQTERIYXNoVGFibGVPcHMgKm9wcywgdm9pZCAqZGF0YSwgUFJVaW50MzIgZW50cnlTaXplLAog ICAgICAgICAgICAgICAgIFBSVWludDMyIGNhcGFjaXR5KTsKCgoKCgpleHRlcm4gdm9pZApQTF9E SGFzaFRhYmxlRGVzdHJveShQTERIYXNoVGFibGUgKnRhYmxlKTsKCgoKCgoKCmV4dGVybiBQUkJv b2wKUExfREhhc2hUYWJsZUluaXQoUExESGFzaFRhYmxlICp0YWJsZSwgUExESGFzaFRhYmxlT3Bz ICpvcHMsIHZvaWQgKmRhdGEsCiAgICAgICAgICAgICAgICAgIFBSVWludDMyIGVudHJ5U2l6ZSwg UFJVaW50MzIgY2FwYWNpdHkpOwojIDQyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3Bs ZGhhc2guaCIKdm9pZApQTF9ESGFzaFRhYmxlU2V0QWxwaGFCb3VuZHMoUExESGFzaFRhYmxlICp0 YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1heEFscGhhLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWluQWxwaGEpOwojIDQ0OCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIKZXh0ZXJuIHZvaWQKUExfREhhc2hUYWJsZUZpbmlz aChQTERIYXNoVGFibGUgKnRhYmxlKTsKCgoKCgoKCnR5cGVkZWYgZW51bSBQTERIYXNoT3BlcmF0 b3IgewogICAgUExfREhBU0hfTE9PS1VQID0gMCwKICAgIFBMX0RIQVNIX0FERCA9IDEsCiAgICBQ TF9ESEFTSF9SRU1PVkUgPSAyLAogICAgUExfREhBU0hfTkVYVCA9IDAsCiAgICBQTF9ESEFTSF9T VE9QID0gMQp9IFBMREhhc2hPcGVyYXRvcjsKIyA0OTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9wbGRoYXNoLmgiCmV4dGVybiBQTERIYXNoRW50cnlIZHIgKgpQTF9ESGFzaFRhYmxlT3Bl cmF0ZShQTERIYXNoVGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICprZXksIFBMREhhc2hPcGVyYXRv ciBvcCk7CiMgNTA0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxkaGFzaC5oIgpleHRl cm4gdm9pZApQTF9ESGFzaFRhYmxlUmF3UmVtb3ZlKFBMREhhc2hUYWJsZSAqdGFibGUsIFBMREhh c2hFbnRyeUhkciAqZW50cnkpOwojIDU0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3Bs ZGhhc2guaCIKdHlwZWRlZiBQTERIYXNoT3BlcmF0b3IKKCogUExESGFzaEVudW1lcmF0b3IpKFBM REhhc2hUYWJsZSAqdGFibGUsIFBMREhhc2hFbnRyeUhkciAqaGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIG51bWJlciwgdm9pZCAqYXJnKTsKCmV4dGVy biBQUlVpbnQzMgpQTF9ESGFzaFRhYmxlRW51bWVyYXRlKFBMREhhc2hUYWJsZSAqdGFibGUsIFBM REhhc2hFbnVtZXJhdG9yIGV0b3IsIHZvaWQgKmFyZyk7CiMgNTYwICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vcGxkaGFzaC5oIgp9CiMgNDMgIi4uL2J1aWxkL25zU2NyaXB0TmFtZVNwYWNl TWFuYWdlci5oIiAyCgoKCnN0cnVjdCBuc0dsb2JhbE5hbWVTdHJ1Y3QKewogIHN0cnVjdCBDb25z dHJ1Y3RvckFsaWFzCiAgewogICAgbnNDSUQgbUNJRDsKICAgIG5zU3RyaW5nIG1Qcm90b05hbWU7 CiAgICBuc0dsb2JhbE5hbWVTdHJ1Y3QqIG1Qcm90bzsKICB9OwoKICBlbnVtIG5hbWV0eXBlIHsK ICAgIGVUeXBlTm90SW5pdGlhbGl6ZWQsCiAgICBlVHlwZUludGVyZmFjZSwKICAgIGVUeXBlUHJv cGVydHksCiAgICBlVHlwZUV4dGVybmFsQ29uc3RydWN0b3IsCiAgICBlVHlwZVN0YXRpY05hbWVT ZXQsCiAgICBlVHlwZUR5bmFtaWNOYW1lU2V0LAogICAgZVR5cGVDbGFzc0NvbnN0cnVjdG9yLAog ICAgZVR5cGVDbGFzc1Byb3RvLAogICAgZVR5cGVFeHRlcm5hbENsYXNzSW5mb0NyZWF0b3IsCiAg ICBlVHlwZUV4dGVybmFsQ2xhc3NJbmZvLAogICAgZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yQWxp YXMKICB9IG1UeXBlOwoKICB1bmlvbiB7CiAgICBQUkludDMyIG1ET01DbGFzc0luZm9JRDsKICAg IG5zSUlEIG1JSUQ7CiAgICBuc0V4dGVybmFsRE9NQ2xhc3NJbmZvRGF0YSogbURhdGE7CiAgICBD b25zdHJ1Y3RvckFsaWFzKiBtQWxpYXM7CiAgICBuc0NJRCBtQ0lEOwogIH07Cgpwcml2YXRlOgoK Cn07CgoKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJQ2F0ZWdvcnlNYW5hZ2VyOwoK CmNsYXNzIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlcgp7CnB1YmxpYzoKICBuc1NjcmlwdE5hbWVT cGFjZU1hbmFnZXIoKTsKICB2aXJ0dWFsIH5uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIoKTsKCiAg bnNyZXN1bHQgSW5pdCgpOwogIG5zcmVzdWx0IEluaXRGb3JDb250ZXh0KG5zSVNjcmlwdENvbnRl eHQgKmFDb250ZXh0KTsKCgoKCgoKICBuc3Jlc3VsdCBMb29rdXBOYW1lKGNvbnN0IG5zQVN0cmlu ZyYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3Qg KiphTmFtZVN0cnVjdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciAqKmFD bGFzc05hbWUgPSAwKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJDbGFzc05hbWUoY29uc3QgY2hhciAq YUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFET01DbGFz c0luZm9JRCk7CgogIG5zcmVzdWx0IFJlZ2lzdGVyQ2xhc3NQcm90byhjb25zdCBjaGFyICphQ2xh c3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAqYUNvbnN0 cnVjdG9yUHJvdG9JSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYUZv dW5kT2xkKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbEludGVyZmFjZXMoUFJCb29sIGFB c1Byb3RvKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbENsYXNzTmFtZShjb25zdCBjaGFy ICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDSUQm IGFDSUQpOwoKCgogIG5zcmVzdWx0IFJlZ2lzdGVyRE9NQ0lEYXRhKGNvbnN0IGNoYXIgKmFOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRE9NQ2xhc3NJbmZvRXh0ZXJuYWxDb25z dHJ1Y3RvckZuYyBhQ29uc3RydWN0b3JGcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG5zSUlEICphUHJvdG9DaGFpbkludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBuc0lJRCAqKmFJbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFTY3JpcHRhYmxlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFIYXNDbGFzc0ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBuc0NJRCAqYUNvbnN0cnVjdG9yQ0lEKTsKCiAgbnNHbG9iYWxOYW1lU3RydWN0 KiBHZXRDb25zdHJ1Y3RvclByb3RvKGNvbnN0IG5zR2xvYmFsTmFtZVN0cnVjdCogYVN0cnVjdCk7 Cgpwcm90ZWN0ZWQ6CgoKCgogIG5zR2xvYmFsTmFtZVN0cnVjdCAqQWRkVG9IYXNoKGNvbnN0IG5z QVN0cmluZyYgYUtleSk7CgogIG5zcmVzdWx0IEZpbGxIYXNoKG5zSUNhdGVnb3J5TWFuYWdlciAq YUNhdGVnb3J5TWFuYWdlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2F0ZWdv cnksCiAgICAgICAgICAgICAgICAgICAgbnNHbG9iYWxOYW1lU3RydWN0OjpuYW1ldHlwZSBhVHlw ZSk7CiAgbnNyZXN1bHQgRmlsbEhhc2hXaXRoRE9NSW50ZXJmYWNlcygpOwogIG5zcmVzdWx0IFJl Z2lzdGVySW50ZXJmYWNlKGNvbnN0IGNoYXIqIGFJZk5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbnNJSUQgKmFJZklJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wqIGFGb3VuZE9sZCk7CgoKCiAgUExESGFzaFRhYmxlIG1HbG9iYWxOYW1lczsKCiAg UFJQYWNrZWRCb29sIG1Jc0luaXRpYWxpemVkOwp9OwojIDgxICJuc0RPTUNsYXNzSW5mby5jcHAi IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE9iamVjdE93bmVyLmgi IDEKIyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRPYmplY3RPd25lci5o IgpjbGFzcyBuc0lTY3JpcHRPYmplY3RPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweDhmNmJjYTdlLCAweGNlNDIsIDB4MTFkMSwgezB4YjcsIDB4MjQsIDB4MDAsIDB4NjAs IDB4MDgsIDB4OTEsIDB4ZDgsIDB4Yzl9IH07IHJldHVybiBpaWQ7fQojIDc0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE9iamVjdE93bmVyLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRTY3JpcHRPYmplY3QobnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsIHZvaWQqKiBhU2Ny aXB0T2JqZWN0KSA9IDA7CiMgODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0 T2JqZWN0T3duZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdE9iamVjdCh2b2lkKiBh U2NyaXB0T2JqZWN0KSA9IDA7Cn07CgpjbGFzcyBuc0lBdG9tOwojIDEwMiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgpjbGFzcyBuc0lTY3JpcHRFdmVu dEhhbmRsZXJPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDJhZDU0YWUw LCAweGE4MzksIDB4MTFkMywgezB4YmEsIDB4OTcsIDB4MDAsIDB4MTAsIDB4NGIsIDB4YTAsIDB4 MmQsIDB4M2R9IH07IHJldHVybiBpaWQ7fQojIDExNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50 SGFuZGxlcihuc0lTY3JpcHRDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCogYVRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJQXRvbSAqYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zQVN0cmluZyYgYUJvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq KiBhSGFuZGxlcikgPSAwOwojIDEzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3Jp cHRPYmplY3RPd25lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGlsZWRFdmVudEhhbmRs ZXIobnNJQXRvbSAqYU5hbWUsIHZvaWQqKiBhSGFuZGxlcikgPSAwOwp9OwojIDgyICJuc0RPTUNs YXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSUpTTmF0aXZl SW5pdGlhbGl6ZXIuaCIgMQojIDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSUpTTmF0 aXZlSW5pdGlhbGl6ZXIuaCIKY2xhc3MgbnNJSlNOYXRpdmVJbml0aWFsaXplciA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZjQsIDB4MTViMywgMHgxMWQyLCB7MHg5Mywg MHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30K CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6ZShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJn dikgPSAwOwp9OwojIDgzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NUGx1Z2luQXJyYXkuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTVBsdWdpbkFycmF5LmgiCmNsYXNzIG5zSURPTVBsdWdpbkFycmF5 IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGY2MTM0NjgwLCAweGYyOGIsIDB4 MTFkMiwgeyAweDgzLCAweDYwLCAweGM5LCAweDA4LCAweDk5LCAweDA0LCAweDljLCAweDNjIH19 OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICph TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5z SURPTVBsdWdpbiAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVt KGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTVBsdWdpbiAqKl9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgUmVmcmVzaChQUkJvb2wgcmVsb2FkRG9jdW1lbnRzKSA9IDA7Cgp9 OwojIDEyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01QbHVnaW5BcnJheS5oIgpj bGFzcyBuc0lET01KU1BsdWdpbkFycmF5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsweGVlNzUzMzUyLCAweDFkZDEsIDB4MTFiMiwgeyAweGIxLCAweDhkLCAweGIwLCAweGI3LCAw eDMyLCAweDBhLCAweDI4LCAweGMzIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1 bHQgUmVmcmVzaCh2b2lkKSA9IDA7Cgp9OwojIDg2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVBsdWdpbi5oIiAxCiMgMjUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUGx1Z2luLmgiCmNsYXNzIG5zSURPTVBsdWdpbiA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNjEzNDY4MSwgMHhmMjhiLCAweDEx ZDIsIHsgMHg4MywgMHg2MCwgMHhjOSwgMHgwOCwgMHg5OSwgMHgwNCwgMHg5YywgMHgzYyB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2NyaXB0aW9uKG5zQVN0cmlu ZyAmIGFEZXNjcmlwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlbmFtZShu c0FTdHJpbmcgJiBhRmlsZW5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShu c0FTdHJpbmcgJiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJV aW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBp bmRleCwgbnNJRE9NTWltZVR5cGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IE5hbWVkSXRlbShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBuc0lET01NaW1lVHlwZSAqKl9yZXR2 YWwpID0gMDsKCn07CiMgODcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTWltZVR5cGVBcnJheS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTWltZVR5cGVBcnJheS5oIgpjbGFzcyBuc0lET01NaW1lVHlw ZUFycmF5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGY2MTM0NjgzLCAweGYy OGIsIDB4MTFkMiwgeyAweDgzLCAweDYwLCAweGM5LCAweDA4LCAweDk5LCAweDA0LCAweDljLCAw eDNjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWlu dDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5k ZXgsIG5zSURPTU1pbWVUeXBlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBO YW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJRE9NTWltZVR5cGUgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDg4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTU1pbWVUeXBlLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01NaW1lVHlwZS5oIgpjbGFzcyBuc0lET01NaW1lVHlwZSA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNjEzNDY4MiwgMHhmMjhiLCAweDExZDIsIHsgMHg4 MywgMHg2MCwgMHhjOSwgMHgwOCwgMHg5OSwgMHgwNCwgMHg5YywgMHgzYyB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2NyaXB0aW9uKG5zQVN0cmluZyAmIGFEZXNj cmlwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbmFibGVkUGx1Z2luKG5zSURP TVBsdWdpbiAqICphRW5hYmxlZFBsdWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT dWZmaXhlcyhuc0FTdHJpbmcgJiBhU3VmZml4ZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKfTsKIyA4OSAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0xvY2F0aW9uLmgi IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0xvY2F0aW9uLmgiCmNs YXNzIG5zSURPTU5TTG9jYXRpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkxMDgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZWxvYWQodm9pZCkgPSAwOwoKfTsKIyA5MCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Mb2NhdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTG9jYXRpb24uaCIKY2xhc3MgbnNJRE9NTG9jYXRpb24g OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNmQsIDB4MTViMywgMHgx MWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIYXNoKG5zQVN0cmluZyAmIGFI YXNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIYXNoKGNvbnN0IG5zQVN0cmluZyAmIGFI YXNoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhvc3QobnNBU3RyaW5nICYgYUhvc3Qp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhvc3QoY29uc3QgbnNBU3RyaW5nICYgYUhvc3Qp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SG9zdG5hbWUobnNBU3RyaW5nICYgYUhvc3Ru YW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIb3N0bmFtZShjb25zdCBuc0FTdHJpbmcg JiBhSG9zdG5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZihuc0FTdHJpbmcg JiBhSHJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZihjb25zdCBuc0FTdHJpbmcg JiBhSHJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRobmFtZShuc0FTdHJpbmcg JiBhUGF0aG5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdGhuYW1lKGNvbnN0IG5z QVN0cmluZyAmIGFQYXRobmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3J0KG5z QVN0cmluZyAmIGFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KGNvbnN0IG5z QVN0cmluZyAmIGFQb3J0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3RvY29sKG5z QVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvdG9jb2wo Y29uc3QgbnNBU3RyaW5nICYgYVByb3RvY29sKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNlYXJjaChuc0FTdHJpbmcgJiBhU2VhcmNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT ZWFyY2goY29uc3QgbnNBU3RyaW5nICYgYVNlYXJjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBSZWxvYWQoUFJCb29sIGZvcmNlZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxh Y2UoY29uc3QgbnNBU3RyaW5nICYgdXJsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFzc2ln bihjb25zdCBuc0FTdHJpbmcgJiB1cmwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJp bmcobnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKfTsKIyA5MSAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01XaW5kb3dJbnRlcm5hbC5o IiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93SW50ZXJuYWwu aCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVdpbmRvdy5oIiAxCiMgMTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93LmgiCmNsYXNzIG5zSVNlbGVj dGlvbjsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01XaW5kb3cuaCIKY2xh c3MgbnNJRE9NV2luZG93IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5 MDZiLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhh LCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01XaW5kb3cuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURP TURvY3VtZW50ICogKmFEb2N1bWVudCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFBhcmVudChuc0lET01XaW5kb3cgKiAqYVBhcmVudCkgPSAwOwojIDY1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTVdpbmRvdy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5z SURPTVdpbmRvdyAqICphVG9wKSA9IDA7CiMgNzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxiYXJzKG5zSURPTUJh clByb3AgKiAqYVNjcm9sbGJhcnMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJh bWVzKG5zSURPTVdpbmRvd0NvbGxlY3Rpb24gKiAqYUZyYW1lcykgPSAwOwoKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKIyAxMDAgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUZXh0Wm9vbShmbG9hdCAqYVRleHRab29tKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRU ZXh0Wm9vbShmbG9hdCBhVGV4dFpvb20pID0gMDsKIyAxMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxYKFBSSW50 MzIgKmFTY3JvbGxYKSA9IDA7CiMgMTE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TVdpbmRvdy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Nyb2xsWShQUkludDMyICphU2Nyb2xs WSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxUbyhQUkludDMyIHhTY3JvbGws IFBSSW50MzIgeVNjcm9sbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnko UFJJbnQzMiB4U2Nyb2xsRGlmLCBQUkludDMyIHlTY3JvbGxEaWYpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uKG5zSVNlbGVjdGlvbiAqKl9yZXR2YWwpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnlMaW5lcyhQUkludDMyIG51bUxpbmVzKSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbEJ5UGFnZXMoUFJJbnQzMiBudW1QYWdlcykg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplVG9Db250ZW50KHZvaWQpID0gMDsKCn07 CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93SW50ZXJuYWwuaCIg MgoKCgoKCgpjbGFzcyBuc0lTaWRlYmFyOwoKY2xhc3MgbnNJUHJvbXB0OwoKY2xhc3MgbnNJQ29u dHJvbGxlcnM7CgpjbGFzcyBuc0lET01Mb2NhdGlvbjsKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01XaW5kb3dJbnRlcm5hbC5oIgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5h bCA6IHB1YmxpYyBuc0lET01XaW5kb3cgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWM5MTE4NjAsIDB4N2RkOSwg MHgxMWQ0LCB7IDB4OWEsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQg fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJRE9NV2lu ZG93SW50ZXJuYWwgKiAqYVdpbmRvdykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxm KG5zSURPTVdpbmRvd0ludGVybmFsICogKmFTZWxmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE5hdmlnYXRvcihuc0lET01OYXZpZ2F0b3IgKiAqYU5hdmlnYXRvcikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW4obnNJRE9NU2NyZWVuICogKmFTY3JlZW4pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGlzdG9yeShuc0lET01IaXN0b3J5ICogKmFIaXN0b3J5KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJRE9NV2luZG93ICogKmFDb250 ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpZGViYXIobnNJU2lkZWJhciAqICph U2lkZWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9tcHRlcihuc0lQcm9tcHQg KiAqYVByb21wdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnViYXIobnNJRE9N QmFyUHJvcCAqICphTWVudWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sYmFy KG5zSURPTUJhclByb3AgKiAqYVRvb2xiYXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TG9jYXRpb25iYXIobnNJRE9NQmFyUHJvcCAqICphTG9jYXRpb25iYXIpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGVyc29uYWxiYXIobnNJRE9NQmFyUHJvcCAqICphUGVyc29uYWxiYXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzYmFyKG5zSURPTUJhclByb3AgKiAq YVN0YXR1c2JhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXJlY3Rvcmllcyhuc0lE T01CYXJQcm9wICogKmFEaXJlY3RvcmllcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD bG9zZWQoUFJCb29sICphQ2xvc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENyeXB0 byhuc0lET01DcnlwdG8gKiAqYUNyeXB0bykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ a2NzMTEobnNJRE9NUGtjczExICogKmFQa2NzMTEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29udHJvbGxlcnMobnNJQ29udHJvbGxlcnMgKiAqYUNvbnRyb2xsZXJzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE9wZW5lcihuc0lET01XaW5kb3dJbnRlcm5hbCAqICphT3BlbmVy KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXIobnNJRE9NV2luZG93SW50ZXJuYWwg KiBhT3BlbmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXR1cyhuc0FTdHJpbmcg JiBhU3RhdHVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdGF0dXMoY29uc3QgbnNBU3Ry aW5nICYgYVN0YXR1cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0U3RhdHVz KG5zQVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRE ZWZhdWx0U3RhdHVzKGNvbnN0IG5zQVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldExvY2F0aW9uKG5zSURPTUxvY2F0aW9uICogKmFMb2NhdGlvbikg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbm5lcldpZHRoKFBSSW50MzIgKmFJbm5lcldp ZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lcldpZHRoKFBSSW50MzIgYUlubmVy V2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIZWlnaHQoUFJJbnQzMiAq YUlubmVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lckhlaWdodChQUklu dDMyIGFJbm5lckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRlcldpZHRo KFBSSW50MzIgKmFPdXRlcldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlcldp ZHRoKFBSSW50MzIgYU91dGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0 ZXJIZWlnaHQoUFJJbnQzMiAqYU91dGVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRPdXRlckhlaWdodChQUkludDMyIGFPdXRlckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRTY3JlZW5YKFBSSW50MzIgKmFTY3JlZW5YKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRTY3JlZW5YKFBSSW50MzIgYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U2NyZWVuWShQUkludDMyICphU2NyZWVuWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 U2NyZWVuWShQUkludDMyIGFTY3JlZW5ZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh Z2VYT2Zmc2V0KFBSSW50MzIgKmFQYWdlWE9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQYWdlWU9mZnNldChQUkludDMyICphUGFnZVlPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEZ1bGxTY3JlZW4oUFJCb29sICphRnVsbFNjcmVlbikgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0RnVsbFNjcmVlbihQUkJvb2wgYUZ1bGxTY3JlZW4pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQWxlcnQoY29uc3QgbnNBU3RyaW5nICYgdGV4dCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDb25maXJtKGNvbnN0IG5zQVN0cmluZyAmIHRleHQsIFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm9tcHQoY29uc3QgbnNBU3RyaW5nICYgYU1l c3NhZ2UsIGNvbnN0IG5zQVN0cmluZyAmIGFJbml0aWFsLCBjb25zdCBuc0FTdHJpbmcgJiBhVGl0 bGUsIFBSVWludDMyIGFTYXZlUGFzc3dvcmQsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgRm9jdXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBC bHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmFjayh2b2lkKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEZvcndhcmQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBI b21lKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcCh2b2lkKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFByaW50KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92 ZVRvKFBSSW50MzIgeFBvcywgUFJJbnQzMiB5UG9zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IE1vdmVCeShQUkludDMyIHhEaWYsIFBSSW50MzIgeURpZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZXNpemVUbyhQUkludDMyIHdpZHRoLCBQUkludDMyIGhlaWdodCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSZXNpemVCeShQUkludDMyIHdpZHRoRGlmLCBQUkludDMyIGhlaWdodERp ZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGwoUFJJbnQzMiB4U2Nyb2xsLCBQUklu dDMyIHlTY3JvbGwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbihjb25zdCBuc0FTdHJp bmcgJiB1cmwsIGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIG9wdGlv bnMsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Bl bkRpYWxvZyhjb25zdCBuc0FTdHJpbmcgJiB1cmwsIGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIGNv bnN0IG5zQVN0cmluZyAmIG9wdGlvbnMsIG5zSVN1cHBvcnRzICphRXh0cmFBcmd1bWVudCwgbnNJ RE9NV2luZG93ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lk KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZUNvbW1hbmRzKGNvbnN0IG5zQVN0cmlu ZyAmIGFjdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgbnNBU3Ry aW5nICYgc3RyLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFVuZXNjYXBlKGNvbnN0IG5zQVN0cmluZyAmIHN0ciwgbnNBU3RyaW5nICYgX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kKGNvbnN0IG5zQVN0cmluZyAmIHN0ciwgUFJCb29s IGNhc2VTZW5zaXRpdmUsIFBSQm9vbCBiYWNrd2FyZHMsIFBSQm9vbCB3cmFwQXJvdW5kLCBQUkJv b2wgd2hvbGVXb3JkLCBQUkJvb2wgc2VhcmNoSW5GcmFtZXMsIFBSQm9vbCBzaG93RGlhbG9nLCBQ UkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FT dHJpbmcgJiBhQXNjaWlTdHJpbmcsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcgJiBhQmFzZTY0RGF0YSwgbnNBU3RyaW5n ICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUVsZW1lbnQobnNJ RE9NRWxlbWVudCAqICphRnJhbWVFbGVtZW50KSA9IDA7Cgp9OwojIDkyICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUpTV2luZG93Lmgi IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01KU1dpbmRvdy5oIgpjbGFz cyBuc0lET01KU1dpbmRvdyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhjODE4 ODYyMCwgMHgxZGQxLCAweDExYjIsIHsgMHhiYywgMHg4OCwgMHhkZiwgMHg4NCwgMHg0MCwgMHg0 OSwgMHg4YSwgMHhkZCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IER1bXAo Y29uc3QgbnNBU3RyaW5nICYgc3RyKSA9IDA7CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NSlNXaW5kb3cuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRpbWVvdXQoUFJJbnQz MiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbnRlcnZhbChQUkludDMy ICpfcmV0dmFsKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJUaW1lb3V0KHZv aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJJbnRlcnZhbCh2b2lkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlc2l6YWJsZShQUkJvb2wgcmVzaXphYmxlKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVFdmVudHMoUFJJbnQzMiBldmVudEZsYWdzKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbGVhc2VFdmVudHMoUFJJbnQzMiBldmVudEZsYWdzKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJvdXRlRXZlbnQobnNJRE9NRXZlbnQgKmV2dCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVFeHRlcm5hbENhcHR1cmUodm9pZCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNhYmxlRXh0ZXJuYWxDYXB0dXJlKHZvaWQpID0gMDsKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb21wdChuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW4obnNJRE9NV2luZG93ICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBPcGVuRGlhbG9nKG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsK IyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01KU1dpbmRvdy5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RnJhbWVzKG5zSURPTVdpbmRvdyAqICphRnJhbWVzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEZpbmQoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDkzICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVdp bmRvd0NvbGxlY3Rpb24uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TVdpbmRvd0NvbGxlY3Rpb24uaCIKY2xhc3MgbnNJRE9NV2luZG93Q29sbGVjdGlvbiA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA2ZiwgMHgxNWIzLCAweDExZDIsIHsg MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJu IGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93Q29sbGVj dGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9 IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5zSURPTVdp bmRvdyAqKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVtKGNv bnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCn07CiMg OTQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NSGlzdG9yeS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N SGlzdG9yeS5oIgpjbGFzcyBuc0lET01IaXN0b3J5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweDg5NmQxZDIwLCAweGI0YzQsIDB4MTFkMiwgeyAweGJkLCAweDkzLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TGVuZ3RoKFBSSW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Q3VycmVudChuc0FTdHJpbmcgJiBhQ3VycmVudCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQcmV2aW91cyhuc0FTdHJpbmcgJiBhUHJldmlvdXMpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TmV4dChuc0FTdHJpbmcgJiBhTmV4dCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBCYWNrKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yd2FyZCh2b2lk KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdvSW5kZXgoUFJJbnQzMiBhRGVsdGEpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR29VcmkoY29uc3QgbnNBU3RyaW5nICYgYVVyaVN1YnN0cmlu ZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBSVWludDMyIGluZGV4LCBuc0FTdHJp bmcgJiBfcmV0dmFsKSA9IDA7Cgp9OwojIDk1ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSGlzdG9yeS5oIiAxCiMgMjUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIaXN0b3J5LmgiCmNsYXNzIG5zSURPTU5TSGlz dG9yeSA6IHB1YmxpYyBuc0lET01IaXN0b3J5IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDVmYjk2ZjQ2LCAweDFk ZDIsIDB4MTFiMiwgeyAweGE1LCAweGRjLCAweDk5LCAweDhjLCAweGE4LCAweDYzLCAweDZlLCAw eGE5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR28odm9pZCkgPSAw OwoKfTsKIyA5NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01NZWRpYUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTU1lZGlhTGlzdC5oIgpjbGFzcyBuc0lET01NZWRpYUxpc3QgOiBwdWJsaWMgbnNJ U3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWIwYzJlZDcsIDB4MTExYywgMHg0ODI0LCB7IDB4YWQs IDB4ZjksIDB4ZWYsIDB4MGQsIDB4YTYsIDB4ZGEsIDB4ZDMsIDB4NzEgfX07IHJldHVybiBpaWQ7 fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU1lZGlhTGlzdC5oIgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TWVkaWFUZXh0KG5zQVN0cmluZyAmIGFNZWRpYVRleHQpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1lZGlhVGV4dChjb25zdCBuc0FTdHJpbmcgJiBhTWVkaWFU ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0 aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBSVWludDMyIGluZGV4LCBuc0FTdHJp bmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZU1lZGl1bShjb25z dCBuc0FTdHJpbmcgJiBvbGRNZWRpdW0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5k TWVkaXVtKGNvbnN0IG5zQVN0cmluZyAmIG5ld01lZGl1bSkgPSAwOwoKfTsKIyA5NyAibnNET01D bGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DaHJv bWVXaW5kb3cuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNocm9t ZVdpbmRvdy5oIgpjbGFzcyBuc0lET01DaHJvbWVXaW5kb3cgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4ODc2ZDZmOTYsIDB4MjQyMCwgMHg0Zjc4LCB7IDB4YmMsIDB4MTcsIDB4 MDAsIDB4YjEsIDB4YTIsIDB4ZWMsIDB4MTIsIDB4YmEgfX07IHJldHVybiBpaWQ7fQoKICBlbnVt IHsgU1RBVEVfTUFYSU1JWkVEID0gMVUgfTsKCiAgZW51bSB7IFNUQVRFX01JTklNSVpFRCA9IDJV IH07CgogIGVudW0geyBTVEFURV9OT1JNQUwgPSAzVSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUaXRsZShuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRp dGxlKGNvbnN0IG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRXaW5kb3dTdGF0ZShQUlVpbnQxNiAqYVdpbmRvd1N0YXRlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEF0dGVudGlvbih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1 cnNvcihjb25zdCBuc0FTdHJpbmcgJiBjdXJzb3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg TWF4aW1pemUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNaW5pbWl6ZSh2b2lkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc3RvcmUodm9pZCkgPSAwOwoKfTsKIyA5OCAibnNE T01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zRE9N RXJyb3IuaCIgMQojIDEwMSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01ET01FeGNlcHRpb24uaCIgMQojIDM4ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTURPTUV4Y2VwdGlvbi5oIgpjbGFzcyBuc0lET01ET01FeGNlcHRp b24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkxMGEsIDB4MTViMywg MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg fX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgSU5ERVhfU0laRV9FUlIgPSAxVSB9OwoKICBlbnVt IHsgRE9NU1RSSU5HX1NJWkVfRVJSID0gMlUgfTsKCiAgZW51bSB7IEhJRVJBUkNIWV9SRVFVRVNU X0VSUiA9IDNVIH07CgogIGVudW0geyBXUk9OR19ET0NVTUVOVF9FUlIgPSA0VSB9OwoKICBlbnVt IHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSID0gNVUgfTsKCiAgZW51bSB7IE5PX0RBVEFfQUxMT1dF RF9FUlIgPSA2VSB9OwoKICBlbnVtIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSID0gN1Ug fTsKCiAgZW51bSB7IE5PVF9GT1VORF9FUlIgPSA4VSB9OwoKICBlbnVtIHsgTk9UX1NVUFBPUlRF RF9FUlIgPSA5VSB9OwoKICBlbnVtIHsgSU5VU0VfQVRUUklCVVRFX0VSUiA9IDEwVSB9OwoKICBl bnVtIHsgSU5WQUxJRF9TVEFURV9FUlIgPSAxMVUgfTsKCiAgZW51bSB7IFNZTlRBWF9FUlIgPSAx MlUgfTsKCiAgZW51bSB7IElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiA9IDEzVSB9OwoKICBlbnVt IHsgTkFNRVNQQUNFX0VSUiA9IDE0VSB9OwoKICBlbnVtIHsgSU5WQUxJRF9BQ0NFU1NfRVJSID0g MTVVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvZGUoUFJVaW50MzIgKmFDb2RlKSA9IDA7 Cgp9OwojIDEwMiAibnNET01DbGFzc0luZm8uY3BwIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NTm9kZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTU5vZGVMaXN0LmgiCmNsYXNzIG5zSURPTU5vZGVMaXN0IDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDdkLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30K IyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2RlTGlzdC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBpbmRleCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7 Cgp9OwojIDEwNCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01OYW1lZE5vZGVNYXAuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTU5hbWVkTm9kZU1hcC5oIgpjbGFzcyBuc0lET01OYW1lZE5vZGVNYXAgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwN2IsIDB4MTViMywgMHgxMWQy LCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJl dHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5hbWVkTm9k ZU1hcC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJdGVtKGNvbnN0IG5zQVN0cmluZyAm IG5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dE5hbWVkSXRlbShuc0lET01Ob2RlICphcmcsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZU5hbWVkSXRlbShjb25zdCBuc0FTdHJpbmcgJiBuYW1l LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBS VWludDMyIGluZGV4LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRMZW5ndGgoUFJVaW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TmFtZWRJdGVtTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBu c0FTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE5hbWVkSXRlbU5TKG5zSURPTU5vZGUgKmFyZywgbnNJRE9NTm9kZSAq Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTmFtZWRJdGVtTlMoY29u c3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBsb2NhbE5hbWUs IG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEwNSAibnNET01DbGFzc0luZm8uY3Bw IiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtLmgiIDEKIyA0 NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRm9ybS5oIgpjbGFzcyBuc0lGb3Jt Q29udHJvbDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJRE9NSFRNTElucHV0RWxl bWVudDsKY2xhc3MgbnNJUmFkaW9WaXNpdG9yOwpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwoj IDcwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtLmgiCmNsYXNzIG5zSUZv cm0gOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhiN2U5NDUxMCwgMHg0YzE5LCAw eDExZDIsIHsgMHg4MCwgMHgzZiwgMHgwLCAweDYwLCAweDgsIDB4MTUsIDB4YTcsIDB4OTEgfSB9 OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFbGVtZW50KG5zSUZv cm1Db250cm9sKiBhRWxlbWVudCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lGb3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFbGVtZW50VG9UYWJsZShuc0lG b3JtQ29udHJvbCogYUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBuc0FTdHJpbmcmIGFOYW1lKSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lGb3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50QXQoUFJJbnQzMiBh SW5kZXgsIG5zSUZvcm1Db250cm9sKiogYUVsZW1lbnQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50Q291bnQoUFJVaW50MzIqIGFDb3VudCkgY29uc3QgPSAw OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUVsZW1lbnQobnNJRm9ybUNvbnRyb2wq IGFFbGVtZW50KSA9IDA7CiMgMTMwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lG b3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50RnJvbVRhYmxlKG5zSUZvcm1D b250cm9sKiBhRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNBU3RyaW5nJiBhTmFtZSkgPSAwOwojIDE0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Nv bnRlbnQvbnNJRm9ybS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZU5hbWUoY29uc3QgbnNB U3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJl c3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5kZXhPZkNvbnRyb2wobnNJRm9y bUNvbnRyb2wqIGFDb250cm9sLCBQUkludDMyKiBhSW5kZXgpID0gMDsKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENvbnRyb2xFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhRW51 bSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXRDbGlja0JlZ2luKCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXRDbGlja0VuZCgpID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBGbHVzaFBlbmRpbmdTdWJtaXNzaW9uKCkgPSAwOwoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRm9yZ2V0UGVuZGluZ1N1Ym1pc3Npb24oKSA9IDA7Cn07CiMgMTA4ICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lG b3JtQ29udHJvbC5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZv cm1Db250cm9sLmgiCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKY2xhc3MgbnNJUHJlc0Nv bnRleHQ7CmNsYXNzIG5zSVByZXNTdGF0ZTsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNTdHJp bmc7CmNsYXNzIG5zSUZvcm1Qcm9jZXNzb3I7CmNsYXNzIG5zSUZvcm1TdWJtaXNzaW9uOwojIDgz ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtQ29udHJvbC5oIgpjbGFzcyBu c0lGb3JtQ29udHJvbCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgyODJmZjQ0 MCwgMHhjZDdlLCAweDExZDEsIHsweDg5LCAweGFkLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAw eDFiLCAweDgxfSB9OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9y bShuc0lET01IVE1MRm9ybUVsZW1lbnQqKiBhRm9ybSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50KiBhRm9ybSwKICAgICAgICAgICAg ICAgICAgICAgUFJCb29sIGFSZW1vdmVGcm9tRm9ybSA9IDEpID0gMDsKCgoKCgogIHZpcnR1YWwg UFJJbnQzMiBHZXRUeXBlKCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCgpID0g MDsKIyAxMjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZvcm1Db250cm9sLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBTdWJtaXROYW1lc1ZhbHVlcyhuc0lGb3JtU3VibWlzc2lvbiog YUZvcm1TdWJtaXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu dCogYVN1Ym1pdEVsZW1lbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNhdmVTdGF0 ZSgpID0gMDsKIyAxNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZvcm1Db250 cm9sLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXN0b3JlU3RhdGUobnNJUHJlc1N0YXRlKiBhU3Rh dGUpID0gMDsKfTsKIyAxMDkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEZvcm1FbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxFbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRWxlbWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NRWxlbWVudC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NRWxlbWVudC5oIgpjbGFzcyBuc0lET01FbGVtZW50IDogcHVibGljIG5zSURPTU5v ZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQw ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVsZW1lbnQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFRhZ05hbWUobnNBU3RyaW5nICYgYVRhZ05hbWUpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zQVN0cmluZyAm IF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlKGNvbnN0IG5z QVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IFJlbW92ZUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZU5vZGUoY29uc3QgbnNBU3RyaW5nICYgbmFt ZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0 cmlidXRlTm9kZShuc0lET01BdHRyICpuZXdBdHRyLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRyaWJ1dGVOb2RlKG5zSURPTUF0dHIgKm9s ZEF0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTU5vZGVMaXN0 ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRyaWJ1dGVOUyhjb25z dCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmluZyAmIGxvY2FsTmFtZSwg bnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1 dGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmluZyAmIHF1 YWxpZmllZE5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IG5zQVN0cmluZyAmIG5hbWVzcGFjZVVSSSwg Y29uc3QgbnNBU3RyaW5nICYgbG9jYWxOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5z QVN0cmluZyAmIGxvY2FsTmFtZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlTm9kZU5TKG5zSURPTUF0dHIgKm5ld0F0dHIsIG5zSURP TUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1lbnRzQnlU YWdOYW1lTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcg JiBsb2NhbE5hbWUsIG5zSURPTU5vZGVMaXN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBIYXNBdHRyaWJ1dGUoY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0F0dHJpYnV0ZU5TKGNvbnN0IG5zQVN0 cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNBU3RyaW5nICYgbG9jYWxOYW1lLCBQUkJvb2wg Kl9yZXR2YWwpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N SFRNTEVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxFbGVtZW50IDogcHVibGljIG5zSURPTUVsZW1l bnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxFbGVtZW50LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRJZChuc0FTdHJpbmcgJiBhSWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldElkKGNvbnN0IG5zQVN0cmluZyAmIGFJZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUaXRsZShuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRp dGxlKGNvbnN0IG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRMYW5nKG5zQVN0cmluZyAmIGFMYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYW5n KGNvbnN0IG5zQVN0cmluZyAmIGFMYW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERp cihuc0FTdHJpbmcgJiBhRGlyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXIoY29uc3Qg bnNBU3RyaW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc05hbWUo bnNBU3RyaW5nICYgYUNsYXNzTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xhc3NO YW1lKGNvbnN0IG5zQVN0cmluZyAmIGFDbGFzc05hbWUpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEZvcm1FbGVtZW50LmgiIDIKIyAyNSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9N SFRNTEZvcm1FbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eGE2Y2Y5MDhmLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVm LCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEVsZW1lbnRzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFFbGVtZW50cykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJJbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEFjY2VwdENoYXJzZXQobnNBU3RyaW5nICYgYUFjY2VwdENoYXJzZXQpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2VwdENoYXJzZXQoY29uc3QgbnNBU3RyaW5nICYgYUFj Y2VwdENoYXJzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWN0aW9uKG5zQVN0cmlu ZyAmIGFBY3Rpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGlvbihjb25zdCBuc0FT dHJpbmcgJiBhQWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY3R5cGUobnNB U3RyaW5nICYgYUVuY3R5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVuY3R5cGUoY29u c3QgbnNBU3RyaW5nICYgYUVuY3R5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0 aG9kKG5zQVN0cmluZyAmIGFNZXRob2QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1ldGhv ZChjb25zdCBuc0FTdHJpbmcgJiBhTWV0aG9kKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFRhcmdldChuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRU YXJnZXQoY29uc3QgbnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTdWJtaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCh2b2lkKSA9IDA7 Cgp9OwojIDExMCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEZvcm1Db250cm9sTGlzdC5oIgpjbGFzcyBuc0lE T01OU0hUTUxGb3JtQ29udHJvbExpc3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4YTZjZjkxMWEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBOYW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDExMSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQ29sbGVjdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTENvbGxlY3Rpb24uaCIKY2xhc3MgbnNJRE9NSFRNTENv bGxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODMsIDB4 MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQs IDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUhUTUxDb2xsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50 MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBpbmRl eCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJ dGVtKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7Cgp9 OwojIDExMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJSFRNTERvY3VtZW50LmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJSFRNTERvY3VtZW50LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0NvbXBhdGliaWxpdHkuaCIgMQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zQ29tcGF0aWJpbGl0eS5oIgplbnVtIG5zQ29tcGF0aWJpbGl0eSB7CiAgZUNvbXBhdGli aWxpdHlfRnVsbFN0YW5kYXJkcyA9IDEsCiAgZUNvbXBhdGliaWxpdHlfQWxtb3N0U3RhbmRhcmRz ID0gMiwKICBlQ29tcGF0aWJpbGl0eV9OYXZRdWlya3MgPSAzCn07CiMgNDMgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9jb250ZW50L25zSUhUTUxEb2N1bWVudC5oIiAyCgpjbGFzcyBuc0lJbWFnZU1h cDsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSURPTU5vZGVMaXN0OwpjbGFzcyBuc0lET01IVE1M Q29sbGVjdGlvbjsKY2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwpjbGFzcyBuc0lET01IVE1M TWFwRWxlbWVudDsKY2xhc3MgbnNJSFRNTFN0eWxlU2hlZXQ7CmNsYXNzIG5zSVN0eWxlU2hlZXQ7 CmNsYXNzIG5zSUNTU0xvYWRlcjsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJRE9NSFRNTEJv ZHlFbGVtZW50OwojIDY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lIVE1MRG9j dW1lbnQuaCIKY2xhc3MgbnNJSFRNTERvY3VtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVi bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7MHhiMmE4NDhiMCwgMHhkMGE5LCAweDExZDEsIHsweDg5LCAweGIxLCAweDAwLCAweDYw LCAweDA4LCAweDkxLCAweDFiLCAweDgxfX07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVz dWx0IEFkZEltYWdlTWFwKG5zSURPTUhUTUxNYXBFbGVtZW50KiBhTWFwKSA9IDA7CgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SW1hZ2VNYXAoY29uc3QgbnNBU3RyaW5nJiBhTWFwTmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSURPTUhUTUxNYXBFbGVtZW50KiogYVJlc3VsdCkgPSAwOwoK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUltYWdlTWFwKG5zSURPTUhUTUxNYXBFbGVtZW50KiBh TWFwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWVkKGNvbnN0IG5zQVN0 cmluZyYgYUxhc3RNb2RpZmllZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmZXJyZXIo Y29uc3QgbnNBU3RyaW5nJiBhUmVmZXJyZXIpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkmIGFNb2RlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkgYU1vZGUpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXYXNEb21haW5TZXQoUFJCb29sKiBhRG9tYWluV2Fz U2V0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZU5hbWUoY29uc3QgbnNBU3RyaW5n JiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUhUTUxGb3JtRWxlbWVudCAq YUZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpID0g MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtQ29udHJvbEVsZW1lbnRzKG5zSURPTU5vZGVM aXN0KiogYVJldHVybikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZGVkRm9ybSgpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVkRm9ybSgpID0gMDsKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROdW1Gb3Jtc1N5bmNocm9ub3VzKFBSSW50MzIqIGFOdW1Gb3JtcykgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvZHlFbGVtZW50KG5zSURPTUhUTUxCb2R5RWxlbWVu dCoqIGFCb2R5KSA9IDA7CgogIHZpcnR1YWwgUFJCb29sIElzV3JpdGluZygpID0gMDsKCn07CiMg MTEzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NSFRNTFNlbGVjdEVsZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxTZWxlY3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxTZWxlY3RF bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDkw LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShu c0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3RlZElu ZGV4KFBSSW50MzIgKmFTZWxlY3RlZEluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT ZWxlY3RlZEluZGV4KFBSSW50MzIgYVNlbGVjdGVkSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRMZW5ndGgoUFJVaW50MzIgYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRGb3JtKG5zSURPTUhUTUxGb3JtRWxlbWVudCAqICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRPcHRpb25zKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFPcHRpb25zKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE11bHRpcGxlKFBSQm9vbCAqYU11bHRpcGxlKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNdWx0aXBsZShQUkJvb2wgYU11bHRpcGxlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0U2l6ZShQUkludDMyICphU2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0U2l6ZShQUkludDMyIGFTaXplKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRh YkluZGV4KFBSSW50MzIgKmFUYWJJbmRleCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFi SW5kZXgoUFJJbnQzMiBhVGFiSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkKG5z SURPTUhUTUxFbGVtZW50ICplbGVtZW50LCBuc0lET01IVE1MRWxlbWVudCAqYmVmb3JlKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZShQUkludDMyIGluZGV4KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEJsdXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb2N1cyh2 b2lkKSA9IDA7Cgp9OwojIDExNiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1Db250cm9sLmgiIDEKIyAxNyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1Db250cm9sLmgiCmNsYXNzIG5zSUJv eE9iamVjdDsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1D b250cm9sLmgiCmNsYXNzIG5zSURPTU5TWEJMRm9ybUNvbnRyb2wgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4MWMyOGVkNjYsIDB4MWRkMiwgMHgxMWIyLCB7IDB4OTUsIDB4YWYs IDB4ZTIsIDB4Y2YsIDB4MTAsIDB4OTMsIDB4MWEsIDB4ZGIgfX07IHJldHVybiBpaWQ7fQoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRCb3hPYmplY3QobnNJQm94T2JqZWN0ICogKmFCb3hPYmplY3Qp ID0gMDsKCn07CiMgMTE3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2UuaCIgMQojIDE0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIiAxCiMgMTQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIuaCIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2lucm9vdC5oIiAxCiMgMTUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIuaCIgMgoKCgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtSW5mby5oIiAx CiMgMjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtSW5mby5o IgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW5kZWZzLmgiIDEKIyA1 OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKIyAxICIvdXNy L1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIgMQojIDU1ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDEx L1hsaWIuaCIKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1guaCIgMQojIDcxICIvdXNyL1gx MVI2L2luY2x1ZGUvWDExL1guaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKCgoKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIE1hc2s7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBBdG9tOwoKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsK IyAxMDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWC5oIgp0eXBlZGVmIFhJRCBXaW5kb3c7CnR5 cGVkZWYgWElEIERyYXdhYmxlOwoKCnR5cGVkZWYgWElEIEZvbnQ7Cgp0eXBlZGVmIFhJRCBQaXht YXA7CnR5cGVkZWYgWElEIEN1cnNvcjsKdHlwZWRlZiBYSUQgQ29sb3JtYXA7CnR5cGVkZWYgWElE IEdDb250ZXh0Owp0eXBlZGVmIFhJRCBLZXlTeW07Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgS2V5 Q29kZTsKIyA1NiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCgojIDEgIi91c3Iv WDExUjYvaW5jbHVkZS9YMTEvWGZ1bmNwcm90by5oIiAxCiMgNTkgIi91c3IvWDExUjYvaW5jbHVk ZS9YMTEvWGxpYi5oIiAyCiMgMSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9Yb3NkZWZzLmgiIDEK IyA2MCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKIyA3MiAiL3Vzci9YMTFSNi9p bmNsdWRlL1gxMS9YbGliLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu dS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA3MyAiL3Vzci9YMTFSNi9pbmNsdWRlL1gx MS9YbGliLmgiIDIKIyA5NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCnR5cGVkZWYg Y2hhciAqWFBvaW50ZXI7CiMgMTY2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIKdHlw ZWRlZiBzdHJ1Y3QgX1hFeHREYXRhIHsKICAgICAgICBpbnQgbnVtYmVyOwogICAgICAgIHN0cnVj dCBfWEV4dERhdGEgKm5leHQ7CiAgICAgICAgaW50ICgqZnJlZV9wcml2YXRlKSgKCiAgICAgICAg c3RydWN0IF9YRXh0RGF0YSAqZXh0ZW5zaW9uCgogICAgICAgICk7CiAgICAgICAgWFBvaW50ZXIg cHJpdmF0ZV9kYXRhOwp9IFhFeHREYXRhOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGlu dCBleHRlbnNpb247CiAgICAgICAgaW50IG1ham9yX29wY29kZTsKICAgICAgICBpbnQgZmlyc3Rf ZXZlbnQ7CiAgICAgICAgaW50IGZpcnN0X2Vycm9yOwp9IFhFeHRDb2RlczsKCgoKCgp0eXBlZGVm IHN0cnVjdCB7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICBpbnQg c2NhbmxpbmVfcGFkOwp9IFhQaXhtYXBGb3JtYXRWYWx1ZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIGludCBmdW5jdGlvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIHBsYW5lX21hc2s7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JlZ3JvdW5kOwogICAgICAgIHVuc2lnbmVkIGxvbmcg YmFja2dyb3VuZDsKICAgICAgICBpbnQgbGluZV93aWR0aDsKICAgICAgICBpbnQgbGluZV9zdHls ZTsKICAgICAgICBpbnQgY2FwX3N0eWxlOwoKICAgICAgICBpbnQgam9pbl9zdHlsZTsKICAgICAg ICBpbnQgZmlsbF9zdHlsZTsKCiAgICAgICAgaW50IGZpbGxfcnVsZTsKICAgICAgICBpbnQgYXJj X21vZGU7CiAgICAgICAgUGl4bWFwIHRpbGU7CiAgICAgICAgUGl4bWFwIHN0aXBwbGU7CiAgICAg ICAgaW50IHRzX3hfb3JpZ2luOwogICAgICAgIGludCB0c195X29yaWdpbjsKICAgICAgICBGb250 IGZvbnQ7CiAgICAgICAgaW50IHN1YndpbmRvd19tb2RlOwogICAgICAgIGludCBncmFwaGljc19l eHBvc3VyZXM7CiAgICAgICAgaW50IGNsaXBfeF9vcmlnaW47CiAgICAgICAgaW50IGNsaXBfeV9v cmlnaW47CiAgICAgICAgUGl4bWFwIGNsaXBfbWFzazsKICAgICAgICBpbnQgZGFzaF9vZmZzZXQ7 CiAgICAgICAgY2hhciBkYXNoZXM7Cn0gWEdDVmFsdWVzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBf WEdDCgoKCgoKCgoqR0M7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWEV4dERhdGEgKmV4 dF9kYXRhOwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwoKICAgICAgICBpbnQgY19jbGFzczsK CgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrLCBncmVlbl9tYXNrLCBibHVlX21hc2s7 CiAgICAgICAgaW50IGJpdHNfcGVyX3JnYjsKICAgICAgICBpbnQgbWFwX2VudHJpZXM7Cn0gVmlz dWFsOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBkZXB0aDsKICAgICAgICBpbnQg bnZpc3VhbHM7CiAgICAgICAgVmlzdWFsICp2aXN1YWxzOwp9IERlcHRoOwoKCgoKCgoKc3RydWN0 IF9YRGlzcGxheTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7 CiAgICAgICAgc3RydWN0IF9YRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcm9vdDsK ICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgbXdpZHRoLCBtaGVpZ2h0Owog ICAgICAgIGludCBuZGVwdGhzOwogICAgICAgIERlcHRoICpkZXB0aHM7CiAgICAgICAgaW50IHJv b3RfZGVwdGg7CiAgICAgICAgVmlzdWFsICpyb290X3Zpc3VhbDsKICAgICAgICBHQyBkZWZhdWx0 X2djOwogICAgICAgIENvbG9ybWFwIGNtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyB3aGl0ZV9w aXhlbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJsYWNrX3BpeGVsOwogICAgICAgIGludCBtYXhf bWFwcywgbWluX21hcHM7CiAgICAgICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICAgICAgaW50IHNh dmVfdW5kZXJzOwogICAgICAgIGxvbmcgcm9vdF9pbnB1dF9tYXNrOwp9IFNjcmVlbjsKCgoKCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7CiAgICAgICAgaW50IGRl cHRoOwogICAgICAgIGludCBiaXRzX3Blcl9waXhlbDsKICAgICAgICBpbnQgc2NhbmxpbmVfcGFk Owp9IFNjcmVlbkZvcm1hdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFBpeG1hcCBiYWNrZ3Jv dW5kX3BpeG1hcDsKICAgIHVuc2lnbmVkIGxvbmcgYmFja2dyb3VuZF9waXhlbDsKICAgIFBpeG1h cCBib3JkZXJfcGl4bWFwOwogICAgdW5zaWduZWQgbG9uZyBib3JkZXJfcGl4ZWw7CiAgICBpbnQg Yml0X2dyYXZpdHk7CiAgICBpbnQgd2luX2dyYXZpdHk7CiAgICBpbnQgYmFja2luZ19zdG9yZTsK ICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFuZXM7CiAgICB1bnNpZ25lZCBsb25nIGJhY2tp bmdfcGl4ZWw7CiAgICBpbnQgc2F2ZV91bmRlcjsKICAgIGxvbmcgZXZlbnRfbWFzazsKICAgIGxv bmcgZG9fbm90X3Byb3BhZ2F0ZV9tYXNrOwogICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0OwogICAg Q29sb3JtYXAgY29sb3JtYXA7CiAgICBDdXJzb3IgY3Vyc29yOwp9IFhTZXRXaW5kb3dBdHRyaWJ1 dGVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHgsIHk7CiAgICBpbnQgd2lkdGgsIGhlaWdo dDsKICAgIGludCBib3JkZXJfd2lkdGg7CiAgICBpbnQgZGVwdGg7CiAgICBWaXN1YWwgKnZpc3Vh bDsKICAgIFdpbmRvdyByb290OwoKICAgIGludCBjX2NsYXNzOwoKCgogICAgaW50IGJpdF9ncmF2 aXR5OwogICAgaW50IHdpbl9ncmF2aXR5OwogICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICB1bnNp Z25lZCBsb25nIGJhY2tpbmdfcGxhbmVzOwogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVs OwogICAgaW50IHNhdmVfdW5kZXI7CiAgICBDb2xvcm1hcCBjb2xvcm1hcDsKICAgIGludCBtYXBf aW5zdGFsbGVkOwogICAgaW50IG1hcF9zdGF0ZTsKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwog ICAgbG9uZyB5b3VyX2V2ZW50X21hc2s7CiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsK ICAgIGludCBvdmVycmlkZV9yZWRpcmVjdDsKICAgIFNjcmVlbiAqc2NyZWVuOwp9IFhXaW5kb3dB dHRyaWJ1dGVzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGZhbWlseTsKICAg ICAgICBpbnQgbGVuZ3RoOwogICAgICAgIGNoYXIgKmFkZHJlc3M7Cn0gWEhvc3RBZGRyZXNzOwoK CgoKdHlwZWRlZiBzdHJ1Y3QgX1hJbWFnZSB7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGlu dCB4b2Zmc2V0OwogICAgaW50IGZvcm1hdDsKICAgIGNoYXIgKmRhdGE7CiAgICBpbnQgYnl0ZV9v cmRlcjsKICAgIGludCBiaXRtYXBfdW5pdDsKICAgIGludCBiaXRtYXBfYml0X29yZGVyOwogICAg aW50IGJpdG1hcF9wYWQ7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CiAg ICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogICAgdW5z aWduZWQgbG9uZyBncmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgICBY UG9pbnRlciBvYmRhdGE7CiAgICBzdHJ1Y3QgZnVuY3MgewoKICAgICAgICBzdHJ1Y3QgX1hJbWFn ZSAqKCpjcmVhdGVfaW1hZ2UpKAogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlzcGxheSogLAog ICAgICAgICAgICAgICAgVmlzdWFsKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAog ICAgICAgICAgICAgICAgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAg ICBjaGFyKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBpbnQg KTsKICAgICAgICBpbnQgKCpkZXN0cm95X2ltYWdlKSAoc3RydWN0IF9YSW1hZ2UgKik7CiAgICAg ICAgdW5zaWduZWQgbG9uZyAoKmdldF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50 KTsKICAgICAgICBpbnQgKCpwdXRfcGl4ZWwpIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwg dW5zaWduZWQgbG9uZyk7CiAgICAgICAgc3RydWN0IF9YSW1hZ2UgKigqc3ViX2ltYWdlKShzdHJ1 Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogICAg ICAgIGludCAoKmFkZF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGxvbmcpOwojIDQxMiAiL3Vz ci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCiAgICAgICAgfSBmOwp9IFhJbWFnZTsKCgoKCnR5 cGVkZWYgc3RydWN0IHsKICAgIGludCB4LCB5OwogICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICBp bnQgYm9yZGVyX3dpZHRoOwogICAgV2luZG93IHNpYmxpbmc7CiAgICBpbnQgc3RhY2tfbW9kZTsK fSBYV2luZG93Q2hhbmdlczsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBs b25nIHBpeGVsOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZCwgZ3JlZW4sIGJsdWU7CiAgICAg ICAgY2hhciBmbGFnczsKICAgICAgICBjaGFyIHBhZDsKfSBYQ29sb3I7CgoKCgoKCnR5cGVkZWYg c3RydWN0IHsKICAgIHNob3J0IHgxLCB5MSwgeDIsIHkyOwp9IFhTZWdtZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKfSBYUG9pbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBz aG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgsIGhlaWdodDsKfSBYUmVjdGFuZ2xl OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVkIHNob3J0IHdp ZHRoLCBoZWlnaHQ7CiAgICBzaG9ydCBhbmdsZTEsIGFuZ2xlMjsKfSBYQXJjOwoKCgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBpbnQgYmVs bF9wZXJjZW50OwogICAgICAgIGludCBiZWxsX3BpdGNoOwogICAgICAgIGludCBiZWxsX2R1cmF0 aW9uOwogICAgICAgIGludCBsZWQ7CiAgICAgICAgaW50IGxlZF9tb2RlOwogICAgICAgIGludCBr ZXk7CiAgICAgICAgaW50IGF1dG9fcmVwZWF0X21vZGU7Cn0gWEtleWJvYXJkQ29udHJvbDsKCgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBp bnQgYmVsbF9wZXJjZW50OwogICAgICAgIHVuc2lnbmVkIGludCBiZWxsX3BpdGNoLCBiZWxsX2R1 cmF0aW9uOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVkX21hc2s7CiAgICAgICAgaW50IGdsb2Jh bF9hdXRvX3JlcGVhdDsKICAgICAgICBjaGFyIGF1dG9fcmVwZWF0c1szMl07Cn0gWEtleWJvYXJk U3RhdGU7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgc2hv cnQgeCwgeTsKfSBYVGltZUNvb3JkOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG1h eF9rZXlwZXJtb2Q7CiAgICAgICAgS2V5Q29kZSAqbW9kaWZpZXJtYXA7Cn0gWE1vZGlmaWVyS2V5 bWFwOwojIDUwNiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCnR5cGVkZWYgc3RydWN0 IF9YRGlzcGxheSBEaXNwbGF5OwoKCnN0cnVjdCBfWFByaXZhdGU7CnN0cnVjdCBfWHJtSGFzaEJ1 Y2tldFJlYzsKCnR5cGVkZWYgc3RydWN0CgoKCnsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7 CiAgICAgICAgc3RydWN0IF9YUHJpdmF0ZSAqcHJpdmF0ZTE7CiAgICAgICAgaW50IGZkOwogICAg ICAgIGludCBwcml2YXRlMjsKICAgICAgICBpbnQgcHJvdG9fbWFqb3JfdmVyc2lvbjsKICAgICAg ICBpbnQgcHJvdG9fbWlub3JfdmVyc2lvbjsKICAgICAgICBjaGFyICp2ZW5kb3I7CiAgICAgICAg WElEIHByaXZhdGUzOwogICAgICAgIFhJRCBwcml2YXRlNDsKICAgICAgICBYSUQgcHJpdmF0ZTU7 CiAgICAgICAgaW50IHByaXZhdGU2OwogICAgICAgIFhJRCAoKnJlc291cmNlX2FsbG9jKSgKCiAg ICAgICAgICAgICAgICBzdHJ1Y3QgX1hEaXNwbGF5KgoKICAgICAgICApOwogICAgICAgIGludCBi eXRlX29yZGVyOwogICAgICAgIGludCBiaXRtYXBfdW5pdDsKICAgICAgICBpbnQgYml0bWFwX3Bh ZDsKICAgICAgICBpbnQgYml0bWFwX2JpdF9vcmRlcjsKICAgICAgICBpbnQgbmZvcm1hdHM7CiAg ICAgICAgU2NyZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwogICAgICAgIGludCBwcml2YXRlODsK ICAgICAgICBpbnQgcmVsZWFzZTsKICAgICAgICBzdHJ1Y3QgX1hQcml2YXRlICpwcml2YXRlOSwg KnByaXZhdGUxMDsKICAgICAgICBpbnQgcWxlbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rf cmVxdWVzdF9yZWFkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKICAgICAgICBYUG9p bnRlciBwcml2YXRlMTE7CiAgICAgICAgWFBvaW50ZXIgcHJpdmF0ZTEyOwogICAgICAgIFhQb2lu dGVyIHByaXZhdGUxMzsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTQ7CiAgICAgICAgdW5zaWdu ZWQgbWF4X3JlcXVlc3Rfc2l6ZTsKICAgICAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKmRi OwogICAgICAgIGludCAoKnByaXZhdGUxNSkoCgogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlz cGxheSoKCiAgICAgICAgICAgICAgICApOwogICAgICAgIGNoYXIgKmRpc3BsYXlfbmFtZTsKICAg ICAgICBpbnQgZGVmYXVsdF9zY3JlZW47CiAgICAgICAgaW50IG5zY3JlZW5zOwogICAgICAgIFNj cmVlbiAqc2NyZWVuczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1vdGlvbl9idWZmZXI7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBwcml2YXRlMTY7CiAgICAgICAgaW50IG1pbl9rZXljb2RlOwogICAg ICAgIGludCBtYXhfa2V5Y29kZTsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTc7CiAgICAgICAg WFBvaW50ZXIgcHJpdmF0ZTE4OwogICAgICAgIGludCBwcml2YXRlMTk7CiAgICAgICAgY2hhciAq eGRlZmF1bHRzOwoKfQoKCgoqX1hQcml2RGlzcGxheTsKIyA1ODIgIi91c3IvWDExUjYvaW5jbHVk ZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlz cGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyByb290 OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwogICAgICAgIGlu dCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNpZ25lZCBpbnQg c3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGtleWNvZGU7CiAgICAgICAgaW50IHNhbWVfc2Ny ZWVuOwp9IFhLZXlFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlw ZWRlZiBYS2V5RXZlbnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg ICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNl bmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93 OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAg VGltZSB0aW1lOwogICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsK ICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGJ1dHRvbjsK ICAgICAgICBpbnQgc2FtZV9zY3JlZW47Cn0gWEJ1dHRvbkV2ZW50Owp0eXBlZGVmIFhCdXR0b25F dmVudCBYQnV0dG9uUHJlc3NlZEV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9uUmVs ZWFzZWRFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNw bGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgV2luZG93IHJvb3Q7 CiAgICAgICAgV2luZG93IHN1YndpbmRvdzsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgaW50 IHgsIHk7CiAgICAgICAgaW50IHhfcm9vdCwgeV9yb290OwogICAgICAgIHVuc2lnbmVkIGludCBz dGF0ZTsKICAgICAgICBjaGFyIGlzX2hpbnQ7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhN b3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg ICAgICAgV2luZG93IHdpbmRvdzsKICAgICAgICBXaW5kb3cgcm9vdDsKICAgICAgICBXaW5kb3cg c3Vid2luZG93OwogICAgICAgIFRpbWUgdGltZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBp bnQgeF9yb290LCB5X3Jvb3Q7CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGRldGFpbDsK CgoKCiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwogICAgICAgIGludCBmb2N1czsKICAgICAgICB1 bnNpZ25lZCBpbnQgc3RhdGU7Cn0gWENyb3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZl bnQgWEVudGVyV2luZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93 RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq ZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBtb2RlOwogICAgICAg IGludCBkZXRhaWw7CgoKCgoKfSBYRm9jdXNDaGFuZ2VFdmVudDsKdHlwZWRlZiBYRm9jdXNDaGFu Z2VFdmVudCBYRm9jdXNJbkV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1c091 dEV2ZW50OwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5 ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgY2hhciBrZXlfdmVjdG9y WzMyXTsKfSBYS2V5bWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGlu dCB4LCB5OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBjb3VudDsKfSBY RXhwb3NlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlz cGxheSAqZGlzcGxheTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgeCwg eTsKICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAg aW50IG1ham9yX2NvZGU7CiAgICAgICAgaW50IG1pbm9yX2NvZGU7Cn0gWEdyYXBoaWNzRXhwb3Nl RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq ZGlzcGxheTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgbWFqb3JfY29k ZTsKICAgICAgICBpbnQgbWlub3JfY29kZTsKfSBYTm9FeHBvc2VFdmVudDsKCnR5cGVkZWYgc3Ry dWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAg ICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdp bmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHN0YXRlOwp9IFhWaXNpYmlsaXR5RXZlbnQ7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg ICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgs IHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsK ICAgICAgICBpbnQgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg ICAgICAgV2luZG93IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWERlc3Ryb3lXaW5k b3dFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5 ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93Owog ICAgICAgIGludCBmcm9tX2NvbmZpZ3VyZTsKfSBYVW5tYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0 IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAg ICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRv dyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBvdmVycmlkZV9yZWRp cmVjdDsKfSBYTWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAg ICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRv dyB3aW5kb3c7Cn0gWE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp bnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9l dmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAg ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyBwYXJlbnQ7CiAgICAgICAgaW50IHgs IHk7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhSZXBhcmVudEV2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg ICAgICAgV2luZG93IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgs IHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsK ICAgICAgICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhD b25maWd1cmVFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBE aXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2lu ZG93OwogICAgICAgIGludCB4LCB5Owp9IFhHcmF2aXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAg aW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cg d2luZG93OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh eTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAg aW50IHgsIHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93 aWR0aDsKICAgICAgICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IGRldGFpbDsKICAgICAgICB1 bnNpZ25lZCBsb25nIHZhbHVlX21hc2s7Cn0gWENvbmZpZ3VyZVJlcXVlc3RFdmVudDsKCnR5cGVk ZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlh bDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAg ICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBwbGFj ZTsKfSBYQ2lyY3VsYXRlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdp bmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHBsYWNlOwp9IFhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQ7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh eTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIEF0b20gYXRvbTsKICAgICAgICBUaW1l IHRpbWU7CiAgICAgICAgaW50IHN0YXRlOwp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAg ICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2lu ZG93IHdpbmRvdzsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBUaW1lIHRpbWU7Cn0g WFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgb3duZXI7CiAgICAgICAgV2lu ZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdl dDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9u UmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERp c3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNl bGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdldDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAg ICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9uRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg ICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNl bmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93 OwogICAgICAgIENvbG9ybWFwIGNvbG9ybWFwOwoKICAgICAgICBpbnQgY19uZXc7CgoKCiAgICAg ICAgaW50IHN0YXRlOwp9IFhDb2xvcm1hcEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5k X2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsK ICAgICAgICBBdG9tIG1lc3NhZ2VfdHlwZTsKICAgICAgICBpbnQgZm9ybWF0OwogICAgICAgIHVu aW9uIHsKICAgICAgICAgICAgICAgIGNoYXIgYlsyMF07CiAgICAgICAgICAgICAgICBzaG9ydCBz WzEwXTsKICAgICAgICAgICAgICAgIGxvbmcgbFs1XTsKICAgICAgICAgICAgICAgIH0gZGF0YTsK fSBYQ2xpZW50TWVzc2FnZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBl OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50Owog ICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsKICAgICAgICBp bnQgcmVxdWVzdDsKCiAgICAgICAgaW50IGZpcnN0X2tleWNvZGU7CiAgICAgICAgaW50IGNvdW50 Owp9IFhNYXBwaW5nRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBYSUQgcmVzb3VyY2VpZDsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2NvZGU7CiAg ICAgICAgdW5zaWduZWQgY2hhciByZXF1ZXN0X2NvZGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBt aW5vcl9jb2RlOwp9IFhFcnJvckV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0 eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50 OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsKfSBYQW55 RXZlbnQ7CgoKCgoKdHlwZWRlZiB1bmlvbiBfWEV2ZW50IHsKICAgICAgICBpbnQgdHlwZTsKICAg ICAgICBYQW55RXZlbnQgeGFueTsKICAgICAgICBYS2V5RXZlbnQgeGtleTsKICAgICAgICBYQnV0 dG9uRXZlbnQgeGJ1dHRvbjsKICAgICAgICBYTW90aW9uRXZlbnQgeG1vdGlvbjsKICAgICAgICBY Q3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CiAgICAgICAgWEZvY3VzQ2hhbmdlRXZlbnQgeGZvY3Vz OwogICAgICAgIFhFeHBvc2VFdmVudCB4ZXhwb3NlOwogICAgICAgIFhHcmFwaGljc0V4cG9zZUV2 ZW50IHhncmFwaGljc2V4cG9zZTsKICAgICAgICBYTm9FeHBvc2VFdmVudCB4bm9leHBvc2U7CiAg ICAgICAgWFZpc2liaWxpdHlFdmVudCB4dmlzaWJpbGl0eTsKICAgICAgICBYQ3JlYXRlV2luZG93 RXZlbnQgeGNyZWF0ZXdpbmRvdzsKICAgICAgICBYRGVzdHJveVdpbmRvd0V2ZW50IHhkZXN0cm95 d2luZG93OwogICAgICAgIFhVbm1hcEV2ZW50IHh1bm1hcDsKICAgICAgICBYTWFwRXZlbnQgeG1h cDsKICAgICAgICBYTWFwUmVxdWVzdEV2ZW50IHhtYXByZXF1ZXN0OwogICAgICAgIFhSZXBhcmVu dEV2ZW50IHhyZXBhcmVudDsKICAgICAgICBYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKICAg ICAgICBYR3Jhdml0eUV2ZW50IHhncmF2aXR5OwogICAgICAgIFhSZXNpemVSZXF1ZXN0RXZlbnQg eHJlc2l6ZXJlcXVlc3Q7CiAgICAgICAgWENvbmZpZ3VyZVJlcXVlc3RFdmVudCB4Y29uZmlndXJl cmVxdWVzdDsKICAgICAgICBYQ2lyY3VsYXRlRXZlbnQgeGNpcmN1bGF0ZTsKICAgICAgICBYQ2ly Y3VsYXRlUmVxdWVzdEV2ZW50IHhjaXJjdWxhdGVyZXF1ZXN0OwogICAgICAgIFhQcm9wZXJ0eUV2 ZW50IHhwcm9wZXJ0eTsKICAgICAgICBYU2VsZWN0aW9uQ2xlYXJFdmVudCB4c2VsZWN0aW9uY2xl YXI7CiAgICAgICAgWFNlbGVjdGlvblJlcXVlc3RFdmVudCB4c2VsZWN0aW9ucmVxdWVzdDsKICAg ICAgICBYU2VsZWN0aW9uRXZlbnQgeHNlbGVjdGlvbjsKICAgICAgICBYQ29sb3JtYXBFdmVudCB4 Y29sb3JtYXA7CiAgICAgICAgWENsaWVudE1lc3NhZ2VFdmVudCB4Y2xpZW50OwogICAgICAgIFhN YXBwaW5nRXZlbnQgeG1hcHBpbmc7CiAgICAgICAgWEVycm9yRXZlbnQgeGVycm9yOwogICAgICAg IFhLZXltYXBFdmVudCB4a2V5bWFwOwogICAgICAgIGxvbmcgcGFkWzI0XTsKfSBYRXZlbnQ7CgoK CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCBsYmVhcmluZzsKICAgIHNob3J0IHJiZWFy aW5nOwogICAgc2hvcnQgd2lkdGg7CiAgICBzaG9ydCBhc2NlbnQ7CiAgICBzaG9ydCBkZXNjZW50 OwogICAgdW5zaWduZWQgc2hvcnQgYXR0cmlidXRlczsKfSBYQ2hhclN0cnVjdDsKCgoKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBBdG9tIG5hbWU7CiAgICB1bnNpZ25lZCBsb25nIGNhcmQzMjsKfSBY Rm9udFByb3A7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYRXh0RGF0YSAqZXh0X2RhdGE7CiAgICBG b250IGZpZDsKICAgIHVuc2lnbmVkIGRpcmVjdGlvbjsKICAgIHVuc2lnbmVkIG1pbl9jaGFyX29y X2J5dGUyOwogICAgdW5zaWduZWQgbWF4X2NoYXJfb3JfYnl0ZTI7CiAgICB1bnNpZ25lZCBtaW5f Ynl0ZTE7CiAgICB1bnNpZ25lZCBtYXhfYnl0ZTE7CiAgICBpbnQgYWxsX2NoYXJzX2V4aXN0Owog ICAgdW5zaWduZWQgZGVmYXVsdF9jaGFyOwogICAgaW50IG5fcHJvcGVydGllczsKICAgIFhGb250 UHJvcCAqcHJvcGVydGllczsKICAgIFhDaGFyU3RydWN0IG1pbl9ib3VuZHM7CiAgICBYQ2hhclN0 cnVjdCBtYXhfYm91bmRzOwogICAgWENoYXJTdHJ1Y3QgKnBlcl9jaGFyOwogICAgaW50IGFzY2Vu dDsKICAgIGludCBkZXNjZW50Owp9IFhGb250U3RydWN0OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgY2hhciAqY2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAgaW50IGRlbHRhOwogICAgRm9udCBm b250Owp9IFhUZXh0SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGNoYXIgYnl0 ZTE7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUyOwp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBYQ2hhcjJiICpjaGFyczsKICAgIGludCBuY2hhcnM7CiAgICBpbnQgZGVsdGE7CiAgICBG b250IGZvbnQ7Cn0gWFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRpc3Bs YXk7CiAgICAgICAgICAgICAgICBHQyBnYzsKICAgICAgICAgICAgICAgIFZpc3VhbCAqdmlzdWFs OwogICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW47CiAgICAgICAgICAgICAgICBTY3JlZW5G b3JtYXQgKnBpeG1hcF9mb3JtYXQ7CiAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udDsg fSBYRURhdGFPYmplY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUmVjdGFuZ2xlIG1heF9pbmtf ZXh0ZW50OwogICAgWFJlY3RhbmdsZSBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRl bnRzOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9YT00gKlhPTTsKdHlwZWRlZiBzdHJ1Y3QgX1hPQyAq WE9DLCAqWEZvbnRTZXQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICpjaGFyczsKICAgIGlu dCBuY2hhcnM7CiAgICBpbnQgZGVsdGE7CiAgICBYRm9udFNldCBmb250X3NldDsKfSBYbWJUZXh0 SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFyX3QgKmNoYXJzOwogICAgaW50IG5jaGFy czsKICAgIGludCBkZWx0YTsKICAgIFhGb250U2V0IGZvbnRfc2V0Owp9IFh3Y1RleHRJdGVtOwoj IDExMTYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBpbnQgY2hhcnNldF9jb3VudDsKICAgIGNoYXIgKipjaGFyc2V0X2xpc3Q7Cn0gWE9NQ2hhclNl dExpc3Q7Cgp0eXBlZGVmIGVudW0gewogICAgWE9NT3JpZW50YXRpb25fTFRSX1RUQiwKICAgIFhP TU9yaWVudGF0aW9uX1JUTF9UVEIsCiAgICBYT01PcmllbnRhdGlvbl9UVEJfTFRSLAogICAgWE9N T3JpZW50YXRpb25fVFRCX1JUTCwKICAgIFhPTU9yaWVudGF0aW9uX0NvbnRleHQKfSBYT3JpZW50 YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbnVtX29yaWVudGF0aW9uOwogICAgWE9y aWVudGF0aW9uICpvcmllbnRhdGlvbjsKfSBYT01PcmllbnRhdGlvbjsKCnR5cGVkZWYgc3RydWN0 IHsKICAgIGludCBudW1fZm9udDsKICAgIFhGb250U3RydWN0ICoqZm9udF9zdHJ1Y3RfbGlzdDsK ICAgIGNoYXIgKipmb250X25hbWVfbGlzdDsKfSBYT01Gb250SW5mbzsKCnR5cGVkZWYgc3RydWN0 IF9YSU0gKlhJTTsKdHlwZWRlZiBzdHJ1Y3QgX1hJQyAqWElDOwoKdHlwZWRlZiB2b2lkICgqWElN UHJvYykoCgogICAgWElNLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYg aW50ICgqWElDUHJvYykoCgogICAgWElDLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsK CnR5cGVkZWYgdm9pZCAoKlhJRFByb2MpKAoKICAgIERpc3BsYXkqLAogICAgWFBvaW50ZXIsCiAg ICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1TdHlsZTsKCnR5cGVkZWYg c3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0IGNvdW50X3N0eWxlczsKICAgIFhJTVN0eWxlICpz dXBwb3J0ZWRfc3R5bGVzOwp9IFhJTVN0eWxlczsKIyAxMjM1ICIvdXNyL1gxMVI2L2luY2x1ZGUv WDExL1hsaWIuaCIKdHlwZWRlZiB2b2lkICpYVmFOZXN0ZWRMaXN0OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgWFBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICBYSU1Qcm9jIGNhbGxiYWNrOwp9IFhJ TUNhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWFBvaW50ZXIgY2xpZW50X2RhdGE7CiAg ICBYSUNQcm9jIGNhbGxiYWNrOwp9IFhJQ0NhbGxiYWNrOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IFhJTUZlZWRiYWNrOwojIDEyNjIgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBl ZGVmIHN0cnVjdCBfWElNVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgICBYSU1G ZWVkYmFjayAqZmVlZGJhY2s7CiAgICBpbnQgZW5jb2RpbmdfaXNfd2NoYXI7CiAgICB1bmlvbiB7 CiAgICAgICAgY2hhciAqbXVsdGlfYnl0ZTsKICAgICAgICB3Y2hhcl90ICp3aWRlX2NoYXI7CiAg ICB9IHN0cmluZzsKfSBYSU1UZXh0OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVByZWVkaXRT dGF0ZTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdFN0YXRlTm90aWZ5Q2FsbGJhY2tT dHJ1Y3QgewogICAgWElNUHJlZWRpdFN0YXRlIHN0YXRlOwp9IFhJTVByZWVkaXRTdGF0ZU5vdGlm eUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVJlc2V0U3RhdGU7CgoK Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNU3RyaW5nQ29udmVyc2lvbkZlZWRiYWNrOwojIDEy OTYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCBfWElNU3Ry aW5nQ29udmVyc2lvblRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNU3Ry aW5nQ29udmVyc2lvbkZlZWRiYWNrICpmZWVkYmFjazsKICAgIGludCBlbmNvZGluZ19pc193Y2hh cjsKICAgIHVuaW9uIHsKICAgICAgICBjaGFyICptYnM7CiAgICAgICAgd2NoYXJfdCAqd2NzOwog ICAgfSBzdHJpbmc7Cn0gWElNU3RyaW5nQ29udmVyc2lvblRleHQ7Cgp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IFhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbjsKCnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgWElNU3RyaW5nQ29udmVyc2lvblR5cGU7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg WElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbjsKCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1G b3J3YXJkQ2hhciwgWElNQmFja3dhcmRDaGFyLAogICAgWElNRm9yd2FyZFdvcmQsIFhJTUJhY2t3 YXJkV29yZCwKICAgIFhJTUNhcmV0VXAsIFhJTUNhcmV0RG93biwKICAgIFhJTU5leHRMaW5lLCBY SU1QcmV2aW91c0xpbmUsCiAgICBYSU1MaW5lU3RhcnQsIFhJTUxpbmVFbmQsCiAgICBYSU1BYnNv bHV0ZVBvc2l0aW9uLAogICAgWElNRG9udENoYW5nZQp9IFhJTUNhcmV0RGlyZWN0aW9uOwoKdHlw ZWRlZiBzdHJ1Y3QgX1hJTVN0cmluZ0NvbnZlcnNpb25DYWxsYmFja1N0cnVjdCB7CiAgICBYSU1T dHJpbmdDb252ZXJzaW9uUG9zaXRpb24gcG9zaXRpb247CiAgICBYSU1DYXJldERpcmVjdGlvbiBk aXJlY3Rpb247CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uT3BlcmF0aW9uIG9wZXJhdGlvbjsKICAg IHVuc2lnbmVkIHNob3J0IGZhY3RvcjsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0ICp0ZXh0 Owp9IFhJTVN0cmluZ0NvbnZlcnNpb25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IF9Y SU1QcmVlZGl0RHJhd0NhbGxiYWNrU3RydWN0IHsKICAgIGludCBjYXJldDsKICAgIGludCBjaGdf Zmlyc3Q7CiAgICBpbnQgY2hnX2xlbmd0aDsKICAgIFhJTVRleHQgKnRleHQ7Cn0gWElNUHJlZWRp dERyYXdDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1Jc0ludmlzaWJsZSwK ICAgIFhJTUlzUHJpbWFyeSwKICAgIFhJTUlzU2Vjb25kYXJ5Cn0gWElNQ2FyZXRTdHlsZTsKCnR5 cGVkZWYgc3RydWN0IF9YSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgcG9z aXRpb247CiAgICBYSU1DYXJldERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICBYSU1DYXJldFN0eWxl IHN0eWxlOwp9IFhJTVByZWVkaXRDYXJldENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBlbnVtIHsK ICAgIFhJTVRleHRUeXBlLAogICAgWElNQml0bWFwVHlwZQp9IFhJTVN0YXR1c0RhdGFUeXBlOwoK dHlwZWRlZiBzdHJ1Y3QgX1hJTVN0YXR1c0RyYXdDYWxsYmFja1N0cnVjdCB7CiAgICBYSU1TdGF0 dXNEYXRhVHlwZSB0eXBlOwogICAgdW5pb24gewogICAgICAgIFhJTVRleHQgKnRleHQ7CiAgICAg ICAgUGl4bWFwIGJpdG1hcDsKICAgIH0gZGF0YTsKfSBYSU1TdGF0dXNEcmF3Q2FsbGJhY2tTdHJ1 Y3Q7Cgp0eXBlZGVmIHN0cnVjdCBfWElNSG90S2V5VHJpZ2dlciB7CiAgICBLZXlTeW0ga2V5c3lt OwogICAgaW50IG1vZGlmaWVyOwogICAgaW50IG1vZGlmaWVyX21hc2s7Cn0gWElNSG90S2V5VHJp Z2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlUcmlnZ2VycyB7CiAgICBpbnQgbnVtX2hv dF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyICprZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7Cgp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNSG90S2V5U3RhdGU7CgoKCgp0eXBlZGVmIHN0cnVjdCB7 CiAgICB1bnNpZ25lZCBzaG9ydCBjb3VudF92YWx1ZXM7CiAgICBjaGFyICoqc3VwcG9ydGVkX3Zh bHVlczsKfSBYSU1WYWx1ZXNMaXN0OwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIGludCBfWGRl YnVnOwoKZXh0ZXJuIFhGb250U3RydWN0ICpYTG9hZFF1ZXJ5Rm9udCgKCiAgICBEaXNwbGF5KiAs CiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBYRm9udFN0cnVjdCAqWFF1ZXJ5Rm9udCgKCiAg ICBEaXNwbGF5KiAsCiAgICBYSUQKCik7CgoKZXh0ZXJuIFhUaW1lQ29vcmQgKlhHZXRNb3Rpb25F dmVudHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFRpbWUgLAogICAgVGltZSAs CiAgICBpbnQqCgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFw RW50cnkoCgogICAgWE1vZGlmaWVyS2V5bWFwKiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAg IGludAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhHZXRNb2RpZmllck1hcHBpbmcoCgog ICAgRGlzcGxheSoKCik7CgpleHRlcm4gWE1vZGlmaWVyS2V5bWFwICpYSW5zZXJ0TW9kaWZpZXJt YXBFbnRyeSgKCiAgICBYTW9kaWZpZXJLZXltYXAqICwKCiAgICB1bnNpZ25lZCBpbnQgLAoKCgog ICAgaW50CgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWE5ld01vZGlmaWVybWFwKAoKICAg IGludAoKKTsKCmV4dGVybiBYSW1hZ2UgKlhDcmVhdGVJbWFnZSgKCiAgICBEaXNwbGF5KiAsCiAg ICBWaXN1YWwqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNo YXIqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAg IGludAoKKTsKZXh0ZXJuIGludCBYSW5pdEltYWdlKAoKICAgIFhJbWFnZSoKCik7CmV4dGVybiBY SW1hZ2UgKlhHZXRJbWFnZSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBpbnQg LAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgbG9uZyAsCiAgICBpbnQKCik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgKCiAg ICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2ln bmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQg LAogICAgWEltYWdlKiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKCgoKZXh0ZXJuIERpc3BsYXkg KlhPcGVuRGlzcGxheSgKCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFhybUluaXRp YWxpemUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBjaGFyICpYRmV0Y2hCeXRlcygKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQqCgopOwpleHRlcm4gY2hhciAqWEZldGNoQnVmZmVyKAoKICAgIERpc3Bs YXkqICwKICAgIGludCogLAogICAgaW50CgopOwpleHRlcm4gY2hhciAqWEdldEF0b21OYW1lKAoK ICAgIERpc3BsYXkqICwKICAgIEF0b20KCik7CmV4dGVybiBpbnQgWEdldEF0b21OYW1lcygKCiAg ICBEaXNwbGF5KiAsCiAgICBBdG9tKiAsCiAgICBpbnQgLAogICAgY2hhcioqCgopOwpleHRlcm4g Y2hhciAqWEdldERlZmF1bHQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAg Y29uc3QgY2hhcioKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUoCgogICAgY29uc3QgY2hh cioKCik7CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgogICAgS2V5U3ltCgopOwoKZXh0 ZXJuIGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCikpKAoKICAg IERpc3BsYXkqCgopOwpleHRlcm4gaW50ICgqWFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxh eSogLAogICAgaW50ICgqKSAoCgogICAgICAgICAgICAgRGlzcGxheSoKCiAgICAgICAgICAgICkK CikpKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNw bGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWEludGVybkF0 b21zKAoKICAgIERpc3BsYXkqICwKICAgIGNoYXIqKiAsCiAgICBpbnQgLAogICAgaW50ICwKICAg IEF0b20qCgopOwpleHRlcm4gQ29sb3JtYXAgWENvcHlDb2xvcm1hcEFuZEZyZWUoCgogICAgRGlz cGxheSogLAogICAgQ29sb3JtYXAKCik7CmV4dGVybiBDb2xvcm1hcCBYQ3JlYXRlQ29sb3JtYXAo CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFZpc3VhbCogLAogICAgaW50CgopOwpl eHRlcm4gQ3Vyc29yIFhDcmVhdGVQaXhtYXBDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgUGl4 bWFwICwKICAgIFBpeG1hcCAsCiAgICBYQ29sb3IqICwKICAgIFhDb2xvciogLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhD dXJzb3IoCgogICAgRGlzcGxheSogLAogICAgRm9udCAsCiAgICBGb250ICwKICAgIHVuc2lnbmVk IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWENvbG9yIGNvbnN0ICogLAogICAgWENvbG9y IGNvbnN0ICoKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZUZvbnRDdXJzb3IoCgogICAgRGlzcGxh eSogLAogICAgdW5zaWduZWQgaW50CgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlz cGxheSogLAogICAgY29uc3QgY2hhcioKCik7CmV4dGVybiBHQyBYQ3JlYXRlR0MoCgogICAgRGlz cGxheSogLAogICAgRHJhd2FibGUgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBYR0NWYWx1ZXMq CgopOwpleHRlcm4gR0NvbnRleHQgWEdDb250ZXh0RnJvbUdDKAoKICAgIEdDCgopOwpleHRlcm4g dm9pZCBYRmx1c2hHQygKCiAgICBEaXNwbGF5KiAsCiAgICBHQwoKKTsKZXh0ZXJuIFBpeG1hcCBY Q3JlYXRlUGl4bWFwKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVk IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwpleHRlcm4gUGl4 bWFwIFhDcmVhdGVCaXRtYXBGcm9tRGF0YSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAs CiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50Cgop OwpleHRlcm4gUGl4bWFwIFhDcmVhdGVQaXhtYXBGcm9tQml0bWFwRGF0YSgKCiAgICBEaXNwbGF5 KiAsCiAgICBEcmF3YWJsZSAsCiAgICBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICB1 bnNpZ25lZCBpbnQKCik7CmV4dGVybiBXaW5kb3cgWENyZWF0ZVNpbXBsZVdpbmRvdygKCiAgICBE aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBp bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBs b25nICwKICAgIHVuc2lnbmVkIGxvbmcKCik7CmV4dGVybiBXaW5kb3cgWEdldFNlbGVjdGlvbk93 bmVyKAoKICAgIERpc3BsYXkqICwKICAgIEF0b20KCik7CmV4dGVybiBXaW5kb3cgWENyZWF0ZVdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAg ICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAg ICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFZpc3VhbCogLAogICAgdW5zaWduZWQgbG9u ZyAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyoKCik7CmV4dGVybiBDb2xvcm1hcCAqWExpc3RJ bnN0YWxsZWRDb2xvcm1hcHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCoK Cik7CmV4dGVybiBjaGFyICoqWExpc3RGb250cygKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBj aGFyKiAsCiAgICBpbnQgLAogICAgaW50KgoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRzV2l0 aEluZm8oCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIGlu dCogLAogICAgWEZvbnRTdHJ1Y3QqKgoKKTsKZXh0ZXJuIGNoYXIgKipYR2V0Rm9udFBhdGgoCgog ICAgRGlzcGxheSogLAogICAgaW50KgoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEV4dGVuc2lvbnMo CgogICAgRGlzcGxheSogLAogICAgaW50KgoKKTsKZXh0ZXJuIEF0b20gKlhMaXN0UHJvcGVydGll cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50KgoKKTsKZXh0ZXJuIFhIb3N0 QWRkcmVzcyAqWExpc3RIb3N0cygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQqICwKICAgIGludCoK Cik7CmV4dGVybiBLZXlTeW0gWEtleWNvZGVUb0tleXN5bSgKCiAgICBEaXNwbGF5KiAsCgogICAg dW5zaWduZWQgaW50ICwKCgoKICAgIGludAoKKTsKZXh0ZXJuIEtleVN5bSBYTG9va3VwS2V5c3lt KAoKICAgIFhLZXlFdmVudCogLAogICAgaW50CgopOwpleHRlcm4gS2V5U3ltICpYR2V0S2V5Ym9h cmRNYXBwaW5nKAoKICAgIERpc3BsYXkqICwKCiAgICB1bnNpZ25lZCBpbnQgLAoKCgogICAgaW50 ICwKICAgIGludCoKCik7CmV4dGVybiBLZXlTeW0gWFN0cmluZ1RvS2V5c3ltKAoKICAgIGNvbnN0 IGNoYXIqCgopOwpleHRlcm4gbG9uZyBYTWF4UmVxdWVzdFNpemUoCgogICAgRGlzcGxheSoKCik7 CmV4dGVybiBsb25nIFhFeHRlbmRlZE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCgopOwpl eHRlcm4gY2hhciAqWFJlc291cmNlTWFuYWdlclN0cmluZygKCiAgICBEaXNwbGF5KgoKKTsKZXh0 ZXJuIGNoYXIgKlhTY3JlZW5SZXNvdXJjZVN0cmluZygKCiAgICAgICAgU2NyZWVuKgoKKTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoKICAgIERpc3BsYXkq CgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgKCiAgICBWaXN1YWwqCgop OwoKCgpleHRlcm4gaW50IFhJbml0VGhyZWFkcygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQg WExvY2tEaXNwbGF5KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIHZvaWQgWFVubG9ja0Rpc3Bs YXkoCgogICAgRGlzcGxheSoKCik7CgoKCmV4dGVybiBYRXh0Q29kZXMgKlhJbml0RXh0ZW5zaW9u KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIFhFeHRDb2RlcyAq WEFkZEV4dGVuc2lvbigKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIFhFeHREYXRhICpYRmluZE9u RXh0ZW5zaW9uTGlzdCgKCiAgICBYRXh0RGF0YSoqICwKICAgIGludAoKKTsKZXh0ZXJuIFhFeHRE YXRhICoqWEVIZWFkT2ZFeHRlbnNpb25MaXN0KAoKICAgIFhFRGF0YU9iamVjdAoKKTsKCgpleHRl cm4gV2luZG93IFhSb290V2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJu IFdpbmRvdyBYRGVmYXVsdFJvb3RXaW5kb3coCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBXaW5k b3cgWFJvb3RXaW5kb3dPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwpleHRlcm4gVmlzdWFsICpY RGVmYXVsdFZpc3VhbCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBWaXN1YWwg KlhEZWZhdWx0VmlzdWFsT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIEdDIFhEZWZh dWx0R0MoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gR0MgWERlZmF1bHRHQ09m U2NyZWVuKAoKICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhCbGFja1BpeGVs KAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWFdoaXRl UGl4ZWwoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBY QWxsUGxhbmVzKAoKICAgIHZvaWQKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhCbGFja1BpeGVs T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWFdoaXRlUGl4 ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYTmV4dFJl cXVlc3QoCgogICAgRGlzcGxheSoKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhMYXN0S25vd25S ZXF1ZXN0UHJvY2Vzc2VkKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gY2hhciAqWFNlcnZlclZl bmRvcigKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIgKlhEaXNwbGF5U3RyaW5nKAoKICAg IERpc3BsYXkqCgopOwpleHRlcm4gQ29sb3JtYXAgWERlZmF1bHRDb2xvcm1hcCgKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwT2ZTY3Jl ZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZTY3JlZW4oCgog ICAgU2NyZWVuKgoKKTsKZXh0ZXJuIFNjcmVlbiAqWFNjcmVlbk9mRGlzcGxheSgKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBTY3JlZW4gKlhEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5 KAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gbG9uZyBYRXZlbnRNYXNrT2ZTY3JlZW4oCgogICAg U2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWFNjcmVlbk51bWJlck9mU2NyZWVuKAoKICAgIFNjcmVl bioKCik7Cgp0eXBlZGVmIGludCAoKlhFcnJvckhhbmRsZXIpICgKCiAgICBEaXNwbGF5KiAsCiAg ICBYRXJyb3JFdmVudCoKCik7CgpleHRlcm4gWEVycm9ySGFuZGxlciBYU2V0RXJyb3JIYW5kbGVy ICgKCiAgICBYRXJyb3JIYW5kbGVyCgopOwoKCnR5cGVkZWYgaW50ICgqWElPRXJyb3JIYW5kbGVy KSAoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gWElPRXJyb3JIYW5kbGVyIFhTZXRJT0Vycm9y SGFuZGxlciAoCgogICAgWElPRXJyb3JIYW5kbGVyCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0 VmFsdWVzICpYTGlzdFBpeG1hcEZvcm1hdHMoCgogICAgRGlzcGxheSogLAogICAgaW50KgoKKTsK ZXh0ZXJuIGludCAqWExpc3REZXB0aHMoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGlu dCoKCik7CgoKCmV4dGVybiBpbnQgWFJlY29uZmlndXJlV01XaW5kb3coCgogICAgRGlzcGxheSog LAogICAgV2luZG93ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWFdpbmRvd0No YW5nZXMqCgopOwoKZXh0ZXJuIGludCBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIEF0b20qKiAsCiAgICBpbnQqCgopOwpleHRlcm4gaW50IFhTZXRXTVBy b3RvY29scygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgQXRvbSogLAogICAgaW50 CgopOwpleHRlcm4gaW50IFhJY29uaWZ5V2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRv dyAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWEdldENvbW1hbmQoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNoYXIqKiogLAogICAgaW50KgoKKTsKZXh0ZXJu IGludCBYR2V0V01Db2xvcm1hcFdpbmRvd3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwK ICAgIFdpbmRvdyoqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQgWFNldFdNQ29sb3JtYXBXaW5k b3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cqICwKICAgIGludAoK KTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAgIGNoYXIqKgoKKTsKZXh0ZXJuIGlu dCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg V2luZG93CgopOwoKCgpleHRlcm4gaW50IFhBY3RpdmF0ZVNjcmVlblNhdmVyKAoKICAgIERpc3Bs YXkqCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSG9zdEFk ZHJlc3MqCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdHMoCgogICAgRGlzcGxheSogLAogICAgWEhv c3RBZGRyZXNzKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhBZGRUb0V4dGVuc2lvbkxpc3Qo CgogICAgc3RydWN0IF9YRXh0RGF0YSoqICwKICAgIFhFeHREYXRhKgoKKTsKCmV4dGVybiBpbnQg WEFkZFRvU2F2ZVNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50 IFhBbGxvY0NvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIFhDb2xvcioK Cik7CgpleHRlcm4gaW50IFhBbGxvY0NvbG9yQ2VsbHMoCgogICAgRGlzcGxheSogLAogICAgQ29s b3JtYXAgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGludCAs CiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhB bGxvY0NvbG9yUGxhbmVzKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBp bnQgLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgdW5zaWdu ZWQgbG9uZyoKCik7CgpleHRlcm4gaW50IFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSog LAogICAgQ29sb3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAgWENvbG9yKiAsCiAgICBYQ29s b3IqCgopOwoKZXh0ZXJuIGludCBYQWxsb3dFdmVudHMoCgogICAgRGlzcGxheSogLAogICAgaW50 ICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhBdXRvUmVwZWF0T2ZmKAoKICAgIERpc3BsYXkq CgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9uKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJu IGludCBYQmVsbCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhCaXRt YXBCaXRPcmRlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJpdG1hcFBhZCgKCiAg ICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJpdG1hcFVuaXQoCgogICAgRGlzcGxheSoKCik7 CgpleHRlcm4gaW50IFhDZWxsc09mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4gaW50 IFhDaGFuZ2VBY3RpdmVQb2ludGVyR3JhYigKCiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBp bnQgLAogICAgQ3Vyc29yICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAg ICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhHQ1ZhbHVlcyoK Cik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSogLAog ICAgdW5zaWduZWQgbG9uZyAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgoKKTsKCmV4dGVybiBpbnQg WENoYW5nZUtleWJvYXJkTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIEtleVN5bSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlUG9pbnRlckNv bnRyb2woCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAg aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVByb3BlcnR5KAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdyAsCiAgICBBdG9tICwKICAgIEF0b20gLAogICAgaW50ICwKICAgIGlu dCAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhD aGFuZ2VTYXZlU2V0KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsK CmV4dGVybiBpbnQgWENoZWNrSWZFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZlbnQqICwK ICAgIGludCAoKikgKAoKICAgICAgICAgICAgICAgRGlzcGxheSogLAogICAgICAgICAgICAgICBY RXZlbnQqICwKICAgICAgICAgICAgICAgWFBvaW50ZXIKCiAgICAgICAgICAgICApICwKICAgIFhQ b2ludGVyCgopOwoKZXh0ZXJuIGludCBYQ2hlY2tNYXNrRXZlbnQoCgogICAgRGlzcGxheSogLAog ICAgbG9uZyAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYQ2hlY2tUeXBlZEV2ZW50KAoK ICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYQ2hl Y2tUeXBlZFdpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQg LAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrV2luZG93RXZlbnQoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBp bnQgWENpcmN1bGF0ZVN1YndpbmRvd3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NEb3duKAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NVcCgK CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhDbGVhckFyZWEoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhDbGVh cldpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhDbG9z ZURpc3BsYXkoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhDb25maWd1cmVXaW5kb3co CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBYV2lu ZG93Q2hhbmdlcyoKCik7CgpleHRlcm4gaW50IFhDb25uZWN0aW9uTnVtYmVyKAoKICAgIERpc3Bs YXkqCgopOwoKZXh0ZXJuIGludCBYQ29udmVydFNlbGVjdGlvbigKCiAgICBEaXNwbGF5KiAsCiAg ICBBdG9tICwKICAgIEF0b20gLAogICAgQXRvbSAsCiAgICBXaW5kb3cgLAogICAgVGltZQoKKTsK CmV4dGVybiBpbnQgWENvcHlBcmVhKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAg IERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50 ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY Q29weUdDKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAg R0MKCik7CgpleHRlcm4gaW50IFhDb3B5UGxhbmUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi bGUgLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNp Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5z aWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWERlZmF1bHREZXB0aCgKCiAgICBEaXNwbGF5KiAs CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGhPZlNjcmVlbigKCiAgICBTY3Jl ZW4qCgopOwoKZXh0ZXJuIGludCBYRGVmYXVsdFNjcmVlbigKCiAgICBEaXNwbGF5KgoKKTsKCmV4 dGVybiBpbnQgWERlZmluZUN1cnNvcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg Q3Vyc29yCgopOwoKZXh0ZXJuIGludCBYRGVsZXRlUHJvcGVydHkoCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhEZXN0cm95V2luZG93KAoKICAg IERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lTdWJ3aW5kb3dz KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWERvZXNCYWNraW5n U3RvcmUoCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWERvZXNTYXZlVW5kZXJzKAoKICAg IFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhEaXNhYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNw bGF5KgoKKTsKCgpleHRlcm4gaW50IFhEaXNwbGF5Q2VsbHMoCgogICAgRGlzcGxheSogLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheUhlaWdodCgKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVpZ2h0TU0oCgogICAgRGlzcGxheSogLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheUtleWNvZGVzKAoKICAgIERpc3BsYXkqICwKICAg IGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlz cGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3Bs YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3Bs YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxheSogLAog ICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBp bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50 IFhEcmF3QXJjcygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBY QXJjKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcoCgogICAgRGlz cGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcxNigK CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5l KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBp bnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBE aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUG9pbnQqICwKICAgIGludCAs CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3UG9pbnQoCgogICAgRGlzcGxheSogLAogICAg RHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERy YXdQb2ludHMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFBv aW50KiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1JlY3RhbmdsZSgK CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhE cmF3UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAg ICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMoCgog ICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFNlZ21lbnQqICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJh d2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAsCiAg ICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nMTYoCgogICAgRGlzcGxheSogLAogICAg RHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBYQ2hhcjJi KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KiAsCiAg ICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhUZXh0SXRlbSog LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1RleHQxNigKCiAgICBEaXNwbGF5KiAsCiAg ICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhUZXh0SXRlbTE2 KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhFbmFibGVBY2Nlc3NDb250cm9sKAoKICAgIERp c3BsYXkqCgopOwoKZXh0ZXJuIGludCBYRXZlbnRzUXVldWVkKAoKICAgIERpc3BsYXkqICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWEZldGNoTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KiAs CiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVk IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWEZpbGxBcmNzKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAg IFhBcmMqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZpbGxQb2x5Z29uKAoKICAgIERpc3Bs YXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhQb2ludCogLAogICAgaW50ICwKICAg IGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3Bs YXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBpbnQgWEZpbGxSZWN0YW5n bGVzKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhSZWN0YW5n bGUqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZsdXNoKAoKICAgIERpc3BsYXkqCgopOwoK ZXh0ZXJuIGludCBYRm9yY2VTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7 CgpleHRlcm4gaW50IFhGcmVlKAoKICAgIHZvaWQqCgopOwoKZXh0ZXJuIGludCBYRnJlZUNvbG9y bWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIGludCBYRnJlZUNv bG9ycygKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICB1bnNpZ25lZCBsb25nKiAs CiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWEZyZWVDdXJzb3Io CgogICAgRGlzcGxheSogLAogICAgQ3Vyc29yCgopOwoKZXh0ZXJuIGludCBYRnJlZUV4dGVuc2lv bkxpc3QoCgogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnQoCgogICAgRGlzcGxh eSogLAogICAgWEZvbnRTdHJ1Y3QqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZvKAoKICAg IGNoYXIqKiAsCiAgICBYRm9udFN0cnVjdCogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRnJl ZUZvbnROYW1lcygKCiAgICBjaGFyKioKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udFBhdGgoCgog ICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUdDKAoKICAgIERpc3BsYXkqICwKICAgIEdD CgopOwoKZXh0ZXJuIGludCBYRnJlZU1vZGlmaWVybWFwKAoKICAgIFhNb2RpZmllcktleW1hcCoK Cik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoKICAgIERpc3BsYXkqICwKICAgIFBpeG1hcAoK KTsKCmV4dGVybiBpbnQgWEdlb21ldHJ5KAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGlu dCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRF cnJvckRhdGFiYXNlVGV4dCgKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjaGFyKiAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhHZXRFcnJvclRleHQoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGNo YXIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEdldEZvbnRQcm9wZXJ0eSgKCiAgICBYRm9u dFN0cnVjdCogLAogICAgQXRvbSAsCiAgICB1bnNpZ25lZCBsb25nKgoKKTsKCmV4dGVybiBpbnQg WEdldEdDVmFsdWVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcg LAogICAgWEdDVmFsdWVzKgoKKTsKCmV4dGVybiBpbnQgWEdldEdlb21ldHJ5KAoKICAgIERpc3Bs YXkqICwKICAgIERyYXdhYmxlICwKICAgIFdpbmRvdyogLAogICAgaW50KiAsCiAgICBpbnQqICwK ICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQq ICwKICAgIHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRJY29uTmFtZSgKCiAgICBE aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYR2V0SW5w dXRGb2N1cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cqICwKICAgIGludCoKCik7CgpleHRl cm4gaW50IFhHZXRLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSogLAogICAgWEtleWJvYXJk U3RhdGUqCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNvbnRyb2woCgogICAgRGlzcGxheSog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRQb2lu dGVyTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQK Cik7CgpleHRlcm4gaW50IFhHZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQq ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0VHJh bnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KgoK KTsKCmV4dGVybiBpbnQgWEdldFdpbmRvd1Byb3BlcnR5KAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICBBdG9tICwKICAgIGxvbmcgLAogICAgbG9uZyAsCiAgICBpbnQgLAogICAgQXRv bSAsCiAgICBBdG9tKiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2ln bmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEdldFdpbmRv d0F0dHJpYnV0ZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhXaW5kb3dBdHRy aWJ1dGVzKgoKKTsKCmV4dGVybiBpbnQgWEdyYWJCdXR0b24oCgogICAgRGlzcGxheSogLAogICAg dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBXaW5kb3cgLAogICAgaW50ICwK ICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFdpbmRvdyAsCiAgICBD dXJzb3IKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5KAoKICAgIERpc3BsYXkqICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYR3JhYktleWJvYXJkKAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBUaW1lCgopOwoKZXh0ZXJu IGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBXaW5kb3cgLAogICAg Q3Vyc29yICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3Bs YXkqCgopOwoKZXh0ZXJuIGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoK ZXh0ZXJuIGludCBYSGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQg WElmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KiAsCiAgICBpbnQgKCopICgKCiAg ICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAgICAgICAgWEV2ZW50KiAsCiAgICAgICAg ICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAsCiAgICBYUG9pbnRlcgoKKTsKCmV4dGVy biBpbnQgWEltYWdlQnl0ZU9yZGVyKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYSW5z dGFsbENvbG9ybWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIEtl eUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlTeW0KCik7Cgpl eHRlcm4gaW50IFhLaWxsQ2xpZW50KAoKICAgIERpc3BsYXkqICwKICAgIFhJRAoKKTsKCmV4dGVy biBpbnQgWExvb2t1cENvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGNv bnN0IGNoYXIqICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWExv d2VyV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWE1h cFJhaXNlZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBT dWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWE1h cFdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXNr RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgbG9uZyAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJu IGludCBYTWF4Q21hcHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYTWlu Q21hcHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYTW92ZVJlc2l6ZVdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAg ICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYTW92ZVdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWE5leHRFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZlbnQqCgopOwoK ZXh0ZXJuIGludCBYTm9PcCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFBhcnNlQ29s b3IoCgogICAgRGlzcGxheSogLAogICAgQ29sb3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAg WENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWFBhcnNlR2VvbWV0cnkoCgogICAgY29uc3QgY2hhciog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQg aW50KgoKKTsKCmV4dGVybiBpbnQgWFBlZWtFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZl bnQqCgopOwoKZXh0ZXJuIGludCBYUGVla0lmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2 ZW50KiAsCiAgICBpbnQgKCopICgKCiAgICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAg ICAgICAgWEV2ZW50KiAsCiAgICAgICAgICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAs CiAgICBYUG9pbnRlcgoKKTsKCmV4dGVybiBpbnQgWFBlbmRpbmcoCgogICAgRGlzcGxheSoKCik7 CgpleHRlcm4gaW50IFhQbGFuZXNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgoKKTsKCmV4dGVybiBp bnQgWFByb3RvY29sUmV2aXNpb24oCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhQcm90 b2NvbFZlcnNpb24oCgogICAgRGlzcGxheSoKCik7CgoKZXh0ZXJuIGludCBYUHV0QmFja0V2ZW50 KAoKICAgIERpc3BsYXkqICwKICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhQdXRJbWFnZSgK CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYSW1hZ2UqICwKICAg IGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAog ICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYUUxlbmd0aCgKCiAgICBEaXNwbGF5KgoK KTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVzdEN1cnNvcigKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3 YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk IGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVzdFNpemUo CgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGlu dCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBp bnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlCZXN0U3RpcHBsZSgKCiAgICBEaXNwbGF5KiAsCiAg ICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu c2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVz dFRpbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgdW5zaWduZWQgaW50ICwK ICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCoK Cik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFw ICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9ycygKCiAgICBEaXNwbGF5 KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg WFF1ZXJ5RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGlu dCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlLZXltYXAoCgog ICAgRGlzcGxheSogLAogICAgY2hhciBbMzJdCgopOwoKZXh0ZXJuIGludCBYUXVlcnlQb2ludGVy KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cqICwKICAgIFdpbmRvdyog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICB1bnNpZ25l ZCBpbnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlUZXh0RXh0ZW50cygKCiAgICBEaXNwbGF5KiAs CiAgICBYSUQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIGludCogLAogICAgaW50 KiAsCiAgICBpbnQqICwKICAgIFhDaGFyU3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VGV4 dEV4dGVudHMxNigKCiAgICBEaXNwbGF5KiAsCiAgICBYSUQgLAogICAgY29uc3QgWENoYXIyYiog LAogICAgaW50ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIFhDaGFyU3Ry dWN0KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VHJlZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqICwKICAgIFdpbmRvdyoqICwKICAgIHVuc2ln bmVkIGludCoKCik7CgpleHRlcm4gaW50IFhSYWlzZVdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAg ICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhSZWFkQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KiAs CiAgICBEcmF3YWJsZSAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAg IHVuc2lnbmVkIGludCogLAogICAgUGl4bWFwKiAsCiAgICBpbnQqICwKICAgIGludCoKCik7Cgpl eHRlcm4gaW50IFhSZWFkQml0bWFwRmlsZURhdGEoCgogICAgY29uc3QgY2hhciogLAogICAgdW5z aWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGNoYXIqKiAsCiAg ICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhSZWJpbmRLZXlzeW0oCgogICAgRGlz cGxheSogLAogICAgS2V5U3ltICwKICAgIEtleVN5bSogLAogICAgaW50ICwKICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlY29sb3JDdXJzb3IoCgog ICAgRGlzcGxheSogLAogICAgQ3Vyc29yICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsK CmV4dGVybiBpbnQgWFJlZnJlc2hLZXlib2FyZE1hcHBpbmcoCgogICAgWE1hcHBpbmdFdmVudCoK Cik7CgpleHRlcm4gaW50IFhSZW1vdmVGcm9tU2F2ZVNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0KAoKICAgIERpc3BsYXkqICwKICAgIFhI b3N0QWRkcmVzcyoKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0cygKCiAgICBEaXNwbGF5KiAs CiAgICBYSG9zdEFkZHJlc3MqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlcGFyZW50V2lu ZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cgLAogICAgaW50ICwK ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlc2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoK Cik7CgpleHRlcm4gaW50IFhSZXNpemVXaW5kb3coCgogICAgRGlzcGxheSogLAogICAgV2luZG93 ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhS ZXN0YWNrV2luZG93cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cqICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWFJvdGF0ZUJ1ZmZlcnMoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYUm90YXRlV2luZG93UHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cgLAogICAgQXRvbSogLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNj cmVlbkNvdW50KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYU2VsZWN0SW5wdXQoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZW5k RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBsb25nICwK ICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhTZXRBY2Nlc3NDb250cm9sKAoKICAgIERpc3Bs YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEFyY01vZGUoCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0QmFja2dyb3VuZCgKCiAgICBE aXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nCgopOwoKZXh0ZXJuIGludCBYU2V0 Q2xpcE1hc2soCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUGl4bWFwCgopOwoKZXh0ZXJu IGludCBYU2V0Q2xpcE9yaWdpbigKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQgLAog ICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Q2xpcFJlY3RhbmdsZXMoCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQg LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Q2xvc2VEb3duTW9kZSgKCiAgICBEaXNwbGF5 KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRDb21tYW5kKAoKICAgIERpc3BsYXkqICwK ICAgIFdpbmRvdyAsCiAgICBjaGFyKiogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0RGFz aGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAs CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsUnVsZSgKCiAgICBEaXNwbGF5KiAsCiAg ICBHQyAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsU3R5bGUoCgogICAgRGlzcGxh eSogLAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udCgKCiAgICBEaXNw bGF5KiAsCiAgICBHQyAsCiAgICBGb250CgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udFBhdGgoCgog ICAgRGlzcGxheSogLAogICAgY2hhcioqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEZv cmVncm91bmQoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsK CmV4dGVybiBpbnQgWFNldEZ1bmN0aW9uKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIGlu dAoKKTsKCmV4dGVybiBpbnQgWFNldEdyYXBoaWNzRXhwb3N1cmVzKAoKICAgIERpc3BsYXkqICwK ICAgIEdDICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEljb25OYW1lKAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdyAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBpbnQgWFNldElu cHV0Rm9jdXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBUaW1l CgopOwoKZXh0ZXJuIGludCBYU2V0TGluZUF0dHJpYnV0ZXMoCgogICAgRGlzcGxheSogLAogICAg R0MgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYU2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkqICwKICAgIFhNb2Rp ZmllcktleW1hcCoKCik7CgpleHRlcm4gaW50IFhTZXRQbGFuZU1hc2soCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFBvaW50ZXJN YXBwaW5nKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICwKICAgIGlu dAoKKTsKCmV4dGVybiBpbnQgWFNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqICwKICAgIGlu dCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFNlbGVj dGlvbk93bmVyKAoKICAgIERpc3BsYXkqICwKICAgIEF0b20gLAogICAgV2luZG93ICwKICAgIFRp bWUKCik7CgpleHRlcm4gaW50IFhTZXRTdGF0ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAg ICB1bnNpZ25lZCBsb25nICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIHVuc2ln bmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRTdGlwcGxlKAoKICAgIERpc3BsYXkqICwKICAg IEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldFN1YndpbmRvd01vZGUoCgogICAg RGlzcGxheSogLAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0VFNPcmlnaW4o CgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWFNldFRpbGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUGl4bWFwCgopOwoKZXh0 ZXJuIGludCBYU2V0V2luZG93QmFja2dyb3VuZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JhY2tncm91bmRQ aXhtYXAoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFBpeG1hcAoKKTsKCmV4dGVy biBpbnQgWFNldFdpbmRvd0JvcmRlcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg dW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JvcmRlclBpeG1hcCgKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgUGl4bWFwCgopOwoKZXh0ZXJuIGludCBYU2V0 V2luZG93Qm9yZGVyV2lkdGgoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2ln bmVkIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0NvbG9ybWFwKAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnVmZmVy KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQKCik7 CgpleHRlcm4gaW50IFhTdG9yZUJ5dGVzKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIq ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3IoCgogICAgRGlzcGxheSogLAog ICAgQ29sb3JtYXAgLAogICAgWENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3JzKAoK ICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIFhDb2xvciogLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYU3RvcmVOYW1lKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBj b25zdCBjaGFyKgoKKTsKCmV4dGVybiBpbnQgWFN0b3JlTmFtZWRDb2xvcigKCiAgICBEaXNwbGF5 KiAsCiAgICBDb2xvcm1hcCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBsb25nICwK ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN5bmMoCgogICAgRGlzcGxheSogLAogICAgaW50Cgop OwoKZXh0ZXJuIGludCBYVGV4dEV4dGVudHMoCgogICAgWEZvbnRTdHJ1Y3QqICwKICAgIGNvbnN0 IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBY Q2hhclN0cnVjdCoKCik7CgpleHRlcm4gaW50IFhUZXh0RXh0ZW50czE2KAoKICAgIFhGb250U3Ry dWN0KiAsCiAgICBjb25zdCBYQ2hhcjJiKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBpbnQq ICwKICAgIGludCogLAogICAgWENoYXJTdHJ1Y3QqCgopOwoKZXh0ZXJuIGludCBYVGV4dFdpZHRo KAoKICAgIFhGb250U3RydWN0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRl cm4gaW50IFhUZXh0V2lkdGgxNigKCiAgICBYRm9udFN0cnVjdCogLAogICAgY29uc3QgWENoYXIy YiogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYVHJhbnNsYXRlQ29vcmRpbmF0ZXMoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwK ICAgIGludCogLAogICAgaW50KiAsCiAgICBXaW5kb3cqCgopOwoKZXh0ZXJuIGludCBYVW5kZWZp bmVDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYVW5n cmFiQnV0dG9uKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25l ZCBpbnQgLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYVW5ncmFiS2V5KAoKICAgIERpc3Bs YXkqICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93CgopOwoKZXh0ZXJu IGludCBYVW5ncmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSogLAogICAgVGltZQoKKTsKCmV4dGVy biBpbnQgWFVuZ3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSogLAogICAgVGltZQoKKTsKCmV4dGVy biBpbnQgWFVuZ3JhYlNlcnZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFVuaW5z dGFsbENvbG9ybWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIGlu dCBYVW5sb2FkRm9udCgKCiAgICBEaXNwbGF5KiAsCiAgICBGb250CgopOwoKZXh0ZXJuIGludCBY VW5tYXBTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBp bnQgWFVubWFwV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBp bnQgWFZlbmRvclJlbGVhc2UoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhXYXJwUG9p bnRlcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93ICwKICAgIGludCAs CiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQg LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYV2lkdGhNTU9mU2NyZWVuKAoKICAgIFNjcmVlbioK Cik7CgpleHRlcm4gaW50IFhXaWR0aE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4g aW50IFhXaW5kb3dFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgbG9uZyAs CiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYV3JpdGVCaXRtYXBGaWxlKAoKICAgIERpc3Bs YXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFBpeG1hcCAsCiAgICB1bnNpZ25lZCBpbnQgLAog ICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTdXBw b3J0c0xvY2FsZSAodm9pZCk7CgpleHRlcm4gY2hhciAqWFNldExvY2FsZU1vZGlmaWVycygKICAg IGNvbnN0IGNoYXIqCik7CgpleHRlcm4gWE9NIFhPcGVuT00oCgogICAgRGlzcGxheSogLAogICAg c3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBj aGFyKgoKKTsKCmV4dGVybiBpbnQgWENsb3NlT00oCgogICAgWE9NCgopOwoKZXh0ZXJuIGNoYXIg KlhTZXRPTVZhbHVlcygKCiAgICBYT00gLAogICAgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRP TVZhbHVlcygKCiAgICBYT00gLAogICAgLi4uCgopOwoKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5 T2ZPTSgKCiAgICBYT00KCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mT00oCgogICAgWE9NCgop OwoKZXh0ZXJuIFhPQyBYQ3JlYXRlT0MoCgogICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiB2 b2lkIFhEZXN0cm95T0MoCgogICAgWE9DCgopOwoKZXh0ZXJuIFhPTSBYT01PZk9DKAoKICAgIFhP QwoKKTsKCmV4dGVybiBjaGFyICpYU2V0T0NWYWx1ZXMoCgogICAgWE9DICwKICAgIC4uLgoKKTsK CmV4dGVybiBjaGFyICpYR2V0T0NWYWx1ZXMoCgogICAgWE9DICwKICAgIC4uLgoKKTsKCmV4dGVy biBYRm9udFNldCBYQ3JlYXRlRm9udFNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFy KiAsCiAgICBjaGFyKioqICwKICAgIGludCogLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIHZvaWQg WEZyZWVGb250U2V0KAoKICAgIERpc3BsYXkqICwKICAgIFhGb250U2V0CgopOwoKZXh0ZXJuIGlu dCBYRm9udHNPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQgLAogICAgWEZvbnRTdHJ1Y3QqKiogLAog ICAgY2hhcioqKgoKKTsKCmV4dGVybiBjaGFyICpYQmFzZUZvbnROYW1lTGlzdE9mRm9udFNldCgK CiAgICBYRm9udFNldAoKKTsKCmV4dGVybiBjaGFyICpYTG9jYWxlT2ZGb250U2V0KAoKICAgIFhG b250U2V0CgopOwoKZXh0ZXJuIGludCBYQ29udGV4dERlcGVuZGVudERyYXdpbmcoCgogICAgWEZv bnRTZXQKCik7CgpleHRlcm4gaW50IFhEaXJlY3Rpb25hbERlcGVuZGVudERyYXdpbmcoCgogICAg WEZvbnRTZXQKCik7CgpleHRlcm4gaW50IFhDb250ZXh0dWFsRHJhd2luZygKCiAgICBYRm9udFNl dAoKKTsKCmV4dGVybiBYRm9udFNldEV4dGVudHMgKlhFeHRlbnRzT2ZGb250U2V0KAoKICAgIFhG b250U2V0CgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldCAs CiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFh3Y1RleHRFc2NhcGVt ZW50KAoKICAgIFhGb250U2V0ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludAoKKTsKCmV4 dGVybiBpbnQgWHV0ZjhUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldCAsCiAgICBjb25zdCBj aGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhtYlRleHRFeHRlbnRzKAoKICAgIFhGb250 U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dEV4dGVudHMoCgogICAgWEZvbnRTZXQg LAogICAgY29uc3Qgd2NoYXJfdCogLAogICAgaW50ICwKICAgIFhSZWN0YW5nbGUqICwKICAgIFhS ZWN0YW5nbGUqCgopOwoKZXh0ZXJuIGludCBYdXRmOFRleHRFeHRlbnRzKAoKICAgIFhGb250U2V0 ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBYUmVj dGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250 U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhG b250U2V0ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAs CiAgICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAs CiAgICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHV0ZjhUZXh0UGVyQ2hhckV4dGVudHMo CgogICAgWEZvbnRTZXQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIFhSZWN0YW5n bGUqICwKICAgIFhSZWN0YW5nbGUqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIFhSZWN0YW5n bGUqICwKICAgIFhSZWN0YW5nbGUqCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1RleHQoCgogICAg RGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAg ICBYbWJUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWHdjRHJhd1RleHQoCgog ICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAs CiAgICBYd2NUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWHV0ZjhEcmF3VGV4 dCgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAg aW50ICwKICAgIFhtYlRleHRJdGVtKiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3 U3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFhGb250U2V0ICwKICAg IEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoK ZXh0ZXJuIHZvaWQgWHdjRHJhd1N0cmluZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAs CiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IHdj aGFyX3QqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJhd1N0cmluZygKCiAgICBE aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQg LAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFht YkRyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9u dFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAg IGludAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KiAs CiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJh d0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFhGb250U2V0 ICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50 CgopOwoKZXh0ZXJuIFhJTSBYT3BlbklNKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJt SGFzaEJ1Y2tldFJlYyogLAogICAgY2hhciogLAogICAgY2hhcioKCik7CgpleHRlcm4gaW50IFhD bG9zZUlNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBjaGFyICpYR2V0SU1WYWx1ZXMoCgogICAgWElN ICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJTVZhbHVlcygKCiAgICBYSU0gLCAuLi4KCik7 CgpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZklNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBjaGFy ICpYTG9jYWxlT2ZJTSgKCiAgICBYSU0KCik7CgpleHRlcm4gWElDIFhDcmVhdGVJQygKCiAgICBY SU0gLCAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJveUlDKAoKICAgIFhJQwoKKTsKCmV4dGVy biB2b2lkIFhTZXRJQ0ZvY3VzKAoKICAgIFhJQwoKKTsKCmV4dGVybiB2b2lkIFhVbnNldElDRm9j dXMoCgogICAgWElDCgopOwoKZXh0ZXJuIHdjaGFyX3QgKlh3Y1Jlc2V0SUMoCgogICAgWElDCgop OwoKZXh0ZXJuIGNoYXIgKlhtYlJlc2V0SUMoCgogICAgWElDCgopOwoKZXh0ZXJuIGNoYXIgKlh1 dGY4UmVzZXRJQygKCiAgICBYSUMKCik7CgpleHRlcm4gY2hhciAqWFNldElDVmFsdWVzKAoKICAg IFhJQyAsIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0SUNWYWx1ZXMoCgogICAgWElDICwgLi4u CgopOwoKZXh0ZXJuIFhJTSBYSU1PZklDKAoKICAgIFhJQwoKKTsKCmV4dGVybiBpbnQgWEZpbHRl ckV2ZW50KAoKICAgIFhFdmVudCogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYbWJMb29r dXBTdHJpbmcoCgogICAgWElDICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqICwKICAgIGNoYXIqICwK ICAgIGludCAsCiAgICBLZXlTeW0qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFh3Y0xvb2t1 cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgd2NoYXJfdCog LAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWHV0ZjhM b29rdXBTdHJpbmcoCgogICAgWElDICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqICwKICAgIGNoYXIq ICwKICAgIGludCAsCiAgICBLZXlTeW0qICwKICAgIGludCoKCik7CgpleHRlcm4gWFZhTmVzdGVk TGlzdCBYVmFDcmVhdGVOZXN0ZWRMaXN0KAoKICAgIGludCAsIC4uLgoKKTsKCgoKZXh0ZXJuIGlu dCBYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soCgogICAgRGlzcGxheSogLAogICAgc3Ry dWN0IF9Ycm1IYXNoQnVja2V0UmVjKiAsCiAgICBjaGFyKiAsCiAgICBjaGFyKiAsCiAgICBYSURQ cm9jICwKICAgIFhQb2ludGVyCgopOwoKZXh0ZXJuIGludCBYVW5yZWdpc3RlcklNSW5zdGFudGlh dGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMq ICwKICAgIGNoYXIqICwKICAgIGNoYXIqICwKICAgIFhJRFByb2MgLAogICAgWFBvaW50ZXIKCik7 Cgp0eXBlZGVmIHZvaWQgKCpYQ29ubmVjdGlvbldhdGNoUHJvYykoCgogICAgRGlzcGxheSogLAog ICAgWFBvaW50ZXIgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYUG9pbnRlcioKCik7CgoKZXh0 ZXJuIGludCBYSW50ZXJuYWxDb25uZWN0aW9uTnVtYmVycygKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQqKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIHZvaWQgWFByb2Nlc3NJbnRlcm5hbENvbm5lY3Rp b24oCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQWRkQ29ubmVjdGlv bldhdGNoKAoKICAgIERpc3BsYXkqICwKICAgIFhDb25uZWN0aW9uV2F0Y2hQcm9jICwKICAgIFhQ b2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWFJlbW92ZUNvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNw bGF5KiAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYyAsCiAgICBYUG9pbnRlcgoKKTsKCmV4dGVy biB2b2lkIFhTZXRBdXRob3JpemF0aW9uKAoKICAgIGNoYXIgKiAsCiAgICBpbnQgLAogICAgY2hh ciAqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgX1htYnRvd2MoCgogICAgd2NoYXJfdCAqICwK CgoKCiAgICBjaGFyICogLAogICAgaW50CgoKKTsKCmV4dGVybiBpbnQgX1h3Y3RvbWIoCgogICAg Y2hhciAqICwKICAgIHdjaGFyX3QKCik7Cgp9CiMgNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9w bHVnaW4vbnNwbHVnaW5kZWZzLmgiIDIKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGls LmgiIDEKIyA3NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBpbnQgd2lk dGgsIGhlaWdodDsKICAgICAgICBpbnQgbWluX3dpZHRoLCBtaW5faGVpZ2h0OwogICAgICAgIGlu dCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAgICAgaW50IHdpZHRoX2luYywgaGVpZ2h0X2lu YzsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgICAg ICBpbnQgeTsKICAgICAgICB9IG1pbl9hc3BlY3QsIG1heF9hc3BlY3Q7CiAgICAgICAgaW50IGJh c2Vfd2lkdGgsIGJhc2VfaGVpZ2h0OwogICAgICAgIGludCB3aW5fZ3Jhdml0eTsKfSBYU2l6ZUhp bnRzOwojIDExMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBpbnQgaW5wdXQ7CgogICAgICAgIGludCBp bml0aWFsX3N0YXRlOwogICAgICAgIFBpeG1hcCBpY29uX3BpeG1hcDsKICAgICAgICBXaW5kb3cg aWNvbl93aW5kb3c7CiAgICAgICAgaW50IGljb25feCwgaWNvbl95OwogICAgICAgIFBpeG1hcCBp Y29uX21hc2s7CiAgICAgICAgWElEIHdpbmRvd19ncm91cDsKCn0gWFdNSGludHM7CiMgMTU2ICIv dXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGlsLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2ln bmVkIGNoYXIgKnZhbHVlOwogICAgQXRvbSBlbmNvZGluZzsKICAgIGludCBmb3JtYXQ7CiAgICB1 bnNpZ25lZCBsb25nIG5pdGVtczsKfSBYVGV4dFByb3BlcnR5OwoKCgoKCnR5cGVkZWYgZW51bSB7 CiAgICBYU3RyaW5nU3R5bGUsCiAgICBYQ29tcG91bmRUZXh0U3R5bGUsCiAgICBYVGV4dFN0eWxl LAogICAgWFN0ZElDQ1RleHRTdHlsZSwKCiAgICBYVVRGOFN0cmluZ1N0eWxlCn0gWElDQ0VuY29k aW5nU3R5bGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG1pbl93aWR0aCwgbWluX2hl aWdodDsKICAgICAgICBpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwogICAgICAgIGludCB3aWR0 aF9pbmMsIGhlaWdodF9pbmM7Cn0gWEljb25TaXplOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGNoYXIgKnJlc19uYW1lOwogICAgICAgIGNoYXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50Owoj IDIwNSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVjdCBfWENv bXBvc2VTdGF0dXMgewogICAgWFBvaW50ZXIgY29tcG9zZV9wdHI7CiAgICBpbnQgY2hhcnNfbWF0 Y2hlZDsKfSBYQ29tcG9zZVN0YXR1czsKIyAyNDAgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWHV0 aWwuaCIKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsKIyAyNTQgIi91c3IvWDExUjYv aW5jbHVkZS9YMTEvWHV0aWwuaCIKdHlwZWRlZiBzdHJ1Y3QgewogIFZpc3VhbCAqdmlzdWFsOwog IFZpc3VhbElEIHZpc3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRlcHRoOwoKICBpbnQgY19j bGFzczsKCgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcgZ3JlZW5f bWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6ZTsKICBp bnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwojIDI4NyAiL3Vzci9YMTFSNi9pbmNsdWRl L1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29sb3JtYXAgY29sb3JtYXA7 CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWRfbWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVk X211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVlbl9tYXg7CiAgICAgICAgdW5zaWduZWQg bG9uZyBncmVlbl9tdWx0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYmx1ZV9tYXg7CiAgICAgICAg dW5zaWduZWQgbG9uZyBibHVlX211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX3BpeGVs OwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwogICAgICAgIFhJRCBraWxsaWQ7Cn0gWFN0YW5k YXJkQ29sb3JtYXA7CiMgMzI0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGlsLmgiCnR5cGVk ZWYgaW50IFhDb250ZXh0OwoKCgoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBYQ2xhc3NIaW50ICpY QWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJ Y29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGlu dHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5k YXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGlu dHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbiAsCiAg ICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBSZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAgICB2b2lk CgopOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKlhEZWZhdWx0U3RyaW5nICh2b2lkKTsKCmV4dGVybiBp bnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0 CgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJlZ2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4g aW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhFcXVhbFJlZ2lv bigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIGludCBYRmluZENvbnRleHQo CgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0ICwKICAgIFhQb2ludGVyKgoK KTsKCmV4dGVybiBpbnQgWEdldENsYXNzSGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gaW50IFhHZXRJY29uU2l6ZXMoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIFhJY29uU2l6ZSoqICwKICAgIGludCoKCik7CgpleHRl cm4gaW50IFhHZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg WFNpemVIaW50cyoKCik7CgpleHRlcm4gaW50IFhHZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxh eSogLAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiogLAogICAgaW50KiAsCiAg ICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAg IFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0 U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFN0YW5k YXJkQ29sb3JtYXAqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhHZXRUZXh0UHJvcGVydHko CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqICwKICAgIEF0 b20KCik7CgpleHRlcm4gWFZpc3VhbEluZm8gKlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkq ICwKICAgIGxvbmcgLAogICAgWFZpc3VhbEluZm8qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50 IFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhU ZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIFhXTUhpbnRzICpYR2V0V01IaW50cygKCiAgICBEaXNw bGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhHZXRXTUljb25OYW1lKAoKICAgIERp c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KgoKKTsKCmV4dGVybiBpbnQg WEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0 eSoKCik7CgpleHRlcm4gaW50IFhHZXRXTU5vcm1hbEhpbnRzKAoKICAgIERpc3BsYXkqICwKICAg IFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBsb25nKgoKKTsKCmV4dGVybiBpbnQgWEdl dFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRz KiAsCiAgICBsb25nKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0Wm9vbUhpbnRzKAoK ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBp bnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lv bgoKKTsKCmV4dGVybiB2b2lkIFhDb252ZXJ0Q2FzZSgKCiAgICBLZXlTeW0gLAogICAgS2V5U3lt KiAsCiAgICBLZXlTeW0qCgopOwoKZXh0ZXJuIGludCBYTG9va3VwU3RyaW5nKAoKICAgIFhLZXlF dmVudCogLAogICAgY2hhciogLAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgWENvbXBvc2VT dGF0dXMqCgopOwoKZXh0ZXJuIGludCBYTWF0Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwK ICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhWaXN1YWxJbmZvKgoKKTsKCmV4dGVy biBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWFBvaW50SW5SZWdpb24oCgogICAgUmVnaW9uICwKICAgIGludCAsCiAgICBp bnQKCik7CgpleHRlcm4gUmVnaW9uIFhQb2x5Z29uUmVnaW9uKAoKICAgIFhQb2ludCogLAogICAg aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlY3RJblJlZ2lvbigKCiAgICBSZWdpb24g LAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50 CgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwK ICAgIFhDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xhc3NI aW50KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4 dGVybiBpbnQgWFNldEljb25TaXplcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg WEljb25TaXplKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXROb3JtYWxIaW50cygKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9p ZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU3Rh bmRhcmRDb2xvcm1hcCogLAogICAgaW50ICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRT aXplSGludHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwK ICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRTdGFuZGFyZFByb3BlcnRpZXMoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwK ICAgIFBpeG1hcCAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGludHMqCgopOwoK ZXh0ZXJuIHZvaWQgWFNldFRleHRQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgWFRleHRQcm9wZXJ0eSogLAogICAgQXRvbQoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNs aWVudE1hY2hpbmUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVy dHkqCgopOwoKZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgWFdNSGludHMqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNSWNvbk5hbWUoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIHZv aWQgWFNldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9w ZXJ0eSoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAs CiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9w ZXJ0aWVzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KiAs CiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGlu dHMqICwKICAgIFhXTUhpbnRzKiAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4dGVybiB2b2lkIFht YlNldFdNUHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3Qg Y2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6 ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9p ZCBYdXRmOFNldFdNUHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg Y29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAg ICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRl cm4gdm9pZCBYU2V0V01TaXplSGludHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg IFhTaXplSGludHMqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRSZWdpb24oCgogICAg RGlzcGxheSogLAogICAgR0MgLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5k YXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENv bG9ybWFwKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERp c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWFNo cmlua1JlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0eSgKCiAgICBjaGFyKiogLAogICAgaW50ICwKICAg IFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVn aW9uICwKICAgIFJlZ2lvbiAsCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0 VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAg ICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVy dHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4dGVybiBpbnQgWHdjVGV4dExpc3RUb1RleHRQcm9w ZXJ0eSgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAgICB3Y2hhcl90KiogbGlzdCwKICAgIGludCBj b3VudCwKICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAogICAgWFRleHRQcm9wZXJ0eSogdGV4 dF9wcm9wX3JldHVybgopOwoKZXh0ZXJuIGludCBYdXRmOFRleHRMaXN0VG9UZXh0UHJvcGVydHko CiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAg ICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9y ZXR1cm4KKTsKCmV4dGVybiB2b2lkIFh3Y0ZyZWVTdHJpbmdMaXN0KAogICAgd2NoYXJfdCoqIGxp c3QKKTsKCmV4dGVybiBpbnQgWFRleHRQcm9wZXJ0eVRvU3RyaW5nTGlzdCgKCiAgICBYVGV4dFBy b3BlcnR5KiAsCiAgICBjaGFyKioqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhtYlRleHRQ cm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQ cm9wZXJ0eSogdGV4dF9wcm9wLAogICAgY2hhcioqKiBsaXN0X3JldHVybiwKICAgIGludCogY291 bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBE aXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAg d2NoYXJfdCoqKiBsaXN0X3JldHVybiwKICAgIGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4g aW50IFh1dGY4VGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAg ICBjb25zdCBYVGV4dFByb3BlcnR5KiB0ZXh0X3Byb3AsCiAgICBjaGFyKioqIGxpc3RfcmV0dXJu LAogICAgaW50KiBjb3VudF9yZXR1cm4KKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdp b24oCgogICAgWFJlY3RhbmdsZSogLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVy biBpbnQgWFVuaW9uUmVnaW9uKAoKICAgIFJlZ2lvbiAsCiAgICBSZWdpb24gLAogICAgUmVnaW9u CgopOwoKZXh0ZXJuIGludCBYV01HZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAog ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAg IFhTaXplSGludHMqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCog LAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWFhvclJlZ2lvbigKCiAgICBSZWdpb24gLAogICAg UmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCn0KIyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs dWdpbi9uc3BsdWdpbmRlZnMuaCIgMgojIDEyMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc3BsdWdpbmRlZnMuaCIKdHlwZWRlZiBjb25zdCBjaGFyKiBuc01JTUVUeXBlOwoKc3RydWN0 IG5zQnl0ZVJhbmdlIHsKICAgIFBSSW50MzIgb2Zmc2V0OwogICAgUFJVaW50MzIgbGVuZ3RoOwog ICAgc3RydWN0IG5zQnl0ZVJhbmdlKiBuZXh0Owp9OwoKc3RydWN0IG5zUGx1Z2luUmVjdCB7CiAg ICBQUlVpbnQxNiB0b3A7CiAgICBQUlVpbnQxNiBsZWZ0OwogICAgUFJVaW50MTYgYm90dG9tOwog ICAgUFJVaW50MTYgcmlnaHQ7Cn07CiMgMTUwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu L25zcGx1Z2luZGVmcy5oIgplbnVtIG5zUGx1Z2luQ2FsbGJhY2tUeXBlIHsKICAgIG5zUGx1Z2lu Q2FsbGJhY2tUeXBlX1NldFdpbmRvdyA9IDEsCiAgICBuc1BsdWdpbkNhbGxiYWNrVHlwZV9Qcmlu dAp9OwoKc3RydWN0IG5zUGx1Z2luQW55Q2FsbGJhY2tTdHJ1Y3QgewogICAgUFJJbnQzMiB0eXBl Owp9OwoKCnN0cnVjdCBuc1BsdWdpblNldFdpbmRvd0NhbGxiYWNrU3RydWN0IHsKICAgIFBSSW50 MzIgdHlwZTsKICAgIERpc3BsYXkqIGRpc3BsYXk7CiAgICBWaXN1YWwqIHZpc3VhbDsKICAgIENv bG9ybWFwIGNvbG9ybWFwOwogICAgUFJVaW50MzIgZGVwdGg7Cn07CgoKCgoKCgpzdHJ1Y3QgbnNQ bHVnaW5QcmludENhbGxiYWNrU3RydWN0IHsKICAgIFBSSW50MzIgdHlwZTsKICAgIEZJTEUqIGZw Owp9OwoKCgoKCgplbnVtIG5zUGx1Z2luVmFyaWFibGUgewogICAgbnNQbHVnaW5WYXJpYWJsZV9O YW1lU3RyaW5nID0gMSwKICAgIG5zUGx1Z2luVmFyaWFibGVfRGVzY3JpcHRpb25TdHJpbmcgPSAy Cn07CgplbnVtIG5zUGx1Z2luTWFuYWdlclZhcmlhYmxlIHsKICAgIG5zUGx1Z2luTWFuYWdlclZh cmlhYmxlX1hEaXNwbGF5ID0gMSwKICAgIG5zUGx1Z2luTWFuYWdlclZhcmlhYmxlX1h0QXBwQ29u dGV4dCA9IDIKfTsKCmVudW0gbnNQbHVnaW5JbnN0YW5jZVBlZXJWYXJpYWJsZSB7CiAgICBuc1Bs dWdpbkluc3RhbmNlUGVlclZhcmlhYmxlX05ldHNjYXBlV2luZG93ID0gMwoKCn07CgplbnVtIG5z UGx1Z2luSW5zdGFuY2VWYXJpYWJsZSB7CiAgICBuc1BsdWdpbkluc3RhbmNlVmFyaWFibGVfV2lu ZG93bGVzc0Jvb2wgPSAzLAogICAgbnNQbHVnaW5JbnN0YW5jZVZhcmlhYmxlX1RyYW5zcGFyZW50 Qm9vbCA9IDQsCiAgICBuc1BsdWdpbkluc3RhbmNlVmFyaWFibGVfRG9DYWNoZUJvb2wgPSA1LAog ICAgbnNQbHVnaW5JbnN0YW5jZVZhcmlhYmxlX0NhbGxTZXRXaW5kb3dBZnRlckRlc3Ryb3lCb29s ID0gNiwKICAgIG5zUGx1Z2luSW5zdGFuY2VWYXJpYWJsZV9TY3JpcHRhYmxlSW5zdGFuY2UgPSAx MCwKICAgIG5zUGx1Z2luSW5zdGFuY2VWYXJpYWJsZV9TY3JpcHRhYmxlSUlEID0gMTEKfTsKCgoK ZW51bSBuc1BsdWdpbk1vZGUgewogICAgbnNQbHVnaW5Nb2RlX0VtYmVkZGVkID0gMSwKICAgIG5z UGx1Z2luTW9kZV9GdWxsCn07CgoKZW51bSBuc1BsdWdpblN0cmVhbVR5cGUgewogICAgbnNQbHVn aW5TdHJlYW1UeXBlX05vcm1hbCA9IDEsCiAgICBuc1BsdWdpblN0cmVhbVR5cGVfU2VlaywKICAg IG5zUGx1Z2luU3RyZWFtVHlwZV9Bc0ZpbGUsCiAgICBuc1BsdWdpblN0cmVhbVR5cGVfQXNGaWxl T25seQp9OwoKCgoKCmVudW0gbnNQbHVnaW5XaW5kb3dUeXBlIHsKICAgIG5zUGx1Z2luV2luZG93 VHlwZV9XaW5kb3cgPSAxLAogICAgbnNQbHVnaW5XaW5kb3dUeXBlX0RyYXdhYmxlCn07CiMgMjUx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2luZGVmcy5oIgpzdHJ1Y3QgbnNQ bHVnaW5Qb3J0Owp0eXBlZGVmIFJlZ2lvbiBuc1BsdWdpblJlZ2lvbjsKdHlwZWRlZiBEcmF3YWJs ZSBuc1BsdWdpblBsYXRmb3JtV2luZG93UmVmOwojIDI2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKc3RydWN0IG5zUGx1Z2luV2luZG93IHsKICAgIG5zUGx1 Z2luUG9ydCogd2luZG93OwoKCiAgICBQUkludDMyIHg7CiAgICBQUkludDMyIHk7CiAgICBQUlVp bnQzMiB3aWR0aDsKICAgIFBSVWludDMyIGhlaWdodDsKICAgIG5zUGx1Z2luUmVjdCBjbGlwUmVj dDsKCgogICAgdm9pZCogd3NfaW5mbzsKCiAgICBuc1BsdWdpbldpbmRvd1R5cGUgdHlwZTsKfTsK CnN0cnVjdCBuc1BsdWdpbkZ1bGxQcmludCB7CiAgICBQUkJvb2wgcGx1Z2luUHJpbnRlZDsKCiAg ICBQUkJvb2wgcHJpbnRPbmU7CgogICAgdm9pZCogcGxhdGZvcm1QcmludDsKfTsKCnN0cnVjdCBu c1BsdWdpbkVtYmVkUHJpbnQgewogICAgbnNQbHVnaW5XaW5kb3cgd2luZG93OwogICAgdm9pZCog cGxhdGZvcm1QcmludDsKfTsKCnN0cnVjdCBuc1BsdWdpblByaW50IHsKICAgIFBSVWludDE2IG1v ZGU7CiAgICB1bmlvbgogICAgewogICAgICAgIG5zUGx1Z2luRnVsbFByaW50IGZ1bGxQcmludDsK ICAgICAgICBuc1BsdWdpbkVtYmVkUHJpbnQgZW1iZWRQcmludDsKICAgIH0gcHJpbnQ7Cn07Cgpz dHJ1Y3QgbnNQbHVnaW5FdmVudCB7CiMgMzE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu L25zcGx1Z2luZGVmcy5oIgogICAgWEV2ZW50IGV2ZW50OwoKCgp9OwoKCgoKCmVudW0gbnNQbHVn aW5FdmVudFR5cGUgewojIDMzOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdp bmRlZnMuaCIKICAgIG5zUGx1Z2luRXZlbnRUeXBlX0lkbGUgPSAwCn07CgoKCmVudW0gbnNQbHVn aW5SZWFzb24gewogICAgbnNQbHVnaW5SZWFzb25fQmFzZSA9IDAsCiAgICBuc1BsdWdpblJlYXNv bl9Eb25lID0gMCwKICAgIG5zUGx1Z2luUmVhc29uX05ldHdvcmtFcnIsCiAgICBuc1BsdWdpblJl YXNvbl9Vc2VyQnJlYWssCiAgICBuc1BsdWdpblJlYXNvbl9Ob1JlYXNvbgp9OwojIDM3MSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKY2xhc3MgbnNJUGx1Z2lu OwpjbGFzcyBuc0lFdmVudEhhbmRsZXI7CmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwoKCmNsYXNz IG5zSVBsdWdpbk1hbmFnZXI7CmNsYXNzIG5zSUZpbGVVdGlsaXRpZXM7CmNsYXNzIG5zSVBsdWdp bkluc3RhbmNlUGVlcjsKY2xhc3MgbnNJV2luZG93bGVzc1BsdWdpbkluc3RhbmNlUGVlcjsKY2xh c3MgbnNJUGx1Z2luVGFnSW5mbzsKIyAyMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9u c0lQbHVnaW5TdHJlYW1JbmZvLmgiIDIKIyAzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc0lQbHVnaW5TdHJlYW1JbmZvLmgiCmNsYXNzIG5zSVBsdWdpblN0cmVhbUluZm8gOiBwdWJs aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWQ3ZDRjYTAsIDB4YjAwNSwgMHgxMWQyLCB7 IDB4YWQsIDB4YWEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4NmQsIDB4ZWMsIDB4NDkgfX07IHJldHVy biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50VHlwZShuc01JTUVUeXBlICph Q29udGVudFR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTZWVrYWJsZShQUkJvb2wg KmFTZWVrYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIg KmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkKFBSVWlu dDMyICphTGFzdE1vZGlmaWVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVSTChjb25z dCBjaGFyICogKmFVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVxdWVzdFJlYWQobnNC eXRlUmFuZ2UgKiBhUmFuZ2VMaXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmVh bU9mZnNldChQUkludDMyICphU3RyZWFtT2Zmc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRTdHJlYW1PZmZzZXQoUFJJbnQzMiBhU3RyZWFtT2Zmc2V0KSA9IDA7Cgp9OwojIDE5ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblN0cmVhbUxpc3RlbmVyLmgiIDIKCgoK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIgMQojIDE3 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJ SW5wdXRTdHJlYW07CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnB1dFN0 cmVhbS5oIgp0eXBlZGVmIG5zcmVzdWx0ICgqIG5zV3JpdGVTZWdtZW50RnVuKShuc0lJbnB1dFN0 cmVhbSAqYUluU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICphQ2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqYUZyb21TZWdtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBhVG9PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJVaW50MzIgKmFXcml0ZUNvdW50KTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUlucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3RyZWFtIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGZhOWM3ZjZjLCAweDYxYjMsIDB4MTFkNCwgeyAweDk4 LCAweDc3LCAweDAwLCAweGMwLCAweDRmLCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlk O30KIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUlucHV0U3RyZWFtLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEF2YWlsYWJsZShQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlYWQoY2hh ciAqIGFCdWYsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxMTUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnB1dFN0cmVhbS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgUmVhZFNlZ21lbnRzKG5zV3JpdGVTZWdtZW50RnVuIGFXcml0ZXIsIHZvaWQgKiBh Q2xvc3VyZSwgUFJVaW50MzIgYUNvdW50LCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBJc05vbkJsb2NraW5nKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsK IyAyMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5l ci5oIiAyCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFt TGlzdGVuZXIuaCIKY2xhc3MgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4ZGYwNTU3NzAsIDB4NTQ0OCwgMHgxMWQyLCB7IDB4ODEsIDB4 NjQsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoj IDU4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblN0cmVhbUxpc3RlbmVy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPblN0YXJ0QmluZGluZyhuc0lQbHVnaW5TdHJlYW1JbmZv ICphUGx1Z2luSW5mbykgPSAwOwojIDcyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25z SVBsdWdpblN0cmVhbUxpc3RlbmVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkRhdGFBdmFpbGFi bGUobnNJUGx1Z2luU3RyZWFtSW5mbyAqYVBsdWdpbkluZm8sIG5zSUlucHV0U3RyZWFtICphSW5w dXRTdHJlYW0sIFBSVWludDMyIGFMZW5ndGgpID0gMDsKIyA4MiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg T25GaWxlQXZhaWxhYmxlKG5zSVBsdWdpblN0cmVhbUluZm8gKmFQbHVnaW5JbmZvLCBjb25zdCBj aGFyICphRmlsZU5hbWUpID0gMDsKIyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9u c0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdG9wQmluZGlu Zyhuc0lQbHVnaW5TdHJlYW1JbmZvICphUGx1Z2luSW5mbywgbnNyZXN1bHQgYVN0YXR1cykgPSAw OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmVhbVR5cGUobnNQbHVnaW5TdHJlYW1U eXBlICphU3RyZWFtVHlwZSkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs dWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIiAyCgoKCgoKCgpjbGFzcyBuc0lQbHVnaW5JbnN0YW5j ZVBlZXI7CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFu Y2UuaCIKY2xhc3MgbnNJUGx1Z2luSW5zdGFuY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ZWJlMDBmNDAsIDB4MDE5OSwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4 NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQojIDYyICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbml0aWFsaXplKG5zSVBsdWdpbkluc3RhbmNlUGVlciAqYVBlZXIpID0gMDsKIyA3NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGVlcihuc0lQbHVnaW5JbnN0YW5jZVBlZXIgKiAqYVBlZXIpID0gMDsK IyA4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgU3RhcnQodm9pZCkgPSAwOwojIDk2ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9w KHZvaWQpID0gMDsKIyAxMDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2lu SW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3kodm9pZCkgPSAwOwojIDExOCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0V2luZG93KG5zUGx1Z2luV2luZG93ICogYVdpbmRvdykgPSAwOwojIDEz MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgTmV3U3RyZWFtKG5zSVBsdWdpblN0cmVhbUxpc3RlbmVyICoqYUxpc3Rl bmVyKSA9IDA7CiMgMTQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbklu c3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmludChuc1BsdWdpblByaW50ICogYVBsYXRm b3JtUHJpbnQpID0gMDsKIyAxNTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1 Z2luSW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlKG5zUGx1Z2luSW5zdGFu Y2VWYXJpYWJsZSBhVmFyaWFibGUsIHZvaWQgKiBhVmFsdWUpID0gMDsKIyAxNzEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEhhbmRsZUV2ZW50KG5zUGx1Z2luRXZlbnQgKiBhRXZlbnQsIFBSQm9vbCAqYUhhbmRsZWQp ID0gMDsKCn07CiMgMTIwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbGF5b3V0L25zSU9iamVjdEZyYW1lLmgiIDEKIyA0MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lPYmplY3RGcmFtZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9sYXlvdXQvbnNJRnJhbWUuaCIgMQojIDQ5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSUZyYW1lLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0 cnVjdC5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1 Y3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4L25zQ29sb3IuaCIgMQojIDQzICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4L25zQ29sb3IuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNDb21PYnNvbGV0ZS5oIiAxCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9nZngvbnNDb2xvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBU3RyaW5nOwoKCgp0 eXBlZGVmIFBSVWludDMyIG5zY29sb3I7CiMgODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngv bnNDb2xvci5oIgpleHRlcm4gIkMiIFBSQm9vbCBOU19IZXhUb1JHQihjb25zdCBuc1N0cmluZyYg YUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Mb29zZUhl eFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKZXh0ZXJu ICJDIiBQUkJvb2wgTlNfQ29sb3JOYW1lVG9SR0IoY29uc3QgbnNBU3RyaW5nJiBhQnVmLCBuc2Nv bG9yKiBhUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0JyaWdodGVuQ29sb3IobnNj b2xvciBpbkNvbG9yKTsKCgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0RhcmtlbkNvbG9yKG5zY29s b3IgaW5Db2xvcik7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVT dHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNDb29yZC5oIiAxCiMg NTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNDb29yZC5oIgp0eXBlZGVmIFBSSW50MzIg bnNjb29yZDsKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVj dC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc01hcmdpbi5oIiAxCiMgNDQg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNNYXJnaW4uaCIKc3RydWN0IG5zTWFyZ2luIHsK ICBuc2Nvb3JkIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKCgogIG5zTWFyZ2luKCkge30KICBu c01hcmdpbihjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgeyp0aGlzID0gYU1hcmdpbjt9CiAgbnNN YXJnaW4obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9wLAogICAgICAgICAgIG5zY29vcmQgYVJp Z2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0gYUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0 b20gPSBhQm90dG9tO30KCiAgdm9pZCBTaXplVG8obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9w LAogICAgICAgICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0g YUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0b20gPSBhQm90dG9tO30KICB2b2lkIFNpemVC eShuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAgICAgICAgbnNjb29yZCBhUmln aHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgKz0gYUxlZnQ7IHRvcCArPSBhVG9wOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCArPSBhUmlnaHQ7 IGJvdHRvbSArPSBhQm90dG9tO30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc01hcmdp biYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgobGVmdCA9PSBhTWFyZ2lu LmxlZnQpICYmICh0b3AgPT0gYU1hcmdpbi50b3ApICYmCiAgICAgICAgICAgICAgICAgICAgIChy aWdodCA9PSBhTWFyZ2luLnJpZ2h0KSAmJiAoYm90dG9tID09IGFNYXJnaW4uYm90dG9tKSk7CiAg fQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAg ICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ICE9IGFNYXJnaW4ubGVmdCkgfHwgKHRvcCAhPSBhTWFy Z2luLnRvcCkgfHwKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ICE9IGFNYXJnaW4ucmlnaHQp IHx8IChib3R0b20gIT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAgbnNNYXJnaW4gb3BlcmF0b3Ir KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gbnNNYXJnaW4obGVm dCArIGFNYXJnaW4ubGVmdCwgdG9wICsgYU1hcmdpbi50b3AsCiAgICAgICAgICAgICAgICAgICAg cmlnaHQgKyBhTWFyZ2luLnJpZ2h0LCBib3R0b20gKyBhTWFyZ2luLmJvdHRvbSk7CiAgfQogIG5z TWFyZ2luIG9wZXJhdG9yLShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QgewogICAgcmV0 dXJuIG5zTWFyZ2luKGxlZnQgLSBhTWFyZ2luLmxlZnQsIHRvcCAtIGFNYXJnaW4udG9wLAogICAg ICAgICAgICAgICAgICAgIHJpZ2h0IC0gYU1hcmdpbi5yaWdodCwgYm90dG9tIC0gYU1hcmdpbi5i b3R0b20pOwogIH0KICBuc01hcmdpbiYgb3BlcmF0b3IrPShjb25zdCBuc01hcmdpbiYgYU1hcmdp bikge2xlZnQgKz0gYU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG9wICs9IGFNYXJnaW4udG9wOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0gYU1hcmdpbi5yaWdodDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSArPSBh TWFyZ2luLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAqdGhpczt9CiAgbnNNYXJnaW4mIG9wZXJhdG9yLT0oY29uc3QgbnNNYXJn aW4mIGFNYXJnaW4pIHtsZWZ0IC09IGFNYXJnaW4ubGVmdDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAtPSBhTWFyZ2luLnRvcDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IC09IGFNYXJnaW4u cmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b3R0b20gLT0gYU1hcmdpbi5ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZ2Z4L25zUmVjdC5oIiAxCiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNSZWN0 LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1BvaW50LmgiIDEKIyA0NCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1BvaW50LmgiCnN0cnVjdCBuc1BvaW50IHsKICBuc2Nv b3JkIHgsIHk7CgoKICBuc1BvaW50KCkge30KICBuc1BvaW50KGNvbnN0IG5zUG9pbnQmIGFQb2lu dCkge3ggPSBhUG9pbnQueDsgeSA9IGFQb2ludC55O30KICBuc1BvaW50KG5zY29vcmQgYVgsIG5z Y29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CgogIHZvaWQgTW92ZVRvKG5zY29vcmQgYVgsIG5z Y29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBNb3ZlQnkobnNjb29yZCBhRHgsIG5z Y29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShj b25zdCBuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggPT0g YVBvaW50LngpICYmICh5ID09IGFQb2ludC55KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNv bnN0IG5zUG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCAhPSBh UG9pbnQueCkgfHwgKHkgIT0gYVBvaW50LnkpKTsKICB9CiAgbnNQb2ludCBvcGVyYXRvcisoY29u c3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNQb2ludCh4ICsgYVBvaW50 LngsIHkgKyBhUG9pbnQueSk7CiAgfQogIG5zUG9pbnQgb3BlcmF0b3ItKGNvbnN0IG5zUG9pbnQm IGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zUG9pbnQoeCAtIGFQb2ludC54LCB5IC0gYVBv aW50LnkpOwogIH0KICBuc1BvaW50JiBvcGVyYXRvcis9KGNvbnN0IG5zUG9pbnQmIGFQb2ludCkg ewogICAgeCArPSBhUG9pbnQueDsKICAgIHkgKz0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIG5zUG9pbnQmIG9wZXJhdG9yLT0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7CiAgICB4 IC09IGFQb2ludC54OwogICAgeSAtPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9Cn07 CgoKCgoKc3RydWN0IG5zRmxvYXRQb2ludCB7CiAgZmxvYXQgeCwgeTsKCgogIG5zRmxvYXRQb2lu dCgpIHt9CiAgbnNGbG9hdFBvaW50KGNvbnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7eCA9IGFQ b2ludC54OyB5ID0gYVBvaW50Lnk7fQogIG5zRmxvYXRQb2ludChmbG9hdCBhWCwgZmxvYXQgYVkp IHt4ID0gYVg7IHkgPSBhWTt9CgogIHZvaWQgTW92ZVRvKGZsb2F0IGFYLCBmbG9hdCBhWSkge3gg PSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSB7eCA9 IChmbG9hdClhWDsgeSA9IChmbG9hdClhWTt9CiAgdm9pZCBNb3ZlQnkoZmxvYXQgYUR4LCBmbG9h dCBhRHkpIHt4ICs9IGFEeDsgeSArPSBhRHk7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0 IG5zRmxvYXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ID09 IGFQb2ludC54KSAmJiAoeSA9PSBhUG9pbnQueSkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShj b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgo eCAhPSBhUG9pbnQueCkgfHwgKHkgIT0gYVBvaW50LnkpKTsKICB9CiAgbnNGbG9hdFBvaW50IG9w ZXJhdG9yKyhjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5z RmxvYXRQb2ludCh4ICsgYVBvaW50LngsIHkgKyBhUG9pbnQueSk7CiAgfQogIG5zRmxvYXRQb2lu dCBvcGVyYXRvci0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVy biBuc0Zsb2F0UG9pbnQoeCAtIGFQb2ludC54LCB5IC0gYVBvaW50LnkpOwogIH0KICBuc0Zsb2F0 UG9pbnQmIG9wZXJhdG9yKz0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHsKICAgIHggKz0g YVBvaW50Lng7CiAgICB5ICs9IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBuc0Zs b2F0UG9pbnQmIG9wZXJhdG9yLT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHsKICAgIHgg LT0gYVBvaW50Lng7CiAgICB5IC09IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsK CgoKCgoKc3RydWN0IG5zUGF0aFBvaW50OiBwdWJsaWMgbnNGbG9hdFBvaW50ewoKICBQUkJvb2wg bUlzT25DdXJ2ZTsKCgogIG5zUGF0aFBvaW50KCkge30KICBuc1BhdGhQb2ludChjb25zdCBuc1Bh dGhQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5ID0gYVBvaW50Lnk7bUlzT25DdXJ2ZT1h UG9pbnQubUlzT25DdXJ2ZTt9CiAgbnNQYXRoUG9pbnQoZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9 IGFYOyB5ID0gYVk7bUlzT25DdXJ2ZT0xO30KICBuc1BhdGhQb2ludChmbG9hdCBhWCwgZmxvYXQg YVksUFJCb29sIGFJc09uQ3VydmUpIHt4ID0gYVg7IHkgPSBhWTttSXNPbkN1cnZlPWFJc09uQ3Vy dmU7fQoKfTsKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1JlY3QuaCIgMgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNTaXplLmgiIDEKIyA0NyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2dmeC9uc1NpemUuaCIKc3RydWN0IG5zU2l6ZSB7CiAgbnNjb29yZCB3aWR0aCwg aGVpZ2h0OwoKCiAgbnNTaXplKCkge30KICBuc1NpemUoY29uc3QgbnNTaXplJiBhU2l6ZSkge3dp ZHRoID0gYVNpemUud2lkdGg7IGhlaWdodCA9IGFTaXplLmhlaWdodDt9CiAgbnNTaXplKG5zY29v cmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhl aWdodDt9CgogIHZvaWQgU2l6ZVRvKG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3 aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBh RGVsdGFXaWR0aCwgbnNjb29yZCBhRGVsdGFIZWlnaHQpIHt3aWR0aCArPSBhRGVsdGFXaWR0aDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhlaWdodCArPSBhRGVsdGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5z U2l6ZSYgYVNpemUpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoID09IGFTaXpl LndpZHRoKSAmJiAoaGVpZ2h0ID09IGFTaXplLmhlaWdodCkpOwogIH0KICBQUkJvb2wgb3BlcmF0 b3IhPShjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh3 aWR0aCAhPSBhU2l6ZS53aWR0aCkgfHwgKGhlaWdodCAhPSBhU2l6ZS5oZWlnaHQpKTsKICB9CiAg bnNTaXplIG9wZXJhdG9yKyhjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4g bnNTaXplKHdpZHRoICsgYVNpemUud2lkdGgsIGhlaWdodCArIGFTaXplLmhlaWdodCk7CiAgfQog IG5zU2l6ZSBvcGVyYXRvci0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAgcmV0dXJu IG5zU2l6ZSh3aWR0aCAtIGFTaXplLndpZHRoLCBoZWlnaHQgLSBhU2l6ZS5oZWlnaHQpOwogIH0K ICBuc1NpemUmIG9wZXJhdG9yKz0oY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoICs9IGFTaXpl LndpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0 ICs9IGFTaXplLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAqdGhpczt9CiAgbnNTaXplJiBvcGVyYXRvci09KGNvbnN0IG5zU2l6ZSYgYVNp emUpIHt3aWR0aCAtPSBhU2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGhlaWdodCAtPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDQ3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZ2Z4L25zUmVjdC5oIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc1VuaXRDb252ZXJzaW9uLmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zVW5pdENvbnZlcnNpb24uaCIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAy OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7 Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMK CgpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChk b3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChk b3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmgg KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBz aW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cg KCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91 YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi bGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpl eHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93 ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2xvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0 cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9f aXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93 MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9n YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChk b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUg Y2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91Ymxl IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi bGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p dGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRy ZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJl bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2ln bmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNh bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkb3VibGUgbmFu IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91 YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRv dWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwg ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkxIChkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChp bnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUp IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB0 Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl IGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRv d2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK ZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg X19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4g KGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2Fs YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl IG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVt cXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChk b3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93 ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu Yml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3Vi bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91Ymxl IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3Vi bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3Vi bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyA2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCiMgODggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCgoK ZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl eHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0 YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195 LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwg ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm bG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9h dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv YXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h dCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0 ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2Yg KGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBleHBm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBv bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19l eHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBm bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwg ZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19wb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n YmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h dCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZs b2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19oeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZs b2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jZWls ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9v cmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZs b2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hh ciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0 ZXJuIGludCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm bG9hdCBqMWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhy b3cgKCk7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19qbmYgKGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv YXQgeTFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93 ICgpOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9feW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZs b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRl cm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZs b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQg dGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxn YW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9h dCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0 IHJlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g ZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBp bG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBp bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9u ZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5j ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks IGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gs IGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBs cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxv bmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBm ZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGlt ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0 IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZs b2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQg X194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2Nh bGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxi ZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwojIDg5ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAzCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcg ZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9u ZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19p cHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19l eHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93 MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cx MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4 cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw bTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cx cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNi cnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0 bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg Y2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0 ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFs dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2ln bmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190 YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRv dWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192 YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50 IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwg KGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGlu dCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRv dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgZXJmY2wgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2Ft cCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUs IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0 ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg c2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg X19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19u KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGlt bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m bWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9u ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Zm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikg dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwojIDExMCAiL3Vzci9p bmNsdWRlL21hdGguaCIgMiAzCiMgMTI1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBp bnQgc2lnbmdhbTsKIyAxNjYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQ X05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwK CiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNTIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRl ZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAog IF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBF IF9MSUJfVkVSU0lPTjsKIyAyNzUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhj ZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFy ZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50 IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM2MiAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50 Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24g eyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3Uu X19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7 CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0g eyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19z aWduYml0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlv biB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAg cmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93 ICgpOyBfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu IF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUg ZmxvYXQgX19zZ25mIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxv YXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/ IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUp IHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAt MS4wKTsgfQojIDQyNSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192 YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJv dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEp Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBk b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19p bmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0 IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChf X3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2Rm IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxu XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg KF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3Vi bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVt XG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsg fQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJs ZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsg X19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp KTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRo cm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf X2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIg OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxp bmUgbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGlu ZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2Zh YnMgKF9feCk7IH0KX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyBy ZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194 KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NiAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0 aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi ZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg KCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g X19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls ZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBf X3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5f X3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAw eDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTIgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRv dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7 IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9v cmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcg ZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0 Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAw OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20g X192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7 IH0KIyA1MDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3Vi bGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2ln bmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9 bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192 b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUg KCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l IGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu bGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f Y3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRp bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYp IHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp KTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJu IF9fdmFsdWU7IH0KIyA1MjEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu bGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0 dXJuIF9fdmFsdWU7Cn0KIyA1MzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf X2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQy MTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNt IF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp bmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIz NzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9u ZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQy MTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNt IF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmgg KGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz bCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kg KyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBh c2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxv bmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kg LyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194 KSk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy ZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEu MCkpOyB9IF9faW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVy biBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7 IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3gg KyAxLjApKTsgfQoKCl9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAq IGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBf X2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kg KyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRv dWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBf X3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91Ymxl IGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRs IChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9f eSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsg X195ICogX195KTsgfQoKX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19q dW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAi PXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZs b2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm eHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAi PXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVl OyB9CiMgNTgzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxv YXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFs dWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQg X195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192 b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChs b25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA3ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gp IHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo ImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1 cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhy b3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlz dHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf X2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJm aXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJu IF9fbHJpbnRyZXM7Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf X2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxv bmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAl MCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxy aW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJv dyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy ZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQi IChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91 YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91 YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9f ICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAi PXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAi ZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZh IiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl ciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJm c3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEi IChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192 YWx1ZTsgfQojIDY2NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l IGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNp b25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtf X2Q6IF9feH0pLl9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkp Owp9CiMgMzYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MjMgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDMKfQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNVbml0Q29udmVy c2lvbi5oIiAyCiMgNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1VuaXRDb252ZXJz aW9uLmgiCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJl dHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlKSA6IG5zY29vcmQoYVZhbHVl IC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRDZWls KGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZh bHVlICsgMC45OTk5OTk5OTk5OTk5OTk5ZikgOiBuc2Nvb3JkKGFWYWx1ZSkpOwp9CgppbmxpbmUg bnNjb29yZCBOU1RvQ29vcmRSb3VuZChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9 IGFWYWx1ZSkgPyBuc2Nvb3JkKGFWYWx1ZSArIDAuNWYpIDogbnNjb29yZChhVmFsdWUgLSAwLjVm KSk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZFJvdW5kRXhjbHVzaXZlKGZsb2F0IGFWYWx1 ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC40OTk5 OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQoYVZh bHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoKaW5saW5lIFBSSW50MzIgTlNUb0lu dEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50 MzIoYVZhbHVlKSA6IFBSSW50MzIoYVZhbHVlIC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9Cgpp bmxpbmUgUFJJbnQzMiBOU1RvSW50Q2VpbChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBm IDw9IGFWYWx1ZSkgPyBQUkludDMyKGFWYWx1ZSArIDAuOTk5OTk5OTk5OTk5OTk5OWYpIDogUFJJ bnQzMihhVmFsdWUpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5kKGZsb2F0IGFWYWx1 ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC41Zikg OiBQUkludDMyKGFWYWx1ZSAtIDAuNWYpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5k RXhjbHVzaXZlKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBS SW50MzIoYVZhbHVlICsgMC40OTk5OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSSW50MzIoYVZhbHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoK aW5saW5lIG5zY29vcmQgTlNGbG9hdFBvaW50c1RvVHdpcHMoZmxvYXQgYVBvaW50cykKewogIHJl dHVybiBOU1RvQ29vcmRSb3VuZChhUG9pbnRzICogMjAuMGYpOwp9CgppbmxpbmUgbnNjb29yZCBO U0ludFBvaW50c1RvVHdpcHMoUFJJbnQzMiBhUG9pbnRzKQp7CiAgcmV0dXJuIG5zY29vcmQoYVBv aW50cyAqIDIwKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lwc1RvSW50UG9pbnRzKG5zY29vcmQg YVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGlu ZSBQUkludDMyIE5TVHdpcHNUb0Zsb29ySW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0 dXJuIE5TVG9JbnRGbG9vcihhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBQUkludDMyIE5TVHdp cHNUb0NlaWxJbnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1cm4gTlNUb0ludENlaWwo YVR3aXBzIC8gMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvRmxvYXRQb2ludHMobnNj b29yZCBhVHdpcHMpCnsKICByZXR1cm4gKGZsb2F0KGFUd2lwcykgLyAyMC4wZik7Cn0KCgoKCmlu bGluZSBuc2Nvb3JkIE5TRmxvYXRQaXhlbHNUb1R3aXBzKGZsb2F0IGFQaXhlbHMsIGZsb2F0IGFU d2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFQaXhlbHMgKiBhVHdpcHNQ ZXJQaXhlbCk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TSW50UGl4ZWxzVG9Ud2lwcyhQUkludDMyIGFQ aXhlbHMsIGZsb2F0IGFUd2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGZs b2F0KGFQaXhlbHMpICogYVR3aXBzUGVyUGl4ZWwpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1Rv RmxvYXRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7CiAgcmV0 dXJuIChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9CgppbmxpbmUgUFJJbnQzMiBO U1R3aXBzVG9JbnRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7 CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9 CgoKCgppbmxpbmUgbnNjb29yZCBOU1VuaXRzVG9Ud2lwcyhmbG9hdCBhVmFsdWUsIGZsb2F0IGFQ b2ludHNQZXJVbml0KQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFWYWx1ZSAqIGFQb2ludHNQ ZXJVbml0ICogMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvVW5pdHMobnNjb29yZCBh VHdpcHMsIGZsb2F0IGFVbml0c1BlclBvaW50KQp7CiAgcmV0dXJuIChhVHdpcHMgKiAoYVVuaXRz UGVyUG9pbnQgLyAyMC4wZikpOwp9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNS ZWN0LmgiIDIKCgpzdHJ1Y3QgbnNSZWN0IHsKICBuc2Nvb3JkIHgsIHk7CiAgbnNjb29yZCB3aWR0 aCwgaGVpZ2h0OwoKCiAgbnNSZWN0KCkgOiB4KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDAp IHt9CiAgbnNSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsqdGhpcyA9IGFSZWN0O30KICBuc1Jl Y3QoY29uc3QgbnNQb2ludCYgYU9yaWdpbiwgY29uc3QgbnNTaXplICZhU2l6ZSkge3ggPSBhT3Jp Z2luLng7IHkgPSBhT3JpZ2luLnk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6ZS5o ZWlnaHQ7fQogIG5zUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwg bnNjb29yZCBhSGVpZ2h0KSB7eCA9IGFYOyB5ID0gYVk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFXaWR0 aDsgaGVpZ2h0ID0gYUhlaWdodDt9CgoKCiAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7CiAgICBy ZXR1cm4gKFBSQm9vbCkgKChoZWlnaHQgPD0gMCkgfHwgKHdpZHRoIDw9IDApKTsKICB9CiAgdm9p ZCBFbXB0eSgpIHt3aWR0aCA9IGhlaWdodCA9IDA7fQoKCiAgUFJCb29sIENvbnRhaW5zKGNvbnN0 IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwogIFBSQm9vbCBDb250YWlucyhuc2Nvb3JkIGFYLCBuc2Nv b3JkIGFZKSBjb25zdDsKICBQUkJvb2wgQ29udGFpbnMoY29uc3QgbnNQb2ludCYgYVBvaW50KSBj b25zdCB7cmV0dXJuIENvbnRhaW5zKGFQb2ludC54LCBhUG9pbnQueSk7fQoKCgogIFBSQm9vbCBJ bnRlcnNlY3RzKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwoKCgoKCgogIFBSQm9vbCBJbnRl cnNlY3RSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QxLCBjb25zdCBuc1JlY3QmIGFSZWN0Mik7CgoK CgoKCiAgUFJCb29sIFVuaW9uUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3QgbnNSZWN0 JiBhUmVjdDIpOwoKCiAgdm9pZCBTZXRSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29v cmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHsKICAgIHggPSBhWDsgeSA9IGFZOyB3aWR0aCA9 IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDsKICB9CiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwg bnNjb29yZCBhWSkge3ggPSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhjb25zdCBuc1BvaW50 JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTt9CiAgdm9pZCBNb3ZlQnkobnNj b29yZCBhRHgsIG5zY29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KICB2b2lkIFNpemVU byhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdo dCA9IGFIZWlnaHQ7fQogIHZvaWQgU2l6ZVRvKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtTaXplVG8o YVNpemUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYURlbHRh V2lkdGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0KSB7d2lkdGggKz0gYURlbHRhV2lkdGg7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQgKz0gYURlbHRhSGVpZ2h0O30KCgogIHZvaWQgSW5mbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29y ZCBhRHkpOwogIHZvaWQgSW5mbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7SW5mbGF0ZShhU2l6 ZS53aWR0aCwgYVNpemUuaGVpZ2h0KTt9CiAgdm9pZCBJbmZsYXRlKGNvbnN0IG5zTWFyZ2luJiBh TWFyZ2luKTsKCgogIHZvaWQgRGVmbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpOwogIHZv aWQgRGVmbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7RGVmbGF0ZShhU2l6ZS53aWR0aCwgYVNp emUuaGVpZ2h0KTt9CiAgdm9pZCBEZWZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKTsKCgoK ICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1 cm4gKFBSQm9vbCkgKChJc0VtcHR5KCkgJiYgYVJlY3QuSXNFbXB0eSgpKSB8fAogICAgICAgICAg ICAgICAgICAgICAoKHggPT0gYVJlY3QueCkgJiYgKHkgPT0gYVJlY3QueSkgJiYKICAgICAgICAg ICAgICAgICAgICAgICh3aWR0aCA9PSBhUmVjdC53aWR0aCkgJiYgKGhlaWdodCA9PSBhUmVjdC5o ZWlnaHQpKSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNv bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAhb3BlcmF0b3I9PShhUmVjdCk7CiAgfQogIG5zUmVj dCBvcGVyYXRvcisoY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVj dCh4ICsgYVJlY3QueCwgeSArIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoICsgYVJl Y3Qud2lkdGgsIGhlaWdodCArIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCBvcGVyYXRvci0o Y29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4IC0gYVJlY3Qu eCwgeSAtIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoIC0gYVJlY3Qud2lkdGgsIGhl aWdodCAtIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCYgb3BlcmF0b3IrPShjb25zdCBuc1Bv aW50JiBhUG9pbnQpIHt4ICs9IGFQb2ludC54OyB5ICs9IGFQb2ludC55OyByZXR1cm4gKnRoaXM7 fQogIG5zUmVjdCYgb3BlcmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHt4IC09IGFQb2lu dC54OyB5IC09IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQoKICBuc1JlY3QmIG9wZXJhdG9yKj0o Y29uc3QgZmxvYXQgYVNjYWxlKSB7eCA9IE5TVG9Db29yZFJvdW5kKHggKiBhU2NhbGUpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTlNUb0Nvb3JkUm91bmQo eSAqIGFTY2FsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp ZHRoID0gTlNUb0Nvb3JkUm91bmQod2lkdGggKiBhU2NhbGUpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChoZWlnaHQgKiBh U2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KnRoaXM7fQoKICBuc1JlY3QmIFNjYWxlUm91bmRPdXQoY29uc3QgZmxvYXQgYVNjYWxlKTsKICBu c1JlY3QmIFNjYWxlUm91bmRJbihjb25zdCBmbG9hdCBhU2NhbGUpOwoKCiAgbnNjb29yZCBYTW9z dCgpIGNvbnN0IHtyZXR1cm4geCArIHdpZHRoO30KICBuc2Nvb3JkIFlNb3N0KCkgY29uc3Qge3Jl dHVybiB5ICsgaGVpZ2h0O30KfTsKCgpleHRlcm4gRklMRSogb3BlcmF0b3I8PChGSUxFKiBvdXQs IGNvbnN0IG5zUmVjdCYgcmVjdCk7CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50 L25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNGb250 LmgiIDEKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc0ZvbnQuaCIKdHlwZWRlZiBQ UkJvb2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVuYykoY29uc3QgbnNTdHJpbmcmIGFGYW1pbHksIFBS Qm9vbCBhR2VuZXJpYywgdm9pZCAqYURhdGEpOwoKCgoKY29uc3QgUFJVaW50OCBrR2VuZXJpY0Zv bnRfTk9ORSA9IDB4MDA7Cgpjb25zdCBQUlVpbnQ4IGtHZW5lcmljRm9udF9tb3pfdmFyaWFibGUg PSAweDAwOwpjb25zdCBQUlVpbnQ4IGtHZW5lcmljRm9udF9tb3pfZml4ZWQgPSAweDAxOwoKY29u c3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfc2VyaWYgPSAweDAyOwpjb25zdCBQUlVpbnQ4IGtHZW5l cmljRm9udF9zYW5zX3NlcmlmID0gMHgwNDsKY29uc3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfbW9u b3NwYWNlID0gMHgwODsKY29uc3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfY3Vyc2l2ZSA9IDB4MTA7 CmNvbnN0IFBSVWludDgga0dlbmVyaWNGb250X2ZhbnRhc3kgPSAweDIwOwoKCnN0cnVjdCBuc0Zv bnQgewoKICBuc1N0cmluZyBuYW1lOwoKCiAgUFJVaW50OCBzdHlsZTsKCgogIFBSVWludDggdmFy aWFudCA6IDc7CgoKCiAgUFJQYWNrZWRCb29sIGZhbWlseU5hbWVRdWlya3MgOiAxOwoKCiAgUFJV aW50MTYgd2VpZ2h0OwoKCgogIFBSVWludDggZGVjb3JhdGlvbnM7CgoKICBuc2Nvb3JkIHNpemU7 CgoKCgoKICBmbG9hdCBzaXplQWRqdXN0OwoKCiAgbnNGb250KGNvbnN0IGNoYXIqIGFOYW1lLCBQ UlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdo dCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSwKICAgICAgICAgZmxvYXQgYVNp emVBZGp1c3Q9MC4wZik7CgoKICBuc0ZvbnQoY29uc3QgbnNTdHJpbmcmIGFOYW1lLCBQUlVpbnQ4 IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJV aW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSwKICAgICAgICAgZmxvYXQgYVNpemVBZGp1 c3Q9MC4wZik7CgoKICBuc0ZvbnQoY29uc3QgbnNGb250JiBhRm9udCk7CgogIG5zRm9udCgpOwog IH5uc0ZvbnQoKTsKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGb250JiBhT3RoZXIpIGNv bnN0IHsKICAgIHJldHVybiBFcXVhbHMoYU90aGVyKTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29u c3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IDsKCiAgbnNGb250JiBvcGVyYXRvcj0oY29uc3QgbnNG b250JiBhT3RoZXIpOwoKCgoKCiAgUFJCb29sIEVudW1lcmF0ZUZhbWlsaWVzKG5zRm9udEZhbWls eUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSkgY29uc3Q7CiAgdm9pZCBHZXRGaXJzdEZhbWls eShuc1N0cmluZyYgYUZhbWlseSkgY29uc3Q7CgoKICBzdGF0aWMgdm9pZCBHZXRHZW5lcmljSUQo Y29uc3QgbnNTdHJpbmcmIGFHZW5lcmljLCBQUlVpbnQ4KiBhSUQpOwp9OwojIDQ2ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiIDEKIyA0NCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2xheW91dC9uc1N0eWxlQ29uc3RzLmgiIDEKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVV bml0IHsKICBlU3R5bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBl U3R5bGVVbml0X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5p dF9QZXJjZW50ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nv b3JkID0gMjAsCiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0 aW9uYWwgPSAzMSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0No YXJzID0gMzMKfTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxv YXQ7Cn0gbnNTdHlsZVVuaW9uOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u c1N0eWxlQ29vcmQuaCIKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29y ZChuc1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5z Y29vcmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0 IGFVbml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7 CiAgbnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29v cmQmIG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0 b3I9PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9y IT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRV bml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVl KHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQg R2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQp IGNvbnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7 CgogIHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVl KTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7 CiAgdm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZh bHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNl dEF1dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNl dFVuaW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0 KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9p ZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVu aXQgbVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgoKCgoKCmNsYXNzIG5zU3R5bGVT aWRlcyB7CnB1YmxpYzoKICBuc1N0eWxlU2lkZXModm9pZCk7CgoKICBQUkJvb2wgb3BlcmF0b3I9 PShjb25zdCBuc1N0eWxlU2lkZXMmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0o Y29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwoKCgogIGlubGluZSBuc1N0eWxlVW5p dCBHZXRVbml0KFBSVWludDggYVNpZGUpIGNvbnN0OwogIGlubGluZSBuc1N0eWxlVW5pdCBHZXRM ZWZ0VW5pdCh2b2lkKSBjb25zdDsKICBpbmxpbmUgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lk KSBjb25zdDsKICBpbmxpbmUgbnNTdHlsZVVuaXQgR2V0UmlnaHRVbml0KHZvaWQpIGNvbnN0Owog IGlubGluZSBuc1N0eWxlVW5pdCBHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0OwoKICBpbmxpbmUg bnNTdHlsZUNvb3JkJiBHZXQoUFJVaW50OCBhU2lkZSwgbnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNv bnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQp IGNvbnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29y ZCkgY29uc3Q7CiAgaW5saW5lIG5zU3R5bGVDb29yZCYgR2V0UmlnaHQobnNTdHlsZUNvb3JkJiBh Q29vcmQpIGNvbnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldEJvdHRvbShuc1N0eWxlQ29v cmQmIGFDb29yZCkgY29uc3Q7CgogIHZvaWQgUmVzZXQodm9pZCk7CgogIGlubGluZSB2b2lkIFNl dChQUlVpbnQ4IGFTaWRlLCBjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZv aWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZvaWQgU2V0 VG9wKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKICBpbmxpbmUgdm9pZCBTZXRSaWdodChj b25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZvaWQgU2V0Qm90dG9tKGNvbnN0 IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYg YUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7 Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtVW5pdHNbNF07CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZXNb NF07Cn07CgoKCgppbmxpbmUgUFJCb29sIG5zU3R5bGVDb29yZDo6b3BlcmF0b3IhPShjb25zdCBu c1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3QKewogIHJldHVybiBQUkJvb2woISAoKCp0aGlzKSA9 PSBhT3RoZXIpKTsKfQoKaW5saW5lIFBSSW50MzIgbnNTdHlsZUNvb3JkOjpHZXRDb29yZFZhbHVl KHZvaWQpIGNvbnN0CnsKICA7CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAg IHJldHVybiBtVmFsdWUubUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5z U3R5bGVDb29yZDo6R2V0SW50VmFsdWUodm9pZCkgY29uc3QKewogIDsKCgoKICBpZiAoKG1Vbml0 ID09IGVTdHlsZVVuaXRfUHJvcG9ydGlvbmFsKSB8fAogICAgICAobVVuaXQgPT0gZVN0eWxlVW5p dF9FbnVtZXJhdGVkKSB8fAogICAgICAobVVuaXQgPT0gZVN0eWxlVW5pdF9DaGFycykgfHwKICAg ICAgKG1Vbml0ID09IGVTdHlsZVVuaXRfSW50ZWdlcikpIHsKICAgIHJldHVybiBtVmFsdWUubUlu dDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBuc1N0eWxlQ29vcmQ6OkdldFBlcmNl bnRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgOwogIGlmIChtVW5pdCA9PSBlU3R5bGVVbml0X1BlcmNl bnQpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5s aW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0RmFjdG9yVmFsdWUodm9pZCkgY29uc3QKewogIDsK ICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZs b2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRV bmlvblZhbHVlKG5zU3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbWVtY3B5KCZhVmFsdWUs ICZtVmFsdWUsIHNpemVvZihuc1N0eWxlVW5pb24pKTsKfQoKCgoKaW5saW5lIFBSQm9vbCBuc1N0 eWxlU2lkZXM6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0CnsK ICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KCmlubGluZSBuc1N0eWxl VW5pdCBuc1N0eWxlU2lkZXM6OkdldFVuaXQoUFJVaW50OCBhU2lkZSkgY29uc3QKewogIHJldHVy biAobnNTdHlsZVVuaXQpbVVuaXRzW2FTaWRlXTsKfQoKaW5saW5lIG5zU3R5bGVVbml0IG5zU3R5 bGVTaWRlczo6R2V0TGVmdFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiBHZXRVbml0KDMpOwp9 CgppbmxpbmUgbnNTdHlsZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRUb3BVbml0KHZvaWQpIGNvbnN0 CnsKICByZXR1cm4gR2V0VW5pdCgwKTsKfQoKaW5saW5lIG5zU3R5bGVVbml0IG5zU3R5bGVTaWRl czo6R2V0UmlnaHRVbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gR2V0VW5pdCgxKTsKfQoKaW5s aW5lIG5zU3R5bGVVbml0IG5zU3R5bGVTaWRlczo6R2V0Qm90dG9tVW5pdCh2b2lkKSBjb25zdAp7 CiAgcmV0dXJuIEdldFVuaXQoMik7Cn0KCmlubGluZSBuc1N0eWxlQ29vcmQmIG5zU3R5bGVTaWRl czo6R2V0KFBSVWludDggYVNpZGUsIG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7CiAgYUNv b3JkLlNldFVuaW9uVmFsdWUobVZhbHVlc1thU2lkZV0sIChuc1N0eWxlVW5pdCltVW5pdHNbYVNp ZGVdKTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lk ZXM6OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICByZXR1cm4gR2V0KDMs IGFDb29yZCk7Cn0KCmlubGluZSBuc1N0eWxlQ29vcmQmIG5zU3R5bGVTaWRlczo6R2V0VG9wKG5z U3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7CiAgcmV0dXJuIEdldCgwLCBhQ29vcmQpOwp9Cgpp bmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYg YUNvb3JkKSBjb25zdAp7CiAgcmV0dXJuIEdldCgxLCBhQ29vcmQpOwp9CgppbmxpbmUgbnNTdHls ZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29u c3QKewogIHJldHVybiBHZXQoMiwgYUNvb3JkKTsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZVNpZGVz OjpTZXQoUFJVaW50OCBhU2lkZSwgY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtVW5p dHNbYVNpZGVdID0gYUNvb3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVmFs dWVzW2FTaWRlXSk7Cn0KCmlubGluZSB2b2lkIG5zU3R5bGVTaWRlczo6U2V0TGVmdChjb25zdCBu c1N0eWxlQ29vcmQmIGFDb29yZCkKewogIFNldCgzLCBhQ29vcmQpOwp9CgppbmxpbmUgdm9pZCBu c1N0eWxlU2lkZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIFNldCgw LCBhQ29vcmQpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5z U3R5bGVDb29yZCYgYUNvb3JkKQp7CiAgU2V0KDEsIGFDb29yZCk7Cn0KCmlubGluZSB2b2lkIG5z U3R5bGVTaWRlczo6U2V0Qm90dG9tKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKQp7CiAgU2V0 KDIsIGFDb29yZCk7Cn0KIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHls ZVN0cnVjdC5oIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxl U2V0LmgiIDEKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5o IgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5zSVN0eWxlU2hlZXQ7 CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJU3R5bGVSdWxlU3VwcGxpZXI7CmNsYXNz IG5zSVN0eWxlRnJhbWVDb25zdHJ1Y3Rpb247CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBu c0lQcmVzU2hlbGw7CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lE b2N1bWVudDsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5Owpj bGFzcyBuc1J1bGVOb2RlOwpzdHJ1Y3QgbnNGaW5kRnJhbWVIaW50OwoKCmNsYXNzIG5zSVNpemVP ZkhhbmRsZXI7CgpjbGFzcyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwoKCgoKCmNsYXNzIG5zSVN0 eWxlU2V0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlNTkzOTZiMCwgMHhiMjQ0 LCAweDExZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAweDE1LCAweDliLCAweDVh fX07IHJldHVybiBpaWQ7fQoKCgogIHZpcnR1YWwgdm9pZCBBcHBlbmRPdmVycmlkZVN0eWxlU2hl ZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJy aWRlU3R5bGVTaGVldEFmdGVyKG5zSVN0eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYUFmdGVyU2hlZXQp ID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0T3ZlcnJpZGVTdHlsZVNoZWV0QmVmb3JlKG5zSVN0 eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSVN0eWxlU2hlZXQqIGFCZWZvcmVTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBS ZW1vdmVPdmVycmlkZVN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmly dHVhbCBQUkludDMyIEdldE51bWJlck9mT3ZlcnJpZGVTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0 dWFsIG5zSVN0eWxlU2hlZXQqIEdldE92ZXJyaWRlU3R5bGVTaGVldEF0KFBSSW50MzIgYUluZGV4 KSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgQWRkRG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBh U2hlZXQsIG5zSURvY3VtZW50KiBhRG9jdW1lbnQpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3Zl RG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50 MzIgR2V0TnVtYmVyT2ZEb2NTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0dWFsIG5zSVN0eWxlU2hl ZXQqIEdldERvY1N0eWxlU2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAwOwoKICB2aXJ0dWFsIHZv aWQgQXBwZW5kVXNlclN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmly dHVhbCB2b2lkIEluc2VydFVzZXJTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNo ZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRVc2VyU3R5bGVTaGVl dEJlZm9yZShuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsKICB2 aXJ0dWFsIHZvaWQgUmVtb3ZlVXNlclN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9 IDA7CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mVXNlclN0eWxlU2hlZXRzKCkgPSAwOwog IHZpcnR1YWwgbnNJU3R5bGVTaGVldCogR2V0VXNlclN0eWxlU2hlZXRBdChQUkludDMyIGFJbmRl eCkgPSAwOwogIHZpcnR1YWwgdm9pZCBSZXBsYWNlVXNlclN0eWxlU2hlZXRzKG5zSVN1cHBvcnRz QXJyYXkqIGFOZXdTaGVldHMpID0gMDsKCiAgdmlydHVhbCB2b2lkIEFwcGVuZEFnZW50U3R5bGVT aGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0QWdl bnRTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQWZ0ZXJTaGVldCkg PSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRBZ2VudFN0eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVT aGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJU3R5bGVTaGVldCogYUJlZm9yZVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92 ZUFnZW50U3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBS SW50MzIgR2V0TnVtYmVyT2ZBZ2VudFN0eWxlU2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5 bGVTaGVldCogR2V0QWdlbnRTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0 dWFsIHZvaWQgUmVwbGFjZUFnZW50U3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1No ZWV0cykgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVUcmVlKG5zUnVsZU5vZGUqKiBh UmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhckNhY2hlZERhdGFJblJ1bGVUcmVl KG5zSVN0eWxlUnVsZSogYVJ1bGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRSdWxl Tm9kZU1hcHBpbmcobnNSdWxlTm9kZSogYVJ1bGVOb2RlKSA9IDA7CiMgMTMwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxlU2V0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdp blJ1bGVUcmVlUmVjb25zdHJ1Y3QoKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kUnVsZVRyZWVS ZWNvbnN0cnVjdCgpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVGcmFtZUNvbnN0cnVj dGlvbihuc0lTdHlsZUZyYW1lQ29uc3RydWN0aW9uKiogYVJlc3VsdCkgPSAwOwojIDE0NCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgQ2xlYXJTdHlsZURhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJU3R5bGVS dWxlKiBhUnVsZSwgbnNJU3R5bGVDb250ZXh0KiBhQ29udGV4dCkgPSAwOwoKCgogIHZpcnR1YWwg bnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBSQm9vbCBhRW5hYmxlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRTdGF0ZUNoYW5nZWQoUFJCb29sIGFBcHBs aWNhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0eWxlRm9y KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQp ID0gMDsKIyAxNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJU3R5bGVTZXQuaCIK ICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0eWxlRm9yTm9uRWxlbWVudCgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0KSA9IDA7CgoKCiAgdmlydHVhbCBuc0lTdHls ZUNvbnRleHQqIFJlc29sdmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ Q29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkgPSAwOwoKCgoKICB2aXJ0dWFs IG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u dGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKCk9MDsKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFJlUGFyZW50U3R5bGVDb250ZXh0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBh U3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl Q29udGV4dCogYU5ld1BhcmVudENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJU3R5bGVDb250ZXh0KiogYU5ld1N0eWxlQ29udGV4dCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBIYXNTdGF0ZURlcGVuZGVudFN0eWxlKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVN0 YXRlTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYVJl c3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb25zdHJ1Y3RSb290RnJhbWUobnNJUHJl c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQ29udGVudCogYURvY0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUZyYW1lKiYgYUZyYW1lU3ViVHJlZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJl Y29uc3RydWN0RG9jRWxlbWVudEhpZXJhcmNoeShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRBcHBlbmRlZChuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQq IGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmV3SW5k ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEluc2VydGVkKG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5k ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFJlcGxhY2VkKG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiBhT2xkQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu dCogYU5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4 SW5Db250YWluZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRSZW1vdmVkKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu dCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5kZXhJbkNv bnRhaW5lcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250 ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBh U3ViQ29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFN0YXRlc0NoYW5nZWQo bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSSW50MzIgYVN0YXRlTWFzaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmli dXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu dDMyIGFNb2RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NoYW5nZUhpbnQg YUhpbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlQ2hhbmdlZChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT dHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3R5bGVSdWxlKiBhU3R5bGVSdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0No YW5nZUhpbnQgYUhpbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN0eWxlUnVsZUFkZGVkKG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxl UmVtb3ZlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlKSA9IDA7CgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVwbGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhRnJhbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQ29udGludWluZ0ZyYW1l KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lGcmFtZSogYVBhcmVudEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUZyYW1lKiogYUNvbnRpbnVpbmdGcmFtZSkgPSAwOwojIDI4MiAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmlu ZFByaW1hcnlGcmFtZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZU1hbmFnZXIqIGFGcmFtZU1hbmFnZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaW5kRnJhbWVIaW50KiBhSGludD0wKSA9IDA7CiMg MzAwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxlU2V0LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRJbnNlcnRpb25Qb2ludChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudEZyYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkQ29udGVudCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUluc2VydGlvblBvaW50KSA9 IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZVJ1bGVTdXBwbGllcihuc0lTdHlsZVJ1 bGVTdXBwbGllciogYVN1cHBsaWVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVSdWxl U3VwcGxpZXIobnNJU3R5bGVSdWxlU3VwcGxpZXIqKiBhU3VwcGxpZXIpPTA7CgoKCgoKCgogIHZp cnR1YWwgdm9pZCBSZXNldFVuaXF1ZVN0eWxlSXRlbXModm9pZCkgPSAwOwoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQXR0cmlidXRlQWZmZWN0c1N0eWxlKG5zSUF0b20gKmFBdHRyaWJ1dGUsIG5zSUNv bnRlbnQgKmFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v bCAmYUFmZmVjdHMpID0gMDsKfTsKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxlU2V0KG5z SVN0eWxlU2V0KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgpjbGFzcyBuc1VuaXF1ZVN0eWxlSXRl bXMgOiBwcml2YXRlIG5zVm9pZEFycmF5CnsKcHVibGljIDoKCiAgc3RhdGljIG5zVW5pcXVlU3R5 bGVJdGVtcyAqR2V0VW5pcXVlU3R5bGVJdGVtcyggdm9pZCApewogICAgaWYobUluc3RhbmNlID09 IDApewoKCgogICAgICBuZXcgbnNVbmlxdWVTdHlsZUl0ZW1zOwoKICAgICAgOwoKCgogICAgfQog ICAgcmV0dXJuIG1JbnN0YW5jZTsKICB9CgogIHZvaWQgKkdldEl0ZW0odm9pZCAqYVB0cil7CiAg ICBQUkludDMyIGluZGV4ID0gbnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cik7CiAgICBpZiggaW5k ZXggIT0gLTEpewogICAgICByZXR1cm4gbnNWb2lkQXJyYXk6OkVsZW1lbnRBdChpbmRleCk7CiAg ICB9IGVsc2UgewogICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBBZGRJdGVtKHZv aWQgKmFQdHIpewogICAgaWYobnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cikgPT0gLTEpewogICAg ICByZXR1cm4gbnNWb2lkQXJyYXk6OkFwcGVuZEVsZW1lbnQoYVB0cik7CiAgICB9IGVsc2Ugewog ICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBSZW1vdmVJdGVtKHZvaWQgKmFQdHIp ewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpSZW1vdmVFbGVtZW50KGFQdHIpOwogIH0KCiAgUFJJ bnQzMiBDb3VudCh2b2lkKXsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9Cgog IHZvaWQgQ2xlYXIodm9pZCl7CiAgICBuc1ZvaWRBcnJheTo6Q2xlYXIoKTsKICB9CnByb3RlY3Rl ZDoKCiAgbnNVbmlxdWVTdHlsZUl0ZW1zKCBjb25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7 CiAgbnNVbmlxdWVTdHlsZUl0ZW1zJiBvcGVyYXRvciA9KGNvbnN0IG5zVW5pcXVlU3R5bGVJdGVt cyYgc3JjKTsKCgogIG5zVW5pcXVlU3R5bGVJdGVtcyh2b2lkKSA6IG5zVm9pZEFycmF5KCl7CiAg ICA7CiAgICBtSW5zdGFuY2U9dGhpczsKICB9CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxlSXRlbXMg Km1JbnN0YW5jZTsKfTsKIyAzOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJU3R5 bGVTZXQuaCIKc3RydWN0IG5zRmluZEZyYW1lSGludAp7CiAgbnNJRnJhbWUgKm1QcmltYXJ5RnJh bWVGb3JQcmV2U2libGluZzsKICBuc0ZpbmRGcmFtZUhpbnQoKSB7CiAgICBtUHJpbWFyeUZyYW1l Rm9yUHJldlNpYmxpbmcgPSAwOwogIH07Cn07CiMgNTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j b250ZW50L25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlv dXQvbnNJUHJlc0NvbnRleHQuaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSVByZXNDb250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJl cXVlc3QuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5o IgpjbGFzcyBuc0lMb2FkR3JvdXA7Cgp0eXBlZGVmIFBSVWludDMyIG5zTG9hZEZsYWdzOwojIDM0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgpjbGFzcyBuc0lSZXF1 ZXN0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGVmNmJmYmQyLCAweGZkNDYs IDB4NDhkOCwgeyAweDk2LCAweGI3LCAweDlmLCAweDhmLCAweDBmLCAweGQzLCAweDg3LCAweGZl IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FDU3Ry aW5nICYgYU5hbWUpID0gMDsKIyA1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJl cXVlc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVuZGluZyhQUkJvb2wgKl9yZXR2YWwpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzKG5zcmVzdWx0ICphU3RhdHVzKSA9 IDA7CiMgNzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDYW5jZWwobnNyZXN1bHQgYVN0YXR1cykgPSAwOwojIDg5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3Vz cGVuZCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzdW1lKHZvaWQpID0g MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2FkR3JvdXAobnNJTG9hZEdyb3VwICog KmFMb2FkR3JvdXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExvYWRHcm91cChuc0lMb2Fk R3JvdXAgKiBhTG9hZEdyb3VwKSA9IDA7CiMgMTE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVj a28vbnNJUmVxdWVzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9hZEZsYWdzKG5zTG9hZEZs YWdzICphTG9hZEZsYWdzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMb2FkRmxhZ3MobnNM b2FkRmxhZ3MgYUxvYWRGbGFncykgPSAwOwoKCgoKCgoKICBlbnVtIHsgTE9BRF9OT1JNQUwgPSAw VSB9OwoKCgoKCiAgZW51bSB7IExPQURfQkFDS0dST1VORCA9IDFVIH07CiMgMTM5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgogIGVudW0geyBJTkhJQklUX0NBQ0hJ TkcgPSAxMjhVIH07CgoKCgoKCiAgZW51bSB7IElOSElCSVRfUEVSU0lTVEVOVF9DQUNISU5HID0g MjU2VSB9OwojIDE1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3QuaCIK ICBlbnVtIHsgTE9BRF9CWVBBU1NfQ0FDSEUgPSA1MTJVIH07CgoKCgoKCgogIGVudW0geyBMT0FE X0ZST01fQ0FDSEUgPSAxMDI0VSB9OwojIDE4OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tv L25zSVJlcXVlc3QuaCIKICBlbnVtIHsgVkFMSURBVEVfQUxXQVlTID0gMjA0OFUgfTsKCiAgZW51 bSB7IFZBTElEQVRFX05FVkVSID0gNDA5NlUgfTsKCiAgZW51bSB7IFZBTElEQVRFX09OQ0VfUEVS X1NFU1NJT04gPSA4MTkyVSB9OwoKfTsKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91 dC9uc0lQcmVzQ29udGV4dC5oIiAyCgoKY2xhc3MgbnNCaWRpUHJlc1V0aWxzOwoKCnN0cnVjdCBu c0ZvbnQ7CnN0cnVjdCBuc1JlY3Q7CgpjbGFzcyBpbWdJUmVxdWVzdDsKCmNsYXNzIG5zSUNvbnRl bnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpjbGFzcyBuc0lG b250TWV0cmljczsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBuc0lMaW5r SGFuZGxlcjsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lQcmVmOwpjbGFzcyBuc0lTdHls ZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lFdmVudFN0 YXRlTWFuYWdlcjsKY2xhc3MgbnNJVVJJOwpjbGFzcyBuc0lMb29rQW5kRmVlbDsKY2xhc3MgbnNJ SU9TZXJ2aWNlOwpjbGFzcyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwpjbGFzcyBuc0lMYW5ndWFn ZUF0b207CmNsYXNzIG5zSVRoZW1lOwpzdHJ1Y3QgbnNTdHlsZVN0cnVjdDsKc3RydWN0IG5zU3R5 bGVCYWNrZ3JvdW5kOwojIDg1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXND b250ZXh0LmgiCmVudW0gbnNXaWRnZXRSZW5kZXJpbmcgewogIGVXaWRnZXRSZW5kZXJpbmdfTmF0 aXZlID0gMSwKICBlV2lkZ2V0UmVuZGVyaW5nX0dmeCA9IDIsCiAgZVdpZGdldFJlbmRlcmluZ19Q YXJ0aWFsR2Z4ID0gMwp9OwoKZW51bSBuc1dpZGdldFR5cGUgewogIGVXaWRnZXRUeXBlX0J1dHRv biA9IDEsCiAgZVdpZGdldFR5cGVfQ2hlY2tib3ggPSAyLAogIGVXaWRnZXRUeXBlX1JhZGlvID0g MywKICBlV2lkZ2V0VHlwZV9UZXh0ID0gNAp9OwoKZW51bSBuc0xhbmd1YWdlU3BlY2lmaWNUcmFu c2Zvcm1UeXBlIHsKICBlTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfVW5rbm93biA9IC0x LAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9Ob25lID0gMCwKICBlTGFuZ3VhZ2VT cGVjaWZpY1RyYW5zZm9ybVR5cGVfSmFwYW5lc2UsCiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zv cm1UeXBlX0tvcmVhbgp9OwoKCmNvbnN0IFBSVWludDMyIGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVu dENvbG9ycyA9IDB4MDE7CmNvbnN0IFBSVWludDMyIGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVudEZv bnRzID0gMHgwMjsKY29uc3QgUFJVaW50MzIga1ByZXNDb250ZXh0X1VuZGVybGluZUxpbmtzID0g MHgwMzsKCgpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRfTWluaW11bUZvbnRTaXplID0gMHgw MTsKCgoKY29uc3QgUFJVaW50OCBrUHJlc0NvbnRleHRfRGVmYXVsdFZhcmlhYmxlRm9udF9JRCA9 IDB4MDA7CmNvbnN0IFBSVWludDgga1ByZXNDb250ZXh0X0RlZmF1bHRGaXhlZEZvbnRfSUQgPSAw eDAxOwoKCgpjbGFzcyBuc0lQcmVzQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweDBhNWQxMmUwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAs IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEluaXQobnNJRGV2aWNlQ29udGV4dCogYURldmljZUNvbnRleHQpID0gMDsKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2hlbGwobnNJUHJlc1NoZWxsKiBhU2hlbGwpID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGVsbChuc0lQcmVzU2hlbGwqKiBhUmVzdWx0KSA9IDA7 CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGF0aWJpbGl0eU1vZGUobnNDb21wYXRp YmlsaXR5KiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcGF0aWJp bGl0eU1vZGUobnNDb21wYXRpYmlsaXR5IGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyogYU1vZGVSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZGdldFJlbmRlcmluZ01vZGUobnNXaWRnZXRS ZW5kZXJpbmcgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbWFnZUFuaW1h dGlvbk1vZGUoUFJVaW50MTYqIGFNb2RlUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRJbWFnZUFuaW1hdGlvbk1vZGUoUFJVaW50MTYgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbWFnZUxvYWRGbGFncyhuc0xvYWRGbGFncyYgYUxvYWRGbGFncykgPSAwOwoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExvb2tBbmRGZWVsKG5zSUxvb2tBbmRGZWVsKiogYUxv b2tBbmRGZWVsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SU9TZXJ2aWNlKG5zSUlP U2VydmljZSoqIGFJT1NlcnZpY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNl VVJMKG5zSVVSSSoqIGFVUkxSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRN ZWRpdW0obnNJQXRvbSoqIGFNZWRpdW1SZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBDbGVhclN0eWxlRGF0YUFuZFJlZmxvdyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoq IGFSZXN1bHQpID0gMDsKIyAyMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJl c0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3JOb25F bGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl eHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXNvbHZlUHNldWRvU3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRv VGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNv bnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CiMgMjMzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXNvbHZlUHNldWRvU3R5bGVXaXRoQ29tcGFyYXRvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20q IGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ1NTUHNldWRvQ29tcGFyYXRvciogYUNvbXBhcmF0 b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHls ZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJvYmVQ c2V1ZG9TdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFy ZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0 eWxlQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFhC TEJpbmRpbmdVUkwobnNJQ29udGVudCogYUNvbnRlbnQsIG5zQVN0cmluZyYgYVJlc3VsdCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZVBhcmVudFN0eWxlQ29udGV4dChuc0lGcmFtZSog YUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0 KiBhTmV3UGFyZW50Q29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZy b21TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBGcmVlVG9TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9yKGNvbnN0IG5zRm9udCYgYUZvbnQsIG5z SUZvbnRNZXRyaWNzKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh dWx0Rm9udChQUlVpbnQ4IGFGb250SUQsIGNvbnN0IG5zRm9udCoqIGFSZXN1bHQpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rm9udChQUlVpbnQ4IGFGb250SUQsIGNvbnN0IG5z Rm9udCYgYUZvbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhY2hlZEJvb2xQ cmVmKFBSVWludDMyIGFQcmVmVHlwZSwgUFJCb29sJiBhVmFsdWUpID0gMDsKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldENhY2hlZEludFByZWYoUFJVaW50MzIgYVByZWZUeXBlLCBQUkludDMy JiBhVmFsdWUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb250U2NhbGVyKFBSSW50 MzIqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRTY2FsZXIoUFJJbnQz MiBhU2NhbGVyKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdENvbG9yKG5z Y29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91 bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1 bHRMaW5rQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE ZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEZvY3VzQmFja2dyb3VuZENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNUZXh0Q29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VGb2N1c0NvbG9ycyhQUkJvb2wmIHVzZUZvY3VzQ29sb3Jz KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c1JpbmdXaWR0aChQUlVpbnQ4ICpmb2N1 c1JpbmdXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNSaW5nT25Bbnl0aGlu ZyhQUkJvb2wmIGZvY3VzUmluZ09uQW55dGhpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0RGVmYXVsdENvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXREZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXREZWZhdWx0TGlua0NvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yIGFDb2xvcikgPSAw OwojIDMyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzQ29udGV4dC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgTG9hZEltYWdlKGNvbnN0IG5zU3RyaW5nJiBhVVJMLAogICAgICAg ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgaW1nSVJlcXVlc3QgKiphUmVxdWVzdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTdG9wSW1hZ2VzRm9yKG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRDb250YWluZXIobnNJU3VwcG9ydHMqIGFDb250YWluZXIpID0gMDsKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb250YWluZXIobnNJU3VwcG9ydHMqKiBhUmVzdWx0KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExpbmtIYW5kbGVyKG5zSUxpbmtIYW5kbGVyKiBhSGFuZGxl cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlua0hhbmRsZXIobnNJTGlua0hhbmRsZXIq KiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmlzaWJsZUFyZWEo bnNSZWN0JiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpc2libGVB cmVhKGNvbnN0IG5zUmVjdCYgcikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhZ2lu YXRlZChQUkJvb2wqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFn aW5hdGVkU2Nyb2xsaW5nKFBSQm9vbCBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFBhZ2luYXRlZFNjcm9sbGluZyhQUkJvb2wqIGFSZXN1bHQpID0gMDsKIyAzODMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFBhZ2VEaW0obnNSZWN0KiBhQWN0dWFsUmVjdCwgbnNSZWN0KiBhQWRqUmVjdCkg PSAwOwojIDM5MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzQ29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZURpbShuc1JlY3QqIGFSZWN0KSA9IDA7CgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UGl4ZWxzVG9Ud2lwcyhmbG9hdCogYVJlc3VsdCkgY29uc3QgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR3aXBzVG9QaXhlbHMoZmxvYXQqIGFSZXN1bHQpIGNv bnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUd2lwc1RvUGl4ZWxzRm9yRm9udHMoZmxv YXQqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjYWxl ZFBpeGVsc1RvVHdpcHMoZmxvYXQqIGFTY2FsZSkgY29uc3QgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURldmljZUNvbnRleHQqKiBhUmVzdWx0KSBjb25zdCA9 IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRTdGF0ZU1hbmFnZXIobnNJRXZlbnRTdGF0 ZU1hbmFnZXIqKiBhTWFuYWdlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2Uo bnNJTGFuZ3VhZ2VBdG9tKiogYUxhbmd1YWdlKSA9IDA7CiMgNDIxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5n dWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSgKICAgICAgICAgICAgICBuc0xhbmd1YWdlU3BlY2lm aWNUcmFuc2Zvcm1UeXBlKiBhVHlwZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJh Y2tncm91bmRJbWFnZURyYXcoUFJCb29sICZhQ2FuRHJhdyk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEJhY2tncm91bmRJbWFnZURyYXcoUFJCb29sIGFDYW5EcmF3KT0wOwogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0QmFja2dyb3VuZENvbG9yRHJhdyhQUkJvb2wgJmFDYW5EcmF3KT0wOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZENvbG9yRHJhdyhQUkJvb2wgYUNhbkRyYXcpPTA7CiMg NDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRCaWRpRW5hYmxlZChQUkJvb2wqIGFCaWRpRW5hYmxlZCkgY29uc3Qg PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaUVuYWJsZWQoUFJCb29sIGFCaWRp RW5hYmxlZCkgY29uc3QgPSAwOwojIDQ2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u c0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzdWFsTW9kZShQUkJvb2wg YUlzVmlzdWFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc3VhbE1vZGUoUFJC b29sJiBhSXNWaXN1YWwpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJp ZGlVdGlscyhuc0JpZGlQcmVzVXRpbHMqKiBhQmlkaVV0aWxzKSA9IDA7CgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0QmlkaShQUlVpbnQzMiBhQmlkaU9wdGlvbnMsIFBSQm9vbCBhRm9yY2VSZWZs b3cgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaShQUlVpbnQzMiogYUJp ZGlPcHRpb25zKSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc1JUTChQ UkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNBcmFi aWNFbmNvZGluZyhQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0SXNCaWRpU3lzdGVtKFBSQm9vbCBhSXNCaWRpKSA9IDA7CgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldElzQmlkaVN5c3RlbShQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaWRpQ2hhcnNldChuc0FTdHJpbmcgJmFDaGFyU2V0KSBj b25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SXNSZW5kZXJpbmdPbmx5U2Vs ZWN0aW9uKFBSQm9vbCBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlbmRlcmlu Z09ubHlTZWxlY3Rpb24oUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0VGhlbWUobnNJVGhlbWUqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgVGhlbWVDaGFuZ2VkKCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFN5c0NvbG9y Q2hhbmdlZCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbmRGcmFtZUJhY2tncm91 bmQobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNTdHlsZUJhY2tncm91bmQqKiBhQmFja2dyb3VuZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sKiBhSXNDYW5hdnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSQm9vbCogYUZvdW5kQmFja2dyb3VuZCkgPSAwOwoKCgoKCn07CiMgNTY5ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCmV4dGVybiBuc3Jlc3Vs dAogIE5TX05ld0dhbGxleUNvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1 bHQpOwojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0Lmgi IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIiAxCiMg NDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc1JlZmxvd1R5cGUuaCIgMQojIDQxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zUmVmbG93VHlwZS5oIgplbnVtIG5zUmVmbG93VHlwZSB7 CgoKCgoKCgogIGVSZWZsb3dUeXBlX0NvbnRlbnRDaGFuZ2VkLAoKCgoKCgoKICBlUmVmbG93VHlw ZV9TdHlsZUNoYW5nZWQsCgoKCgogIGVSZWZsb3dUeXBlX1JlZmxvd0RpcnR5LAoKCgoKICBlUmVm bG93VHlwZV9Vc2VyRGVmaW5lZAp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSVByZXNTaGVsbC5oIiAyCgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJQ29udGVudDsKY2xh c3MgbnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJRG9jdW1l bnRPYnNlcnZlcjsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBu c0lTdHlsZVNldDsKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNzIG5zSURldmljZUNvbnRleHQ7 CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVBhZ2VTZXF1ZW5jZUZyYW1lOwpj bGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBU3RyaW5nOwpjbGFzcyBuc1N0cmluZ0FycmF5OwpjbGFz cyBuc0lDYXJldDsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lGcmFtZVNlbGVjdGlv bjsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CmNs YXNzIG5zSUFyZW5hOwpjbGFzcyBuc0lSZWZsb3dDYWxsYmFjazsKY2xhc3MgbnNJU3VwcG9ydHNB cnJheTsKY2xhc3MgbnNJRE9NTm9kZTsKY2xhc3MgbnNIVE1MUmVmbG93Q29tbWFuZDsKIyAxMDYg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCmVudW0gbnNBdHRy aWJ1dGVDaGFuZ2VUeXBlIHsKICBlQ2hhbmdlVHlwZV9TZXQgPSAwLAogIGVDaGFuZ2VUeXBlX1Jl bW92ZSA9IDEKfTsKIyAxMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1No ZWxsLmgiCmNsYXNzIG5zSVByZXNTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g eyAweDc2ZTc5YzYwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0 IEluaXQobnNJRG9jdW1lbnQqIGFEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgbnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgbnNJVmlld01hbmFnZXIqIGFW aWV3TWFuYWdlciwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTZXQqIGFTdHlsZVNldCwKICAg ICAgICAgICAgICAgICAgbnNDb21wYXRpYmlsaXR5IGFDb21wYXRNb2RlKSA9IDA7CiMgMTM5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgRGVzdHJveSgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyYW1l KHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZy ZWVGcmFtZShzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgUHVzaFN0YWNrTWVtb3J5KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUG9wU3Rh Y2tNZW1vcnkoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZVN0YWNrTWVtb3J5KHNp emVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE b2N1bWVudChuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRWaWV3TWFuYWdlcihuc0lWaWV3TWFuYWdlcioqIGFSZXN1bHQpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNldChuc0lTdHlsZVNldCoqIGFSZXN1bHQpID0gMDsK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY3RpdmVBbHRlcm5hdGVTdHlsZVNoZWV0KG5zU3RyaW5n JiBhU2hlZXRUaXRsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsdGVybmF0ZVN0 eWxlU2hlZXQoY29uc3QgbnNTdHJpbmcmIGFTaGVldFRpdGxlKSA9IDA7CgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBSZWNvbnN0cnVjdFN0eWxlRGF0YShQUkJvb2wgYVJlYnVpbGRSdWxlVHJlZSkg PSAwOwojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZWZlcmVuY2VTdHlsZVJ1bGVzKFBSQm9vbCBhRm9yY2VS ZWZsb3cpID0gMDsKIyAxODggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1No ZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVQcmVmU3R5bGVSdWxlcyhQUkJvb2wgYUVu YWJsZSwgUFJVaW50OCBhUHJlZlR5cGU9MHhGRikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXJl UHJlZlN0eWxlUnVsZXNFbmFibGVkKFBSQm9vbCYgYUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgTGlzdEFsdGVybmF0ZVN0eWxlU2hlZXRzKG5zU3RyaW5nQXJyYXkmIGFUaXRs ZUxpc3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTZWxlY3Rpb24obnNJ RnJhbWVTZWxlY3Rpb24qKiBhU2VsZWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJl Z2luT2JzZXJ2aW5nRG9jdW1lbnQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZE9ic2Vy dmluZ0RvY3VtZW50KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlkSW5pdGlh bFJlZmxvdyhQUkJvb2wgKmFEaWRJbml0aWFsUmVmbG93KSA9IDA7CiMgMjIzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p dGlhbFJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFJlc2l6ZVJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVp Z2h0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVDaGFuZ2VSZWZsb3coKSA9IDA7 CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdEZyYW1lKG5zSUZyYW1lKiogYUZyYW1lKSBjb25z dCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VTZXF1ZW5jZUZyYW1lKG5zSVBh Z2VTZXF1ZW5jZUZyYW1lKiogYVJlc3VsdCkgY29uc3QgPSAwOwojIDI1OCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy aW1hcnlGcmFtZUZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lGcmFtZSoqIGFQcmltYXJ5RnJhbWUpIGNvbnN0ID0gMDsKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVDb250ZXh0Rm9yKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4 dCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExheW91dE9iamVjdEZv cihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdXBwb3J0cyoqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UGxhY2Vob2xkZXJGcmFtZUZvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQbGFjZWhvbGRlckZyYW1lKSBjb25zdCA9 IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVmbG93Q29tbWFuZChuc0hUTUxSZWZs b3dDb21tYW5kKiBhUmVmbG93Q29tbWFuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2Vs UmVmbG93Q29tbWFuZChuc0lGcmFtZSogYVRhcmdldEZyYW1lLCBuc1JlZmxvd1R5cGUqIGFDbWRU eXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5jZWxBbGxSZWZsb3dDb21tYW5kcygpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWNyZWF0ZUZyYW1lc0Zvcihuc0lDb250ZW50KiBh Q29udGVudCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTYWZlVG9GbHVzaChQUkJv b2wmIGFJc1NhZmVUb0ZsdXNoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaFBl bmRpbmdOb3RpZmljYXRpb25zKFBSQm9vbCBhVXBkYXRlVmlld3MpID0gMDsKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBQb3N0RE9NRXZlbnQobnNJQ29udGVudCogYUNvbnRlbnQsIG5zRXZlbnQqIGFF dmVudCk9MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3N0QXR0cmlidXRlQ2hhbmdlKG5zSUNv bnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog YU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBh VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJpYnV0ZUNoYW5nZVR5cGUgYVR5 cGUpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3N0UmVmbG93Q2FsbGJhY2sobnNJUmVmbG93 Q2FsbGJhY2sqIGFDYWxsYmFjaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsUmVmbG93 Q2FsbGJhY2sobnNJUmVmbG93Q2FsbGJhY2sqIGFDYWxsYmFjaykgPSAwOwoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQmVnaW5SZWZsb3dCYXRjaGluZygpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEVu ZFJlZmxvd0JhdGNoaW5nKFBSQm9vbCBhRmx1c2hQZW5kaW5nUmVmbG93cykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVmbG93QmF0Y2hpbmdTdGF0dXMoUFJCb29sKiBhSXNCYXRjaGluZykg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyRnJhbWVSZWZzKG5zSUZyYW1lKiBhRnJhbWUp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lG cmFtZSAqYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5k ZXJpbmdDb250ZXh0KiogYUNvbnRleHQpID0gMDsKIyAzNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVw bGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKIyAzNjIgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHb1RvQW5jaG9yKGNvbnN0IG5zQVN0cmluZyYgYUFuY2hvck5hbWUsIFBSQm9vbCBhU2Ny b2xsKSA9IDA7CiMgMzkyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVs bC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsRnJhbWVJbnRvVmlldyhuc0lGcmFtZSAqYUZy YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVZQZXJjZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYUhQZXJjZW50KSBjb25zdCA9 IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldElnbm9yZUZyYW1lRGVzdHJ1Y3Rpb24oUFJC b29sIGFJZ25vcmUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeURlc3Ryb3lp bmdGcmFtZShuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 RnJhbWVNYW5hZ2VyKG5zSUZyYW1lTWFuYWdlcioqIGFGcmFtZU1hbmFnZXIpIGNvbnN0ID0gMDsK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEb0NvcHkoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TGlua0xvY2F0aW9uKG5zSURPTU5vZGUqIGFOb2RlLCBuc0FTdHJpbmcmIGFMb2NhdGlv bikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlTG9jYXRpb24obnNJRE9NTm9k ZSogYU5vZGUsIG5zQVN0cmluZyYgYUxvY2F0aW9uKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgRG9Db3B5SW1hZ2VDb250ZW50cyhuc0lET01Ob2RlKiBhTm9kZSkgPSAwOwoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldENhcmV0KG5zSUNhcmV0ICoqYU91dENhcmV0KSA9IDA7CiMgNDQ4ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0U2VsZWN0aW9uRmxhZ3MoUFJJbnQxNiBhSW5FbmFibGUpID0gMDsKIyA0NTcgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRTZWxlY3Rpb25GbGFncyhQUkludDE2ICphT3V0RW5hYmxlZCkgPSAwOwoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50V2l0aFRhcmdldChuc0V2ZW50KiBhRXZlbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZURPTUV2ZW50V2l0aFRhcmdldChuc0lDb250ZW50KiBh VGFyZ2V0Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFTdGF0dXMpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFRhcmdldEZyYW1lKG5zSUZyYW1lKiog YUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRUYXJnZXRDb250ZW50 KG5zRXZlbnQqIGFFdmVudCwgbnNJQ29udGVudCoqIGFDb250ZW50KSA9IDA7CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IENhcHR1cmVIaXN0b3J5U3RhdGUobnNJTGF5b3V0SGlzdG9yeVN0YXRlKiog YUxheW91dEhpc3RvcnlTdGF0ZSwgUFJCb29sIGFMZWF2aW5nUGFnZSA9IDApID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBhTGF5 b3V0SGlzdG9yeVN0YXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaXN0b3J5U3RhdGUo bnNJTGF5b3V0SGlzdG9yeVN0YXRlKiBhTGF5b3V0SGlzdG9yeVN0YXRlKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzUmVmbG93TG9ja2VkKFBSQm9vbCogYUlzTG9ja2VkKSA9IDA7CiMg NTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIGVudW0g R2VuZXJhdGVkQ29udGVudFR5cGUge0JlZm9yZSwgQWZ0ZXJ9OwogIHZpcnR1YWwgbnNyZXN1bHQg R2V0R2VuZXJhdGVkQ29udGVudEl0ZXJhdG9yKG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvbnRlbnRUeXBlIGFU eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnRJ dGVyYXRvcioqIGFJdGVyYXRvcikgY29uc3QgPSAwOwojIDUyMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFub255bW91 c0NvbnRlbnRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqIGFBbm9u eW1vdXNFbGVtZW50cykgPSAwOwojIDUzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u c0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFub255bW91c0NvbnRlbnRGb3Io bnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqKiBhQW5vbnltb3VzRWxlbWVu dHMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVsZWFzZUFub255bW91c0NvbnRlbnQo KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhaW50aW5nU3VwcHJlc3NlZChQUkJv b2wqIGFSZXN1bHQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zdXBwcmVzc1BhaW50aW5n KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc2FibGVUaGVtZVN1cHBvcnQoKSA9IDA7 CgoKCgogIHZpcnR1YWwgUFJCb29sIElzVGhlbWVTdXBwb3J0RW5hYmxlZCgpID0gMDsKCgoKCgoK CiAgc3RhdGljIFBSQm9vbCBHZXRWZXJpZnlSZWZsb3dFbmFibGUoKTsKCgoKCiAgc3RhdGljIHZv aWQgU2V0VmVyaWZ5UmVmbG93RW5hYmxlKFBSQm9vbCBhRW5hYmxlZCk7CgoKCgogIHN0YXRpYyBQ UkludDMyIEdldFZlcmlmeVJlZmxvd0ZsYWdzKCk7CiMgNTk2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FyZXRCaWRp TGV2ZWwoUFJVaW50OCBhTGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYXJl dEJpZGlMZXZlbChQUlVpbnQ4ICphT3V0TGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBVbmRlZmluZUNhcmV0QmlkaUxldmVsKHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBCaWRpU3R5bGVDaGFuZ2VSZWZsb3codm9pZCkgPSAwOwoKCn07CgoKCgoKZXh0ZXJuIG5zcmVz dWx0CiAgTlNfTmV3UHJlc1NoZWxsKG5zSVByZXNTaGVsbCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7 CiMgNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1Y3QuaCIgMgoK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbG9jYWxlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMg MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sb2NhbGUvbnNJTGFuZ3VhZ2VBdG9tLmgiCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUF0b20uaCIgMQojIDE3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwojIDI5 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQXRvbS5oIgpjbGFzcyBuc0lBdG9tIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkMWIxNWIwLCAweDkzYjQsIDB4MTFk MSwgeyAweDg5LCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweDFiLCAweDgxIH19OyBy ZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNBU3RyaW5nICYg X3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlKGNvbnN0IFBS VW5pY2hhciAqKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2l6ZU9mKG5z SVNpemVPZkhhbmRsZXIgKmFIYW5kbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAx NDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBdG9tLmgiCmV4dGVybiBuc0lBdG9t KiBOU19OZXdBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CmV4dGVybiBuc0lBdG9tKiBOU19O ZXdQZXJtYW5lbnRBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CmlubGluZSBhbHJlYWR5X0Fk ZFJlZmVkPG5zSUF0b20+IGRvX0dldEF0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKQogICAgeyBy ZXR1cm4gTlNfTmV3QXRvbShpc29sYXRpbjEpOyB9CmlubGluZSBhbHJlYWR5X0FkZFJlZmVkPG5z SUF0b20+IGRvX0dldFBlcm1hbmVudEF0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKQogICAgeyBy ZXR1cm4gTlNfTmV3UGVybWFuZW50QXRvbShpc29sYXRpbjEpOyB9CgoKCgpleHRlcm4gbnNJQXRv bSogTlNfTmV3QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwpleHRlcm4gbnNJQXRvbSog TlNfTmV3UGVybWFuZW50QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwppbmxpbmUgYWxy ZWFkeV9BZGRSZWZlZDxuc0lBdG9tPiBkb19HZXRBdG9tKGNvbnN0IFBSVW5pY2hhciogdW5pY29k ZSkKICAgIHsgcmV0dXJuIE5TX05ld0F0b20odW5pY29kZSk7IH0KaW5saW5lIGFscmVhZHlfQWRk UmVmZWQ8bnNJQXRvbT4gZG9fR2V0UGVybWFuZW50QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNv ZGUpCiAgICB7IHJldHVybiBOU19OZXdQZXJtYW5lbnRBdG9tKHVuaWNvZGUpOyB9CgoKCmV4dGVy biBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7CmV4dGVybiBu c0lBdG9tKiBOU19OZXdQZXJtYW5lbnRBdG9tKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7Cmlu bGluZSBhbHJlYWR5X0FkZFJlZmVkPG5zSUF0b20+IGRvX0dldEF0b20oY29uc3QgbnNBU3RyaW5n JiBhU3RyaW5nKQogICAgeyByZXR1cm4gTlNfTmV3QXRvbShhU3RyaW5nKTsgfQppbmxpbmUgYWxy ZWFkeV9BZGRSZWZlZDxuc0lBdG9tPiBkb19HZXRQZXJtYW5lbnRBdG9tKGNvbnN0IG5zQVN0cmlu ZyYgYVN0cmluZykKICAgIHsgcmV0dXJuIE5TX05ld1Blcm1hbmVudEF0b20oYVN0cmluZyk7IH0K CgoKCmV4dGVybiBuc3JlZmNudCBOU19HZXROdW1iZXJPZkF0b21zKHZvaWQpOwojIDE1ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbG9jYWxlL25zSUxhbmd1YWdlQXRvbS5oIiAyCiMgMjkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9sb2NhbGUvbnNJTGFuZ3VhZ2VBdG9tLmgiCmNsYXNzIG5zSUxhbmd1 YWdlQXRvbSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTExZSwgMHgx NWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwg MHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlKFBS VW5pY2hhciAqICphTGFuZ3VhZ2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3Vh Z2VHcm91cChuc0lBdG9tICogKmFMYW5ndWFnZUdyb3VwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IExhbmd1YWdlSXMoY29uc3QgUFJVbmljaGFyICphTGFuZ3VhZ2UsIFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0 cnVjdC5oIiAyCgpjbGFzcyBuc0lGcmFtZTsKCmVudW0gbnNTdHlsZVN0cnVjdElEIHsKIyA2OCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdC5oIgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1Y3RMaXN0LmgiIDEKIyA1NyAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdExpc3QuaCIKZVN0eWxlU3Ry dWN0X0ZvbnQsCmVTdHlsZVN0cnVjdF9Db2xvciwKZVN0eWxlU3RydWN0X0JhY2tncm91bmQsCmVT dHlsZVN0cnVjdF9MaXN0LAplU3R5bGVTdHJ1Y3RfUG9zaXRpb24sCmVTdHlsZVN0cnVjdF9UZXh0 LAplU3R5bGVTdHJ1Y3RfVGV4dFJlc2V0LAplU3R5bGVTdHJ1Y3RfRGlzcGxheSwKZVN0eWxlU3Ry dWN0X1Zpc2liaWxpdHksCmVTdHlsZVN0cnVjdF9Db250ZW50LAplU3R5bGVTdHJ1Y3RfUXVvdGVz LAplU3R5bGVTdHJ1Y3RfVXNlckludGVyZmFjZSwKZVN0eWxlU3RydWN0X1VJUmVzZXQsCmVTdHls ZVN0cnVjdF9UYWJsZSwKZVN0eWxlU3RydWN0X1RhYmxlQm9yZGVyLAplU3R5bGVTdHJ1Y3RfTWFy Z2luLAplU3R5bGVTdHJ1Y3RfUGFkZGluZywKZVN0eWxlU3RydWN0X0JvcmRlciwKZVN0eWxlU3Ry dWN0X091dGxpbmUsCgplU3R5bGVTdHJ1Y3RfWFVMLAojIDY5ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKCgpuc1N0eWxlU3RydWN0SURfTGVuZ3RoCgp9 OwojIDg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiCnN0 cnVjdCBuc1N0eWxlU3RydWN0IHsKfTsKCgoKc3RydWN0IG5zU3R5bGVGb250IDogcHVibGljIG5z U3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVGb250KHZvaWQpOwogIH5uc1N0eWxlRm9udCh2b2lkKSB7 fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3Jl dHVybiBlU3R5bGVTdHJ1Y3RfRm9udDt9CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShj b25zdCBuc1N0eWxlRm9udCYgYU90aGVyKSBjb25zdDsKICBzdGF0aWMgbnNDaGFuZ2VIaW50IENh bGNGb250RGlmZmVyZW5jZShjb25zdCBuc0ZvbnQmIGFGb250MSwgY29uc3QgbnNGb250JiBhRm9u dDIpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNv bnRleHQpIHRocm93KCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7 CgogIFBSVWludDggbUZsYWdzOwogIG5zRm9udCBtRm9udDsKICBuc2Nvb3JkIG1TaXplOwoKCgoK ICBuc1N0eWxlRm9udChjb25zdCBuc0ZvbnQmIGFGb250KTsKICBuc1N0eWxlRm9udChjb25zdCBu c1N0eWxlRm9udCYgYVN0eWxlRm9udCk7CiAgbnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCk7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvbG9yIDogcHVibGljIG5zU3R5bGVTdHJ1 Y3QgewogIG5zU3R5bGVDb2xvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICBuc1N0 eWxlQ29sb3IoY29uc3QgbnNTdHlsZUNvbG9yJiBhT3RoZXIpOwogIH5uc1N0eWxlQ29sb3Iodm9p ZCkge307CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgp IHtyZXR1cm4gZVN0eWxlU3RydWN0X0NvbG9yO30KCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJl bmNlKGNvbnN0IG5zU3R5bGVDb2xvciYgYU90aGVyKSBjb25zdDsKCiAgdm9pZCogb3BlcmF0b3Ig bmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZv aWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1 bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0 KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVDb2xvcigpOwogICAgYUNvbnRleHQtPkZy ZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlQ29sb3IpLCB0aGlzKTsKICB9OwoKCgogIG5zY29sb3Ig bUNvbG9yOwp9OwoKc3RydWN0IG5zU3R5bGVCYWNrZ3JvdW5kIDogcHVibGljIG5zU3R5bGVTdHJ1 Y3QgewogIG5zU3R5bGVCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwog IG5zU3R5bGVCYWNrZ3JvdW5kKGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhT3RoZXIpOwogIH5u c1N0eWxlQmFja2dyb3VuZCgpIHt9OwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdl dFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9CYWNrZ3JvdW5kO30KCiAgdm9p ZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJv dygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hl bGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5z SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVCYWNrZ3JvdW5kKCk7 CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVCYWNrZ3JvdW5kKSwgdGhp cyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVCYWNr Z3JvdW5kJiBhT3RoZXIpIGNvbnN0OwoKCgoKCiAgUFJVaW50OCBtQmFja2dyb3VuZEZsYWdzOwog IFBSVWludDggbUJhY2tncm91bmRBdHRhY2htZW50IDogNDsKICBQUlVpbnQ4IG1CYWNrZ3JvdW5k Q2xpcCA6IDM7CiAgUFJVaW50OCBtQmFja2dyb3VuZElubGluZVBvbGljeSA6IDI7CiAgUFJVaW50 OCBtQmFja2dyb3VuZE9yaWdpbiA6IDM7CiAgUFJVaW50OCBtQmFja2dyb3VuZFJlcGVhdCA6IDQ7 CgoKCiAgdW5pb24gewogICAgbnNjb29yZCBtQ29vcmQ7CiAgICBmbG9hdCBtRmxvYXQ7CiAgfSBt QmFja2dyb3VuZFhQb3NpdGlvbiwKICAgIG1CYWNrZ3JvdW5kWVBvc2l0aW9uOwoKICBuc2NvbG9y IG1CYWNrZ3JvdW5kQ29sb3I7CiAgbnNTdHJpbmcgbUJhY2tncm91bmRJbWFnZTsKCiAgUFJCb29s IElzVHJhbnNwYXJlbnQoKSBjb25zdAogIHsKICAgIHJldHVybiAobUJhY2tncm91bmRGbGFncyAm CiAgICAgICAgICAgICgweDAxIHwgMHgwMikpID09CiAgICAgICAgICAgICgweDAxIHwgMHgwMik7 CiAgfQp9OwojIDIwMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVj dC5oIgpzdHJ1Y3QgbnNTdHlsZU1hcmdpbjogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5 bGVNYXJnaW4odm9pZCk7CiAgbnNTdHlsZU1hcmdpbihjb25zdCBuc1N0eWxlTWFyZ2luJiBhTWFy Z2luKTsKICB+bnNTdHlsZU1hcmdpbih2b2lkKSB7fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVT dHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1Y3RfTWFyZ2luO30K CiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0 KSB0aHJvdygpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwoKICB2 b2lkIFJlY2FsY0RhdGEoKTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNT dHlsZU1hcmdpbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1NYXJnaW47CgogIFBS Qm9vbCBHZXRNYXJnaW4obnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0CiAgewogICAgaWYgKG1IYXND YWNoZWRNYXJnaW4pIHsKICAgICAgYU1hcmdpbiA9IG1DYWNoZWRNYXJnaW47CiAgICAgIHJldHVy biAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKCiAgdm9pZCBDYWxjTWFyZ2luRm9yKGNvbnN0 IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdDsKCnByb3RlY3RlZDoK ICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE1hcmdpbjsKICBuc01hcmdpbiBtQ2FjaGVkTWFyZ2lu Owp9OwoKCnN0cnVjdCBuc1N0eWxlUGFkZGluZzogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5z U3R5bGVQYWRkaW5nKHZvaWQpOwogIG5zU3R5bGVQYWRkaW5nKGNvbnN0IG5zU3R5bGVQYWRkaW5n JiBhUGFkZGluZyk7CiAgfm5zU3R5bGVQYWRkaW5nKHZvaWQpIHt9OwoKICBzdGF0aWMgY29uc3Qg bnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9Q YWRkaW5nO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQq IGFDb250ZXh0KSB0aHJvdygpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRl eHQpOwoKICB2b2lkIFJlY2FsY0RhdGEoKTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2Uo Y29uc3QgbnNTdHlsZVBhZGRpbmcmIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtUGFk ZGluZzsKCiAgUFJCb29sIEdldFBhZGRpbmcobnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdAogIHsK ICAgIGlmIChtSGFzQ2FjaGVkUGFkZGluZykgewogICAgICBhUGFkZGluZyA9IG1DYWNoZWRQYWRk aW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgQ2Fs Y1BhZGRpbmdGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFQYWRkaW5nKSBj b25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZFBhZGRpbmc7CiAgbnNN YXJnaW4gbUNhY2hlZFBhZGRpbmc7Cn07CgpzdHJ1Y3QgbnNCb3JkZXJDb2xvcnMgewogIG5zQm9y ZGVyQ29sb3JzKiBtTmV4dDsKICBuc2NvbG9yIG1Db2xvcjsKICBQUkJvb2wgbVRyYW5zcGFyZW50 OwoKICBuc0JvcmRlckNvbG9ycyogQ29weUNvbG9ycygpIHsKICAgIG5zQm9yZGVyQ29sb3JzKiBu ZXh0ID0gMDsKICAgIGlmIChtTmV4dCkKICAgICAgbmV4dCA9IG1OZXh0LT5Db3B5Q29sb3JzKCk7 CiAgICByZXR1cm4gbmV3IG5zQm9yZGVyQ29sb3JzKG1Db2xvciwgbVRyYW5zcGFyZW50LCBuZXh0 KTsKICB9CgogIG5zQm9yZGVyQ29sb3JzKCkgOm1OZXh0KDApIHsgbUNvbG9yID0gKChuc2NvbG9y KSAoKDI1NSA8PCAyNCkgfCAoKDApPDwxNikgfCAoKDApPDw4KSB8ICgwKSkpOyB9OwoKICBuc0Jv cmRlckNvbG9ycyhjb25zdCBuc2NvbG9yJiBhQ29sb3IsIFBSQm9vbCBhVHJhbnNwYXJlbnQsIG5z Qm9yZGVyQ29sb3JzKiBhTmV4dD0wKSB7CiAgICBtQ29sb3IgPSBhQ29sb3I7CiAgICBtVHJhbnNw YXJlbnQgPSBhVHJhbnNwYXJlbnQ7CiAgICBtTmV4dCA9IGFOZXh0OwogIH0KCiAgfm5zQm9yZGVy Q29sb3JzKCkgewogICAgZGVsZXRlIG1OZXh0OwogIH0KCiAgUFJCb29sIEVxdWFscyhuc0JvcmRl ckNvbG9ycyogYU90aGVyKSB7CiAgICBuc0JvcmRlckNvbG9ycyogYzEgPSB0aGlzOwogICAgbnNC b3JkZXJDb2xvcnMqIGMyID0gYU90aGVyOwogICAgd2hpbGUgKGMxICYmIGMyKSB7CiAgICAgIGlm IChjMS0+bUNvbG9yICE9IGMyLT5tQ29sb3IgfHwKICAgICAgICAgIGMxLT5tVHJhbnNwYXJlbnQg IT0gYzItPm1UcmFuc3BhcmVudCkKICAgICAgICByZXR1cm4gMDsKICAgICAgYzEgPSBjMS0+bU5l eHQ7CiAgICAgIGMyID0gYzItPm1OZXh0OwogICAgfQogICAgcmV0dXJuICFjMSAmJiAhYzI7CiAg fQp9OwoKc3RydWN0IG5zU3R5bGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0 eWxlQm9yZGVyKCkgOm1Cb3JkZXJDb2xvcnMoMCkge307CiAgbnNTdHlsZUJvcmRlcihuc0lQcmVz Q29udGV4dCogYUNvbnRleHQpOwogIG5zU3R5bGVCb3JkZXIoY29uc3QgbnNTdHlsZUJvcmRlciYg YUJvcmRlcik7CiAgfm5zU3R5bGVCb3JkZXIodm9pZCkgewogICAgaWYgKG1Cb3JkZXJDb2xvcnMp IHsKICAgICAgZm9yIChQUkludDMyIGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgIGRlbGV0ZSBt Qm9yZGVyQ29sb3JzW2ldOwogICAgICBkZWxldGUgW11tQm9yZGVyQ29sb3JzOwogICAgfQogIH07 CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1 cm4gZVN0eWxlU3RydWN0X0JvcmRlcjt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3os IG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKTsKICB2b2lkIERlc3Ryb3kobnNJUHJl c0NvbnRleHQqIGFDb250ZXh0KTsKCiAgUFJCb29sIElzQm9yZGVyU2lkZVZpc2libGUoUFJVaW50 OCBhU2lkZSkgY29uc3Q7CiAgdm9pZCBSZWNhbGNEYXRhKCk7CiAgbnNDaGFuZ2VIaW50IENhbGNE aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVCb3JkZXImIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVT aWRlcyBtQm9yZGVyOwogIG5zU3R5bGVTaWRlcyBtQm9yZGVyUmFkaXVzOwogIFBSVWludDggbUZs b2F0RWRnZTsKICBuc0JvcmRlckNvbG9ycyoqIG1Cb3JkZXJDb2xvcnM7CgogIHZvaWQgRW5zdXJl Qm9yZGVyQ29sb3JzKCkgewogICAgaWYgKCFtQm9yZGVyQ29sb3JzKSB7CiAgICAgIG1Cb3JkZXJD b2xvcnMgPSBuZXcgbnNCb3JkZXJDb2xvcnMqWzRdOwogICAgICBpZiAobUJvcmRlckNvbG9ycykK ICAgICAgICBmb3IgKFBSSW50MzIgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICBtQm9yZGVy Q29sb3JzW2ldID0gMDsKICAgIH0KICB9CgogIHZvaWQgQ2xlYXJCb3JkZXJDb2xvcnMoUFJVaW50 OCBhU2lkZSkgewogICAgaWYgKG1Cb3JkZXJDb2xvcnNbYVNpZGVdKSB7CiAgICAgIGRlbGV0ZSBt Qm9yZGVyQ29sb3JzW2FTaWRlXTsKICAgICAgbUJvcmRlckNvbG9yc1thU2lkZV0gPSAwOwogICAg fQogIH0KCiAgUFJCb29sIEdldEJvcmRlcihuc01hcmdpbiYgYUJvcmRlcikgY29uc3QKICB7CiAg ICBpZiAobUhhc0NhY2hlZEJvcmRlcikgewogICAgICBhQm9yZGVyID0gbUNhY2hlZEJvcmRlcjsK ICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIFBSVWludDggR2V0Qm9y ZGVyU3R5bGUoUFJVaW50OCBhU2lkZSkgY29uc3QKICB7CiAgICA7CiAgICByZXR1cm4gKG1Cb3Jk ZXJTdHlsZVthU2lkZV0gJiAweDFGKTsKICB9CgogIHZvaWQgU2V0Qm9yZGVyU3R5bGUoUFJVaW50 OCBhU2lkZSwgUFJVaW50OCBhU3R5bGUpCiAgewogICAgOwogICAgbUJvcmRlclN0eWxlW2FTaWRl XSAmPSB+MHgxRjsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKGFTdHlsZSAmIDB4MUYpOwoK ICB9CgogIHZvaWQgR2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xvciYgYUNvbG9y LAogICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhVHJhbnNwYXJlbnQsIFBSQm9vbCYgYUZv cmVncm91bmQpIGNvbnN0CiAgewogICAgYVRyYW5zcGFyZW50ID0gYUZvcmVncm91bmQgPSAwOwog ICAgOwogICAgaWYgKChtQm9yZGVyU3R5bGVbYVNpZGVdICYgMHg2MCkgPT0gMCkKICAgICAgYUNv bG9yID0gbUJvcmRlckNvbG9yW2FTaWRlXTsKICAgIGVsc2UgaWYgKG1Cb3JkZXJTdHlsZVthU2lk ZV0gJiAweDIwKQogICAgICBhRm9yZWdyb3VuZCA9IDE7CiAgICBlbHNlCiAgICAgIGFUcmFuc3Bh cmVudCA9IDE7CiAgfQoKICB2b2lkIFNldEJvcmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29s b3IgYUNvbG9yKQogIHsKICAgIDsKICAgIG1Cb3JkZXJDb2xvclthU2lkZV0gPSBhQ29sb3I7CiAg ICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IH4weDYwOwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSB8 PSAweDgwOwogIH0KCiAgdm9pZCBHZXRDb21wb3NpdGVDb2xvcnMoUFJJbnQzMiBhSW5kZXgsIG5z Qm9yZGVyQ29sb3JzKiogYUNvbG9ycykgY29uc3QKICB7CiAgICBpZiAoIW1Cb3JkZXJDb2xvcnMp CiAgICAgICphQ29sb3JzID0gMDsKICAgIGVsc2UKICAgICAgKmFDb2xvcnMgPSBtQm9yZGVyQ29s b3JzW2FJbmRleF07CiAgfQoKICB2b2lkIEFwcGVuZEJvcmRlckNvbG9yKFBSSW50MzIgYUluZGV4 LCBuc2NvbG9yIGFDb2xvciwgUFJCb29sIGFUcmFuc3BhcmVudCkKICB7CiAgICA7CiAgICBuc0Jv cmRlckNvbG9ycyogY29sb3JFbnRyeSA9IG5ldyBuc0JvcmRlckNvbG9ycyhhQ29sb3IsIGFUcmFu c3BhcmVudCk7CiAgICBpZiAoIW1Cb3JkZXJDb2xvcnNbYUluZGV4XSkKICAgICAgbUJvcmRlckNv bG9yc1thSW5kZXhdID0gY29sb3JFbnRyeTsKICAgIGVsc2UgewogICAgICBuc0JvcmRlckNvbG9y cyogbGFzdCA9IG1Cb3JkZXJDb2xvcnNbYUluZGV4XTsKICAgICAgd2hpbGUgKGxhc3QtPm1OZXh0 KQogICAgICAgIGxhc3QgPSBsYXN0LT5tTmV4dDsKICAgICAgbGFzdC0+bU5leHQgPSBjb2xvckVu dHJ5OwogICAgfQogICAgbUJvcmRlclN0eWxlW2FJbmRleF0gJj0gfjB4NjA7CiAgICBtQm9yZGVy U3R5bGVbYUluZGV4XSB8PSAweDgwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJUcmFuc3BhcmVudChQ UlVpbnQ4IGFTaWRlKQogIHsKICAgIDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4NjA7 CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHg0MCk7CiAgfQoKICB2b2lkIFNl dEJvcmRlclRvRm9yZWdyb3VuZChQUlVpbnQ4IGFTaWRlKQogIHsKICAgIDsKICAgIG1Cb3JkZXJT dHlsZVthU2lkZV0gJj0gfjB4NjA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwg MHgyMCk7CiAgfQoKICB2b2lkIFVuc2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSkKICB7CiAg ICA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IDB4MUY7CiAgfQoKCiAgdm9pZCBDYWxjQm9y ZGVyRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhQm9yZGVyKSBjb25zdDsK ICB2b2lkIENhbGNCb3JkZXJGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgUFJVaW50OCBhU2lk ZSwgbnNjb29yZCYgYVdpZHRoKSBjb25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhh c0NhY2hlZEJvcmRlcjsKICBuc01hcmdpbiBtQ2FjaGVkQm9yZGVyOwoKICBQUlVpbnQ4IG1Cb3Jk ZXJTdHlsZVs0XTsKICBuc2NvbG9yIG1Cb3JkZXJDb2xvcls0XTsKCgoKICBuc2Nvb3JkIG1Cb3Jk ZXJXaWR0aHNbM107Cn07CgoKc3RydWN0IG5zU3R5bGVCb3JkZXJQYWRkaW5nOiBwdWJsaWMgbnNT dHlsZVN0cnVjdCB7CiAgbnNTdHlsZUJvcmRlclBhZGRpbmcodm9pZCkgeyBtSGFzQ2FjaGVkQm9y ZGVyUGFkZGluZyA9IDA7IH07CiAgfm5zU3R5bGVCb3JkZXJQYWRkaW5nKHZvaWQpIHt9OwoKCgoK ICBQUkJvb2wgR2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIGNvbnN0 IHsKICAgIGlmIChtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZykgewogICAgICBhQm9yZGVyUGFkZGlu ZyA9IG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVy biAwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJQYWRkaW5nKG5zTWFyZ2luIGFCb3JkZXJQYWRkaW5n KSB7CiAgICBtQ2FjaGVkQm9yZGVyUGFkZGluZyA9IGFCb3JkZXJQYWRkaW5nOwogICAgbUhhc0Nh Y2hlZEJvcmRlclBhZGRpbmcgPSAxOwogIH0KCnByb3RlY3RlZDoKICBuc01hcmdpbiBtQ2FjaGVk Qm9yZGVyUGFkZGluZzsKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmc7Cn07 CgoKc3RydWN0IG5zU3R5bGVPdXRsaW5lOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZU91dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZU91dGxpbmUo Y29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lKTsKICB+bnNTdHlsZU91dGxpbmUodm9pZCkg e307CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHty ZXR1cm4gZVN0eWxlU3RydWN0X091dGxpbmU7fQoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90 IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHRocm93KCkgewogICAgdm9pZCogcmVzdWx0 ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICBy ZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0 KSB7CiAgICB0aGlzLT5+bnNTdHlsZU91dGxpbmUoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVs bChzaXplb2YobnNTdHlsZU91dGxpbmUpLCB0aGlzKTsKICB9OwoKICB2b2lkIFJlY2FsY0RhdGEo KTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZU91dGxpbmUmIGFP dGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtT3V0bGluZVJhZGl1czsKCgogIG5zU3R5bGVD b29yZCBtT3V0bGluZVdpZHRoOwoKICBQUkJvb2wgR2V0T3V0bGluZVdpZHRoKG5zY29vcmQmIGFX aWR0aCkgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hlZE91dGxpbmUpIHsKICAgICAgYVdpZHRo ID0gbUNhY2hlZE91dGxpbmVXaWR0aDsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4g MDsKICB9CgogIFBSVWludDggR2V0T3V0bGluZVN0eWxlKHZvaWQpIGNvbnN0CiAgewogICAgcmV0 dXJuIChtT3V0bGluZVN0eWxlICYgMHgxRik7CiAgfQoKICB2b2lkIFNldE91dGxpbmVTdHlsZShQ UlVpbnQ4IGFTdHlsZSkKICB7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDFGOwogICAgbU91dGxp bmVTdHlsZSB8PSAoYVN0eWxlICYgMHgxRik7CiAgfQoKCiAgUFJCb29sIEdldE91dGxpbmVDb2xv cihuc2NvbG9yJiBhQ29sb3IpIGNvbnN0CiAgewogICAgaWYgKChtT3V0bGluZVN0eWxlICYgMHg2 MCkgPT0gMCkgewogICAgICBhQ29sb3IgPSBtT3V0bGluZUNvbG9yOwogICAgICByZXR1cm4gMTsK ICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lQ29sb3IobnNjb2xvciBh Q29sb3IpCiAgewogICAgbU91dGxpbmVDb2xvciA9IGFDb2xvcjsKICAgIG1PdXRsaW5lU3R5bGUg Jj0gfjB4NjA7CiAgICBtT3V0bGluZVN0eWxlIHw9IDB4ODA7CiAgfQoKICB2b2lkIFNldE91dGxp bmVJbnZlcnQodm9pZCkKICB7CiAgICBtT3V0bGluZVN0eWxlIHw9ICgweDgwIHwgMHg2MCk7CiAg fQoKICBQUkJvb2wgR2V0T3V0bGluZUludmVydCh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiht T3V0bGluZVN0eWxlICYgMHg2MCk7CiAgfQoKcHJvdGVjdGVkOgogIG5zY29vcmQgbUNhY2hlZE91 dGxpbmVXaWR0aDsKCiAgbnNjb2xvciBtT3V0bGluZUNvbG9yOwoKCiAgbnNjb29yZCBtQm9yZGVy V2lkdGhzWzNdOwoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgUFJVaW50OCBt T3V0bGluZVN0eWxlOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6IHB1YmxpYyBuc1N0eWxlU3Ry dWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKTsKICBuc1N0eWxlTGlzdChjb25zdCBuc1N0eWxlTGlz dCYgYVN0eWxlTGlzdCk7CiAgfm5zU3R5bGVMaXN0KHZvaWQpOwoKICBzdGF0aWMgY29uc3QgbnNT dHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9MaXN0 O30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250 ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2Nh dGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBE ZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVMaXN0 KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVMaXN0KSwgdGhpcyk7 CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVMaXN0JiBh T3RoZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1MaXN0U3R5bGVUeXBlOwogIFBSVWludDggbUxpc3RT dHlsZVBvc2l0aW9uOwogIG5zU3RyaW5nIG1MaXN0U3R5bGVJbWFnZTsKICBuc1JlY3QgbUltYWdl UmVnaW9uOwp9OwoKc3RydWN0IG5zU3R5bGVQb3NpdGlvbiA6IHB1YmxpYyBuc1N0eWxlU3RydWN0 IHsKICBuc1N0eWxlUG9zaXRpb24odm9pZCk7CiAgbnNTdHlsZVBvc2l0aW9uKGNvbnN0IG5zU3R5 bGVQb3NpdGlvbiYgYU90aGVyKTsKICB+bnNTdHlsZVBvc2l0aW9uKHZvaWQpOwoKICBzdGF0aWMg Y29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0 cnVjdF9Qb3NpdGlvbjt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXND b250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7 CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt Pn5uc1N0eWxlUG9zaXRpb24oKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNT dHlsZVBvc2l0aW9uKSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNl KGNvbnN0IG5zU3R5bGVQb3NpdGlvbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1P ZmZzZXQ7CiAgbnNTdHlsZUNvb3JkIG1XaWR0aDsKICBuc1N0eWxlQ29vcmQgbU1pbldpZHRoOwog IG5zU3R5bGVDb29yZCBtTWF4V2lkdGg7CiAgbnNTdHlsZUNvb3JkIG1IZWlnaHQ7CiAgbnNTdHls ZUNvb3JkIG1NaW5IZWlnaHQ7CiAgbnNTdHlsZUNvb3JkIG1NYXhIZWlnaHQ7CiAgUFJVaW50OCBt Qm94U2l6aW5nOwogIG5zU3R5bGVDb29yZCBtWkluZGV4Owp9OwoKc3RydWN0IG5zU3R5bGVUZXh0 UmVzZXQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVRleHRSZXNldCh2b2lkKTsK ICBuc1N0eWxlVGV4dFJlc2V0KGNvbnN0IG5zU3R5bGVUZXh0UmVzZXQmIGFPdGhlcik7CiAgfm5z U3R5bGVUZXh0UmVzZXQodm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0 U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1cm4gZVN0eWxlU3RydWN0X1RleHRSZXNldDt9CgogIHZvaWQq IG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3co KSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxs KHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQ cmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGV4dFJlc2V0KCk7CiAg ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVUZXh0UmVzZXQpLCB0aGlzKTsK ICB9OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRleHRSZXNl dCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVGV4dERlY29yYXRpb247CiAgUFJVaW50OCBt VW5pY29kZUJpZGk7CgogIG5zU3R5bGVDb29yZCBtVmVydGljYWxBbGlnbjsKfTsKCnN0cnVjdCBu c1N0eWxlVGV4dCA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVGV4dCh2b2lkKTsK ICBuc1N0eWxlVGV4dChjb25zdCBuc1N0eWxlVGV4dCYgYU90aGVyKTsKICB+bnNTdHlsZVRleHQo dm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgp IHtyZXR1cm4gZVN0eWxlU3RydWN0X1RleHQ7fQoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90 IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHRocm93KCkgewogICAgdm9pZCogcmVzdWx0 ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICBy ZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0 KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRleHQoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChz aXplb2YobnNTdHlsZVRleHQpLCB0aGlzKTsKICB9OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZl cmVuY2UoY29uc3QgbnNTdHlsZVRleHQmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbVRleHRB bGlnbjsKICBQUlVpbnQ4IG1UZXh0VHJhbnNmb3JtOwogIFBSVWludDggbVdoaXRlU3BhY2U7Cgog IG5zU3R5bGVDb29yZCBtTGV0dGVyU3BhY2luZzsKICBuc1N0eWxlQ29vcmQgbUxpbmVIZWlnaHQ7 CiAgbnNTdHlsZUNvb3JkIG1UZXh0SW5kZW50OwogIG5zU3R5bGVDb29yZCBtV29yZFNwYWNpbmc7 CgogIFBSQm9vbCBXaGl0ZVNwYWNlSXNTaWduaWZpY2FudCgpIGNvbnN0IHsKICAgIHJldHVybiBt V2hpdGVTcGFjZSA9PSAxIHx8CiAgICAgICAgICAgbVdoaXRlU3BhY2UgPT0gMzsKICB9Cn07Cgpz dHJ1Y3QgbnNTdHlsZVZpc2liaWxpdHkgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZVZpc2liaWxpdHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZVZpc2li aWxpdHkoY29uc3QgbnNTdHlsZVZpc2liaWxpdHkmIGFWaXNpYmlsaXR5KTsKICB+bnNTdHlsZVZp c2liaWxpdHkoKSB7fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0 cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1Y3RfVmlzaWJpbGl0eTt9CgogIHZvaWQqIG9wZXJh dG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAg ICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAm cmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29u dGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVmlzaWJpbGl0eSgpOwogICAgYUNv bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVmlzaWJpbGl0eSksIHRoaXMpOwogIH07 CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVmlzaWJpbGl0eSYg YU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtRGlyZWN0aW9uOwogIFBSVWludDggbVZpc2libGU7 CiAgbnNDT01QdHI8bnNJTGFuZ3VhZ2VBdG9tPiBtTGFuZ3VhZ2U7CiAgZmxvYXQgbU9wYWNpdHk7 CgogIFBSQm9vbCBJc1Zpc2libGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG1W aXNpYmxlID09IDEpOwogICAgICAgIH0KCiAgICAgICAgUFJCb29sIElzVmlzaWJsZU9yQ29sbGFw c2VkKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuICgobVZpc2libGUgPT0gMSkgfHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1WaXNpYmxl ID09IDIpKTsKICAgICAgICB9Cn07CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXkgOiBwdWJsaWMgbnNT dHlsZVN0cnVjdCB7CiAgbnNTdHlsZURpc3BsYXkoKTsKICBuc1N0eWxlRGlzcGxheShjb25zdCBu c1N0eWxlRGlzcGxheSYgYU90aGVyKTsKICB+bnNTdHlsZURpc3BsYXkoKSB7fTsKCiAgc3RhdGlj IGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVT dHJ1Y3RfRGlzcGxheTt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXND b250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7 CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt Pn5uc1N0eWxlRGlzcGxheSgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0 eWxlRGlzcGxheSksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShj b25zdCBuc1N0eWxlRGlzcGxheSYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHJpbmcgbUJpbmRpbmc7 CgoKCgoKCiAgbnNSZWN0IG1DbGlwOwoKICBQUlVpbnQ4IG1EaXNwbGF5OwogIFBSVWludDggbU9y aWdpbmFsRGlzcGxheTsKICBQUlVpbnQ4IG1BcHBlYXJhbmNlOwogIFBSVWludDggbVBvc2l0aW9u OwogIFBSVWludDggbUZsb2F0czsKICBQUlVpbnQ4IG1CcmVha1R5cGU7CiAgUFJQYWNrZWRCb29s IG1CcmVha0JlZm9yZTsKICBQUlBhY2tlZEJvb2wgbUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtT3Zl cmZsb3c7CgogIFBSVWludDggbUNsaXBGbGFnczsKCiAgUFJCb29sIElzQmxvY2tMZXZlbCgpIGNv bnN0IHtyZXR1cm4gKDEgPT0gbURpc3BsYXkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDQgPT0gbURpc3BsYXkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDggPT0gbURpc3BsYXkpO30KCiAgUFJCb29sIElzRmxvYXRpbmcoKSBjb25z dCB7CiAgICByZXR1cm4gMCAhPSBtRmxvYXRzOwogIH0KCiAgUFJCb29sIElzQWJzb2x1dGVseVBv c2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuICgyID09IG1Qb3NpdGlvbikgfHwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMgPT0gbVBvc2l0aW9uKTt9Cgog IFBSQm9vbCBJc1Bvc2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuIElzQWJzb2x1dGVseVBvc2l0aW9u ZWQoKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxID09IG1Qb3Np dGlvbik7fQp9OwoKc3RydWN0IG5zU3R5bGVUYWJsZTogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog IG5zU3R5bGVUYWJsZSh2b2lkKTsKICBuc1N0eWxlVGFibGUoY29uc3QgbnNTdHlsZVRhYmxlJiBh T3RoZXIpOwogIH5uc1N0eWxlVGFibGUodm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3Ry dWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1cm4gZVN0eWxlU3RydWN0X1RhYmxlO30KCiAg dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0 aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9t U2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95 KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVUYWJsZSgpOwog ICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVGFibGUpLCB0aGlzKTsKICB9 OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRhYmxlJiBhT3Ro ZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1MYXlvdXRTdHJhdGVneTsKICBQUlVpbnQ4IG1GcmFtZTsK ICBQUlVpbnQ4IG1SdWxlczsKICBQUkludDMyIG1Db2xzOwogIFBSSW50MzIgbVNwYW47Cn07Cgpz dHJ1Y3QgbnNTdHlsZVRhYmxlQm9yZGVyOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZVRhYmxlQm9yZGVyKG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgbnNTdHlsZVRhYmxlQm9y ZGVyKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYgYU90aGVyKTsKICB+bnNTdHlsZVRhYmxlQm9y ZGVyKHZvaWQpOwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0 SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9UYWJsZUJvcmRlcjt9CgogIHZvaWQqIG9wZXJhdG9y IG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2 b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVz dWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4 dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGFibGVCb3JkZXIoKTsKICAgIGFDb250 ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVRhYmxlQm9yZGVyKSwgdGhpcyk7CiAgfTsK CiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYg YU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkIG1Cb3JkZXJTcGFjaW5nWDsKICBuc1N0eWxl Q29vcmQgbUJvcmRlclNwYWNpbmdZOwogIFBSVWludDggbUJvcmRlckNvbGxhcHNlOwogIFBSVWlu dDggbUNhcHRpb25TaWRlOwogIFBSVWludDggbUVtcHR5Q2VsbHM7Cn07CgplbnVtIG5zU3R5bGVD b250ZW50VHlwZSB7CiAgZVN0eWxlQ29udGVudFR5cGVfU3RyaW5nID0gMSwKICBlU3R5bGVDb250 ZW50VHlwZV9VUkwgPSAxMCwKICBlU3R5bGVDb250ZW50VHlwZV9BdHRyID0gMjAsCiAgZVN0eWxl Q29udGVudFR5cGVfQ291bnRlciA9IDMwLAogIGVTdHlsZUNvbnRlbnRUeXBlX0NvdW50ZXJzID0g MzEsCiAgZVN0eWxlQ29udGVudFR5cGVfT3BlblF1b3RlID0gNDAsCiAgZVN0eWxlQ29udGVudFR5 cGVfQ2xvc2VRdW90ZSA9IDQxLAogIGVTdHlsZUNvbnRlbnRUeXBlX05vT3BlblF1b3RlID0gNDIs CiAgZVN0eWxlQ29udGVudFR5cGVfTm9DbG9zZVF1b3RlID0gNDMKfTsKCnN0cnVjdCBuc1N0eWxl Q29udGVudERhdGEgewogIG5zU3R5bGVDb250ZW50VHlwZSBtVHlwZTsKICBuc1N0cmluZyBtQ29u dGVudDsKfTsKCnN0cnVjdCBuc1N0eWxlQ291bnRlckRhdGEgewogIG5zU3RyaW5nIG1Db3VudGVy OwogIFBSSW50MzIgbVZhbHVlOwp9OwoKCgoKc3RydWN0IG5zU3R5bGVRdW90ZXMgOiBwdWJsaWMg bnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVF1b3RlcygpOwogIG5zU3R5bGVRdW90ZXMoY29uc3Qg bnNTdHlsZVF1b3RlcyYgYVF1b3Rlcyk7CiAgfm5zU3R5bGVRdW90ZXMoKTsKCiAgc3RhdGljIGNv bnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1 Y3RfUXVvdGVzO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRl eHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4 dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9 CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5z U3R5bGVRdW90ZXMoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVF1 b3RlcyksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShjb25zdCBu c1N0eWxlUXVvdGVzJiBhT3RoZXIpIGNvbnN0OwoKCiAgUFJVaW50MzIgUXVvdGVzQ291bnQodm9p ZCkgY29uc3QgeyByZXR1cm4gbVF1b3Rlc0NvdW50OyB9CiAgbnNyZXN1bHQgR2V0UXVvdGVzQXQo UFJVaW50MzIgYUluZGV4LCBuc1N0cmluZyYgYU9wZW4sIG5zU3RyaW5nJiBhQ2xvc2UpIGNvbnN0 IHsKICAgIGlmIChhSW5kZXggPCBtUXVvdGVzQ291bnQpIHsKICAgICAgYUluZGV4ICo9IDI7CiAg ICAgIGFPcGVuID0gbVF1b3Rlc1thSW5kZXhdOwogICAgICBhQ2xvc2UgPSBtUXVvdGVzWysrYUlu ZGV4XTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3 MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVRdW90ZXMoUFJVaW50MzIgYUNvdW50KSB7 CiAgICBpZiAoYUNvdW50ICE9IG1RdW90ZXNDb3VudCkgewogICAgICBpZiAobVF1b3RlcykgeyBk ZWxldGVbXSBtUXVvdGVzOyBtUXVvdGVzID0gMDsgfTsKICAgICAgaWYgKGFDb3VudCkgewogICAg ICAgIG1RdW90ZXMgPSBuZXcgbnNTdHJpbmdbYUNvdW50ICogMl07CiAgICAgICAgaWYgKCEgbVF1 b3RlcykgewogICAgICAgICAgbVF1b3Rlc0NvdW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1RdW90ZXNDb3Vu dCA9IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0UXVvdGVz QXQoUFJVaW50MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYU9wZW4sIGNvbnN0IG5zU3RyaW5n JiBhQ2xvc2UpIHsKICAgIGlmIChhSW5kZXggPCBtUXVvdGVzQ291bnQpIHsKICAgICAgYUluZGV4 ICo9IDI7CiAgICAgIG1RdW90ZXNbYUluZGV4XSA9IGFPcGVuOwogICAgICBtUXVvdGVzWysrYUlu ZGV4XSA9IGFDbG9zZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3Vs dCkgMHg4MDA3MDA1N0wpOwogIH0KCnByb3RlY3RlZDoKICBQUlVpbnQzMiBtUXVvdGVzQ291bnQ7 CiAgbnNTdHJpbmcqIG1RdW90ZXM7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvbnRlbnQ6IHB1YmxpYyBu c1N0eWxlU3RydWN0IHsKICBuc1N0eWxlQ29udGVudCh2b2lkKTsKICBuc1N0eWxlQ29udGVudChj b25zdCBuc1N0eWxlQ29udGVudCYgYUNvbnRlbnQpOwogIH5uc1N0eWxlQ29udGVudCh2b2lkKTsK CiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVy biBlU3R5bGVTdHJ1Y3RfQ29udGVudDt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3os IG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAw OwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVy biByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsK ICAgIHRoaXMtPn5uc1N0eWxlQ29udGVudCgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNp emVvZihuc1N0eWxlQ29udGVudCksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlm ZmVyZW5jZShjb25zdCBuc1N0eWxlQ29udGVudCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50MzIg Q29udGVudENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db250ZW50Q291bnQ7IH0KICBuc3Jl c3VsdCBHZXRDb250ZW50QXQoUFJVaW50MzIgYUluZGV4LCBuc1N0eWxlQ29udGVudFR5cGUmIGFU eXBlLCBuc1N0cmluZyYgYUNvbnRlbnQpIGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtQ29udGVu dENvdW50KSB7CiAgICAgIGFUeXBlID0gbUNvbnRlbnRzW2FJbmRleF0ubVR5cGU7CiAgICAgIGFD b250ZW50ID0gbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQ7CiAgICAgIHJldHVybiAwOwogICAg fQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFs bG9jYXRlQ29udGVudHMoUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoYUNvdW50ICE9IG1Db250 ZW50Q291bnQpIHsKICAgICAgaWYgKG1Db250ZW50cykgeyBkZWxldGVbXSBtQ29udGVudHM7IG1D b250ZW50cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAgICAgICBtQ29udGVudHMgPSBu ZXcgbnNTdHlsZUNvbnRlbnREYXRhW2FDb3VudF07CiAgICAgICAgaWYgKCEgbUNvbnRlbnRzKSB7 CiAgICAgICAgICBtQ29udGVudENvdW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1Db250ZW50Q291bnQgPSBh Q291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvbnRlbnRBdChQ UlVpbnQzMiBhSW5kZXgsIG5zU3R5bGVDb250ZW50VHlwZSBhVHlwZSwgY29uc3QgbnNTdHJpbmcm IGFDb250ZW50KSB7CiAgICBpZiAoYUluZGV4IDwgbUNvbnRlbnRDb3VudCkgewogICAgICBtQ29u dGVudHNbYUluZGV4XS5tVHlwZSA9IGFUeXBlOwogICAgICBpZiAoYVR5cGUgPCBlU3R5bGVDb250 ZW50VHlwZV9PcGVuUXVvdGUpIHsKICAgICAgICBtQ29udGVudHNbYUluZGV4XS5tQ29udGVudCA9 IGFDb250ZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIG1Db250ZW50c1thSW5kZXhd Lm1Db250ZW50LlRydW5jYXRlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgUFJVaW50MzIgQ291bnRlcklu Y3JlbWVudENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbmNyZW1lbnRDb3VudDsgfQogIG5z cmVzdWx0IEdldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBh Q291bnRlciwgUFJJbnQzMiYgYUluY3JlbWVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1J bmNyZW1lbnRDb3VudCkgewogICAgICBhQ291bnRlciA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubUNv dW50ZXI7CiAgICAgIGFJbmNyZW1lbnQgPSBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZTsKICAg ICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwog IH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb3VudGVySW5jcmVtZW50cyhQUlVpbnQzMiBhQ291bnQp IHsKICAgIGlmIChhQ291bnQgIT0gbUluY3JlbWVudENvdW50KSB7CiAgICAgIGlmIChtSW5jcmVt ZW50cykgeyBkZWxldGVbXSBtSW5jcmVtZW50czsgbUluY3JlbWVudHMgPSAwOyB9OwogICAgICBp ZiAoYUNvdW50KSB7CiAgICAgICAgbUluY3JlbWVudHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRh W2FDb3VudF07CiAgICAgICAgaWYgKCEgbUluY3JlbWVudHMpIHsKICAgICAgICAgIG1JbmNyZW1l bnRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwog ICAgICAgIH0KICAgICAgfQogICAgICBtSW5jcmVtZW50Q291bnQgPSBhQ291bnQ7CiAgICB9CiAg ICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQz MiBhSW5kZXgsIGNvbnN0IG5zU3RyaW5nJiBhQ291bnRlciwgUFJJbnQzMiBhSW5jcmVtZW50KSB7 CiAgICBpZiAoYUluZGV4IDwgbUluY3JlbWVudENvdW50KSB7CiAgICAgIG1JbmNyZW1lbnRzW2FJ bmRleF0ubUNvdW50ZXIgPSBhQ291bnRlcjsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tVmFs dWUgPSBhSW5jcmVtZW50OwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVz dWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBQUlVpbnQzMiBDb3VudGVyUmVzZXRDb3VudCh2b2lk KSBjb25zdCB7IHJldHVybiBtUmVzZXRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvdW50ZXJSZXNl dEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyJiBhVmFsdWUp IGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtUmVzZXRDb3VudCkgewogICAgICBhQ291bnRlciA9 IG1SZXNldHNbYUluZGV4XS5tQ291bnRlcjsKICAgICAgYVZhbHVlID0gbVJlc2V0c1thSW5kZXhd Lm1WYWx1ZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4 MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb3VudGVyUmVzZXRzKFBSVWludDMy IGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtUmVzZXRDb3VudCkgewogICAgICBpZiAobVJl c2V0cykgeyBkZWxldGVbXSBtUmVzZXRzOyBtUmVzZXRzID0gMDsgfTsKICAgICAgaWYgKGFDb3Vu dCkgewogICAgICAgIG1SZXNldHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRhW2FDb3VudF07CiAg ICAgICAgaWYgKCEgbVJlc2V0cykgewogICAgICAgICAgbVJlc2V0Q291bnQgPSAwOwogICAgICAg ICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsKICAgICAgICB9CiAgICAgIH0KICAg ICAgbVJlc2V0Q291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVz dWx0IFNldENvdW50ZXJSZXNldEF0KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNTdHJpbmcmIGFD b3VudGVyLCBQUkludDMyIGFWYWx1ZSkgewogICAgaWYgKGFJbmRleCA8IG1SZXNldENvdW50KSB7 CiAgICAgIG1SZXNldHNbYUluZGV4XS5tQ291bnRlciA9IGFDb3VudGVyOwogICAgICBtUmVzZXRz W2FJbmRleF0ubVZhbHVlID0gYVZhbHVlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc1N0eWxlQ29vcmQgbU1hcmtlck9m ZnNldDsKCnByb3RlY3RlZDoKICBQUlVpbnQzMiBtQ29udGVudENvdW50OwogIG5zU3R5bGVDb250 ZW50RGF0YSogbUNvbnRlbnRzOwoKICBQUlVpbnQzMiBtSW5jcmVtZW50Q291bnQ7CiAgbnNTdHls ZUNvdW50ZXJEYXRhKiBtSW5jcmVtZW50czsKCiAgUFJVaW50MzIgbVJlc2V0Q291bnQ7CiAgbnNT dHlsZUNvdW50ZXJEYXRhKiBtUmVzZXRzOwp9OwoKc3RydWN0IG5zU3R5bGVVSVJlc2V0OiBwdWJs aWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVVJUmVzZXQodm9pZCk7CiAgbnNTdHlsZVVJUmVz ZXQoY29uc3QgbnNTdHlsZVVJUmVzZXQmIGFPdGhlcik7CiAgfm5zU3R5bGVVSVJlc2V0KHZvaWQp OwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0 dXJuIGVTdHlsZVN0cnVjdF9VSVJlc2V0O30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz eiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9 IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0 dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg ewogICAgdGhpcy0+fm5zU3R5bGVVSVJlc2V0KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwo c2l6ZW9mKG5zU3R5bGVVSVJlc2V0KSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNE aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVSVJlc2V0JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVuaWNo YXIgbUtleUVxdWl2YWxlbnQ7CiAgUFJVaW50OCBtVXNlclNlbGVjdDsKICBQUlVpbnQ4IG1SZXNp emVyOwogIFBSVWludDggbUZvcmNlQnJva2VuSW1hZ2VJY29uOwp9OwoKc3RydWN0IG5zU3R5bGVV c2VySW50ZXJmYWNlOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVVzZXJJbnRlcmZh Y2Uodm9pZCk7CiAgbnNTdHlsZVVzZXJJbnRlcmZhY2UoY29uc3QgbnNTdHlsZVVzZXJJbnRlcmZh Y2UmIGFPdGhlcik7CiAgfm5zU3R5bGVVc2VySW50ZXJmYWNlKHZvaWQpOwoKICBzdGF0aWMgY29u c3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVj dF9Vc2VySW50ZXJmYWNlO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJl c0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBh Q29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3Vs dDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhp cy0+fm5zU3R5bGVVc2VySW50ZXJmYWNlKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6 ZW9mKG5zU3R5bGVVc2VySW50ZXJmYWNlKSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENh bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVc2VySW50ZXJmYWNlJiBhT3RoZXIpIGNvbnN0OwoK ICBQUlVpbnQ4IG1Vc2VySW5wdXQ7CiAgUFJVaW50OCBtVXNlck1vZGlmeTsKICBQUlVpbnQ4IG1V c2VyRm9jdXM7CgogIFBSVWludDggbUN1cnNvcjsKICBuc1N0cmluZyBtQ3Vyc29ySW1hZ2U7Cn07 CgoKc3RydWN0IG5zU3R5bGVYVUwgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVhV TCgpOwogIG5zU3R5bGVYVUwoY29uc3QgbnNTdHlsZVhVTCYgYVNvdXJjZSk7CiAgfm5zU3R5bGVY VUwoKTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkg e3JldHVybiBlU3R5bGVTdHJ1Y3RfWFVMO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz eiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9 IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0 dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg ewogICAgdGhpcy0+fm5zU3R5bGVYVUwoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXpl b2YobnNTdHlsZVhVTCksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5j ZShjb25zdCBuc1N0eWxlWFVMJiBhT3RoZXIpIGNvbnN0OwoKICBmbG9hdCBtQm94RmxleDsKICBQ UlVpbnQzMiBtQm94T3JkaW5hbDsKICBQUlVpbnQ4IG1Cb3hBbGlnbjsKICBQUlVpbnQ4IG1Cb3hE aXJlY3Rpb247CiAgUFJVaW50OCBtQm94T3JpZW50OwogIFBSVWludDggbUJveFBhY2s7Cn07CiMg MTE3MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdC5oIgpzdHJ1 Y3QgbnNCb3JkZXJFZGdlczsKCgpzdHJ1Y3QgbnNCb3JkZXJFZGdlCnsKCiAgbnNjb29yZCBtV2lk dGg7CgogIG5zY29vcmQgbUxlbmd0aDsKICBuc2NvbG9yIG1Db2xvcjsKCiAgbnNCb3JkZXJFZGdl cyAqIG1JbnNpZGVOZWlnaGJvcjsKICBQUlVpbnQ4IG1TdHlsZTsKCiAgUFJVaW50OCBtU2lkZTsK CiAgbnNCb3JkZXJFZGdlKCk7Cn07CgppbmxpbmUgbnNCb3JkZXJFZGdlOjpuc0JvcmRlckVkZ2Uo KQp7CiAgbVdpZHRoPTA7CiAgbUxlbmd0aD0wOwogIG1TdHlsZT0wOwogIG1Db2xvcj0wOwogIG1T aWRlPTM7CiAgbUluc2lkZU5laWdoYm9yID0gMDsKfTsKCgoKCnN0cnVjdCBuc0JvcmRlckVkZ2Vz CnsKICBuc1ZvaWRBcnJheSBtRWRnZXNbNF07CiAgbnNNYXJnaW4gbU1heEJvcmRlcldpZHRoOwog IFBSUGFja2VkQm9vbCBtT3V0c2lkZUVkZ2U7CgogIG5zQm9yZGVyRWRnZXMoKTsKfTsKCmlubGlu ZSBuc0JvcmRlckVkZ2VzOjpuc0JvcmRlckVkZ2VzKCkKewogIG1NYXhCb3JkZXJXaWR0aC5TaXpl VG8oMCwwLDAsMCk7CiAgbU91dHNpZGVFZGdlID0gMTsKfTsKIyA1MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0lTdHlsZUNvbnRleHQuaCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zSVN0eWxlQ29udGV4dC5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKY2xhc3MgbnNJ RnJhbWU7CmNsYXNzIG5zSVN0eWxlU2V0OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJ U3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc1J1bGVOb2RlOwoK CgoKCgoKY2xhc3MgbnNJU3R5bGVDb250ZXh0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGlj OgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7IDB4MjZhNGQ5NzAsIDB4YTM0MiwgMHgxMWQxLCB7MHg4OSwgMHg3NCwgMHgwMCwgMHg2MCwg MHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgUFJCb29s IEVxdWFscyhjb25zdCBuc0lTdHlsZUNvbnRleHQqIGFPdGhlcikgY29uc3QgPSAwOwoKICB2aXJ0 dWFsIGFscmVhZHlfQWRkUmVmZWQ8bnNJU3R5bGVDb250ZXh0PiBHZXRQYXJlbnQodm9pZCkgY29u c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rmlyc3RDaGlsZChuc0lTdHlsZUNvbnRleHQq KiBhQ29udGV4dCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQc2V1ZG9UeXBlKG5zSUF0b20q JiBhUHNldWRvVGFnKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZENoaWxkV2l0 aFJ1bGVzKGNvbnN0IG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNSdWxlTm9kZSogYVJ1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN0eWxlQ29udGV4dComIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBQUkJvb2wgSGFz VGV4dERlY29yYXRpb25zKCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUGFkZGlu Z0Zvcihuc1N0eWxlQm9yZGVyUGFkZGluZyYgYUJvcmRlclBhZGRpbmcpPTA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgQ2FsY1N0eWxlRGlmZmVyZW5jZShuc0lTdHlsZUNvbnRleHQqIGFPdGhl ciwgbnNDaGFuZ2VIaW50JiBhSGludCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVO b2RlKG5zUnVsZU5vZGUqKiBhUmVzdWx0KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQWRkU3R5bGVC aXQoY29uc3QgUFJVaW50MzImIGFCaXQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZUJp dHMoUFJVaW50MzIqIGFCaXRzKT0wOwojIDExMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91 dC9uc0lTdHlsZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlKG5zU3R5bGVT dHJ1Y3RJRCBhU0lELCBuc1N0eWxlU3RydWN0KiBhU3RydWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0 KiogYVN0cnVjdCkgPSAwOwoKICB2aXJ0dWFsIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqIEdldFN0eWxl RGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zU3R5bGVTdHJ1 Y3QqIEdldFVuaXF1ZVN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBjb25z dCBuc1N0eWxlU3RydWN0SUQmIGFTSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJD YWNoZWREYXRhRm9yUnVsZShuc0lTdHlsZVJ1bGUqIGFSdWxlKSA9IDA7CgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDbGVhclN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lT dHlsZVJ1bGUqIGFSdWxlKSA9IDA7Cn07CgoKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxl Q29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UeXBlLAogICAgICAgICAgICAgICAgICAgICBuc1J1bGVO b2RlKiBhUnVsZU5vZGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQpOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQKR2V0U3R5bGVEYXRh KG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCwgY29uc3QgVCoqIGFTdHlsZVN0cnVjdCkK ewogICAgKmFTdHlsZVN0cnVjdCA9IHN0YXRpY19jYXN0PCBjb25zdCBUKiA+KGFTdHlsZUNvbnRl eHQtPkdldFN0eWxlRGF0YSgoVDo6R2V0U3R5bGVTdHJ1Y3RJRCgpKSkpOwoKfQojIDUxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiIDIKIyA3MCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgpzdHJ1Y3QgbnNIVE1MUmVmbG93U3RhdGU7CmNs YXNzIG5zSFRNTFJlZmxvd0NvbW1hbmQ7CnN0cnVjdCBuc0hUTUxSZWZsb3dNZXRyaWNzOwoKY2xh c3MgbnNJQXRvbTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVByZXNTaGVsbDsKY2xh c3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJ VmlldzsKY2xhc3MgbnNJV2lkZ2V0OwpjbGFzcyBuc0lET01SYW5nZTsKY2xhc3MgbnNJU2VsZWN0 aW9uQ29udHJvbGxlcjsKCmNsYXNzIG5zSUFjY2Vzc2libGU7CgoKc3RydWN0IG5zUGVla09mZnNl dFN0cnVjdDsKc3RydWN0IG5zUG9pbnQ7CnN0cnVjdCBuc1JlY3Q7CnN0cnVjdCBuc1NpemU7CnN0 cnVjdCBuc01hcmdpbjsKCgp0eXBlZGVmIHZvaWQKKCpOU0ZyYW1lUHJvcGVydHlEdG9yRnVuYyko bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVByb3BlcnR5VmFs dWUpOwojIDExOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgp0eXBl ZGVmIFBSVWludDMyIG5zU3BsaXR0YWJsZVR5cGU7CiMgMTM2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbGF5b3V0L25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNGcmFtZVN0YXRlOwojIDIz MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgplbnVtIG5zRnJhbWVQ YWludExheWVyIHsKICBlRnJhbWVQYWludExheWVyX1VuZGVybGF5ID0gMCwKICBlRnJhbWVQYWlu dExheWVyX0NvbnRlbnQgPSAxLAogIGVGcmFtZVBhaW50TGF5ZXJfT3ZlcmxheSA9IDIKfTsKCmVu dW0gbnNTZWxlY3Rpb25BbW91bnQgewogIGVTZWxlY3RDaGFyYWN0ZXIgPSAwLAogIGVTZWxlY3RX b3JkID0gMSwKICBlU2VsZWN0TGluZSA9IDIsCiAgZVNlbGVjdEJlZ2luTGluZSA9IDMsCiAgZVNl bGVjdEVuZExpbmUgPSA0LAogIGVTZWxlY3ROb0Ftb3VudCA9IDUsCiAgZVNlbGVjdERpciA9IDYs CiAgZVNlbGVjdFBhcmFncmFwaCA9IDcKfTsKCmVudW0gbnNEaXJlY3Rpb24gewogIGVEaXJOZXh0 ID0gMCwKICBlRGlyUHJldmlvdXM9IDEKfTsKCmVudW0gbnNTcHJlYWQgewogIGVTcHJlYWROb25l ID0gMCwKICBlU3ByZWFkQWNyb3NzID0gMSwKICBlU3ByZWFkRG93biA9IDIKfTsKIyAyOTIgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBu c1JlZmxvd1N0YXR1czsKIyAzNzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJh bWUuaCIKdHlwZWRlZiBQUkJvb2wgbnNEaWRSZWZsb3dTdGF0dXM7CiMgMzk2ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCmNsYXNzIG5zSUZyYW1lIDogcHVibGljIG5z SVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwNTAsIDB4MTViMywgMHgxMWQyLHsweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7fQoj IDQxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg ICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog YVBhcmVudCwKICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAg ICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZJbkZsb3cpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgoK CgogIHZpcnR1YWwgdm9pZCBSZW1vdmVkQXNQcmltYXJ5RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCkge30KIyA0NTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJh bWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExpc3QobnNJUHJlc0NvbnRl eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0 b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhQ2hpbGRMaXN0KSA9IDA7CiMgNDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25z SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQ cmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KSA9IDA7CiMgNDkx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbnNlcnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUZyYW1lKiBhUHJldkZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhRnJhbWVMaXN0KSA9IDA7CiMgNTEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25z SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJl c1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSkgPSAwOwojIDUzNSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg UmVwbGFjZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG cmFtZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3 RnJhbWUpID0gMDsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0Q29udGVudChuc0lDb250ZW50KiogYUNv bnRlbnQpIGNvbnN0IHsgKmFDb250ZW50ID0gbUNvbnRlbnQ7IG5zX2lmX2FkZHJlZigqYUNvbnRl bnQpOyByZXR1cm4gMDsgfQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXRzKFBSSW50 MzIgJnN0YXJ0LCBQUkludDMyICZlbmQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0 U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0IHsKICAg ICphU3R5bGVDb250ZXh0ID0gbVN0eWxlQ29udGV4dDsgbnNfaWZfYWRkcmVmKCphU3R5bGVDb250 ZXh0KTsgcmV0dXJuIDA7CiAgfQogIG5zcmVzdWx0IFNldFN0eWxlQ29udGV4dChuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LCBuc0lTdHlsZUNvbnRleHQqIGFDb250ZXh0KSB7CiAgICBpZiAo YUNvbnRleHQgIT0gbVN0eWxlQ29udGV4dCkgewogICAgICBkbyB7IGlmIChtU3R5bGVDb250ZXh0 KSB7IChtU3R5bGVDb250ZXh0KS0+UmVsZWFzZSgpOyAobVN0eWxlQ29udGV4dCkgPSAwOyB9IH0g d2hpbGUgKDApOwogICAgICBpZiAoMCAhPSBhQ29udGV4dCkgewogICAgICAgIG1TdHlsZUNvbnRl eHQgPSBhQ29udGV4dDsKICAgICAgICAoYUNvbnRleHQpLT5BZGRSZWYoKTsKICAgICAgICBEaWRT ZXRTdHlsZUNvbnRleHQoYVByZXNDb250ZXh0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7 CiAgfQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRTZXRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRl eHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlRGF0 YUV4dGVybmFsKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgPSAwOwoj IDU5MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIG5zcmVzdWx0 IEdldFN0eWxlRGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgewogICAgcmV0dXJu IEdldFN0eWxlRGF0YUV4dGVybmFsKGFTSUQsIGFTdHlsZVN0cnVjdCk7CiAgfQoKCgogIG5zcmVz dWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0Kiog YVN0cnVjdCkgY29uc3QgewogICAgOwogICAgbVN0eWxlQ29udGV4dC0+R2V0U3R5bGUoYVNJRCwg YVN0cnVjdCk7CiAgICByZXR1cm4gMDsKICB9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNCb3Jk ZXJQYWRkaW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwojIDYxOSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQp IGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQo UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQpID0gMDsKCgoKCiAgbnNyZXN1bHQgR2V0UGFy ZW50KG5zSUZyYW1lKiogYVBhcmVudCkgY29uc3QgeyAqYVBhcmVudCA9IG1QYXJlbnQ7IHJldHVy biAwOyB9CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQoY29uc3QgbnNJRnJhbWUqIGFQYXJl bnQpIHsgbVBhcmVudCA9IChuc0lGcmFtZSopYVBhcmVudDsgcmV0dXJuIDA7IH0KIyA2MzggIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICBuc3Jlc3VsdCBHZXRSZWN0 KG5zUmVjdCYgYVJlY3QpIGNvbnN0IHsKICAgIGFSZWN0ID0gbVJlY3Q7CiAgICByZXR1cm4gMDsK ICB9CgogIG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIGFQ b2ludC54ID0gbVJlY3QueDsKICAgIGFQb2ludC55ID0gbVJlY3QueTsKICAgIHJldHVybiAwOwog IH0KCiAgbnNyZXN1bHQgR2V0U2l6ZShuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICBhU2l6ZS53 aWR0aCA9IG1SZWN0LndpZHRoOwogICAgYVNpemUuaGVpZ2h0ID0gbVJlY3QuaGVpZ2h0OwogICAg cmV0dXJuIDA7CiAgfQoKICBuc3Jlc3VsdCBTZXRSZWN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsKICAgIE1vdmVUbyhh UHJlc0NvbnRleHQsIGFSZWN0LngsIGFSZWN0LnkpOwogICAgU2l6ZVRvKGFQcmVzQ29udGV4dCwg YVJlY3Qud2lkdGgsIGFSZWN0LmhlaWdodCk7CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0 IE1vdmVUbyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBu c2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFZKSB7CiAgICBtUmVjdC54ID0g YVg7CiAgICBtUmVjdC55ID0gYVk7CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNpemVU byhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc2Nvb3Jk IGFXaWR0aCwKICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGVpZ2h0KSB7CiAgICBtUmVjdC53 aWR0aCA9IGFXaWR0aDsKICAgIG1SZWN0LmhlaWdodCA9IGFIZWlnaHQ7CiAgICByZXR1cm4gMDsK ICB9CiMgNjg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUkludDMyIGFJbmRleCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiogYUxpc3RO YW1lKSBjb25zdCA9IDA7CiMgNjk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZy YW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGaXJzdENoaWxkKSBjb25zdCA9IDA7 CgoKCgogIG5zcmVzdWx0IEdldE5leHRTaWJsaW5nKG5zSUZyYW1lKiogYU5leHRTaWJsaW5nKSBj b25zdCB7CiAgICAqYU5leHRTaWJsaW5nID0gbU5leHRTaWJsaW5nOwogICAgcmV0dXJuIDA7CiAg fQoKICBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5nKSB7CiAg ICBtTmV4dFNpYmxpbmcgPSBhTmV4dFNpYmxpbmc7CiAgICByZXR1cm4gMDsKICB9CgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAg ICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAg ICBQUlVpbnQzMiBhRmxhZ3MgPSAwKSA9IDA7CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBDYW5QYWlu dEJhY2tncm91bmQoKSB7IHJldHVybiAxOyB9CiMgNzQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVFdmVudChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZl bnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZl bnRTdGF0dXMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50Rm9yRXZlbnQobnNJ UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiogYUNvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50QW5k T2Zmc2V0c0Zyb21Qb2ludChuc0lQcmVzQ29udGV4dCogYUNYLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCAqKiBhTmV3Q29udGVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFD b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJJbnQzMiYgYUNvbnRlbnRPZmZzZXRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQUkJvb2wmIGFCZWdpbkZyYW1lQ29udGVudCkgPSAwOwoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAg ICAgICBQUkludDMyJiBhQ3Vyc29yKSA9IDA7CiMgNzc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZvclBvaW50KG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSUZyYW1lKiogYUZyYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UG9pbnRGcm9tT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBpblByZXNDb250ZXh0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBpblJlbmRDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGluT2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50KiBvdXRQb2ludCkgPSAwOwojIDgw MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Q2hpbGRGcmFtZUNvbnRhaW5pbmdPZmZzZXQoUFJJbnQzMiBpbkNvbnRlbnRPZmZz ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBpbkhpbnQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIG91dEZyYW1lQ29udGVudE9mZnNl dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqICpvdXRDaGlsZEZy YW1lKSA9IDA7CgoKCgoKICBuc3Jlc3VsdCBHZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSogYVJl c3VsdCkgewogICAgKmFSZXN1bHQgPSBtU3RhdGU7CiAgICByZXR1cm4gMDsKICB9CgoKCgogIG5z cmVzdWx0IFNldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRlIGFOZXdTdGF0ZSkgewogICAgbVN0YXRl ID0gYU5ld1N0YXRlOwogICAgcmV0dXJuIDA7CiAgfQojIDgzMyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudENoYW5nZWQo bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3Vw cG9ydHMqIGFTdWJDb250ZW50KSA9IDA7CiMgODQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFNb2RUeXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwojIDg2 MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgQ29udGVudFN0YXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzU3BsaXR0YWJsZShuc1NwbGl0dGFibGVUeXBlJiBhSXNTcGxpdHRh YmxlKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJldkluRmxvdyhuc0lG cmFtZSoqIGFQcmV2SW5GbG93KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmV2 SW5GbG93KG5zSUZyYW1lKikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dEluRmxvdyhu c0lGcmFtZSoqIGFOZXh0SW5GbG93KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRO ZXh0SW5GbG93KG5zSUZyYW1lKikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zSUZyYW1lKiBHZXRGaXJz dEluRmxvdygpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9jYXN0PCBuc0lGcmFtZSogPih0aGlz KTsKICB9CgoKCgogIHZpcnR1YWwgbnNJRnJhbWUqIEdldExhc3RJbkZsb3coKSBjb25zdCB7CiAg ICByZXR1cm4gY29uc3RfY2FzdDwgbnNJRnJhbWUqID4odGhpcyk7CiAgfQojIDkwMyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV2ls bFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgOTQ1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZs b3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hU TUxSZWZsb3dNZXRyaWNzJiBhUmVmbG93TWV0cmljcywKICAgICAgICAgICAgICAgICAgICBjb25z dCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5z UmVmbG93U3RhdHVzJiBhU3RhdHVzKSA9IDA7CiMgOTY1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRSZWZsb3cobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1M UmVmbG93U3RhdGUqIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNEaWRS ZWZsb3dTdGF0dXMgYVN0YXR1cykgPSAwOwojIDk4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuQ29udGludWVUZXh0UnVuKFBS Qm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFFeHRyYVNwYWNlLCBuc2Nvb3JkJiBhVXNlZFNwYWNl KSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJhaWxpbmdXaGl0ZVNwYWNlKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNjb29yZCYgYURlbHRhV2lkdGgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZp ZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIG5z SVZpZXcqIGFWaWV3KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50V2l0aFZp ZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0T2Zmc2V0RnJvbVZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50JiBhT2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqKiBhVmlldykgY29uc3QgPSAwOwojIDEwMjUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE9yaWdpblRvVmlld09mZnNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50JiBhT2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0g MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2lkZ2V0KiogYVdpZGdldCkg Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVUeXBlKG5zSUF0b20q KiBhVHlwZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVyY2VudGFnZUJh c2UoUFJCb29sJiBhQmFzZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3Jv bGxlZChuc0lWaWV3ICphVmlldykgPSAwOwojIDEwNjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9s YXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGVkKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NUmFu Z2UqIGFSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNlbGVjdGVkLAog ICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3ByZWFkIGFTcHJlYWQpID0gMDsKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRTZWxlY3RlZChQUkJvb2wgKmFTZWxlY3RlZCkgY29uc3QgPSAwOwojIDEw ODIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBSVWludDgqIGFTZWxl Y3RTdHlsZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9u Q29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25Db250 cm9sbGVyICoqYVNlbENvbikgPSAwOwojIDExMDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlv dXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgYUdyYWJNb3VzZUV2ZW50cykgPSAwOwojIDExMDkg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IFBlZWtPZmZzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNQZWVrT2Zmc2V0 U3RydWN0ICphUG9zKSA9IDA7CiMgMTEyMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250 ZXh0KiBhQ29udGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBS Qm9vbCBhUmVjdXJzZSwgUFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk9MDsKCgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVBy ZXNTaGVsbCwgbnNJRnJhbWUqIGFDaGlsZCkgPSAwOwojIDExNDAgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2Vzc2libGUo bnNJQWNjZXNzaWJsZSoqIGFBY2Nlc3NpYmxlKSA9IDA7CiMgMTE2MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5 bGVDb250ZXh0RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJc0NoaWxkKSA9 IDA7CiMgMTE3MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRleHQgKiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdD b250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkJvb2wqIGFJc1Zpc2libGUpID0gMDsKIyAxMTg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0VtcHR5KG5zQ29tcGF0aWJpbGl0 eSBhQ29tcGF0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFJc1ByZSwKICAgICAg ICAgICAgICAgICAgICAgUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIFBSQm9vbCBJc0dl bmVyYXRlZENvbnRlbnRGcmFtZSgpIHsKICAgIHJldHVybiAobVN0YXRlICYgMHgwMDAwMDA0MCkg IT0gMDsKICB9CiMgMTIxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5o IgogIFBSQm9vbCBJc1BzZXVkb0ZyYW1lKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50KSB7CiAg ICByZXR1cm4gbUNvbnRlbnQgPT0gYVBhcmVudENvbnRlbnQ7CiAgfQoKCgogIHZpcnR1YWwgdm9p ZCogR2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUkJvb2wgYVJlbW92ZVByb3BlcnR5KSBjb25zdCA9IDA7CgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlWYWx1ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5TRnJhbWVQcm9wZXJ0eUR0b3JGdW5jIGFQcm9wRHRvckZ1bmMp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog YVByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYVByb3Bl cnR5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFTaXplICkgY29u c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlW YWx1ZSkgPSAwOwoKCnByb3RlY3RlZDoKCiAgbnNSZWN0IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1D b250ZW50OwogIG5zSVN0eWxlQ29udGV4dCogbVN0eWxlQ29udGV4dDsKICBuc0lGcmFtZSogbVBh cmVudDsKICBuc0lGcmFtZSogbU5leHRTaWJsaW5nOwogIG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpw cml2YXRlOgogIHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpID0gMDsKICB2aXJ0dWFsIG5z cmVmY250IFJlbGVhc2Uodm9pZCkgPSAwOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l IHZvaWQKR2V0U3R5bGVEYXRhKG5zSUZyYW1lKiBhRnJhbWUsIGNvbnN0IFQqKiBhU3R5bGVTdHJ1 Y3QpCnsKICAgIGFGcmFtZS0+R2V0U3R5bGVEYXRhKChUOjpHZXRTdHlsZVN0cnVjdElEKCkpLAog ICAgICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PCBjb25zdCBuc1N0eWxlU3RydWN0 KiogPihhU3R5bGVTdHJ1Y3QpKTsKfQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSU9iamVjdEZyYW1lLmgiIDIKCmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwoKCgoKCmNsYXNz IG5zSU9iamVjdEZyYW1lIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4NmQxMGIw N2QsIDB4ZTc1YiwgMHgxMWQ0LCB7IDB4OTgsIDB4ODUsIDB4MCwgMHhjMCwgMHg0ZiwgMHhhMCwg MHhjZiwgMHg0YiB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdp bkluc3RhbmNlKG5zSVBsdWdpbkluc3RhbmNlKiYgYVBsdWdpbkluc3RhbmNlKSA9IDA7Cn07CiMg MTIxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1 Z2luL25zSVNjcmlwdGFibGVQbHVnaW4uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv cGx1Z2luL25zSVNjcmlwdGFibGVQbHVnaW4uaCIKY2xhc3MgbnNJU2NyaXB0YWJsZVBsdWdpbiA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmMWExMmJiYSwgMHgxZGQxLCAweDEx YjIsIHsgMHhhOSwgMHg1ZiwgMHhjZCwgMHhjMSwgMHgxOCwgMHg2MCwgMHg1ZSwgMHg5MiB9fTsg cmV0dXJuIGlpZDt9CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRhYmxlUGVlcih2 b2lkICogKmFTY3JpcHRhYmxlUGVlcikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNjcmlwdGFibGVJbnRlcmZhY2UobnNJSUQgKiAqYVNjcmlwdGFibGVJbnRlcmZhY2UpID0gMDsK Cn07CiMgMTIyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvcGx1Z2luL25zSVBsdWdpbkhvc3QuaCIgMQojIDE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv cGx1Z2luL25zSVBsdWdpbkhvc3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu L25zSVBsdWdpbkluc3RhbmNlT3duZXIuaCIgMQojIDIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv cGx1Z2luL25zSVBsdWdpbkluc3RhbmNlT3duZXIuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvcGx1Z2luL25zcGx1Z2luLmgiIDEKIyAxMDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVn aW4vbnNwbHVnaW4uaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdp bi5oIiAxCiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCmNs YXNzIG5zSVBsdWdpbiA6IHB1YmxpYyBuc0lGYWN0b3J5IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRmNzczMDcw LCAweDAxOTksIDB4MTFkMiwgeyAweDgxLCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAw eDlkLCAweDdhIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVh dGVQbHVnaW5JbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCAmIGFJSUQs IGNvbnN0IGNoYXIgKmFQbHVnaW5NSU1FVHlwZSwgdm9pZCAqICphUmVzdWx0KSA9IDA7CiMgNzUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbml0aWFsaXplKHZvaWQpID0gMDsKIyA4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs dWdpbi9uc0lQbHVnaW4uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKHZvaWQpID0gMDsK IyAxMDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgY2hhciAqICphTUlNRURlc2NyaXB0 aW9uKSA9IDA7CiMgMTEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbi5o IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmFsdWUobnNQbHVnaW5WYXJpYWJsZSBhVmFyaWFibGUs IHZvaWQgKiBhVmFsdWUpID0gMDsKCn07CiMgMTA5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1 Z2luL25zcGx1Z2luLmgiIDIKIyAxMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNw bHVnaW4uaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFn ZXIuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFn ZXIuaCIKY2xhc3MgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXI7CiMgMzkgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5oIgpjbGFzcyBuc0lQbHVnaW5NYW5hZ2Vy IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRhNThhZDgwLCAweDRlYjYsIDB4 MTFkMiwgeyAweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhIH19 OyByZXR1cm4gaWlkO30KIyA1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVn aW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShuc1BsdWdpbk1hbmFnZXJW YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqIHZhbHVlKSA9IDA7CiMgNjYgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVs b2FkUGx1Z2lucyhQUkJvb2wgcmVsb2FkUGFnZXMpID0gMDsKIyA3NiAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVc2Vy QWdlbnQoY29uc3QgY2hhciAqICogcmVzdWx0aW5nQWdlbnRTdHJpbmcpID0gMDsKCiAgICB2aXJ0 dWFsIG5zcmVzdWx0CiAgICBHZXRVUkwobnNJU3VwcG9ydHMqIHBsdWdpbkluc3QsCiAgICAgICAg ICAgY29uc3QgY2hhciogdXJsLAogICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCA9IF9fbnVs bCwKICAgICAgICAgICBuc0lQbHVnaW5TdHJlYW1MaXN0ZW5lciogc3RyZWFtTGlzdGVuZXIgPSBf X251bGwsCiAgICAgICAgICAgY29uc3QgY2hhciogYWx0SG9zdCA9IF9fbnVsbCwKICAgICAgICAg ICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAgICAgICAgICBQUkJvb2wgZm9yY2VK U0VuYWJsZWQgPSAwKSA9IDA7CiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBQb3N0VVJMKG5zSVN1 cHBvcnRzKiBwbHVnaW5JbnN0LAogICAgICAgICAgICBjb25zdCBjaGFyKiB1cmwsCiAgICAgICAg ICAgIFBSVWludDMyIHBvc3REYXRhTGVuLAogICAgICAgICAgICBjb25zdCBjaGFyKiBwb3N0RGF0 YSwKICAgICAgICAgICAgUFJCb29sIGlzRmlsZSA9IDAsCiAgICAgICAgICAgIGNvbnN0IGNoYXIq IHRhcmdldCA9IF9fbnVsbCwKICAgICAgICAgICAgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIqIHN0 cmVhbUxpc3RlbmVyID0gX19udWxsLAogICAgICAgICAgICBjb25zdCBjaGFyKiBhbHRIb3N0ID0g X19udWxsLAogICAgICAgICAgICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAgICAg ICAgICAgUFJCb29sIGZvcmNlSlNFbmFibGVkID0gMCwKICAgICAgICAgICAgUFJVaW50MzIgcG9z dEhlYWRlcnNMZW5ndGggPSAwLAogICAgICAgICAgICBjb25zdCBjaGFyKiBwb3N0SGVhZGVycyA9 IF9fbnVsbCkgPSAwOwojIDE3MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVn aW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlclBsdWdpbihjb25zdCBuc0lJ RCYgYUNJRCwgY29uc3QgY2hhciAqYVBsdWdpbk5hbWUsIGNvbnN0IGNoYXIgKmFEZXNjcmlwdGlv biwgY29uc3QgY2hhciAqICogYU1pbWVUeXBlcywgY29uc3QgY2hhciAqICogYU1pbWVEZXNjcmlw dGlvbnMsIGNvbnN0IGNoYXIgKiAqIGFGaWxlRXh0ZW5zaW9ucywgUFJJbnQzMiBhQ291bnQpID0g MDsKIyAxODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5o IgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlclBsdWdpbihjb25zdCBuc0lJRCYgYUNJRCkg PSAwOwojIDE5MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2Vy LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBHZXRVUkxXaXRoSGVhZGVycyhuc0lTdXBwb3J0 cyogcGx1Z2luSW5zdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybCwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCA9IF9fbnVsbCwKICAgICAgICAg ICAgICAgICAgICAgIG5zSVBsdWdpblN0cmVhbUxpc3RlbmVyKiBzdHJlYW1MaXN0ZW5lciA9IF9f bnVsbCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsdEhvc3QgPSBfX251bGws CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBmb3JjZUpTRW5hYmxlZCA9IDAsCiAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBnZXRIZWFkZXJzTGVuZ3RoID0gMCwKICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIGdldEhlYWRlcnMgPSBfX251bGwpID0gMDsKfTsKIyAxMjcgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoKCgoKCgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiIDEKIyAyMiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZVBlZXIuaCIKc3Ry dWN0IEpTT2JqZWN0OwpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CiMgNDIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiCmNsYXNzIG5zSVBsdWdpbklu c3RhbmNlUGVlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0YjdjZWEyMCwg MHgwMTliLCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5 ZCwgMHg3YSB9fTsgcmV0dXJuIGlpZDt9CiMgNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVn aW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShu c1BsdWdpbkluc3RhbmNlUGVlclZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCAqIGFWYWx1ZSkgPSAw OwojIDY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlUGVl ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TUlNRVR5cGUobnNNSU1FVHlwZSAqYU1JTUVUeXBl KSA9IDA7CiMgODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFu Y2VQZWVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb2RlKG5zUGx1Z2luTW9kZSAqYU1vZGUp ID0gMDsKIyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5j ZVBlZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1N0cmVhbShuc01JTUVUeXBlIGFUeXBlLCBj b25zdCBjaGFyICphVGFyZ2V0LCBuc0lPdXRwdXRTdHJlYW0gKiphUmVzdWx0KSA9IDA7CiMgMTA4 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlUGVlci5oIgog IHZpcnR1YWwgbnNyZXN1bHQgU2hvd1N0YXR1cyhjb25zdCBjaGFyICphTWVzc2FnZSkgPSAwOwoj IDExOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZVBlZXIu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpbmRvd1NpemUoUFJVaW50MzIgYVdpZHRoLCBQUlVp bnQzMiBhSGVpZ2h0KSA9IDA7Cgp9OwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc3BsdWdpbi5oIiAyCgoKCgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNJUGx1Z2luVGFnSW5mby5oIiAxCiMgMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNJUGx1Z2luVGFnSW5mby5oIgpjbGFzcyBuc0lET01FbGVtZW50OwojIDM3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8uaCIKY2xhc3MgbnNJUGx1Z2luVGFn SW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1ZjFlYzFkMCwgMHgwMTli LCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3 YSB9fTsgcmV0dXJuIGlpZDt9CiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJ UGx1Z2luVGFnSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlcyhQUlVpbnQx NiAmIGFDb3VudCwgY29uc3QgY2hhciogY29uc3QqICYgYU5hbWVzLCBjb25zdCBjaGFyKiBjb25z dCogJiBhVmFsdWVzKSA9IDA7CiMgNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJ UGx1Z2luVGFnSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IGNo YXIgKmFOYW1lLCBjb25zdCBjaGFyICogKmFSZXN1bHQpID0gMDsKCn07CiMgMTQyICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2luLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lXaW5kb3dsZXNzUGx1Z0luc3RQZWVyLmgiIDEKIyAzMCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lXaW5kb3dsZXNzUGx1Z0luc3RQZWVyLmgi CmNsYXNzIG5zSVdpbmRvd2xlc3NQbHVnaW5JbnN0YW5jZVBlZXIgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4NTdiNGUyZjAsIDB4MDE5YiwgMHgxMWQyLCB7IDB4ODEsIDB4NWIs IDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVjdChuc1BsdWdpblJlY3QgKiBhUmVjdCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVnaW9uKG5zUGx1Z2luUmVn aW9uIGFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yY2VSZWRyYXcodm9p ZCkgPSAwOwoKfTsKIyAxNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4u aCIgMgojIDE2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbi5oIgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlcjIuaCIgMQojIDE3 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFnZXIyLmgiCmNsYXNz IG5zSVBsdWdpbjsKCmNsYXNzIG5zSUV2ZW50SGFuZGxlcjsKIyAzMyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5oIgpjbGFzcyBuc0lQbHVnaW5NYW5hZ2Vy MiA6IHB1YmxpYyBuc0lQbHVnaW5NYW5hZ2VyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQyOTYyZGMwLCAweDRl YjYsIDB4MTFkMiwgeyAweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAw eDdhIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpbldhaXRD dXJzb3Iodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZFdhaXRDdXJzb3Io dm9pZCkgPSAwOwojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1h bmFnZXIyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdXBwb3J0c1VSTFByb3RvY29sKGNvbnN0IGNo YXIgKmFQcm90b2NvbCwgUFJCb29sICphUmVzdWx0KSA9IDA7CiMgNzUgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlcjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5v dGlmeVN0YXR1c0NoYW5nZShuc0lQbHVnaW4gKmFQbHVnaW4sIG5zcmVzdWx0IGFTdGF0dXMpID0g MDsKIyA5MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5o IgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZFByb3h5Rm9yVVJMKGNvbnN0IGNoYXIgKmFVUkwsIGNo YXIgKiphUmVzdWx0KSA9IDA7CiMgMTAyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25z SVBsdWdpbk1hbmFnZXIyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlcldpbmRvdyhuc0lF dmVudEhhbmRsZXIgKmFIYW5kbGVyLCBuc1BsdWdpblBsYXRmb3JtV2luZG93UmVmIGFXaW5kb3cp ID0gMDsKIyAxMTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdl cjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJXaW5kb3cobnNJRXZlbnRIYW5kbGVy ICphSGFuZGxlciwgbnNQbHVnaW5QbGF0Zm9ybVdpbmRvd1JlZiBhV2luZG93KSA9IDA7CiMgMTI0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFnZXIyLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZU1lbnVJRChuc0lFdmVudEhhbmRsZXIgKmFIYW5kbGVyLCBQ UkJvb2wgYUlzU3VibWVudSwgUFJJbnQxNiAqYVJlc3VsdCkgPSAwOwojIDEzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgRGVhbGxvY2F0ZU1lbnVJRChuc0lFdmVudEhhbmRsZXIgKmFIYW5kbGVyLCBQUkludDE2IGFN ZW51SUQpID0gMDsKIyAxNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2lu TWFuYWdlcjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0FsbG9jYXRlZE1lbnVJRChuc0lFdmVu dEhhbmRsZXIgKmFIYW5kbGVyLCBQUkludDE2IGFNZW51SUQsIFBSQm9vbCAqYVJlc3VsdCkgPSAw OwoKfTsKIyAxNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoK CgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMu aCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMu aCIKY2xhc3MgbnNJRmlsZVV0aWxpdGllcyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg4OWEzMWNlMCwgMHgwMTlhLCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwg MHgwOCwgMHgxMSwgMHg5ZCwgMHg3YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDYgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNJRmlsZVV0aWxpdGllcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UHJvZ3JhbVBhdGgoY29uc3QgY2hhciAqICphUHJvZ3JhbVBhdGgpID0gMDsKIyA1NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lGaWxlVXRpbGl0aWVzLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRUZW1wRGlyUGF0aChjb25zdCBjaGFyICogKmFUZW1wRGlyUGF0aCkgPSAwOwoj IDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IE5ld1RlbXBGaWxlTmFtZShjb25zdCBjaGFyICphUHJlZml4LCBQUlVp bnQzMiBhTGVuZ3RoLCBjaGFyICogYUJ1ZmZlcikgPSAwOwoKfTsKIyAxNzIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5UYWdJbmZvMi5oIgplbnVtIG5zUGx1Z2luVGFnVHlw ZSB7CiAgbnNQbHVnaW5UYWdUeXBlX1Vua25vd24sCiAgbnNQbHVnaW5UYWdUeXBlX0VtYmVkLAog IG5zUGx1Z2luVGFnVHlwZV9PYmplY3QsCiAgbnNQbHVnaW5UYWdUeXBlX0FwcGxldAp9OwojIDMx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiCmNsYXNz IG5zSVBsdWdpblRhZ0luZm8yIDogcHVibGljIG5zSVBsdWdpblRhZ0luZm8gewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4NmE0OWM5YTAsIDB4MDE5YiwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4NjAsIDB4 MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VGFnVHlwZShuc1BsdWdpblRhZ1R5cGUgKmFUYWdUeXBlKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFRhZ1RleHQoY29uc3QgY2hhciAqICphVGFnVGV4dCkgPSAwOwoj IDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJhbWV0ZXJzKFBSVWludDE2ICYgYUNvdW50LCBjb25zdCBj aGFyKiBjb25zdCogJiBhTmFtZXMsIGNvbnN0IGNoYXIqIGNvbnN0KiAmIGFWYWx1ZXMpID0gMDsK IyA2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5UYWdJbmZvMi5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyYW1ldGVyKGNvbnN0IGNoYXIgKmFOYW1lLCBjb25zdCBj aGFyICogKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRC YXNlKGNvbnN0IGNoYXIgKiAqYURvY3VtZW50QmFzZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0RG9jdW1lbnRFbmNvZGluZyhjb25zdCBjaGFyICogKmFEb2N1bWVudEVuY29kaW5n KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWdubWVudChjb25zdCBjaGFyICog KmFFbGlnbm1lbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgoUFJVaW50 MzIgKmFXaWR0aCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJVaW50 MzIgKmFIZWlnaHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVmVydFNw YWNlKFBSVWludDMyICphQm9yZGVyVmVydFNwYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEJvcmRlckhvcml6U3BhY2UoUFJVaW50MzIgKmFCb3JkZXJIb3JpelNwYWNlKSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaXF1ZUlEKFBSVWludDMyICphVW5pcXVlSUQp ID0gMDsKIyAxMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luVGFnSW5m bzIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERPTUVsZW1lbnQobnNJRE9NRWxlbWVudCAqICph RE9NRWxlbWVudCkgPSAwOwoKfTsKIyAxODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNwbHVnaW4uaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJT3V0cHV0 U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU91dHB1dFN0 cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKIyA0 MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU91dHB1dFN0cmVhbS5oIgp0eXBlZGVm IG5zcmVzdWx0ICgqIG5zUmVhZFNlZ21lbnRGdW4pKG5zSU91dHB1dFN0cmVhbSAqYU91dFN0cmVh bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ2xvc3VyZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphVG9TZWdtZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGcm9tT2Zmc2V0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFDb3VudCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAqYVJlYWRDb3Vu dCk7CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIK Y2xhc3MgbnNJT3V0cHV0U3RyZWFtIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eDBkMGFjZDJhLCAweDYxYjQsIDB4MTFkNCwgeyAweDk4LCAweDc3LCAweDAwLCAweGMwLCAweDRm LCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlkO30KIyA3MyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zSU91dHB1dFN0cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2Uo dm9pZCkgPSAwOwojIDgyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJT3V0cHV0U3Ry ZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaCh2b2lkKSA9IDA7CiMgOTcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IFdyaXRlKGNvbnN0IGNoYXIgKmFCdWYsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2 YWwpID0gMDsKIyAxMTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJl YW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlRnJvbShuc0lJbnB1dFN0cmVhbSAqYUZyb21T dHJlYW0sIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5z cmVzdWx0IFdyaXRlU2VnbWVudHMobnNSZWFkU2VnbWVudEZ1biBhUmVhZGVyLCB2b2lkICogYUNs b3N1cmUsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNTAgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5z cmVzdWx0IElzTm9uQmxvY2tpbmcoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDE4MiAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbi5oIiAyCiMgMjIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VPd25lci5oIiAyCmNsYXNzIG5zSVBs dWdpbkluc3RhbmNlOwoKY2xhc3MgbnNJRG9jdW1lbnQ7CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VPd25lci5oIgpjbGFzcyBuc0lQbHVnaW5JbnN0 YW5jZU93bmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDE4MjcwODcwLCAw eDMyZjEsIDB4MTFkMiwgeyAweGE4LCAweDMwLCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4 LCAweGM5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5zdGFu Y2UobnNJUGx1Z2luSW5zdGFuY2UgKmFJbnN0YW5jZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRJbnN0YW5jZShuc0lQbHVnaW5JbnN0YW5jZSAqICYgYUluc3RhbmNlKSA9IDA7CgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNQbHVnaW5XaW5kb3cgKiAmIGFXaW5k b3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW9kZShuc1BsdWdpbk1vZGUgKmFN b2RlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlV2lkZ2V0KHZvaWQpID0g MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0CiAgR2V0VVJMKGNvbnN0IGNoYXIgKmFVUkwsIGNv bnN0IGNoYXIgKmFUYXJnZXQsCiAgICAgICAgIHZvaWQgKmFQb3N0RGF0YSwgUFJVaW50MzIgYVBv c3REYXRhTGVuLAogICAgICAgICB2b2lkICphSGVhZGVyc0RhdGEsIFBSVWludDMyIGFIZWFkZXJz RGF0YUxlbiwKICAgICAgICAgUFJCb29sIGFJc0ZpbGUgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgU2hvd1N0YXR1cyhjb25zdCBjaGFyICphU3RhdHVzTXNnKSA9IDA7CgogIHZpcnR1 YWwgbnNyZXN1bHQKICBTaG93U3RhdHVzKGNvbnN0IFBSVW5pY2hhciAqYVN0YXR1c01zZykgPSAw OwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURvY3VtZW50ICogKmFEb2N1 bWVudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVjdChuc1BsdWdp blJlY3QgKiBhUmVjdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVn aW9uKG5zUGx1Z2luUmVnaW9uIGFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg Rm9yY2VSZWRyYXcodm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShu c1BsdWdpbkluc3RhbmNlUGVlclZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCAqIGFWYWx1ZSkgPSAw OwoKfTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5Ib3N0Lmgi IDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIu aCIgMQojIDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIu aCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdE9ic2VydmVyLmgi IDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3RPYnNlcnZlci5o IgpjbGFzcyBuc0lSZXF1ZXN0OwojIDMyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJ UmVxdWVzdE9ic2VydmVyLmgiCmNsYXNzIG5zSVJlcXVlc3RPYnNlcnZlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmZDkxZTJlMCwgMHgxNDgxLCAweDExZDMsIHsgMHg5Mywg MHgzMywgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9 CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0T2JzZXJ2ZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3RhcnRSZXF1ZXN0KG5zSVJlcXVlc3QgKmFSZXF1ZXN0LCBu c0lTdXBwb3J0cyAqYUNvbnRleHQpID0gMDsKIyA2MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l Y2tvL25zSVJlcXVlc3RPYnNlcnZlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdG9wUmVxdWVz dChuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBuc3Jlc3VsdCBh U3RhdHVzQ29kZSkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z SVN0cmVhbUxpc3RlbmVyLmgiIDIKCgoKCgoKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgMzIgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lTdHJlYW1MaXN0ZW5lci5oIgpjbGFzcyBuc0lT dHJlYW1MaXN0ZW5lciA6IHB1YmxpYyBuc0lSZXF1ZXN0T2JzZXJ2ZXIgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 MWE2MzcwMjAsIDB4MTQ4MiwgMHgxMWQzLCB7IDB4OTMsIDB4MzMsIDB4MDAsIDB4MTAsIDB4NGIs IDB4YTAsIDB4ZmQsIDB4NDAgfX07IHJldHVybiBpaWQ7fQojIDUyICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRGF0 YUF2YWlsYWJsZShuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBu c0lJbnB1dFN0cmVhbSAqYUlucHV0U3RyZWFtLCBQUlVpbnQzMiBhT2Zmc2V0LCBQUlVpbnQzMiBh Q291bnQpID0gMDsKCn07CiMgMjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1 Z2luSG9zdC5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN0cmlu Z1N0cmVhbS5oIiAxCiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdHJpbmdT dHJlYW0uaCIKY2xhc3MgbnNJU3RyaW5nSW5wdXRTdHJlYW0gOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4NDUwY2QyZDQsIDB4ZjBmZCwgMHg0MjRkLCB7IDB4YjMsIDB4NjUsIDB4 YjEsIDB4MjUsIDB4MWYsIDB4ODAsIDB4ZmQsIDB4NTMgfX07IHJldHVybiBpaWQ7fQojIDQ2ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXREYXRhKGNvbnN0IGNoYXIgKmRhdGEsIFBSSW50MzIgZGF0YUxlbikgPSAwOwoj IDYxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBBZG9wdERhdGEoY2hhciAqIGRhdGEsIFBSSW50MzIgZGF0YUxlbikgPSAw OwojIDcyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBTaGFyZURhdGEoY29uc3QgY2hhciAqZGF0YSwgUFJJbnQzMiBkYXRh TGVuKSA9IDA7Cgp9OwojIDE1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN0cmlu Z1N0cmVhbS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX05ld1N0cmluZ0lucHV0U3RyZWFtKAog ICAgbnNJSW5wdXRTdHJlYW0qKiBhU3RyZWFtUmVzdWx0LAogICAgY29uc3QgbnNBU3RyaW5nJiBh U3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDU3RyaW5nSW5wdXRT dHJlYW0oCiAgICBuc0lJbnB1dFN0cmVhbSoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0FD U3RyaW5nJiBhU3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDaGFy SW5wdXRTdHJlYW0oCiAgICBuc0lTdXBwb3J0cyoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBj aGFyKiBhU3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDaGFyT3V0 cHV0U3RyZWFtKAogICAgbnNJU3VwcG9ydHMqKiBhU3RyZWFtUmVzdWx0LAogICAgY2hhcioqIGFT dHJpbmdUb0NoYW5nZSk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNfTmV3Qnl0ZUlucHV0U3Ry ZWFtKAogICAgbnNJU3VwcG9ydHMqKiBhU3RyZWFtUmVzdWx0LAogICAgY29uc3QgY2hhciogYVN0 cmluZ1RvUmVhZCwKICAgIFBSSW50MzIgYUxlbmd0aCk7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9wbHVnaW4vbnNJUGx1Z2luSG9zdC5oIiAyCiMgMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9wbHVnaW4vbnNJUGx1Z2luSG9zdC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc05ldFV0aWwuaCIgMQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRV dGlsLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0RXJyb3IuaCIgMQoj IDQyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRDSUQuaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCgoKCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMg NDcgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgNTIgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW5ydmFsLmgiCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgUFJVaW50MzIgUFJJbnRlcnZhbFRp bWU7CiMgMTA1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJJbnRlcnZhbFRpbWUgUFJfSW50 ZXJ2YWxOb3codm9pZCk7CiMgMTIzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJVaW50MzIg UFJfVGlja3NQZXJTZWNvbmQodm9pZCk7CiMgMTQyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEt MS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4g UFJJbnRlcnZhbFRpbWUgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgc2Vjb25kcyk7CmV4 dGVybiBQUkludGVydmFsVGltZSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1p bGxpKTsKZXh0ZXJuIFBSSW50ZXJ2YWxUaW1lIFBSX01pY3Jvc2Vjb25kc1RvSW50ZXJ2YWwoUFJV aW50MzIgbWljcm8pOwojIDE2MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3Jr L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSVWludDMyIFBS X0ludGVydmFsVG9TZWNvbmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKZXh0ZXJuIFBSVWludDMy IFBSX0ludGVydmFsVG9NaWxsaXNlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwpleHRlcm4g UFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pY3Jvc2Vjb25kcyhQUkludGVydmFsVGltZSB0aWNrcyk7 Cgp9CiMgNDggIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAxCiMgNjUgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW5ldC5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3Vpby5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMwpleHRlcm4g IkMiIHsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAxIDMKIyA0MiAiL3Vzci9pbmNs dWRlL2JpdHMvdWlvLmgiIDMKc3RydWN0IGlvdmVjCiAgewogICAgdm9pZCAqaW92X2Jhc2U7CiAg ICBzaXplX3QgaW92X2xlbjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMK CgoKCgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92 ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNz aXplX3Qgd3JpdGV2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBp bnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCn0KIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy9zb2Nr ZXQuaCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIg MwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDEgMwojIDI5ICIvdXNyL2lu Y2x1ZGUvYml0cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRz L3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0 LmgiIDIgMwoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CgoKCgplbnVtIF9fc29j a2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdSQU0gPSAyLAoKCiAgU09D S19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFDS0VUID0gNSwKCgogIFNP Q0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxNDIgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk ZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5 X3Q7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoKc3RydWN0IHNvY2th ZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hhciBzYV9kYXRhWzE0XTsK ICB9OwojIDE2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKc3RydWN0IHNvY2thZGRy X3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAgICBfX3VpbnQzMl90IF9f c3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIgKiBzaXplb2YgKF9fdWlu dDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0gMHgwMSwKCiAgICBNU0df UEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoKCiAgICBNU0dfVFJZSEFS RCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4LAoKICAgIE1TR19QUk9Y WSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0dfRE9OVFdBSVQgPSAweDQw LAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0gMHgxMDAsCgogICAgTVNH X0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBNU0dfQ09ORklSTSA9IDB4 ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVFID0gMHgyMDAwLAoK ICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMCwKCiAgICBNU0dfTU9SRSA9IDB4ODAwMAoKICB9OwoK CgoKc3RydWN0IG1zZ2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1z Z19uYW1lbGVuOwoKICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVu OwoKICAgIHZvaWQgKm1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoK ICAgIGludCBtc2dfZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBj bXNnX2xlbjsKCiAgICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CgoKCiAgfTsK IyAyNTcgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCmV4dGVybiBzdHJ1Y3QgY21zZ2hk ciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19taGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpIHRocm93ICgpOwoK CgoKZXh0ZXJuIF9faW5saW5lIHN0cnVjdCBjbXNnaGRyICoKX19jbXNnX254dGhkciAoc3RydWN0 IG1zZ2hkciAqX19taGRyLCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKQp7CiAgaWYg KChzaXplX3QpIF9fY21zZy0+Y21zZ19sZW4gPCBzaXplb2YgKHN0cnVjdCBjbXNnaGRyKSkKCiAg ICByZXR1cm4gMDsKCiAgX19jbXNnID0gKHN0cnVjdCBjbXNnaGRyICopICgodW5zaWduZWQgY2hh ciAqKSBfX2Ntc2cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCgoX19jbXNnLT5j bXNnX2xlbikgKyBzaXplb2YgKHNpemVfdCkgLSAxKSAmIChzaXplX3QpIH4oc2l6ZW9mIChzaXpl X3QpIC0gMSkpKTsKICBpZiAoKHVuc2lnbmVkIGNoYXIgKikgKF9fY21zZyArIDEpID4gKCh1bnNp Z25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsgX19taGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNp Z25lZCBjaGFyICopIF9fY21zZyArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXpl X3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAo KHVuc2lnbmVkIGNoYXIgKikgX19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRy b2xsZW4pKSkKCiAgICByZXR1cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewog ICAgU0NNX1JJR0hUUyA9IDB4MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAg IF9fU0NNX0NPTk5FQ1QgPSAweDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7 CiAgdWlkX3QgdWlkOwogIGdpZF90IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29j a2V0LmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIv dXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyIDMKIyAzMDYgIi91c3IvaW5jbHVkZS9iaXRzL3Nv Y2tldC5oIiAyIDMKCgoKc3RydWN0IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50 IGxfbGluZ2VyOwogIH07CiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoK c3RydWN0IG9zb2NrYWRkcgogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAg ICB1bnNpZ25lZCBjaGFyIHNhX2RhdGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0g MCwKCiAgU0hVVF9XUiwKCiAgU0hVVF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9z b2NrZXQuaCIgMwpleHRlcm4gaW50IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBp bnQgX19wcm90b2NvbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQg X19kb21haW4sIGludCBfX3R5cGUsIGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Zkc1syXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwg X19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2th ZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90 ICpfX3Jlc3RyaWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGlu dCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVu KQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3Ry dWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAg c29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3Qg c2VuZCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2Zs YWdzKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gc3NpemVfdCByZWN2IChpbnQgX19mZCwgdm9p ZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgpOwoKCgpleHRl cm4gc3NpemVfdCBzZW5kdG8gKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCBfX2NvbnN0IHN0cnVjdCBz b2NrYWRkciAqIF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19hZGRy X2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdmZyb20gKGludCBfX2ZkLCB2 b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19mbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsIHNvY2ts ZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNz aXplX3Qgc2VuZG1zZyAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0IG1zZ2hkciAqX19tZXNzYWdl LCBpbnQgX19mbGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdm1zZyAo aW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWws IGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf X29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19v cHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50 IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2 b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsCiAg ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAgICB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19ob3cp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzb2NrYXRtYXJrIChpbnQgX19mZCkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9fZmR0eXBlKSB0aHJv dyAoKTsKCgp9CiMgNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL25ldGlu ZXQvaW4uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0 ZGludC5oIiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgdW5zaWdu ZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsKCnR5 cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFy IGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBp bnQgaW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQg aW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVk IGludCB1aW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgdWludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50 X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBpbnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBpbnRf ZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0NjRf dDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIHVu c2lnbmVkIGludCB1aW50X2Zhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3Qz Ml90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zh c3Q2NF90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGludHB0 cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5jbHVk ZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRtYXhf dDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1heF90 OwojIDI0ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKZXh0ZXJuICJDIiB7CgoK ZW51bQogIHsKICAgIElQUFJPVE9fSVAgPSAwLAoKICAgIElQUFJPVE9fSE9QT1BUUyA9IDAsCgog ICAgSVBQUk9UT19JQ01QID0gMSwKCiAgICBJUFBST1RPX0lHTVAgPSAyLAoKICAgIElQUFJPVE9f SVBJUCA9IDQsCgogICAgSVBQUk9UT19UQ1AgPSA2LAoKICAgIElQUFJPVE9fRUdQID0gOCwKCiAg ICBJUFBST1RPX1BVUCA9IDEyLAoKICAgIElQUFJPVE9fVURQID0gMTcsCgogICAgSVBQUk9UT19J RFAgPSAyMiwKCiAgICBJUFBST1RPX1RQID0gMjksCgogICAgSVBQUk9UT19JUFY2ID0gNDEsCgog ICAgSVBQUk9UT19ST1VUSU5HID0gNDMsCgogICAgSVBQUk9UT19GUkFHTUVOVCA9IDQ0LAoKICAg IElQUFJPVE9fUlNWUCA9IDQ2LAoKICAgIElQUFJPVE9fR1JFID0gNDcsCgogICAgSVBQUk9UT19F U1AgPSA1MCwKCiAgICBJUFBST1RPX0FIID0gNTEsCgogICAgSVBQUk9UT19JQ01QVjYgPSA1OCwK CiAgICBJUFBST1RPX05PTkUgPSA1OSwKCiAgICBJUFBST1RPX0RTVE9QVFMgPSA2MCwKCiAgICBJ UFBST1RPX01UUCA9IDkyLAoKICAgIElQUFJPVE9fRU5DQVAgPSA5OCwKCiAgICBJUFBST1RPX1BJ TSA9IDEwMywKCiAgICBJUFBST1RPX0NPTVAgPSAxMDgsCgogICAgSVBQUk9UT19SQVcgPSAyNTUs CgogICAgSVBQUk9UT19NQVgKICB9OwoKCgp0eXBlZGVmIHVpbnQxNl90IGluX3BvcnRfdDsKCgpl bnVtCiAgewogICAgSVBQT1JUX0VDSE8gPSA3LAogICAgSVBQT1JUX0RJU0NBUkQgPSA5LAogICAg SVBQT1JUX1NZU1RBVCA9IDExLAogICAgSVBQT1JUX0RBWVRJTUUgPSAxMywKICAgIElQUE9SVF9O RVRTVEFUID0gMTUsCiAgICBJUFBPUlRfRlRQID0gMjEsCiAgICBJUFBPUlRfVEVMTkVUID0gMjMs CiAgICBJUFBPUlRfU01UUCA9IDI1LAogICAgSVBQT1JUX1RJTUVTRVJWRVIgPSAzNywKICAgIElQ UE9SVF9OQU1FU0VSVkVSID0gNDIsCiAgICBJUFBPUlRfV0hPSVMgPSA0MywKICAgIElQUE9SVF9N VFAgPSA1NywKCiAgICBJUFBPUlRfVEZUUCA9IDY5LAogICAgSVBQT1JUX1JKRSA9IDc3LAogICAg SVBQT1JUX0ZJTkdFUiA9IDc5LAogICAgSVBQT1JUX1RUWUxJTksgPSA4NywKICAgIElQUE9SVF9T VVBEVVAgPSA5NSwKCgogICAgSVBQT1JUX0VYRUNTRVJWRVIgPSA1MTIsCiAgICBJUFBPUlRfTE9H SU5TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfQ01EU0VSVkVSID0gNTE0LAogICAgSVBQT1JUX0VG U1NFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX0JJRkZVRFAgPSA1MTIsCiAgICBJUFBPUlRfV0hP U0VSVkVSID0gNTEzLAogICAgSVBQT1JUX1JPVVRFU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRf UkVTRVJWRUQgPSAxMDI0LAoKCiAgICBJUFBPUlRfVVNFUlJFU0VSVkVEID0gNTAwMAogIH07CgoK CnR5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OwpzdHJ1Y3QgaW5fYWRkcgogIHsKICAgIGluX2Fk ZHJfdCBzX2FkZHI7CiAgfTsKIyAxOTAgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3Ry dWN0IGluNl9hZGRyCiAgewogICAgdW5pb24KICAgICAgewogICAgICAgIHVpbnQ4X3QgdTZfYWRk cjhbMTZdOwogICAgICAgIHVpbnQxNl90IHU2X2FkZHIxNls4XTsKICAgICAgICB1aW50MzJfdCB1 Nl9hZGRyMzJbNF07CiAgICAgIH0gaW42X3U7CgoKCiAgfTsKCmV4dGVybiBjb25zdCBzdHJ1Y3Qg aW42X2FkZHIgaW42YWRkcl9hbnk7CmV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRk cl9sb29wYmFjazsKIyAyMTYgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IHNv Y2thZGRyX2luCiAgewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBz aW5fcG9ydDsKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFy IHNpbl96ZXJvW3NpemVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsK ICAgIHNhX2ZhbWlseV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAg IHVpbnQzMl90IHNpbjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwog ICAgdWludDMyX3Qgc2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7Cgog ICAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBp cHY2bXJfaW50ZXJmYWNlOwogIH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMK IyA2NiAiL3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0 cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3Qg aXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3Qg aW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3Ry dWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNz OwogICAgaW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBp bnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1 Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4u aCIgMiAzCiMgMjU5ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJf dCBudG9obCAodWludDMyX3QgX19uZXRsb25nKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBudG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBo dG9ubCAodWludDMyX3QgX19ob3N0bG9uZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9uZXRpbmV0 L2luLmgiIDIgMwojIDMzMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRlcm4gaW50 IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19p bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0 cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEgIi91c3Iv aW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0 IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CiAgfTsK Cn0KIyA2NyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyA4MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiCiMgMSAiL3Vz ci9pbmNsdWRlL2FycGEvaW5ldC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2FycGEvaW5ldC5o IiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfYWRkciAoX19jb25zdCBj aGFyICpfX2NwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbG5hb2YgKHN0cnVj dCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9t YWtlYWRkciAoaW5fYWRkcl90IF9fbmV0LCBpbl9hZGRyX3QgX19ob3N0KQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXRvZiAoc3RydWN0IGluX2FkZHIgX19pbikgdGhy b3cgKCk7CgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXR3b3JrIChfX2NvbnN0IGNoYXIgKl9f Y3ApIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9udG9hIChzdHJ1Y3QgaW5fYWRkciBf X2luKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaW5ldF9wdG9uIChpbnQgX19hZiwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fY3AsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jl c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2NvbnN0IGNoYXIgKmluZXRfbnRv cCAoaW50IF9fYWYsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNvY2tsZW5fdCBfX2xl bikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2F0b24gKF9fY29u c3QgY2hhciAqX19jcCwgc3RydWN0IGluX2FkZHIgKl9faW5wKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKmluZXRfbmV0YSAoaW5fYWRkcl90IF9fbmV0LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICppbmV0X25ldF9udG9wIChpbnQgX19hZiwg X19jb25zdCB2b2lkICpfX2NwLCBpbnQgX19iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlu ZXRfbmV0X3B0b24gKGludCBfX2FmLCBfX2NvbnN0IGNoYXIgKl9fY3AsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRl cm4gdW5zaWduZWQgaW50IGluZXRfbnNhcF9hZGRyIChfX2NvbnN0IGNoYXIgKl9fY3AsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYnVmLCBpbnQg X19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9uc2FwX250b2EgKGludCBfX2xl biwgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgp9CiMgODIgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCgoj IDEgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL25ldGRiLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUv cnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu Mi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgi IDIgMwoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgcnBjZW50CnsKICBjaGFyICpyX25hbWU7CiAgY2hh ciAqKnJfYWxpYXNlczsKICBpbnQgcl9udW1iZXI7Cn07CgpleHRlcm4gdm9pZCBzZXRycGNlbnQg KGludCBfX3N0YXlvcGVuKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5kcnBjZW50ICh2b2lkKSB0 aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5bmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnludW1iZXIg KGludCBfX251bWJlcikgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRycGNlbnQg KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cnBjYnluYW1lX3IgKF9fY29uc3QgY2hh ciAqX19uYW1lLCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g aW50IGdldHJwY2J5bnVtYmVyX3IgKGludCBfX251bWJlciwgc3RydWN0IHJwY2VudCAqX19yZXN1 bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXpl X3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAq Kl9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cnBjZW50X3IgKHN0cnVjdCBycGNl bnQgKl9fcmVzdWx0X2J1ZiwgY2hhciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAoKTsKCgp9 CiMgMzQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnaW5mby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ2luZm8uaCIgMiAzCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHNpZ3ZhbAogIHsKICAgIGlu dCBzaXZhbF9pbnQ7CiAgICB2b2lkICpzaXZhbF9wdHI7CiAgfSBzaWd2YWxfdDsKIyAyNzEgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfczsKCnR5 cGVkZWYgc3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICBp bnQgc2lnZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAgIHVuaW9uCiAgICAgIHsK ICAgICAgICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCiAgICAgICAgc3Ry dWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pIChzaWd2YWxfdCk7 CiAgICAgICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0cmlidXRlOwogICAgICAg ICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoK CgoKCmVudW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RI UkVBRAoKfTsKIyAzOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvbmV0ZGIuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL25ldGRi LmgiIDMKc3RydWN0IG5ldGVudAp7CiAgY2hhciAqbl9uYW1lOwogIGNoYXIgKipuX2FsaWFzZXM7 CiAgaW50IG5fYWRkcnR5cGU7CiAgdWludDMyX3Qgbl9uZXQ7Cn07CiMgNDQgIi91c3IvaW5jbHVk ZS9uZXRkYi5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuICJDIiB7 CgoKCgoKCmV4dGVybiBpbnQgKl9faF9lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDg4ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwpl eHRlcm4gdm9pZCBoZXJyb3IgKF9fY29uc3QgY2hhciAqX19zdHIpIHRocm93ICgpOwoKCmV4dGVy biBfX2NvbnN0IGNoYXIgKmhzdHJlcnJvciAoaW50IF9fZXJyX251bSkgdGhyb3cgKCk7CgoKCgpz dHJ1Y3QgaG9zdGVudAp7CiAgY2hhciAqaF9uYW1lOwogIGNoYXIgKipoX2FsaWFzZXM7CiAgaW50 IGhfYWRkcnR5cGU7CiAgaW50IGhfbGVuZ3RoOwogIGNoYXIgKipoX2FkZHJfbGlzdDsKCn07CgoK CmV4dGVybiB2b2lkIHNldGhvc3RlbnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIHZvaWQgZW5kaG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgaG9z dGVudCAqZ2V0aG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVu dCAqZ2V0aG9zdGJ5YWRkciAoX19jb25zdCB2b2lkICpfX2FkZHIsIF9fc29ja2xlbl90IF9fbGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3R5cGUpIHRocm93 ICgpOwoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5 bmFtZTIgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19hZikgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgZ2V0aG9zdGVudF9yIChzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3Vs dF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAq Kl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieWFkZHJfciAo X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0 IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f aF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnluYW1lX3IgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieW5hbWUyX3IgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25hbWUsIGludCBfX2FmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJy bm9wKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRuZXRlbnQgKGludCBfX3N0YXlfb3Bl bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieWFkZHIgKHVpbnQzMl90IF9fbmV0LCBpbnQgX190eXBl KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieW5hbWUgKF9f Y29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0bmV0ZW50 X3IgKHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IGdldG5ldGJ5YWRkcl9yICh1aW50MzJfdCBfX25ldCwgaW50IF9fdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBf X3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg X19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0 YnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19i dWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3Ry aWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19oX2Vycm5vcCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgc2VydmVudAp7CiAgY2hhciAqc19uYW1l OwogIGNoYXIgKipzX2FsaWFzZXM7CiAgaW50IHNfcG9ydDsKICBjaGFyICpzX3Byb3RvOwp9OwoK CgpleHRlcm4gdm9pZCBzZXRzZXJ2ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkIGVuZHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNl cnZlbnQgKmdldHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNlcnZl bnQgKmdldHNlcnZieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19wcm90bykgdGhyb3cgKCk7CgoK CmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5cG9ydCAoaW50IF9fcG9ydCwgX19jb25z dCBjaGFyICpfX3Byb3RvKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0c2VydmVu dF9yIChzdHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1 bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRzZXJ2YnluYW1lX3IgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHNlcnZieXBvcnRfciAoaW50IF9fcG9ydCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1 bHQpIHRocm93ICgpOwoKCgoKc3RydWN0IHByb3RvZW50CnsKICBjaGFyICpwX25hbWU7CiAgY2hh ciAqKnBfYWxpYXNlczsKICBpbnQgcF9wcm90bzsKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0cHJvdG9l bnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kcHJvdG9lbnQg KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2VudCAo dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUg KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IHByb3RvZW50 ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgX19wcm90bykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBnZXRwcm90b2VudF9yIChzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVm LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf dCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipf X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW5hbWVf ciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1 ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW51bWJlcl9y IChpbnQgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90 b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bmV0Z3JlbnQgKF9fY29uc3QgY2hhciAqX19u ZXRncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0Z3JlbnQgKHZvaWQpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGdldG5ldGdyZW50IChjaGFyICoqX19yZXN0cmljdCBfX2hvc3Rw LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAogICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2RvbWFpbnApIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGlubmV0Z3IgKF9fY29uc3QgY2hhciAqX19uZXRncm91cCwgX19jb25z dCBjaGFyICpfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3VzZXIs IF9fY29uc3QgY2hhciAqZG9tYWluKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldG5ldGdyZW50 X3IgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2RvbWFpbnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKIyAzMzQgIi91 c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiBpbnQgcmNtZCAoY2hhciAqKl9fcmVzdHJpY3Qg X19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9jdXNlciwKICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11c2VyLAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCkKICAgICB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCByY21kX2FmIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNp Z25lZCBzaG9ydCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19sb2N1c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3JlbXVzZXIsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAgICAg ICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJleGVjIChj aGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFzcywKICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHJleGVjX2FmIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQg X19ycG9ydCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bmFtZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFz cywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBp bnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBf X2FmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcnVzZXJvayAoX19jb25zdCBjaGFyICpfX3Jo b3N0LCBpbnQgX19zdXNlciwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVt dXNlciwgX19jb25zdCBjaGFyICpfX2xvY3VzZXIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJ1 c2Vyb2tfYWYgKF9fY29uc3QgY2hhciAqX19yaG9zdCwgaW50IF9fc3VzZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9fY29uc3QgY2hhciAqX19sb2N1 c2VyLAogICAgICAgICAgICAgICAgICAgICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBycmVzdnBvcnQgKGludCAqX19hbHBvcnQpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHJyZXN2cG9ydF9hZiAoaW50ICpfX2FscG9ydCwgc2FfZmFtaWx5X3QgX19hZikgdGhy b3cgKCk7CgoKCgoKCnN0cnVjdCBhZGRyaW5mbwp7CiAgaW50IGFpX2ZsYWdzOwogIGludCBhaV9m YW1pbHk7CiAgaW50IGFpX3NvY2t0eXBlOwogIGludCBhaV9wcm90b2NvbDsKICBzb2NrbGVuX3Qg YWlfYWRkcmxlbjsKICBzdHJ1Y3Qgc29ja2FkZHIgKmFpX2FkZHI7CiAgY2hhciAqYWlfY2Fub25u YW1lOwogIHN0cnVjdCBhZGRyaW5mbyAqYWlfbmV4dDsKfTsKCgoKc3RydWN0IGdhaWNiCnsKICBj b25zdCBjaGFyICphcl9uYW1lOwogIGNvbnN0IGNoYXIgKmFyX3NlcnZpY2U7CiAgY29uc3Qgc3Ry dWN0IGFkZHJpbmZvICphcl9yZXF1ZXN0OwogIHN0cnVjdCBhZGRyaW5mbyAqYXJfcmVzdWx0OwoK ICBpbnQgX19yZXR1cm47CiAgaW50IF9fdW51c2VkWzVdOwp9OwojIDQ1OSAiL3Vzci9pbmNsdWRl L25ldGRiLmgiIDMKZXh0ZXJuIGludCBnZXRhZGRyaW5mbyAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgYWRk cmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBh ZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZyZWVh ZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpfX2FpKSB0aHJvdyAoKTsKCgpleHRlcm4gX19jb25z dCBjaGFyICpnYWlfc3RyZXJyb3IgKGludCBfX2Vjb2RlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGdldG5hbWVpbmZvIChfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX3NhLAog ICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19zYWxlbiwgY2hhciAqX19yZXN0cmlj dCBfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX2hvc3RsZW4sIGNo YXIgKl9fcmVzdHJpY3QgX19zZXJ2LAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qg X19zZXJ2bGVuLCB1bnNpZ25lZCBpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBnZXRhZGRyaW5mb19hIChpbnQgX19tb2RlLCBzdHJ1Y3QgZ2FpY2IgKl9fbGlzdFtdLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2VudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3Ry aWN0IF9fc2lnKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnYWlfc3VzcGVuZCAoX19j b25zdCBzdHJ1Y3QgZ2FpY2IgKl9fY29uc3QgX19saXN0W10sIGludCBfX2VudCwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBnYWlfZXJyb3IgKHN0cnVjdCBnYWljYiAqX19yZXEpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgZ2FpX2NhbmNlbCAoc3RydWN0IGdhaWNiICpfX2dhaWNicCkgdGhyb3cg KCk7CgoKCn0KIyA4NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyA0OSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpl eHRlcm4gIkMiIHsKCgp0eXBlZGVmIHN0cnVjdCBQUkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3Qg UFJEaXJFbnRyeSBQUkRpckVudHJ5OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlRGVzYyBQUkZp bGVEZXNjOwp0eXBlZGVmIHN0cnVjdCBQUkZpbGVJbmZvIFBSRmlsZUluZm87CnR5cGVkZWYgc3Ry dWN0IFBSRmlsZUluZm82NCBQUkZpbGVJbmZvNjQ7CnR5cGVkZWYgdW5pb24gUFJOZXRBZGRyIFBS TmV0QWRkcjsKdHlwZWRlZiBzdHJ1Y3QgUFJJT01ldGhvZHMgUFJJT01ldGhvZHM7CnR5cGVkZWYg c3RydWN0IFBSUG9sbERlc2MgUFJQb2xsRGVzYzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlUHJpdmF0 ZSBQUkZpbGVQcml2YXRlOwp0eXBlZGVmIHN0cnVjdCBQUlNlbmRGaWxlRGF0YSBQUlNlbmRGaWxl RGF0YTsKIyA3OSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIFBSSW50biBQUkRlc2NJZGVudGl0eTsK CnN0cnVjdCBQUkZpbGVEZXNjIHsKICAgIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzOwogICAg UFJGaWxlUHJpdmF0ZSAqc2VjcmV0OwogICAgUFJGaWxlRGVzYyAqbG93ZXIsICpoaWdoZXI7CiAg ICB2b2lkICggKmR0b3IpKFBSRmlsZURlc2MgKmZkKTsKCiAgICBQUkRlc2NJZGVudGl0eSBpZGVu dGl0eTsKfTsKIyA5OSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJUcmFuc21pdEZpbGVG bGFncyB7CiAgICBQUl9UUkFOU01JVEZJTEVfS0VFUF9PUEVOID0gMCwKCiAgICBQUl9UUkFOU01J VEZJTEVfQ0xPU0VfU09DS0VUID0gMQoKfSBQUlRyYW5zbWl0RmlsZUZsYWdzOwojIDE1MiAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpzdHJ1Y3QgUFJJUHY2QWRkciB7CiAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgUFJVaW50OCBfUzZfdThbMTZdOwogICAgICAgICAgICAgICAgUFJVaW50MTYgX1M2X3Ux Nls4XTsKICAgICAgICAgICAgICAgIFBSVWludDMyIF9TNl91MzJbNF07CiAgICAgICAgICAgICAg ICBQUlVpbnQ2NCBfUzZfdTY0WzJdOwogICAgICAgIH0gX1M2X3VuOwp9OwoKCgoKCnR5cGVkZWYg c3RydWN0IFBSSVB2NkFkZHIgUFJJUHY2QWRkcjsKCnVuaW9uIFBSTmV0QWRkciB7CiAgICBzdHJ1 Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKCgoKICAgICAgICBjaGFyIGRhdGFbMTRdOwoK ICAgIH0gcmF3OwogICAgc3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7CiAgICAgICAg UFJVaW50MTYgcG9ydDsKICAgICAgICBQUlVpbnQzMiBpcDsKCgoKICAgICAgICBjaGFyIHBhZFs4 XTsKCiAgICB9IGluZXQ7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAg ICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWludDMyIGZsb3dpbmZvOwogICAgICAgIFBS SVB2NkFkZHIgaXA7CiAgICAgICAgUFJVaW50MzIgc2NvcGVfaWQ7CiAgICB9IGlwdjY7CgogICAg c3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7CiAgICAgICAgY2hhciBwYXRoWzEwNF07 CiAgICB9IGxvY2FsOwoKfTsKIyAyMTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEv d29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29j a09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05vbmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5n ZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRkciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAog ICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNp emUsCgogICAgUFJfU29ja09wdF9JcFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9m U2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0FkZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1l bWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJbnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0 VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRfTWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0 X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01heFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2Fk Y2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0 IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wgcG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRp bWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlwZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3Qgewog ICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAgICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1j YXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNv Y2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24KICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsK ICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsKICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQ UkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAgIFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBS Qm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBSQm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQ UkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJCb29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUg bWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXplIHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJT aXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAgICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBS TWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAgICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1i ZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9w dGlvbkRhdGE7CiMgMjc2ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgc3RydWN0IFBSSU9WZWMgewog ICAgY2hhciAqaW92X2Jhc2U7CiAgICBpbnQgaW92X2xlbjsKfSBQUklPVmVjOwoKCgoKCgp0eXBl ZGVmIGVudW0gUFJEZXNjVHlwZQp7CiAgICBQUl9ERVNDX0ZJTEUgPSAxLAogICAgUFJfREVTQ19T T0NLRVRfVENQID0gMiwKICAgIFBSX0RFU0NfU09DS0VUX1VEUCA9IDMsCiAgICBQUl9ERVNDX0xB WUVSRUQgPSA0LAogICAgUFJfREVTQ19QSVBFID0gNQp9IFBSRGVzY1R5cGU7Cgp0eXBlZGVmIGVu dW0gUFJTZWVrV2hlbmNlIHsKICAgIFBSX1NFRUtfU0VUID0gMCwKICAgIFBSX1NFRUtfQ1VSID0g MSwKICAgIFBSX1NFRUtfRU5EID0gMgp9IFBSU2Vla1doZW5jZTsKCmV4dGVybiBQUkRlc2NUeXBl IFBSX0dldERlc2NUeXBlKFBSRmlsZURlc2MgKmZpbGUpOwojIDMxOSAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0 eXBlZGVmIFBSU3RhdHVzICggKlBSQ2xvc2VGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBS SW50MzIgKCAqUFJSZWFkRk4pKFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1v dW50KTsKdHlwZWRlZiBQUkludDMyICggKlBSV3JpdGVGTikoUFJGaWxlRGVzYyAqZmQsIGNvbnN0 IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJBdmFpbGFi bGVGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBSSW50NjQgKCAqUFJBdmFpbGFibGU2NEZO KShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGc3luY0ZOKShQUkZpbGVE ZXNjICpmZCk7CnR5cGVkZWYgUFJPZmZzZXQzMiAoICpQUlNlZWtGTikoUFJGaWxlRGVzYyAqZmQs IFBST2Zmc2V0MzIgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQUk9mZnNldDY0 ICggKlBSU2VlazY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDY0IG9mZnNldCwgUFJTZWVr V2hlbmNlIGhvdyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mb0ZOKShQUkZpbGVEZXNj ICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mbzY0 Rk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwp0eXBlZGVmIFBSSW50MzIg KCAqUFJXcml0ZXZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJT1ZlYyAqaW92LCBQ UkludDMyIGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJT dGF0dXMgKCAqUFJDb25uZWN0Rk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRk ciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJGaWxlRGVzYyogKCAq UFJBY2NlcHRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkciwgUFJJbnRl cnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJCaW5kRk4pKFBSRmlsZURl c2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSTGlz dGVuRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7CnR5cGVkZWYgUFJTdGF0dXMg KCAqUFJTaHV0ZG93bkZOKShQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGhvdyk7CnR5cGVkZWYgUFJJ bnQzMiAoICpQUlJlY3ZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQUkludDMy IGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVk ZWYgUFJJbnQzMiAoICpQUlNlbmRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQg KmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRp bWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWN2ZnJvbUZOKSgKICAgIFBSRmlsZURlc2Mg KmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBQUk5ldEFk ZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJT ZW5kdG9GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFt b3VudCwKICAgIFBSSW50biBmbGFncywgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFs VGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDE2ICggKlBSUG9sbEZOKSgKICAgIFBSRmlsZURl c2MgKmZkLCBQUkludDE2IGluX2ZsYWdzLCBQUkludDE2ICpvdXRfZmxhZ3MpOwp0eXBlZGVmIFBS SW50MzIgKCAqUFJBY2NlcHRyZWFkRk4pKAogICAgUFJGaWxlRGVzYyAqc2QsIFBSRmlsZURlc2Mg KipuZCwgUFJOZXRBZGRyICoqcmFkZHIsCiAgICB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQ UkludGVydmFsVGltZSB0KTsKdHlwZWRlZiBQUkludDMyICggKlBSVHJhbnNtaXRmaWxlRk4pKAog ICAgIFBSRmlsZURlc2MgKnNkLCBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqaGVhZGVycywK ICAgICBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsIFBSSW50ZXJ2YWxU aW1lIHQpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja25hbWVGTikoUFJGaWxlRGVzYyAq ZmQsIFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJHZXRwZWVybmFtZUZO KShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQ UkdldHNvY2tldG9wdGlvbkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNvY2tldE9wdGlvbkRh dGEgKmRhdGEpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSU2V0c29ja2V0b3B0aW9uRk4pKAogICAg UFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CnR5cGVkZWYg UFJJbnQzMiAoICpQUlNlbmRmaWxlRk4pKAogICAgICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2Nr ZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdz IGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNv bm5lY3Rjb250aW51ZUZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUkludDE2IG91dF9mbGFncyk7 CnR5cGVkZWYgUFJJbnRuICggKlBSUmVzZXJ2ZWRGTikoUFJGaWxlRGVzYyAqZmQpOwoKc3RydWN0 IFBSSU9NZXRob2RzIHsKICAgIFBSRGVzY1R5cGUgZmlsZV90eXBlOwogICAgUFJDbG9zZUZOIGNs b3NlOwogICAgUFJSZWFkRk4gcmVhZDsKICAgIFBSV3JpdGVGTiB3cml0ZTsKICAgIFBSQXZhaWxh YmxlRk4gYXZhaWxhYmxlOwogICAgUFJBdmFpbGFibGU2NEZOIGF2YWlsYWJsZTY0OwogICAgUFJG c3luY0ZOIGZzeW5jOwogICAgUFJTZWVrRk4gc2VlazsKICAgIFBSU2VlazY0Rk4gc2VlazY0Owog ICAgUFJGaWxlSW5mb0ZOIGZpbGVJbmZvOwogICAgUFJGaWxlSW5mbzY0Rk4gZmlsZUluZm82NDsK ICAgIFBSV3JpdGV2Rk4gd3JpdGV2OwogICAgUFJDb25uZWN0Rk4gY29ubmVjdDsKICAgIFBSQWNj ZXB0Rk4gYWNjZXB0OwogICAgUFJCaW5kRk4gYmluZDsKICAgIFBSTGlzdGVuRk4gbGlzdGVuOwog ICAgUFJTaHV0ZG93bkZOIHNodXRkb3duOwogICAgUFJSZWN2Rk4gcmVjdjsKICAgIFBSU2VuZEZO IHNlbmQ7CiAgICBQUlJlY3Zmcm9tRk4gcmVjdmZyb207CiAgICBQUlNlbmR0b0ZOIHNlbmR0bzsK ICAgIFBSUG9sbEZOIHBvbGw7CiAgICBQUkFjY2VwdHJlYWRGTiBhY2NlcHRyZWFkOwogICAgUFJU cmFuc21pdGZpbGVGTiB0cmFuc21pdGZpbGU7CiAgICBQUkdldHNvY2tuYW1lRk4gZ2V0c29ja25h bWU7CiAgICBQUkdldHBlZXJuYW1lRk4gZ2V0cGVlcm5hbWU7CiAgICBQUlJlc2VydmVkRk4gcmVz ZXJ2ZWRfZm5fNjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl81OwogICAgUFJHZXRzb2Nr ZXRvcHRpb25GTiBnZXRzb2NrZXRvcHRpb247CgogICAgUFJTZXRzb2NrZXRvcHRpb25GTiBzZXRz b2NrZXRvcHRpb247CgogICAgUFJTZW5kZmlsZUZOIHNlbmRmaWxlOwogICAgUFJDb25uZWN0Y29u dGludWVGTiBjb25uZWN0Y29udGludWU7CgogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7 CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZl ZF9mbl8xOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzA7Cn07CiMgNDMzICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmlvLmgiCnR5cGVkZWYgZW51bSBQUlNwZWNpYWxGRAp7CiAgICBQUl9TdGFuZGFyZElucHV0LAog ICAgUFJfU3RhbmRhcmRPdXRwdXQsCiAgICBQUl9TdGFuZGFyZEVycm9yCn0gUFJTcGVjaWFsRkQ7 CgpleHRlcm4gUFJGaWxlRGVzYyogUFJfR2V0U3BlY2lhbEZEKFBSU3BlY2lhbEZEIGlkKTsKIyA0 ODAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldFVuaXF1ZUlkZW50 aXR5KGNvbnN0IGNoYXIgKmxheWVyX25hbWUpOwpleHRlcm4gY29uc3QgY2hhciogUFJfR2V0TmFt ZUZvcklkZW50aXR5KFBSRGVzY0lkZW50aXR5IGlkZW50KTsKZXh0ZXJuIFBSRGVzY0lkZW50aXR5 IFBSX0dldExheWVyc0lkZW50aXR5KFBSRmlsZURlc2MqIGZkKTsKZXh0ZXJuIFBSRmlsZURlc2Mq IFBSX0dldElkZW50aXRpZXNMYXllcihQUkZpbGVEZXNjKiBmZF9zdGFjaywgUFJEZXNjSWRlbnRp dHkgaWQpOwojIDQ5MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gY29uc3QgUFJJT01ldGhvZHMgKiBQ Ul9HZXREZWZhdWx0SU9NZXRob2RzKHZvaWQpOwojIDUwNCAiL3Zhci90bXAvcG9ydGFnZS9tb3pp bGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g UFJGaWxlRGVzYyogUFJfQ3JlYXRlSU9MYXllclN0dWIoCiAgICBQUkRlc2NJZGVudGl0eSBpZGVu dCwgY29uc3QgUFJJT01ldGhvZHMgKm1ldGhvZHMpOwojIDUyMSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl cm4gUFJGaWxlRGVzYyogUFJfQ3JlYXRlSU9MYXllcihQUkZpbGVEZXNjKiBmZCk7CiMgNTM3ICIv dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURl c2MgKmZkX3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDU1 NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfUG9wSU9MYXllcihQUkZpbGVE ZXNjICpmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQpOwojIDYyOCAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl eHRlcm4gUFJGaWxlRGVzYyogUFJfT3Blbihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gZmxhZ3Ms IFBSSW50biBtb2RlKTsKIyA2NTQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29y ay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBS X09wZW5GaWxlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQUkludG4gbW9k ZSk7CiMgNjg1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DbG9zZShQUkZpbGVE ZXNjICpmZCk7CiMgNzIwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlYWQoUFJG aWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwojIDc0NCAiL3Zhci90bXAv cG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJp by5oIgpleHRlcm4gUFJJbnQzMiBQUl9Xcml0ZShQUkZpbGVEZXNjICpmZCxjb25zdCB2b2lkICpi dWYsUFJJbnQzMiBhbW91bnQpOwojIDc3OCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQ Ul9Xcml0ZXYoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJT1ZlYyAqaW92LCBQUkludDMy IGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgNzk5ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlv LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZWxldGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCnR5cGVk ZWYgZW51bSBQUkZpbGVUeXBlCnsKICAgIFBSX0ZJTEVfRklMRSA9IDEsCiAgICBQUl9GSUxFX0RJ UkVDVE9SWSA9IDIsCiAgICBQUl9GSUxFX09USEVSID0gMwp9IFBSRmlsZVR5cGU7CgpzdHJ1Y3Qg UFJGaWxlSW5mbyB7CiAgICBQUkZpbGVUeXBlIHR5cGU7CiAgICBQUk9mZnNldDMyIHNpemU7CiAg ICBQUlRpbWUgY3JlYXRpb25UaW1lOwogICAgUFJUaW1lIG1vZGlmeVRpbWU7Cn07CgpzdHJ1Y3Qg UFJGaWxlSW5mbzY0IHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0NjQgc2l6ZTsK ICAgIFBSVGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKIyA4NDIg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIg KmZuLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQo Y29uc3QgY2hhciAqZm4sIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODY5ICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRPcGVuRmlsZUluZm8oUFJGaWxlRGVzYyAqZmQsIFBSRmls ZUluZm8gKmluZm8pOwpleHRlcm4gUFJTdGF0dXMgUFJfR2V0T3BlbkZpbGVJbmZvNjQoUFJGaWxl RGVzYyAqZmQsIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODg4ICIvdmFyL3RtcC9wb3J0YWdlL21v emlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy biBQUlN0YXR1cyBQUl9SZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOwoj IDkxNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJBY2Nlc3NIb3cgewogICAgUFJfQUND RVNTX0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJVEVfT0sgPSAyLAogICAgUFJfQUNDRVNT X1JFQURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRlcm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNv bnN0IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7CiMgOTU1ICIvdmFyL3RtcC9wb3J0YWdl L21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4 dGVybiBQUk9mZnNldDMyIFBSX1NlZWsoUFJGaWxlRGVzYyAqZmQsIFBST2Zmc2V0MzIgb2Zmc2V0 LCBQUlNlZWtXaGVuY2Ugd2hlbmNlKTsKZXh0ZXJuIFBST2Zmc2V0NjQgUFJfU2VlazY0KFBSRmls ZURlc2MgKmZkLCBQUk9mZnNldDY0IG9mZnNldCwgUFJTZWVrV2hlbmNlIHdoZW5jZSk7CiMgOTc4 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX0F2YWlsYWJsZShQUkZpbGVEZXNjICpm ZCk7CmV4dGVybiBQUkludDY0IFBSX0F2YWlsYWJsZTY0KFBSRmlsZURlc2MgKmZkKTsKIyA5OTgg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5bmMoUFJGaWxlRGVzYyAqZmQpOwoK CgpzdHJ1Y3QgUFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFyICpuYW1lOwp9OwojIDEwMzcgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwoj IDEwNjkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSRGlyRmxhZ3MgewogICAgUFJfU0tJ UF9OT05FID0gMHgwLAogICAgUFJfU0tJUF9ET1QgPSAweDEsCiAgICBQUl9TS0lQX0RPVF9ET1Qg PSAweDIsCiAgICBQUl9TS0lQX0JPVEggPSAweDMsCiAgICBQUl9TS0lQX0hJRERFTiA9IDB4NAp9 IFBSRGlyRmxhZ3M7CgpleHRlcm4gUFJEaXJFbnRyeSogUFJfUmVhZERpcihQUkRpciAqZGlyLCBQ UkRpckZsYWdzIGZsYWdzKTsKIyAxMTAzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ Ul9DbG9zZURpcihQUkRpciAqZGlyKTsKIyAxMTMyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEt MS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0 YXR1cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7CiMgMTE0NCAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTWFrZURpcihjb25zdCBjaGFyICpuYW1lLCBQ UkludG4gbW9kZSk7CiMgMTE2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3Jr L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUm1E aXIoY29uc3QgY2hhciAqbmFtZSk7CiMgMTE4MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxl RGVzYyogUFJfTmV3VURQU29ja2V0KHZvaWQpOwojIDEyMDIgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu IFBSRmlsZURlc2MqIFBSX05ld1RDUFNvY2tldCh2b2lkKTsKIyAxMjIyICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUkZpbGVEZXNjKiBQUl9PcGVuVURQU29ja2V0KFBSSW50biBhZik7CiMgMTI0MiAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4g YWYpOwojIDEyNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nvbm5lY3QoCiAg ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0 aW1lb3V0KTsKIyAxMzAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0 Q29udGludWUoUFJGaWxlRGVzYyAqZmQsIFBSSW50MTYgb3V0X2ZsYWdzKTsKIyAxMzMxICIvdmFy L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRDb25uZWN0U3RhdHVzKGNvbnN0IFBSUG9s bERlc2MgKnBkKTsKIyAxMzU1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9B Y2NlcHQoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGlt ZSB0aW1lb3V0KTsKIyAxMzc3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9CaW5k KFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwojIDEzOTkgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0xpc3RlbihQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGJh Y2tsb2cpOwojIDE0MjMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRvd25Ib3cK ewogICAgUFJfU0hVVERPV05fUkNWID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAxLAogICAg UFJfU0hVVERPV05fQk9USCA9IDIKfSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3RhdHVzIFBS X1NodXRkb3duKFBSRmlsZURlc2MgKmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTQ2MyAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9SZWN2KFBSRmlsZURlc2MgKmZkLCB2b2lkICpi dWYsIFBSSW50MzIgYW1vdW50LAogICAgICAgICAgICAgICAgUFJJbnRuIGZsYWdzLCBQUkludGVy dmFsVGltZSB0aW1lb3V0KTsKIyAxNDk0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBS X1NlbmQoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGZsYWdzLCBQUkludGVydmFsVGlt ZSB0aW1lb3V0KTsKIyAxNTI5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlY3ZG cm9tKAogICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50 biBmbGFncywKICAgIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMg MTU2MiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9TZW5kVG8oCiAgICBQUkZpbGVE ZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwgUFJJbnRuIGZsYWdzLAog ICAgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNjAy ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1RyYW5zbWl0RmlsZSgKICAgIFBSRmls ZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSRmlsZURlc2MgKnNvdXJjZUZpbGUsCiAgICBjb25zdCB2 b2lkICpoZWFkZXJzLCBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsCiAg ICBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNjQxICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0cnVjdCBQ UlNlbmRGaWxlRGF0YSB7CiAgICAgICAgUFJGaWxlRGVzYyAqZmQ7CiAgICAgICAgUFJVaW50MzIg ZmlsZV9vZmZzZXQ7CiAgICAgICAgUFJTaXplIGZpbGVfbmJ5dGVzOwoKCiAgICAgICAgY29uc3Qg dm9pZCAqaGVhZGVyOwogICAgICAgIFBSSW50MzIgaGxlbjsKICAgICAgICBjb25zdCB2b2lkICp0 cmFpbGVyOwogICAgICAgIFBSSW50MzIgdGxlbjsKfTsKCgpleHRlcm4gUFJJbnQzMiBQUl9TZW5k RmlsZSgKICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5k RGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVydmFsVGltZSB0 aW1lb3V0KTsKIyAxNzA4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX0FjY2VwdFJl YWQoCiAgICBQUkZpbGVEZXNjICpsaXN0ZW5Tb2NrLCBQUkZpbGVEZXNjICoqYWNjZXB0ZWRTb2Nr LAogICAgUFJOZXRBZGRyICoqcGVlckFkZHIsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBS SW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE3MzIgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh dHVzIFBSX05ld1RDUFNvY2tldFBhaXIoUFJGaWxlRGVzYyAqZmRzWzJdKTsKIyAxNzUyICIvdmFy L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRTb2NrTmFtZShQUkZpbGVEZXNjICpmZCwg UFJOZXRBZGRyICphZGRyKTsKIyAxNzc0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ Ul9HZXRQZWVyTmFtZShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKCmV4dGVybiBQ UlN0YXR1cyBQUl9HZXRTb2NrZXRPcHRpb24oCiAgICBQUkZpbGVEZXNjICpmZCwgUFJTb2NrZXRP cHRpb25EYXRhICpkYXRhKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9TZXRTb2NrZXRPcHRpb24oCiAg ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJTb2NrZXRPcHRpb25EYXRhICpkYXRhKTsKIyAxODA5 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TZXRGREluaGVyaXRhYmxlKAogICAg UFJGaWxlRGVzYyAqZmQsCiAgICBQUkJvb2wgaW5oZXJpdGFibGUpOwojIDE4MjkgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MgKiBQUl9HZXRJbmhlcml0ZWRGRChjb25zdCBjaGFyICpu YW1lKTsKIyAxODM5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgc3RydWN0IFBSRmlsZU1hcCBQUkZp bGVNYXA7CgoKCgp0eXBlZGVmIGVudW0gUFJGaWxlTWFwUHJvdGVjdCB7CiAgICBQUl9QUk9UX1JF QURPTkxZLAogICAgUFJfUFJPVF9SRUFEV1JJVEUsCiAgICBQUl9QUk9UX1dSSVRFQ09QWQp9IFBS RmlsZU1hcFByb3RlY3Q7CgpleHRlcm4gUFJGaWxlTWFwICogUFJfQ3JlYXRlRmlsZU1hcCgKICAg IFBSRmlsZURlc2MgKmZkLAogICAgUFJJbnQ2NCBzaXplLAogICAgUFJGaWxlTWFwUHJvdGVjdCBw cm90KTsKCgoKCmV4dGVybiBQUkludDMyIFBSX0dldE1lbU1hcEFsaWdubWVudCh2b2lkKTsKCmV4 dGVybiB2b2lkICogUFJfTWVtTWFwKAogICAgUFJGaWxlTWFwICpmbWFwLAogICAgUFJPZmZzZXQ2 NCBvZmZzZXQsCgogICAgUFJVaW50MzIgbGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9NZW1Vbm1h cCh2b2lkICphZGRyLCBQUlVpbnQzMiBsZW4pOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRmls ZU1hcChQUkZpbGVNYXAgKmZtYXApOwojIDE4ODMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh dHVzIFBSX0NyZWF0ZVBpcGUoCiAgICBQUkZpbGVEZXNjICoqcmVhZFBpcGUsCiAgICBQUkZpbGVE ZXNjICoqd3JpdGVQaXBlCik7CgoKCgoKc3RydWN0IFBSUG9sbERlc2MgewogICAgUFJGaWxlRGVz YyogZmQ7CiAgICBQUkludDE2IGluX2ZsYWdzOwogICAgUFJJbnQxNiBvdXRfZmxhZ3M7Cn07CiMg MTk2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Qb2xsKAogICAgUFJQb2xsRGVz YyAqcGRzLCBQUkludG4gbnBkcywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMjAwOCAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyAqIFBSX05ld1BvbGxhYmxlRXZlbnQodm9pZCk7 CgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZl bnQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldFBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZl bnQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1dhaXRGb3JQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2Mg KmV2ZW50KTsKCn0KIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5o IiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIgMQojIDcyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCmNsYXNzIG5zSVVSSSA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwN2EyMmNjMCwgMHgwY2U1LCAweDExZDMsIHsg MHg5MywgMHgzMSwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJu IGlpZDt9CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFNwZWMobnNBQ1N0cmluZyAmIGFTcGVjKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTcGVjKGNvbnN0IG5zQUNTdHJpbmcgJiBhU3BlYykgPSAwOwojIDk3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ cmVQYXRoKG5zQUNTdHJpbmcgJiBhUHJlUGF0aCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U2NoZW1lKG5zQUNTdHJpbmcgJiBhU2NoZW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRTY2hlbWUoY29uc3QgbnNBQ1N0cmluZyAmIGFTY2hlbWUpID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRVc2VyUGFzcyhuc0FDU3RyaW5nICYgYVVzZXJQYXNzKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VyUGFzcyhjb25zdCBuc0FDU3RyaW5nICYgYVVzZXJQYXNz KSA9IDA7CiMgMTIzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRVc2VybmFtZShuc0FDU3RyaW5nICYgYVVzZXJuYW1lKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VybmFtZShjb25zdCBuc0FDU3RyaW5nICYgYVVzZXJuYW1l KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhc3N3b3JkKG5zQUNTdHJpbmcgJiBhUGFz c3dvcmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhc3N3b3JkKGNvbnN0IG5zQUNTdHJp bmcgJiBhUGFzc3dvcmQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0UG9y dChuc0FDU3RyaW5nICYgYUhvc3RQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIb3N0 UG9ydChjb25zdCBuc0FDU3RyaW5nICYgYUhvc3RQb3J0KSA9IDA7CiMgMTQ3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0KG5z QUNTdHJpbmcgJiBhSG9zdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SG9zdChjb25zdCBu c0FDU3RyaW5nICYgYUhvc3QpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBvcnQo UFJJbnQzMiAqYVBvcnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBvcnQoUFJJbnQzMiBh UG9ydCkgPSAwOwojIDE2NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVVSSS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGF0aChuc0FDU3RyaW5nICYgYVBhdGgpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFBhdGgoY29uc3QgbnNBQ1N0cmluZyAmIGFQYXRoKSA9IDA7CiMgMTc3 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBFcXVhbHMobnNJVVJJICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2NoZW1lSXMoY29uc3QgY2hhciAqc2NoZW1lLCBQUkJvb2wgKl9yZXR2 YWwpID0gMDsKIyAxOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSVVSSSAqKl9yZXR2YWwpID0gMDsKIyAyMDMgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29s dmUoY29uc3QgbnNBQ1N0cmluZyAmIHJlbGF0aXZlUGF0aCwgbnNBQ1N0cmluZyAmIF9yZXR2YWwp ID0gMDsKIyAyMTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEFzY2lpU3BlYyhuc0FDU3RyaW5nICYgYUFzY2lpU3BlYykgPSAwOwoK CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFzY2lpSG9zdChuc0FDU3RyaW5nICYgYUFzY2lp SG9zdCkgPSAwOwojIDIzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVVSSS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0T3JpZ2luQ2hhcnNldChuc0FDU3RyaW5nICYgYU9yaWdpbkNo YXJzZXQpID0gMDsKCn07CiMgNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0 aWwuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0T2Jz ZXJ2ZXJQcm94eS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1 ZXN0T2JzZXJ2ZXJQcm94eS5oIgpjbGFzcyBuc0lFdmVudFF1ZXVlOwojIDM1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdE9ic2VydmVyUHJveHkuaCIKY2xhc3MgbnNJUmVx dWVzdE9ic2VydmVyUHJveHkgOiBwdWJsaWMgbnNJUmVxdWVzdE9ic2VydmVyIHsKIHB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsweDNjOWI1MzJlLCAweGRiODQsIDB4NGVjZiwgeyAweGFhLCAweDZhLCAweDRkLCAweDM4LCAw eGE5LCAweGM0LCAweGM1LCAweGYwIH19OyByZXR1cm4gaWlkO30KIyA0NyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3RPYnNlcnZlclByb3h5LmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbml0KG5zSVJlcXVlc3RPYnNlcnZlciAqb2JzZXJ2ZXIsIG5zSUV2ZW50UXVldWUgKmV2 ZW50USkgPSAwOwoKfTsKIyA1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRp bC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVN0cmVhbUxpc3RlbmVy UHJveHkuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlz dGVuZXJQcm94eS5oIgpjbGFzcyBuc0lFdmVudFF1ZXVlOwojIDM1ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXJQcm94eS5oIgpjbGFzcyBuc0lTdHJlYW1MaXN0 ZW5lclByb3h5IDogcHVibGljIG5zSVN0cmVhbUxpc3RlbmVyIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGU0MDBl Njg4LCAweDZiNTQsIDB4NGE4NCwgeyAweDhjLCAweDRlLCAweDU2LCAweGI0LCAweDAyLCAweDgx LCAweDk4LCAweDFhIH19OyByZXR1cm4gaWlkO30KIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25lY2tvL25zSVN0cmVhbUxpc3RlbmVyUHJveHkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQo bnNJU3RyZWFtTGlzdGVuZXIgKmFMaXN0ZW5lciwgbnNJRXZlbnRRdWV1ZSAqYUV2ZW50USwgUFJV aW50MzIgYUJ1ZmZlclNlZ21lbnRTaXplLCBQUlVpbnQzMiBhQnVmZmVyTWF4U2l6ZSkgPSAwOwoK fTsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lTdHJlYW1MaXN0ZW5lclBy b3h5LmgiCmNsYXNzIG5zSUFzeW5jU3RyZWFtTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3RyZWFtTGlz dGVuZXIgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4MWIwMTJhZGUsIDB4OTFiZiwgMHgxMWQzLCB7IDB4OGMsIDB4 ZDksIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoj IDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVN0cmVhbUxpc3RlbmVyUHJveHku aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJU3RyZWFtTGlzdGVuZXIgKmFSZWNlaXZlciwg bnNJRXZlbnRRdWV1ZSAqYUV2ZW50USkgPSAwOwoKfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tv L25zSVNpbXBsZVN0cmVhbUxpc3RlbmVyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25lY2tvL25zSVNpbXBsZVN0cmVhbUxpc3RlbmVyLmgiCmNsYXNzIG5zSU91dHB1dFN0cmVhbTsK IyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVNpbXBsZVN0cmVhbUxpc3RlbmVy LmgiCmNsYXNzIG5zSVNpbXBsZVN0cmVhbUxpc3RlbmVyIDogcHVibGljIG5zSVN0cmVhbUxpc3Rl bmVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGE5Yjg0ZjZhLCAweDA4MjQsIDB4NDI3OCwgeyAweGJhLCAweGU2 LCAweGJmLCAweGNhLCAweDA1LCAweDcwLCAweGEyLCAweDZlIH19OyByZXR1cm4gaWlkO30KIyA0 MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVNpbXBsZVN0cmVhbUxpc3RlbmVyLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSU91dHB1dFN0cmVhbSAqYVNpbmssIG5zSVJlcXVl c3RPYnNlcnZlciAqYU9ic2VydmVyKSA9IDA7Cgp9OwojIDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28v bnNJTG9hZEdyb3VwLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUxv YWRHcm91cC5oIgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwoKY2xhc3MgbnNJUmVxdWVzdE9i c2VydmVyOwoKY2xhc3MgbnNJSW50ZXJmYWNlUmVxdWVzdG9yOwojIDMxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJTG9hZEdyb3VwLmgiCmNsYXNzIG5zSUxvYWRHcm91cCA6IHB1Ymxp YyBuc0lSZXF1ZXN0IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkZTBhMzFjLCAweGZlYWYsIDB4NDAwZiwgeyAw eDlmLCAweDFlLCAweDRlLCAweGY3LCAweDFmLCAweDhiLCAweDIwLCAweGNjIH19OyByZXR1cm4g aWlkO30KIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUxvYWRHcm91cC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0R3JvdXBPYnNlcnZlcihuc0lSZXF1ZXN0T2JzZXJ2ZXIgKiAq YUdyb3VwT2JzZXJ2ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEdyb3VwT2JzZXJ2ZXIo bnNJUmVxdWVzdE9ic2VydmVyICogYUdyb3VwT2JzZXJ2ZXIpID0gMDsKIyA1OSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSUxvYWRHcm91cC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 RGVmYXVsdExvYWRSZXF1ZXN0KG5zSVJlcXVlc3QgKiAqYURlZmF1bHRMb2FkUmVxdWVzdCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdExvYWRSZXF1ZXN0KG5zSVJlcXVlc3QgKiBh RGVmYXVsdExvYWRSZXF1ZXN0KSA9IDA7CiMgNzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc0lMb2FkR3JvdXAuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFJlcXVlc3QobnNJUmVxdWVz dCAqYVJlcXVlc3QsIG5zSVN1cHBvcnRzICphQ29udGV4dCkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgUmVtb3ZlUmVxdWVzdChuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMg KmFDb250ZXh0LCBuc3Jlc3VsdCBhU3RhdHVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRSZXF1ZXN0cyhuc0lTaW1wbGVFbnVtZXJhdG9yICogKmFSZXF1ZXN0cykgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWN0aXZlQ291bnQoUFJVaW50MzIgKmFBY3RpdmVDb3Vu dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb3RpZmljYXRpb25DYWxsYmFja3Mo bnNJSW50ZXJmYWNlUmVxdWVzdG9yICogKmFOb3RpZmljYXRpb25DYWxsYmFja3MpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldE5vdGlmaWNhdGlvbkNhbGxiYWNrcyhuc0lJbnRlcmZhY2VSZXF1 ZXN0b3IgKiBhTm90aWZpY2F0aW9uQ2FsbGJhY2tzKSA9IDA7Cgp9OwojIDU3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bmVja28vbnNJSU9TZXJ2aWNlLmgiCmNsYXNzIG5zSVByb3RvY29sSGFuZGxlcjsKCmNsYXNzIG5z SUNoYW5uZWw7CgpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lGaWxlOwojIDQ0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJSU9TZXJ2aWNlLmgiCmNsYXNzIG5zSUlPU2VydmljZSA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiZGRlZGEzZiwgMHg5MDIwLCAweDRkMTIs IHsgMHg4YywgMHg3MCwgMHg5OCwgMHg0ZSwgMHhlOSwgMHhmNywgMHg5MywgMHg1ZSB9fTsgcmV0 dXJuIGlpZDt9CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2Uu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3RvY29sSGFuZGxlcihjb25zdCBjaGFyICphU2No ZW1lLCBuc0lQcm90b2NvbEhhbmRsZXIgKipfcmV0dmFsKSA9IDA7CiMgNjUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy b3RvY29sRmxhZ3MoY29uc3QgY2hhciAqYVNjaGVtZSwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsK IyA3NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlPU2VydmljZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgTmV3VVJJKGNvbnN0IG5zQUNTdHJpbmcgJiBhU3BlYywgY29uc3QgY2hhciAq YU9yaWdpbkNoYXJzZXQsIG5zSVVSSSAqYUJhc2VVUkksIG5zSVVSSSAqKl9yZXR2YWwpID0gMDsK IyA4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlPU2VydmljZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgTmV3RmlsZVVSSShuc0lGaWxlICphRmlsZSwgbnNJVVJJICoqX3JldHZhbCkg PSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSU9TZXJ2aWNlLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBOZXdDaGFubmVsRnJvbVVSSShuc0lVUkkgKmFVUkksIG5zSUNoYW5u ZWwgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0NoYW5uZWwoY29u c3QgbnNBQ1N0cmluZyAmIGFTcGVjLCBjb25zdCBjaGFyICphT3JpZ2luQ2hhcnNldCwgbnNJVVJJ ICphQmFzZVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyAxMTAgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9m ZmxpbmUoUFJCb29sICphT2ZmbGluZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T2ZmbGlu ZShQUkJvb2wgYU9mZmxpbmUpID0gMDsKIyAxMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFsbG93UG9ydChQUkludDMyIGFQ b3J0LCBjb25zdCBjaGFyICphU2NoZW1lLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAxNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEV4dHJhY3RTY2hlbWUoY29uc3QgbnNBQ1N0cmluZyAmIHVybFN0cmluZywgbnNBQ1N0cmlu ZyAmIF9yZXR2YWwpID0gMDsKCn07CiMgNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9u c05ldFV0aWwuaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQ2hhbm5l bC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCmNs YXNzIG5zSVVSSTsKCmNsYXNzIG5zSUludGVyZmFjZVJlcXVlc3RvcjsKCmNsYXNzIG5zSUlucHV0 U3RyZWFtOwoKY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCmNsYXNzIG5zSUNoYW5uZWwgOiBwdWJsaWMgbnNJUmVx dWVzdCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhjNjNhMDU1YSwgMHhhNjc2LCAweDRlNzEsIHsgMHhiZiwgMHgz YywgMHg2YywgMHhmYSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgxOCB9fTsgcmV0dXJuIGlpZDt9CiMg NjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRPcmlnaW5hbFVSSShuc0lVUkkgKiAqYU9yaWdpbmFsVVJJKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRPcmlnaW5hbFVSSShuc0lVUkkgKiBhT3JpZ2luYWxVUkkpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VVJJKG5zSVVSSSAqICphVVJJKSA9IDA7CiMgODEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRPd25lcihuc0lTdXBwb3J0cyAqICphT3duZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldE93bmVyKG5zSVN1cHBvcnRzICogYU93bmVyKSA9IDA7CiMgOTQgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb3Rp ZmljYXRpb25DYWxsYmFja3MobnNJSW50ZXJmYWNlUmVxdWVzdG9yICogKmFOb3RpZmljYXRpb25D YWxsYmFja3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5vdGlmaWNhdGlvbkNhbGxiYWNr cyhuc0lJbnRlcmZhY2VSZXF1ZXN0b3IgKiBhTm90aWZpY2F0aW9uQ2FsbGJhY2tzKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlY3VyaXR5SW5mbyhuc0lTdXBwb3J0cyAqICphU2Vj dXJpdHlJbmZvKSA9IDA7CiMgMTExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQ2hh bm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudFR5cGUobnNBQ1N0cmluZyAmIGFD b250ZW50VHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29udGVudFR5cGUoY29uc3Qg bnNBQ1N0cmluZyAmIGFDb250ZW50VHlwZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29udGVudENoYXJzZXQobnNBQ1N0cmluZyAmIGFDb250ZW50Q2hhcnNldCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0Q29udGVudENoYXJzZXQoY29uc3QgbnNBQ1N0cmluZyAmIGFDb250 ZW50Q2hhcnNldCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudExlbmd0 aChQUkludDMyICphQ29udGVudExlbmd0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29u dGVudExlbmd0aChQUkludDMyIGFDb250ZW50TGVuZ3RoKSA9IDA7CiMgMTQwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbihu c0lJbnB1dFN0cmVhbSAqKl9yZXR2YWwpID0gMDsKIyAxNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY09wZW4obnNJU3Ry ZWFtTGlzdGVuZXIgKmFMaXN0ZW5lciwgbnNJU3VwcG9ydHMgKmFDb250ZXh0KSA9IDA7CiMgMTYy ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQ2hhbm5lbC5oIgogIGVudW0geyBMT0FE X0RPQ1VNRU5UX1VSSSA9IDY1NTM2VSB9OwoKCgoKCiAgZW51bSB7IExPQURfUkVUQVJHRVRFRF9E T0NVTUVOVF9VUkkgPSAxMzEwNzJVIH07CgoKCgoKCiAgZW51bSB7IExPQURfUkVQTEFDRSA9IDI2 MjE0NFUgfTsKCgoKCgogIGVudW0geyBMT0FEX0lOSVRJQUxfRE9DVU1FTlRfVVJJID0gNTI0Mjg4 VSB9OwoKfTsKIyA2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAy CiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlucHV0U3RyZWFtQ2hhbm5lbC5o IiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1dFN0cmVhbUNoYW5u ZWwuaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u ZWNrby9uc0lJbnB1dFN0cmVhbUNoYW5uZWwuaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW1DaGFubmVs IDogcHVibGljIG5zSUNoYW5uZWwgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NTYwYTY0Y2UsIDB4NmQ2NiwgMHg0 NGRiLCB7IDB4YjMsIDB4OGUsIDB4ODYsIDB4NDQsIDB4NjksIDB4YzUsIDB4MmQsIDB4MDMgfX07 IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkkobnNJVVJJICphVVJJ KSA9IDA7CiMgNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1dFN0cmVhbUNo YW5uZWwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRTdHJlYW0obnNJSW5wdXRTdHJl YW0gKiAqYUNvbnRlbnRTdHJlYW0pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRlbnRT dHJlYW0obnNJSW5wdXRTdHJlYW0gKiBhQ29udGVudFN0cmVhbSkgPSAwOwoKfTsKIyA2MyAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9ydC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lUcmFuc3BvcnQuaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW07CgpjbGFzcyBu c0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lUcmFuc3BvcnRFdmVudFNpbms7CgpjbGFzcyBuc0lF dmVudFF1ZXVlOwojIDMzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVHJhbnNwb3J0 LmgiCmNsYXNzIG5zSVRyYW5zcG9ydCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhjYmIwYmFlYiwgMHg1ZmNiLCAweDQwOGIsIHsgMHhhMiwgMHhiZSwgMHg5ZiwgMHg4ZiwgMHhj OSwgMHg4ZCwgMHgwYSwgMHhmMSB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIGVudW0geyBPUEVOX0JM T0NLSU5HID0gMVUgfTsKCiAgZW51bSB7IE9QRU5fVU5CVUZGRVJFRCA9IDJVIH07CiMgNTggIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lUcmFuc3BvcnQuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IE9wZW5JbnB1dFN0cmVhbShQUlVpbnQzMiBhRmxhZ3MsIFBSVWludDMyIGFTZWdtZW50U2l6 ZSwgUFJVaW50MzIgYVNlZ21lbnRDb3VudCwgbnNJSW5wdXRTdHJlYW0gKipfcmV0dmFsKSA9IDA7 CiMgNzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lUcmFuc3BvcnQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IE9wZW5PdXRwdXRTdHJlYW0oUFJVaW50MzIgYUZsYWdzLCBQUlVpbnQzMiBh U2VnbWVudFNpemUsIFBSVWludDMyIGFTZWdtZW50Q291bnQsIG5zSU91dHB1dFN0cmVhbSAqKl9y ZXR2YWwpID0gMDsKIyA4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9y dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2UobnNyZXN1bHQgYVJlYXNvbikgPSAwOwojIDk1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVHJhbnNwb3J0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRFdmVudFNpbmsobnNJVHJhbnNwb3J0RXZlbnRTaW5rICphU2luaywgbnNJRXZl bnRRdWV1ZSAqYUV2ZW50USkgPSAwOwoKCgoKCgogIGVudW0geyBTVEFUVVNfUkVBRElORyA9IDIx NTIzOTg4NTZVIH07CgogIGVudW0geyBTVEFUVVNfV1JJVElORyA9IDIxNTIzOTg4NTdVIH07Cgp9 OwojIDE5MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9ydC5oIgpjbGFz cyBuc0lUcmFuc3BvcnRFdmVudFNpbmsgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4NTYxZGU4YWYsIDB4MWI3NCwgMHg0Y2Q0LCB7IDB4ODQsIDB4NzksIDB4ODksIDB4NDQsIDB4 N2QsIDB4NDgsIDB4MTgsIDB4NWMgfX07IHJldHVybiBpaWQ7fQojIDIxMyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9ydC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25UcmFu c3BvcnRTdGF0dXMobnNJVHJhbnNwb3J0ICphVHJhbnNwb3J0LCBuc3Jlc3VsdCBhU3RhdHVzLCBQ UlVpbnQzMiBhUHJvZ3Jlc3MsIFBSVWludDMyIGFQcm9ncmVzc01heCkgPSAwOwoKfTsKIyA2NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiCmNsYXNzIG5zSUh0dHBIZWFkZXJWaXNp dG9yOwojIDM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIK Y2xhc3MgbnNJSHR0cENoYW5uZWwgOiBwdWJsaWMgbnNJQ2hhbm5lbCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5 Mjc3ZmUwOSwgMHhmMGNjLCAweDRjZDksIHsgMHhiYiwgMHhjZSwgMHg1OCwgMHgxZCwgMHhkOSwg MHg0YiwgMHgwMiwgMHg2MCB9fTsgcmV0dXJuIGlpZDt9CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVxdWVz dE1ldGhvZChuc0FDU3RyaW5nICYgYVJlcXVlc3RNZXRob2QpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFJlcXVlc3RNZXRob2QoY29uc3QgbnNBQ1N0cmluZyAmIGFSZXF1ZXN0TWV0aG9kKSA9 IDA7CiMgNzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVmZXJyZXIobnNJVVJJICogKmFSZWZlcnJlcikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmZXJyZXIobnNJVVJJICogYVJlZmVycmVyKSA9IDA7CiMg ODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVxdWVzdEhlYWRlcihjb25zdCBuc0FDU3RyaW5nICYgYUhlYWRlciwg bnNBQ1N0cmluZyAmIF9yZXR2YWwpID0gMDsKIyAxMDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u ZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVxdWVzdEhlYWRl cihjb25zdCBuc0FDU3RyaW5nICYgYUhlYWRlciwgY29uc3QgbnNBQ1N0cmluZyAmIGFWYWx1ZSwg UFJCb29sIGFNZXJnZSkgPSAwOwojIDExOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z SUh0dHBDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBWaXNpdFJlcXVlc3RIZWFkZXJzKG5z SUh0dHBIZWFkZXJWaXNpdG9yICphVmlzaXRvcikgPSAwOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGxv d1BpcGVsaW5pbmcoUFJCb29sICphQWxsb3dQaXBlbGluaW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRBbGxvd1BpcGVsaW5pbmcoUFJCb29sIGFBbGxvd1BpcGVsaW5pbmcpID0gMDsKIyAx NDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVkaXJlY3Rpb25MaW1pdChQUlVpbnQzMiAqYVJlZGlyZWN0aW9uTGlt aXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlZGlyZWN0aW9uTGltaXQoUFJVaW50MzIg YVJlZGlyZWN0aW9uTGltaXQpID0gMDsKIyAxNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVzcG9uc2VTdGF0dXMo UFJVaW50MzIgKmFSZXNwb25zZVN0YXR1cykgPSAwOwojIDE3MCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXNwb25z ZVN0YXR1c1RleHQobnNBQ1N0cmluZyAmIGFSZXNwb25zZVN0YXR1c1RleHQpID0gMDsKIyAxODMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0UmVxdWVzdFN1Y2NlZWRlZChQUkJvb2wgKmFSZXF1ZXN0U3VjY2VlZGVkKSA9 IDA7CiMgMTk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IG5zQUNTdHJpbmcgJiBo ZWFkZXIsIG5zQUNTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CiMgMjIwICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlc3Bv bnNlSGVhZGVyKGNvbnN0IG5zQUNTdHJpbmcgJiBoZWFkZXIsIGNvbnN0IG5zQUNTdHJpbmcgJiB2 YWx1ZSwgUFJCb29sIG1lcmdlKSA9IDA7CiMgMjMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVj a28vbnNJSHR0cENoYW5uZWwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFZpc2l0UmVzcG9uc2VIZWFk ZXJzKG5zSUh0dHBIZWFkZXJWaXNpdG9yICphVmlzaXRvcikgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgSXNOb1N0b3JlUmVzcG9uc2UoUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMjQ3ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IElzTm9DYWNoZVJlc3BvbnNlKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyA2NSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSURvd25sb2FkZXIuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJRG93bmxvYWRlci5oIgpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lM b2FkR3JvdXA7CgpjbGFzcyBuc0lJbnRlcmZhY2VSZXF1ZXN0b3I7CgpjbGFzcyBuc0lGaWxlOwoK Y2xhc3MgbnNJRG93bmxvYWRlcjsKIyAzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z SURvd25sb2FkZXIuaCIKY2xhc3MgbnNJRG93bmxvYWRPYnNlcnZlciA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHg2ZTBmYzk2MiwgMHg0YTZmLCAweDRmYTYsIHsgMHg4MywgMHgx ZiwgMHg4YywgMHgyNiwgMHhjNSwgMHg1NCwgMHg0MCwgMHg3ZiB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IE9uRG93bmxvYWRDb21wbGV0ZShuc0lEb3dubG9hZGVyICpkb3du bG9hZGVyLCBuc0lTdXBwb3J0cyAqY3R4dCwgbnNyZXN1bHQgc3RhdHVzLCBuc0lGaWxlICpyZXN1 bHQpID0gMDsKCn07CiMgMTAyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJRG93bmxv YWRlci5oIgpjbGFzcyBuc0lEb3dubG9hZGVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweDk2MzJjYzBkLCAweDg2NGQsIDB4NGY5MiwgeyAweGI3LCAweGU1LCAweGJkLCAweDgw LCAweDk3LCAweGM0LCAweGU5LCAweGE1IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNy ZXN1bHQgSW5pdChuc0lVUkkgKnVyaSwgbnNJRG93bmxvYWRPYnNlcnZlciAqY29tcGxldGlvbk9i c2VydmVyLCBuc0lTdXBwb3J0cyAqY3R4dCwgUFJCb29sIHN5bmNocm9ub3VzLCBuc0lMb2FkR3Jv dXAgKmxvYWRHcm91cCwgbnNJSW50ZXJmYWNlUmVxdWVzdG9yICpub3RpZmljYXRpb25DYWxsYmFj a3MsIG5zTG9hZEZsYWdzIGxvYWRBdHRyaWJ1dGVzKSA9IDA7Cgp9OwojIDY2ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbmVja28vbnNJUmVzdW1hYmxlRW50aXR5SUQuaCIgMQojIDI4ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJUmVzdW1hYmxlRW50aXR5SUQuaCIKY2xhc3MgbnNJUmVzdW1hYmxlRW50 aXR5SUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzlkZjM4ZDQsIDB4MWRk MSwgMHgxMWIyLCB7IDB4ODEsIDB4YWUsIDB4YzksIDB4ZTcsIDB4NjcsIDB4MjUsIDB4NmQsIDB4 MWIgfX07IHJldHVybiBpaWQ7fQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6ZShQUlVpbnQz MiAqYVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoUFJVaW50MzIgYVNpemUp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkKFBSVGltZSAqYUxh c3RNb2RpZmllZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWVkKFBSVGlt ZSBhTGFzdE1vZGlmaWVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1YWxzKG5zSVJl c3VtYWJsZUVudGl0eUlEICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDY3ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTG9hZGVyLmgiIDEKIyAyNiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVN0cmVhbUxvYWRlci5oIgpjbGFzcyBuc0lSZXF1ZXN0OwoKY2xh c3MgbnNJVVJJOwoKY2xhc3MgbnNJTG9hZEdyb3VwOwoKY2xhc3MgbnNJU3RyZWFtTG9hZGVyOwoK Y2xhc3MgbnNJSW50ZXJmYWNlUmVxdWVzdG9yOwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bmVja28vbnNJU3RyZWFtTG9hZGVyLmgiCmNsYXNzIG5zSVN0cmVhbUxvYWRlck9ic2VydmVyIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDM1OWY3OTkwLCAweGQ0ZTksIDB4MTFk MywgeyAweGExLCAweGE1LCAweDAwLCAweDUwLCAweDA0LCAweDFjLCAweGFmLCAweDQ0IH19OyBy ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdHJlYW1Db21wbGV0ZShuc0lTdHJl YW1Mb2FkZXIgKmxvYWRlciwgbnNJU3VwcG9ydHMgKmN0eHQsIG5zcmVzdWx0IHN0YXR1cywgUFJV aW50MzIgcmVzdWx0TGVuZ3RoLCBjb25zdCBjaGFyICpyZXN1bHQpID0gMDsKCn07CiMgMTExICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTG9hZGVyLmgiCmNsYXNzIG5zSVN0 cmVhbUxvYWRlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMWQzNzM2MCwg MHg4ZTVhLCAweDExZDMsIHsgMHg5MywgMHhhZCwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhm ZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJQ2hh bm5lbCAqYUNoYW5uZWwsIG5zSVN0cmVhbUxvYWRlck9ic2VydmVyICphT2JzZXJ2ZXIsIG5zSVN1 cHBvcnRzICphQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROdW1CeXRl c1JlYWQoUFJVaW50MzIgKmFOdW1CeXRlc1JlYWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0UmVxdWVzdChuc0lSZXF1ZXN0ICogKmFSZXF1ZXN0KSA9IDA7Cgp9OwojIDY4ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJVW5pY2hhclN0cmVhbUxvYWRlci5oIiAxCiMgMTcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVbmljaGFyU3RyZWFtTG9hZGVyLmgiCmNsYXNzIG5zSVVu aWNoYXJJbnB1dFN0cmVhbTsKCmNsYXNzIG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI7CgpjbGFzcyBu c0lDaGFubmVsOwojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVW5pY2hhclN0 cmVhbUxvYWRlci5oIgpjbGFzcyBuc0lVbmljaGFyU3RyZWFtTG9hZGVyT2JzZXJ2ZXIgOiBwdWJs aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZTA2ZThiMDgsIDB4OGNkZCwgMHg0NTAzLCB7 IDB4YTAsIDB4YTAsIDB4NmYsIDB4M2IsIDB4OTQsIDB4MzYsIDB4MDIsIDB4YWYgfX07IHJldHVy biBpaWQ7fQojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVW5pY2hhclN0cmVh bUxvYWRlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25EZXRlcm1pbmVDaGFyc2V0KG5zSVVuaWNo YXJTdHJlYW1Mb2FkZXIgKmFMb2FkZXIsIG5zSVN1cHBvcnRzICphQ29udGV4dCwgY29uc3QgY2hh ciAqYUZpcnN0U2VnbWVudCwgUFJVaW50MzIgYUxlbmd0aCwgbnNBQ1N0cmluZyAmIF9yZXR2YWwp ID0gMDsKIyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVVuaWNoYXJTdHJlYW1M b2FkZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3RyZWFtQ29tcGxldGUobnNJVW5pY2hhclN0 cmVhbUxvYWRlciAqYUxvYWRlciwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBuc3Jlc3VsdCBhU3Rh dHVzLCBuc0lVbmljaGFySW5wdXRTdHJlYW0gKmFVbmljaGFyRGF0YSkgPSAwOwoKfTsKIyAxMjkg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVbmljaGFyU3RyZWFtTG9hZGVyLmgiCmNs YXNzIG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4OGEzZWNhMTYsIDB4MTY3ZSwgMHg0NDNkLCB7IDB4OTQsIDB4ODUsIDB4N2UsIDB4ODQs IDB4ZWQsIDB4ODIsIDB4MmUsIDB4OTUgfX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgREVGQVVM VF9TRUdNRU5UX1NJWkUgPSA0MDk2VSB9OwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l Y2tvL25zSVVuaWNoYXJTdHJlYW1Mb2FkZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJ Q2hhbm5lbCAqYUNoYW5uZWwsIG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXJPYnNlcnZlciAqYU9ic2Vy dmVyLCBuc0lTdXBwb3J0cyAqYUNvbnRleHQsIFBSVWludDMyIGFTZWdtZW50U2l6ZSkgPSAwOwoK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hhbm5lbChuc0lDaGFubmVsICogKmFDaGFubmVs KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQUNTdHJpbmcgJiBh Q2hhcnNldCkgPSAwOwoKfTsKIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0 VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVBpcGUuaCIgMQoj IDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUGlwZS5oIgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBc3luY0lucHV0U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUFzeW5jSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJSW5w dXRTdHJlYW1Ob3RpZnk7CgpjbGFzcyBuc0lFdmVudFF1ZXVlOwojIDI5ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20vbnNJQXN5bmNJbnB1dFN0cmVhbS5oIgpjbGFzcyBuc0lBc3luY0lucHV0 U3RyZWFtIDogcHVibGljIG5zSUlucHV0U3RyZWFtIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGNjOTExZTA5LCAw eDJhMDIsIDB4NGQyZCwgeyAweGJhLCAweDRiLCAweGIyLCAweGFmLCAweGIxLCAweDczLCAweGU5 LCAweDZkIH19OyByZXR1cm4gaWlkO30KIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSUFzeW5jSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENsb3NlRXgobnNyZXN1 bHQgcmVhc29uKSA9IDA7CiMgNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBc3lu Y0lucHV0U3RyZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY1dhaXQobnNJSW5wdXRTdHJl YW1Ob3RpZnkgKmFOb3RpZnksIFBSVWludDMyIGFSZXF1ZXN0ZWRDb3VudCwgbnNJRXZlbnRRdWV1 ZSAqYUV2ZW50USkgPSAwOwoKfTsKIyAxMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lBc3luY0lucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3RyZWFtTm90aWZ5IDogcHVibGlj IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIwYzY2NWEzLCAweDBlYmYsIDB4NGViYiwgeyAw eDk3LCAweGJhLCAweDc5LCAweDQyLCAweDQ4LCAweGJmLCAweGE4LCAweGZlIH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgT25JbnB1dFN0cmVhbVJlYWR5KG5zSUFzeW5jSW5w dXRTdHJlYW0gKmFTdHJlYW0pID0gMDsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lQaXBlLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ QXN5bmNPdXRwdXRTdHJlYW0uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJQXN5bmNPdXRwdXRTdHJlYW0uaCIKY2xhc3MgbnNJT3V0cHV0U3RyZWFtTm90aWZ5OwoKY2xh c3MgbnNJRXZlbnRRdWV1ZTsKIyAyOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUFz eW5jT3V0cHV0U3RyZWFtLmgiCmNsYXNzIG5zSUFzeW5jT3V0cHV0U3RyZWFtIDogcHVibGljIG5z SU91dHB1dFN0cmVhbSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNGJhMWI1MywgMHhmYWQwLCAweDQwMzMsIHsg MHg5MSwgMHhjOSwgMHgzZSwgMHgyNCwgMHhkYiwgMHgyMiwgMHgwNywgMHg5YyB9fTsgcmV0dXJu IGlpZDt9CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBc3luY091dHB1dFN0 cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2VFeChuc3Jlc3VsdCByZWFzb24pID0gMDsK IyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUFzeW5jT3V0cHV0U3RyZWFtLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY1dhaXQobnNJT3V0cHV0U3RyZWFtTm90aWZ5ICphTm90 aWZ5LCBQUlVpbnQzMiBhUmVxdWVzdGVkQ291bnQsIG5zSUV2ZW50UXVldWUgKmFFdmVudFEpID0g MDsKCn07CiMgMTMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQXN5bmNPdXRwdXRT dHJlYW0uaCIKY2xhc3MgbnNJT3V0cHV0U3RyZWFtTm90aWZ5IDogcHVibGljIG5zSVN1cHBvcnRz IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweDYxNGRlZjExLCAweDFkNzcsIDB4NDA5YiwgeyAweDgxLCAweDUzLCAw eGVhLCAweDNhLCAweGU1LCAweGJhLCAweGJjLCAweDNjIH19OyByZXR1cm4gaWlkO30KCgogIHZp cnR1YWwgbnNyZXN1bHQgT25PdXRwdXRTdHJlYW1SZWFkeShuc0lBc3luY091dHB1dFN0cmVhbSAq YVN0cmVhbSkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVBp cGUuaCIgMgoKCgoKCgpjbGFzcyBuc0lNZW1vcnk7CiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS9uc0lQaXBlLmgiCmNsYXNzIG5zSVBpcGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4ZjQyMTFhYmMsIDB4NjFiMywgMHgxMWQ0LCB7IDB4OTgsIDB4NzcsIDB4MDAs IDB4YzAsIDB4NGYsIDB4YTAsIDB4Y2YsIDB4NGEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBJbml0KFBSQm9vbCBub25CbG9ja2luZ0lucHV0LCBQUkJvb2wgbm9uQmxv Y2tpbmdPdXRwdXQsIFBSVWludDMyIHNlZ21lbnRTaXplLCBQUlVpbnQzMiBzZWdtZW50Q291bnQs IG5zSU1lbW9yeSAqc2VnbWVudEFsbG9jYXRvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRJbnB1dFN0cmVhbShuc0lBc3luY0lucHV0U3RyZWFtICogKmFJbnB1dFN0cmVhbSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRwdXRTdHJlYW0obnNJQXN5bmNPdXRwdXRTdHJlYW0g KiAqYU91dHB1dFN0cmVhbSkgPSAwOwoKfTsKIyAxMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lQaXBlLmgiCmNsYXNzIG5zSVNlYXJjaGFibGVJbnB1dFN0cmVhbSA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4YzM5ZWY2MiwgMHhmN2M5LCAweDExZDQsIHsgMHg5 OCwgMHhmNSwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgwZSwgMHg5YiB9fTsgcmV0dXJuIGlp ZDt9CiMgMTQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUGlwZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgU2VhcmNoKGNvbnN0IGNoYXIgKmZvclN0cmluZywgUFJCb29sIGlnbm9yZUNh c2UsIFBSQm9vbCAqZm91bmQsIFBSVWludDMyICpvZmZzZXRTZWFyY2hlZFRvKSA9IDA7Cgp9Owoj IDE5NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVBpcGUuaCIKZXh0ZXJuIG5zcmVz dWx0Ck5TX05ld1BpcGUyKG5zSUFzeW5jSW5wdXRTdHJlYW0gKipwaXBlSW4sCiAgICAgICAgICAg IG5zSUFzeW5jT3V0cHV0U3RyZWFtICoqcGlwZU91dCwKICAgICAgICAgICAgUFJCb29sIG5vbkJs b2NraW5nSW5wdXQgPSAwLAogICAgICAgICAgICBQUkJvb2wgbm9uQmxvY2tpbmdPdXRwdXQgPSAw LAogICAgICAgICAgICBQUlVpbnQzMiBzZWdtZW50U2l6ZSA9IDAsCiAgICAgICAgICAgIFBSVWlu dDMyIHNlZ21lbnRDb3VudCA9IDAsCiAgICAgICAgICAgIG5zSU1lbW9yeSAqc2VnbWVudEFsbG9j ID0gMCk7CmlubGluZSBuc3Jlc3VsdApOU19OZXdQaXBlKG5zSUlucHV0U3RyZWFtICoqcGlwZUlu LAogICAgICAgICAgIG5zSU91dHB1dFN0cmVhbSAqKnBpcGVPdXQsCiAgICAgICAgICAgUFJVaW50 MzIgc2VnbWVudFNpemUgPSAwLAogICAgICAgICAgIFBSVWludDMyIG1heFNpemUgPSAwLAogICAg ICAgICAgIFBSQm9vbCBub25CbG9ja2luZ0lucHV0ID0gMCwKICAgICAgICAgICBQUkJvb2wgbm9u QmxvY2tpbmdPdXRwdXQgPSAwLAogICAgICAgICAgIG5zSU1lbW9yeSAqc2VnbWVudEFsbG9jID0g MCkKewogICAgUFJVaW50MzIgc2VnbWVudENvdW50OwogICAgaWYgKHNlZ21lbnRTaXplID09IDAp CiAgICAgICAgc2VnbWVudENvdW50ID0gMDsKICAgIGVsc2UKICAgICAgICBzZWdtZW50Q291bnQg PSBtYXhTaXplIC8gc2VnbWVudFNpemU7CiAgICBuc0lBc3luY0lucHV0U3RyZWFtICppbjsKICAg IG5zSUFzeW5jT3V0cHV0U3RyZWFtICpvdXQ7CiAgICBuc3Jlc3VsdCBydiA9IE5TX05ld1BpcGUy KCZpbiwgJm91dCwgbm9uQmxvY2tpbmdJbnB1dCwgbm9uQmxvY2tpbmdPdXRwdXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRTaXplLCBzZWdtZW50Q291bnQsIHNlZ21lbnRB bGxvYyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnBpcGVJ biA9IGluOwogICAgKnBpcGVPdXQgPSBvdXQ7CiAgICByZXR1cm4gMDsKfQojIDcwICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJUHJvdG9jb2xIYW5kbGVyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25lY2tvL25zSVByb3RvY29sSGFuZGxlci5oIgpjbGFzcyBuc0lVUkk7CgpjbGFzcyBu c0lDaGFubmVsOwojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUHJvdG9jb2xI YW5kbGVyLmgiCmNsYXNzIG5zSVByb3RvY29sSGFuZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHgxNWZkNjk0MCwgMHg4ZWE3LCAweDExZDMsIHsgMHg5MywgMHhhZCwgMHgw MCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFNjaGVtZShuc0FDU3RyaW5nICYgYVNjaGVtZSkgPSAwOwoKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRQb3J0KFBSSW50MzIgKmFEZWZhdWx0UG9y dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm90b2NvbEZsYWdzKFBSVWludDMy ICphUHJvdG9jb2xGbGFncykgPSAwOwojIDg1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28v bnNJUHJvdG9jb2xIYW5kbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdVUkkoY29uc3QgbnNB Q1N0cmluZyAmIGFTcGVjLCBjb25zdCBjaGFyICphT3JpZ2luQ2hhcnNldCwgbnNJVVJJICphQmFz ZVVSSSwgbnNJVVJJICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdD aGFubmVsKG5zSVVSSSAqYVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyAxMDMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lQcm90b2NvbEhhbmRsZXIuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IEFsbG93UG9ydChQUkludDMyIHBvcnQsIGNvbnN0IGNoYXIgKnNjaGVtZSwgUFJC b29sICpfcmV0dmFsKSA9IDA7CiMgMTE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJ UHJvdG9jb2xIYW5kbGVyLmgiCiAgZW51bSB7IFVSSV9TVEQgPSAwVSB9OwoKCgoKICBlbnVtIHsg VVJJX05PUkVMQVRJVkUgPSAxVSB9OwoKCgoKICBlbnVtIHsgVVJJX05PQVVUSCA9IDJVIH07CiMg MTM4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUHJvdG9jb2xIYW5kbGVyLmgiCiAg ZW51bSB7IEFMTE9XU19QUk9YWSA9IDRVIH07CgoKCgoKCgogIGVudW0geyBBTExPV1NfUFJPWFlf SFRUUCA9IDhVIH07Cgp9OwojIDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRV dGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJRmlsZVByb3RvY29s SGFuZGxlci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lGaWxlUHJv dG9jb2xIYW5kbGVyLmgiCmNsYXNzIG5zSUZpbGU7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uZWNrby9uc0lGaWxlUHJvdG9jb2xIYW5kbGVyLmgiCmNsYXNzIG5zSUZpbGVQcm90b2NvbEhh bmRsZXIgOiBwdWJsaWMgbnNJUHJvdG9jb2xIYW5kbGVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDk4N2ZiMDgz LCAweGQ3ZmYsIDB4NDZkYywgeyAweDllLCAweGUzLCAweGFiLCAweDZlLCAweDUyLCAweDUwLCAw eDFkLCAweDUzIH19OyByZXR1cm4gaWlkO30KIyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l Y2tvL25zSUZpbGVQcm90b2NvbEhhbmRsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0ZpbGVV UkkobnNJRmlsZSAqYUZpbGUsIG5zSVVSSSAqKl9yZXR2YWwpID0gMDsKIyA1MCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSUZpbGVQcm90b2NvbEhhbmRsZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFVSTFNwZWNGcm9tRmlsZShuc0lGaWxlICpmaWxlLCBuc0FDU3RyaW5nICYgX3Jl dHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZUZyb21VUkxTcGVjKGNv bnN0IG5zQUNTdHJpbmcgJiB1cmwsIG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDcyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSUxvY2FsRmlsZS5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJRmlsZS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lG aWxlLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3I7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lGaWxlLmgiCmNsYXNzIG5zSUZpbGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4 ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCgoKCgoK ICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9IDBVIH07CgogIGVudW0geyBESVJFQ1RPUllfVFlQ RSA9IDFVIH07CiMgNjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGaWxlLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgbnNBU3RyaW5nICYgbm9kZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBBcHBlbmROYXRpdmUoY29uc3QgbnNBQ1N0cmluZyAmIG5vZGUpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTm9ybWFsaXplKHZvaWQpID0gMDsKIyAxMDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBD cmVhdGUoUFJVaW50MzIgdHlwZSwgUFJVaW50MzIgcGVybWlzc2lvbnMpID0gMDsKCgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRMZWFmTmFtZShuc0FTdHJpbmcgJiBhTGVhZk5hbWUpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlYWZOYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFMZWFmTmFt ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXRpdmVMZWFmTmFtZShuc0FDU3RyaW5n ICYgYU5hdGl2ZUxlYWZOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYXRpdmVMZWFm TmFtZShjb25zdCBuc0FDU3RyaW5nICYgYU5hdGl2ZUxlYWZOYW1lKSA9IDA7CiMgMTQ0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29w eVRvKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgbnNBU3RyaW5nICYgbmV3TmFtZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9OYXRpdmUobnNJRmlsZSAqbmV3UGFyZW50RGly LCBjb25zdCBuc0FDU3RyaW5nICYgbmV3TmFtZSkgPSAwOwojIDE1OSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlUb0ZvbGxvd2lu Z0xpbmtzKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgbnNBU3RyaW5nICYgbmV3TmFtZSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rc05hdGl2ZShuc0lG aWxlICpuZXdQYXJlbnREaXIsIGNvbnN0IG5zQUNTdHJpbmcgJiBuZXdOYW1lKSA9IDA7CiMgMTk2 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgTW92ZVRvKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgbnNBU3RyaW5nICYgbmV3TmFt ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG9OYXRpdmUobnNJRmlsZSAqbmV3UGFy ZW50RGlyLCBjb25zdCBuc0FDU3RyaW5nICYgbmV3TmFtZSkgPSAwOwojIDIwOCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZShQ UkJvb2wgcmVjdXJzaXZlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Np b25zKFBSVWludDMyICphUGVybWlzc2lvbnMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBl cm1pc3Npb25zKFBSVWludDMyIGFQZXJtaXNzaW9ucykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQZXJtaXNzaW9uc09mTGluayhQUlVpbnQzMiAqYVBlcm1pc3Npb25zT2ZMaW5rKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQZXJtaXNzaW9uc09mTGluayhQUlVpbnQzMiBhUGVybWlz c2lvbnNPZkxpbmspID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0TW9kaWZp ZWRUaW1lKFBSSW50NjQgKmFMYXN0TW9kaWZpZWRUaW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRMYXN0TW9kaWZpZWRUaW1lKFBSSW50NjQgYUxhc3RNb2RpZmllZFRpbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkVGltZU9mTGluayhQUkludDY0ICphTGFz dE1vZGlmaWVkVGltZU9mTGluaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlm aWVkVGltZU9mTGluayhQUkludDY0IGFMYXN0TW9kaWZpZWRUaW1lT2ZMaW5rKSA9IDA7CiMgMjQx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0RmlsZVNpemUoUFJJbnQ2NCAqYUZpbGVTaXplKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRGaWxlU2l6ZShQUkludDY0IGFGaWxlU2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRGaWxlU2l6ZU9mTGluayhQUkludDY0ICphRmlsZVNpemVPZkxpbmspID0gMDsKIyAyNzMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUYXJnZXQobnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXROYXRpdmVUYXJnZXQobnNBQ1N0cmluZyAmIGFOYXRpdmVUYXJnZXQpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UGF0aChuc0FTdHJpbmcgJiBhUGF0aCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROYXRpdmVQYXRoKG5zQUNTdHJpbmcgJiBhTmF0aXZlUGF0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ c0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3ltbGlu ayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTcGVjaWFs KFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDM0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShQUlVpbnQzMiB0eXBl LCBQUlVpbnQzMiBwZXJtaXNzaW9ucykgPSAwOwojIDM1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSUZpbGUgKipfcmV0 dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lGaWxlICppbkZpbGUs IFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnMo bnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVjdXIsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRmlsZSAqICphUGFyZW50KSA9IDA7CiMg MzgzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1wbGVFbnVtZXJhdG9yICogKmFEaXJlY3Rv cnlFbnRyaWVzKSA9IDA7Cgp9OwojIDgxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SUZpbGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEaXJlY3RvcnlTZXJ2 aWNlVXRpbHMuaCIgMQojIDI4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEaXJlY3Rv cnlTZXJ2aWNlVXRpbHMuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUHJv cGVydGllcy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lQcm9wZXJ0 aWVzLmgiCmNsYXNzIG5zSVByb3BlcnRpZXMgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4Nzg2NTA1ODIsIDB4NGU5MywgMHg0YjYwLCB7IDB4OGUsIDB4ODUsIDB4MjYsIDB4ZWIs IDB4ZDMsIDB4ZWIsIDB4MTQsIDB4Y2EgfX07IHJldHVybiBpaWQ7fQojIDM4ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJUHJvcGVydGllcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 KGNvbnN0IGNoYXIgKnByb3AsIGNvbnN0IG5zSUlEICYgaWlkLCB2b2lkICogKnJlc3VsdCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXQoY29uc3QgY2hhciAqcHJvcCwgbnNJU3VwcG9y dHMgKnZhbHVlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhcyhjb25zdCBjaGFyICpw cm9wLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmRl ZmluZShjb25zdCBjaGFyICpwcm9wKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEtl eXMoUFJVaW50MzIgKmNvdW50LCBjaGFyICoqKmtleXMpID0gMDsKCn07CiMgMjkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0RpcmVjdG9yeVNlcnZpY2VVdGlscy5oIiAyCgoKCgppbmxp bmUgbnNyZXN1bHQKTlNfR2V0U3BlY2lhbERpcmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGly TmFtZSwgbnNJRmlsZSogKnJlc3VsdCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29u c3QgbnNDSUQga0RpcmVjdG9yeVNlcnZpY2VDSUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQz LHsweDhjLCAweDljLCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBu c0NPTVB0cjxuc0lQcm9wZXJ0aWVzPiBzZXJ2KGRvX0dldFNlcnZpY2Uoa0RpcmVjdG9yeVNlcnZp Y2VDSUQsICZydikpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAg ICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gZGlyOwogICAgcnYgPSBzZXJ2LT5HZXQoc3BlY2lhbERp ck5hbWUsIG5zQ09NVHlwZUluZm88bnNJRmlsZT46OkdldElJRCgpLCBnZXR0ZXJfQWRkUmVmcyhk aXIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgKnJlc3Vs dCA9IHN0YXRpY19jYXN0PCBuc0lGaWxlKiA+KHN0YXRpY19jYXN0PCBuc0lTdXBwb3J0cyogPihk aXIpKTsKICAgIGlmICgqcmVzdWx0KQogICAgICAgICgqcmVzdWx0KS0+QWRkUmVmKCk7CiAgICBy ZXR1cm4gMDsKfQojIDgyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUZpbGUuaCIg MgojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTG9jYWxGaWxlLmgiIDIKCgoK CgoKCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiIDEKIyA0MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiAi QyIgewoKdHlwZWRlZiBzdHJ1Y3QgUFJMaWJyYXJ5IFBSTGlicmFyeTsKCnR5cGVkZWYgc3RydWN0 IFBSU3RhdGljTGlua1RhYmxlIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB2b2lkICgqZnAp KCk7Cn0gUFJTdGF0aWNMaW5rVGFibGU7CiMgNTkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJT dGF0dXMgUFJfU2V0TGlicmFyeVBhdGgoY29uc3QgY2hhciAqcGF0aCk7CiMgNjkgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By bGluay5oIgpleHRlcm4gY2hhciogUFJfR2V0TGlicmFyeVBhdGgodm9pZCk7CiMgODIgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BybGluay5oIgpleHRlcm4gY2hhciogUFJfR2V0TGlicmFyeU5hbWUoY29uc3QgY2hhciAqZGly LCBjb25zdCBjaGFyICpsaWIpOwoKCgoKCmV4dGVybiB2b2lkIFBSX0ZyZWVMaWJyYXJ5TmFtZShj aGFyICptZW0pOwojIDEwMiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUkxpYnJhcnkqIFBSX0xv YWRMaWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUpOwojIDEyMyAiL3Zhci90bXAvcG9ydGFnZS9tb3pp bGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCnR5cGVk ZWYgZW51bSBQUkxpYlNwZWNUeXBlIHsKICAgIFBSX0xpYlNwZWNfUGF0aG5hbWUsCiAgICBQUl9M aWJTcGVjX01hY05hbWVkRnJhZ21lbnQsCiAgICBQUl9MaWJTcGVjX01hY0luZGV4ZWRGcmFnbWVu dAp9IFBSTGliU3BlY1R5cGU7CgpzdHJ1Y3QgRlNTcGVjOwoKdHlwZWRlZiBzdHJ1Y3QgUFJMaWJT cGVjIHsKICAgIFBSTGliU3BlY1R5cGUgdHlwZTsKICAgIHVuaW9uIHsKCiAgICAgICAgY29uc3Qg Y2hhciAqcGF0aG5hbWU7CgoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAg fSBtYWNfbmFtZWRfZnJhZ21lbnQ7CgoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjb25z dCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIFBSVWludDMyIGluZGV4OwogICAg ICAgIH0gbWFjX2luZGV4ZWRfZnJhZ21lbnQ7CiAgICB9IHZhbHVlOwp9IFBSTGliU3BlYzsKIyAx NjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJMaWJyYXJ5ICoKUFJfTG9hZExpYnJhcnlXaXRo RmxhZ3MoCiAgICBQUkxpYlNwZWMgbGliU3BlYywKICAgIFBSSW50biBmbGFncwopOwojIDE4MSAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9VbmxvYWRMaWJyYXJ5KFBSTGlicmFy eSAqbGliKTsKIyAxOTEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJv bChQUkxpYnJhcnkgKmxpYiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMjAxICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsu aCIKdHlwZWRlZiB2b2lkICgqUFJGdW5jUHRyKSgpOwpleHRlcm4gUFJGdW5jUHRyIFBSX0ZpbmRG dW5jdGlvblN5bWJvbChQUkxpYnJhcnkgKmxpYiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMjE0ICIv dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmxpbmsuaCIKZXh0ZXJuIHZvaWQqIFBSX0ZpbmRTeW1ib2xBbmRMaWJyYXJ5KGNvbnN0 IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSTGlicmFyeSogKmxpYik7CiMgMjI1ICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJu IFBSRnVuY1B0ciBQUl9GaW5kRnVuY3Rpb25TeW1ib2xBbmRMaWJyYXJ5KGNvbnN0IGNoYXIgKm5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBSTGlicmFyeSogKmxpYik7CiMgMjM5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFy eSogUFJfTG9hZFN0YXRpY0xpYnJhcnkoCiAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBQUlN0 YXRpY0xpbmtUYWJsZSAqdGFibGUpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKiBQUl9HZXRMaWJyYXJ5 RmlsZVBhdGhuYW1lKGNvbnN0IGNoYXIgKm5hbWUsIFBSRnVuY1B0ciBhZGRyKTsKCn0KIyAxOSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUxvY2FsRmlsZS5oIiAyCiMgMzcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKY2xhc3MgbnNJTG9jYWxGaWxl IDogcHVibGljIG5zSUZpbGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YWE2MTBmMjAsIDB4YTg4OSwgMHgxMWQz LCB7IDB4OGMsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07IHJl dHVybiBpaWQ7fQojIDYwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTG9jYWxGaWxl LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aFBhdGgoY29uc3QgbnNBU3RyaW5nICYgZmls ZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdFdpdGhOYXRpdmVQYXRoKGNvbnN0 IG5zQUNTdHJpbmcgJiBmaWxlUGF0aCkgPSAwOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aEZpbGUobnNJ TG9jYWxGaWxlICphRmlsZSkgPSAwOwojIDkyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2xsb3dMaW5rcyhQUkJvb2wg KmFGb2xsb3dMaW5rcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9sbG93TGlua3MoUFJC b29sIGFGb2xsb3dMaW5rcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuTlNQUkZpbGVE ZXNjKFBSSW50MzIgZmxhZ3MsIFBSSW50MzIgbW9kZSwgUFJGaWxlRGVzYyAqICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5BTlNJRmlsZURlc2MoY29uc3QgY2hhciAqbW9k ZSwgRklMRSAqICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoUFJMaWJy YXJ5ICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlza1NwYWNlQXZh aWxhYmxlKFBSSW50NjQgKmFEaXNrU3BhY2VBdmFpbGFibGUpID0gMDsKIyAxMTkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFw cGVuZFJlbGF0aXZlUGF0aChjb25zdCBuc0FTdHJpbmcgJiByZWxhdGl2ZUZpbGVQYXRoKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZlTmF0aXZlUGF0aChjb25zdCBuc0FD U3RyaW5nICYgcmVsYXRpdmVGaWxlUGF0aCkgPSAwOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL25zSUxvY2FsRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVyc2lzdGVu dERlc2NyaXB0b3IobnNBQ1N0cmluZyAmIGFQZXJzaXN0ZW50RGVzY3JpcHRvcikgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0UGVyc2lzdGVudERlc2NyaXB0b3IoY29uc3QgbnNBQ1N0cmluZyAm IGFQZXJzaXN0ZW50RGVzY3JpcHRvcikgPSAwOwojIDE0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUxvY2FsRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZWFsKHZvaWQpID0g MDsKIyAxNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IExhdW5jaCh2b2lkKSA9IDA7CiMgMTY4ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWxhdGl2 ZURlc2NyaXB0b3IobnNJTG9jYWxGaWxlICpmcm9tRmlsZSwgbnNBQ1N0cmluZyAmIF9yZXR2YWwp ID0gMDsKIyAxODIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlbGF0aXZlRGVzY3JpcHRvcihuc0lMb2NhbEZpbGUgKmZy b21GaWxlLCBjb25zdCBuc0FDU3RyaW5nICYgcmVsYXRpdmVEZXNjKSA9IDA7Cgp9OwojIDc0ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJRmlsZVN0cmVhbXMuaCIgMQojIDIxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJRmlsZVN0cmVhbXMuaCIKY2xhc3MgbnNJRmlsZTsKIyAzNCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUZpbGVTdHJlYW1zLmgiCmNsYXNzIG5zSUZpbGVJ bnB1dFN0cmVhbSA6IHB1YmxpYyBuc0lJbnB1dFN0cmVhbSB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlM2Q1NmEy MCwgMHhjN2VjLCAweDExZDMsIHsgMHg4YywgMHhkYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywg MHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u ZWNrby9uc0lGaWxlU3RyZWFtcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGaWxlICpm aWxlLCBQUkludDMyIGlvRmxhZ3MsIFBSSW50MzIgcGVybSwgUFJJbnQzMiBiZWhhdmlvckZsYWdz KSA9IDA7CiMgNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lGaWxlU3RyZWFtcy5o IgogIGVudW0geyBERUxFVEVfT05fQ0xPU0UgPSAyIH07CgoKCgoKICBlbnVtIHsgQ0xPU0VfT05f RU9GID0gNCB9OwoKCgoKCgogIGVudW0geyBSRU9QRU5fT05fUkVXSU5EID0gOCB9OwoKfTsKIyAx MzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lGaWxlU3RyZWFtcy5oIgpjbGFzcyBu c0lGaWxlT3V0cHV0U3RyZWFtIDogcHVibGljIG5zSU91dHB1dFN0cmVhbSB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhlNmY2ODA0MCwgMHhjN2VjLCAweDExZDMsIHsgMHg4YywgMHhkYSwgMHgwMCwgMHg2MCwgMHhi MCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgMTQ3ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJRmlsZVN0cmVhbXMuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQo bnNJRmlsZSAqZmlsZSwgUFJJbnQzMiBpb0ZsYWdzLCBQUkludDMyIHBlcm0sIFBSSW50MzIgYmVo YXZpb3JGbGFncykgPSAwOwoKfTsKIyA3NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z TmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVByb3RvY29s UHJveHlTZXJ2aWNlLmgiIDEKIyAyMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVBy b3RvY29sUHJveHlTZXJ2aWNlLmgiCmNsYXNzIG5zSVByb3h5SW5mbzsKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSVByb3RvY29sUHJveHlTZXJ2aWNlLmgiCmNsYXNzIG5zSVBy b3RvY29sUHJveHlTZXJ2aWNlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQ5 NWNjOTgwLCAweGUwZDQsIDB4MTFkMywgeyAweGExLCAweGE4LCAweDAwLCAweDUwLCAweDA0LCAw eDFjLCAweGFmLCAweDQ0IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UHJveHlFbmFibGVkKFBSQm9vbCAqYVByb3h5RW5hYmxlZCkgPSAwOwoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgRXhhbWluZUZvclByb3h5KG5zSVVSSSAqYVVSSSwgbnNJUHJveHlJbmZvICoqX3JldHZh bCkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UHJveHlJbmZvKGNvbnN0IGNoYXIgKnR5 cGUsIGNvbnN0IGNoYXIgKmhvc3QsIFBSSW50MzIgcG9ydCwgbnNJUHJveHlJbmZvICoqX3JldHZh bCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkTm9Qcm94eUZvcihjb25zdCBjaGFy ICpob3N0LCBQUkludDMyIHBvcnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTm9Q cm94eUZvcihjb25zdCBjaGFyICpob3N0LCBQUkludDMyIHBvcnQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQ29uZmlndXJlRnJvbVBBQyhjb25zdCBjaGFyICp1cmwpID0gMDsKCn07CiMgNzYg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0aWwuaCIgMgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lQcm94eUluZm8uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJUHJveHlJbmZvLmgiCmNsYXNzIG5zSVByb3h5SW5mbyA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiNjVkMjJiMCwgMHgxZGQxLCAweDExYjIsIHsg MHg4ZiwgMHg5NSwgMHg5MiwgMHgwZSwgMHg1YiwgMHg3YiwgMHg1NiwgMHhmMCB9fTsgcmV0dXJu IGlpZDt9CgoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEhvc3Qodm9pZCkgPSAwOwoKCiAgdmlydHVh bCBQUkludDMyIFBvcnQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBjb25zdCBjaGFyKiBUeXBlKHZv aWQpID0gMDsKCn07CiMgNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0aWwu aCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQnVmZmVyZWRTdHJlYW1z LmgiIDEKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUJ1ZmZlcmVkU3RyZWFt cy5oIgpjbGFzcyBuc0lCdWZmZXJlZElucHV0U3RyZWFtIDogcHVibGljIG5zSUlucHV0U3RyZWFt IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweDYxNmY1YjQ4LCAweGRhMDksIDB4MTFkMywgeyAweDhjLCAweGRhLCAw eDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJSW5wdXRTdHJlYW0gKmZpbGxGcm9tU3RyZWFtLCBQ UlVpbnQzMiBidWZmZXJTaXplKSA9IDA7Cgp9OwojIDEwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25lY2tvL25zSUJ1ZmZlcmVkU3RyZWFtcy5oIgpjbGFzcyBuc0lCdWZmZXJlZE91dHB1dFN0cmVh bSA6IHB1YmxpYyBuc0lPdXRwdXRTdHJlYW0gewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NjQ3NjM3OGEsIDB4ZGEw OSwgMHgxMWQzLCB7IDB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4 YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lPdXRw dXRTdHJlYW0gKnNpbmtUb1N0cmVhbSwgUFJVaW50MzIgYnVmZmVyU2l6ZSkgPSAwOwoKfTsKIyA3 OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlucHV0U3RyZWFtUHVtcC5oIiAxCiMgMTcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1dFN0cmVhbVB1bXAuaCIKY2xhc3MgbnNJSW5w dXRTdHJlYW07CgpjbGFzcyBuc0lTdHJlYW1MaXN0ZW5lcjsKIyAyOSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25lY2tvL25zSUlucHV0U3RyZWFtUHVtcC5oIgpjbGFzcyBuc0lJbnB1dFN0cmVhbVB1 bXAgOiBwdWJsaWMgbnNJUmVxdWVzdCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmN2RkOGQ4NywgMHhlZmE3LCAw eDQ4Y2MsIHsgMHg5ZCwgMHg5NCwgMHhkZiwgMHg0OCwgMHg4ZCwgMHhmMCwgMHhiMywgMHhmOSB9 fTsgcmV0dXJuIGlpZDt9CiMgNjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1 dFN0cmVhbVB1bXAuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJSW5wdXRTdHJlYW0gKmFT dHJlYW0sIFBSSW50MzIgYVN0cmVhbVBvcywgUFJJbnQzMiBhU3RyZWFtTGVuLCBQUlVpbnQzMiBh U2VnbWVudFNpemUsIFBSVWludDMyIGFTZWdtZW50Q291bnQsIFBSQm9vbCBhQ2xvc2VXaGVuRG9u ZSkgPSAwOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSW5wdXRTdHJlYW1Q dW1wLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY1JlYWQobnNJU3RyZWFtTGlzdGVuZXIgKmFM aXN0ZW5lciwgbnNJU3VwcG9ydHMgKmFMaXN0ZW5lckNvbnRleHQpID0gMDsKCn07CiMgODAgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0aWwuaCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lBc3luY1N0cmVhbUNvcGllci5oIiAxCiMgMTcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lBc3luY1N0cmVhbUNvcGllci5oIgpjbGFzcyBuc0lJbnB1 dFN0cmVhbTsKCmNsYXNzIG5zSU91dHB1dFN0cmVhbTsKCmNsYXNzIG5zSVJlcXVlc3RPYnNlcnZl cjsKIyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUFzeW5jU3RyZWFtQ29waWVy LmgiCmNsYXNzIG5zSUFzeW5jU3RyZWFtQ29waWVyIDogcHVibGljIG5zSVJlcXVlc3QgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ZWFhNDkxNDEsIDB4YzIxYywgMHg0ZmU4LCB7IDB4YTcsIDB4OWIsIDB4NzcsIDB4 ODYsIDB4MGEsIDB4MzksIDB4MTAsIDB4YWEgfX07IHJldHVybiBpaWQ7fQojIDUzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJQXN5bmNTdHJlYW1Db3BpZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEluaXQobnNJSW5wdXRTdHJlYW0gKmFTb3VyY2UsIG5zSU91dHB1dFN0cmVhbSAqYVNp bmssIFBSQm9vbCBhU291cmNlQnVmZmVyZWQsIFBSQm9vbCBhU2lua0J1ZmZlcmVkLCBQUlVpbnQz MiBhQ2h1bmtTaXplKSA9IDA7CiMgNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lB c3luY1N0cmVhbUNvcGllci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXN5bmNDb3B5KG5zSVJlcXVl c3RPYnNlcnZlciAqYU9ic2VydmVyLCBuc0lTdXBwb3J0cyAqYU9ic2VydmVyQ29udGV4dCkgPSAw OwoKfTsKIyA4MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCgoK aW5saW5lIGNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldElPU2VydmljZShuc3Jlc3VsdCog ZXJyb3IgPSAwKQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0lPU2VydmljZUNJRCA9IHsgMHg5 YWM5ZTc3MCwgMHgxOGJjLCAweDExZDMsIHsweDkzLCAweDM3LCAweDAwLCAweDEwLCAweDRiLCAw eGEwLCAweGZkLCAweDQwfSB9OwogICAgcmV0dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGtJT1NlcnZp Y2VDSUQsIDAsIGVycm9yKTsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld1VSSShuc0lVUkkgKipy ZXN1bHQsCiAgICAgICAgICBjb25zdCBuc0FDU3RyaW5nICZzcGVjLAogICAgICAgICAgY29uc3Qg Y2hhciAqY2hhcnNldCA9IDAsCiAgICAgICAgICBuc0lVUkkgKmJhc2VVUkkgPSAwLAogICAgICAg ICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAgICBu c0NPTVB0cjxuc0lJT1NlcnZpY2U+IHNlcnY7CiAgICBpZiAoaW9TZXJ2aWNlID09IDApIHsKICAg ICAgICBzZXJ2ID0gZG9fR2V0SU9TZXJ2aWNlKCZydik7CiAgICAgICAgaWYgKCgocnYpICYgMHg4 MDAwMDAwMCkpIHJldHVybiBydjsKICAgICAgICBpb1NlcnZpY2UgPSBzZXJ2LmdldCgpOwogICAg fQoKICAgIHJldHVybiBpb1NlcnZpY2UtPk5ld1VSSShzcGVjLCBjaGFyc2V0LCBiYXNlVVJJLCBy ZXN1bHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3VVJJKG5zSVVSSSogKnJlc3VsdCwKICAg ICAgICAgIGNvbnN0IG5zQVN0cmluZyYgc3BlYywKICAgICAgICAgIGNvbnN0IGNoYXIgKmNoYXJz ZXQgPSAwLAogICAgICAgICAgbnNJVVJJKiBiYXNlVVJJID0gMCwKICAgICAgICAgIG5zSUlPU2Vy dmljZSogaW9TZXJ2aWNlID0gMCkKewogICAgcmV0dXJuIE5TX05ld1VSSShyZXN1bHQsIE5TX0Nv bnZlcnRVQ1MydG9VVEY4KHNwZWMpLCBjaGFyc2V0LCBiYXNlVVJJLCBpb1NlcnZpY2UpOwp9Cgpp bmxpbmUgbnNyZXN1bHQKTlNfTmV3VVJJKG5zSVVSSSogKnJlc3VsdCwKICAgICAgICAgIGNvbnN0 IGNoYXIgKnNwZWMsCiAgICAgICAgICBuc0lVUkkqIGJhc2VVUkkgPSAwLAogICAgICAgICAgbnNJ SU9TZXJ2aWNlKiBpb1NlcnZpY2UgPSAwKQp7CiAgICByZXR1cm4gTlNfTmV3VVJJKHJlc3VsdCwg bnNEZXBlbmRlbnRDU3RyaW5nKHNwZWMpLCAwLCBiYXNlVVJJLCBpb1NlcnZpY2UpOwp9Cgppbmxp bmUgbnNyZXN1bHQKTlNfTmV3RmlsZVVSSShuc0lVUkkqICpyZXN1bHQsCiAgICAgICAgICAgICAg bnNJRmlsZSogc3BlYywKICAgICAgICAgICAgICBuc0lJT1NlcnZpY2UqIGlvU2VydmljZSA9IDAp CnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09NUHRyPG5zSUlPU2VydmljZT4gc2VydjsKICAg IGlmIChpb1NlcnZpY2UgPT0gMCkgewogICAgICAgIHNlcnYgPSBkb19HZXRJT1NlcnZpY2UoJnJ2 KTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgICAgIGlv U2VydmljZSA9IHNlcnYuZ2V0KCk7CiAgICB9CgogICAgcmV0dXJuIGlvU2VydmljZS0+TmV3Rmls ZVVSSShzcGVjLCByZXN1bHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3Q2hhbm5lbChuc0lD aGFubmVsKiAqcmVzdWx0LAogICAgICAgICAgICAgIG5zSVVSSSogdXJpLAogICAgICAgICAgICAg IG5zSUlPU2VydmljZSogaW9TZXJ2aWNlID0gMCwKICAgICAgICAgICAgICBuc0lMb2FkR3JvdXAq IGxvYWRHcm91cCA9IDAsCiAgICAgICAgICAgICAgbnNJSW50ZXJmYWNlUmVxdWVzdG9yKiBub3Rp ZmljYXRpb25DYWxsYmFja3MgPSAwLAogICAgICAgICAgICAgIG5zTG9hZEZsYWdzIGxvYWRBdHRy aWJ1dGVzID0gc3RhdGljX2Nhc3Q8IG5zTG9hZEZsYWdzID4obnNJUmVxdWVzdDo6TE9BRF9OT1JN QUwpKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAgICBuc0NPTVB0cjxuc0lJT1NlcnZpY2U+IHNlcnY7 CiAgICBpZiAoaW9TZXJ2aWNlID09IDApIHsKICAgICAgICBzZXJ2ID0gZG9fR2V0SU9TZXJ2aWNl KCZydik7CiAgICAgICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgICAg ICBpb1NlcnZpY2UgPSBzZXJ2LmdldCgpOwogICAgfQoKICAgIG5zSUNoYW5uZWwqIGNoYW5uZWwg PSAwOwogICAgcnYgPSBpb1NlcnZpY2UtPk5ld0NoYW5uZWxGcm9tVVJJKHVyaSwgJmNoYW5uZWwp OwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBpZiAobG9hZEdy b3VwKSB7CiAgICAgICAgcnYgPSBjaGFubmVsLT5TZXRMb2FkR3JvdXAobG9hZEdyb3VwKTsKICAg ICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgfQogICAgaWYgKG5v dGlmaWNhdGlvbkNhbGxiYWNrcykgewogICAgICAgIHJ2ID0gY2hhbm5lbC0+U2V0Tm90aWZpY2F0 aW9uQ2FsbGJhY2tzKG5vdGlmaWNhdGlvbkNhbGxiYWNrcyk7CiAgICAgICAgaWYgKCgocnYpICYg MHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIH0KICAgIGlmIChsb2FkQXR0cmlidXRlcyAhPSBu c0lSZXF1ZXN0OjpMT0FEX05PUk1BTCkgewogICAgICAgIHJ2ID0gY2hhbm5lbC0+U2V0TG9hZEZs YWdzKGxvYWRBdHRyaWJ1dGVzKTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0 dXJuIHJ2OwogICAgfQoKICAgICpyZXN1bHQgPSBjaGFubmVsOwogICAgcmV0dXJuIHJ2Owp9CgoK CgoKCgppbmxpbmUgbnNyZXN1bHQKTlNfT3BlblVSSShuc0lJbnB1dFN0cmVhbSogKnJlc3VsdCwK ICAgICAgICAgICBuc0lVUkkqIHVyaSwKICAgICAgICAgICBuc0lJT1NlcnZpY2UqIGlvU2Vydmlj ZSA9IDAsCiAgICAgICAgICAgbnNJTG9hZEdyb3VwKiBsb2FkR3JvdXAgPSAwLAogICAgICAgICAg IG5zSUludGVyZmFjZVJlcXVlc3Rvciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0gMCwKICAgICAg ICAgICBuc0xvYWRGbGFncyBsb2FkQXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PCBuc0xvYWRGbGFn cyA+KG5zSVJlcXVlc3Q6OkxPQURfTk9STUFMKSkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NP TVB0cjxuc0lDaGFubmVsPiBjaGFubmVsOwoKICAgIHJ2ID0gTlNfTmV3Q2hhbm5lbChnZXR0ZXJf QWRkUmVmcyhjaGFubmVsKSwgdXJpLCBpb1NlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAg bG9hZEdyb3VwLCBub3RpZmljYXRpb25DYWxsYmFja3MsIGxvYWRBdHRyaWJ1dGVzKTsKICAgIGlm ICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgbnNJSW5wdXRTdHJlYW0qIGlu U3RyOwogICAgcnYgPSBjaGFubmVsLT5PcGVuKCZpblN0cik7CiAgICBpZiAoKChydikgJiAweDgw MDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgICpyZXN1bHQgPSBpblN0cjsKICAgIHJldHVybiBydjsK fQoKaW5saW5lIG5zcmVzdWx0Ck5TX09wZW5VUkkobnNJU3RyZWFtTGlzdGVuZXIqIGFDb25zdW1l ciwKICAgICAgICAgICBuc0lTdXBwb3J0cyogY29udGV4dCwKICAgICAgICAgICBuc0lVUkkqIHVy aSwKICAgICAgICAgICBuc0lJT1NlcnZpY2UqIGlvU2VydmljZSA9IDAsCiAgICAgICAgICAgbnNJ TG9hZEdyb3VwKiBsb2FkR3JvdXAgPSAwLAogICAgICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3Rv ciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0gMCwKICAgICAgICAgICBuc0xvYWRGbGFncyBsb2Fk QXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PCBuc0xvYWRGbGFncyA+KG5zSVJlcXVlc3Q6OkxPQURf Tk9STUFMKSkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lDaGFubmVsPiBjaGFu bmVsOwoKICAgIHJ2ID0gTlNfTmV3Q2hhbm5lbChnZXR0ZXJfQWRkUmVmcyhjaGFubmVsKSwgdXJp LCBpb1NlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgbG9hZEdyb3VwLCBub3RpZmljYXRp b25DYWxsYmFja3MsIGxvYWRBdHRyaWJ1dGVzKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDAp KSByZXR1cm4gcnY7CgogICAgcnYgPSBjaGFubmVsLT5Bc3luY09wZW4oYUNvbnN1bWVyLCBjb250 ZXh0KTsKICAgIHJldHVybiBydjsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX01ha2VBYnNvbHV0ZVVS SShuc0FDU3RyaW5nICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FDU3RyaW5n ICZzcGVjLAogICAgICAgICAgICAgICAgICAgbnNJVVJJICpiYXNlVVJJLAogICAgICAgICAgICAg ICAgICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7CiAgICBpZiAoIWJhc2VVUkkpIHsK ICAgICAgICA7CiAgICAgICAgcmVzdWx0ID0gc3BlYzsKICAgICAgICByZXR1cm4gMDsKICAgIH0K CiAgICBpZiAoc3BlYy5Jc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIGJhc2VVUkktPkdldFNwZWMo cmVzdWx0KTsKCiAgICByZXR1cm4gYmFzZVVSSS0+UmVzb2x2ZShzcGVjLCByZXN1bHQpOwp9Cgpp bmxpbmUgbnNyZXN1bHQKTlNfTWFrZUFic29sdXRlVVJJKGNoYXIgKipyZXN1bHQsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpzcGVjLAogICAgICAgICAgICAgICAgICAgbnNJVVJJICpi YXNlVVJJLAogICAgICAgICAgICAgICAgICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7 CiAgICBuc0NBdXRvU3RyaW5nIHJlc3VsdEJ1ZjsKCiAgICBuc3Jlc3VsdCBydiA9IE5TX01ha2VB YnNvbHV0ZVVSSShyZXN1bHRCdWYsIG5zRGVwZW5kZW50Q1N0cmluZyhzcGVjKSwgYmFzZVVSSSwg aW9TZXJ2aWNlKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAg KnJlc3VsdCA9IFRvTmV3Q1N0cmluZyhyZXN1bHRCdWYpOwogICAgcmV0dXJuICpyZXN1bHQgPyAw IDogKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTWFrZUFi c29sdXRlVVJJKG5zQVN0cmluZyAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgY29uc3QgbnNB U3RyaW5nICZzcGVjLAogICAgICAgICAgICAgICAgICAgbnNJVVJJICpiYXNlVVJJLAogICAgICAg ICAgICAgICAgICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7CiAgICBpZiAoIWJhc2VV UkkpIHsKICAgICAgICA7CiAgICAgICAgcmVzdWx0ID0gc3BlYzsKICAgICAgICByZXR1cm4gMDsK ICAgIH0KCiAgICBuc0NBdXRvU3RyaW5nIHJlc3VsdEJ1ZjsKICAgIG5zcmVzdWx0IHJ2OwoKICAg IGlmIChzcGVjLklzRW1wdHkoKSkKICAgICAgICBydiA9IGJhc2VVUkktPkdldFNwZWMocmVzdWx0 QnVmKTsKICAgIGVsc2UKICAgICAgICBydiA9IGJhc2VVUkktPlJlc29sdmUoTlNfQ29udmVydFVD UzJ0b1VURjgoc3BlYyksIHJlc3VsdEJ1Zik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkg cmV0dXJuIHJ2OwoKICAgIHJlc3VsdCA9IE5TX0NvbnZlcnRVVEY4dG9VQ1MyKHJlc3VsdEJ1Zik7 CiAgICByZXR1cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld0lucHV0U3RyZWFtQ2hhbm5l bChuc0lDaGFubmVsICoqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJICp1 cmksCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lJbnB1dFN0cmVhbSAqc3RyZWFtLAogICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBQ1N0cmluZyAmY29udGVudFR5cGUgPSBuc0Rl cGVuZGVudENTdHJpbmcoIiIsIFBSVWludDMyKHNpemVvZigiIiktMSkpLAogICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbnNBQ1N0cmluZyAmY29udGVudENoYXJzZXQgPSBuc0RlcGVuZGVu dENTdHJpbmcoIiIsIFBSVWludDMyKHNpemVvZigiIiktMSkpKQp7CiAgICBuc3Jlc3VsdCBydjsK CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0lucHV0U3RyZWFtQ2hhbm5lbENJRCA9IHsgMHg2ZGRi MDUwYywgMHgwZDA0LCAweDExZDQsIHsweDk4LCAweDZlLCAweDAwLCAweGMwLCAweDRmLCAweGEw LCAweGNmLCAweDRhfSB9OwogICAgbnNDT01QdHI8bnNJSW5wdXRTdHJlYW1DaGFubmVsPiBjaGFu bmVsID0KICAgICAgICBkb19DcmVhdGVJbnN0YW5jZShrSW5wdXRTdHJlYW1DaGFubmVsQ0lELCAm cnYpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBydiA9IGNo YW5uZWwtPlNldFVSSSh1cmkpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBy djsKICAgIHJ2ID0gY2hhbm5lbC0+U2V0Q29udGVudFN0cmVhbShzdHJlYW0pOwogICAgaWYgKCgo cnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIHJ2ID0gY2hhbm5lbC0+U2V0Q29udGVu dFR5cGUoY29udGVudFR5cGUpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBy djsKICAgIHJ2ID0gY2hhbm5lbC0+U2V0Q29udGVudENoYXJzZXQoY29udGVudENoYXJzZXQpOwog ICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAoKnJlc3VsdCA9IGNo YW5uZWwpLT5BZGRSZWYoKTsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3 SW5wdXRTdHJlYW1QdW1wKG5zSUlucHV0U3RyZWFtUHVtcCAqKnJlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgIG5zSUlucHV0U3RyZWFtICpzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICBQ UkludDMyIHN0cmVhbVBvcyA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBzdHJl YW1MZW4gPSAtMSwKICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIHNlZ3NpemUgPSAwLAog ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgc2VnY291bnQgPSAwLAogICAgICAgICAgICAg ICAgICAgICAgUFJCb29sIGNsb3NlV2hlbkRvbmUgPSAwKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAg ICBzdGF0aWMgY29uc3QgbnNDSUQga0lucHV0U3RyZWFtUHVtcENJRCA9IHsgMHhjY2QwZTk2MCwg MHg3OTQ3LCAweDQ2MzUsIHsweGI3LCAweDBlLCAweDRjLCAweDY2LCAweDFiLCAweDYzLCAweGQ2 LCAweDc1fSB9OwogICAgbnNDT01QdHI8bnNJSW5wdXRTdHJlYW1QdW1wPiBwdW1wID0KICAgICAg ICBkb19DcmVhdGVJbnN0YW5jZShrSW5wdXRTdHJlYW1QdW1wQ0lELCAmcnYpOwogICAgaWYgKCgo cnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBydiA9IHB1bXAtPkluaXQoc3RyZWFt LCBzdHJlYW1Qb3MsIHN0cmVhbUxlbiwKICAgICAgICAgICAgICAgICAgICBzZWdzaXplLCBzZWdj b3VudCwgY2xvc2VXaGVuRG9uZSk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJu IHJ2OwoKICAgICgqcmVzdWx0ID0gcHVtcCktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KCgoK CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3QXN5bmNTdHJlYW1Db3BpZXIobnNJQXN5bmNTdHJlYW1D b3BpZXIgKipyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3RyZWFtICpz b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSU91dHB1dFN0cmVhbSAqc2luaywKICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIHNvdXJjZUJ1ZmZlcmVkID0gMCwKICAgICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIHNpbmtCdWZmZXJlZCA9IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGNodW5rU2l6ZSA9IDApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIHN0 YXRpYyBjb25zdCBuc0NJRCBrQXN5bmNTdHJlYW1Db3BpZXJDSUQgPSB7IDB4ZTc0NmE4YjEsIDB4 Yzk3YSwgMHg0ZmM1LCB7MHhiYSwgMHhhNCwgMHg2NiwgMHg2MCwgMHg3NSwgMHgyMSwgMHhiZCwg MHgwOH0gfTsKICAgIG5zQ09NUHRyPG5zSUFzeW5jU3RyZWFtQ29waWVyPiBjb3BpZXIgPQogICAg ICAgIGRvX0NyZWF0ZUluc3RhbmNlKGtBc3luY1N0cmVhbUNvcGllckNJRCwgJnJ2KTsKICAgIGlm ICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgcnYgPSBjb3BpZXItPkluaXQo c291cmNlLCBzaW5rLCBzb3VyY2VCdWZmZXJlZCwgc2lua0J1ZmZlcmVkLCBjaHVua1NpemUpOwog ICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAoKnJlc3VsdCA9IGNv cGllciktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBuc3Jlc3VsdApOU19OZXdM b2FkR3JvdXAobnNJTG9hZEdyb3VwKiAqcmVzdWx0LCBuc0lSZXF1ZXN0T2JzZXJ2ZXIqIG9icykK ewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lMb2FkR3JvdXA+IGdyb3VwOwogICAg c3RhdGljIGNvbnN0IG5zQ0lEIGtMb2FkR3JvdXBDSUQgPSB7IDB4ZTFjNjE1ODIsIDB4MmE4NCwg MHgxMWQzLCB7MHg4YywgMHhjZSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhM30g fTsKICAgIHJ2ID0gbnNDb21wb25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrTG9hZEdyb3Vw Q0lELCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09N VHlwZUluZm88bnNJTG9hZEdyb3VwPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoZ3JvdXApKTsKICAgIGlmICgoKHJ2 KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CiAgICBydiA9IGdyb3VwLT5TZXRHcm91cE9ic2Vy dmVyKG9icyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgICpy ZXN1bHQgPSBncm91cDsKICAgICgqcmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1cm4gMDsKfQoK CmlubGluZSBuc3Jlc3VsdApOU19OZXdEb3dubG9hZGVyKG5zSURvd25sb2FkZXIqICpyZXN1bHQs CiAgICAgICAgICAgICAgICAgICBuc0lVUkkqIHVyaSwKICAgICAgICAgICAgICAgICAgIG5zSURv d25sb2FkT2JzZXJ2ZXIqIG9ic2VydmVyLAogICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq IGNvbnRleHQgPSAwLAogICAgICAgICAgICAgICAgICAgUFJCb29sIHN5bmNocm9ub3VzID0gMCwK ICAgICAgICAgICAgICAgICAgIG5zSUxvYWRHcm91cCogbG9hZEdyb3VwID0gMCwKICAgICAgICAg ICAgICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3Rvciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0g MCwKICAgICAgICAgICAgICAgICAgIG5zTG9hZEZsYWdzIGxvYWRBdHRyaWJ1dGVzID0gc3RhdGlj X2Nhc3Q8IG5zTG9hZEZsYWdzID4obnNJUmVxdWVzdDo6TE9BRF9OT1JNQUwpKQp7CiAgICBuc3Jl c3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSURvd25sb2FkZXI+IGRvd25sb2FkZXI7CiAgICBzdGF0 aWMgY29uc3QgbnNDSUQga0Rvd25sb2FkZXJDSUQgPSB7IDB4NTEwYTg2YmIsIDB4NjAxOSwgMHg0 ZWQxLCB7MHhiYiwgMHg0ZiwgMHg5NiwgMHg1YywgMHhmZiwgMHhkMiwgMHgzZSwgMHhjZX0gfTsK ICAgIHJ2ID0gbnNDb21wb25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrRG93bmxvYWRlckNJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJRG93 bmxvYWRlcj46OkdldElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldHRlcl9BZGRSZWZzKGRvd25sb2FkZXIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAw MDAwMDApKSByZXR1cm4gcnY7CiAgICBydiA9IGRvd25sb2FkZXItPkluaXQodXJpLCBvYnNlcnZl ciwgY29udGV4dCwgc3luY2hyb25vdXMsIGxvYWRHcm91cCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBub3RpZmljYXRpb25DYWxsYmFja3MsIGxvYWRBdHRyaWJ1dGVzKTsKICAgIGlmICgoKHJ2 KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CiAgICAqcmVzdWx0ID0gZG93bmxvYWRlcjsKICAg ICgqcmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1cm4gcnY7Cn0KCmlubGluZSBuc3Jlc3VsdApO U19OZXdTdHJlYW1Mb2FkZXIobnNJU3RyZWFtTG9hZGVyICoqYVJlc3VsdCwKICAgICAgICAgICAg ICAgICAgIG5zSUNoYW5uZWwgKmFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgbnNJU3RyZWFt TG9hZGVyT2JzZXJ2ZXIgKmFPYnNlcnZlciwKICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRz ICphQ29udGV4dCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lTdHJlYW1Mb2Fk ZXI+IGxvYWRlcjsKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrU3RyZWFtTG9hZGVyQ0lEID0geyAw eDViYTZkOTIwLCAweGQ0ZTksIDB4MTFkMywgeyAweGExLCAweGE1LCAweDAsIDB4NTAsIDB4NCwg MHgxYywgMHhhZiwgMHg0NCB9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRl SW5zdGFuY2Uoa1N0cmVhbUxvYWRlckNJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zQ09NVHlwZUluZm88bnNJU3RyZWFtTG9hZGVyPjo6R2V0SUlEKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobG9hZGVyKSk7 CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJ2ID0gbG9hZGVy LT5Jbml0KGFDaGFubmVsLCBhT2JzZXJ2ZXIsIGFDb250ZXh0KTsKICAgIGlmICgoKHJ2KSAmIDB4 ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgKmFSZXN1bHQgPSBsb2FkZXI7CiAgICAoKmFSZXN1 bHQpLT5BZGRSZWYoKTsKICAgIHJldHVybiBydjsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld1N0 cmVhbUxvYWRlcihuc0lTdHJlYW1Mb2FkZXIqICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICBu c0lVUkkqIHVyaSwKICAgICAgICAgICAgICAgICAgIG5zSVN0cmVhbUxvYWRlck9ic2VydmVyKiBv YnNlcnZlciwKICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBjb250ZXh0ID0gMCwKICAg ICAgICAgICAgICAgICAgIG5zSUxvYWRHcm91cCogbG9hZEdyb3VwID0gMCwKICAgICAgICAgICAg ICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3Rvciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0gMCwK ICAgICAgICAgICAgICAgICAgIG5zTG9hZEZsYWdzIGxvYWRBdHRyaWJ1dGVzID0gc3RhdGljX2Nh c3Q8IG5zTG9hZEZsYWdzID4obnNJUmVxdWVzdDo6TE9BRF9OT1JNQUwpLAogICAgICAgICAgICAg ICAgICAgbnNJVVJJKiByZWZlcnJlciA9IDApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09N UHRyPG5zSUNoYW5uZWw+IGNoYW5uZWw7CiAgICBydiA9IE5TX05ld0NoYW5uZWwoZ2V0dGVyX0Fk ZFJlZnMoY2hhbm5lbCksCiAgICAgICAgICAgICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAg ICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgbG9hZEdyb3VwLAogICAgICAgICAg ICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkNhbGxiYWNrcywKICAgICAgICAgICAgICAgICAgICAg ICBsb2FkQXR0cmlidXRlcyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2 OwoKICAgIG5zQ09NUHRyPG5zSUh0dHBDaGFubmVsPiBodHRwQ2hhbm5lbChkb19RdWVyeUludGVy ZmFjZShjaGFubmVsKSk7CiAgICBpZiAoaHR0cENoYW5uZWwpCiAgICAgICAgaHR0cENoYW5uZWwt PlNldFJlZmVycmVyKHJlZmVycmVyKTsKCiAgICByZXR1cm4gTlNfTmV3U3RyZWFtTG9hZGVyKHJl c3VsdCwgY2hhbm5lbCwgb2JzZXJ2ZXIsIGNvbnRleHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNf TmV3VW5pY2hhclN0cmVhbUxvYWRlcihuc0lVbmljaGFyU3RyZWFtTG9hZGVyICoqYVJlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsICphQ2hhbm5lbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lVbmljaGFyU3RyZWFtTG9hZGVyT2JzZXJ2ZXIgKmFPYnNlcnZl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYUNvbnRleHQgPSAwLAog ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFTZWdtZW50U2l6ZSA9IG5zSVVuaWNo YXJTdHJlYW1Mb2FkZXI6OkRFRkFVTFRfU0VHTUVOVF9TSVpFKQp7CiAgICBuc3Jlc3VsdCBydjsK ICAgIG5zQ09NUHRyPG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI+IGxvYWRlcjsKICAgIHN0YXRpYyBj b25zdCBuc0NJRCBrVW5pY2hhclN0cmVhbUxvYWRlckNJRCA9IHsgMHg5NDQ1NzkxZiwgMHhmYTRj LCAweDQ2NjksIHsgMHhiMSwgMHg3NCwgMHhkZiwgMHg1MCwgMHgzMiwgMHhiYiwgMHg2NywgMHhi MyB9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFuY2Uoa1VuaWNo YXJTdHJlYW1Mb2FkZXJDSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NP TVR5cGVJbmZvPG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI+OjpHZXRJSUQoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhsb2FkZXIpKTsK ICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CiAgICBydiA9IGxvYWRlci0+ SW5pdChhQ2hhbm5lbCwgYU9ic2VydmVyLCBhQ29udGV4dCwgYVNlZ21lbnRTaXplKTsKCiAgICBp ZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKmFSZXN1bHQgPSBsb2FkZXI7 CiAgICAoKmFSZXN1bHQpLT5BZGRSZWYoKTsKICAgIHJldHVybiBydjsKfQoKaW5saW5lIG5zcmVz dWx0Ck5TX05ld1JlcXVlc3RPYnNlcnZlclByb3h5KG5zSVJlcXVlc3RPYnNlcnZlciAqKmFSZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlcXVlc3RPYnNlcnZlciAqYU9ic2Vy dmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lFdmVudFF1ZXVlICphRXZlbnRRPTAp CnsKICAgIGRvIHsgaWYgKCEoYVJlc3VsdCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw NDAwM0wpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zcmVzdWx0IHJ2OwogICAgbnNDT01QdHI8bnNJ UmVxdWVzdE9ic2VydmVyUHJveHk+IHByb3h5OwogICAgc3RhdGljIGNvbnN0IG5zQ0lEIGtSZXF1 ZXN0T2JzZXJ2ZXJQcm94eUNJRCA9IHsgMHg1MWZhMjhjNywgMHg3NGMwLCAweDRiODUsIHsweDlj LCAweDQ2LCAweGQwLCAweDNmLCAweGFhLCAweDdiLCAweDY5LCAweDZifSB9OwoKICAgIHJ2ID0g bnNDb21wb25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrUmVxdWVzdE9ic2VydmVyUHJveHlD SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVJl cXVlc3RPYnNlcnZlclByb3h5Pjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMocHJveHkpKTsKICAgIGlmICgoKHJ2KSAm IDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgcnYgPSBwcm94eS0+SW5pdChhT2JzZXJ2ZXIs IGFFdmVudFEpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBy ZXR1cm4gQ2FsbFF1ZXJ5SW50ZXJmYWNlKHByb3h5LCBhUmVzdWx0KTsKfQoKaW5saW5lIG5zcmVz dWx0Ck5TX05ld1NpbXBsZVN0cmVhbUxpc3RlbmVyKG5zSVN0cmVhbUxpc3RlbmVyICoqYVJlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJT3V0cHV0U3RyZWFtICphU2luaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVxdWVzdE9ic2VydmVyICphT2JzZXJ2ZXI9MCkK ewogICAgZG8geyBpZiAoIShhUmVzdWx0KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0 MDAzTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lT aW1wbGVTdHJlYW1MaXN0ZW5lcj4gbGlzdGVuZXI7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga1Np bXBsZVN0cmVhbUxpc3RlbmVyQ0lEID0geyAweGZiOGNiZjRlLCAweDQ3MDEsIDB4NGJhMSwgezB4 YjEsIDB4ZDYsIDB4NTMsIDB4ODgsIDB4ZTAsIDB4NDEsIDB4ZmIsIDB4Njd9IH07CiAgICBydiA9 IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFuY2Uoa1NpbXBsZVN0cmVhbUxpc3RlbmVy Q0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxuc0lT aW1wbGVTdHJlYW1MaXN0ZW5lcj46OkdldElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGxpc3RlbmVyKSk7CiAgICBpZiAoKChy dikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJ2ID0gbGlzdGVuZXItPkluaXQoYVNp bmssIGFPYnNlcnZlcik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoK ICAgICgqYVJlc3VsdCA9IGxpc3RlbmVyKS0+QWRkUmVmKCk7CiAgICByZXR1cm4gMDsKfQoKCmlu bGluZSBuc3Jlc3VsdApOU19OZXdBc3luY1N0cmVhbUxpc3RlbmVyKG5zSVN0cmVhbUxpc3RlbmVy ICoqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0cmVhbUxpc3RlbmVyICpy ZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lFdmVudFF1ZXVlICpldmVudFF1 ZXVlKQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSUFzeW5jU3RyZWFtTGlzdGVu ZXI+IGxzbnI7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0FzeW5jU3RyZWFtTGlzdGVuZXJDSUQg PSB7IDB4NjAwNDdiYjIsIDB4OTFjMCwgMHgxMWQzLCB7MHg4YywgMHhkOSwgMHgwMCwgMHg2MCwg MHhiMCwgMHhmYywgMHgxNCwgMHhhM30gfTsKICAgIHJ2ID0gbnNDb21wb25lbnRNYW5hZ2VyOjpD cmVhdGVJbnN0YW5jZShrQXN5bmNTdHJlYW1MaXN0ZW5lckNJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJQXN5bmNTdHJlYW1MaXN0ZW5lcj46Okdl dElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRl cl9BZGRSZWZzKGxzbnIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7 CiAgICBydiA9IGxzbnItPkluaXQocmVjZWl2ZXIsIGV2ZW50UXVldWUpOwogICAgaWYgKCgocnYp ICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAoKnJlc3VsdCA9IGxzbnIpLT5BZGRSZWYo KTsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfQ2hlY2tQb3J0U2FmZXR5KFBS SW50MzIgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBuc0lJT1NlcnZpY2UqIGlvU2VydmljZSA9 IDApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09NUHRyPG5zSUlPU2VydmljZT4gc2VydjsK ICAgIGlmIChpb1NlcnZpY2UgPT0gMCkgewogICAgICAgIHNlcnYgPSBkb19HZXRJT1NlcnZpY2Uo JnJ2KTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgICAg IGlvU2VydmljZSA9IHNlcnYuZ2V0KCk7CiAgICB9CgogICAgUFJCb29sIGFsbG93OwoKICAgIHJ2 ID0gaW9TZXJ2aWNlLT5BbGxvd1BvcnQocG9ydCwgc2NoZW1lLCAmYWxsb3cpOwogICAgaWYgKCgo cnYpICYgMHg4MDAwMDAwMCkpIHsKICAgICAgICA7CiAgICAgICAgcmV0dXJuIHJ2OwogICAgfQoK ICAgIGlmICghYWxsb3cpCiAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgx KTw8MzEpIHwgKChQUlVpbnQzMikoNiArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDE5KSkpICk7 CgogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBuc3Jlc3VsdApOU19OZXdQcm94eUluZm8oY29uc3Qg Y2hhciogdHlwZSwgY29uc3QgY2hhciogaG9zdCwgUFJJbnQzMiBwb3J0LCBuc0lQcm94eUluZm8q ICpyZXN1bHQpCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrUFBT U2VydmljZUNJRCA9IHsgMHhlOWIzMDFjMCwgMHhlMGU0LCAweDExZDMsIHsgMHhhMSwgMHhhOCwg MHgwLCAweDUwLCAweDQsIDB4MWMsIDB4YWYsIDB4NDQgfSB9OwogICAgbnNDT01QdHI8bnNJUHJv dG9jb2xQcm94eVNlcnZpY2U+IHBwcyA9IGRvX0dldFNlcnZpY2Uoa1BQU1NlcnZpY2VDSUQsJnJ2 KTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJldHVybiBw cHMtPk5ld1Byb3h5SW5mbyh0eXBlLCBob3N0LCBwb3J0LCByZXN1bHQpOwp9CgppbmxpbmUgbnNy ZXN1bHQKTlNfR2V0RmlsZVByb3RvY29sSGFuZGxlcihuc0lGaWxlUHJvdG9jb2xIYW5kbGVyICoq cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlPU2VydmljZSAqaW9TZXJ2aWNl PTApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09NUHRyPG5zSUlPU2VydmljZT4gc2VydjsK ICAgIGlmIChpb1NlcnZpY2UgPT0gMCkgewogICAgICAgIHNlcnYgPSBkb19HZXRJT1NlcnZpY2Uo JnJ2KTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgICAg IGlvU2VydmljZSA9IHNlcnYuZ2V0KCk7CiAgICB9CgogICAgbnNDT01QdHI8bnNJUHJvdG9jb2xI YW5kbGVyPiBoYW5kbGVyOwogICAgcnYgPSBpb1NlcnZpY2UtPkdldFByb3RvY29sSGFuZGxlcigi ZmlsZSIsIGdldHRlcl9BZGRSZWZzKGhhbmRsZXIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAw MDApKSByZXR1cm4gcnY7CgogICAgcmV0dXJuIENhbGxRdWVyeUludGVyZmFjZShoYW5kbGVyLCBy ZXN1bHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfR2V0RmlsZUZyb21VUkxTcGVjKGNvbnN0IG5z QUNTdHJpbmcgJmluVVJMLCBuc0lGaWxlICoqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg bnNJSU9TZXJ2aWNlICppb1NlcnZpY2U9MCkKewogICAgbnNDT01QdHI8bnNJRmlsZVByb3RvY29s SGFuZGxlcj4gZmlsZUhhbmRsZXI7CiAgICBuc3Jlc3VsdCBydiA9IE5TX0dldEZpbGVQcm90b2Nv bEhhbmRsZXIoZ2V0dGVyX0FkZFJlZnMoZmlsZUhhbmRsZXIpLCBpb1NlcnZpY2UpOwogICAgaWYg KCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICByZXR1cm4gZmlsZUhhbmRsZXIt PkdldEZpbGVGcm9tVVJMU3BlYyhpblVSTCwgcmVzdWx0KTsKfQoKaW5saW5lIG5zcmVzdWx0Ck5T X0dldFVSTFNwZWNGcm9tRmlsZShuc0lGaWxlKiBhRmlsZSwgbnNBQ1N0cmluZyAmYVVybCwKICAg ICAgICAgICAgICAgICAgICAgIG5zSUlPU2VydmljZSAqaW9TZXJ2aWNlPTApCnsKICAgIG5zQ09N UHRyPG5zSUZpbGVQcm90b2NvbEhhbmRsZXI+IGZpbGVIYW5kbGVyOwogICAgbnNyZXN1bHQgcnYg PSBOU19HZXRGaWxlUHJvdG9jb2xIYW5kbGVyKGdldHRlcl9BZGRSZWZzKGZpbGVIYW5kbGVyKSwg aW9TZXJ2aWNlKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAg cmV0dXJuIGZpbGVIYW5kbGVyLT5HZXRVUkxTcGVjRnJvbUZpbGUoYUZpbGUsIGFVcmwpOwp9Cgpp bmxpbmUgbnNyZXN1bHQKTlNfTmV3UmVzdW1hYmxlRW50aXR5SUQobnNJUmVzdW1hYmxlRW50aXR5 SUQqKiBhUmVzLAogICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBzaXplLAogICAgICAg ICAgICAgICAgICAgICAgICBQUlRpbWUgbGFzdE1vZGlmaWVkKQp7CiAgICBuc3Jlc3VsdCBydjsK ICAgIG5zQ09NUHRyPG5zSVJlc3VtYWJsZUVudGl0eUlEPiBlbnQgPQogICAgICAgIGRvX0NyZWF0 ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbmV0d29yay9yZXN1bWFibGUtZW50aXR5LWlkOzEiLCZy dik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIGVudC0+U2V0 U2l6ZShzaXplKTsKICAgIGVudC0+U2V0TGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCk7CgogICAg KmFSZXMgPSBlbnQ7CiAgICAoKmFSZXMpLT5BZGRSZWYoKTsKICAgIHJldHVybiAwOwp9Cgppbmxp bmUgbnNyZXN1bHQKTlNfRXhhbWluZUZvclByb3h5KGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3Qg Y2hhciogaG9zdCwgUFJJbnQzMiBwb3J0LAogICAgICAgICAgICAgICAgICAgbnNJUHJveHlJbmZv KiAqcHJveHlJbmZvKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAgICBzdGF0aWMgY29uc3QgbnNDSUQg a1BQU1NlcnZpY2VDSUQgPSB7IDB4ZTliMzAxYzAsIDB4ZTBlNCwgMHgxMWQzLCB7IDB4YTEsIDB4 YTgsIDB4MCwgMHg1MCwgMHg0LCAweDFjLCAweGFmLCAweDQ0IH0gfTsKICAgIG5zQ09NUHRyPG5z SVByb3RvY29sUHJveHlTZXJ2aWNlPiBwcHMgPSBkb19HZXRTZXJ2aWNlKGtQUFNTZXJ2aWNlQ0lE LCZydik7CgogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBuc0NB dXRvU3RyaW5nIHNwZWMoc2NoZW1lKTsKICAgIHNwZWMuQXBwZW5kKCI6Ly8iKTsKICAgIHNwZWMu QXBwZW5kKGhvc3QpOwogICAgc3BlYy5BcHBlbmQoJzonKTsKICAgIHNwZWMuQXBwZW5kSW50KHBv cnQpOwoKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrU1REVVJMQ0lEID0geyAweGRlOTQ3 MmQwLCAweDgwMzQsIDB4MTFkMywgezB4OTMsIDB4OTksIDB4MDAsIDB4MTAsIDB4NGIsIDB4YTAs IDB4ZmQsIDB4NDB9IH07CiAgICBuc0NPTVB0cjxuc0lVUkk+IHVyaSA9IGRvX0NyZWF0ZUluc3Rh bmNlKGtTVERVUkxDSUQsICZydik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJu IHJ2OwogICAgcnYgPSB1cmktPlNldFNwZWMoc3BlYyk7CiAgICBpZiAoKChydikgJiAweDgwMDAw MDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJldHVybiBwcHMtPkV4YW1pbmVGb3JQcm94eSh1cmksIHBy b3h5SW5mbyk7Cn0KCmlubGluZSBuc3Jlc3VsdApOU19QYXJzZUNvbnRlbnRUeXBlKGNvbnN0IG5z QUNTdHJpbmcgJnJhd0NvbnRlbnRUeXBlLAogICAgICAgICAgICAgICAgICAgIG5zQ1N0cmluZyAm Y29udGVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgbnNDU3RyaW5nICZjb250ZW50Q2hhcnNl dCkKewoKICAgIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luLCBpdCwgZW5kOwogICAg aXQgPSByYXdDb250ZW50VHlwZS5CZWdpblJlYWRpbmcoYmVnaW4pOwogICAgcmF3Q29udGVudFR5 cGUuRW5kUmVhZGluZyhlbmQpOwogICAgaWYgKEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIGl0LCBl bmQpKSB7CiAgICAgICAgY29udGVudFR5cGUgPSBTdWJzdHJpbmcoYmVnaW4sIGl0KTsKCiAgICAg ICAgYmVnaW4gPSArK2l0OwogICAgICAgIGlmIChGaW5kSW5SZWFkYWJsZShuc0RlcGVuZGVudENT dHJpbmcoImNoYXJzZXQ9IiwgUFJVaW50MzIoc2l6ZW9mKCJjaGFyc2V0PSIpLTEpKSwgYmVnaW4s IGl0ID0gZW5kKSkgewogICAgICAgICAgICBjb250ZW50Q2hhcnNldCA9IFN1YnN0cmluZyhpdCwg ZW5kKTsKICAgICAgICAgICAgY29udGVudENoYXJzZXQuU3RyaXBXaGl0ZXNwYWNlKCk7CiAgICAg ICAgfQogICAgfQogICAgZWxzZQogICAgICAgIGNvbnRlbnRUeXBlID0gcmF3Q29udGVudFR5cGU7 CiAgICBUb0xvd2VyQ2FzZShjb250ZW50VHlwZSk7CiAgICBjb250ZW50VHlwZS5TdHJpcFdoaXRl c3BhY2UoKTsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3TG9jYWxGaWxl SW5wdXRTdHJlYW0obnNJSW5wdXRTdHJlYW0qKiBhUmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGaWxlKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQz MiBhSU9GbGFncyA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFQZXJt ID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUJlaGF2aW9yRmxhZ3Mg PSAwKQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSUZpbGVJbnB1dFN0cmVhbT4g aW47CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0xvY2FsRmlsZUlucHV0U3RyZWFtQ0lEID0geyAw eGJlOWE1M2FlLCAweGM3ZTksIDB4MTFkMywgezB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAs IDB4ZmMsIDB4MTQsIDB4YTN9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRl SW5zdGFuY2Uoa0xvY2FsRmlsZUlucHV0U3RyZWFtQ0lELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxuc0lGaWxlSW5wdXRTdHJlYW0+OjpHZXRJSUQoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVm cyhpbikpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIHJ2ID0g aW4tPkluaXQoYUZpbGUsIGFJT0ZsYWdzLCBhUGVybSwgYUJlaGF2aW9yRmxhZ3MpOwogICAgaWYg KCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAqYVJlc3VsdCA9IGluOwogICAg KCphUmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5T X05ld0xvY2FsRmlsZU91dHB1dFN0cmVhbShuc0lPdXRwdXRTdHJlYW0qKiBhUmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmlsZSogYUZpbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUkludDMyIGFJT0ZsYWdzID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkludDMyIGFQZXJtID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu dDMyIGFCZWhhdmlvckZsYWdzID0gMCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxu c0lGaWxlT3V0cHV0U3RyZWFtPiBvdXQ7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0xvY2FsRmls ZU91dHB1dFN0cmVhbUNJRCA9IHsgMHhjMjcyZmVlMCwgMHhjN2U5LCAweDExZDMsIHsweDhjLCAw eGRhLCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzfSB9OwogICAgcnYgPSBuc0Nv bXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtMb2NhbEZpbGVPdXRwdXRTdHJlYW1DSUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSUZpbGVP dXRwdXRTdHJlYW0+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhvdXQpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAw MDApKSByZXR1cm4gcnY7CiAgICBydiA9IG91dC0+SW5pdChhRmlsZSwgYUlPRmxhZ3MsIGFQZXJt LCBhQmVoYXZpb3JGbGFncyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2 OwoKICAgICphUmVzdWx0ID0gb3V0OwogICAgKCphUmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1 cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld0J1ZmZlcmVkSW5wdXRTdHJlYW0obnNJSW5w dXRTdHJlYW0qKiBhUmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3Ry ZWFtKiBhU3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFCdWZmZXJTaXpl KQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSUJ1ZmZlcmVkSW5wdXRTdHJlYW0+ IGluOwogICAgc3RhdGljIGNvbnN0IG5zQ0lEIGtCdWZmZXJlZElucHV0U3RyZWFtQ0lEID0geyAw eDkyMjY4ODhlLCAweGRhMDgsIDB4MTFkMywgezB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAs IDB4ZmMsIDB4MTQsIDB4YTN9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRl SW5zdGFuY2Uoa0J1ZmZlcmVkSW5wdXRTdHJlYW1DSUQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSUJ1ZmZlcmVkSW5wdXRTdHJlYW0+OjpHZXRJSUQo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRk UmVmcyhpbikpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIHJ2 ID0gaW4tPkluaXQoYVN0ciwgYUJ1ZmZlclNpemUpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAw MCkpIHJldHVybiBydjsKCiAgICAqYVJlc3VsdCA9IGluOwogICAgKCphUmVzdWx0KS0+QWRkUmVm KCk7CiAgICByZXR1cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld0J1ZmZlcmVkT3V0cHV0 U3RyZWFtKG5zSU91dHB1dFN0cmVhbSoqIGFSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSU91dHB1dFN0cmVhbSogYVN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJV aW50MzIgYUJ1ZmZlclNpemUpCnsKICAgIG5zcmVzdWx0IHJ2OwogICAgbnNDT01QdHI8bnNJQnVm ZmVyZWRPdXRwdXRTdHJlYW0+IG91dDsKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrQnVmZmVyZWRP dXRwdXRTdHJlYW1DSUQgPSB7IDB4OTg2OGI0Y2UsIDB4ZGEwOCwgMHgxMWQzLCB7MHg4YywgMHhk YSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhM30gfTsKICAgIHJ2ID0gbnNDb21w b25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrQnVmZmVyZWRPdXRwdXRTdHJlYW1DSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSUJ1ZmZlcmVk T3V0cHV0U3RyZWFtPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMob3V0KSk7CiAgICBpZiAoKChydikgJiAweDgwMDAw MDAwKSkgcmV0dXJuIHJ2OwogICAgcnYgPSBvdXQtPkluaXQoYVN0ciwgYUJ1ZmZlclNpemUpOwog ICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAqYVJlc3VsdCA9IG91 dDsKICAgICgqYVJlc3VsdCktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBuc3Jl c3VsdApOU19OZXdQb3N0RGF0YVN0cmVhbShuc0lJbnB1dFN0cmVhbSAqKnJlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIGlzRmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bnNBQ1N0cmluZyAmZGF0YSwKICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgZW5jb2RlRmxh Z3MsCiAgICAgICAgICAgICAgICAgICAgIG5zSUlPU2VydmljZSogaW9TZXJ2aWNlID0gMCkKewog ICAgbnNyZXN1bHQgcnY7CgogICAgaWYgKGlzRmlsZSkgewogICAgICAgIG5zQ09NUHRyPG5zSUxv Y2FsRmlsZT4gZmlsZTsKICAgICAgICBuc0NPTVB0cjxuc0lJbnB1dFN0cmVhbT4gZmlsZVN0cmVh bTsKCiAgICAgICAgcnYgPSBOU19OZXdOYXRpdmVMb2NhbEZpbGUoZGF0YSwgMCwgZ2V0dGVyX0Fk ZFJlZnMoZmlsZSkpOwogICAgICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7 CgogICAgICAgIHJ2ID0gTlNfTmV3TG9jYWxGaWxlSW5wdXRTdHJlYW0oZ2V0dGVyX0FkZFJlZnMo ZmlsZVN0cmVhbSksIGZpbGUpOwogICAgICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1 cm4gcnY7CgoKICAgICAgICByZXR1cm4gTlNfTmV3QnVmZmVyZWRJbnB1dFN0cmVhbShyZXN1bHQs IGZpbGVTdHJlYW0sIDgxOTIpOwogICAgfQoKCiAgICByZXR1cm4gTlNfTmV3Q1N0cmluZ0lucHV0 U3RyZWFtKHJlc3VsdCwgZGF0YSk7Cn0KIyAzNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc0lQbHVnaW5Ib3N0LmgiIDIKCmNsYXNzIG5zSVBsdWdpbjsKCmNsYXNzIG5zSVVSSTsKCmNs YXNzIG5zSURPTVBsdWdpbjsKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQ bHVnaW5Ib3N0LmgiCmNsYXNzIG5zSVBsdWdpbkhvc3QgOiBwdWJsaWMgbnNJRmFjdG9yeSB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHgyNjRjMDY0MCwgMHgxYzMxLCAweDExZDIsIHsgMHhhOCwgMHgyZSwgMHgwMCwg MHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEluaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KHZv aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZFBsdWdpbnModm9pZCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQbHVnaW5GYWN0b3J5KGNvbnN0IGNoYXIgKmFNaW1lVHlwZSwg bnNJUGx1Z2luICoqYVBsdWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnN0YW50aWF0 ZUVtYmVkZWRQbHVnaW4oY29uc3QgY2hhciAqYU1pbWVUeXBlLCBuc0lVUkkgKmFVUkwsIG5zSVBs dWdpbkluc3RhbmNlT3duZXIgKmFPd25lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnN0 YW50aWF0ZUZ1bGxQYWdlUGx1Z2luKGNvbnN0IGNoYXIgKmFNaW1lVHlwZSwgbnNTdHJpbmcgJiBh VVJMU3BlYywgbnNJU3RyZWFtTGlzdGVuZXIgKiAmIGFTdHJlYW1MaXN0ZW5lciwgbnNJUGx1Z2lu SW5zdGFuY2VPd25lciAqYU93bmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVwUGx1 Z2luSW5zdGFuY2UoY29uc3QgY2hhciAqYU1pbWVUeXBlLCBuc0lVUkkgKmFVUkwsIG5zSVBsdWdp bkluc3RhbmNlT3duZXIgKmFPd25lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BsdWdp bkVuYWJsZWRGb3JUeXBlKGNvbnN0IGNoYXIgKmFNaW1lVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBJc1BsdWdpbkVuYWJsZWRGb3JFeHRlbnNpb24oY29uc3QgY2hhciAqYUV4dGVuc2lv biwgY29uc3QgY2hhciAqICYgYU1pbWVUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFBsdWdpbkNvdW50KFBSVWludDMyICphUGx1Z2luQ291bnQpID0gMDsKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRQbHVnaW5zKFBSVWludDMyIGFQbHVnaW5Db3VudCwgbnNJRE9NUGx1Z2luKiBhUGx1 Z2luQXJyYXlbXSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFN0b3BQbHVnaW5JbnN0YW5jZShu c0lQbHVnaW5JbnN0YW5jZSAqYUluc3RhbmNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhh bmRsZUJhZFBsdWdpbihQUkxpYnJhcnkgKiBhTGlicmFyeSwgbnNJUGx1Z2luSW5zdGFuY2UgKmlu c3RhbmNlKSA9IDA7Cgp9OwojIDI1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQ bHVnaW5Ib3N0LmgiCmlubGluZSBuc3Jlc3VsdApOU19OZXdQbHVnaW5Qb3N0RGF0YVN0cmVhbShu c0lJbnB1dFN0cmVhbSAqKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgY29udGVudExl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGlzRmlsZSA9IDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBoZWFkZXJzID0gMCkKewogIG5zcmVzdWx0IHJ2 ID0gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogIGlmICghZGF0YSkKICAgIHJldHVybiBydjsK ICBpZiAoIWlzRmlsZSkgewogICAgaWYgKGNvbnRlbnRMZW5ndGggPCAxKQogICAgICByZXR1cm4g cnY7CgogICAgY2hhciAqYnVmID0gKGNoYXIqKSBkYXRhOwogICAgaWYgKGhlYWRlcnMpIHsKCiAg ICAgIGlmICghKGJ1ZiA9IChjaGFyKiluc01lbW9yeTo6QWxsb2MoY29udGVudExlbmd0aCkpKQog ICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgIG1lbWNweShidWYs IGRhdGEsIGNvbnRlbnRMZW5ndGgpOwogICAgfQogICAgbnNDT01QdHI8bnNJU3RyaW5nSW5wdXRT dHJlYW0+IHNpcyA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvaW8vc3RyaW5nLWlu cHV0LXN0cmVhbTsxIiwmcnYpOwogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpIHsKICAg ICAgc2lzLT5BZG9wdERhdGEoYnVmLCBjb250ZW50TGVuZ3RoKTsKICAgICAgcnYgPSBDYWxsUXVl cnlJbnRlcmZhY2Uoc2lzLCByZXN1bHQpOwogICAgfQogIH0gZWxzZSB7CiAgICBuc0NPTVB0cjxu c0lMb2NhbEZpbGU+IGZpbGU7CiAgICBuc0NPTVB0cjxuc0lJbnB1dFN0cmVhbT4gZmlsZVN0cmVh bTsKICAgIGlmICgoISgocnYgPSBOU19OZXdOYXRpdmVMb2NhbEZpbGUobnNEZXBlbmRlbnRDU3Ry aW5nKGRhdGEpLCAwLCBnZXR0ZXJfQWRkUmVmcyhmaWxlKSkpICYgMHg4MDAwMDAwMCkpICYmCiAg ICAgICAgKCEoKHJ2ID0gTlNfTmV3TG9jYWxGaWxlSW5wdXRTdHJlYW0oZ2V0dGVyX0FkZFJlZnMo ZmlsZVN0cmVhbSksIGZpbGUsIDB4MDEsIDA2MDAsIG5zSUZpbGVJbnB1dFN0cmVhbTo6REVMRVRF X09OX0NMT1NFIHwgbnNJRmlsZUlucHV0U3RyZWFtOjpDTE9TRV9PTl9FT0YpKSAmIDB4ODAwMDAw MDApKQoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICB7Cgog ICAgICByZXR1cm4gTlNfTmV3QnVmZmVyZWRJbnB1dFN0cmVhbShyZXN1bHQsIGZpbGVTdHJlYW0s IDgxOTIpOwogICAgfQogIH0KICByZXR1cm4gcnY7Cn0KIyAxMjMgIm5zRE9NQ2xhc3NJbmZvLmNw cCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNQSVBsdWdpbkhvc3QuaCIg MQojIDIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zUElQbHVnaW5Ib3N0LmgiCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc1BsdWdpbk5hdGl2ZVdpbmRvdy5oIiAx CiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNQbHVnaW5OYXRpdmVXaW5kb3cu aCIKY2xhc3MgbnNQbHVnaW5OYXRpdmVXaW5kb3cgOiBwdWJsaWMgbnNQbHVnaW5XaW5kb3cKewpw dWJsaWM6CiAgbnNQbHVnaW5OYXRpdmVXaW5kb3coKSA6IG5zUGx1Z2luV2luZG93KCkge30KICB2 aXJ0dWFsIH5uc1BsdWdpbk5hdGl2ZVdpbmRvdygpIHt9CiMgNjggIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9wbHVnaW4vbnNQbHVnaW5OYXRpdmVXaW5kb3cuaCIKcHVibGljOgogIG5zcmVzdWx0IEdl dFBsdWdpbkluc3RhbmNlKG5zQ09NUHRyPG5zSVBsdWdpbkluc3RhbmNlPiAmYVBsdWdpbkluc3Rh bmNlKSB7CiAgICBhUGx1Z2luSW5zdGFuY2UgPSBtUGx1Z2luSW5zdGFuY2U7CiAgICByZXR1cm4g MDsKICB9CiAgbnNyZXN1bHQgU2V0UGx1Z2luSW5zdGFuY2UobnNJUGx1Z2luSW5zdGFuY2UgKmFQ bHVnaW5JbnN0YW5jZSkgewogICAgaWYgKG1QbHVnaW5JbnN0YW5jZSAhPSBhUGx1Z2luSW5zdGFu Y2UpCiAgICAgIG1QbHVnaW5JbnN0YW5jZSA9IGFQbHVnaW5JbnN0YW5jZTsKICAgIHJldHVybiAw OwogIH0KCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGxTZXRXaW5kb3cobnNDT01QdHI8 bnNJUGx1Z2luSW5zdGFuY2U+ICZhUGx1Z2luSW5zdGFuY2UpIHsKCiAgICBpZiAoYVBsdWdpbklu c3RhbmNlKQogICAgICBhUGx1Z2luSW5zdGFuY2UtPlNldFdpbmRvdyh0aGlzKTsKICAgIGVsc2Ug aWYgKG1QbHVnaW5JbnN0YW5jZSkKICAgICAgbVBsdWdpbkluc3RhbmNlLT5TZXRXaW5kb3coMCk7 CgogICAgU2V0UGx1Z2luSW5zdGFuY2UoYVBsdWdpbkluc3RhbmNlKTsKICAgIHJldHVybiAwOwog IH0KCnByb3RlY3RlZDoKICBuc0NPTVB0cjxuc0lQbHVnaW5JbnN0YW5jZT4gbVBsdWdpbkluc3Rh bmNlOwp9OwoKbnNyZXN1bHQgUExVR19OZXdQbHVnaW5OYXRpdmVXaW5kb3cobnNQbHVnaW5OYXRp dmVXaW5kb3cgKiogYVBsdWdpbk5hdGl2ZVdpbmRvdyk7Cm5zcmVzdWx0IFBMVUdfRGVsZXRlUGx1 Z2luTmF0aXZlV2luZG93KG5zUGx1Z2luTmF0aXZlV2luZG93ICogYVBsdWdpbk5hdGl2ZVdpbmRv dyk7CiMgMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNQSVBsdWdpbkhvc3QuaCIg MgojIDMwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zUElQbHVnaW5Ib3N0LmgiCmNs YXNzIG5zUElQbHVnaW5Ib3N0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDhl M2Q3MWU2LCAweDIzMTksIDB4MTFkNSwgeyAweDljLCAweGY4LCAweDAwLCAweDYwLCAweGIwLCAw eGZiLCAweGQ4LCAweGFjIH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0SXNTY3JpcHRhYmxlSW5zdGFuY2UobnNJUGx1Z2luSW5zdGFuY2UgKmFJbnN0YW5jZSwgUFJC b29sIGFTY3JpcHRhYmxlKSA9IDA7CiMgNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNQSVBsdWdpbkhvc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFBhcnNlUG9zdEJ1ZmZlclRvRml4 SGVhZGVycyhjb25zdCBjaGFyICphSW5Qb3N0RGF0YSwgUFJVaW50MzIgYUluUG9zdERhdGFMZW4s IGNoYXIgKiphT3V0UG9zdERhdGEsIFBSVWludDMyICphT3V0UG9zdERhdGFMZW4pID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVG1wRmlsZVRvUG9zdChjb25zdCBjaGFyICphUG9z dERhdGFVUkwsIGNoYXIgKiphVG1wRmlsZU5hbWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgTmV3UGx1Z2luTmF0aXZlV2luZG93KG5zUGx1Z2luTmF0aXZlV2luZG93ICogKmFQbHVnaW5O YXRpdmVXaW5kb3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlUGx1Z2luTmF0 aXZlV2luZG93KG5zUGx1Z2luTmF0aXZlV2luZG93ICogYVBsdWdpbk5hdGl2ZVdpbmRvdykgPSAw OwoKfTsKIyAxMjQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL29qaS9uc0lKVk1NYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L29qaS9uc0lKVk1NYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5p LmgiIDEKIyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5pLmgiCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMK IyAxMTAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgNDAgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9qYXZhL2puaS5oIiAyCgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9qYXZhL2puaV9tZC5oIiAxCiMgMTc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmlf bWQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIgMQojIDQ1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXNz ZXJ0LmgiIDEgMwojIDQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIgMgoK CgpleHRlcm4gIkMiIHsKIyAxODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qYXZhL2pyaV9tZC5o Igp0eXBlZGVmIGNsYXNzIF9qb2JqZWN0ICpqcmVmOwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IGpib29sOwp0eXBlZGVmIGNoYXIgamJ5dGU7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcganVp bnQ7CnR5cGVkZWYgbG9uZyBqaW50OwojIDIzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEv anJpX21kLmgiCnR5cGVkZWYgbG9uZyBsb25nIGpsb25nOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg bG9uZyBqdWxvbmc7CiMgNTYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIK fQojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5pX21kLmgiIDIKIyA0NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5pLmgiIDIKCgpleHRlcm4gIkMiIHsKCgoKCgoKdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIGpib29sZWFuOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGpjaGFy Owp0eXBlZGVmIHNob3J0IGpzaG9ydDsKdHlwZWRlZiBmbG9hdCBqZmxvYXQ7CnR5cGVkZWYgZG91 YmxlIGpkb3VibGU7Cgp0eXBlZGVmIGppbnQganNpemU7CgoKCmNsYXNzIF9qb2JqZWN0IHt9Owpj bGFzcyBfamNsYXNzIDogcHVibGljIF9qb2JqZWN0IHt9OwpjbGFzcyBfanRocm93YWJsZSA6IHB1 YmxpYyBfam9iamVjdCB7fTsKY2xhc3MgX2pzdHJpbmcgOiBwdWJsaWMgX2pvYmplY3Qge307CmNs YXNzIF9qYXJyYXkgOiBwdWJsaWMgX2pvYmplY3Qge307CmNsYXNzIF9qYm9vbGVhbkFycmF5IDog cHVibGljIF9qYXJyYXkge307CmNsYXNzIF9qYnl0ZUFycmF5IDogcHVibGljIF9qYXJyYXkge307 CmNsYXNzIF9qY2hhckFycmF5IDogcHVibGljIF9qYXJyYXkge307CmNsYXNzIF9qc2hvcnRBcnJh eSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamludEFycmF5IDogcHVibGljIF9qYXJyYXkg e307CmNsYXNzIF9qbG9uZ0FycmF5IDogcHVibGljIF9qYXJyYXkge307CmNsYXNzIF9qZmxvYXRB cnJheSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamRvdWJsZUFycmF5IDogcHVibGljIF9q YXJyYXkge307CmNsYXNzIF9qb2JqZWN0QXJyYXkgOiBwdWJsaWMgX2phcnJheSB7fTsKCnR5cGVk ZWYgX2pvYmplY3QgKmpvYmplY3Q7CnR5cGVkZWYgX2pjbGFzcyAqamNsYXNzOwp0eXBlZGVmIF9q dGhyb3dhYmxlICpqdGhyb3dhYmxlOwp0eXBlZGVmIF9qc3RyaW5nICpqc3RyaW5nOwp0eXBlZGVm IF9qYXJyYXkgKmphcnJheTsKdHlwZWRlZiBfamJvb2xlYW5BcnJheSAqamJvb2xlYW5BcnJheTsK dHlwZWRlZiBfamJ5dGVBcnJheSAqamJ5dGVBcnJheTsKdHlwZWRlZiBfamNoYXJBcnJheSAqamNo YXJBcnJheTsKdHlwZWRlZiBfanNob3J0QXJyYXkgKmpzaG9ydEFycmF5Owp0eXBlZGVmIF9qaW50 QXJyYXkgKmppbnRBcnJheTsKdHlwZWRlZiBfamxvbmdBcnJheSAqamxvbmdBcnJheTsKdHlwZWRl ZiBfamZsb2F0QXJyYXkgKmpmbG9hdEFycmF5Owp0eXBlZGVmIF9qZG91YmxlQXJyYXkgKmpkb3Vi bGVBcnJheTsKdHlwZWRlZiBfam9iamVjdEFycmF5ICpqb2JqZWN0QXJyYXk7CiMgMTIwICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmkuaCIKdHlwZWRlZiB1bmlvbiBqdmFsdWUgewogICAg amJvb2xlYW4gejsKICAgIGpieXRlIGI7CiAgICBqY2hhciBjOwogICAganNob3J0IHM7CiAgICBq aW50IGk7CiAgICBqbG9uZyBqOwogICAgamZsb2F0IGY7CiAgICBqZG91YmxlIGQ7CiAgICBqb2Jq ZWN0IGw7Cn0ganZhbHVlOwoKc3RydWN0IF9qZmllbGRJRDsKdHlwZWRlZiBzdHJ1Y3QgX2pmaWVs ZElEICpqZmllbGRJRDsKCnN0cnVjdCBfam1ldGhvZElEOwp0eXBlZGVmIHN0cnVjdCBfam1ldGhv ZElEICpqbWV0aG9kSUQ7CiMgMTY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmkuaCIK dHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKnNpZ25hdHVyZTsKICAg IHZvaWQgKmZuUHRyOwp9IEpOSU5hdGl2ZU1ldGhvZDsKCgoKCgpzdHJ1Y3QgSk5JTmF0aXZlSW50 ZXJmYWNlXzsKCnN0cnVjdCBKTklFbnZfOwoKCnR5cGVkZWYgSk5JRW52XyBKTklFbnY7CiMgMTg4 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmkuaCIKc3RydWN0IEpOSUludm9rZUludGVy ZmFjZV87CgpzdHJ1Y3QgSmF2YVZNXzsKCgp0eXBlZGVmIEphdmFWTV8gSmF2YVZNOwoKCgoKc3Ry dWN0IEpOSU5hdGl2ZUludGVyZmFjZV8gewogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAgdm9pZCAq cmVzZXJ2ZWQxOwogICAgdm9pZCAqcmVzZXJ2ZWQyOwoKICAgIHZvaWQgKnJlc2VydmVkMzsKICAg IGppbnQgKCAqR2V0VmVyc2lvbikoSk5JRW52ICplbnYpOwoKICAgIGpjbGFzcyAoICpEZWZpbmVD bGFzcykKICAgICAgKEpOSUVudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLCBqb2JqZWN0IGxvYWRl ciwgY29uc3QgamJ5dGUgKmJ1ZiwKICAgICAgIGpzaXplIGxlbik7CiAgICBqY2xhc3MgKCAqRmlu ZENsYXNzKQogICAgICAoSk5JRW52ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUpOwoKICAgIHZvaWQg KnJlc2VydmVkNDsKICAgIHZvaWQgKnJlc2VydmVkNTsKICAgIHZvaWQgKnJlc2VydmVkNjsKCiAg ICBqY2xhc3MgKCAqR2V0U3VwZXJjbGFzcykKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mgc3Vi KTsKICAgIGpib29sZWFuICggKklzQXNzaWduYWJsZUZyb20pCiAgICAgIChKTklFbnYgKmVudiwg amNsYXNzIHN1YiwgamNsYXNzIHN1cCk7CiAgICB2b2lkICpyZXNlcnZlZDc7CgoKICAgIGppbnQg KCAqVGhyb3cpCiAgICAgIChKTklFbnYgKmVudiwganRocm93YWJsZSBvYmopOwogICAgamludCAo ICpUaHJvd05ldykKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGNvbnN0IGNoYXIg Km1zZyk7CiAgICBqdGhyb3dhYmxlICggKkV4Y2VwdGlvbk9jY3VycmVkKQogICAgICAoSk5JRW52 ICplbnYpOwogICAgdm9pZCAoICpFeGNlcHRpb25EZXNjcmliZSkKICAgICAgKEpOSUVudiAqZW52 KTsKICAgIHZvaWQgKCAqRXhjZXB0aW9uQ2xlYXIpCiAgICAgIChKTklFbnYgKmVudik7CiAgICB2 b2lkICggKkZhdGFsRXJyb3IpCiAgICAgIChKTklFbnYgKmVudiwgY29uc3QgY2hhciAqbXNnKTsK ICAgIHZvaWQgKnJlc2VydmVkODsKICAgIHZvaWQgKnJlc2VydmVkOTsKCiAgICBqb2JqZWN0ICgg Kk5ld0dsb2JhbFJlZikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IGxvYmopOwogICAgdm9p ZCAoICpEZWxldGVHbG9iYWxSZWYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBncmVmKTsK ICAgIHZvaWQgKCAqRGVsZXRlTG9jYWxSZWYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBv YmopOwogICAgamJvb2xlYW4gKCAqSXNTYW1lT2JqZWN0KQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqMSwgam9iamVjdCBvYmoyKTsKICAgIHZvaWQgKnJlc2VydmVkMTA7CiAgICB2b2lk ICpyZXNlcnZlZDExOwoKICAgIGpvYmplY3QgKCAqQWxsb2NPYmplY3QpCiAgICAgIChKTklFbnYg KmVudiwgamNsYXNzIGNsYXp6KTsKICAgIGpvYmplY3QgKCAqTmV3T2JqZWN0KQogICAgICAoSk5J RW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgam9i amVjdCAoICpOZXdPYmplY3RWKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgam9iamVjdCAoICpOZXdPYmplY3RB KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBq dmFsdWUgKmFyZ3MpOwoKICAgIGpjbGFzcyAoICpHZXRPYmplY3RDbGFzcykKICAgICAgKEpOSUVu diAqZW52LCBqb2JqZWN0IG9iaik7CiAgICBqYm9vbGVhbiAoICpJc0luc3RhbmNlT2YpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eik7CgogICAgam1ldGhvZElE ICggKkdldE1ldGhvZElEKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKTsKCiAgICBqb2JqZWN0ICggKkNhbGxPYmplY3RN ZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGpvYmplY3QgKCAqQ2FsbE9iamVjdE1ldGhvZFYpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAg IGpvYmplY3QgKCAqQ2FsbE9iamVjdE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICogYXJncyk7CgogICAgamJvb2xlYW4g KCAqQ2FsbEJvb2xlYW5NZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpib29sZWFuICggKkNhbGxCb29sZWFuTWV0aG9k VikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCB2 YV9saXN0IGFyZ3MpOwogICAgamJvb2xlYW4gKCAqQ2FsbEJvb2xlYW5NZXRob2RBKQogICAgICAo Sk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqIGFy Z3MpOwoKICAgIGpieXRlICggKkNhbGxCeXRlTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqYnl0ZSAoICpDYWxsQnl0 ZU1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpieXRlICggKkNhbGxCeXRlTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpjaGFyICggKkNhbGxDaGFyTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqY2hhciAoICpDYWxsQ2hh ck1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpjaGFyICggKkNhbGxDaGFyTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpzaG9ydCAoICpDYWxsU2hvcnRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwg am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpzaG9ydCAoICpDYWxs U2hvcnRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqc2hvcnQgKCAqQ2FsbFNob3J0TWV0aG9kQSkK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs dWUgKmFyZ3MpOwoKICAgIGppbnQgKCAqQ2FsbEludE1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52 LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamludCAoICpDYWxs SW50TWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l dGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamludCAoICpDYWxsSW50TWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpsb25nICggKkNhbGxMb25nTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqbG9uZyAoICpDYWxsTG9u Z01ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpsb25nICggKkNhbGxMb25nTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpmbG9hdCAoICpDYWxsRmxvYXRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwg am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpmbG9hdCAoICpDYWxs RmxvYXRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqZmxvYXQgKCAqQ2FsbEZsb2F0TWV0aG9kQSkK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs dWUgKmFyZ3MpOwoKICAgIGpkb3VibGUgKCAqQ2FsbERvdWJsZU1ldGhvZCkKICAgICAgKEpOSUVu diAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamRvdWJs ZSAoICpDYWxsRG91YmxlTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwg am1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamRvdWJsZSAoICpDYWxsRG91 YmxlTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l dGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIHZvaWQgKCAqQ2FsbFZvaWRNZXRob2QpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAg IHZvaWQgKCAqQ2FsbFZvaWRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2Jq LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICB2b2lkICggKkNhbGxWb2lk TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhv ZElELCBqdmFsdWUgKiBhcmdzKTsKCiAgICBqb2JqZWN0ICggKkNhbGxOb252aXJ0dWFsT2JqZWN0 TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpvYmplY3QgKCAqQ2FsbE5vbnZpcnR1YWxPYmpl Y3RNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqb2JqZWN0ICgg KkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0 IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKiBh cmdzKTsKCiAgICBqYm9vbGVhbiAoICpDYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2QpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhv ZElELCAuLi4pOwogICAgamJvb2xlYW4gKCAqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kVikK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQg bWV0aG9kSUQsCiAgICAgICB2YV9saXN0IGFyZ3MpOwogICAgamJvb2xlYW4gKCAqQ2FsbE5vbnZp cnR1YWxCb29sZWFuTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNs YXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKiBhcmdzKTsKCiAg ICBqYnl0ZSAoICpDYWxsTm9udmlydHVhbEJ5dGVNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwg am9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAg amJ5dGUgKCAqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBq b2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICB2YV9s aXN0IGFyZ3MpOwogICAgamJ5dGUgKCAqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9k SUQsCiAgICAgICBqdmFsdWUgKmFyZ3MpOwoKICAgIGpjaGFyICggKkNhbGxOb252aXJ0dWFsQ2hh ck1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqY2hhciAoICpDYWxsTm9udmlydHVhbENoYXJN ZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGpt ZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqY2hhciAoICpDYWxs Tm9udmlydHVhbENoYXJNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBq Y2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIGp2YWx1ZSAqYXJncyk7Cgog ICAganNob3J0ICggKkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2QpCiAgICAgIChKTklFbnYgKmVu diwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwog ICAganNob3J0ICggKkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RWKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg IHZhX2xpc3QgYXJncyk7CiAgICBqc2hvcnQgKCAqQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZEEp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElE IG1ldGhvZElELAogICAgICAganZhbHVlICphcmdzKTsKCiAgICBqaW50ICggKkNhbGxOb252aXJ0 dWFsSW50TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xh enosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGppbnQgKCAqQ2FsbE5vbnZpcnR1YWxJ bnRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqaW50ICggKkNh bGxOb252aXJ0dWFsSW50TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwg amNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKmFyZ3MpOwoK ICAgIGpsb25nICggKkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZCkKICAgICAgKEpOSUVudiAqZW52 LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAg ICBqbG9uZyAoICpDYWxsTm9udmlydHVhbExvbmdNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYs IGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZh X2xpc3QgYXJncyk7CiAgICBqbG9uZyAoICpDYWxsTm9udmlydHVhbExvbmdNZXRob2RBKQogICAg ICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgIGp2YWx1ZSAqYXJncyk7CgogICAgamZsb2F0ICggKkNhbGxOb252aXJ0dWFs RmxvYXRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6 eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamZsb2F0ICggKkNhbGxOb252aXJ0dWFs RmxvYXRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xh enosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqZmxvYXQg KCAqQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAganZhbHVlICph cmdzKTsKCiAgICBqZG91YmxlICggKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kKQogICAgICAo Sk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGpkb3VibGUgKCAqQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RWKQogICAg ICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqZG91YmxlICggKkNhbGxOb252aXJ0dWFs RG91YmxlTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNs YXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKmFyZ3MpOwoKICAgIHZvaWQg KCAqQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qg b2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIHZvaWQgKCAq Q2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9i aiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICB2YV9saXN0IGFyZ3Mp OwogICAgdm9pZCAoICpDYWxsTm9udmlydHVhbFZvaWRNZXRob2RBKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg IGp2YWx1ZSAqIGFyZ3MpOwoKICAgIGpmaWVsZElEICggKkdldEZpZWxkSUQpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcp OwoKICAgIGpvYmplY3QgKCAqR2V0T2JqZWN0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9i amVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamJvb2xlYW4gKCAqR2V0Qm9vbGVhbkZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElEKTsK ICAgIGpieXRlICggKkdldEJ5dGVGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9i aiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqY2hhciAoICpHZXRDaGFyRmllbGQpCiAgICAgIChK TklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAganNob3J0ICgg KkdldFNob3J0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElE IGZpZWxkSUQpOwogICAgamludCAoICpHZXRJbnRGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBq b2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqbG9uZyAoICpHZXRMb25nRmllbGQp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAg amZsb2F0ICggKkdldEZsb2F0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmos IGpmaWVsZElEIGZpZWxkSUQpOwogICAgamRvdWJsZSAoICpHZXREb3VibGVGaWVsZCkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCk7CgogICAgdm9pZCAo ICpTZXRPYmplY3RGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamZpZWxk SUQgZmllbGRJRCwgam9iamVjdCB2YWwpOwogICAgdm9pZCAoICpTZXRCb29sZWFuRmllbGQpCiAg ICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpib29sZWFu IHZhbCk7CiAgICB2b2lkICggKlNldEJ5dGVGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2Jq ZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwgamJ5dGUgdmFsKTsKICAgIHZvaWQgKCAqU2V0Q2hh ckZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElE LCBqY2hhciB2YWwpOwogICAgdm9pZCAoICpTZXRTaG9ydEZpZWxkKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELCBqc2hvcnQgdmFsKTsKICAgIHZvaWQg KCAqU2V0SW50RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElE IGZpZWxkSUQsIGppbnQgdmFsKTsKICAgIHZvaWQgKCAqU2V0TG9uZ0ZpZWxkKQogICAgICAoSk5J RW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELCBqbG9uZyB2YWwpOwogICAg dm9pZCAoICpTZXRGbG9hdEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBq ZmllbGRJRCBmaWVsZElELCBqZmxvYXQgdmFsKTsKICAgIHZvaWQgKCAqU2V0RG91YmxlRmllbGQp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpkb3Vi bGUgdmFsKTsKCiAgICBqbWV0aG9kSUQgKCAqR2V0U3RhdGljTWV0aG9kSUQpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcp OwoKICAgIGpvYmplY3QgKCAqQ2FsbFN0YXRpY09iamVjdE1ldGhvZCkKICAgICAgKEpOSUVudiAq ZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpvYmplY3Qg KCAqQ2FsbFN0YXRpY09iamVjdE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNs YXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqb2JqZWN0ICggKkNh bGxTdGF0aWNPYmplY3RNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpib29sZWFuICggKkNhbGxT dGF0aWNCb29sZWFuTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamJvb2xlYW4gKCAqQ2FsbFN0YXRpY0Jvb2xlYW5N ZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhv ZElELCB2YV9saXN0IGFyZ3MpOwogICAgamJvb2xlYW4gKCAqQ2FsbFN0YXRpY0Jvb2xlYW5NZXRo b2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElE LCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpieXRlICggKkNhbGxTdGF0aWNCeXRlTWV0aG9kKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwog ICAgamJ5dGUgKCAqQ2FsbFN0YXRpY0J5dGVNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpj bGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamJ5dGUg KCAqQ2FsbFN0YXRpY0J5dGVNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6 eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpjaGFyICggKkNhbGxT dGF0aWNDaGFyTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhv ZElEIG1ldGhvZElELCAuLi4pOwogICAgamNoYXIgKCAqQ2FsbFN0YXRpY0NoYXJNZXRob2RWKQog ICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9s aXN0IGFyZ3MpOwogICAgamNoYXIgKCAqQ2FsbFN0YXRpY0NoYXJNZXRob2RBKQogICAgICAoSk5J RW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3Mp OwoKICAgIGpzaG9ydCAoICpDYWxsU3RhdGljU2hvcnRNZXRob2QpCiAgICAgIChKTklFbnYgKmVu diwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqc2hvcnQgKCAq Q2FsbFN0YXRpY1Nob3J0TWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpzaG9ydCAoICpDYWxsU3Rh dGljU2hvcnRNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhv ZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGppbnQgKCAqQ2FsbFN0YXRpY0ludE1l dGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGppbnQgKCAqQ2FsbFN0YXRpY0ludE1ldGhvZFYpCiAgICAgIChKTklFbnYg KmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAg ICBqaW50ICggKkNhbGxTdGF0aWNJbnRNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFz cyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpsb25nICgg KkNhbGxTdGF0aWNMb25nTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg am1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamxvbmcgKCAqQ2FsbFN0YXRpY0xvbmdNZXRo b2RWKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElE LCB2YV9saXN0IGFyZ3MpOwogICAgamxvbmcgKCAqQ2FsbFN0YXRpY0xvbmdNZXRob2RBKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg KmFyZ3MpOwoKICAgIGpmbG9hdCAoICpDYWxsU3RhdGljRmxvYXRNZXRob2QpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqZmxv YXQgKCAqQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mg Y2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpmbG9hdCAoICpD YWxsU3RhdGljRmxvYXRNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpkb3VibGUgKCAqQ2FsbFN0 YXRpY0RvdWJsZU1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRo b2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpkb3VibGUgKCAqQ2FsbFN0YXRpY0RvdWJsZU1ldGhv ZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQs IHZhX2xpc3QgYXJncyk7CiAgICBqZG91YmxlICggKkNhbGxTdGF0aWNEb3VibGVNZXRob2RBKQog ICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs dWUgKmFyZ3MpOwoKICAgIHZvaWQgKCAqQ2FsbFN0YXRpY1ZvaWRNZXRob2QpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNscywgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgdm9pZCAo ICpDYWxsU3RhdGljVm9pZE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywg am1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgdm9pZCAoICpDYWxsU3RhdGlj Vm9pZE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywgam1ldGhvZElEIG1l dGhvZElELCBqdmFsdWUgKiBhcmdzKTsKCiAgICBqZmllbGRJRCAoICpHZXRTdGF0aWNGaWVsZElE KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqc2lnKTsKICAgIGpvYmplY3QgKCAqR2V0U3RhdGljT2JqZWN0RmllbGQpCiAgICAg IChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKTsKICAgIGpib29s ZWFuICggKkdldFN0YXRpY0Jvb2xlYW5GaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mg Y2xhenosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamJ5dGUgKCAqR2V0U3RhdGljQnl0ZUZpZWxk KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAg ICBqY2hhciAoICpHZXRTdGF0aWNDaGFyRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNz IGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKTsKICAgIGpzaG9ydCAoICpHZXRTdGF0aWNTaG9ydEZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7 CiAgICBqaW50ICggKkdldFN0YXRpY0ludEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFz cyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqbG9uZyAoICpHZXRTdGF0aWNMb25nRmll bGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKTsK ICAgIGpmbG9hdCAoICpHZXRTdGF0aWNGbG9hdEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpj bGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqZG91YmxlICggKkdldFN0YXRpY0Rv dWJsZUZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmll bGRJRCk7CgogICAgdm9pZCAoICpTZXRTdGF0aWNPYmplY3RGaWVsZCkKICAgICAgKEpOSUVudiAq ZW52LCBqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsIGpvYmplY3QgdmFsdWUpOwogICAg dm9pZCAoICpTZXRTdGF0aWNCb29sZWFuRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNz IGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqYm9vbGVhbiB2YWx1ZSk7CiAgICB2b2lkICggKlNl dFN0YXRpY0J5dGVGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpmaWVs ZElEIGZpZWxkSUQsIGpieXRlIHZhbHVlKTsKICAgIHZvaWQgKCAqU2V0U3RhdGljQ2hhckZpZWxk KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwgamNo YXIgdmFsdWUpOwogICAgdm9pZCAoICpTZXRTdGF0aWNTaG9ydEZpZWxkKQogICAgICAoSk5JRW52 ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwganNob3J0IHZhbHVlKTsKICAg IHZvaWQgKCAqU2V0U3RhdGljSW50RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNs YXp6LCBqZmllbGRJRCBmaWVsZElELCBqaW50IHZhbHVlKTsKICAgIHZvaWQgKCAqU2V0U3RhdGlj TG9uZ0ZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmll bGRJRCwgamxvbmcgdmFsdWUpOwogICAgdm9pZCAoICpTZXRTdGF0aWNGbG9hdEZpZWxkKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwgamZsb2F0IHZh bHVlKTsKICAgIHZvaWQgKCAqU2V0U3RhdGljRG91YmxlRmllbGQpCiAgICAgIChKTklFbnYgKmVu diwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqZG91YmxlIHZhbHVlKTsKCiAgICBq c3RyaW5nICggKk5ld1N0cmluZykKICAgICAgKEpOSUVudiAqZW52LCBjb25zdCBqY2hhciAqdW5p Y29kZSwganNpemUgbGVuKTsKICAgIGpzaXplICggKkdldFN0cmluZ0xlbmd0aCkKICAgICAgKEpO SUVudiAqZW52LCBqc3RyaW5nIHN0cik7CiAgICBjb25zdCBqY2hhciAqKCAqR2V0U3RyaW5nQ2hh cnMpCiAgICAgIChKTklFbnYgKmVudiwganN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpOwog ICAgdm9pZCAoICpSZWxlYXNlU3RyaW5nQ2hhcnMpCiAgICAgIChKTklFbnYgKmVudiwganN0cmlu ZyBzdHIsIGNvbnN0IGpjaGFyICpjaGFycyk7CgogICAganN0cmluZyAoICpOZXdTdHJpbmdVVEYp CiAgICAgIChKTklFbnYgKmVudiwgY29uc3QgY2hhciAqdXRmKTsKICAgIGpzaXplICggKkdldFN0 cmluZ1VURkxlbmd0aCkKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5nIHN0cik7CiAgICBjb25z dCBjaGFyKiAoICpHZXRTdHJpbmdVVEZDaGFycykKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5n IHN0ciwgamJvb2xlYW4gKmlzQ29weSk7CiAgICB2b2lkICggKlJlbGVhc2VTdHJpbmdVVEZDaGFy cykKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5nIHN0ciwgY29uc3QgY2hhciogY2hhcnMpOwoK CiAgICBqc2l6ZSAoICpHZXRBcnJheUxlbmd0aCkKICAgICAgKEpOSUVudiAqZW52LCBqYXJyYXkg YXJyYXkpOwoKICAgIGpvYmplY3RBcnJheSAoICpOZXdPYmplY3RBcnJheSkKICAgICAgKEpOSUVu diAqZW52LCBqc2l6ZSBsZW4sIGpjbGFzcyBjbGF6eiwgam9iamVjdCBpbml0KTsKICAgIGpvYmpl Y3QgKCAqR2V0T2JqZWN0QXJyYXlFbGVtZW50KQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3RB cnJheSBhcnJheSwganNpemUgaW5kZXgpOwogICAgdm9pZCAoICpTZXRPYmplY3RBcnJheUVsZW1l bnQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdEFycmF5IGFycmF5LCBqc2l6ZSBpbmRleCwg am9iamVjdCB2YWwpOwoKICAgIGpib29sZWFuQXJyYXkgKCAqTmV3Qm9vbGVhbkFycmF5KQogICAg ICAoSk5JRW52ICplbnYsIGpzaXplIGxlbik7CiAgICBqYnl0ZUFycmF5ICggKk5ld0J5dGVBcnJh eSkKICAgICAgKEpOSUVudiAqZW52LCBqc2l6ZSBsZW4pOwogICAgamNoYXJBcnJheSAoICpOZXdD aGFyQXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUgbGVuKTsKICAgIGpzaG9ydEFycmF5 ICggKk5ld1Nob3J0QXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUgbGVuKTsKICAgIGpp bnRBcnJheSAoICpOZXdJbnRBcnJheSkKICAgICAgKEpOSUVudiAqZW52LCBqc2l6ZSBsZW4pOwog ICAgamxvbmdBcnJheSAoICpOZXdMb25nQXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUg bGVuKTsKICAgIGpmbG9hdEFycmF5ICggKk5ld0Zsb2F0QXJyYXkpCiAgICAgIChKTklFbnYgKmVu diwganNpemUgbGVuKTsKICAgIGpkb3VibGVBcnJheSAoICpOZXdEb3VibGVBcnJheSkKICAgICAg KEpOSUVudiAqZW52LCBqc2l6ZSBsZW4pOwoKICAgIGpib29sZWFuICogKCAqR2V0Qm9vbGVhbkFy cmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYgKmVudiwgamJvb2xlYW5BcnJheSBhcnJheSwgamJv b2xlYW4gKmlzQ29weSk7CiAgICBqYnl0ZSAqICggKkdldEJ5dGVBcnJheUVsZW1lbnRzKQogICAg ICAoSk5JRW52ICplbnYsIGpieXRlQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwogICAg amNoYXIgKiAoICpHZXRDaGFyQXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqY2hh ckFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KTsKICAgIGpzaG9ydCAqICggKkdldFNob3J0 QXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqc2hvcnRBcnJheSBhcnJheSwgamJv b2xlYW4gKmlzQ29weSk7CiAgICBqaW50ICogKCAqR2V0SW50QXJyYXlFbGVtZW50cykKICAgICAg KEpOSUVudiAqZW52LCBqaW50QXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwogICAgamxv bmcgKiAoICpHZXRMb25nQXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqbG9uZ0Fy cmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KTsKICAgIGpmbG9hdCAqICggKkdldEZsb2F0QXJy YXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqZmxvYXRBcnJheSBhcnJheSwgamJvb2xl YW4gKmlzQ29weSk7CiAgICBqZG91YmxlICogKCAqR2V0RG91YmxlQXJyYXlFbGVtZW50cykKICAg ICAgKEpOSUVudiAqZW52LCBqZG91YmxlQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwoK ICAgIHZvaWQgKCAqUmVsZWFzZUJvb2xlYW5BcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICpl bnYsIGpib29sZWFuQXJyYXkgYXJyYXksIGpib29sZWFuICplbGVtcywgamludCBtb2RlKTsKICAg IHZvaWQgKCAqUmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICplbnYsIGpi eXRlQXJyYXkgYXJyYXksIGpieXRlICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVs ZWFzZUNoYXJBcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJy YXksIGpjaGFyICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVsZWFzZVNob3J0QXJy YXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqc2hvcnRBcnJheSBhcnJheSwganNob3J0 ICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVsZWFzZUludEFycmF5RWxlbWVudHMp CiAgICAgIChKTklFbnYgKmVudiwgamludEFycmF5IGFycmF5LCBqaW50ICplbGVtcywgamludCBt b2RlKTsKICAgIHZvaWQgKCAqUmVsZWFzZUxvbmdBcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52 ICplbnYsIGpsb25nQXJyYXkgYXJyYXksIGpsb25nICplbGVtcywgamludCBtb2RlKTsKICAgIHZv aWQgKCAqUmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqZmxv YXRBcnJheSBhcnJheSwgamZsb2F0ICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVs ZWFzZURvdWJsZUFycmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYgKmVudiwgamRvdWJsZUFycmF5 IGFycmF5LCBqZG91YmxlICplbGVtcywgamludCBtb2RlKTsKCiAgICB2b2lkICggKkdldEJvb2xl YW5BcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYm9vbGVhbkFycmF5IGFycmF5LCBq c2l6ZSBzdGFydCwganNpemUgbCwgamJvb2xlYW4gKmJ1Zik7CiAgICB2b2lkICggKkdldEJ5dGVB cnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYnl0ZUFycmF5IGFycmF5LCBqc2l6ZSBz dGFydCwganNpemUgbGVuLCBqYnl0ZSAqYnVmKTsKICAgIHZvaWQgKCAqR2V0Q2hhckFycmF5UmVn aW9uKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBq c2l6ZSBsZW4sIGpjaGFyICpidWYpOwogICAgdm9pZCAoICpHZXRTaG9ydEFycmF5UmVnaW9uKQog ICAgICAoSk5JRW52ICplbnYsIGpzaG9ydEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUg bGVuLCBqc2hvcnQgKmJ1Zik7CiAgICB2b2lkICggKkdldEludEFycmF5UmVnaW9uKQogICAgICAo Sk5JRW52ICplbnYsIGppbnRBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgamlu dCAqYnVmKTsKICAgIHZvaWQgKCAqR2V0TG9uZ0FycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICpl bnYsIGpsb25nQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpsb25nICpidWYp OwogICAgdm9pZCAoICpHZXRGbG9hdEFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpm bG9hdEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqZmxvYXQgKmJ1Zik7CiAg ICB2b2lkICggKkdldERvdWJsZUFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpkb3Vi bGVBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgamRvdWJsZSAqYnVmKTsKCiAg ICB2b2lkICggKlNldEJvb2xlYW5BcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYm9v bGVhbkFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbCwgamJvb2xlYW4gKmJ1Zik7CiAg ICB2b2lkICggKlNldEJ5dGVBcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYnl0ZUFy cmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqYnl0ZSAqYnVmKTsKICAgIHZvaWQg KCAqU2V0Q2hhckFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJy YXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpjaGFyICpidWYpOwogICAgdm9pZCAoICpTZXRT aG9ydEFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpzaG9ydEFycmF5IGFycmF5LCBq c2l6ZSBzdGFydCwganNpemUgbGVuLCBqc2hvcnQgKmJ1Zik7CiAgICB2b2lkICggKlNldEludEFy cmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGppbnRBcnJheSBhcnJheSwganNpemUgc3Rh cnQsIGpzaXplIGxlbiwgamludCAqYnVmKTsKICAgIHZvaWQgKCAqU2V0TG9uZ0FycmF5UmVnaW9u KQogICAgICAoSk5JRW52ICplbnYsIGpsb25nQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6 ZSBsZW4sIGpsb25nICpidWYpOwogICAgdm9pZCAoICpTZXRGbG9hdEFycmF5UmVnaW9uKQogICAg ICAoSk5JRW52ICplbnYsIGpmbG9hdEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVu LCBqZmxvYXQgKmJ1Zik7CiAgICB2b2lkICggKlNldERvdWJsZUFycmF5UmVnaW9uKQogICAgICAo Sk5JRW52ICplbnYsIGpkb3VibGVBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwg amRvdWJsZSAqYnVmKTsKCiAgICBqaW50ICggKlJlZ2lzdGVyTmF0aXZlcykKICAgICAgKEpOSUVu diAqZW52LCBqY2xhc3MgY2xhenosIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCAqbWV0aG9kcywKICAg ICAgIGppbnQgbk1ldGhvZHMpOwogICAgamludCAoICpVbnJlZ2lzdGVyTmF0aXZlcykKICAgICAg KEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenopOwoKICAgIGppbnQgKCAqTW9uaXRvckVudGVyKQog ICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqKTsKICAgIGppbnQgKCAqTW9uaXRvckV4aXQp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmopOwoKICAgIGppbnQgKCAqR2V0SmF2YVZN KQogICAgICAoSk5JRW52ICplbnYsIEphdmFWTSAqKnZtKTsKfTsKIyA3MjEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9qYXZhL2puaS5oIgpzdHJ1Y3QgSk5JRW52XyB7CiAgICBjb25zdCBzdHJ1Y3Qg Sk5JTmF0aXZlSW50ZXJmYWNlXyAqZnVuY3Rpb25zOwogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAg dm9pZCAqcmVzZXJ2ZWQxWzZdOwoKCiAgICBqaW50IEdldFZlcnNpb24oKSB7CiAgICAgICAgcmV0 dXJuIGZ1bmN0aW9ucy0+R2V0VmVyc2lvbih0aGlzKTsKICAgIH0KICAgIGpjbGFzcyBEZWZpbmVD bGFzcyhjb25zdCBjaGFyICpuYW1lLCBqb2JqZWN0IGxvYWRlciwgY29uc3QgamJ5dGUgKmJ1ZiwK ICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5EZWZpbmVDbGFzcyh0aGlzLCBuYW1lLCBsb2FkZXIsIGJ1ZiwgbGVuKTsKICAgIH0KICAg IGpjbGFzcyBGaW5kQ2xhc3MoY29uc3QgY2hhciAqbmFtZSkgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPkZpbmRDbGFzcyh0aGlzLCBuYW1lKTsKICAgIH0KICAgIGpjbGFzcyBHZXRTdXBlcmNs YXNzKGpjbGFzcyBzdWIpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdXBlcmNsYXNz KHRoaXMsIHN1Yik7CiAgICB9CiAgICBqYm9vbGVhbiBJc0Fzc2lnbmFibGVGcm9tKGpjbGFzcyBz dWIsIGpjbGFzcyBzdXApIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5Jc0Fzc2lnbmFibGVG cm9tKHRoaXMsIHN1Yiwgc3VwKTsKICAgIH0KCiAgICBqaW50IFRocm93KGp0aHJvd2FibGUgb2Jq KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+VGhyb3codGhpcywgb2JqKTsKICAgIH0KICAg IGppbnQgVGhyb3dOZXcoamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICptc2cpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5UaHJvd05ldyh0aGlzLCBjbGF6eiwgbXNnKTsKICAgIH0KICAgIGp0 aHJvd2FibGUgRXhjZXB0aW9uT2NjdXJyZWQoKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ RXhjZXB0aW9uT2NjdXJyZWQodGhpcyk7CiAgICB9CiAgICB2b2lkIEV4Y2VwdGlvbkRlc2NyaWJl KCkgewogICAgICAgIGZ1bmN0aW9ucy0+RXhjZXB0aW9uRGVzY3JpYmUodGhpcyk7CiAgICB9CiAg ICB2b2lkIEV4Y2VwdGlvbkNsZWFyKCkgewogICAgICAgIGZ1bmN0aW9ucy0+RXhjZXB0aW9uQ2xl YXIodGhpcyk7CiAgICB9CiAgICB2b2lkIEZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKSB7CiAg ICAgICAgZnVuY3Rpb25zLT5GYXRhbEVycm9yKHRoaXMsIG1zZyk7CiAgICB9CgogICAgam9iamVj dCBOZXdHbG9iYWxSZWYoam9iamVjdCBsb2JqKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ TmV3R2xvYmFsUmVmKHRoaXMsbG9iaik7CiAgICB9CiAgICB2b2lkIERlbGV0ZUdsb2JhbFJlZihq b2JqZWN0IGdyZWYpIHsKICAgICAgICBmdW5jdGlvbnMtPkRlbGV0ZUdsb2JhbFJlZih0aGlzLGdy ZWYpOwogICAgfQogICAgdm9pZCBEZWxldGVMb2NhbFJlZihqb2JqZWN0IG9iaikgewogICAgICAg IGZ1bmN0aW9ucy0+RGVsZXRlTG9jYWxSZWYodGhpcywgb2JqKTsKICAgIH0KCiAgICBqYm9vbGVh biBJc1NhbWVPYmplY3Qoam9iamVjdCBvYmoxLCBqb2JqZWN0IG9iajIpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5Jc1NhbWVPYmplY3QodGhpcyxvYmoxLG9iajIpOwogICAgfQoKICAgIGpv YmplY3QgQWxsb2NPYmplY3QoamNsYXNzIGNsYXp6KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u cy0+QWxsb2NPYmplY3QodGhpcyxjbGF6eik7CiAgICB9CiAgICBqb2JqZWN0IE5ld09iamVjdChq Y2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBh cmdzOwogICAgICAgIGpvYmplY3QgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3Rh cnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPk5ld09iamVj dFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFy Z3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqb2JqZWN0IE5ld09iamVjdFYo amNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg dmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3T2JqZWN0Vih0aGlz LGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgam9iamVjdCBOZXdPYmplY3RBKGpjbGFz cyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgIGp2YWx1 ZSAqYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPk5ld09iamVjdEEodGhpcyxjbGF6 eixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqY2xhc3MgR2V0T2JqZWN0Q2xhc3Moam9iamVj dCBvYmopIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRPYmplY3RDbGFzcyh0aGlzLG9i aik7CiAgICB9CiAgICBqYm9vbGVhbiBJc0luc3RhbmNlT2Yoam9iamVjdCBvYmosIGpjbGFzcyBj bGF6eikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPklzSW5zdGFuY2VPZih0aGlzLG9iaixj bGF6eik7CiAgICB9CgogICAgam1ldGhvZElEIEdldE1ldGhvZElEKGpjbGFzcyBjbGF6eiwgY29u c3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzaWcp IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRNZXRob2RJRCh0aGlzLGNsYXp6LG5hbWUs c2lnKTsKICAgIH0KCiAgICBqb2JqZWN0IENhbGxPYmplY3RNZXRob2Qoam9iamVjdCBvYmosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpv YmplY3QgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhv ZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxPYmplY3RNZXRob2RWKHRoaXMs b2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAg ICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZFYoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgdmFf bGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE9iamVjdE1ldGhvZFYo dGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqb2JqZWN0IENhbGxPYmplY3RNZXRo b2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsT2JqZWN0 TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqYm9vbGVhbiBDYWxs Qm9vbGVhbk1ldGhvZChqb2JqZWN0IG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IGpib29sZWFuIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxt ZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsQm9vbGVhbk1ldGhvZFYo dGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsK ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRo b2RWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2Fs bEJvb2xlYW5NZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJvb2xl YW4gQ2FsbEJvb2xlYW5NZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICogYXJncykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkNhbGxCb29sZWFuTWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCwgYXJn cyk7CiAgICB9CgogICAgamJ5dGUgQ2FsbEJ5dGVNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpieXRlIHJl c3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAg ICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsQnl0ZU1ldGhvZFYodGhpcyxvYmosbWV0aG9k SUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4g cmVzdWx0OwogICAgfQogICAgamJ5dGUgQ2FsbEJ5dGVNZXRob2RWKGpvYmplY3Qgb2JqLCBqbWV0 aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbEJ5dGVNZXRob2RWKHRoaXMsb2JqLG1ldGhv ZElELGFyZ3MpOwogICAgfQogICAgamJ5dGUgQ2FsbEJ5dGVNZXRob2RBKGpvYmplY3Qgb2JqLCBq bWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICogYXJn cykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxCeXRlTWV0aG9kQSh0aGlzLG9iaixt ZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZChqb2JqZWN0IG9i aiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAg ICAgamNoYXIgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxDaGFyTWV0aG9kVih0aGlz LG9iaixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZFYoam9iamVj dCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s aXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsQ2hhck1ldGhvZFYodGhp cyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZEEoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBq dmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbENoYXJNZXRob2RB KHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpzaG9ydCBDYWxsU2hvcnRNZXRo b2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlz dCBhcmdzOwogICAgICAgIGpzaG9ydCByZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19z dGFydCgoYXJncyksbWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbFNo b3J0TWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFf ZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqc2hvcnQgQ2FsbFNo b3J0TWV0aG9kVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ Q2FsbFNob3J0TWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpzaG9y dCBDYWxsU2hvcnRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbFNob3J0TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0K CiAgICBqaW50IENhbGxJbnRNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwg Li4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGppbnQgcmVzdWx0OwogICAgICAg IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQg PSBmdW5jdGlvbnMtPkNhbGxJbnRNZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAg ICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0K ICAgIGppbnQgQ2FsbEludE1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbEludE1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAg ICBqaW50IENhbGxJbnRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5DYWxsSW50TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAg ICBqbG9uZyBDYWxsTG9uZ01ldGhvZChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCAu Li4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamxvbmcgcmVzdWx0OwogICAgICAg IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQg PSBmdW5jdGlvbnMtPkNhbGxMb25nTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAg ICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9 CiAgICBqbG9uZyBDYWxsTG9uZ01ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsTG9uZ01ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAg ICB9CiAgICBqbG9uZyBDYWxsTG9uZ01ldGhvZEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbExvbmdNZXRob2RBKHRoaXMsb2JqLG1ldGhvZElELGFyZ3Mp OwogICAgfQoKICAgIGpmbG9hdCBDYWxsRmxvYXRNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpmbG9hdCBy ZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aG9kSUQpOwog ICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbEZsb2F0TWV0aG9kVih0aGlzLG9iaixtZXRo b2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVy biByZXN1bHQ7CiAgICB9CiAgICBqZmxvYXQgQ2FsbEZsb2F0TWV0aG9kVihqb2JqZWN0IG9iaiwg am1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBh cmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbEZsb2F0TWV0aG9kVih0aGlzLG9i aixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpmbG9hdCBDYWxsRmxvYXRNZXRob2RBKGpvYmpl Y3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBq dmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbEZsb2F0TWV0aG9k QSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqZG91YmxlIENhbGxEb3VibGVN ZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFf bGlzdCBhcmdzOwogICAgICAgIGpkb3VibGUgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRh cmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNh bGxEb3VibGVNZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRp bl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpkb3VibGUg Q2FsbERvdWJsZU1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u cy0+Q2FsbERvdWJsZU1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBq ZG91YmxlIENhbGxEb3VibGVNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQs CiAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5DYWxsRG91YmxlTWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAg IH0KCiAgICB2b2lkIENhbGxWb2lkTWV0aG9kKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k SUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJn X3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgZnVuY3Rpb25zLT5DYWxsVm9pZE1ldGhv ZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdz KTsKICAgIH0KICAgIHZvaWQgQ2FsbFZvaWRNZXRob2RWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAg ICBmdW5jdGlvbnMtPkNhbGxWb2lkTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAg IH0KICAgIHZvaWQgQ2FsbFZvaWRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgZnVu Y3Rpb25zLT5DYWxsVm9pZE1ldGhvZEEodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9Cgog ICAgam9iamVjdCBDYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQg bWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqb2JqZWN0IHJl c3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAg ICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZFYodGhp cyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdz KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgam9iamVjdCBDYWxsTm9udmlydHVh bE9iamVjdE1ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdz KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxPYmplY3RNZXRob2RW KHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpvYmplY3QgQ2FsbE5vbnZp cnR1YWxPYmplY3RNZXRob2RBKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAq IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbE9iamVjdE1l dGhvZEEodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpib29sZWFuIENh bGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwg Li4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpib29sZWFuIHJlc3VsdDsKICAg ICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVz dWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RWKHRoaXMsb2JqLGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqYm9vbGVhbiBDYWxsTm9udmlydHVhbEJvb2xl YW5NZXRob2RWKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kVih0 aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJvb2xlYW4gQ2FsbE5vbnZp cnR1YWxCb29sZWFuTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1 ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEJvb2xl YW5NZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsIGFyZ3MpOwogICAgfQoKICAgIGpieXRl IENhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7 CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpieXRlIHJlc3VsdDsKICAgICAgICBfX2J1 aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVu Y3Rpb25zLT5DYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJRCxh cmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1 bHQ7CiAgICB9CiAgICBqYnl0ZSBDYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWKGpvYmplY3Qgb2Jq LCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRo b2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ Q2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAg fQogICAgamJ5dGUgQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0 aG9kSUQsIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9u dmlydHVhbEJ5dGVNZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAg amNoYXIgQ2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAu Li4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamNoYXIgcmVzdWx0OwogICAgICAg IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQg PSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZFYodGhpcyxvYmosY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv ZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJu IHJlc3VsdDsKICAgIH0KICAgIGpjaGFyIENhbGxOb252aXJ0dWFsQ2hhck1ldGhvZFYoam9iamVj dCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg am1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5DYWxsTm9udmlydHVhbENoYXJNZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7 CiAgICB9CiAgICBqY2hhciBDYWxsTm9udmlydHVhbENoYXJNZXRob2RBKGpvYmplY3Qgb2JqLCBq Y2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ RCBtZXRob2RJRCwganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNh bGxOb252aXJ0dWFsQ2hhck1ldGhvZEEodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgIH0K CiAgICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1l dGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAganNob3J0IHJlc3Vs dDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAg ICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kVih0aGlzLG9i aixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAg ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpzaG9ydCBDYWxsTm9udmlydHVhbFNob3J0 TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZFYodGhpcyxvYmos Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxTaG9ydE1l dGhvZEEoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kQSh0aGlzLG9iaixj bGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqaW50IENhbGxOb252aXJ0dWFsSW50TWV0aG9k KGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAg ICAgIGppbnQgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsSW50TWV0 aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5k KGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqaW50IENhbGxOb252aXJ0 dWFsSW50TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEludE1ldGhvZFYodGhpcyxvYmos Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamludCBDYWxsTm9udmlydHVhbEludE1ldGhvZEEo am9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBm dW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJn cyk7CiAgICB9CgogICAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kKGpvYmplY3Qgb2Jq LCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhv ZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamxvbmcg cmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsK ICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZFYodGhp cyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7 CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpsb25nIENhbGxOb252aXJ0dWFsTG9u Z01ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbExvbmdNZXRob2RWKHRoaXMsb2JqLGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqbG9uZyBDYWxsTm9udmlydHVhbExvbmdNZXRob2RB KGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICogYXJncykgewogICAgICAgIHJldHVy biBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZEEodGhpcyxvYmosY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJ RCxhcmdzKTsKICAgIH0KCiAgICBqZmxvYXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZChqb2Jq ZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAg ICAgamZsb2F0IHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxt ZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEZsb2F0 TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92 YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpmbG9hdCBDYWxs Tm9udmlydHVhbEZsb2F0TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kVih0aGlzLG9iaixjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpmbG9hdCBDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k QShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2Fs bE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9 CgogICAgamRvdWJsZSBDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZChqb2JqZWN0IG9iaiwgamNs YXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqZG91Ymxl IHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7 CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZFYo dGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChh cmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamRvdWJsZSBDYWxsTm9udmly dHVhbERvdWJsZU1ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kVih0aGlzLG9iaixjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqZG91YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0 aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlv bnMtPkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJn cyk7CiAgICB9CgogICAgdm9pZCBDYWxsTm9udmlydHVhbFZvaWRNZXRob2Qoam9iamVjdCBvYmos IGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIF9fYnVpbHRp bl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxO b252aXJ0dWFsVm9pZE1ldGhvZFYodGhpcyxvYmosY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICAg ICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsKICAgIH0KICAgIHZvaWQgQ2FsbE5vbnZpcnR1YWxW b2lkTWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxOb252 aXJ0dWFsVm9pZE1ldGhvZFYodGhpcyxvYmosY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAg ICB2b2lkIENhbGxOb252aXJ0dWFsVm9pZE1ldGhvZEEoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICogYXJncykgewogICAg ICAgIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kQSh0aGlzLG9iaixjbGF6eixt ZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqZmllbGRJRCBHZXRGaWVsZElEKGpjbGFzcyBjbGF6 eiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq c2lnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0RmllbGRJRCh0aGlzLGNsYXp6LG5h bWUsc2lnKTsKICAgIH0KCiAgICBqb2JqZWN0IEdldE9iamVjdEZpZWxkKGpvYmplY3Qgb2JqLCBq ZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0T2JqZWN0Rmll bGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqYm9vbGVhbiBHZXRCb29sZWFuRmllbGQo am9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5HZXRCb29sZWFuRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqYnl0ZSBHZXRC eXRlRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5HZXRCeXRlRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqY2hh ciBHZXRDaGFyRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5HZXRDaGFyRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAg ICBqc2hvcnQgR2V0U2hvcnRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFNob3J0RmllbGQodGhpcyxvYmosZmllbGRJRCk7 CiAgICB9CiAgICBqaW50IEdldEludEZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElE KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0SW50RmllbGQodGhpcyxvYmosZmllbGRJ RCk7CiAgICB9CiAgICBqbG9uZyBHZXRMb25nRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZp ZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRMb25nRmllbGQodGhpcyxvYmos ZmllbGRJRCk7CiAgICB9CiAgICBqZmxvYXQgR2V0RmxvYXRGaWVsZChqb2JqZWN0IG9iaiwgamZp ZWxkSUQgZmllbGRJRCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEZsb2F0RmllbGQo dGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqZG91YmxlIEdldERvdWJsZUZpZWxkKGpvYmpl Y3Qgb2JqLCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0 RG91YmxlRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CgogICAgdm9pZCBTZXRPYmplY3RG aWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwgam9iamVjdCB2YWwpIHsKICAgICAg ICBmdW5jdGlvbnMtPlNldE9iamVjdEZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0K ICAgIHZvaWQgU2V0Qm9vbGVhbkZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELAog ICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsKSB7CiAgICAgICAgZnVuY3Rpb25z LT5TZXRCb29sZWFuRmllbGQodGhpcyxvYmosZmllbGRJRCx2YWwpOwogICAgfQogICAgdm9pZCBT ZXRCeXRlRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAg ICAgICAgICBqYnl0ZSB2YWwpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldEJ5dGVGaWVsZCh0aGlz LG9iaixmaWVsZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldENoYXJGaWVsZChqb2JqZWN0IG9i aiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAgICAgIGpjaGFyIHZhbCkgewog ICAgICAgIGZ1bmN0aW9ucy0+U2V0Q2hhckZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAg IH0KICAgIHZvaWQgU2V0U2hvcnRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwK ICAgICAgICAgICAgICAgICAgICAgICBqc2hvcnQgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5T ZXRTaG9ydEZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZvaWQgU2V0SW50 RmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAg IGppbnQgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRJbnRGaWVsZCh0aGlzLG9iaixmaWVs ZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldExvbmdGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxk SUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAgICAgIGpsb25nIHZhbCkgewogICAgICAgIGZ1 bmN0aW9ucy0+U2V0TG9uZ0ZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZv aWQgU2V0RmxvYXRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAg ICAgICAgICAgICAgICBqZmxvYXQgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRGbG9hdEZp ZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZvaWQgU2V0RG91YmxlRmllbGQo am9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIGpk b3VibGUgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXREb3VibGVGaWVsZCh0aGlzLG9iaixm aWVsZElELHZhbCk7CiAgICB9CgogICAgam1ldGhvZElEIEdldFN0YXRpY01ldGhvZElEKGpjbGFz cyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpzaWcpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNN ZXRob2RJRCh0aGlzLGNsYXp6LG5hbWUsc2lnKTsKICAgIH0KCiAgICBqb2JqZWN0IENhbGxTdGF0 aWNPYmplY3RNZXRob2QoamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IGpvYmplY3QgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxTdGF0aWNPYmplY3RNZXRo b2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChh cmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgam9iamVjdCBDYWxsU3RhdGlj T2JqZWN0TWV0aG9kVihqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0 aW9ucy0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsK ICAgIH0KICAgIGpvYmplY3QgQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEoamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAq YXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNPYmplY3RNZXRob2RB KHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamJvb2xlYW4gQ2FsbFN0YXRp Y0Jvb2xlYW5NZXRob2QoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7 CiAgICAgICAgamJvb2xlYW4gcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQo KGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxTdGF0aWNC b29sZWFuTWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRp bl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpib29sZWFu IENhbGxTdGF0aWNCb29sZWFuTWV0aG9kVihqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZFYodGhpcyxj bGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpib29sZWFuIENhbGxTdGF0aWNCb29sZWFu TWV0aG9kQShqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdz KTsKICAgIH0KCiAgICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZChqY2xhc3MgY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewog ICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqYnl0ZSByZXN1bHQ7CiAgICAgICAgX19idWls dGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0 aW9ucy0+Q2FsbFN0YXRpY0J5dGVNZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAg ICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg fQogICAgamJ5dGUgQ2FsbFN0YXRpY0J5dGVNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncykg ewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNCeXRlTWV0aG9kVih0aGlzLGNs YXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJ5dGUgQ2FsbFN0YXRpY0J5dGVNZXRob2RB KGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQg bWV0aG9kSUQsIGp2YWx1ZSAqYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxT dGF0aWNCeXRlTWV0aG9kQSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpj aGFyIENhbGxTdGF0aWNDaGFyTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBh cmdzOwogICAgICAgIGpjaGFyIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0 KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3RhdGlj Q2hhck1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5f dmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqY2hhciBDYWxs U3RhdGljQ2hhck1ldGhvZFYoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0NoYXJNZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJn cyk7CiAgICB9CiAgICBqY2hhciBDYWxsU3RhdGljQ2hhck1ldGhvZEEoamNsYXNzIGNsYXp6LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVl ICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0NoYXJNZXRob2RB KHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAganNob3J0IENhbGxTdGF0aWNT aG9ydE1ldGhvZChqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IGpzaG9ydCByZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0 aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9k Vih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJn cyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpzaG9ydCBDYWxsU3RhdGljU2hv cnRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0 aW9ucy0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwog ICAgfQogICAganNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZEEoamNsYXNzIGNsYXp6LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg KmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljU2hvcnRNZXRob2RB KHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamludCBDYWxsU3RhdGljSW50 TWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqaW50IHJl c3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAg ICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3RhdGljSW50TWV0aG9kVih0aGlzLGNsYXp6 LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAg cmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGppbnQgQ2FsbFN0YXRpY0ludE1ldGhvZFYoamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQs IHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNJbnRN ZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqaW50IENhbGxTdGF0 aWNJbnRNZXRob2RBKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5DYWxsU3RhdGljSW50TWV0aG9kQSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAg fQoKICAgIGpsb25nIENhbGxTdGF0aWNMb25nTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAg dmFfbGlzdCBhcmdzOwogICAgICAgIGpsb25nIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3Rk YXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5D YWxsU3RhdGljTG9uZ01ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICBf X2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBq bG9uZyBDYWxsU3RhdGljTG9uZ01ldGhvZFYoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0xvbmdNZXRob2RWKHRoaXMsY2xhenosbWV0 aG9kSUQsYXJncyk7CiAgICB9CiAgICBqbG9uZyBDYWxsU3RhdGljTG9uZ01ldGhvZEEoamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJ RCwganZhbHVlICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0xv bmdNZXRob2RBKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamZsb2F0IENh bGxTdGF0aWNGbG9hdE1ldGhvZChqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdz OwogICAgICAgIGpmbG9hdCByZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgo YXJncyksbWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0Zs b2F0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92 YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpmbG9hdCBDYWxs U3RhdGljRmxvYXRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0 dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0Zsb2F0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElE LGFyZ3MpOwogICAgfQogICAgamZsb2F0IENhbGxTdGF0aWNGbG9hdE1ldGhvZEEoamNsYXNzIGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElE LCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljRmxv YXRNZXRob2RBKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamRvdWJsZSBD YWxsU3RhdGljRG91YmxlTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3Qg YXJnczsKICAgICAgICBqZG91YmxlIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0 YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3Rh dGljRG91YmxlTWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVp bHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpkb3Vi bGUgQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZFYoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncykgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNEb3VibGVNZXRob2RWKHRoaXMsY2xh enosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqZG91YmxlIENhbGxTdGF0aWNEb3VibGVNZXRo b2RBKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l dGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5DYWxsU3RhdGljRG91YmxlTWV0aG9kQSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAg fQoKICAgIHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRob2QoamNsYXNzIGNscywgam1ldGhvZElEIG1l dGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgX19idWlsdGluX3N0 ZGFyZ19zdGFydCgoYXJncyksbWV0aG9kSUQpOwogICAgICAgIGZ1bmN0aW9ucy0+Q2FsbFN0YXRp Y1ZvaWRNZXRob2RWKHRoaXMsY2xzLG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92 YV9lbmQoYXJncyk7CiAgICB9CiAgICB2b2lkIENhbGxTdGF0aWNWb2lkTWV0aG9kVihqY2xhc3Mg Y2xzLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YV9saXN0IGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxTdGF0aWNWb2lkTWV0aG9kVih0 aGlzLGNscyxtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRo b2RBKGpjbGFzcyBjbHMsIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxTdGF0aWNW b2lkTWV0aG9kQSh0aGlzLGNscyxtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqZmllbGRJRCBH ZXRTdGF0aWNGaWVsZElEKGpjbGFzcyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2lnKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+R2V0U3RhdGljRmllbGRJRCh0aGlzLGNsYXp6LG5hbWUsc2lnKTsKICAgIH0KICAg IGpvYmplY3QgR2V0U3RhdGljT2JqZWN0RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVs ZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGljT2JqZWN0RmllbGQodGhp cyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpib29sZWFuIEdldFN0YXRpY0Jvb2xlYW5GaWVs ZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5HZXRTdGF0aWNCb29sZWFuRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAg IGpieXRlIEdldFN0YXRpY0J5dGVGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQp IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNCeXRlRmllbGQodGhpcyxjbGF6 eixmaWVsZElEKTsKICAgIH0KICAgIGpjaGFyIEdldFN0YXRpY0NoYXJGaWVsZChqY2xhc3MgY2xh enosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0 aWNDaGFyRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpzaG9ydCBHZXRTdGF0 aWNTaG9ydEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkdldFN0YXRpY1Nob3J0RmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsK ICAgIH0KICAgIGppbnQgR2V0U3RhdGljSW50RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBm aWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGljSW50RmllbGQodGhp cyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpsb25nIEdldFN0YXRpY0xvbmdGaWVsZChqY2xh c3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5H ZXRTdGF0aWNMb25nRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpmbG9hdCBH ZXRTdGF0aWNGbG9hdEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewogICAg ICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0YXRpY0Zsb2F0RmllbGQodGhpcyxjbGF6eixmaWVs ZElEKTsKICAgIH0KICAgIGpkb3VibGUgR2V0U3RhdGljRG91YmxlRmllbGQoamNsYXNzIGNsYXp6 LCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGlj RG91YmxlRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KCiAgICB2b2lkIFNldFN0YXRp Y09iamVjdEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgam9iamVjdCB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY09i amVjdEZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0 YXRpY0Jvb2xlYW5GaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGpib29sZWFuIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3Rh dGljQm9vbGVhbkZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lk IFNldFN0YXRpY0J5dGVGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAg ICAgICAgICAgICAgICAgICAgIGpieXRlIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3Rh dGljQnl0ZUZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNl dFN0YXRpY0NoYXJGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGpjaGFyIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3RhdGlj Q2hhckZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0 YXRpY1Nob3J0RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAg ICAgICAgICAgICAgICBqc2hvcnQgdmFsdWUpIHsKICAgICAgZnVuY3Rpb25zLT5TZXRTdGF0aWNT aG9ydEZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0 YXRpY0ludEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgamludCB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY0ludEZp ZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0YXRpY0xv bmdGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAg ICAgICAgIGpsb25nIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3RhdGljTG9uZ0ZpZWxk KHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0YXRpY0Zsb2F0 RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAgICAgICAgICAg ICAgICBqZmxvYXQgdmFsdWUpIHsKICAgICAgZnVuY3Rpb25zLT5TZXRTdGF0aWNGbG9hdEZpZWxk KHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0YXRpY0RvdWJs ZUZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgamRvdWJsZSB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY0RvdWJsZUZp ZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CgogICAganN0cmluZyBOZXdTdHJp bmcoY29uc3QgamNoYXIgKnVuaWNvZGUsIGpzaXplIGxlbikgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPk5ld1N0cmluZyh0aGlzLHVuaWNvZGUsbGVuKTsKICAgIH0KICAgIGpzaXplIEdldFN0 cmluZ0xlbmd0aChqc3RyaW5nIHN0cikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0 cmluZ0xlbmd0aCh0aGlzLHN0cik7CiAgICB9CiAgICBjb25zdCBqY2hhciAqR2V0U3RyaW5nQ2hh cnMoanN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5HZXRTdHJpbmdDaGFycyh0aGlzLHN0cixpc0NvcHkpOwogICAgfQogICAgdm9pZCBSZWxl YXNlU3RyaW5nQ2hhcnMoanN0cmluZyBzdHIsIGNvbnN0IGpjaGFyICpjaGFycykgewogICAgICAg IGZ1bmN0aW9ucy0+UmVsZWFzZVN0cmluZ0NoYXJzKHRoaXMsc3RyLGNoYXJzKTsKICAgIH0KCiAg ICBqc3RyaW5nIE5ld1N0cmluZ1VURihjb25zdCBjaGFyICp1dGYpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5OZXdTdHJpbmdVVEYodGhpcyx1dGYpOwogICAgfQogICAganNpemUgR2V0U3Ry aW5nVVRGTGVuZ3RoKGpzdHJpbmcgc3RyKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0 U3RyaW5nVVRGTGVuZ3RoKHRoaXMsc3RyKTsKICAgIH0KICAgIGNvbnN0IGNoYXIqIEdldFN0cmlu Z1VURkNoYXJzKGpzdHJpbmcgc3RyLCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+R2V0U3RyaW5nVVRGQ2hhcnModGhpcyxzdHIsaXNDb3B5KTsKICAgIH0KICAg IHZvaWQgUmVsZWFzZVN0cmluZ1VURkNoYXJzKGpzdHJpbmcgc3RyLCBjb25zdCBjaGFyKiBjaGFy cykgewogICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKHRoaXMsc3RyLGNo YXJzKTsKICAgIH0KCiAgICBqc2l6ZSBHZXRBcnJheUxlbmd0aChqYXJyYXkgYXJyYXkpIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRBcnJheUxlbmd0aCh0aGlzLGFycmF5KTsKICAgIH0K CiAgICBqb2JqZWN0QXJyYXkgTmV3T2JqZWN0QXJyYXkoanNpemUgbGVuLCBqY2xhc3MgY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBpbml0KSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+TmV3T2JqZWN0QXJyYXkodGhpcyxsZW4sY2xhenosaW5pdCk7CiAg ICB9CiAgICBqb2JqZWN0IEdldE9iamVjdEFycmF5RWxlbWVudChqb2JqZWN0QXJyYXkgYXJyYXks IGpzaXplIGluZGV4KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0T2JqZWN0QXJyYXlF bGVtZW50KHRoaXMsYXJyYXksaW5kZXgpOwogICAgfQogICAgdm9pZCBTZXRPYmplY3RBcnJheUVs ZW1lbnQoam9iamVjdEFycmF5IGFycmF5LCBqc2l6ZSBpbmRleCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpvYmplY3QgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRPYmplY3RB cnJheUVsZW1lbnQodGhpcyxhcnJheSxpbmRleCx2YWwpOwogICAgfQoKICAgIGpib29sZWFuQXJy YXkgTmV3Qm9vbGVhbkFycmF5KGpzaXplIGxlbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt Pk5ld0Jvb2xlYW5BcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqYnl0ZUFycmF5IE5ld0J5dGVB cnJheShqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdCeXRlQXJyYXko dGhpcyxsZW4pOwogICAgfQogICAgamNoYXJBcnJheSBOZXdDaGFyQXJyYXkoanNpemUgbGVuKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3Q2hhckFycmF5KHRoaXMsbGVuKTsKICAgIH0K ICAgIGpzaG9ydEFycmF5IE5ld1Nob3J0QXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+TmV3U2hvcnRBcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqaW50QXJyYXkg TmV3SW50QXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3SW50 QXJyYXkodGhpcyxsZW4pOwogICAgfQogICAgamxvbmdBcnJheSBOZXdMb25nQXJyYXkoanNpemUg bGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3TG9uZ0FycmF5KHRoaXMsbGVuKTsK ICAgIH0KICAgIGpmbG9hdEFycmF5IE5ld0Zsb2F0QXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+TmV3RmxvYXRBcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqZG91 YmxlQXJyYXkgTmV3RG91YmxlQXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0 aW9ucy0+TmV3RG91YmxlQXJyYXkodGhpcyxsZW4pOwogICAgfQoKICAgIGpib29sZWFuICogR2V0 Qm9vbGVhbkFycmF5RWxlbWVudHMoamJvb2xlYW5BcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29w eSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEJvb2xlYW5BcnJheUVsZW1lbnRzKHRo aXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAgIGpieXRlICogR2V0Qnl0ZUFycmF5RWxlbWVudHMo amJ5dGVBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPkdldEJ5dGVBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAg IGpjaGFyICogR2V0Q2hhckFycmF5RWxlbWVudHMoamNoYXJBcnJheSBhcnJheSwgamJvb2xlYW4g KmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldENoYXJBcnJheUVsZW1lbnRz KHRoaXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAgIGpzaG9ydCAqIEdldFNob3J0QXJyYXlFbGVt ZW50cyhqc2hvcnRBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVy biBmdW5jdGlvbnMtPkdldFNob3J0QXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGlzQ29weSk7CiAg ICB9CiAgICBqaW50ICogR2V0SW50QXJyYXlFbGVtZW50cyhqaW50QXJyYXkgYXJyYXksIGpib29s ZWFuICppc0NvcHkpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRJbnRBcnJheUVsZW1l bnRzKHRoaXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAgIGpsb25nICogR2V0TG9uZ0FycmF5RWxl bWVudHMoamxvbmdBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVy biBmdW5jdGlvbnMtPkdldExvbmdBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksaXNDb3B5KTsKICAg IH0KICAgIGpmbG9hdCAqIEdldEZsb2F0QXJyYXlFbGVtZW50cyhqZmxvYXRBcnJheSBhcnJheSwg amJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEZsb2F0QXJy YXlFbGVtZW50cyh0aGlzLGFycmF5LGlzQ29weSk7CiAgICB9CiAgICBqZG91YmxlICogR2V0RG91 YmxlQXJyYXlFbGVtZW50cyhqZG91YmxlQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXREb3VibGVBcnJheUVsZW1lbnRzKHRoaXMsYXJy YXksaXNDb3B5KTsKICAgIH0KCiAgICB2b2lkIFJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyhq Ym9vbGVhbkFycmF5IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg amJvb2xlYW4gKmVsZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlu dCBtb2RlKSB7CiAgICAgICAgZnVuY3Rpb25zLT5SZWxlYXNlQm9vbGVhbkFycmF5RWxlbWVudHMo dGhpcyxhcnJheSxlbGVtcyxtb2RlKTsKICAgIH0KICAgIHZvaWQgUmVsZWFzZUJ5dGVBcnJheUVs ZW1lbnRzKGpieXRlQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqYnl0ZSAqZWxlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG1v ZGUpIHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyh0aGlzLGFy cmF5LGVsZW1zLG1vZGUpOwogICAgfQogICAgdm9pZCBSZWxlYXNlQ2hhckFycmF5RWxlbWVudHMo amNoYXJBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpjaGFy ICplbGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgbW9kZSkgewog ICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZUNoYXJBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksZWxl bXMsbW9kZSk7CiAgICB9CiAgICB2b2lkIFJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMoanNob3J0 QXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNob3J0ICpl bGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG1vZGUpIHsKICAg ICAgICBmdW5jdGlvbnMtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHModGhpcyxhcnJheSxlbGVt cyxtb2RlKTsKICAgIH0KICAgIHZvaWQgUmVsZWFzZUludEFycmF5RWxlbWVudHMoamludEFycmF5 IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50ICplbGVtcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBtb2RlKSB7CiAgICAgICAgZnVuY3Rp b25zLT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGVsZW1zLG1vZGUpOwogICAg fQogICAgdm9pZCBSZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMoamxvbmdBcnJheSBhcnJheSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nICplbGVtcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGppbnQgbW9kZSkgewogICAgICAgIGZ1bmN0aW9ucy0+UmVs ZWFzZUxvbmdBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksZWxlbXMsbW9kZSk7CiAgICB9CiAgICB2 b2lkIFJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoamZsb2F0QXJyYXkgYXJyYXksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0ICplbGVtcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqaW50IG1vZGUpIHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVh c2VGbG9hdEFycmF5RWxlbWVudHModGhpcyxhcnJheSxlbGVtcyxtb2RlKTsKICAgIH0KICAgIHZv aWQgUmVsZWFzZURvdWJsZUFycmF5RWxlbWVudHMoamRvdWJsZUFycmF5IGFycmF5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZG91YmxlICplbGVtcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgamludCBtb2RlKSB7CiAgICAgICAgZnVuY3Rpb25zLT5S ZWxlYXNlRG91YmxlQXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGVsZW1zLG1vZGUpOwogICAgfQoK ICAgIHZvaWQgR2V0Qm9vbGVhbkFycmF5UmVnaW9uKGpib29sZWFuQXJyYXkgYXJyYXksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqYm9vbGVh biAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRCb29sZWFuQXJyYXlSZWdpb24odGhpcyxh cnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0Qnl0ZUFycmF5UmVnaW9uKGpi eXRlQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwg anNpemUgbGVuLCBqYnl0ZSAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRCeXRlQXJyYXlS ZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0Q2hhckFy cmF5UmVnaW9uKGpjaGFyQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBq c2l6ZSBzdGFydCwganNpemUgbGVuLCBqY2hhciAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5H ZXRDaGFyQXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZv aWQgR2V0U2hvcnRBcnJheVJlZ2lvbihqc2hvcnRBcnJheSBhcnJheSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqc2hvcnQgKmJ1ZikgewogICAg ICAgIGZ1bmN0aW9ucy0+R2V0U2hvcnRBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixi dWYpOwogICAgfQogICAgdm9pZCBHZXRJbnRBcnJheVJlZ2lvbihqaW50QXJyYXkgYXJyYXksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGppbnQgKmJ1 ZikgewogICAgICAgIGZ1bmN0aW9ucy0+R2V0SW50QXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFy dCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0TG9uZ0FycmF5UmVnaW9uKGpsb25nQXJyYXkg YXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwganNpemUgbGVu LCBqbG9uZyAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRMb25nQXJyYXlSZWdpb24odGhp cyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0RmxvYXRBcnJheVJlZ2lv bihqZmxvYXRBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBz dGFydCwganNpemUgbGVuLCBqZmxvYXQgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+R2V0Rmxv YXRBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAgfQogICAgdm9pZCBH ZXREb3VibGVBcnJheVJlZ2lvbihqZG91YmxlQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpkb3VibGUgKmJ1ZikgewogICAg ICAgIGZ1bmN0aW9ucy0+R2V0RG91YmxlQXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4s YnVmKTsKICAgIH0KCiAgICB2b2lkIFNldEJvb2xlYW5BcnJheVJlZ2lvbihqYm9vbGVhbkFycmF5 IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgamJvb2xlYW4gKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0Qm9vbGVhbkFycmF5 UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIFNldEJ5dGVB cnJheVJlZ2lvbihqYnl0ZUFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgamJ5dGUgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+ U2V0Qnl0ZUFycmF5UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2 b2lkIFNldENoYXJBcnJheVJlZ2lvbihqY2hhckFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNp emUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgamNoYXIgKmJ1ZikgewogICAgICAg IGZ1bmN0aW9ucy0+U2V0Q2hhckFycmF5UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7 CiAgICB9CiAgICB2b2lkIFNldFNob3J0QXJyYXlSZWdpb24oanNob3J0QXJyYXkgYXJyYXksIGpz aXplIHN0YXJ0LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNob3J0 ICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldFNob3J0QXJyYXlSZWdpb24odGhpcyxhcnJh eSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgU2V0SW50QXJyYXlSZWdpb24oamludEFy cmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBqaW50ICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldEludEFycmF5UmVnaW9uKHRo aXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIFNldExvbmdBcnJheVJlZ2lv bihqbG9uZ0FycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgamxvbmcgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0TG9uZ0Fy cmF5UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIFNldEZs b2F0QXJyYXlSZWdpb24oamZsb2F0QXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0ICpidWYpIHsKICAgICAgICBmdW5j dGlvbnMtPlNldEZsb2F0QXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAg IH0KICAgIHZvaWQgU2V0RG91YmxlQXJyYXlSZWdpb24oamRvdWJsZUFycmF5IGFycmF5LCBqc2l6 ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZG91Ymxl ICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldERvdWJsZUFycmF5UmVnaW9uKHRoaXMsYXJy YXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CgogICAgamludCBSZWdpc3Rlck5hdGl2ZXMoamNsYXNz IGNsYXp6LCBjb25zdCBKTklOYXRpdmVNZXRob2QgKm1ldGhvZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICBqaW50IG5NZXRob2RzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+UmVnaXN0 ZXJOYXRpdmVzKHRoaXMsY2xhenosbWV0aG9kcyxuTWV0aG9kcyk7CiAgICB9CiAgICBqaW50IFVu cmVnaXN0ZXJOYXRpdmVzKGpjbGFzcyBjbGF6eikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PlVucmVnaXN0ZXJOYXRpdmVzKHRoaXMsY2xhenopOwogICAgfQoKICAgIGppbnQgTW9uaXRvckVu dGVyKGpvYmplY3Qgb2JqKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TW9uaXRvckVudGVy KHRoaXMsb2JqKTsKICAgIH0KICAgIGppbnQgTW9uaXRvckV4aXQoam9iamVjdCBvYmopIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5Nb25pdG9yRXhpdCh0aGlzLG9iaik7CiAgICB9CgogICAg amludCBHZXRKYXZhVk0oSmF2YVZNICoqdm0pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5H ZXRKYXZhVk0odGhpcyx2bSk7CiAgICB9CgoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgSkRLMV8xSW5p dEFyZ3MgewogICAgamludCB2ZXJzaW9uOwoKICAgIGNoYXIgKipwcm9wZXJ0aWVzOwogICAgamlu dCBjaGVja1NvdXJjZTsKICAgIGppbnQgbmF0aXZlU3RhY2tTaXplOwogICAgamludCBqYXZhU3Rh Y2tTaXplOwogICAgamludCBtaW5IZWFwU2l6ZTsKICAgIGppbnQgbWF4SGVhcFNpemU7CiAgICBq aW50IHZlcmlmeU1vZGU7CiAgICBjaGFyICpjbGFzc3BhdGg7CgogICAgamludCAoICp2ZnByaW50 ZikoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKICAgIHZvaWQg KCAqZXhpdCkoamludCBjb2RlKTsKICAgIHZvaWQgKCAqYWJvcnQpKCk7CgogICAgamludCBlbmFi bGVDbGFzc0dDOwogICAgamludCBlbmFibGVWZXJib3NlR0M7CiAgICBqaW50IGRpc2FibGVBc3lu Y0dDOwogICAgamludCB2ZXJib3NlOwogICAgamJvb2xlYW4gZGVidWdnaW5nOwogICAgamludCBk ZWJ1Z1BvcnQ7Cn0gSkRLMV8xSW5pdEFyZ3M7Cgp0eXBlZGVmIHN0cnVjdCBKREsxXzFBdHRhY2hB cmdzIHsKICAgIHZvaWQgKiBfX3BhZGRpbmc7Cn0gSkRLMV8xQXR0YWNoQXJnczsKCgoKc3RydWN0 IEpOSUludm9rZUludGVyZmFjZV8gewogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAgdm9pZCAqcmVz ZXJ2ZWQxOwogICAgdm9pZCAqcmVzZXJ2ZWQyOwoKICAgIGppbnQgKCAqRGVzdHJveUphdmFWTSko SmF2YVZNICp2bSk7CgogICAgamludCAoICpBdHRhY2hDdXJyZW50VGhyZWFkKQogICAgICAoSmF2 YVZNICp2bSwgSk5JRW52ICoqcGVudiwgdm9pZCAqYXJncyk7CgogICAgamludCAoICpEZXRhY2hD dXJyZW50VGhyZWFkKShKYXZhVk0gKnZtKTsKfTsKCnN0cnVjdCBKYXZhVk1fIHsKICAgIGNvbnN0 IHN0cnVjdCBKTklJbnZva2VJbnRlcmZhY2VfICpmdW5jdGlvbnM7CiAgICB2b2lkICpyZXNlcnZl ZDA7CiAgICB2b2lkICpyZXNlcnZlZDE7CiAgICB2b2lkICpyZXNlcnZlZDI7CgoKICAgIGppbnQg RGVzdHJveUphdmFWTSgpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5EZXN0cm95SmF2YVZN KHRoaXMpOwogICAgfQogICAgamludCBBdHRhY2hDdXJyZW50VGhyZWFkKEpOSUVudiAqKnBlbnYs IHZvaWQgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5BdHRhY2hDdXJyZW50VGhy ZWFkKHRoaXMsIHBlbnYsIGFyZ3MpOwogICAgfQogICAgamludCBEZXRhY2hDdXJyZW50VGhyZWFk KCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkRldGFjaEN1cnJlbnRUaHJlYWQodGhpcyk7 CiAgICB9CgoKfTsKCnZvaWQgSk5JX0dldERlZmF1bHRKYXZhVk1Jbml0QXJncyh2b2lkICopOwoK amludCBKTklfQ3JlYXRlSmF2YVZNKEphdmFWTSAqKiwgSk5JRW52ICoqLCB2b2lkICopOwoKamlu dCBKTklfR2V0Q3JlYXRlZEphdmFWTXMoSmF2YVZNICoqLCBqc2l6ZSwganNpemUgKik7CmpyZWYg Sk5JX01ha2VMb2NhbFJlZihKTklFbnYgKnBKTklFbnYsIHZvaWQgKnBIT2JqZWN0KTsKCgp9CiMg MTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNTWFuYWdlci5oIiAyCiMgNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNTWFuYWdlci5oIgpjbGFzcyBuc0lKVk1QbHVn aW47CgpjbGFzcyBuc0lTZWN1cmVFbnY7CgpjbGFzcyBuc0lQcmluY2lwYWw7CiMgNTUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNTWFuYWdlci5oIgpjbGFzcyBuc0lKVk1NYW5hZ2Vy IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGExZTVlZDUwLCAweGFhNGEsIDB4 MTFkMSwgeyAweDg1LCAweGIyLCAweDAwLCAweDgwLCAweDVmLCAweDBlLCAweDRkLCAweGZlIH19 OyByZXR1cm4gaWlkO30KCgogICAgICAgIHN0YXRpYyBjb25zdCBuc0lEJiBHZXRDSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUQgY2lkID0geyAweDM4ZTdlZjEwLCAweDU4ZGYsIDB4MTFkMiwgezB4ODEs IDB4NjQsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2F9IH07IHJldHVybiBjaWQ7 fQoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVByb3h5Sk5JKG5zSVNlY3VyZUVudiAq c2VjdXJlRW52LCBKTklFbnYgKiAqb3V0UHJveHlFbnYpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb3h5Sk5JKEpOSUVudiAqICpvdXRQcm94eUVudikgPSAwOwoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBTaG93SmF2YUNvbnNvbGUodm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBJc0FsbFBlcm1pc3Npb25HcmFudGVkKGNvbnN0IGNoYXIgKmxhc3RGaW5nZXJwcmlu dCwgY29uc3QgY2hhciAqbGFzdENvbW1vbk5hbWUsIGNvbnN0IGNoYXIgKnJvb3RGaW5nZXJwcmlu dCwgY29uc3QgY2hhciAqcm9vdENvbW1vbk5hbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJc0FwcGxldFRydXN0ZWQoY29uc3QgY2hhciAqYVJTQUJ1Ziwg UFJVaW50MzIgYVJTQUJ1ZkxlbiwgY29uc3QgY2hhciAqYVBsYWludGV4dCwgUFJVaW50MzIgYVBs YWludGV4dExlbiwgUFJCb29sICppc1RydXN0ZWQsIG5zSVByaW5jaXBhbCAqKl9yZXR2YWwpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SmF2YUVuYWJsZWQoUFJCb29sICphSmF2YUVu YWJsZWQpID0gMDsKCn07CiMgMTI3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgoKCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL29qaS9uc0lMaXZlQ29ubmVjdE1hbmFnZXIuaCIgMQojIDYxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvb2ppL25zSUxpdmVDb25uZWN0TWFuYWdlci5oIgpzdHJ1Y3Qg SlNSdW50aW1lOwpzdHJ1Y3QgSlNDb250ZXh0OwpzdHJ1Y3QgSlNPYmplY3Q7CgpjbGFzcyBuc0lM aXZlQ29ubmVjdE1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgICAgICAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsg MHhkMjBjODA4MSwgMHhjYmNiLCAweDExZDIsIHsgMHhhNSwgMHhhMCwgMHhlOCwgMHg4NCwgMHhh ZSwgMHhkOSwgMHhjOSwgMHhmYyB9IH07IHJldHVybiBpaWQ7fQoKCgoKICAgICAgICB2aXJ0dWFs IG5zcmVzdWx0CiAgICBTdGFydHVwTGl2ZUNvbm5lY3QoSlNSdW50aW1lKiBydW50aW1lLCBQUkJv b2wmIG91dFN0YXJ0ZWQpID0gMDsKCgoKCiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdAogICAgU2h1 dGRvd25MaXZlQ29ubmVjdChKU1J1bnRpbWUqIHJ1bnRpbWUsIFBSQm9vbCYgb3V0U2h1dGRvd24p ID0gMDsKCgoKCiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdAogICAgSXNMaXZlQ29ubmVjdEVuYWJs ZWQoUFJCb29sJiBvdXRFbmFibGVkKSA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQK ICAgIEluaXRMaXZlQ29ubmVjdENsYXNzZXMoSlNDb250ZXh0KiBjb250ZXh0LCBKU09iamVjdCog Z2xvYmFsT2JqZWN0KSA9IDA7CgoKCgogICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgICBXcmFwSmF2 YU9iamVjdChKU0NvbnRleHQqIGNvbnRleHQsIGpvYmplY3QgamF2YU9iamVjdCwgSlNPYmplY3Qq ICpvdXRKU09iamVjdCkgPSAwOwp9OwojIDEzMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL29qaS9uc0lKVk1QbHVnaW5JbnN0YW5jZS5oIiAxCiMgMjYg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNUGx1Z2luSW5zdGFuY2UuaCIKY2xhc3Mg bnNJSlZNUGx1Z2luSW5zdGFuY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTBjMDU3ZDAsIDB4MDFjMSwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4NjAsIDB4MDgs IDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRKYXZhT2JqZWN0KGpvYmplY3QgKnJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUZXh0KGNvbnN0IGNoYXIgKiogcmVzdWx0KSA9IDA7Cgp9OwojIDEzMyAibnNET01DbGFzc0lu Zm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxPcHRp b25FbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1M T3B0aW9uRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBu c0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5MiwgMHgxNWIzLCAweDExZDIs IHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVt ZW50ICogKmFGb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRTZWxlY3Rl ZChQUkJvb2wgKmFEZWZhdWx0U2VsZWN0ZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERl ZmF1bHRTZWxlY3RlZChQUkJvb2wgYURlZmF1bHRTZWxlY3RlZCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRUZXh0KG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEluZGV4KFBSSW50MzIgKmFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRM YWJlbChuc0FTdHJpbmcgJiBhTGFiZWwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExhYmVs KGNvbnN0IG5zQVN0cmluZyAmIGFMYWJlbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT ZWxlY3RlZChQUkJvb2wgKmFTZWxlY3RlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2Vs ZWN0ZWQoUFJCb29sIGFTZWxlY3RlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1 ZShuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZhbHVlKGNv bnN0IG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAwOwoKfTsKIyAxMzYgIm5zRE9NQ2xhc3NJbmZvLmNw cCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MT3B0aW9uQ29s bGVjdG4uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTE9w dGlvbkNvbGxlY3RuLmgiCmNsYXNzIG5zSURPTUhUTUxPcHRpb25FbGVtZW50OwojIDI3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3RuLmgiCmNsYXNz IG5zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4NDA5YmJmMTQsIDB4MWRkMiwgMHgxMWIyLCB7IDB4OTEsIDB4ZGUsIDB4OGQsIDB4 NjcsIDB4MmQsIDB4NDAsIDB4NjIsIDB4NzYgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIgKmFMZW5ndGgpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldExlbmd0aChQUlVpbnQzMiBhTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFNlbGVjdGVkSW5kZXgoUFJJbnQzMiAqYVNlbGVjdGVkSW5kZXgpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNlbGVjdGVkSW5kZXgoUFJJbnQzMiBhU2VsZWN0ZWRJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcHRpb24oUFJJbnQzMiBpbmRleCwgbnNJRE9NSFRNTE9w dGlvbkVsZW1lbnQgKm9wdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGQobnNJRE9N SFRNTE9wdGlvbkVsZW1lbnQgKm9wdGlvbikgPSAwOwoKfTsKIyAxMzcgIm5zRE9NQ2xhc3NJbmZv LmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudExp c3QuaCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50TGlz dC5oIgpjbGFzcyBuc0lDb250ZW50TGlzdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsgMHhkNzJjYjQwMCwgMHg0YjMzLCAweDExZDUsIHsgMHhhMCwgMHg0MSwgMHgwLCAweDEwLCAw eGE0LCAweGVmLCAweDQ4LCAweGM5IH0gfTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGFyZW50T2JqZWN0KG5zSVN1cHBvcnRzKiogYVBhcmVudE9iamVjdCkgPSAwOwoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIqIGFMZW5ndGgsIFBSQm9v bCBhRG9GbHVzaCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgYUluZGV4 LCBuc0lET01Ob2RlKiogYVJldHVybiwKICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb0ZsdXNo KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVtKGNvbnN0IG5zQVN0cmluZyYgYU5h bWUsIG5zSURPTU5vZGUqKiBhUmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBh RG9GbHVzaCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluZGV4T2YobnNJQ29udGVudCAqYUNv bnRlbnQsIFBSSW50MzImIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb0Zs dXNoKSA9IDA7Cn07CiMgMTQwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUV2ZW50TGlzdGVuZXJNYW5hZ2VyLmgiIDEKIyA0NiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRXZlbnRMaXN0ZW5lck1hbmFnZXIuaCIK Y2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CmNsYXNzIG5z SVNjcmlwdENvbnRleHQ7CmNsYXNzIG5zSURPTUV2ZW50VGFyZ2V0OwpjbGFzcyBuc0lET01FdmVu dEdyb3VwOwojIDYwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lFdmVudExpc3Rl bmVyTWFuYWdlci5oIgpjbGFzcyBuc0lFdmVudExpc3RlbmVyTWFuYWdlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CgpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjZDkxYmNmMCwgMHhkZWQ5LCAweDExZDEsIHsweGJkLCAw eDg1LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0fSB9OyByZXR1cm4gaWlkO30K CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkRXZlbnRMaXN0ZW5lckJ5SUlEKG5zSURPTUV2ZW50 TGlzdGVuZXIgKmFMaXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBuc0lJRCYgYUlJRCwgUFJJbnQzMiBmbGFncykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZW1vdmVFdmVudExpc3RlbmVyQnlJSUQobnNJRE9NRXZlbnRMaXN0ZW5lciAqYUxpc3Rl bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSUlEJiBh SUlELCBQUkludDMyIGZsYWdzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEV2ZW50 TGlzdGVuZXJCeVR5cGUobnNJRE9NRXZlbnRMaXN0ZW5lciAqYUxpc3RlbmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIHR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgZmxhZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50R3JvdXAqIGFFdnRHcnApID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRXZlbnRMaXN0ZW5lckJ5VHlwZShuc0lET01FdmVu dExpc3RlbmVyICphTGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG5zQVN0cmluZyYgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJRE9NRXZlbnRHcm91cCogYUV2dEdycCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgQWRkU2NyaXB0RXZlbnRMaXN0ZW5lcihuc0lTY3JpcHRDb250ZXh0KmFDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYU9iamVjdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSAqYU5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYUZ1bmMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGVmZXJDb21waWxhdGlv bikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVTY3JpcHRFdmVudExpc3RlbmVyKG5z SUF0b20gKmFOYW1lKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlclNjcmlw dEV2ZW50TGlzdGVuZXIobnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFPYmplY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5hbWUpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZVNjcmlwdEV2ZW50TGlzdGVuZXIobnNJU2NyaXB0 Q29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdXBwb3J0cyAqYU9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sICphRGlkQ29tcGlsZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg SGFuZGxlRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURP TUV2ZW50KiogYURPTUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NRXZlbnRU YXJnZXQqIGFDdXJyZW50VGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg YUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3Rh dHVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFdmVudChuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2 ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhRXZlbnRUeXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NRXZlbnQqKiBhRE9NRXZlbnQpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FwdHVyZUV2ZW50KFBSSW50MzIgYUV2ZW50VHlwZXMp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVsZWFzZUV2ZW50KFBSSW50MzIgYUV2ZW50 VHlwZXMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQWxsTGlzdGVuZXJzKFBS Qm9vbCBhU2NyaXB0T25seSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaXN0ZW5l clRhcmdldChuc0lTdXBwb3J0cyogYVRhcmdldCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEhhc011dGF0aW9uTGlzdGVuZXJzKFBSQm9vbCogYUxpc3RlbmVyKSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1FdmVudEdyb3VwTE0obnNJRE9NRXZlbnRHcm91cCoqIGFH cm91cCkgPSAwOwp9OwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0V2ZW50TGlzdGVuZXJNYW5hZ2Vy KG5zSUV2ZW50TGlzdGVuZXJNYW5hZ2VyKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyAxNDMgIm5z RE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RXZlbnRSZWNlaXZlci5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RXZlbnRSZWNlaXZlci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZl bnRUYXJnZXQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50 VGFyZ2V0LmgiCmNsYXNzIG5zSURPTUV2ZW50VGFyZ2V0IDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDFjNzczYjMwLCAweGQxY2YsIDB4MTFkMiwgeyAweGJkLCAweDk1LCAweDAw LCAweDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0IH19OyByZXR1cm4gaWlkO30KIyA2NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudFRhcmdldC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgQWRkRXZlbnRMaXN0ZW5lcihjb25zdCBuc0FTdHJpbmcgJiB0eXBlLCBuc0lET01FdmVu dExpc3RlbmVyICpsaXN0ZW5lciwgUFJCb29sIHVzZUNhcHR1cmUpID0gMDsKIyA4OCAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudFRhcmdldC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgUmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBuc0FTdHJpbmcgJiB0eXBlLCBuc0lET01FdmVu dExpc3RlbmVyICpsaXN0ZW5lciwgUFJCb29sIHVzZUNhcHR1cmUpID0gMDsKIyAxMDkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnRUYXJnZXQuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IERpc3BhdGNoRXZlbnQobnNJRE9NRXZlbnQgKmV2dCwgUFJCb29sICpfcmV0dmFsKSA9IDA7 Cgp9OwojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50UmVjZWl2ZXIu aCIgMgoKY2xhc3MgbnNJRE9NRXZlbnRMaXN0ZW5lcjsKY2xhc3MgbnNJRE9NTW91c2VMaXN0ZW5l cjsKY2xhc3MgbnNJRE9NTW91c2VNb3Rpb25MaXN0ZW5lcjsKY2xhc3MgbnNJRE9NS2V5TGlzdGVu ZXI7CmNsYXNzIG5zSURPTUZvY3VzTGlzdGVuZXI7CmNsYXNzIG5zSURPTUxvYWRMaXN0ZW5lcjsK Y2xhc3MgbnNJRE9NRHJhZ0xpc3RlbmVyOwpjbGFzcyBuc0lFdmVudExpc3RlbmVyTWFuYWdlcjsK Y2xhc3MgbnNJRE9NRXZlbnQ7CmNsYXNzIG5zSURPTUV2ZW50R3JvdXA7CiMgNjUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnRSZWNlaXZlci5oIgpjbGFzcyBuc0lET01FdmVu dFJlY2VpdmVyIDogcHVibGljIG5zSURPTUV2ZW50VGFyZ2V0CnsKcHVibGljOgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZTFkYmNi YTAsIDB4ZmIzOCwgMHgxMWQxLCB7MHhiZCwgMHg4NywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhlMywgMHhmNH0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkRXZlbnRM aXN0ZW5lckJ5SUlEKG5zSURPTUV2ZW50TGlzdGVuZXIgKmFMaXN0ZW5lciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCYgYUlJRCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgUmVtb3ZlRXZlbnRMaXN0ZW5lckJ5SUlEKG5zSURPTUV2ZW50TGlzdGVuZXIgKmFM aXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ RCYgYUlJRCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlzdGVuZXJNYW5hZ2VyKG5zSUV2 ZW50TGlzdGVuZXJNYW5hZ2VyKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSGFu ZGxlRXZlbnQobnNJRE9NRXZlbnQgKmFFdmVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 U3lzdGVtRXZlbnRHcm91cChuc0lET01FdmVudEdyb3VwKiogYUdyb3VwKSA9IDA7Cn07CiMgMTQ0 ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NU3R5bGVTaGVldC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NU3R5bGVTaGVldC5oIgpjbGFzcyBuc0lET01TdHlsZVNoZWV0IDogcHVibGljIG5zSVN1cHBv cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDgwLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJl LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0 MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TdHlsZVNoZWV0LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE93bmVyTm9kZShuc0lET01Ob2RlICogKmFPd25lck5vZGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5bGVTaGVldChuc0lET01TdHlsZVNoZWV0ICogKmFQYXJl bnRTdHlsZVNoZWV0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhyZWYobnNBU3RyaW5n ICYgYUhyZWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGl0bGUobnNBU3RyaW5nICYg YVRpdGxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lZGlhKG5zSURPTU1lZGlhTGlz dCAqICphTWVkaWEpID0gMDsKCn07CiMgMTQ3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVN0eWxlU2hlZXRMaXN0LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TdHlsZVNoZWV0TGlzdC5oIgpjbGFzcyBu c0lET01TdHlsZVNoZWV0TGlzdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTA4MSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NU3R5bGVTaGVldExpc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExl bmd0aChQUlVpbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBS VWludDMyIGluZGV4LCBuc0lET01TdHlsZVNoZWV0ICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNDgg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgpjbGFzcyBuc0lET01DU1NTdHlsZURlY2xh cmF0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGJlLCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01DU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDc3NUZXh0KG5z QVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDc3NUZXh0KGNv bnN0IG5zQVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy b3BlcnR5VmFsdWUoY29uc3QgbnNBU3RyaW5nICYgcHJvcGVydHlOYW1lLCBuc0FTdHJpbmcgJiBf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5Q1NTVmFsdWUoY29u c3QgbnNBU3RyaW5nICYgcHJvcGVydHlOYW1lLCBuc0lET01DU1NWYWx1ZSAqKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlUHJvcGVydHkoY29uc3QgbnNBU3RyaW5nICYg cHJvcGVydHlOYW1lLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgbnNBU3RyaW5nICYgcHJvcGVydHlOYW1lLCBu c0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5 KGNvbnN0IG5zQVN0cmluZyAmIHByb3BlcnR5TmFtZSwgY29uc3QgbnNBU3RyaW5nICYgdmFsdWUs IGNvbnN0IG5zQVN0cmluZyAmIHByaW9yaXR5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExlbmd0aChQUlVpbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVt KFBSVWludDMyIGluZGV4LCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFBhcmVudFJ1bGUobnNJRE9NQ1NTUnVsZSAqICphUGFyZW50UnVsZSkgPSAwOwoK fTsKIyAxNDkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NQ1NTUnVsZS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NQ1NTUnVsZS5oIgpjbGFzcyBuc0lET01DU1NSdWxlIDogcHVibGljIG5zSVN1cHBvcnRz IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGMxLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAw eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyAzOSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NSdWxlLmgiCiAgZW51bSB7IFVOS05P V05fUlVMRSA9IDBVIH07CgogIGVudW0geyBTVFlMRV9SVUxFID0gMVUgfTsKCiAgZW51bSB7IENI QVJTRVRfUlVMRSA9IDJVIH07CgogIGVudW0geyBJTVBPUlRfUlVMRSA9IDNVIH07CgogIGVudW0g eyBNRURJQV9SVUxFID0gNFUgfTsKCiAgZW51bSB7IEZPTlRfRkFDRV9SVUxFID0gNVUgfTsKCiAg ZW51bSB7IFBBR0VfUlVMRSA9IDZVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJV aW50MTYgKmFUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENzc1RleHQobnNBU3Ry aW5nICYgYUNzc1RleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENzc1RleHQoY29uc3Qg bnNBU3RyaW5nICYgYUNzc1RleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50 U3R5bGVTaGVldChuc0lET01DU1NTdHlsZVNoZWV0ICogKmFQYXJlbnRTdHlsZVNoZWV0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFJ1bGUobnNJRE9NQ1NTUnVsZSAqICphUGFy ZW50UnVsZSkgPSAwOwoKfTsKIyAxNTAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTUnVsZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1J1bGVMaXN0LmgiCmNsYXNzIG5zSURPTUNTU1J1 bGVMaXN0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGMwLCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01DU1NSdWxlTGlzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICph TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5z SURPTUNTU1J1bGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE1MSAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01SZWN0LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01SZWN0LmgiCmNsYXNzIG5zSURPTVJlY3Qg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzE3MzVmNjIsIDB4YWM1YywgMHg0 MjM2LCB7IDB4OWEsIDB4MWYsIDB4NWYsIDB4ZmIsIDB4MjgsIDB4MGQsIDB4NTMsIDB4MWMgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb3AobnNJRE9NQ1NTUHJpbWl0 aXZlVmFsdWUgKiAqYVRvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSaWdodChuc0lE T01DU1NQcmltaXRpdmVWYWx1ZSAqICphUmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Qm90dG9tKG5zSURPTUNTU1ByaW1pdGl2ZVZhbHVlICogKmFCb3R0b20pID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TGVmdChuc0lET01DU1NQcmltaXRpdmVWYWx1ZSAqICphTGVmdCkg PSAwOwoKfTsKIyAxNTIgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NUkdCQ29sb3IuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTVJHQkNvbG9yLmgiCmNsYXNzIG5zSURPTVJHQkNvbG9yIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDZhZmYzMTAyLCAweDMyMGQsIDB4NDk4NiwgeyAweDk3 LCAweDkwLCAweDEyLCAweDMxLCAweDZiLCAweGI4LCAweDdjLCAweGY5IH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVkKG5zSURPTUNTU1ByaW1pdGl2ZVZhbHVlICog KmFSZWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0R3JlZW4obnNJRE9NQ1NTUHJpbWl0 aXZlVmFsdWUgKiAqYUdyZWVuKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJsdWUobnNJ RE9NQ1NTUHJpbWl0aXZlVmFsdWUgKiAqYUJsdWUpID0gMDsKCn07CiMgMTUzICJuc0RPTUNsYXNz SW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSVhCTFNl cnZpY2UuaCIgMQojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lYQkxTZXJ2 aWNlLmgiCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lET01F dmVudFJlY2VpdmVyOwpjbGFzcyBuc0lET01Ob2RlTGlzdDsKY2xhc3MgbnNJWEJMQmluZGluZzsK Y2xhc3MgbnNJWEJMRG9jdW1lbnRJbmZvOwpjbGFzcyBuc0lVUkk7CmNsYXNzIG5zSUF0b207CgoK CgoKY2xhc3MgbnNJWEJMU2VydmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAw eGU3OTAzZTEsIDB4YzdiYiwgMHgxMWQzLCB7IDB4OTcsIDB4ZmIsIDB4MCwgMHg0MCwgMHg1LCAw eDUzLCAweGVlLCAweGYwIH0gfTsgcmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBM b2FkQmluZGluZ3MobnNJQ29udGVudCogYUNvbnRlbnQsIGNvbnN0IG5zQVN0cmluZyYgYVVSTCwg UFJCb29sIGFBdWdtZW50RmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYQkxCaW5k aW5nKiogYUJpbmRpbmcsIFBSQm9vbCogYVJlc29sdmVTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBGbHVzaFN0eWxlQmluZGluZ3MobnNJQ29udGVudCogYUNvbnRlbnQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZyhuc0lDb250ZW50KiBhQm91bmRFbGVtZW50LCBj b25zdCBuc0NTdHJpbmcmIGFVUkxTdHIsIG5zSVhCTEJpbmRpbmcqKiBhUmVzdWx0KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEJpbmRpbmdSZWFkeShuc0lDb250ZW50KiBhQm91bmRFbGVtZW50 LCBjb25zdCBuc0NTdHJpbmcmIGFVUkxTdHIsIFBSQm9vbCogYUlzUmVhZHkpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVRhZyhuc0lDb250ZW50KiBhQ29udGVudCwgUFJJbnQzMiog YU5hbWVTcGFjZUlELCBuc0lBdG9tKiogYVJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFhCTERvY3VtZW50SW5mbyhjb25zdCBuc0NTdHJpbmcmIGFVUkxTdHIsIG5zSUNvbnRlbnQq IGFCb3VuZEVsZW1lbnQsIG5zSVhCTERvY3VtZW50SW5mbyoqIGFSZXN1bHQpPTA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IExvYWRCaW5kaW5nRG9jdW1lbnRJbmZvKG5zSUNvbnRlbnQqIGFCb3VuZEVs ZW1lbnQsIG5zSURvY3VtZW50KiBhQm91bmREb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG5zQ1N0cmluZyYgYVVSSSwgY29uc3QgbnNDU3RyaW5nJiBh UmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3JjZVN5 bmNMb2FkLCBuc0lYQkxEb2N1bWVudEluZm8qKiBhUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEF0dGFjaEdsb2JhbEtleUhhbmRsZXIobnNJRE9NRXZlbnRSZWNlaXZlciogYUVsZW1l bnQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRhY2hHbG9iYWxEcmFnSGFuZGxlcihuc0lET01F dmVudFJlY2VpdmVyKiBhRWxlbWVudCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmV0Y2hTeW5j WE1MRG9jdW1lbnQobnNJVVJJKiBhVVJJLCBuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKfTsK IyAxNTYgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j b250ZW50L25zSVhCTEJpbmRpbmcuaCIgMQojIDUxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lYQkxCaW5kaW5nLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVN1cHBvcnRzQXJyYXkuaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ U3VwcG9ydHNBcnJheS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb2xs ZWN0aW9uLmgiIDEKIyAyOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbGxlY3Rp b24uaCIKY2xhc3MgbnNJQ29sbGVjdGlvbiA6IHB1YmxpYyBuc0lTZXJpYWxpemFibGUgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ODNiNjAxOWMsIDB4Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4 NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDb3VudChQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUVsZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgY29u c3QgbnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZEVsZW1lbnQobnNJU3VwcG9ydHMgKml0ZW0pID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGUobnNJRW51bWVyYXRvciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXIodm9pZCkgPSAwOwoKfTsKIyAxNzUgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb2xsZWN0aW9uLmgiCmNsYXNzIG5zUXVlcnlF bGVtZW50QXQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBu c1F1ZXJ5RWxlbWVudEF0KCBuc0lDb2xsZWN0aW9uKiBhQ29sbGVjdGlvbiwgUFJVaW50MzIgYUlu ZGV4LCBuc3Jlc3VsdCogYUVycm9yUHRyICkKICAgICAgICAgIDogbUNvbGxlY3Rpb24oYUNvbGxl Y3Rpb24pLAogICAgICAgICAgICBtSW5kZXgoYUluZGV4KSwKICAgICAgICAgICAgbUVycm9yUHRy KGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0KICAgICAgdmlydHVhbCBuc3Jlc3VsdCBv cGVyYXRvcigpKCBjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqICkgY29uc3Q7CiAgICBwcml2YXRl OgogICAgICBuc0lDb2xsZWN0aW9uKiBtQ29sbGVjdGlvbjsKICAgICAgUFJVaW50MzIgbUluZGV4 OwogICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogIH07CmlubGluZQpjb25zdCBuc1F1ZXJ5RWxl bWVudEF0CmRvX1F1ZXJ5RWxlbWVudEF0KCBuc0lDb2xsZWN0aW9uKiBhQ29sbGVjdGlvbiwgUFJV aW50MzIgYUluZGV4LCBuc3Jlc3VsdCogYUVycm9yUHRyID0gMCApCiAgewogICAgcmV0dXJuIG5z UXVlcnlFbGVtZW50QXQoYUNvbGxlY3Rpb24sIGFJbmRleCwgYUVycm9yUHRyKTsKICB9CiMgMTUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0FycmF5LmgiIDIKCgoKCgoK Y2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3I7CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lTdXBwb3J0c0FycmF5LmgiCnR5cGVkZWYgUFJCb29sICgqbnNJU3VwcG9y dHNBcnJheUVudW1GdW5jKShuc0lTdXBwb3J0cyogYUVsZW1lbnQsIHZvaWQgKmFEYXRhKTsKIyA0 NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzQXJyYXkuaCIKY2xhc3Mg bnNJU3VwcG9ydHNBcnJheSA6IHB1YmxpYyBuc0lDb2xsZWN0aW9uIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDc5 MWVhZmEwLCAweGI5ZTYsIDB4MTFkMSwgeyAweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAw eDE1LCAweDliLCAweDVhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgUFJCb29sIEVxdWFs cyhjb25zdCBuc0lTdXBwb3J0c0FycmF5ICpvdGhlcikgPSAwOwoKCiAgdmlydHVhbCBuc0lTdXBw b3J0cyAqIEVsZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJJbnQz MiBJbmRleE9mKGNvbnN0IG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50KSA9IDA7CgoKICB2 aXJ0dWFsIFBSSW50MzIgSW5kZXhPZlN0YXJ0aW5nQXQoY29uc3QgbnNJU3VwcG9ydHMgKmFQb3Nz aWJsZUVsZW1lbnQsIFBSVWludDMyIGFTdGFydEluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50 MzIgTGFzdEluZGV4T2YoY29uc3QgbnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5kZXhPZihuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxl bWVudCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmRl eE9mU3RhcnRpbmdBdChuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxlbWVudCwgUFJVaW50MzIgYVN0 YXJ0SW5kZXgsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TGFzdEluZGV4T2YobnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEluc2VydEVsZW1lbnRBdChuc0lTdXBwb3J0cyAq YUVsZW1lbnQsIFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVwbGFj ZUVsZW1lbnRBdChuc0lTdXBwb3J0cyAqYUVsZW1lbnQsIFBSVWludDMyIGFJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBQUkJvb2wgUmVtb3ZlTGFzdEVsZW1lbnQoY29uc3QgbnNJU3VwcG9ydHMgKmFF bGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZUxhc3RFbGVtZW50KG5zSVN1 cHBvcnRzICphRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVFbGVtZW50 QXQoUFJVaW50MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBBcHBlbmRFbGVtZW50 cyhuc0lTdXBwb3J0c0FycmF5ICphRWxlbWVudHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg Q29tcGFjdCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhu c0lTdXBwb3J0c0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmly dHVhbCBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYyBh RnVuYywgdm9pZCAqIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSVN1 cHBvcnRzQXJyYXkgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBNb3ZlRWxlbWVu dChQUkludDMyIGFGcm9tLCBQUkludDMyIGFUbykgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgSW5z ZXJ0RWxlbWVudHNBdChuc0lTdXBwb3J0c0FycmF5ICphT3RoZXIsIFBSVWludDMyIGFJbmRleCkg PSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVtb3ZlRWxlbWVudHNBdChQUlVpbnQzMiBhSW5kZXgs IFBSVWludDMyIGFDb3VudCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgU2l6ZVRvKFBSSW50MzIg YVNpemUpID0gMDsKCn07CiMgMzY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3Vw cG9ydHNBcnJheS5oIgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXkobnNJU3Vw cG9ydHNBcnJheSoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3 SVN1cHBvcnRzQXJyYXlFbnVtZXJhdG9yKG5zSVN1cHBvcnRzQXJyYXkqIGFycmF5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5z dGFuY2VQdHJSZXN1bHQpOwojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lY QkxCaW5kaW5nLmgiIDIKCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFz cyBuc0lET01Ob2RlTGlzdDsKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJWEJMUHJv dG90eXBlQmluZGluZzsKCgoKCgpjbGFzcyBuc0lYQkxCaW5kaW5nIDogcHVibGljIG5zSVN1cHBv cnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7IDB4ZGRkYmFkMjAsIDB4YzhkZiwgMHgxMWQzLCB7IDB4OTcsIDB4ZmIs IDB4MCwgMHg0MCwgMHg1LCAweDUzLCAweGVlLCAweGYwIH0gfTsgcmV0dXJuIGlpZDt9CgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UHJvdG90eXBlQmluZGluZyhuc0lYQkxQcm90b3R5cGVCaW5kaW5n KiogYVJlc3VsdCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3RvdHlwZUJpbmRpbmcobnNJ WEJMUHJvdG90eXBlQmluZGluZyogYVByb3RvQmluZGluZyk9MDsKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRCYXNlQmluZGluZyhuc0lYQkxCaW5kaW5nKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0QmFzZUJpbmRpbmcobnNJWEJMQmluZGluZyogYUJpbmRpbmcpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRBbm9ueW1vdXNDb250ZW50KG5zSUNvbnRlbnQqKiBhUGFyZW50 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbm9ueW1vdXNDb250ZW50KG5zSUNvbnRlbnQq IGFQYXJlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaW5kaW5nRWxlbWVudChuc0lD b250ZW50KiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmluZGluZ0VsZW1l bnQobnNJQ29udGVudCogYUVsZW1lbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3Vu ZEVsZW1lbnQobnNJQ29udGVudCoqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEJvdW5kRWxlbWVudChuc0lDb250ZW50KiBhRWxlbWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVz dWx0IEdlbmVyYXRlQW5vbnltb3VzQ29udGVudCgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IElu c3RhbGxFdmVudEhhbmRsZXJzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSW5zdGFsbEltcGxl bWVudGF0aW9uKCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc1N0eWxlU2hlZXRzKFBSQm9v bCogYVJlc29sdmVTdHlsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpcnN0QmluZGlu Z1dpdGhDb25zdHJ1Y3Rvcihuc0lYQkxCaW5kaW5nKiogYVJlc3VsdCk9MDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRCYXNlVGFnKFBSSW50MzIqIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSoqIGFSZXN1 bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lBdG9tKiBh QXR0cmlidXRlLCBQUkludDMyIGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFSZW1vdmVGbGFnLCBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEV4ZWN1dGVBdHRhY2hlZEhhbmRsZXIoKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQg RXhlY3V0ZURldGFjaGVkSGFuZGxlcigpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBVbmhvb2tFdmVu dEhhbmRsZXJzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2hhbmdlRG9jdW1lbnQobnNJRG9j dW1lbnQqIGFPbGREb2N1bWVudCwgbnNJRG9jdW1lbnQqIGFOZXdEb2N1bWVudCkgPSAwOwoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEJpbmRpbmdVUkkobnNDU3RyaW5nJiBhUmVzdWx0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXREb2NVUkkobnNDU3RyaW5nJiBhUmVzdWx0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRJRChuc0NTdHJpbmcmIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbnNlcnRpb25Qb2ludHNGb3IobnNJQ29udGVudCogYVBhcmVudCwgbnNJU3Vw cG9ydHNBcnJheSoqIGFSZXN1bHQpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5zZXJ0aW9u UG9pbnQobnNJQ29udGVudCogYUNoaWxkLCBuc0lDb250ZW50KiogYVJlc3VsdCwgUFJVaW50MzIq IGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqKiBhRGVm YXVsdENvbnRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpbmdsZUluc2VydGlvblBv aW50KG5zSUNvbnRlbnQqKiBhUmVzdWx0LCBQUlVpbnQzMiogYUluZGV4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhTXVsdGlwbGVJbnNlcnRpb25Qb2ludHMs IG5zSUNvbnRlbnQqKiBhRGVmYXVsdENvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ c1N0eWxlQmluZGluZyhQUkJvb2wqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dElzU3R5bGVCaW5kaW5nKFBSQm9vbCBhSXNTdHlsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFJvb3RCaW5kaW5nKG5zSVhCTEJpbmRpbmcqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRGaXJzdFN0eWxlQmluZGluZyhuc0lYQkxCaW5kaW5nKiogYVJlc3VsdCkgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaGVyaXRzU3R5bGUoUFJCb29sKiBhUmVzdWx0KT0wOwog IHZpcnR1YWwgbnNyZXN1bHQgV2Fsa1J1bGVzKG5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYyBhRnVu Yywgdm9pZCogYURhdGEpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVBZmZlY3RzU3R5 bGUobnNJU3VwcG9ydHNBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSwgUFJCb29sKiBh QWZmZWN0cyk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBNYXJrRm9yRGVhdGgoKT0wOwogIHZpcnR1 YWwgbnNyZXN1bHQgTWFya2VkRm9yRGVhdGgoUFJCb29sKiBhUmVzdWx0KT0wOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEltcGxlbWVudHNJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIFBSQm9vbCog YVJlc3VsdCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbm9ueW1vdXNOb2Rlcyhuc0lET01O b2RlTGlzdCoqIGFSZXN1bHQpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2hvdWxkQnVpbGRDaGls ZEZyYW1lcyhQUkJvb2wqIGFSZXN1bHQpPTA7Cn07CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WEJM QmluZGluZyhuc0lYQkxQcm90b3R5cGVCaW5kaW5nKiBhUHJvdG9CaW5kaW5nLCBuc0lYQkxCaW5k aW5nKiogYVJlc3VsdCk7CiMgMTU3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lCaW5kaW5nTWFuYWdlci5oIiAxCiMgNTMgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUJpbmRpbmdNYW5hZ2VyLmgiCmNsYXNzIG5zSUNv bnRlbnQ7CmNsYXNzIG5zSVhCTEJpbmRpbmc7CmNsYXNzIG5zSVhCTEJpbmRpbmdBdHRhY2hlZEhh bmRsZXI7CmNsYXNzIG5zSVhCTERvY3VtZW50SW5mbzsKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJ U3RyZWFtTGlzdGVuZXI7CmNsYXNzIG5zSVhQQ29ubmVjdFdyYXBwZWRKUzsKY2xhc3MgbnNJRE9N Tm9kZUxpc3Q7CgoKCgoKY2xhc3MgbnNJQmluZGluZ01hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9y dHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsgMHg1NWQ3MGZlMCwgMHhjOGU1LCAweDExZDMsIHsgMHg5NywgMHhmYiwg MHgwLCAweDQwLCAweDUsIDB4NTMsIDB4ZWUsIDB4ZjAgfSB9OyByZXR1cm4gaWlkO30KCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRCaW5kaW5nKG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc0lYQkxCaW5k aW5nKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmluZGluZyhuc0lDb250 ZW50KiBhQ29udGVudCwgbnNJWEJMQmluZGluZyogYUJpbmRpbmcpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbnNlcnRpb25QYXJlbnQobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSUNvbnRl bnQqKiBhUmVzdWx0KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5zZXJ0aW9uUGFyZW50KG5z SUNvbnRlbnQqIGFDb250ZW50LCBuc0lDb250ZW50KiBhUmVzdWx0KT0wOwoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFdyYXBwZWRKUyhuc0lDb250ZW50KiBhQ29udGVudCwgbnNJWFBDb25uZWN0V3Jh cHBlZEpTKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V3JhcHBlZEpTKG5z SUNvbnRlbnQqIGFDb250ZW50LCBuc0lYUENvbm5lY3RXcmFwcGVkSlMqIGFSZXN1bHQpID0gMDsK IyA5NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQmluZGluZ01hbmFnZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IENoYW5nZURvY3VtZW50Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50 LCBuc0lEb2N1bWVudCogYU9sZERvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJRG9jdW1lbnQqIGFOZXdEb2N1bWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXNvbHZlVGFnKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkludDMyKiBhTmFtZVNwYWNlSUQsIG5z SUF0b20qKiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRM aXN0Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc0lET01Ob2RlTGlzdCoqIGFSZXN1bHQpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250ZW50TGlzdEZvcihuc0lDb250ZW50KiBh Q29udGVudCwgbnNJU3VwcG9ydHNBcnJheSogYUxpc3QpPTA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEhhc0NvbnRlbnRMaXN0Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkJvb2wqIGFSZXN1 bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbm9ueW1vdXNOb2Rlc0Zvcihuc0lD b250ZW50KiBhQ29udGVudCwgbnNJRE9NTm9kZUxpc3QqKiBhUmVzdWx0KSA9IDA7CgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0QW5vbnltb3VzTm9kZXNGb3IobnNJQ29udGVudCogYUNvbnRlbnQs IG5zSVN1cHBvcnRzQXJyYXkqIGFMaXN0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0WEJMQ2hpbGROb2Rlc0Zvcihuc0lDb250ZW50KiBhQ29udGVudCwgbnNJRE9NTm9kZUxpc3Qq KiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5zZXJ0aW9uUG9p bnQobnNJQ29udGVudCogYVBhcmVudCwgbnNJQ29udGVudCogYUNoaWxkLCBuc0lDb250ZW50Kiog YVJlc3VsdCwgUFJVaW50MzIqIGFJbmRleCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U2luZ2xlSW5zZXJ0aW9uUG9pbnQobnNJQ29udGVudCogYVBhcmVudCwgbnNJQ29udGVudCoq IGFSZXN1bHQsIFBSVWludDMyKiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQUkJvb2wqIGFNdWx0aXBsZUluc2VydGlvblBvaW50cykgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEFkZExheWVyZWRCaW5kaW5nKG5zSUNvbnRlbnQqIGFDb250ZW50LCBjb25zdCBu c0FTdHJpbmcmIGFVUkwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUxheWVyZWRCaW5k aW5nKG5zSUNvbnRlbnQqIGFDb250ZW50LCBjb25zdCBuc0FTdHJpbmcmIGFVUkwpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IExvYWRCaW5kaW5nRG9jdW1lbnQobnNJRG9jdW1lbnQqIGFEb2N1bWVu dCwgY29uc3QgbnNBU3RyaW5nJiBhVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRUb0F0 dGFjaGVkUXVldWUobnNJWEJMQmluZGluZyogYUJpbmRpbmcpPTA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBBZGRIYW5kbGVyVG9BdHRhY2hlZFF1ZXVlKG5zSVhCTEJpbmRpbmdBdHRhY2hlZEhhbmRsZXIq IGFIYW5kbGVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJBdHRhY2hlZFF1ZXVlKCk9MDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFByb2Nlc3NBdHRhY2hlZFF1ZXVlKCk9MDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBFeGVjdXRlRGV0YWNoZWRIYW5kbGVycygpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQg UHV0WEJMRG9jdW1lbnRJbmZvKG5zSVhCTERvY3VtZW50SW5mbyogYURvY3VtZW50SW5mbyk9MDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZVhCTERvY3VtZW50SW5mbyhuc0lYQkxEb2N1bWVudElu Zm8qIGFEb2N1bWVudEluZm8pPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRYQkxEb2N1bWVudElu Zm8oY29uc3QgbnNDU3RyaW5nJiBhVVJMLCBuc0lYQkxEb2N1bWVudEluZm8qKiBhUmVzdWx0KT0w OwoKICB2aXJ0dWFsIG5zcmVzdWx0IFB1dExvYWRpbmdEb2NMaXN0ZW5lcihjb25zdCBuc0NTdHJp bmcmIGFVUkwsIG5zSVN0cmVhbUxpc3RlbmVyKiBhTGlzdGVuZXIpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldExvYWRpbmdEb2NMaXN0ZW5lcihjb25zdCBuc0NTdHJpbmcmIGFVUkwsIG5zSVN0 cmVhbUxpc3RlbmVyKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTG9h ZGluZ0RvY0xpc3RlbmVyKGNvbnN0IG5zQ1N0cmluZyYgYVVSTCk9MDsKCiAgdmlydHVhbCBuc3Jl c3VsdCBJbmhlcml0c1N0eWxlKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkJvb2wqIGFSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoU2tpbkJpbmRpbmdzKCkgPSAwOwoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEJpbmRpbmdJbXBsZW1lbnRhdGlvbihuc0lDb250ZW50KiBhQ29udGVu dCwgY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhUmVzdWx0KT0wOwoKICB2aXJ0dWFsIG5zcmVz dWx0IFNob3VsZEJ1aWxkQ2hpbGRGcmFtZXMobnNJQ29udGVudCogYUNvbnRlbnQsIFBSQm9vbCog YVJlc3VsdCkgPSAwOwp9OwojIDE1OCAibnNET01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVZpZXdDU1MuaCIgMQojIDEwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTVZpZXdDU1MuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUFic3RyYWN0Vmlldy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NQWJzdHJhY3RWaWV3LmgiCmNsYXNzIG5zSURPTUFic3RyYWN0VmlldyA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNTFlYmFkZSwgMHg4YjFhLCAweDExZDMs IHsgMHhhYSwgMHhlNywgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgyMywgMHhiNCB9fTsgcmV0 dXJuIGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQWJzdHJhY3RW aWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lET01Eb2N1bWVudFZpZXcg KiAqYURvY3VtZW50KSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTVZpZXdDU1MuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVZp ZXdDU1MuaCIKY2xhc3MgbnNJRE9NVmlld0NTUyA6IHB1YmxpYyBuc0lET01BYnN0cmFjdFZpZXcg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4MGI5MzQxZjMsIDB4OTVkNCwgMHg0ZmE0LCB7IDB4YWQsIDB4Y2QsIDB4 ZTEsIDB4MTksIDB4ZTAsIDB4ZGIsIDB4MjgsIDB4ODkgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb21wdXRlZFN0eWxlKG5zSURPTUVsZW1lbnQgKmVsdCwgY29uc3Qg bnNBU3RyaW5nICYgcHNldWRvRWx0LCBuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uICoqX3JldHZh bCkgPSAwOwoKfTsKIyAxNjEgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRHbG9iYWxPYmplY3QuaCIgMQojIDQ1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdEdsb2JhbE9iamVjdC5oIgpjbGFzcyBuc0lTY3Jp cHRDb250ZXh0OwpjbGFzcyBuc0lET01Eb2N1bWVudDsKY2xhc3MgbnNJRE9NRXZlbnQ7CmNsYXNz IG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lEb2NTaGVsbDsKY2xhc3MgbnNJRE9NV2luZG93SW50 ZXJuYWw7CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdE93bmVyOwpzdHJ1Y3QgSlNPYmplY3Q7 CiMgNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0R2xvYmFsT2JqZWN0Lmgi CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweDJiMTZmYzgwLCAweGZhNDEsIDB4MTFkMSwgeyAweDliLCAweGMzLCAweDAwLCAweDYw LCAweDA4LCAweDhjLCAweGE2LCAweGIzfSB9OyByZXR1cm4gaWlkO30KCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKiphQ29udGV4dCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0TmV3RG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKmFEb2N1bWVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVtb3ZlRXZlbnRM aXN0ZW5lcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUNsZWFy U2NvcGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERvY1NoZWxsKG5zSURvY1NoZWxsICph RG9jU2hlbGwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY1NoZWxsKG5zSURvY1NoZWxs ICoqYURvY1NoZWxsKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXJXaW5kb3cobnNJ RE9NV2luZG93SW50ZXJuYWwgKmFPcGVuZXIpPTA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0R2xvYmFsT2JqZWN0T3duZXIobnNJU2NyaXB0R2xvYmFsT2JqZWN0T3duZXIqIGFPd25lcikg PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdsb2JhbE9iamVjdE93bmVyKG5zSVNj cmlwdEdsb2JhbE9iamVjdE93bmVyKiogYU93bmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQg SGFuZGxlRE9NRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSURPTUV2ZW50KiogYURPTUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJVaW50MzIgYUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1 cyogYUV2ZW50U3RhdHVzKT0wOwoKICB2aXJ0dWFsIEpTT2JqZWN0ICogR2V0R2xvYmFsSlNPYmpl Y3QoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRmluYWxpemUoSlNPYmplY3QgKmFK U09iamVjdCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdHNFbmFibGVkKFBS Qm9vbCBhRW5hYmxlZCwgUFJCb29sIGFGaXJlVGltZW91dHMpID0gMDsKfTsKIyAxNjQgIm5zRE9N Q2xhc3NJbmZvLmNwcCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N TmF2aWdhdG9yLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OYXZp Z2F0b3IuaCIKY2xhc3MgbnNJRE9NTmF2aWdhdG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweGE2Y2Y5MDZlLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QXBwQ29kZU5hbWUobnNBU3RyaW5nICYgYUFwcENvZGVOYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFwcE5hbWUobnNBU3RyaW5nICYgYUFwcE5hbWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXBwVmVyc2lvbihuc0FTdHJpbmcgJiBhQXBwVmVyc2lv bikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShuc0FTdHJpbmcgJiBhTGFu Z3VhZ2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWltZVR5cGVzKG5zSURPTU1pbWVU eXBlQXJyYXkgKiAqYU1pbWVUeXBlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQbGF0 Zm9ybShuc0FTdHJpbmcgJiBhUGxhdGZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 T3NjcHUobnNBU3RyaW5nICYgYU9zY3B1KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZl bmRvcihuc0FTdHJpbmcgJiBhVmVuZG9yKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZl bmRvclN1Yihuc0FTdHJpbmcgJiBhVmVuZG9yU3ViKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFByb2R1Y3QobnNBU3RyaW5nICYgYVByb2R1Y3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0UHJvZHVjdFN1Yihuc0FTdHJpbmcgJiBhUHJvZHVjdFN1YikgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRQbHVnaW5zKG5zSURPTVBsdWdpbkFycmF5ICogKmFQbHVnaW5zKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlY3VyaXR5UG9saWN5KG5zQVN0cmluZyAmIGFTZWN1 cml0eVBvbGljeSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VyQWdlbnQobnNBU3Ry aW5nICYgYVVzZXJBZ2VudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb29raWVFbmFi bGVkKFBSQm9vbCAqYUNvb2tpZUVuYWJsZWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSmF2 YUVuYWJsZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRhaW50 RW5hYmxlZChQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMjg0ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTU5hdmlnYXRvci5oIgpjbGFzcyBuc0lET01KU05hdmlnYXRvciA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0YjRmODMxNiwgMHgxZGQyLCAweDExYjIs IHsgMHhiMiwgMHg2NSwgMHg5YSwgMHg4NSwgMHg3MywgMHg3NiwgMHhkMSwgMHg1OSB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZWZlcmVuY2Uodm9pZCkgPSAwOwoKfTsK IyAxNjggIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NQmFyUHJvcC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NQmFyUHJvcC5oIgpjbGFzcyBuc0lET01CYXJQcm9wIDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDllYjJjMTUwLCAweDFkNTYsIDB4MTFkMywgeyAweDgyLCAweDIxLCAweDAw LCAweDYwLCAweDA4LCAweDNhLCAweDBiLCAweGNmIH19OyByZXR1cm4gaWlkO30KIyAzOCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01CYXJQcm9wLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRWaXNpYmxlKFBSQm9vbCAqYVZpc2libGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFZpc2libGUoUFJCb29sIGFWaXNpYmxlKSA9IDA7Cgp9OwojIDE2OSAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JlZW4uaCIgMQoj IDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVNjcmVlbi5oIgpjbGFzcyBuc0lE T01TY3JlZW4gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Nzc5NDc5NjAsIDB4 YjRhZiwgMHgxMWQyLCB7IDB4YmQsIDB4OTMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZTMs IDB4ZjQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb3AoUFJJbnQz MiAqYVRvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZWZ0KFBSSW50MzIgKmFMZWZ0 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKFBSSW50MzIgKmFXaWR0aCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJJbnQzMiAqYUhlaWdodCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXhlbERlcHRoKFBSSW50MzIgKmFQaXhlbERlcHRoKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbG9yRGVwdGgoUFJJbnQzMiAqYUNvbG9yRGVw dGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXZhaWxXaWR0aChQUkludDMyICphQXZh aWxXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdmFpbEhlaWdodChQUkludDMy ICphQXZhaWxIZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXZhaWxMZWZ0KFBS SW50MzIgKmFBdmFpbExlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXZhaWxUb3Ao UFJJbnQzMiAqYUF2YWlsVG9wKSA9IDA7Cgp9OwojIDE3MCAibnNET01DbGFzc0luZm8uY3BwIiAy CiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Eb2N1bWVudFR5cGUuaCIgMQoj IDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50VHlwZS5oIgpjbGFz cyBuc0lET01Eb2N1bWVudFR5cGUgOiBwdWJsaWMgbnNJRE9NTm9kZSB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTA3NywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NRG9jdW1lbnRUeXBlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1l KG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVudGl0aWVz KG5zSURPTU5hbWVkTm9kZU1hcCAqICphRW50aXRpZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Tm90YXRpb25zKG5zSURPTU5hbWVkTm9kZU1hcCAqICphTm90YXRpb25zKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFB1YmxpY0lkKG5zQVN0cmluZyAmIGFQdWJsaWNJZCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1JZChuc0FTdHJpbmcgJiBhU3lzdGVtSWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJuYWxTdWJzZXQobnNBU3RyaW5nICYg YUludGVybmFsU3Vic2V0KSA9IDA7Cgp9OwojIDE3MSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01ET01JbXBsZW1lbnRhdGlvbi5oIiAx CiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRE9NSW1wbGVtZW50YXRpb24u aCIKY2xhc3MgbnNJRE9NRE9NSW1wbGVtZW50YXRpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4YTZjZjkwNzQsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAs IDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURPTUltcGxlbWVudGF0aW9uLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBIYXNGZWF0dXJlKGNvbnN0IG5zQVN0cmluZyAmIGZlYXR1cmUsIGNvbnN0IG5z QVN0cmluZyAmIHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBDcmVhdGVEb2N1bWVudFR5cGUoY29uc3QgbnNBU3RyaW5nICYgcXVhbGlmaWVkTmFtZSwg Y29uc3QgbnNBU3RyaW5nICYgcHVibGljSWQsIGNvbnN0IG5zQVN0cmluZyAmIHN5c3RlbUlkLCBu c0lET01Eb2N1bWVudFR5cGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENy ZWF0ZURvY3VtZW50KGNvbnN0IG5zQVN0cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNBU3Ry aW5nICYgcXVhbGlmaWVkTmFtZSwgbnNJRE9NRG9jdW1lbnRUeXBlICpkb2N0eXBlLCBuc0lET01E b2N1bWVudCAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTcyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50RnJhZ21lbnQuaCIg MQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50RnJhZ21lbnQu aCIKY2xhc3MgbnNJRE9NRG9jdW1lbnRGcmFnbWVudCA6IHB1YmxpYyBuc0lET01Ob2RlIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweGE2Y2Y5MDc2LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCn07CiMgMTczICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TURvY3VtZW50RXZlbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TURvY3VtZW50RXZlbnQuaCIKY2xhc3MgbnNJRE9NRG9jdW1lbnRFdmVudCA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0NmI5MWQ2NiwgMHgyOGUyLCAweDExZDQsIHsgMHhhYiwg MHgxZSwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgyMywgMHhiNCB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIGV2ZW50 VHlwZSwgbnNJRE9NRXZlbnQgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE3NCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01BdHRyLmgiIDEK IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01BdHRyLmgiCmNsYXNzIG5zSURP TUF0dHIgOiBwdWJsaWMgbnNJRE9NTm9kZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA3MCwgMHgxNWIz LCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgz MiB9fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N QXR0ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FTdHJpbmcgJiBhTmFtZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTcGVjaWZpZWQoUFJCb29sICphU3BlY2lmaWVkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlKG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmFsdWUoY29uc3QgbnNBU3RyaW5nICYgYVZhbHVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyRWxlbWVudChuc0lET01FbGVtZW50ICog KmFPd25lckVsZW1lbnQpID0gMDsKCn07CiMgMTc1ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIgMQojIDEwICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUNoYXJhY3RlckRhdGEuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUNoYXJhY3RlckRhdGEuaCIKY2xhc3MgbnNJRE9NQ2hhcmFjdGVyRGF0YSA6 IHB1YmxpYyBuc0lET01Ob2RlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDcyLCAweDE1YjMsIDB4MTFk MiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyBy ZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DaGFyYWN0 ZXJEYXRhLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRhKG5zQVN0cmluZyAmIGFEYXRhKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKGNvbnN0IG5zQVN0cmluZyAmIGFEYXRhKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0aCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdWJzdHJpbmdEYXRhKFBSVWludDMyIG9mZnNldCwgUFJV aW50MzIgY291bnQsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgQXBwZW5kRGF0YShjb25zdCBuc0FTdHJpbmcgJiBhcmcpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgSW5zZXJ0RGF0YShQUlVpbnQzMiBvZmZzZXQsIGNvbnN0IG5zQVN0cmluZyAmIGFyZykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVEYXRhKFBSVWludDMyIG9mZnNldCwgUFJV aW50MzIgY291bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZURhdGEoUFJVaW50 MzIgb2Zmc2V0LCBQUlVpbnQzMiBjb3VudCwgY29uc3QgbnNBU3RyaW5nICYgYXJnKSA9IDA7Cgp9 OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIgMgojIDI1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIKY2xhc3MgbnNJRE9NVGV4dCA6 IHB1YmxpYyBuc0lET01DaGFyYWN0ZXJEYXRhIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDgyLCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01UZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGxpdFRleHQoUFJVaW50MzIgb2Zmc2V0LCBu c0lET01UZXh0ICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNzYgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ29tbWVudC5oIiAxCiMgMjUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ29tbWVudC5oIgpjbGFzcyBuc0lET01D b21tZW50IDogcHVibGljIG5zSURPTUNoYXJhY3RlckRhdGEgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw NzMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAxNzcgIm5zRE9NQ2xhc3NJbmZvLmNw cCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ0RBVEFTZWN0aW9uLmgi IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DREFUQVNlY3Rpb24uaCIK Y2xhc3MgbnNJRE9NQ0RBVEFTZWN0aW9uIDogcHVibGljIG5zSURPTVRleHQgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4YTZjZjkwNzEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAxNzggIm5zRE9NQ2xh c3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUHJvY2Vz c2luZ0luc3RydWN0aW9uLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKY2xhc3MgbnNJRE9NUHJvY2Vzc2luZ0luc3RydWN0 aW9uIDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwN2YsIDB4MTViMywg MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg fX07IHJldHVybiBpaWQ7fQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVBy b2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KG5zQVN0 cmluZyAmIGFUYXJnZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShuc0FTdHJp bmcgJiBhRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShjb25zdCBuc0FTdHJp bmcgJiBhRGF0YSkgPSAwOwoKfTsKIyAxNzkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRW50aXR5LmgiIDEKIyAyNSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FbnRpdHkuaCIKY2xhc3MgbnNJRE9NRW50aXR5IDogcHVi bGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzksIDB4MTViMywgMHgxMWQyLCB7 IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVy biBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVudGl0eS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UHVibGljSWQobnNBU3RyaW5nICYgYVB1YmxpY0lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN5c3RlbUlkKG5zQVN0cmluZyAmIGFTeXN0ZW1JZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb3RhdGlvbk5hbWUobnNBU3RyaW5nICYgYU5v dGF0aW9uTmFtZSkgPSAwOwoKfTsKIyAxODAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRW50aXR5UmVmZXJlbmNlLmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FbnRpdHlSZWZlcmVuY2UuaCIKY2xhc3Mg bnNJRE9NRW50aXR5UmVmZXJlbmNlIDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwN2EsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAxODEgIm5zRE9NQ2xhc3NJ bmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTm90YXRpb24u aCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5vdGF0aW9uLmgiCmNs YXNzIG5zSURPTU5vdGF0aW9uIDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZj ZjkwN2UsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4 OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTU5vdGF0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQdWJsaWNJZChu c0FTdHJpbmcgJiBhUHVibGljSWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3lzdGVt SWQobnNBU3RyaW5nICYgYVN5c3RlbUlkKSA9IDA7Cgp9OwojIDE4MiAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Nb3VzZUV2ZW50Lmgi IDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Nb3VzZUV2ZW50LmgiCmNs YXNzIG5zSURPTU1vdXNlRXZlbnQgOiBwdWJsaWMgbnNJRE9NVUlFdmVudCB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhmZjc1MWVkYywgMHg4YjAyLCAweGFhZTcsIHsgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHg4 MywgMHg4YSwgMHgzMSwgMHgyMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFNjcmVlblgoUFJJbnQzMiAqYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U2NyZWVuWShQUkludDMyICphU2NyZWVuWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDbGllbnRYKFBSSW50MzIgKmFDbGllbnRYKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dENsaWVudFkoUFJJbnQzMiAqYUNsaWVudFkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Q3RybEtleShQUkJvb2wgKmFDdHJsS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNo aWZ0S2V5KFBSQm9vbCAqYVNoaWZ0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFs dEtleShQUkJvb2wgKmFBbHRLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0YUtl eShQUkJvb2wgKmFNZXRhS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1dHRvbihQ UlVpbnQxNiAqYUJ1dHRvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWxhdGVkVGFy Z2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFSZWxhdGVkVGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEluaXRNb3VzZUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9v bCBjYW5CdWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01BYnN0cmFjdFZpZXcg KnZpZXdBcmcsIFBSSW50MzIgZGV0YWlsQXJnLCBQUkludDMyIHNjcmVlblhBcmcsIFBSSW50MzIg c2NyZWVuWUFyZywgUFJJbnQzMiBjbGllbnRYQXJnLCBQUkludDMyIGNsaWVudFlBcmcsIFBSQm9v bCBjdHJsS2V5QXJnLCBQUkJvb2wgYWx0S2V5QXJnLCBQUkJvb2wgc2hpZnRLZXlBcmcsIFBSQm9v bCBtZXRhS2V5QXJnLCBQUlVpbnQxNiBidXR0b25BcmcsIG5zSURPTUV2ZW50VGFyZ2V0ICpyZWxh dGVkVGFyZ2V0QXJnKSA9IDA7Cgp9OwojIDE4MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01NdXRhdGlvbkV2ZW50LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01NdXRhdGlvbkV2ZW50LmgiCmNsYXNzIG5z SURPTU11dGF0aW9uRXZlbnQgOiBwdWJsaWMgbnNJRE9NRXZlbnQgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGU0 NDBkODYsIDB4ODg2YSwgMHg0ZTc2LCB7IDB4OWUsIDB4NTksIDB4YzEsIDB4M2IsIDB4OTMsIDB4 OWMsIDB4OWEsIDB4NGIgfX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgTU9ESUZJQ0FUSU9OID0g MVUgfTsKCiAgZW51bSB7IEFERElUSU9OID0gMlUgfTsKCiAgZW51bSB7IFJFTU9WQUwgPSAzVSB9 OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWxhdGVkTm9kZShuc0lET01Ob2RlICogKmFSZWxh dGVkTm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2VmFsdWUobnNBU3RyaW5n ICYgYVByZXZWYWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXdWYWx1ZShuc0FT dHJpbmcgJiBhTmV3VmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ck5hbWUo bnNBU3RyaW5nICYgYUF0dHJOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJD aGFuZ2UoUFJVaW50MTYgKmFBdHRyQ2hhbmdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElu aXRNdXRhdGlvbkV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5CdWJi bGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01Ob2RlICpyZWxhdGVkTm9kZUFyZywg Y29uc3QgbnNBU3RyaW5nICYgcHJldlZhbHVlQXJnLCBjb25zdCBuc0FTdHJpbmcgJiBuZXdWYWx1 ZUFyZywgY29uc3QgbnNBU3RyaW5nICYgYXR0ck5hbWVBcmcsIFBSVWludDE2IGF0dHJDaGFuZ2VB cmcpID0gMDsKCn07CiMgMTg0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50U3R5bGUuaCIgMQojIDM0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50U3R5bGUuaCIKY2xhc3MgbnNJRE9NRG9jdW1l bnRTdHlsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzZDlmNDk3MywgMHhk ZDJlLCAweDQ4ZjUsIHsgMHhiNSwgMHhmNywgMHgyNiwgMHgzNCwgMHhlMCwgMHg5ZSwgMHhhZCwg MHhkOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlU2hlZXRz KG5zSURPTVN0eWxlU2hlZXRMaXN0ICogKmFTdHlsZVNoZWV0cykgPSAwOwoKfTsKIyAxODUgIm5z RE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RG9jdW1lbnRSYW5nZS5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RG9jdW1lbnRSYW5nZS5oIgpjbGFzcyBuc0lET01Eb2N1bWVudFJhbmdlIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweDdiOWJhZGM2LCAweGM5YmMsIDB4NDQ3YSwgeyAweDg2LCAw eDcwLCAweGRiLCAweGQxLCAweDk1LCAweGFlLCAweGQyLCAweDRiIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmFuZ2UobnNJRE9NUmFuZ2UgKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDE4NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01Eb2N1bWVudFRyYXZlcnNhbC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NRG9jdW1lbnRUcmF2ZXJzYWwuaCIKY2xhc3MgbnNJRE9NTm9k ZUl0ZXJhdG9yOwoKY2xhc3MgbnNJRE9NTm9kZUZpbHRlcjsKCmNsYXNzIG5zSURPTVRyZWVXYWxr ZXI7CiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRG9jdW1lbnRUcmF2ZXJz YWwuaCIKY2xhc3MgbnNJRE9NRG9jdW1lbnRUcmF2ZXJzYWwgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4MTNmMjM2YzAsIDB4NDdmOCwgMHgxMWQ1LCB7IDB4YjYsIDB4YTMsIDB4 MDAsIDB4OTAsIDB4MjcsIDB4NDQsIDB4NmUsIDB4ODQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDcmVhdGVOb2RlSXRlcmF0b3IobnNJRE9NTm9kZSAqcm9vdCwgUFJVaW50 MzIgd2hhdFRvU2hvdywgbnNJRE9NTm9kZUZpbHRlciAqZmlsdGVyLCBQUkJvb2wgZW50aXR5UmVm ZXJlbmNlRXhwYW5zaW9uLCBuc0lET01Ob2RlSXRlcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVRyZWVXYWxrZXIobnNJRE9NTm9kZSAqcm9vdCwgUFJVaW50 MzIgd2hhdFRvU2hvdywgbnNJRE9NTm9kZUZpbHRlciAqZmlsdGVyLCBQUkJvb2wgZW50aXR5UmVm ZXJlbmNlRXhwYW5zaW9uLCBuc0lET01UcmVlV2Fsa2VyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAx ODcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NRG9jdW1lbnRYQkwuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTURvY3VtZW50WEJMLmgiCmNsYXNzIG5zSURPTURvY3VtZW50WEJMIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGM3YzBhZTliLCAweGEwYmEsIDB4NGY0ZSwgeyAweDlmLCAw eDJjLCAweGMxLCAweDhkLCAweGViLCAweDYyLCAweGVlLCAweDhiIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QW5vbnltb3VzTm9kZXMobnNJRE9NRWxlbWVudCAqZWx0 LCBuc0lET01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QW5vbnltb3VzRWxlbWVudEJ5QXR0cmlidXRlKG5zSURPTUVsZW1lbnQgKmVsdCwgY29uc3QgbnNB U3RyaW5nICYgYXR0ck5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIGF0dHJWYWx1ZSwgbnNJRE9NRWxl bWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQmluZGluZyhuc0lE T01FbGVtZW50ICplbHQsIGNvbnN0IG5zQVN0cmluZyAmIGJpbmRpbmdVUkwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQmluZGluZyhuc0lET01FbGVtZW50ICplbHQsIGNvbnN0IG5z QVN0cmluZyAmIGJpbmRpbmdVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGlu Z1BhcmVudChuc0lET01Ob2RlICpub2RlLCBuc0lET01FbGVtZW50ICoqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBMb2FkQmluZGluZ0RvY3VtZW50KGNvbnN0IG5zQVN0cmluZyAm IGRvY3VtZW50VVJMLCBuc0lET01Eb2N1bWVudCAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTg4ICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TURvY3VtZW50Vmlldy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RG9jdW1lbnRWaWV3LmgiCmNsYXNzIG5zSURPTURvY3VtZW50VmlldyA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHgxYWNkYjJiYSwgMHgxZGQyLCAweDExYjIsIHsgMHg5NSwgMHhi YywgMHg5NSwgMHg0MiwgMHg0OSwgMHg1ZCwgMHgyNSwgMHg2OSB9fTsgcmV0dXJuIGlpZDt9CiMg NDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRG9jdW1lbnRWaWV3LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Vmlldyhuc0lET01BYnN0cmFjdFZpZXcgKiAqYURlZmF1 bHRWaWV3KSA9IDA7Cgp9OwojIDE4OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGUuaCIgMQojIDI1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZS5o IgpjbGFzcyBuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4OTk3MTU4NDUsIDB4OTVmYywgMHg0YTU2LCB7IDB4YWEsIDB4NTMsIDB4 MjEsIDB4NGIsIDB4NjUsIDB4YzIsIDB4NmUsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTdHlsZShuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uICogKmFTdHls ZSkgPSAwOwoKfTsKIyAxOTAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTGlua1N0eWxlLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01MaW5rU3R5bGUuaCIKY2xhc3MgbnNJRE9NTGlua1N0eWxlIDogcHVi bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDI0ZDg5YTY1LCAweGY1OTgsIDB4NDgxZSwg eyAweGEyLCAweDk3LCAweDIzLCAweGNjLCAweDAyLCAweDU5LCAweDliLCAweGJkIH19OyByZXR1 cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hlZXQobnNJRE9NU3R5bGVTaGVldCAq ICphU2hlZXQpID0gMDsKCn07CiMgMTkxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxEb2N1bWVudC5oIiAxCiMgMzQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTERvY3VtZW50LmgiCmNsYXNzIG5zSURPTUhU TUxEb2N1bWVudCA6IHB1YmxpYyBuc0lET01Eb2N1bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA4 NCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRpdGxl KG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGl0bGUoY29u c3QgbnNBU3RyaW5nICYgYVRpdGxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZmVy cmVyKG5zQVN0cmluZyAmIGFSZWZlcnJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE b21haW4obnNBU3RyaW5nICYgYURvbWFpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRV UkwobnNBU3RyaW5nICYgYVVSTCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb2R5KG5z SURPTUhUTUxFbGVtZW50ICogKmFCb2R5KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb2R5 KG5zSURPTUhUTUxFbGVtZW50ICogYUJvZHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SW1hZ2VzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFJbWFnZXMpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QXBwbGV0cyhuc0lET01IVE1MQ29sbGVjdGlvbiAqICphQXBwbGV0cykgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5rcyhuc0lET01IVE1MQ29sbGVjdGlvbiAqICph TGlua3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybXMobnNJRE9NSFRNTENvbGxl Y3Rpb24gKiAqYUZvcm1zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFuY2hvcnMobnNJ RE9NSFRNTENvbGxlY3Rpb24gKiAqYUFuY2hvcnMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29va2llKG5zQVN0cmluZyAmIGFDb29raWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dENvb2tpZShjb25zdCBuc0FTdHJpbmcgJiBhQ29va2llKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IE9wZW4odm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlKGNvbnN0IG5zQVN0cmluZyAmIHRleHQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgV3JpdGVsbihjb25zdCBuc0FTdHJpbmcgJiB0ZXh0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IG5zQVN0cmluZyAm IGVsZW1lbnROYW1lLCBuc0lET01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTkyICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TU5TSFRNTERvY3VtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01OU0hUTUxEb2N1bWVudC5oIgpjbGFzcyBuc0lET01OU0hUTUxEb2N1bWVudCA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjNSwgMHgxNWIzLCAweDExZDIsIHsgMHg5 MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKFBSSW50MzIgKmFXaWR0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJJbnQzMiAqYUhlaWdodCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlua0NvbG9yKG5zQVN0cmluZyAmIGFBbGlua0NvbG9yKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlua0NvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFB bGlua0NvbG9yKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmtDb2xvcihuc0FTdHJp bmcgJiBhTGlua0NvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5rQ29sb3IoY29u c3QgbnNBU3RyaW5nICYgYUxpbmtDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRW bGlua0NvbG9yKG5zQVN0cmluZyAmIGFWbGlua0NvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRWbGlua0NvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFWbGlua0NvbG9yKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEJnQ29sb3IobnNBU3RyaW5nICYgYUJnQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJnQ29sb3IoY29uc3QgbnNBU3RyaW5nICYgYUJnQ29sb3IpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmdDb2xvcihuc0FTdHJpbmcgJiBhRmdDb2xvcikg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmdDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhRmdD b2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0TW9kaWZpZWQobnNBU3RyaW5n ICYgYUxhc3RNb2RpZmllZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb21haW4obnNB U3RyaW5nICYgYURvbWFpbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9tYWluKGNvbnN0 IG5zQVN0cmluZyAmIGFEb21haW4pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1iZWRz KG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFFbWJlZHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U2VsZWN0aW9uKG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgT3Blbihuc0lET01Eb2N1bWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgV3JpdGUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXcml0ZWxuKHZvaWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDYXB0dXJlRXZlbnRzKFBSSW50MzIgZXZlbnRGbGFncykgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBSZWxlYXNlRXZlbnRzKFBSSW50MzIgZXZlbnRGbGFncykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSb3V0ZUV2ZW50KG5zSURPTUV2ZW50ICpldnQpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29tcGF0TW9kZShuc0FTdHJpbmcgJiBhQ29tcGF0TW9kZSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQbHVnaW5zKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFQ bHVnaW5zKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2lnbk1vZGUobnNBU3Ry aW5nICYgYURlc2lnbk1vZGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlc2lnbk1vZGUo Y29uc3QgbnNBU3RyaW5nICYgYURlc2lnbk1vZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg RXhlY0NvbW1hbmQoY29uc3QgbnNBU3RyaW5nICYgY29tbWFuZElELCBQUkJvb2wgZG9TaG93VUks IGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRXhlY0NvbW1hbmRTaG93SGVscChjb25zdCBuc0FTdHJpbmcgJiBjb21tYW5k SUQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUNvbW1h bmRFbmFibGVkKGNvbnN0IG5zQVN0cmluZyAmIGNvbW1hbmRJRCwgUFJCb29sICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5Q29tbWFuZEluZGV0ZXJtKGNvbnN0IG5zQVN0 cmluZyAmIGNvbW1hbmRJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IFF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnN0IG5zQVN0cmluZyAmIGNvbW1hbmRJRCwgUFJCb29s ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5Q29tbWFuZFN1cHBvcnRl ZChjb25zdCBuc0FTdHJpbmcgJiBjb21tYW5kSUQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBRdWVyeUNvbW1hbmRUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGNvbW1h bmRJRCwgbnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVy eUNvbW1hbmRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBjb21tYW5kSUQsIG5zQVN0cmluZyAmIF9y ZXR2YWwpID0gMDsKCn07CiMgMTkzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEVsZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NTlNI VE1MRWxlbWVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkYTgzYjJlYywg MHg4MjY0LCAweDQ0MTAsIHsgMHg4NCwgMHg5NiwgMHhhZCwgMHhhMywgMHhhYywgMHhkMiwgMHhh ZSwgMHg0MiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldFRv cChQUkludDMyICphT2Zmc2V0VG9wKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNl dExlZnQoUFJJbnQzMiAqYU9mZnNldExlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 T2Zmc2V0V2lkdGgoUFJJbnQzMiAqYU9mZnNldFdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE9mZnNldEhlaWdodChQUkludDMyICphT2Zmc2V0SGVpZ2h0KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE9mZnNldFBhcmVudChuc0lET01FbGVtZW50ICogKmFPZmZzZXRQYXJl bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIVE1MKG5zQVN0cmluZyAmIGFJ bm5lckhUTUwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldElubmVySFRNTChjb25zdCBuc0FT dHJpbmcgJiBhSW5uZXJIVE1MKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9sbFRv cChQUkludDMyICphU2Nyb2xsVG9wKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JvbGxU b3AoUFJJbnQzMiBhU2Nyb2xsVG9wKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9s bExlZnQoUFJJbnQzMiAqYVNjcm9sbExlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNj cm9sbExlZnQoUFJJbnQzMiBhU2Nyb2xsTGVmdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRTY3JvbGxIZWlnaHQoUFJJbnQzMiAqYVNjcm9sbEhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTY3JvbGxXaWR0aChQUkludDMyICphU2Nyb2xsV2lkdGgpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50SGVpZ2h0KFBSSW50MzIgKmFDbGllbnRIZWlnaHQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50V2lkdGgoUFJJbnQzMiAqYUNsaWVudFdp ZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbEludG9WaWV3KFBSQm9vbCB0b3Ap ID0gMDsKCn07CiMgMTk0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUhUTUxBbmNob3JFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQW5jaG9yRWxlbWVudC5oIgpjbGFzcyBuc0lET01I VE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhhNmNmOTBhYSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1 ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEFjY2Vzc0tleShuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRBY2Nlc3NLZXkoY29uc3QgbnNBU3RyaW5nICYgYUFjY2Vzc0tleSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQVN0cmluZyAmIGFDaGFyc2V0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRDaGFyc2V0KGNvbnN0IG5zQVN0cmluZyAmIGFDaGFyc2V0KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvb3Jkcyhuc0FTdHJpbmcgJiBhQ29vcmRzKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb29yZHMoY29uc3QgbnNBU3RyaW5nICYgYUNvb3Jk cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIcmVmKG5zQVN0cmluZyAmIGFIcmVmKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIcmVmKGNvbnN0IG5zQVN0cmluZyAmIGFIcmVmKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhyZWZsYW5nKG5zQVN0cmluZyAmIGFIcmVmbGFu ZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZmxhbmcoY29uc3QgbnNBU3RyaW5nICYg YUhyZWZsYW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYg YU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYg YU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVsKG5zQVN0cmluZyAmIGFSZWwp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlbChjb25zdCBuc0FTdHJpbmcgJiBhUmVsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldihuc0FTdHJpbmcgJiBhUmV2KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRSZXYoY29uc3QgbnNBU3RyaW5nICYgYVJldikgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTaGFwZShuc0FTdHJpbmcgJiBhU2hhcGUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFNoYXBlKGNvbnN0IG5zQVN0cmluZyAmIGFTaGFwZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRUYWJJbmRleChQUkludDMyICphVGFiSW5kZXgpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRUYXJnZXQoY29uc3QgbnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEJsdXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb2N1 cyh2b2lkKSA9IDA7Cgp9OwojIDE5NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxBbmNob3JFbGVtZW50LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxBbmNob3JFbGVtZW50LmgiCmNs YXNzIG5zSURPTU5TSFRNTEFuY2hvckVsZW1lbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4YTZjZjkxMWMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4 ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQcm90b2NvbChuc0FTdHJpbmcgJiBhUHJvdG9jb2wpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFByb3RvY29sKGNvbnN0IG5zQVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0KG5zQVN0cmluZyAmIGFIb3N0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRIb3N0KGNvbnN0IG5zQVN0cmluZyAmIGFIb3N0KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEhvc3RuYW1lKG5zQVN0cmluZyAmIGFIb3N0bmFtZSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SG9zdG5hbWUoY29uc3QgbnNBU3RyaW5nICYgYUhvc3RuYW1l KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhdGhuYW1lKG5zQVN0cmluZyAmIGFQYXRo bmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGF0aG5hbWUoY29uc3QgbnNBU3RyaW5n ICYgYVBhdGhuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlYXJjaChuc0FTdHJp bmcgJiBhU2VhcmNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWFyY2goY29uc3QgbnNB U3RyaW5nICYgYVNlYXJjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3J0KG5zQVN0 cmluZyAmIGFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KGNvbnN0IG5zQVN0 cmluZyAmIGFQb3J0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhhc2gobnNBU3RyaW5n ICYgYUhhc2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhhc2goY29uc3QgbnNBU3RyaW5n ICYgYUhhc2gpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dChuc0FTdHJpbmcgJiBh VGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhuc0FTdHJpbmcgJiBfcmV0 dmFsKSA9IDA7Cgp9OwojIDE5NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQXBwbGV0RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEFwcGxldEVsZW1lbnQuaCIKY2xhc3MgbnNJ RE9NSFRNTEFwcGxldEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4YTZjZjkwYWUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAs IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRBbHQobnNBU3RyaW5nICYgYUFsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QWx0KGNvbnN0IG5zQVN0cmluZyAmIGFBbHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QXJjaGl2ZShuc0FTdHJpbmcgJiBhQXJjaGl2ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QXJjaGl2ZShjb25zdCBuc0FTdHJpbmcgJiBhQXJjaGl2ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDb2RlKG5zQVN0cmluZyAmIGFDb2RlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRDb2RlKGNvbnN0IG5zQVN0cmluZyAmIGFDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldENvZGVCYXNlKG5zQVN0cmluZyAmIGFDb2RlQmFzZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Q29kZUJhc2UoY29uc3QgbnNBU3RyaW5nICYgYUNvZGVCYXNlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEhlaWdodChuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRIZWlnaHQoY29uc3QgbnNBU3RyaW5nICYgYUhlaWdodCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRIc3BhY2UoUFJJbnQzMiAqYUhzcGFjZSkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0SHNwYWNlKFBSSW50MzIgYUhzcGFjZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE9iamVjdChuc0FTdHJpbmcgJiBhT2JqZWN0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRPYmplY3QoY29uc3QgbnNBU3RyaW5nICYgYU9iamVjdCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRWc3BhY2UoUFJJbnQzMiAqYVZzcGFjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VnNwYWNlKFBSSW50MzIgYVZzcGFjZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRXaWR0aChuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdp ZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFXaWR0aCkgPSAwOwoKfTsKIyAxOTcgIm5zRE9NQ2xhc3NJ bmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEFyZWFF bGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQXJl YUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEFyZWFFbGVtZW50IDogcHVibGljIG5zSURPTUhU TUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGIwLCAweDE1YjMsIDB4MTFkMiwgeyAweDkz LCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVN0cmluZyAmIGFBY2Nlc3NL ZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FTdHJpbmcg JiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsdChuc0FTdHJpbmcg JiBhQWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbHQoY29uc3QgbnNBU3RyaW5nICYg YUFsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb29yZHMobnNBU3RyaW5nICYgYUNv b3JkcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29vcmRzKGNvbnN0IG5zQVN0cmluZyAm IGFDb29yZHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZihuc0FTdHJpbmcgJiBh SHJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZihjb25zdCBuc0FTdHJpbmcgJiBh SHJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb0hyZWYoUFJCb29sICphTm9IcmVm KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROb0hyZWYoUFJCb29sIGFOb0hyZWYpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hhcGUobnNBU3RyaW5nICYgYVNoYXBlKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRTaGFwZShjb25zdCBuc0FTdHJpbmcgJiBhU2hhcGUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFiSW5kZXgoUFJJbnQzMiAqYVRhYkluZGV4KSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUYWJJbmRleChQUkludDMyIGFUYWJJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFyZ2V0KGNvbnN0IG5zQVN0cmluZyAmIGFUYXJnZXQpID0g MDsKCn07CiMgMTk4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTU5TSFRNTEFyZWFFbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxBcmVhRWxlbWVudC5oIgpjbGFzcyBuc0lET01OU0hU TUxBcmVhRWxlbWVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTEx YiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3Rv Y29sKG5zQVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJv dG9jb2woY29uc3QgbnNBU3RyaW5nICYgYVByb3RvY29sKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEhvc3QobnNBU3RyaW5nICYgYUhvc3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEhvc3QoY29uc3QgbnNBU3RyaW5nICYgYUhvc3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SG9zdG5hbWUobnNBU3RyaW5nICYgYUhvc3RuYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRIb3N0bmFtZShjb25zdCBuc0FTdHJpbmcgJiBhSG9zdG5hbWUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGF0aG5hbWUobnNBU3RyaW5nICYgYVBhdGhuYW1lKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRQYXRobmFtZShjb25zdCBuc0FTdHJpbmcgJiBhUGF0aG5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VhcmNoKG5zQVN0cmluZyAmIGFTZWFyY2gpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlYXJjaChjb25zdCBuc0FTdHJpbmcgJiBhU2VhcmNo KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBvcnQobnNBU3RyaW5nICYgYVBvcnQpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBvcnQoY29uc3QgbnNBU3RyaW5nICYgYVBvcnQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGFzaChuc0FTdHJpbmcgJiBhSGFzaCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SGFzaChjb25zdCBuc0FTdHJpbmcgJiBhSGFzaCkgPSAwOwoK fTsKIyAxOTkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NSFRNTEJSRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NSFRNTEJSRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MQlJFbGVtZW50IDog cHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGE1LCAweDE1YjMs IDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMy IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xlYXIobnNBU3RyaW5n ICYgYUNsZWFyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGVhcihjb25zdCBuc0FTdHJp bmcgJiBhQ2xlYXIpID0gMDsKCn07CiMgMjAwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxCYXNlRWxlbWVudC5oIiAxCiMgMzQg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEJhc2VFbGVtZW50LmgiCmNsYXNz IG5zSURPTUhUTUxCYXNlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJs aWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7MHhhNmNmOTA4YiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4 MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEhyZWYobnNBU3RyaW5nICYgYUhyZWYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEhyZWYoY29uc3QgbnNBU3RyaW5nICYgYUhyZWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0VGFyZ2V0KG5zQVN0cmluZyAmIGFUYXJnZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFRhcmdldChjb25zdCBuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7Cgp9OwojIDIwMSAibnNE T01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01I VE1MQmFzZUZvbnRFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01IVE1MQmFzZUZvbnRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxCYXNlRm9udEVsZW1l bnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTYsIDB4 MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQs IDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xvcihuc0FT dHJpbmcgJiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbG9yKGNvbnN0IG5z QVN0cmluZyAmIGFDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGYWNlKG5zQVN0 cmluZyAmIGFGYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGYWNlKGNvbnN0IG5zQVN0 cmluZyAmIGFGYWNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUoUFJJbnQzMiAq YVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoUFJJbnQzMiBhU2l6ZSkgPSAw OwoKfTsKIyAyMDIgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NSFRNTEJvZHlFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MQm9keUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEJvZHlF bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDhl LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QUxpbmso bnNBU3RyaW5nICYgYUFMaW5rKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBTGluayhjb25z dCBuc0FTdHJpbmcgJiBhQUxpbmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFja2dy b3VuZChuc0FTdHJpbmcgJiBhQmFja2dyb3VuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QmFja2dyb3VuZChjb25zdCBuc0FTdHJpbmcgJiBhQmFja2dyb3VuZCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRCZ0NvbG9yKG5zQVN0cmluZyAmIGFCZ0NvbG9yKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRCZ0NvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFCZ0NvbG9yKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmsobnNBU3RyaW5nICYgYUxpbmspID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldExpbmsoY29uc3QgbnNBU3RyaW5nICYgYUxpbmspID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0VGV4dChuc0FTdHJpbmcgJiBhVGV4dCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0VGV4dChjb25zdCBuc0FTdHJpbmcgJiBhVGV4dCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRWTGluayhuc0FTdHJpbmcgJiBhVkxpbmspID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldFZMaW5rKGNvbnN0IG5zQVN0cmluZyAmIGFWTGluaykgPSAwOwoKfTsKIyAyMDMg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTUhUTUxCdXR0b25FbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxCdXR0b25FbGVtZW50 IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDk1LCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lET01I VE1MRm9ybUVsZW1lbnQgKiAqYUZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNj ZXNzS2V5KG5zQVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEFjY2Vzc0tleShjb25zdCBuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0VGFiSW5kZXgoUFJJbnQzMiAqYVRhYkluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRUYWJJbmRleChQUkludDMyIGFUYWJJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFZhbHVlKG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmFs dWUoY29uc3QgbnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7Cgp9OwojIDIwNCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxCdXR0 b25FbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hU TUxCdXR0b25FbGVtZW50LmgiCmNsYXNzIG5zSURPTU5TSFRNTEJ1dHRvbkVsZW1lbnQgOiBwdWJs aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NmZkMzQ0ZDAsIDB4N2U1ZiwgMHgxMWQyLCB7 IDB4YmQsIDB4OTEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZTMsIDB4ZjQgfX07IHJldHVy biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCbHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgRm9jdXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGljayh2b2lk KSA9IDA7Cgp9OwojIDIwNSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRExpc3RFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRExpc3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhU TUxETGlzdEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwOWIsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb21wYWN0KFBSQm9vbCAqYUNvbXBhY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENv bXBhY3QoUFJCb29sIGFDb21wYWN0KSA9IDA7Cgp9OwojIDIwNiAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRGlyZWN0b3J5RWxl bWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTERpcmVj dG9yeUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgOiBwdWJsaWMg bnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOWMsIDB4MTViMywgMHgxMWQy LCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wYWN0KFBSQm9vbCAqYUNvbXBh Y3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBhY3QoUFJCb29sIGFDb21wYWN0KSA9 IDA7Cgp9OwojIDIwNyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MRGl2RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NSFRNTERpdkVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTERpdkVs ZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTAs IDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4 ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihu c0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0 IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKfTsKIyAyMDggIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEVtYmVkRWxlbWVudC5o IiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEVtYmVkRWxlbWVu dC5oIgpjbGFzcyBuc0lET01IVE1MRW1iZWRFbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVt ZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweDEyM2Y5MGFiLCAweDE1YjMsIDB4MTFkMiwgeyAweDQ1LCAweDZl LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxpZ24obnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihjb25zdCBuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVpZ2h0KG5zQVN0cmluZyAmIGFIZWlnaHQpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEhlaWdodChjb25zdCBuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U3JjKG5zQVN0cmluZyAmIGFTcmMpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNyYyhjb25zdCBuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFR5cGUoY29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKCn07CiMgMjA5ICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxGaWVsZFNldEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUhUTUxGaWVsZFNldEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEZpZWxkU2V0RWxlbWVu dCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5NywgMHgx NWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwg MHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9N SFRNTEZvcm1FbGVtZW50ICogKmFGb3JtKSA9IDA7Cgp9OwojIDIxMCAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9udEVsZW1l bnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxGb250RWxl bWVudC5oIgpjbGFzcyBuc0lET01IVE1MRm9udEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVs ZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTcsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xvcihuc0FTdHJpbmcgJiBhQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldENvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFDb2xvcikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGYWNlKG5zQVN0cmluZyAmIGFGYWNlKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRGYWNlKGNvbnN0IG5zQVN0cmluZyAmIGFGYWNlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNBU3RyaW5nICYgYVNpemUpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNpemUoY29uc3QgbnNBU3RyaW5nICYgYVNpemUpID0gMDsKCn07CiMgMjEx ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTU5TSFRNTEZvcm1FbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01OU0hUTUxGb3JtRWxlbWVudC5oIgpjbGFzcyBuc0lET01OU0hUTUxGb3JtRWxlbWVu dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjNiwgMHgxNWIzLCAw eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9 fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY29kaW5nKG5zQVN0cmlu ZyAmIGFFbmNvZGluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RW5jb2RpbmcoY29uc3Qg bnNBU3RyaW5nICYgYUVuY29kaW5nKSA9IDA7Cgp9OwojIDIxMiAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRnJhbWVFbGVtZW50 LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRnJhbWVFbGVt ZW50LmgiCmNsYXNzIG5zSURPTUhUTUxGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVs ZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYjksIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUJvcmRlcihuc0FTdHJpbmcgJiBhRnJhbWVCb3Jk ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZyYW1lQm9yZGVyKGNvbnN0IG5zQVN0cmlu ZyAmIGFGcmFtZUJvcmRlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb25nRGVzYyhu c0FTdHJpbmcgJiBhTG9uZ0Rlc2MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExvbmdEZXNj KGNvbnN0IG5zQVN0cmluZyAmIGFMb25nRGVzYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRNYXJnaW5IZWlnaHQobnNBU3RyaW5nICYgYU1hcmdpbkhlaWdodCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFyZ2luSGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFNYXJnaW5IZWlnaHQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luV2lkdGgobnNBU3RyaW5nICYgYU1h cmdpbldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXJnaW5XaWR0aChjb25zdCBu c0FTdHJpbmcgJiBhTWFyZ2luV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFt ZShuc0FTdHJpbmcgJiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmFtZShjb25z dCBuc0FTdHJpbmcgJiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb1Jlc2l6 ZShQUkJvb2wgKmFOb1Jlc2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9SZXNpemUo UFJCb29sIGFOb1Jlc2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxpbmco bnNBU3RyaW5nICYgYVNjcm9sbGluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2Nyb2xs aW5nKGNvbnN0IG5zQVN0cmluZyAmIGFTY3JvbGxpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U3JjKG5zQVN0cmluZyAmIGFTcmMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNy Yyhjb25zdCBuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENv bnRlbnREb2N1bWVudChuc0lET01Eb2N1bWVudCAqICphQ29udGVudERvY3VtZW50KSA9IDA7Cgp9 OwojIDIxMyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01IVE1MRnJhbWVTZXRFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MRnJhbWVTZXRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxG cmFtZVNldEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwYjgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb2xzKG5zQVN0cmluZyAmIGFDb2xzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xz KGNvbnN0IG5zQVN0cmluZyAmIGFDb2xzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJv d3MobnNBU3RyaW5nICYgYVJvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJvd3MoY29u c3QgbnNBU3RyaW5nICYgYVJvd3MpID0gMDsKCn07CiMgMjE0ICJuc0RPTUNsYXNzSW5mby5jcHAi IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEZyYW1lRWxlbWVu dC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MRnJhbWVF bGVtZW50LmgiCmNsYXNzIG5zSURPTU5TSFRNTEZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhkNjdiZDI2NywgMHhmOTg0LCAweDQ5OTMsIHsgMHhiMywgMHg3 OCwgMHg5NSwgMHg4NSwgMHgxYiwgMHg3MSwgMHhmMCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRXaW5kb3cobnNJRE9NV2luZG93ICogKmFDb250 ZW50V2luZG93KSA9IDA7Cgp9OwojIDIxNSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSFJFbGVtZW50LmgiIDEKIyAzNCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSFJFbGVtZW50LmgiCmNsYXNzIG5zSURP TUhUTUxIUkVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwYTgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFs aWduKGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXROb1NoYWRlKFBSQm9vbCAqYU5vU2hhZGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5v U2hhZGUoUFJCb29sIGFOb1NoYWRlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUo bnNBU3RyaW5nICYgYVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoY29uc3Qg bnNBU3RyaW5nICYgYVNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNB U3RyaW5nICYgYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChjb25zdCBu c0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKCn07CiMgMjE2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxIZWFkRWxlbWVudC5oIiAx CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEhlYWRFbGVtZW50Lmgi CmNsYXNzIG5zSURPTUhUTUxIZWFkRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHhhNmNmOTA4NywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgw MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFByb2ZpbGUobnNBU3RyaW5nICYgYVByb2ZpbGUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFByb2ZpbGUoY29uc3QgbnNBU3RyaW5nICYgYVByb2ZpbGUpID0gMDsK Cn07CiMgMjE3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxIZWFkaW5nRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NSFRNTEhlYWRpbmdFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxI ZWFkaW5nRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTBhMiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxp Z24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7Cgp9OwojIDIxOCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSHRtbEVs ZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxIdG1s RWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MSHRtbEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRN TEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODYsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMs IDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7 fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWZXJzaW9uKG5zQVN0cmluZyAmIGFWZXJzaW9uKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWZXJzaW9uKGNvbnN0IG5zQVN0cmluZyAmIGFWZXJz aW9uKSA9IDA7Cgp9OwojIDIxOSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKY2xhc3MgbnNJ RE9NSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4YTZjZjkwYmEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAs IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRGcmFtZUJvcmRlcihuc0FTdHJpbmcgJiBhRnJhbWVCb3JkZXIpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldEZyYW1lQm9yZGVyKGNvbnN0IG5zQVN0cmluZyAmIGFGcmFtZUJvcmRl cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQobnNBU3RyaW5nICYgYUhlaWdo dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFI ZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9uZ0Rlc2MobnNBU3RyaW5nICYg YUxvbmdEZXNjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMb25nRGVzYyhjb25zdCBuc0FT dHJpbmcgJiBhTG9uZ0Rlc2MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luSGVp Z2h0KG5zQVN0cmluZyAmIGFNYXJnaW5IZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dE1hcmdpbkhlaWdodChjb25zdCBuc0FTdHJpbmcgJiBhTWFyZ2luSGVpZ2h0KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE1hcmdpbldpZHRoKG5zQVN0cmluZyAmIGFNYXJnaW5XaWR0aCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFyZ2luV2lkdGgoY29uc3QgbnNBU3RyaW5nICYg YU1hcmdpbldpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Nyb2xsaW5nKG5zQVN0cmlu ZyAmIGFTY3JvbGxpbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcm9sbGluZyhjb25z dCBuc0FTdHJpbmcgJiBhU2Nyb2xsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNy Yyhuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcmMoY29uc3Qg bnNBU3RyaW5nICYgYVNyYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChuc0FT dHJpbmcgJiBhV2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZHRoKGNvbnN0IG5z QVN0cmluZyAmIGFXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50RG9j dW1lbnQobnNJRE9NRG9jdW1lbnQgKiAqYUNvbnRlbnREb2N1bWVudCkgPSAwOwoKfTsKIyAyMjAg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTEltYWdlRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NSFRNTEltYWdlRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MSW1hZ2VFbGVtZW50IDog cHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGFiLCAweDE1YjMs IDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMy IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FTdHJpbmcg JiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmFtZShjb25zdCBuc0FTdHJpbmcg JiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBh QWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAm IGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbHQobnNBU3RyaW5nICYgYUFs dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWx0KGNvbnN0IG5zQVN0cmluZyAmIGFBbHQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyKG5zQVN0cmluZyAmIGFCb3JkZXIp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlcihjb25zdCBuc0FTdHJpbmcgJiBhQm9y ZGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhlaWdodChQUkludDMyICphSGVpZ2h0 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIZWlnaHQoUFJJbnQzMiBhSGVpZ2h0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhzcGFjZShQUkludDMyICphSHNwYWNlKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRIc3BhY2UoUFJJbnQzMiBhSHNwYWNlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldElzTWFwKFBSQm9vbCAqYUlzTWFwKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRJc01hcChQUkJvb2wgYUlzTWFwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExvbmdEZXNjKG5zQVN0cmluZyAmIGFMb25nRGVzYykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0TG9uZ0Rlc2MoY29uc3QgbnNBU3RyaW5nICYgYUxvbmdEZXNjKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFNyYyhuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRTcmMoY29uc3QgbnNBU3RyaW5nICYgYVNyYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRVc2VNYXAobnNBU3RyaW5nICYgYVVzZU1hcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0VXNlTWFwKGNvbnN0IG5zQVN0cmluZyAmIGFVc2VNYXApID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VnNwYWNlKFBSSW50MzIgKmFWc3BhY2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFZzcGFjZShQUkludDMyIGFWc3BhY2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 V2lkdGgoUFJJbnQzMiAqYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChQ UkludDMyIGFXaWR0aCkgPSAwOwoKfTsKIyAyMjEgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MSW1hZ2VFbGVtZW50LmgiIDEK IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxJbWFnZUVsZW1lbnQu aCIKY2xhc3MgbnNJRE9NTlNIVE1MSW1hZ2VFbGVtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGE2Y2Y5MGM3LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAw LCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29tcGxldGUoUFJCb29sICphQ29tcGxldGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TmF0dXJhbEhlaWdodChQUkludDMyICphTmF0dXJhbEhlaWdodCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXR1cmFsV2lkdGgoUFJJbnQzMiAqYU5hdHVyYWxX aWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRYKFBSSW50MzIgKmFYKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFkoUFJJbnQzMiAqYVkpID0gMDsKCn07CiMgMjIyICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxJbnB1dEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUhUTUxJbnB1dEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTElucHV0RWxlbWVudCA6IHB1Ymxp YyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5MywgMHgxNWIzLCAweDEx ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRWYWx1ZShuc0FTdHJp bmcgJiBhRGVmYXVsdFZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0VmFs dWUoY29uc3QgbnNBU3RyaW5nICYgYURlZmF1bHRWYWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXREZWZhdWx0Q2hlY2tlZChQUkJvb2wgKmFEZWZhdWx0Q2hlY2tlZCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdENoZWNrZWQoUFJCb29sIGFEZWZhdWx0Q2hlY2tlZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtKG5zSURPTUhUTUxGb3JtRWxlbWVudCAq ICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY2NlcHQobnNBU3RyaW5nICYg YUFjY2VwdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWNjZXB0KGNvbnN0IG5zQVN0cmlu ZyAmIGFBY2NlcHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVN0 cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShj b25zdCBuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxp Z24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFsdChuc0FTdHJpbmcgJiBhQWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbHQoY29u c3QgbnNBU3RyaW5nICYgYUFsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGVja2Vk KFBSQm9vbCAqYUNoZWNrZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoZWNrZWQoUFJC b29sIGFDaGVja2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9v bCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wg YURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1heExlbmd0aChQUkludDMy ICphTWF4TGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXhMZW5ndGgoUFJJbnQz MiBhTWF4TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVhZE9ubHkoUFJCb29sICph UmVhZE9ubHkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlYWRPbmx5KFBSQm9vbCBhUmVh ZE9ubHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6ZShQUlVpbnQzMiAqYVNpemUp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoUFJVaW50MzIgYVNpemUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U3JjKG5zQVN0cmluZyAmIGFTcmMpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNyYyhjb25zdCBuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFRhYkluZGV4KFBSSW50MzIgKmFUYWJJbmRleCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0VGFiSW5kZXgoUFJJbnQzMiBhVGFiSW5kZXgpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VHlwZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRVc2VNYXAobnNBU3RyaW5nICYgYVVzZU1hcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VXNlTWFwKGNvbnN0IG5zQVN0cmluZyAmIGFVc2VNYXApID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvY3VzKHZvaWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0KHZvaWQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQ2xpY2sodm9pZCkgPSAwOwoKfTsKIyAyMjMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MSW5wdXRFbGVtZW50 LmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxJbnB1dEVs ZW1lbnQuaCIKY2xhc3MgbnNJQ29udHJvbGxlcnM7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NTlNIVE1MSW5wdXRFbGVtZW50LmgiCmNsYXNzIG5zSURPTU5TSFRNTElucHV0 RWxlbWVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5OTNkMmVmYywgMHhh NzY4LCAweDExZDMsIHsgMHhiYywgMHhjZCwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHg3Niwg MHhiZCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRyb2xsZXJz KG5zSUNvbnRyb2xsZXJzICogKmFDb250cm9sbGVycykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUZXh0TGVuZ3RoKFBSSW50MzIgKmFUZXh0TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFNlbGVjdGlvblN0YXJ0KFBSSW50MzIgKmFTZWxlY3Rpb25TdGFydCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0aW9uU3RhcnQoUFJJbnQzMiBhU2VsZWN0aW9uU3Rh cnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uRW5kKFBSSW50MzIgKmFT ZWxlY3Rpb25FbmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGlvbkVuZChQUklu dDMyIGFTZWxlY3Rpb25FbmQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0aW9u UmFuZ2UoUFJJbnQzMiBzZWxlY3Rpb25TdGFydCwgUFJJbnQzMiBzZWxlY3Rpb25FbmQpID0gMDsK Cn07CiMgMjI0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxJc0luZGV4RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NSFRNTElzSW5kZXhFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxJ c0luZGV4RWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTA4YywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50ICogKmFGb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb21wdChuc0FTdHJpbmcgJiBhUHJvbXB0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRQcm9tcHQoY29uc3QgbnNBU3RyaW5nICYgYVByb21wdCkgPSAwOwoKfTsKIyAyMjUg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTExJRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTExJRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MTElFbGVtZW50IDogcHVibGljIG5z SURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDllLCAweDE1YjMsIDB4MTFkMiwg eyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1 cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShQUkludDMyICphVmFsdWUpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZhbHVlKFBSSW50MzIgYVZhbHVlKSA9IDA7Cgp9OwojIDIy NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01IVE1MTGFiZWxFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01IVE1MTGFiZWxFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxMYWJlbEVsZW1lbnQg OiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOTYsIDB4MTVi MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4 MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtKG5zSURPTUhU TUxGb3JtRWxlbWVudCAqICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY2Nl c3NLZXkobnNBU3RyaW5nICYgYUFjY2Vzc0tleSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QWNjZXNzS2V5KGNvbnN0IG5zQVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0SHRtbEZvcihuc0FTdHJpbmcgJiBhSHRtbEZvcikgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0SHRtbEZvcihjb25zdCBuc0FTdHJpbmcgJiBhSHRtbEZvcikgPSAwOwoKfTsK IyAyMjcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NSFRNTExlZ2VuZEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxMZWdlbmRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxMZWdlbmRF bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDk4 LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShu c0lET01IVE1MRm9ybUVsZW1lbnQgKiAqYUZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0QWNjZXNzS2V5KG5zQVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7Cgp9Owoj IDIyOCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01IVE1MTGlua0VsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxMaW5rRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MTGlua0VsZW1lbnQg OiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODgsIDB4MTVi MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4 MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJv b2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29s IGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQVN0cmlu ZyAmIGFDaGFyc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaGFyc2V0KGNvbnN0IG5z QVN0cmluZyAmIGFDaGFyc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhyZWYobnNB U3RyaW5nICYgYUhyZWYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhyZWYoY29uc3QgbnNB U3RyaW5nICYgYUhyZWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZmxhbmcobnNB U3RyaW5nICYgYUhyZWZsYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIcmVmbGFuZyhj b25zdCBuc0FTdHJpbmcgJiBhSHJlZmxhbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TWVkaWEobnNBU3RyaW5nICYgYU1lZGlhKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNZWRp YShjb25zdCBuc0FTdHJpbmcgJiBhTWVkaWEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UmVsKG5zQVN0cmluZyAmIGFSZWwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlbChjb25z dCBuc0FTdHJpbmcgJiBhUmVsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldihuc0FT dHJpbmcgJiBhUmV2KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZXYoY29uc3QgbnNBU3Ry aW5nICYgYVJldikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNBU3RyaW5n ICYgYVRhcmdldCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFyZ2V0KGNvbnN0IG5zQVN0 cmluZyAmIGFUYXJnZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FTdHJp bmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FTdHJp bmcgJiBhVHlwZSkgPSAwOwoKfTsKIyAyMjkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTE1hcEVsZW1lbnQuaCIgMQojIDM0ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxNYXBFbGVtZW50LmgiCmNsYXNzIG5z SURPTUhUTUxNYXBFbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsweGE2Y2Y5MGFmLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAw eDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QXJlYXMobnNJRE9NSFRNTENvbGxlY3Rpb24gKiAqYUFyZWFzKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCn07CiMgMjMwICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUhUTUxNZW51RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTE1lbnVFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxNZW51RWxlbWVudCA6IHB1Ymxp YyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5ZCwgMHgxNWIzLCAweDEx ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbXBhY3QoUFJCb29sICphQ29t cGFjdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcGFjdChQUkJvb2wgYUNvbXBhY3Qp ID0gMDsKCn07CiMgMjMxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUhUTUxNZXRhRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTE1ldGFFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxN ZXRhRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNm OTA4YSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENv bnRlbnQobnNBU3RyaW5nICYgYUNvbnRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENv bnRlbnQoY29uc3QgbnNBU3RyaW5nICYgYUNvbnRlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0SHR0cEVxdWl2KG5zQVN0cmluZyAmIGFIdHRwRXF1aXYpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldEh0dHBFcXVpdihjb25zdCBuc0FTdHJpbmcgJiBhSHR0cEVxdWl2KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0U2NoZW1lKG5zQVN0cmluZyAmIGFTY2hlbWUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFNjaGVtZShjb25zdCBuc0FTdHJpbmcgJiBhU2NoZW1lKSA9IDA7Cgp9 OwojIDIzMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01IVE1MTW9kRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NSFRNTE1vZEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTE1vZEVsZW1lbnQg OiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTksIDB4MTVi MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4 MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaXRlKG5zQVN0cmlu ZyAmIGFDaXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaXRlKGNvbnN0IG5zQVN0cmlu ZyAmIGFDaXRlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGVUaW1lKG5zQVN0cmlu ZyAmIGFEYXRlVGltZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0ZVRpbWUoY29uc3Qg bnNBU3RyaW5nICYgYURhdGVUaW1lKSA9IDA7Cgp9OwojIDIzMyAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT0xpc3RFbGVtZW50 LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT0xpc3RFbGVt ZW50LmgiCmNsYXNzIG5zSURPTUhUTUxPTGlzdEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVs ZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOWEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wYWN0KFBSQm9vbCAqYUNvbXBhY3QpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBhY3QoUFJCb29sIGFDb21wYWN0KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFN0YXJ0KFBSSW50MzIgKmFTdGFydCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0U3RhcnQoUFJJbnQzMiBhU3RhcnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VHlw ZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKfTsKIyAyMzQgIm5zRE9NQ2xhc3NJbmZv LmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTE9iamVjdEVs ZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxPYmpl Y3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIG5zSURP TUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGFjLCAweDE1YjMsIDB4MTFkMiwgeyAw eDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQg KiAqYUZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29kZShuc0FTdHJpbmcgJiBh Q29kZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29kZShjb25zdCBuc0FTdHJpbmcgJiBh Q29kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxp Z24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFB bGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmNoaXZlKG5zQVN0cmluZyAmIGFB cmNoaXZlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBcmNoaXZlKGNvbnN0IG5zQVN0cmlu ZyAmIGFBcmNoaXZlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvcmRlcihuc0FTdHJp bmcgJiBhQm9yZGVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXIoY29uc3QgbnNB U3RyaW5nICYgYUJvcmRlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2RlQmFzZShu c0FTdHJpbmcgJiBhQ29kZUJhc2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvZGVCYXNl KGNvbnN0IG5zQVN0cmluZyAmIGFDb2RlQmFzZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb2RlVHlwZShuc0FTdHJpbmcgJiBhQ29kZVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldENvZGVUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFDb2RlVHlwZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXREYXRhKG5zQVN0cmluZyAmIGFEYXRhKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXREYXRhKGNvbnN0IG5zQVN0cmluZyAmIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERlY2xhcmUoUFJCb29sICphRGVjbGFyZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0RGVjbGFyZShQUkJvb2wgYURlY2xhcmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SGVpZ2h0KG5zQVN0cmluZyAmIGFIZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEhlaWdodChjb25zdCBuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEhzcGFjZShQUkludDMyICphSHNwYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRIc3BhY2UoUFJJbnQzMiBhSHNwYWNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5h bWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29u c3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhbmRi eShuc0FTdHJpbmcgJiBhU3RhbmRieSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3RhbmRi eShjb25zdCBuc0FTdHJpbmcgJiBhU3RhbmRieSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUYWJJbmRleChQUkludDMyICphVGFiSW5kZXgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5cGUo Y29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VXNl TWFwKG5zQVN0cmluZyAmIGFVc2VNYXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVzZU1h cChjb25zdCBuc0FTdHJpbmcgJiBhVXNlTWFwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFZzcGFjZShQUkludDMyICphVnNwYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWc3Bh Y2UoUFJJbnQzMiBhVnNwYWNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKG5z QVN0cmluZyAmIGFXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkdGgoY29uc3Qg bnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRE b2N1bWVudChuc0lET01Eb2N1bWVudCAqICphQ29udGVudERvY3VtZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRDb250ZW50RG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKiBhQ29udGVudERv Y3VtZW50KSA9IDA7Cgp9OwojIDIzNSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT3B0R3JvdXBFbGVtZW50LmgiIDEKIyAzNCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT3B0R3JvdXBFbGVtZW50LmgiCmNs YXNzIG5zSURPTUhUTUxPcHRHcm91cEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YTZjZjkwOTEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4 MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRMYWJlbChuc0FTdHJpbmcgJiBhTGFiZWwpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldExhYmVsKGNvbnN0IG5zQVN0cmluZyAmIGFMYWJlbCkgPSAwOwoKfTsKIyAyMzYg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxQYXJhZ3Jh cGhFbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5 MGExLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhh LCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxp Z24obnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihj b25zdCBuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKCn07CiMgMjM3ICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxQYXJhbUVsZW1l bnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxQYXJhbUVs ZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFBhcmFtRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1M RWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBhZCwgMHgxNWIzLCAweDExZDIsIHsgMHg5Mywg MHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFZhbHVlKGNvbnN0IG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZVR5cGUobnNBU3RyaW5nICYgYVZhbHVlVHlwZSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0VmFsdWVUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFWYWx1ZVR5 cGUpID0gMDsKCn07CiMgMjM4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxQcmVFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MUHJlRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1M UHJlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNm OTBhNCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdp ZHRoKFBSSW50MzIgKmFXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkdGgoUFJJ bnQzMiBhV2lkdGgpID0gMDsKCn07CiMgMjM5ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxRdW90ZUVsZW1lbnQuaCIgMQojIDM0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxRdW90ZUVsZW1lbnQuaCIKY2xh c3MgbnNJRE9NSFRNTFF1b3RlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHhhNmNmOTBhMywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwg MHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENpdGUobnNBU3RyaW5nICYgYUNpdGUpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldENpdGUoY29uc3QgbnNBU3RyaW5nICYgYUNpdGUpID0gMDsKCn07CiMgMjQwICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxTY3JpcHRFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01IVE1MU2NyaXB0RWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MU2NyaXB0RWxlbWVudCA6IHB1 YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiMSwgMHgxNWIzLCAw eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9 fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHQobnNBU3RyaW5nICYg YVRleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHQoY29uc3QgbnNBU3RyaW5nICYg YVRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHRtbEZvcihuc0FTdHJpbmcgJiBh SHRtbEZvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHRtbEZvcihjb25zdCBuc0FTdHJp bmcgJiBhSHRtbEZvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudChuc0FTdHJp bmcgJiBhRXZlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEV2ZW50KGNvbnN0IG5zQVN0 cmluZyAmIGFFdmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQVN0 cmluZyAmIGFDaGFyc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaGFyc2V0KGNvbnN0 IG5zQVN0cmluZyAmIGFDaGFyc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmVy KFBSQm9vbCAqYURlZmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZlcihQUkJvb2wg YURlZmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNyYyhuc0FTdHJpbmcgJiBhU3Jj KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcmMoY29uc3QgbnNBU3RyaW5nICYgYVNyYykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7 Cgp9OwojIDI0MSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01OU0hUTUxTZWxlY3RFbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxTZWxlY3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTU5T SFRNTFNlbGVjdEVsZW1lbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZj ZjkxMDUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4 OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVt KFBSVWludDMyIGluZGV4LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBOYW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJRE9NTm9kZSAqKl9y ZXR2YWwpID0gMDsKCn07CiMgMjQyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxTdHlsZUVsZW1lbnQuaCIgMQojIDM0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxTdHlsZUVsZW1lbnQuaCIKY2xhc3MgbnNJ RE9NSFRNTFN0eWxlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHhhNmNmOTA4ZCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE1lZGlhKG5zQVN0cmluZyAmIGFNZWRpYSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 TWVkaWEoY29uc3QgbnNBU3RyaW5nICYgYU1lZGlhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5 cGUoY29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCn07CiMgMjQzICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZUNh cHRpb25FbGVtLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1M VGFibGVDYXB0aW9uRWxlbS5oIgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCA6 IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiMywgMHgxNWIz LCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgz MiB9fTsgcmV0dXJuIGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N SFRNTFRhYmxlQ2FwdGlvbkVsZW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0 cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNB U3RyaW5nICYgYUFsaWduKSA9IDA7Cgp9OwojIDI0NCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MVGFibGVDZWxsRWxlbWVudC5o IiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTFRhYmxlQ2VsbEVs ZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9N SFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz dGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYjcsIDB4MTViMywgMHgxMWQyLCB7IDB4 OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBp aWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZWxsSW5kZXgoUFJJbnQzMiAqYUNlbGxJbmRl eCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBYmJyKG5zQVN0cmluZyAmIGFBYmJyKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBYmJyKGNvbnN0IG5zQVN0cmluZyAmIGFBYmJyKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF4aXMobnNBU3RyaW5nICYgYUF4aXMpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEF4aXMoY29uc3QgbnNBU3RyaW5nICYgYUF4aXMpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmdDb2xvcihuc0FTdHJpbmcgJiBhQmdDb2xvcikgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmdDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQmdDb2xv cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaChuc0FTdHJpbmcgJiBhQ2gpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoKGNvbnN0IG5zQVN0cmluZyAmIGFDaCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDaE9mZihuc0FTdHJpbmcgJiBhQ2hPZmYpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldENoT2ZmKGNvbnN0IG5zQVN0cmluZyAmIGFDaE9mZikgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xTcGFuKFBSSW50MzIgKmFDb2xTcGFuKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRDb2xTcGFuKFBSSW50MzIgYUNvbFNwYW4pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SGVhZGVycyhuc0FTdHJpbmcgJiBhSGVhZGVycykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0SGVhZGVycyhjb25zdCBuc0FTdHJpbmcgJiBhSGVhZGVycykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQobnNBU3RyaW5nICYgYUhlaWdodCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFIZWlnaHQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9XcmFwKFBSQm9vbCAqYU5vV3JhcCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9XcmFwKFBSQm9vbCBhTm9XcmFwKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFJvd1NwYW4oUFJJbnQzMiAqYVJvd1NwYW4pID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFJvd1NwYW4oUFJJbnQzMiBhUm93U3BhbikgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTY29wZShuc0FTdHJpbmcgJiBhU2NvcGUpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFNjb3BlKGNvbnN0IG5zQVN0cmluZyAmIGFTY29wZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRWQWxpZ24obnNBU3RyaW5nICYgYVZBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFWQWxpZ24pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKCn07CiMgMjQ1 ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ29s RWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBi NCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWdu KG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29u c3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoKG5z QVN0cmluZyAmIGFDaCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2goY29uc3QgbnNBU3Ry aW5nICYgYUNoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoT2ZmKG5zQVN0cmluZyAm IGFDaE9mZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2hPZmYoY29uc3QgbnNBU3RyaW5n ICYgYUNoT2ZmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNwYW4oUFJJbnQzMiAqYVNw YW4pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNwYW4oUFJJbnQzMiBhU3BhbikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWQWxpZ24obnNBU3RyaW5nICYgYVZBbGlnbikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFWQWxpZ24pID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgpID0g MDsKCn07CiMgMjQ2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZUVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFRh YmxlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNm OTBiMiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENh cHRpb24obnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgKiAqYUNhcHRpb24pID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldENhcHRpb24obnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQg KiBhQ2FwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUSGVhZChuc0lET01IVE1M VGFibGVTZWN0aW9uRWxlbWVudCAqICphVEhlYWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFRIZWFkKG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICogYVRIZWFkKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFRGb290KG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICog KmFURm9vdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VEZvb3QobnNJRE9NSFRNTFRhYmxl U2VjdGlvbkVsZW1lbnQgKiBhVEZvb3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93 cyhuc0lET01IVE1MQ29sbGVjdGlvbiAqICphUm93cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUQm9kaWVzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFUQm9kaWVzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEJnQ29sb3IobnNBU3RyaW5nICYgYUJnQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJnQ29sb3IoY29uc3QgbnNBU3RyaW5nICYgYUJnQ29sb3IpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyKG5zQVN0cmluZyAmIGFCb3JkZXIpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlcihjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVy KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENlbGxQYWRkaW5nKG5zQVN0cmluZyAmIGFD ZWxsUGFkZGluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2VsbFBhZGRpbmcoY29uc3Qg bnNBU3RyaW5nICYgYUNlbGxQYWRkaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENl bGxTcGFjaW5nKG5zQVN0cmluZyAmIGFDZWxsU3BhY2luZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Q2VsbFNwYWNpbmcoY29uc3QgbnNBU3RyaW5nICYgYUNlbGxTcGFjaW5nKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lKG5zQVN0cmluZyAmIGFGcmFtZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RnJhbWUoY29uc3QgbnNBU3RyaW5nICYgYUZyYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVzKG5zQVN0cmluZyAmIGFSdWxlcykgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0UnVsZXMoY29uc3QgbnNBU3RyaW5nICYgYVJ1bGVzKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN1bW1hcnkobnNBU3RyaW5nICYgYVN1bW1hcnkpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN1bW1hcnkoY29uc3QgbnNBU3RyaW5nICYgYVN1bW1hcnkp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVEhlYWQobnNJRE9NSFRNTEVsZW1lbnQg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVRIZWFkKHZvaWQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVEZvb3QobnNJRE9NSFRNTEVsZW1lbnQgKipf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVRGb290KHZvaWQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQ2FwdGlvbihuc0lET01IVE1MRWxlbWVudCAqKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlQ2FwdGlvbih2b2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFJvdyhQUkludDMyIGluZGV4LCBuc0lET01IVE1M RWxlbWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlUm93KFBS SW50MzIgaW5kZXgpID0gMDsKCn07CiMgMjQ3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaCIgMQoj IDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZVJvd0VsZW1lbnQu aCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlUm93RWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxl bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiNiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgy ZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvd0luZGV4KFBSSW50MzIgKmFSb3dJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWN0aW9uUm93SW5kZXgoUFJJbnQzMiAqYVNlY3Rpb25S b3dJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZWxscyhuc0lET01IVE1MQ29s bGVjdGlvbiAqICphQ2VsbHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxpZ24obnNB U3RyaW5nICYgYUFsaWduKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihjb25zdCBu c0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmdDb2xvcihu c0FTdHJpbmcgJiBhQmdDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmdDb2xvcihj b25zdCBuc0FTdHJpbmcgJiBhQmdDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD aChuc0FTdHJpbmcgJiBhQ2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoKGNvbnN0IG5z QVN0cmluZyAmIGFDaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaE9mZihuc0FTdHJp bmcgJiBhQ2hPZmYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoT2ZmKGNvbnN0IG5zQVN0 cmluZyAmIGFDaE9mZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWQWxpZ24obnNBU3Ry aW5nICYgYVZBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5z QVN0cmluZyAmIGFWQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q2VsbChQ UkludDMyIGluZGV4LCBuc0lET01IVE1MRWxlbWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRGVsZXRlQ2VsbChQUkludDMyIGluZGV4KSA9IDA7Cgp9OwojIDI0OCAibnNE T01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01I VE1MVGFibGVTZWN0aW9uRWxlbS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW0uaCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlU2VjdGlv bkVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw YjUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB bGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWdu KGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD aChuc0FTdHJpbmcgJiBhQ2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoKGNvbnN0IG5z QVN0cmluZyAmIGFDaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaE9mZihuc0FTdHJp bmcgJiBhQ2hPZmYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoT2ZmKGNvbnN0IG5zQVN0 cmluZyAmIGFDaE9mZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWQWxpZ24obnNBU3Ry aW5nICYgYVZBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5z QVN0cmluZyAmIGFWQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93cyhuc0lE T01IVE1MQ29sbGVjdGlvbiAqICphUm93cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNl cnRSb3coUFJJbnQzMiBpbmRleCwgbnNJRE9NSFRNTEVsZW1lbnQgKipfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVJvdyhQUkludDMyIGluZGV4KSA9IDA7Cgp9OwojIDI0 OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01IVE1MVGV4dEFyZWFFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01IVE1MVGV4dEFyZWFFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxUZXh0QXJl YUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw OTQsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh dWx0VmFsdWUobnNBU3RyaW5nICYgYURlZmF1bHRWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0RGVmYXVsdFZhbHVlKGNvbnN0IG5zQVN0cmluZyAmIGFEZWZhdWx0VmFsdWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQgKiAqYUZv cm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVN0cmluZyAmIGFB Y2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FT dHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbHMoUFJJ bnQzMiAqYUNvbHMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbHMoUFJJbnQzMiBhQ29s cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxl ZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlYWRPbmx5KFBSQm9vbCAqYVJlYWRPbmx5KSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWFkT25seShQUkJvb2wgYVJlYWRPbmx5KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvd3MoUFJJbnQzMiAqYVJvd3MpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFJvd3MoUFJJbnQzMiBhUm93cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUYWJJbmRleChQUkludDMyICphVGFiSW5kZXgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWYWx1 ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1 cih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvY3VzKHZvaWQpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2VsZWN0KHZvaWQpID0gMDsKCn07CiMgMjUwICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTFRleHRB cmVhRWxlbWVudC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNI VE1MVGV4dEFyZWFFbGVtZW50LmgiCmNsYXNzIG5zSUNvbnRyb2xsZXJzOwojIDI3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTFRleHRBcmVhRWxlbWVudC5oIgpjbGFzcyBu c0lET01OU0hUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4Y2EwNjZiNDQsIDB4OWRkZiwgMHgxMWQzLCB7IDB4YmMsIDB4Y2MsIDB4MDAsIDB4NjAs IDB4YjAsIDB4ZmMsIDB4NzYsIDB4YmQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDb250cm9sbGVycyhuc0lDb250cm9sbGVycyAqICphQ29udHJvbGxlcnMpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dExlbmd0aChQUkludDMyICphVGV4dExlbmd0aCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb25TdGFydChQUkludDMyICphU2Vs ZWN0aW9uU3RhcnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGlvblN0YXJ0KFBS SW50MzIgYVNlbGVjdGlvblN0YXJ0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVj dGlvbkVuZChQUkludDMyICphU2VsZWN0aW9uRW5kKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRTZWxlY3Rpb25FbmQoUFJJbnQzMiBhU2VsZWN0aW9uRW5kKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNldFNlbGVjdGlvblJhbmdlKFBSSW50MzIgc2VsZWN0aW9uU3RhcnQsIFBSSW50MzIg c2VsZWN0aW9uRW5kKSA9IDA7Cgp9OwojIDI1MSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MVGl0bGVFbGVtZW50LmgiIDEKIyAz NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MVGl0bGVFbGVtZW50LmgiCmNs YXNzIG5zSURPTUhUTUxUaXRsZUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4YTZjZjkwODksIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAs IDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRUZXh0KG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7Cgp9OwojIDI1MiAibnNE T01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01I VE1MVUxpc3RFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01IVE1MVUxpc3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxVTGlzdEVsZW1lbnQgOiBwdWJs aWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOTksIDB4MTViMywgMHgx MWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wYWN0KFBSQm9vbCAqYUNv bXBhY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBhY3QoUFJCb29sIGFDb21wYWN0 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5cGUoY29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0g MDsKCn07CiMgMjUzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTU5TVUlFdmVudC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NTlNVSUV2ZW50LmgiCmNsYXNzIG5zSURPTU5TVUlFdmVudCA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjNCwgMHgxNWIzLCAweDExZDIsIHsgMHg5 MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlp ZDt9CgogIGVudW0geyBTQ1JPTExfUEFHRV9VUCA9IC0zMjc2OCB9OwoKICBlbnVtIHsgU0NST0xM X1BBR0VfRE9XTiA9IDMyNzY4IH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZlbnREZWZh dWx0KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXllclgo UFJJbnQzMiAqYUxheWVyWCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXllclkoUFJJ bnQzMiAqYUxheWVyWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdlWChQUkludDMy ICphUGFnZVgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFnZVkoUFJJbnQzMiAqYVBh Z2VZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdoaWNoKFBSVWludDMyICphV2hpY2gp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VQYXJlbnQobnNJRE9NTm9kZSAqICph UmFuZ2VQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VPZmZzZXQoUFJJ bnQzMiAqYVJhbmdlT2Zmc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbmNlbEJ1 YmJsZShQUkJvb2wgKmFDYW5jZWxCdWJibGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENh bmNlbEJ1YmJsZShQUkJvb2wgYUNhbmNlbEJ1YmJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRJc0NoYXIoUFJCb29sICphSXNDaGFyKSA9IDA7Cgp9OwojIDI1NCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1MyUHJvcGVy dGllcy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTMlByb3Bl cnRpZXMuaCIKY2xhc3MgbnNJRE9NQ1NTMlByb3BlcnRpZXMgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YTZjZjkwZDEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4 MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRBemltdXRoKG5zQVN0cmluZyAmIGFBemltdXRoKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRBemltdXRoKGNvbnN0IG5zQVN0cmluZyAmIGFBemltdXRoKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhY2tncm91bmQobnNBU3RyaW5nICYgYUJhY2tncm91 bmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJhY2tncm91bmQoY29uc3QgbnNBU3RyaW5n ICYgYUJhY2tncm91bmQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFja2dyb3VuZEF0 dGFjaG1lbnQobnNBU3RyaW5nICYgYUJhY2tncm91bmRBdHRhY2htZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5kQXR0YWNobWVudChjb25zdCBuc0FTdHJpbmcgJiBhQmFj a2dyb3VuZEF0dGFjaG1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFja2dyb3Vu ZENvbG9yKG5zQVN0cmluZyAmIGFCYWNrZ3JvdW5kQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldEJhY2tncm91bmRDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQmFja2dyb3VuZENvbG9y KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhY2tncm91bmRJbWFnZShuc0FTdHJpbmcg JiBhQmFja2dyb3VuZEltYWdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5k SW1hZ2UoY29uc3QgbnNBU3RyaW5nICYgYUJhY2tncm91bmRJbWFnZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRCYWNrZ3JvdW5kUG9zaXRpb24obnNBU3RyaW5nICYgYUJhY2tncm91bmRQ b3NpdGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZFBvc2l0aW9uKGNv bnN0IG5zQVN0cmluZyAmIGFCYWNrZ3JvdW5kUG9zaXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0QmFja2dyb3VuZFJlcGVhdChuc0FTdHJpbmcgJiBhQmFja2dyb3VuZFJlcGVhdCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZFJlcGVhdChjb25zdCBuc0FTdHJp bmcgJiBhQmFja2dyb3VuZFJlcGVhdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3Jk ZXIobnNBU3RyaW5nICYgYUJvcmRlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVy KGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Qm9yZGVyQ29sbGFwc2UobnNBU3RyaW5nICYgYUJvcmRlckNvbGxhcHNlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRCb3JkZXJDb2xsYXBzZShjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyQ29s bGFwc2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyQ29sb3IobnNBU3RyaW5n ICYgYUJvcmRlckNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJDb2xvcihj b25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyQ29sb3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Qm9yZGVyU3BhY2luZyhuc0FTdHJpbmcgJiBhQm9yZGVyU3BhY2luZykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Qm9yZGVyU3BhY2luZyhjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyU3Bh Y2luZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJTdHlsZShuc0FTdHJpbmcg JiBhQm9yZGVyU3R5bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlclN0eWxlKGNv bnN0IG5zQVN0cmluZyAmIGFCb3JkZXJTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRCb3JkZXJUb3AobnNBU3RyaW5nICYgYUJvcmRlclRvcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Qm9yZGVyVG9wKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJUb3ApID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUmlnaHQobnNBU3RyaW5nICYgYUJvcmRlclJpZ2h0KSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJSaWdodChjb25zdCBuc0FTdHJpbmcgJiBh Qm9yZGVyUmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyQm90dG9tKG5z QVN0cmluZyAmIGFCb3JkZXJCb3R0b20pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRl ckJvdHRvbShjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEJvcmRlckxlZnQobnNBU3RyaW5nICYgYUJvcmRlckxlZnQpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlckxlZnQoY29uc3QgbnNBU3RyaW5nICYgYUJvcmRlckxl ZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVG9wQ29sb3IobnNBU3RyaW5n ICYgYUJvcmRlclRvcENvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJUb3BD b2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyVG9wQ29sb3IpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0Qm9yZGVyUmlnaHRDb2xvcihuc0FTdHJpbmcgJiBhQm9yZGVyUmlnaHRDb2xv cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVyUmlnaHRDb2xvcihjb25zdCBuc0FT dHJpbmcgJiBhQm9yZGVyUmlnaHRDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRC b3JkZXJCb3R0b21Db2xvcihuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlckJvdHRvbUNvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFC b3JkZXJCb3R0b21Db2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJMZWZ0 Q29sb3IobnNBU3RyaW5nICYgYUJvcmRlckxlZnRDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Qm9yZGVyTGVmdENvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJMZWZ0Q29sb3Ip ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVG9wU3R5bGUobnNBU3RyaW5nICYg YUJvcmRlclRvcFN0eWxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJUb3BTdHls ZShjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyVG9wU3R5bGUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Qm9yZGVyUmlnaHRTdHlsZShuc0FTdHJpbmcgJiBhQm9yZGVyUmlnaHRTdHlsZSkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVyUmlnaHRTdHlsZShjb25zdCBuc0FTdHJp bmcgJiBhQm9yZGVyUmlnaHRTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3Jk ZXJCb3R0b21TdHlsZShuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tU3R5bGUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldEJvcmRlckJvdHRvbVN0eWxlKGNvbnN0IG5zQVN0cmluZyAmIGFCb3Jk ZXJCb3R0b21TdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJMZWZ0U3R5 bGUobnNBU3RyaW5nICYgYUJvcmRlckxlZnRTdHlsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0Qm9yZGVyTGVmdFN0eWxlKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJMZWZ0U3R5bGUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVG9wV2lkdGgobnNBU3RyaW5nICYgYUJv cmRlclRvcFdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJUb3BXaWR0aChj b25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyVG9wV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Qm9yZGVyUmlnaHRXaWR0aChuc0FTdHJpbmcgJiBhQm9yZGVyUmlnaHRXaWR0aCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVyUmlnaHRXaWR0aChjb25zdCBuc0FTdHJpbmcg JiBhQm9yZGVyUmlnaHRXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJC b3R0b21XaWR0aChuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tV2lkdGgpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldEJvcmRlckJvdHRvbVdpZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJC b3R0b21XaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJMZWZ0V2lkdGgo bnNBU3RyaW5nICYgYUJvcmRlckxlZnRXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 Qm9yZGVyTGVmdFdpZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJMZWZ0V2lkdGgpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyV2lkdGgobnNBU3RyaW5nICYgYUJvcmRlcldp ZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJXaWR0aChjb25zdCBuc0FTdHJp bmcgJiBhQm9yZGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm90dG9tKG5z QVN0cmluZyAmIGFCb3R0b20pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvdHRvbShjb25z dCBuc0FTdHJpbmcgJiBhQm90dG9tKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhcHRp b25TaWRlKG5zQVN0cmluZyAmIGFDYXB0aW9uU2lkZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0Q2FwdGlvblNpZGUoY29uc3QgbnNBU3RyaW5nICYgYUNhcHRpb25TaWRlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldENsZWFyKG5zQVN0cmluZyAmIGFDbGVhcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Q2xlYXIoY29uc3QgbnNBU3RyaW5nICYgYUNsZWFyKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldENsaXAobnNBU3RyaW5nICYgYUNsaXApID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldENsaXAoY29uc3QgbnNBU3RyaW5nICYgYUNsaXApID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29sb3IobnNBU3RyaW5nICYgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQ29sb3IpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29udGVudChuc0FTdHJpbmcgJiBhQ29udGVudCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Q29udGVudChjb25zdCBuc0FTdHJpbmcgJiBhQ29udGVudCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb3VudGVySW5jcmVtZW50KG5zQVN0cmluZyAmIGFDb3Vu dGVySW5jcmVtZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb3VudGVySW5jcmVtZW50 KGNvbnN0IG5zQVN0cmluZyAmIGFDb3VudGVySW5jcmVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldENvdW50ZXJSZXNldChuc0FTdHJpbmcgJiBhQ291bnRlclJlc2V0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRDb3VudGVyUmVzZXQoY29uc3QgbnNBU3RyaW5nICYgYUNvdW50 ZXJSZXNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdWUobnNBU3RyaW5nICYgYUN1 ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q3VlKGNvbnN0IG5zQVN0cmluZyAmIGFDdWUp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VlQWZ0ZXIobnNBU3RyaW5nICYgYUN1ZUFm dGVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdWVBZnRlcihjb25zdCBuc0FTdHJpbmcg JiBhQ3VlQWZ0ZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VlQmVmb3JlKG5zQVN0 cmluZyAmIGFDdWVCZWZvcmUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1ZUJlZm9yZShj b25zdCBuc0FTdHJpbmcgJiBhQ3VlQmVmb3JlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEN1cnNvcihuc0FTdHJpbmcgJiBhQ3Vyc29yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRD dXJzb3IoY29uc3QgbnNBU3RyaW5nICYgYUN1cnNvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXREaXJlY3Rpb24obnNBU3RyaW5nICYgYURpcmVjdGlvbikgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0RGlyZWN0aW9uKGNvbnN0IG5zQVN0cmluZyAmIGFEaXJlY3Rpb24pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlzcGxheShuc0FTdHJpbmcgJiBhRGlzcGxheSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzcGxheShjb25zdCBuc0FTdHJpbmcgJiBhRGlzcGxheSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGV2YXRpb24obnNBU3RyaW5nICYgYUVsZXZh dGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RWxldmF0aW9uKGNvbnN0IG5zQVN0cmlu ZyAmIGFFbGV2YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1wdHlDZWxscyhu c0FTdHJpbmcgJiBhRW1wdHlDZWxscykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RW1wdHlD ZWxscyhjb25zdCBuc0FTdHJpbmcgJiBhRW1wdHlDZWxscykgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDc3NGbG9hdChuc0FTdHJpbmcgJiBhQ3NzRmxvYXQpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldENzc0Zsb2F0KGNvbnN0IG5zQVN0cmluZyAmIGFDc3NGbG9hdCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRGb250KG5zQVN0cmluZyAmIGFGb250KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRGb250KGNvbnN0IG5zQVN0cmluZyAmIGFGb250KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEZvbnRGYW1pbHkobnNBU3RyaW5nICYgYUZvbnRGYW1pbHkpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRGYW1pbHkoY29uc3QgbnNBU3RyaW5nICYgYUZvbnRG YW1pbHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFNpemUobnNBU3RyaW5nICYg YUZvbnRTaXplKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250U2l6ZShjb25zdCBuc0FT dHJpbmcgJiBhRm9udFNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFNpemVB ZGp1c3QobnNBU3RyaW5nICYgYUZvbnRTaXplQWRqdXN0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRGb250U2l6ZUFkanVzdChjb25zdCBuc0FTdHJpbmcgJiBhRm9udFNpemVBZGp1c3QpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFN0cmV0Y2gobnNBU3RyaW5nICYgYUZvbnRT dHJldGNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250U3RyZXRjaChjb25zdCBuc0FT dHJpbmcgJiBhRm9udFN0cmV0Y2gpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFN0 eWxlKG5zQVN0cmluZyAmIGFGb250U3R5bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZv bnRTdHlsZShjb25zdCBuc0FTdHJpbmcgJiBhRm9udFN0eWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEZvbnRWYXJpYW50KG5zQVN0cmluZyAmIGFGb250VmFyaWFudCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0Rm9udFZhcmlhbnQoY29uc3QgbnNBU3RyaW5nICYgYUZvbnRWYXJp YW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvbnRXZWlnaHQobnNBU3RyaW5nICYg YUZvbnRXZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRXZWlnaHQoY29uc3Qg bnNBU3RyaW5nICYgYUZvbnRXZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVp Z2h0KG5zQVN0cmluZyAmIGFIZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhlaWdo dChjb25zdCBuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExlZnQobnNBU3RyaW5nICYgYUxlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlZnQo Y29uc3QgbnNBU3RyaW5nICYgYUxlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGV0 dGVyU3BhY2luZyhuc0FTdHJpbmcgJiBhTGV0dGVyU3BhY2luZykgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0TGV0dGVyU3BhY2luZyhjb25zdCBuc0FTdHJpbmcgJiBhTGV0dGVyU3BhY2luZykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5lSGVpZ2h0KG5zQVN0cmluZyAmIGFMaW5l SGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5lSGVpZ2h0KGNvbnN0IG5zQVN0 cmluZyAmIGFMaW5lSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpc3RTdHls ZShuc0FTdHJpbmcgJiBhTGlzdFN0eWxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaXN0 U3R5bGUoY29uc3QgbnNBU3RyaW5nICYgYUxpc3RTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRMaXN0U3R5bGVJbWFnZShuc0FTdHJpbmcgJiBhTGlzdFN0eWxlSW1hZ2UpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExpc3RTdHlsZUltYWdlKGNvbnN0IG5zQVN0cmluZyAmIGFM aXN0U3R5bGVJbWFnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaXN0U3R5bGVQb3Np dGlvbihuc0FTdHJpbmcgJiBhTGlzdFN0eWxlUG9zaXRpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldExpc3RTdHlsZVBvc2l0aW9uKGNvbnN0IG5zQVN0cmluZyAmIGFMaXN0U3R5bGVQb3Np dGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaXN0U3R5bGVUeXBlKG5zQVN0cmlu ZyAmIGFMaXN0U3R5bGVUeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaXN0U3R5bGVU eXBlKGNvbnN0IG5zQVN0cmluZyAmIGFMaXN0U3R5bGVUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE1hcmdpbihuc0FTdHJpbmcgJiBhTWFyZ2luKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRNYXJnaW4oY29uc3QgbnNBU3RyaW5nICYgYU1hcmdpbikgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNYXJnaW5Ub3AobnNBU3RyaW5nICYgYU1hcmdpblRvcCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0TWFyZ2luVG9wKGNvbnN0IG5zQVN0cmluZyAmIGFNYXJnaW5Ub3Ap ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luUmlnaHQobnNBU3RyaW5nICYgYU1h cmdpblJpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXJnaW5SaWdodChjb25zdCBu c0FTdHJpbmcgJiBhTWFyZ2luUmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFy Z2luQm90dG9tKG5zQVN0cmluZyAmIGFNYXJnaW5Cb3R0b20pID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldE1hcmdpbkJvdHRvbShjb25zdCBuc0FTdHJpbmcgJiBhTWFyZ2luQm90dG9tKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1hcmdpbkxlZnQobnNBU3RyaW5nICYgYU1hcmdpbkxl ZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1hcmdpbkxlZnQoY29uc3QgbnNBU3RyaW5n ICYgYU1hcmdpbkxlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFya2VyT2Zmc2V0 KG5zQVN0cmluZyAmIGFNYXJrZXJPZmZzZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1h cmtlck9mZnNldChjb25zdCBuc0FTdHJpbmcgJiBhTWFya2VyT2Zmc2V0KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE1hcmtzKG5zQVN0cmluZyAmIGFNYXJrcykgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFya3MoY29uc3QgbnNBU3RyaW5nICYgYU1hcmtzKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE1heEhlaWdodChuc0FTdHJpbmcgJiBhTWF4SGVpZ2h0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNYXhIZWlnaHQoY29uc3QgbnNBU3RyaW5nICYgYU1heEhlaWdo dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXhXaWR0aChuc0FTdHJpbmcgJiBhTWF4 V2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1heFdpZHRoKGNvbnN0IG5zQVN0cmlu ZyAmIGFNYXhXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNaW5IZWlnaHQobnNB U3RyaW5nICYgYU1pbkhlaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWluSGVpZ2h0 KGNvbnN0IG5zQVN0cmluZyAmIGFNaW5IZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0TWluV2lkdGgobnNBU3RyaW5nICYgYU1pbldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRNaW5XaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhTWluV2lkdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0T3JwaGFucyhuc0FTdHJpbmcgJiBhT3JwaGFucykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0T3JwaGFucyhjb25zdCBuc0FTdHJpbmcgJiBhT3JwaGFucykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRsaW5lKG5zQVN0cmluZyAmIGFPdXRsaW5lKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRsaW5lKGNvbnN0IG5zQVN0cmluZyAmIGFPdXRsaW5l KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE91dGxpbmVDb2xvcihuc0FTdHJpbmcgJiBh T3V0bGluZUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRsaW5lQ29sb3IoY29u c3QgbnNBU3RyaW5nICYgYU91dGxpbmVDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRPdXRsaW5lU3R5bGUobnNBU3RyaW5nICYgYU91dGxpbmVTdHlsZSkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0T3V0bGluZVN0eWxlKGNvbnN0IG5zQVN0cmluZyAmIGFPdXRsaW5lU3R5bGUp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0bGluZVdpZHRoKG5zQVN0cmluZyAmIGFP dXRsaW5lV2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE91dGxpbmVXaWR0aChjb25z dCBuc0FTdHJpbmcgJiBhT3V0bGluZVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE92ZXJmbG93KG5zQVN0cmluZyAmIGFPdmVyZmxvdykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0T3ZlcmZsb3coY29uc3QgbnNBU3RyaW5nICYgYU92ZXJmbG93KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFBhZGRpbmcobnNBU3RyaW5nICYgYVBhZGRpbmcpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFBhZGRpbmcoY29uc3QgbnNBU3RyaW5nICYgYVBhZGRpbmcpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFkZGluZ1RvcChuc0FTdHJpbmcgJiBhUGFkZGluZ1RvcCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFkZGluZ1RvcChjb25zdCBuc0FTdHJpbmcgJiBh UGFkZGluZ1RvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWRkaW5nUmlnaHQobnNB U3RyaW5nICYgYVBhZGRpbmdSaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFkZGlu Z1JpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFQYWRkaW5nUmlnaHQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0UGFkZGluZ0JvdHRvbShuc0FTdHJpbmcgJiBhUGFkZGluZ0JvdHRvbSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFkZGluZ0JvdHRvbShjb25zdCBuc0FTdHJpbmcgJiBh UGFkZGluZ0JvdHRvbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWRkaW5nTGVmdChu c0FTdHJpbmcgJiBhUGFkZGluZ0xlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhZGRp bmdMZWZ0KGNvbnN0IG5zQVN0cmluZyAmIGFQYWRkaW5nTGVmdCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQYWdlKG5zQVN0cmluZyAmIGFQYWdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRQYWdlKGNvbnN0IG5zQVN0cmluZyAmIGFQYWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFBhZ2VCcmVha0FmdGVyKG5zQVN0cmluZyAmIGFQYWdlQnJlYWtBZnRlcikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZUJyZWFrQWZ0ZXIoY29uc3QgbnNBU3RyaW5nICYgYVBh Z2VCcmVha0FmdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VCcmVha0JlZm9y ZShuc0FTdHJpbmcgJiBhUGFnZUJyZWFrQmVmb3JlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRQYWdlQnJlYWtCZWZvcmUoY29uc3QgbnNBU3RyaW5nICYgYVBhZ2VCcmVha0JlZm9yZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdlQnJlYWtJbnNpZGUobnNBU3RyaW5nICYgYVBh Z2VCcmVha0luc2lkZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZUJyZWFrSW5zaWRl KGNvbnN0IG5zQVN0cmluZyAmIGFQYWdlQnJlYWtJbnNpZGUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGF1c2UobnNBU3RyaW5nICYgYVBhdXNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRQYXVzZShjb25zdCBuc0FTdHJpbmcgJiBhUGF1c2UpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGF1c2VBZnRlcihuc0FTdHJpbmcgJiBhUGF1c2VBZnRlcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0UGF1c2VBZnRlcihjb25zdCBuc0FTdHJpbmcgJiBhUGF1c2VBZnRlcikg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXVzZUJlZm9yZShuc0FTdHJpbmcgJiBhUGF1 c2VCZWZvcmUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdXNlQmVmb3JlKGNvbnN0IG5z QVN0cmluZyAmIGFQYXVzZUJlZm9yZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXRj aChuc0FTdHJpbmcgJiBhUGl0Y2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBpdGNoKGNv bnN0IG5zQVN0cmluZyAmIGFQaXRjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXRj aFJhbmdlKG5zQVN0cmluZyAmIGFQaXRjaFJhbmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRQaXRjaFJhbmdlKGNvbnN0IG5zQVN0cmluZyAmIGFQaXRjaFJhbmdlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFBsYXlEdXJpbmcobnNBU3RyaW5nICYgYVBsYXlEdXJpbmcpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBsYXlEdXJpbmcoY29uc3QgbnNBU3RyaW5nICYgYVBsYXlE dXJpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9zaXRpb24obnNBU3RyaW5nICYg YVBvc2l0aW9uKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3NpdGlvbihjb25zdCBuc0FT dHJpbmcgJiBhUG9zaXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UXVvdGVzKG5z QVN0cmluZyAmIGFRdW90ZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFF1b3Rlcyhjb25z dCBuc0FTdHJpbmcgJiBhUXVvdGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJpY2hu ZXNzKG5zQVN0cmluZyAmIGFSaWNobmVzcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Umlj aG5lc3MoY29uc3QgbnNBU3RyaW5nICYgYVJpY2huZXNzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFJpZ2h0KG5zQVN0cmluZyAmIGFSaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0UmlnaHQoY29uc3QgbnNBU3RyaW5nICYgYVJpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFNpemUobnNBU3RyaW5nICYgYVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFNpemUoY29uc3QgbnNBU3RyaW5nICYgYVNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U3BlYWsobnNBU3RyaW5nICYgYVNwZWFrKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT cGVhayhjb25zdCBuc0FTdHJpbmcgJiBhU3BlYWspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U3BlYWtIZWFkZXIobnNBU3RyaW5nICYgYVNwZWFrSGVhZGVyKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTcGVha0hlYWRlcihjb25zdCBuc0FTdHJpbmcgJiBhU3BlYWtIZWFkZXIpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlYWtOdW1lcmFsKG5zQVN0cmluZyAmIGFTcGVh a051bWVyYWwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNwZWFrTnVtZXJhbChjb25zdCBu c0FTdHJpbmcgJiBhU3BlYWtOdW1lcmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNw ZWFrUHVuY3R1YXRpb24obnNBU3RyaW5nICYgYVNwZWFrUHVuY3R1YXRpb24pID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFNwZWFrUHVuY3R1YXRpb24oY29uc3QgbnNBU3RyaW5nICYgYVNwZWFr UHVuY3R1YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlZWNoUmF0ZShuc0FT dHJpbmcgJiBhU3BlZWNoUmF0ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3BlZWNoUmF0 ZShjb25zdCBuc0FTdHJpbmcgJiBhU3BlZWNoUmF0ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRTdHJlc3MobnNBU3RyaW5nICYgYVN0cmVzcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0U3RyZXNzKGNvbnN0IG5zQVN0cmluZyAmIGFTdHJlc3MpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VGFibGVMYXlvdXQobnNBU3RyaW5nICYgYVRhYmxlTGF5b3V0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRUYWJsZUxheW91dChjb25zdCBuc0FTdHJpbmcgJiBhVGFibGVMYXlv dXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dEFsaWduKG5zQVN0cmluZyAmIGFU ZXh0QWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHRBbGlnbihjb25zdCBuc0FT dHJpbmcgJiBhVGV4dEFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHREZWNv cmF0aW9uKG5zQVN0cmluZyAmIGFUZXh0RGVjb3JhdGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VGV4dERlY29yYXRpb24oY29uc3QgbnNBU3RyaW5nICYgYVRleHREZWNvcmF0aW9uKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHRJbmRlbnQobnNBU3RyaW5nICYgYVRleHRJ bmRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHRJbmRlbnQoY29uc3QgbnNBU3Ry aW5nICYgYVRleHRJbmRlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dFNoYWRv dyhuc0FTdHJpbmcgJiBhVGV4dFNoYWRvdykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4 dFNoYWRvdyhjb25zdCBuc0FTdHJpbmcgJiBhVGV4dFNoYWRvdykgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRUZXh0VHJhbnNmb3JtKG5zQVN0cmluZyAmIGFUZXh0VHJhbnNmb3JtKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0VHJhbnNmb3JtKGNvbnN0IG5zQVN0cmluZyAmIGFU ZXh0VHJhbnNmb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRvcChuc0FTdHJpbmcg JiBhVG9wKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUb3AoY29uc3QgbnNBU3RyaW5nICYg YVRvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlQmlkaShuc0FTdHJpbmcg JiBhVW5pY29kZUJpZGkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVuaWNvZGVCaWRpKGNv bnN0IG5zQVN0cmluZyAmIGFVbmljb2RlQmlkaSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRWZXJ0aWNhbEFsaWduKG5zQVN0cmluZyAmIGFWZXJ0aWNhbEFsaWduKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRWZXJ0aWNhbEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFWZXJ0aWNhbEFs aWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2liaWxpdHkobnNBU3RyaW5nICYg YVZpc2liaWxpdHkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpc2liaWxpdHkoY29uc3Qg bnNBU3RyaW5nICYgYVZpc2liaWxpdHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vm9p Y2VGYW1pbHkobnNBU3RyaW5nICYgYVZvaWNlRmFtaWx5KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRWb2ljZUZhbWlseShjb25zdCBuc0FTdHJpbmcgJiBhVm9pY2VGYW1pbHkpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0Vm9sdW1lKG5zQVN0cmluZyAmIGFWb2x1bWUpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFZvbHVtZShjb25zdCBuc0FTdHJpbmcgJiBhVm9sdW1lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdoaXRlU3BhY2UobnNBU3RyaW5nICYgYVdoaXRlU3Bh Y2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdoaXRlU3BhY2UoY29uc3QgbnNBU3RyaW5n ICYgYVdoaXRlU3BhY2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkb3dzKG5zQVN0 cmluZyAmIGFXaWRvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZG93cyhjb25zdCBu c0FTdHJpbmcgJiBhV2lkb3dzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKG5z QVN0cmluZyAmIGFXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkdGgoY29uc3Qg bnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdvcmRTcGFj aW5nKG5zQVN0cmluZyAmIGFXb3JkU3BhY2luZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 V29yZFNwYWNpbmcoY29uc3QgbnNBU3RyaW5nICYgYVdvcmRTcGFjaW5nKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFpJbmRleChuc0FTdHJpbmcgJiBhWkluZGV4KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRaSW5kZXgoY29uc3QgbnNBU3RyaW5nICYgYVpJbmRleCkgPSAwOwoKfTsK IyAyNTIwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTUzJQcm9wZXJ0aWVzLmgi CmNsYXNzIG5zSURPTU5TQ1NTMlByb3BlcnRpZXMgOiBwdWJsaWMgbnNJRE9NQ1NTMlByb3BlcnRp ZXMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4ODgzNTRjMWEsIDB4ZDYyMywgMHg0NGE5LCB7IDB4YTgsIDB4OTQs IDB4NGUsIDB4ZTAsIDB4MWIsIDB4YTIsIDB4OTYsIDB4MTUgfX07IHJldHVybiBpaWQ7fQoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pBcHBlYXJhbmNlKG5zQVN0cmluZyAmIGFNb3pBcHBlYXJh bmNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pBcHBlYXJhbmNlKGNvbnN0IG5zQVN0 cmluZyAmIGFNb3pBcHBlYXJhbmNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJh Y2tncm91bmRDbGlwKG5zQVN0cmluZyAmIGFNb3pCYWNrZ3JvdW5kQ2xpcCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0TW96QmFja2dyb3VuZENsaXAoY29uc3QgbnNBU3RyaW5nICYgYU1vekJh Y2tncm91bmRDbGlwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJhY2tncm91bmRJ bmxpbmVQb2xpY3kobnNBU3RyaW5nICYgYU1vekJhY2tncm91bmRJbmxpbmVQb2xpY3kpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekJhY2tncm91bmRJbmxpbmVQb2xpY3koY29uc3QgbnNB U3RyaW5nICYgYU1vekJhY2tncm91bmRJbmxpbmVQb2xpY3kpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0TW96QmFja2dyb3VuZE9yaWdpbihuc0FTdHJpbmcgJiBhTW96QmFja2dyb3VuZE9y aWdpbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96QmFja2dyb3VuZE9yaWdpbihjb25z dCBuc0FTdHJpbmcgJiBhTW96QmFja2dyb3VuZE9yaWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRNb3pCaW5kaW5nKG5zQVN0cmluZyAmIGFNb3pCaW5kaW5nKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRNb3pCaW5kaW5nKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCaW5kaW5nKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJvcmRlckJvdHRvbUNvbG9ycyhuc0FTdHJp bmcgJiBhTW96Qm9yZGVyQm90dG9tQ29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRN b3pCb3JkZXJCb3R0b21Db2xvcnMoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlckJvdHRvbUNv bG9ycykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJMZWZ0Q29sb3JzKG5z QVN0cmluZyAmIGFNb3pCb3JkZXJMZWZ0Q29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRNb3pCb3JkZXJMZWZ0Q29sb3JzKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3JkZXJMZWZ0Q29s b3JzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJvcmRlclJpZ2h0Q29sb3JzKG5z QVN0cmluZyAmIGFNb3pCb3JkZXJSaWdodENvbG9ycykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0TW96Qm9yZGVyUmlnaHRDb2xvcnMoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlclJpZ2h0 Q29sb3JzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJvcmRlclRvcENvbG9ycyhu c0FTdHJpbmcgJiBhTW96Qm9yZGVyVG9wQ29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRNb3pCb3JkZXJUb3BDb2xvcnMoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlclRvcENvbG9y cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJSYWRpdXMobnNBU3RyaW5n ICYgYU1vekJvcmRlclJhZGl1cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm9yZGVy UmFkaXVzKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3JkZXJSYWRpdXMpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TW96Qm9yZGVyUmFkaXVzVG9wbGVmdChuc0FTdHJpbmcgJiBhTW96Qm9y ZGVyUmFkaXVzVG9wbGVmdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm9yZGVyUmFk aXVzVG9wbGVmdChjb25zdCBuc0FTdHJpbmcgJiBhTW96Qm9yZGVyUmFkaXVzVG9wbGVmdCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJSYWRpdXNUb3ByaWdodChuc0FTdHJp bmcgJiBhTW96Qm9yZGVyUmFkaXVzVG9wcmlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dE1vekJvcmRlclJhZGl1c1RvcHJpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3JkZXJSYWRp dXNUb3ByaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJSYWRpdXNC b3R0b21sZWZ0KG5zQVN0cmluZyAmIGFNb3pCb3JkZXJSYWRpdXNCb3R0b21sZWZ0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3JkZXJSYWRpdXNCb3R0b21sZWZ0KGNvbnN0IG5zQVN0 cmluZyAmIGFNb3pCb3JkZXJSYWRpdXNCb3R0b21sZWZ0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE1vekJvcmRlclJhZGl1c0JvdHRvbXJpZ2h0KG5zQVN0cmluZyAmIGFNb3pCb3JkZXJS YWRpdXNCb3R0b21yaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm9yZGVyUmFk aXVzQm90dG9tcmlnaHQoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlclJhZGl1c0JvdHRvbXJp Z2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJveEFsaWduKG5zQVN0cmluZyAm IGFNb3pCb3hBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm94QWxpZ24oY29u c3QgbnNBU3RyaW5nICYgYU1vekJveEFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE1vekJveERpcmVjdGlvbihuc0FTdHJpbmcgJiBhTW96Qm94RGlyZWN0aW9uKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3hEaXJlY3Rpb24oY29uc3QgbnNBU3RyaW5nICYgYU1vekJv eERpcmVjdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3hGbGV4KG5zQVN0 cmluZyAmIGFNb3pCb3hGbGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3hGbGV4 KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3hGbGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE1vekJveEZsZXhHcm91cChuc0FTdHJpbmcgJiBhTW96Qm94RmxleEdyb3VwKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3hGbGV4R3JvdXAoY29uc3QgbnNBU3RyaW5nICYgYU1v ekJveEZsZXhHcm91cCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3hPcmllbnQo bnNBU3RyaW5nICYgYU1vekJveE9yaWVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96 Qm94T3JpZW50KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3hPcmllbnQpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TW96Qm94T3JkaW5hbEdyb3VwKG5zQVN0cmluZyAmIGFNb3pCb3hPcmRp bmFsR3JvdXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekJveE9yZGluYWxHcm91cChj b25zdCBuc0FTdHJpbmcgJiBhTW96Qm94T3JkaW5hbEdyb3VwKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE1vekJveFBhY2sobnNBU3RyaW5nICYgYU1vekJveFBhY2spID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE1vekJveFBhY2soY29uc3QgbnNBU3RyaW5nICYgYU1vekJveFBhY2sp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96Qm94U2l6aW5nKG5zQVN0cmluZyAmIGFN b3pCb3hTaXppbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekJveFNpemluZyhjb25z dCBuc0FTdHJpbmcgJiBhTW96Qm94U2l6aW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE1vekNvdW50ZXJJbmNyZW1lbnQobnNBU3RyaW5nICYgYU1vekNvdW50ZXJJbmNyZW1lbnQpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekNvdW50ZXJJbmNyZW1lbnQoY29uc3QgbnNBU3Ry aW5nICYgYU1vekNvdW50ZXJJbmNyZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TW96Q291bnRlclJlc2V0KG5zQVN0cmluZyAmIGFNb3pDb3VudGVyUmVzZXQpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE1vekNvdW50ZXJSZXNldChjb25zdCBuc0FTdHJpbmcgJiBhTW96Q291 bnRlclJlc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekZsb2F0RWRnZShuc0FT dHJpbmcgJiBhTW96RmxvYXRFZGdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pGbG9h dEVkZ2UoY29uc3QgbnNBU3RyaW5nICYgYU1vekZsb2F0RWRnZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRNb3pGb3JjZUJyb2tlbkltYWdlSWNvbihuc0FTdHJpbmcgJiBhTW96Rm9yY2VC cm9rZW5JbWFnZUljb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekZvcmNlQnJva2Vu SW1hZ2VJY29uKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pGb3JjZUJyb2tlbkltYWdlSWNvbikgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pJbWFnZVJlZ2lvbihuc0FTdHJpbmcgJiBhTW96 SW1hZ2VSZWdpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekltYWdlUmVnaW9uKGNv bnN0IG5zQVN0cmluZyAmIGFNb3pJbWFnZVJlZ2lvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRNb3pLZXlFcXVpdmFsZW50KG5zQVN0cmluZyAmIGFNb3pLZXlFcXVpdmFsZW50KSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pLZXlFcXVpdmFsZW50KGNvbnN0IG5zQVN0cmluZyAm IGFNb3pLZXlFcXVpdmFsZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vek9wYWNp dHkobnNBU3RyaW5nICYgYU1vek9wYWNpdHkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1v ek9wYWNpdHkoY29uc3QgbnNBU3RyaW5nICYgYU1vek9wYWNpdHkpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TW96T3V0bGluZShuc0FTdHJpbmcgJiBhTW96T3V0bGluZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGluZShjb25zdCBuc0FTdHJpbmcgJiBhTW96T3V0bGlu ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pPdXRsaW5lQ29sb3IobnNBU3RyaW5n ICYgYU1vek91dGxpbmVDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGlu ZUNvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lQ29sb3IpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TW96T3V0bGluZVJhZGl1cyhuc0FTdHJpbmcgJiBhTW96T3V0bGluZVJh ZGl1cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGluZVJhZGl1cyhjb25zdCBu c0FTdHJpbmcgJiBhTW96T3V0bGluZVJhZGl1cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRNb3pPdXRsaW5lUmFkaXVzVG9wbGVmdChuc0FTdHJpbmcgJiBhTW96T3V0bGluZVJhZGl1c1Rv cGxlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vek91dGxpbmVSYWRpdXNUb3BsZWZ0 KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lUmFkaXVzVG9wbGVmdCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRNb3pPdXRsaW5lUmFkaXVzVG9wcmlnaHQobnNBU3RyaW5nICYgYU1v ek91dGxpbmVSYWRpdXNUb3ByaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0 bGluZVJhZGl1c1RvcHJpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lUmFkaXVzVG9w cmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96T3V0bGluZVJhZGl1c0JvdHRv bWxlZnQobnNBU3RyaW5nICYgYU1vek91dGxpbmVSYWRpdXNCb3R0b21sZWZ0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRNb3pPdXRsaW5lUmFkaXVzQm90dG9tbGVmdChjb25zdCBuc0FTdHJp bmcgJiBhTW96T3V0bGluZVJhZGl1c0JvdHRvbWxlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TW96T3V0bGluZVJhZGl1c0JvdHRvbXJpZ2h0KG5zQVN0cmluZyAmIGFNb3pPdXRsaW5l UmFkaXVzQm90dG9tcmlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vek91dGxpbmVS YWRpdXNCb3R0b21yaWdodChjb25zdCBuc0FTdHJpbmcgJiBhTW96T3V0bGluZVJhZGl1c0JvdHRv bXJpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vek91dGxpbmVTdHlsZShuc0FT dHJpbmcgJiBhTW96T3V0bGluZVN0eWxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pP dXRsaW5lU3R5bGUoY29uc3QgbnNBU3RyaW5nICYgYU1vek91dGxpbmVTdHlsZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pPdXRsaW5lV2lkdGgobnNBU3RyaW5nICYgYU1vek91dGxp bmVXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGluZVdpZHRoKGNvbnN0 IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0TW96UmVzaXplcihuc0FTdHJpbmcgJiBhTW96UmVzaXplcikgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0TW96UmVzaXplcihjb25zdCBuc0FTdHJpbmcgJiBhTW96UmVzaXplcikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pVc2VyRm9jdXMobnNBU3RyaW5nICYgYU1velVzZXJG b2N1cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96VXNlckZvY3VzKGNvbnN0IG5zQVN0 cmluZyAmIGFNb3pVc2VyRm9jdXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96VXNl cklucHV0KG5zQVN0cmluZyAmIGFNb3pVc2VySW5wdXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldE1velVzZXJJbnB1dChjb25zdCBuc0FTdHJpbmcgJiBhTW96VXNlcklucHV0KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1velVzZXJNb2RpZnkobnNBU3RyaW5nICYgYU1velVzZXJN b2RpZnkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1velVzZXJNb2RpZnkoY29uc3QgbnNB U3RyaW5nICYgYU1velVzZXJNb2RpZnkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96 VXNlclNlbGVjdChuc0FTdHJpbmcgJiBhTW96VXNlclNlbGVjdCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0TW96VXNlclNlbGVjdChjb25zdCBuc0FTdHJpbmcgJiBhTW96VXNlclNlbGVjdCkg PSAwOwoKfTsKIyAyNTUgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NQ1NTQ2hhcnNldFJ1bGUuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUNTU0NoYXJzZXRSdWxlLmgiCmNsYXNzIG5zSURPTUNTU0NoYXJz ZXRSdWxlIDogcHVibGljIG5zSURPTUNTU1J1bGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MTlmZTc4Y2MsIDB4 NjVmZiwgMHg0YjFkLCB7IDB4YTUsIDB4ZDcsIDB4OWUsIDB4YTgsIDB4OTYsIDB4OTIsIDB4Y2Us IDB4YzYgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbmNvZGluZyhu c0FTdHJpbmcgJiBhRW5jb2RpbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVuY29kaW5n KGNvbnN0IG5zQVN0cmluZyAmIGFFbmNvZGluZykgPSAwOwoKfTsKIyAyNTYgIm5zRE9NQ2xhc3NJ bmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTSW1wb3J0 UnVsZS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTSW1wb3J0 UnVsZS5oIgpjbGFzcyBuc0lET01DU1NJbXBvcnRSdWxlIDogcHVibGljIG5zSURPTUNTU1J1bGUg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YTZjZjkwY2YsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4 MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRIcmVmKG5zQVN0cmluZyAmIGFIcmVmKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldE1lZGlhKG5zSURPTU1lZGlhTGlzdCAqICphTWVkaWEpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVTaGVldChuc0lET01DU1NTdHlsZVNoZWV0ICogKmFTdHls ZVNoZWV0KSA9IDA7Cgp9OwojIDI1NyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NNZWRpYVJ1bGUuaCIgMQojIDI1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU01lZGlhUnVsZS5oIgpjbGFzcyBuc0lET01DU1NN ZWRpYVJ1bGUgOiBwdWJsaWMgbnNJRE9NQ1NTUnVsZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiYywg MHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhk ZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lZGlhKG5z SURPTU1lZGlhTGlzdCAqICphTWVkaWEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3Nz UnVsZXMobnNJRE9NQ1NTUnVsZUxpc3QgKiAqYUNzc1J1bGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEluc2VydFJ1bGUoY29uc3QgbnNBU3RyaW5nICYgcnVsZSwgUFJVaW50MzIgaW5kZXgs IFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVJ1bGUo UFJVaW50MzIgaW5kZXgpID0gMDsKCn07CiMgMjU4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ByaW1pdGl2ZVZhbHVlLmgiIDEK IyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NQcmltaXRpdmVWYWx1ZS5o IgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTVmFsdWUuaCIgMQojIDI1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ZhbHVlLmgiCmNsYXNzIG5zSURP TUNTU1ZhbHVlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAwOWY3ZWE1LCAw eDllODAsIDB4NDFiZSwgeyAweGIwLCAweDA4LCAweGRiLCAweDYyLCAweGYxLCAweDA4LCAweDIz LCAweGYyIH19OyByZXR1cm4gaWlkO30KIyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01DU1NWYWx1ZS5oIgogIGVudW0geyBDU1NfSU5IRVJJVCA9IDBVIH07CgogIGVudW0geyBD U1NfUFJJTUlUSVZFX1ZBTFVFID0gMVUgfTsKCiAgZW51bSB7IENTU19WQUxVRV9MSVNUID0gMlUg fTsKCiAgZW51bSB7IENTU19DVVNUT00gPSAzVSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD c3NUZXh0KG5zQVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRD c3NUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldENzc1ZhbHVlVHlwZShQUlVpbnQxNiAqYUNzc1ZhbHVlVHlwZSkgPSAwOwoKfTsKIyAx MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NQcmltaXRpdmVWYWx1ZS5oIiAy CiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTUHJpbWl0aXZlVmFsdWUu aCIKY2xhc3MgbnNJRE9NQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgbnNJRE9NQ1NTVmFsdWUg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4ZTI0OTAzMWYsIDB4OGRmOSwgMHg0ZTdhLCB7IDB4YjYsIDB4NDQsIDB4 MTgsIDB4OTQsIDB4NmQsIDB4Y2UsIDB4MDAsIDB4MTkgfX07IHJldHVybiBpaWQ7fQojIDM5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAgZW51 bSB7IENTU19VTktOT1dOID0gMFUgfTsKCiAgZW51bSB7IENTU19OVU1CRVIgPSAxVSB9OwoKICBl bnVtIHsgQ1NTX1BFUkNFTlRBR0UgPSAyVSB9OwoKICBlbnVtIHsgQ1NTX0VNUyA9IDNVIH07Cgog IGVudW0geyBDU1NfRVhTID0gNFUgfTsKCiAgZW51bSB7IENTU19QWCA9IDVVIH07CgogIGVudW0g eyBDU1NfQ00gPSA2VSB9OwoKICBlbnVtIHsgQ1NTX01NID0gN1UgfTsKCiAgZW51bSB7IENTU19J TiA9IDhVIH07CgogIGVudW0geyBDU1NfUFQgPSA5VSB9OwoKICBlbnVtIHsgQ1NTX1BDID0gMTBV IH07CgogIGVudW0geyBDU1NfREVHID0gMTFVIH07CgogIGVudW0geyBDU1NfUkFEID0gMTJVIH07 CgogIGVudW0geyBDU1NfR1JBRCA9IDEzVSB9OwoKICBlbnVtIHsgQ1NTX01TID0gMTRVIH07Cgog IGVudW0geyBDU1NfUyA9IDE1VSB9OwoKICBlbnVtIHsgQ1NTX0haID0gMTZVIH07CgogIGVudW0g eyBDU1NfS0haID0gMTdVIH07CgogIGVudW0geyBDU1NfRElNRU5TSU9OID0gMThVIH07CgogIGVu dW0geyBDU1NfU1RSSU5HID0gMTlVIH07CgogIGVudW0geyBDU1NfVVJJID0gMjBVIH07CgogIGVu dW0geyBDU1NfSURFTlQgPSAyMVUgfTsKCiAgZW51bSB7IENTU19BVFRSID0gMjJVIH07CgogIGVu dW0geyBDU1NfQ09VTlRFUiA9IDIzVSB9OwoKICBlbnVtIHsgQ1NTX1JFQ1QgPSAyNFUgfTsKCiAg ZW51bSB7IENTU19SR0JDT0xPUiA9IDI1VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmlt aXRpdmVUeXBlKFBSVWludDE2ICphUHJpbWl0aXZlVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRGbG9hdFZhbHVlKFBSVWludDE2IHVuaXRUeXBlLCBmbG9hdCBmbG9hdFZhbHVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZsb2F0VmFsdWUoUFJVaW50MTYgdW5pdFR5cGUs IGZsb2F0ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0cmluZ1ZhbHVl KFBSVWludDE2IHN0cmluZ1R5cGUsIGNvbnN0IG5zQVN0cmluZyAmIHN0cmluZ1ZhbHVlKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ1ZhbHVlKG5zQVN0cmluZyAmIF9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q291bnRlclZhbHVlKG5zSURPTUNvdW50ZXIg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlY3RWYWx1ZShuc0lET01S ZWN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSR0JDb2xvclZhbHVl KG5zSURPTVJHQkNvbG9yICoqX3JldHZhbCkgPSAwOwoKfTsKIyAyNTkgIm5zRE9NQ2xhc3NJbmZv LmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTU3R5bGVSdWxl LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NTdHlsZVJ1bGUu aCIKY2xhc3MgbnNJRE9NQ1NTU3R5bGVSdWxlIDogcHVibGljIG5zSURPTUNTU1J1bGUgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4YTZjZjkwYmYsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4 ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTZWxlY3RvclRleHQobnNBU3RyaW5nICYgYVNlbGVjdG9yVGV4dCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0b3JUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFTZWxl Y3RvclRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGUobnNJRE9NQ1NTU3R5 bGVEZWNsYXJhdGlvbiAqICphU3R5bGUpID0gMDsKCn07CiMgMjYwICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1N0eWxlU2hlZXQu aCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1N0eWxlU2hlZXQu aCIKY2xhc3MgbnNJRE9NQ1NTU3R5bGVTaGVldCA6IHB1YmxpYyBuc0lET01TdHlsZVNoZWV0IHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGE2Y2Y5MGMyLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAw LCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NTdHlsZVNoZWV0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRPd25lclJ1bGUobnNJRE9NQ1NTUnVsZSAqICphT3duZXJSdWxlKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENzc1J1bGVzKG5zSURPTUNTU1J1bGVMaXN0ICogKmFDc3NS dWxlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRSdWxlKGNvbnN0IG5zQVN0cmlu ZyAmIHJ1bGUsIFBSVWludDMyIGluZGV4LCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBEZWxldGVSdWxlKFBSVWludDMyIGluZGV4KSA9IDA7Cgp9OwojIDI2MSAi bnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01DU1NWYWx1ZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUNTU1ZhbHVlTGlzdC5oIgpjbGFzcyBuc0lET01DU1NWYWx1ZUxpc3QgOiBwdWJsaWMgbnNJRE9N Q1NTVmFsdWUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGYwOWZhODQsIDB4MzliOSwgMHg0ZGNhLCB7IDB4OWIs IDB4MmYsIDB4ZGIsIDB4MGUsIDB4ZWIsIDB4MTgsIDB4NjIsIDB4ODYgfX07IHJldHVybiBpaWQ7 fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ZhbHVlTGlzdC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5zSURPTUNTU1ZhbHVlICoqX3Jl dHZhbCkgPSAwOwoKfTsKIyAyNjIgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUmFuZ2UuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTVJhbmdlLmgiCmNsYXNzIG5zSURPTVJhbmdlIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGNlLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30K IyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01SYW5nZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0U3RhcnRDb250YWluZXIobnNJRE9NTm9kZSAqICphU3RhcnRDb250YWluZXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhcnRPZmZzZXQoUFJJbnQzMiAqYVN0YXJ0 T2Zmc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuZENvbnRhaW5lcihuc0lET01O b2RlICogKmFFbmRDb250YWluZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW5kT2Zm c2V0KFBSSW50MzIgKmFFbmRPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29s bGFwc2VkKFBSQm9vbCAqYUNvbGxhcHNlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD b21tb25BbmNlc3RvckNvbnRhaW5lcihuc0lET01Ob2RlICogKmFDb21tb25BbmNlc3RvckNvbnRh aW5lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdGFydChuc0lET01Ob2RlICpyZWZO b2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRFbmQobnNJ RE9NTm9kZSAqcmVmTm9kZSwgUFJJbnQzMiBvZmZzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0U3RhcnRCZWZvcmUobnNJRE9NTm9kZSAqcmVmTm9kZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTdGFydEFmdGVyKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0RW5kQmVmb3JlKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RW5kQWZ0ZXIobnNJRE9NTm9kZSAqcmVmTm9kZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZShQUkJvb2wgdG9TdGFydCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBTZWxlY3ROb2RlKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2VsZWN0Tm9kZUNvbnRlbnRzKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsK CiAgZW51bSB7IFNUQVJUX1RPX1NUQVJUID0gMFUgfTsKCiAgZW51bSB7IFNUQVJUX1RPX0VORCA9 IDFVIH07CgogIGVudW0geyBFTkRfVE9fRU5EID0gMlUgfTsKCiAgZW51bSB7IEVORF9UT19TVEFS VCA9IDNVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhcmVCb3VuZGFyeVBvaW50cyhQUlVp bnQxNiBob3csIG5zSURPTVJhbmdlICpzb3VyY2VSYW5nZSwgUFJJbnQxNiAqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVDb250ZW50cyh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEV4dHJhY3RDb250ZW50cyhuc0lET01Eb2N1bWVudEZyYWdtZW50ICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZUNvbnRlbnRzKG5zSURPTURvY3Vt ZW50RnJhZ21lbnQgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydE5v ZGUobnNJRE9NTm9kZSAqbmV3Tm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdXJyb3Vu ZENvbnRlbnRzKG5zSURPTU5vZGUgKm5ld1BhcmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBDbG9uZVJhbmdlKG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBUb1N0cmluZyhuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IERldGFjaCh2b2lkKSA9IDA7Cgp9OwojIDI2MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1JhbmdlLmgiIDEKIyAyNSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1JhbmdlLmgiCmNsYXNzIG5zSURPTU5TUmFu Z2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZjIsIDB4MTViMywg MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDb250ZXh0dWFsRnJh Z21lbnQoY29uc3QgbnNBU3RyaW5nICYgZnJhZ21lbnQsIG5zSURPTURvY3VtZW50RnJhZ21lbnQg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUG9pbnRJblJhbmdlKG5zSURP TU5vZGUgKnBhcmVudCwgUFJJbnQzMiBvZmZzZXQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlUG9pbnQobnNJRE9NTm9kZSAqcGFyZW50LCBQUkludDMy IG9mZnNldCwgUFJJbnQxNiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnRl cnNlY3RzTm9kZShuc0lET01Ob2RlICpuLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7 IE5PREVfQkVGT1JFID0gMFUgfTsKCiAgZW51bSB7IE5PREVfQUZURVIgPSAxVSB9OwoKICBlbnVt IHsgTk9ERV9CRUZPUkVfQU5EX0FGVEVSID0gMlUgfTsKCiAgZW51bSB7IE5PREVfSU5TSURFID0g M1UgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZU5vZGUobnNJRE9NTm9kZSAqbiwgUFJV aW50MTYgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTlNEZXRhY2godm9pZCkg PSAwOwoKfTsKIyAyNjQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NUmFuZ2VFeGNlcHRpb24uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTVJhbmdlRXhjZXB0aW9uLmgiCmNsYXNzIG5zSURPTVJhbmdlRXhj ZXB0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDBmODA3MzAxLCAweDM5 ZDIsIDB4MTFkNiwgeyAweGE3LCAweGYyLCAweDhmLCAweDUwLCAweDRmLCAweGY4LCAweDcwLCAw eGRjIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7IEJBRF9CT1VOREFSWVBPSU5UU19FUlIgPSAx VSB9OwoKICBlbnVtIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSID0gMlUgfTsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0Q29kZShQUlVpbnQxNiAqYUNvZGUpID0gMDsKCn07CiMgMjY1ICJuc0RPTUNs YXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRyZWVX YWxrZXIuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRyZWVXYWxr ZXIuaCIKY2xhc3MgbnNJRE9NVHJlZVdhbGtlcjsKCmNsYXNzIG5zSURPTU5vZGVGaWx0ZXI7CiMg MjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NVHJlZVdhbGtlci5oIgpjbGFzcyBu c0lET01UcmVlV2Fsa2VyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQwMGFm M2NhLCAweDFkZDIsIDB4MTFiMiwgeyAweGE1LCAweDBhLCAweDg4LCAweDdlLCAweGNjLCAweGEy LCAweGU2LCAweDNhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9v dChuc0lET01Ob2RlICogKmFSb290KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdoYXRU b1Nob3coUFJVaW50MzIgKmFXaGF0VG9TaG93KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEZpbHRlcihuc0lET01Ob2RlRmlsdGVyICogKmFGaWx0ZXIpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0RXhwYW5kRW50aXR5UmVmZXJlbmNlcyhQUkJvb2wgKmFFeHBhbmRFbnRpdHlSZWZl cmVuY2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnROb2RlKG5zSURPTU5v ZGUgKiAqYUN1cnJlbnROb2RlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdXJyZW50Tm9k ZShuc0lET01Ob2RlICogYUN1cnJlbnROb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBh cmVudE5vZGUobnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg Rmlyc3RDaGlsZChuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBMYXN0Q2hpbGQobnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgUHJldmlvdXNTaWJsaW5nKG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IE5leHRTaWJsaW5nKG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFByZXZpb3VzTm9kZShuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBOZXh0Tm9kZShuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKfTsK IyAyNjYgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NWFVMRG9jdW1lbnQuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTVhVTERvY3VtZW50LmgiCmNsYXNzIG5zSURPTVhVTENvbW1hbmREaXNwYXRjaGVyOwoj IDI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVhVTERvY3VtZW50LmgiCmNsYXNz IG5zSURPTVhVTERvY3VtZW50IDogcHVibGljIG5zSURPTURvY3VtZW50IHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eDE3ZGRkOGMwLCAweGM1ZjgsIDB4MTFkMiwgeyAweGE2LCAweGFlLCAweDAwLCAweDEwLCAweDRi LCAweGRlLCAweDYwLCAweDQ4IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UG9wdXBOb2RlKG5zSURPTU5vZGUgKiAqYVBvcHVwTm9kZSkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0UG9wdXBOb2RlKG5zSURPTU5vZGUgKiBhUG9wdXBOb2RlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFRvb2x0aXBOb2RlKG5zSURPTU5vZGUgKiAqYVRvb2x0aXBOb2RlKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUb29sdGlwTm9kZShuc0lET01Ob2RlICogYVRvb2x0 aXBOb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbW1hbmREaXNwYXRjaGVyKG5z SURPTVhVTENvbW1hbmREaXNwYXRjaGVyICogKmFDb21tYW5kRGlzcGF0Y2hlcikgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChQUkludDMyICphV2lkdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SGVpZ2h0KFBSSW50MzIgKmFIZWlnaHQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0RWxlbWVudHNCeUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBj b25zdCBuc0FTdHJpbmcgJiB2YWx1ZSwgbnNJRE9NTm9kZUxpc3QgKipfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEJyb2FkY2FzdExpc3RlbmVyRm9yKG5zSURPTUVsZW1lbnQg KmJyb2FkY2FzdGVyLCBuc0lET01FbGVtZW50ICpvYnNlcnZlciwgY29uc3QgbnNBU3RyaW5nICYg YXR0cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVCcm9hZGNhc3RMaXN0ZW5lckZv cihuc0lET01FbGVtZW50ICpicm9hZGNhc3RlciwgbnNJRE9NRWxlbWVudCAqb2JzZXJ2ZXIsIGNv bnN0IG5zQVN0cmluZyAmIGF0dHIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUGVyc2lzdChj b25zdCBuc0FTdHJpbmcgJiBpZCwgY29uc3QgbnNBU3RyaW5nICYgYXR0cikgPSAwOwoKfTsKIyAy NjcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NWFVMRWxlbWVudC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NWFVMRWxlbWVudC5oIgpjbGFzcyBuc0lSREZDb21wb3NpdGVEYXRhU291cmNlOwoKY2xhc3Mg bnNJWFVMVGVtcGxhdGVCdWlsZGVyOwoKY2xhc3MgbnNJUkRGUmVzb3VyY2U7CgpjbGFzcyBuc0lD b250cm9sbGVyczsKCmNsYXNzIG5zSUJveE9iamVjdDsKIyAzNSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01YVUxFbGVtZW50LmgiCmNsYXNzIG5zSURPTVhVTEVsZW1lbnQgOiBwdWJs aWMgbnNJRE9NRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc0ZWQ4MSwgMHhjMDg4LCAweDExZDIs IHsgMHg5NiwgMHhlZCwgMHgwMCwgMHgxMCwgMHg0YiwgMHg3YiwgMHg3ZCwgMHhlYiB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElkKG5zQVN0cmluZyAmIGFJZCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SWQoY29uc3QgbnNBU3RyaW5nICYgYUlkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzTmFtZShuc0FTdHJpbmcgJiBhQ2xhc3NOYW1lKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGFzc05hbWUoY29uc3QgbnNBU3RyaW5nICYgYUNs YXNzTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBh QWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAm IGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXIobnNBU3RyaW5nICYgYURp cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlyKGNvbnN0IG5zQVN0cmluZyAmIGFEaXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxleChuc0FTdHJpbmcgJiBhRmxleCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxleChjb25zdCBuc0FTdHJpbmcgJiBhRmxleCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbGV4R3JvdXAobnNBU3RyaW5nICYgYUZsZXhHcm91 cCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxleEdyb3VwKGNvbnN0IG5zQVN0cmluZyAm IGFGbGV4R3JvdXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3JkaW5hbChuc0FTdHJp bmcgJiBhT3JkaW5hbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3JkaW5hbChjb25zdCBu c0FTdHJpbmcgJiBhT3JkaW5hbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPcmllbnQo bnNBU3RyaW5nICYgYU9yaWVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3JpZW50KGNv bnN0IG5zQVN0cmluZyAmIGFPcmllbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFj ayhuc0FTdHJpbmcgJiBhUGFjaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFjayhjb25z dCBuc0FTdHJpbmcgJiBhUGFjaykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIaWRkZW4o UFJCb29sICphSGlkZGVuKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaWRkZW4oUFJCb29s IGFIaWRkZW4pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29sbGFwc2VkKFBSQm9vbCAq YUNvbGxhcHNlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29sbGFwc2VkKFBSQm9vbCBh Q29sbGFwc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9ic2VydmVzKG5zQVN0cmlu ZyAmIGFPYnNlcnZlcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T2JzZXJ2ZXMoY29uc3Qg bnNBU3RyaW5nICYgYU9ic2VydmVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnUo bnNBU3RyaW5nICYgYU1lbnUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1lbnUoY29uc3Qg bnNBU3RyaW5nICYgYU1lbnUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGV4dE1l bnUobnNBU3RyaW5nICYgYUNvbnRleHRNZW51KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRD b250ZXh0TWVudShjb25zdCBuc0FTdHJpbmcgJiBhQ29udGV4dE1lbnUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0VG9vbHRpcChuc0FTdHJpbmcgJiBhVG9vbHRpcCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0VG9vbHRpcChjb25zdCBuc0FTdHJpbmcgJiBhVG9vbHRpcCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFdpZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFXaWR0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQobnNBU3RyaW5nICYgYUhlaWdodCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFIZWlnaHQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWluV2lkdGgobnNBU3RyaW5nICYgYU1pbldpZHRo KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNaW5XaWR0aChjb25zdCBuc0FTdHJpbmcgJiBh TWluV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWluSGVpZ2h0KG5zQVN0cmlu ZyAmIGFNaW5IZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1pbkhlaWdodChjb25z dCBuc0FTdHJpbmcgJiBhTWluSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1h eFdpZHRoKG5zQVN0cmluZyAmIGFNYXhXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 TWF4V2lkdGgoY29uc3QgbnNBU3RyaW5nICYgYU1heFdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE1heEhlaWdodChuc0FTdHJpbmcgJiBhTWF4SGVpZ2h0KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRNYXhIZWlnaHQoY29uc3QgbnNBU3RyaW5nICYgYU1heEhlaWdodCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQZXJzaXN0KG5zQVN0cmluZyAmIGFQZXJzaXN0KSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQZXJzaXN0KGNvbnN0IG5zQVN0cmluZyAmIGFQZXJz aXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlZnQobnNBU3RyaW5nICYgYUxlZnQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlZnQoY29uc3QgbnNBU3RyaW5nICYgYUxlZnQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5zQVN0cmluZyAmIGFUb3ApID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRvcChjb25zdCBuc0FTdHJpbmcgJiBhVG9wKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGFzb3VyY2VzKG5zQVN0cmluZyAmIGFEYXRhc291cmNl cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YXNvdXJjZXMoY29uc3QgbnNBU3RyaW5n ICYgYURhdGFzb3VyY2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZihuc0FTdHJp bmcgJiBhUmVmKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWYoY29uc3QgbnNBU3RyaW5n ICYgYVJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sdGlwVGV4dChuc0FTdHJp bmcgJiBhVG9vbHRpcFRleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRvb2x0aXBUZXh0 KGNvbnN0IG5zQVN0cmluZyAmIGFUb29sdGlwVGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRTdGF0dXNUZXh0KG5zQVN0cmluZyAmIGFTdGF0dXNUZXh0KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTdGF0dXNUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFTdGF0dXNUZXh0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93RXZlbnRzKFBSQm9vbCAqYUFsbG93RXZlbnRz KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGxvd0V2ZW50cyhQUkJvb2wgYUFsbG93RXZl bnRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlKG5zSURPTUNTU1N0eWxlRGVj bGFyYXRpb24gKiAqYVN0eWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGFiYXNl KG5zSVJERkNvbXBvc2l0ZURhdGFTb3VyY2UgKiAqYURhdGFiYXNlKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEJ1aWxkZXIobnNJWFVMVGVtcGxhdGVCdWlsZGVyICogKmFCdWlsZGVyKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlc291cmNlKG5zSVJERlJlc291cmNlICogKmFS ZXNvdXJjZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250cm9sbGVycyhuc0lDb250 cm9sbGVycyAqICphQ29udHJvbGxlcnMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm94 T2JqZWN0KG5zSUJveE9iamVjdCAqICphQm94T2JqZWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEZvY3VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsaWNrKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgRG9Db21tYW5kKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxlbWVudHNC eUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBjb25zdCBuc0FTdHJpbmcgJiB2YWx1 ZSwgbnNJRE9NTm9kZUxpc3QgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDI2OCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YVUxDb21tYW5k RGlzcGF0Y2hlci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWFVM Q29tbWFuZERpc3BhdGNoZXIuaCIKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5zSUNvbnRy b2xsZXI7CgpjbGFzcyBuc0lDb250cm9sbGVyczsKCmNsYXNzIG5zSURPTVdpbmRvdzsKIyAzMyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YVUxDb21tYW5kRGlzcGF0Y2hlci5oIgpj bGFzcyBuc0lET01YVUxDb21tYW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHhmM2M1MDM2MSwgMHgxNGZlLCAweDExZDMsIHsgMHhiZiwgMHg4NywgMHgwMCwg MHgxMCwgMHg1YSwgMHgxYiwgMHgwNiwgMHgyNyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEZvY3VzZWRFbGVtZW50KG5zSURPTUVsZW1lbnQgKiAqYUZvY3VzZWRFbGVt ZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2N1c2VkRWxlbWVudChuc0lET01FbGVt ZW50ICogYUZvY3VzZWRFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3Vz ZWRXaW5kb3cobnNJRE9NV2luZG93ICogKmFGb2N1c2VkV2luZG93KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRGb2N1c2VkV2luZG93KG5zSURPTVdpbmRvdyAqIGFGb2N1c2VkV2luZG93KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZENvbW1hbmRVcGRhdGVyKG5zSURPTUVsZW1lbnQg KnVwZGF0ZXIsIGNvbnN0IG5zQVN0cmluZyAmIGV2ZW50cywgY29uc3QgbnNBU3RyaW5nICYgdGFy Z2V0cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDb21tYW5kVXBkYXRlcihuc0lE T01FbGVtZW50ICp1cGRhdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZUNvbW1h bmRzKGNvbnN0IG5zQVN0cmluZyAmIGV2ZW50TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb250cm9sbGVyRm9yQ29tbWFuZChjb25zdCBjaGFyICpjb21tYW5kLCBuc0lDb250cm9s bGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250cm9sbGVycyhu c0lDb250cm9sbGVycyAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWR2YW5j ZUZvY3VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV3aW5kRm9jdXModm9pZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZHZhbmNlRm9jdXNJbnRvU3VidHJlZShuc0lET01F bGVtZW50ICplbHQpID0gMDsKCn07CiMgMjY5ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNyeXB0by5oIiAxCiMgMjUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ3J5cHRvLmgiCmNsYXNzIG5zSURPTUNyeXB0byA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNDVlZmJlMCwgMHgxZDUyLCAweDExZDQs IHsgMHg4YSwgMHg3YywgMHgwMCwgMHg2MCwgMHgwOCwgMHhjOCwgMHg0NCwgMHhjMyB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZlcnNpb24obnNBU3RyaW5nICYgYVZl cnNpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2VuZXJhdGVDUk1GUmVxdWVzdChuc0lE T01DUk1GT2JqZWN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbXBvcnRV c2VyQ2VydGlmaWNhdGVzKGNvbnN0IG5zQVN0cmluZyAmIG5pY2tuYW1lLCBjb25zdCBuc0FTdHJp bmcgJiBjbW1mUmVzcG9uc2UsIFBSQm9vbCBkb0ZvcmNlZEJhY2t1cCwgbnNBU3RyaW5nICYgX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3BDaGFsbGVuZ2VSZXNwb25zZShjb25z dCBuc0FTdHJpbmcgJiBjaGFsbGVuZ2UsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmFuZG9tKFBSSW50MzIgbnVtQnl0ZXMsIG5zQVN0cmluZyAmIF9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2lnblRleHQobnNBU3RyaW5nICYgX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGVydChjb25zdCBuc0FTdHJpbmcgJiBtZXNz YWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvZ291dCh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IERpc2FibGVSaWdodENsaWNrKHZvaWQpID0gMDsKCn07CiMgMjcwICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNS TUZPYmplY3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNSTUZP YmplY3QuaCIKY2xhc3MgbnNJRE9NQ1JNRk9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHgxNmRhNDZjMCwgMHgyMDhkLCAweDExZDQsIHsgMHg4YSwgMHg3YywgMHgwMCwg MHg2MCwgMHgwOCwgMHhjOCwgMHg0NCwgMHhjMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFJlcXVlc3QobnNBU3RyaW5nICYgYVJlcXVlc3QpID0gMDsKCn07CiMgMjcx ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTVBrY3MxMS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUGtj czExLmgiCmNsYXNzIG5zSURPTVBrY3MxMSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg5ZmQ0Mjk1MCwgMHgyNWU3LCAweDExZDQsIHsgMHg4YSwgMHg3ZCwgMHgwMCwgMHg2MCwg MHgwOCwgMHhjOCwgMHg0NCwgMHhjMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz dWx0IERlbGV0ZW1vZHVsZShjb25zdCBuc0FTdHJpbmcgJiBtb2R1bGVOYW1lLCBQUkludDMyICpf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZG1vZHVsZShjb25zdCBuc0FTdHJp bmcgJiBtb2R1bGVOYW1lLCBjb25zdCBuc0FTdHJpbmcgJiBsaWJyYXJ5RnVsbFBhdGgsIFBSSW50 MzIgY3J5cHRvTWVjaGFuaXNtRmxhZ3MsIFBSSW50MzIgY2lwaGVyRmxhZ3MsIFBSSW50MzIgKl9y ZXR2YWwpID0gMDsKCn07CiMgMjcyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHVsZG9jL25zSUNvbnRyb2xsZXJzLmgiIDEKIyAxMCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3h1bGRvYy9uc0lDb250cm9sbGVycy5oIgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94dWxkb2MvbnNJQ29udHJvbGxlci5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94dWxkb2MvbnNJQ29udHJvbGxlci5oIgpjbGFzcyBuc0lDb250cm9sbGVyIDogcHVibGlj IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ1YjYxYjgyLCAweDFkYTQsIDB4MTFkMywgeyAw eGJmLCAweDg3LCAweDAwLCAweDEwLCAweDVhLCAweDFiLCAweDA2LCAweDI3IH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDb21tYW5kRW5hYmxlZChjb25zdCBjaGFyICpj b21tYW5kLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3VwcG9y dHNDb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBEb0NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBPbkV2ZW50KGNvbnN0IGNoYXIgKmV2ZW50TmFtZSkgPSAwOwoKfTsK IyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94dWxkb2MvbnNJQ29udHJvbGxlci5oIgpjbGFz cyBuc0lDb21tYW5kUGFyYW1zOwojIDEzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3h1bGRvYy9u c0lDb250cm9sbGVyLmgiCmNsYXNzIG5zSUNvbW1hbmRDb250cm9sbGVyIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGViZTU1MDgwLCAweGM4YTksIDB4MTFkNSwgeyAweGE3LCAw eDNjLCAweGRkLCAweDYyLCAweDBkLCAweDZlLCAweDA0LCAweGJjIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tbWFuZFN0YXRlV2l0aFBhcmFtcyhjb25zdCBjaGFy ICpjb21tYW5kLCBuc0lDb21tYW5kUGFyYW1zICphQ29tbWFuZFBhcmFtcykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBEb0NvbW1hbmRXaXRoUGFyYW1zKGNvbnN0IGNoYXIgKmNvbW1hbmQsIG5z SUNvbW1hbmRQYXJhbXMgKmFDb21tYW5kUGFyYW1zKSA9IDA7Cgp9OwojIDIwMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3h1bGRvYy9uc0lDb250cm9sbGVyLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1l cmF0b3I7CiMgMjExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHVsZG9jL25zSUNvbnRyb2xsZXIu aCIKY2xhc3MgbnNJQ29udHJvbGxlckNvbW1hbmRHcm91cCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHg5ZjgyYzQwNCwgMHgxYzdiLCAweDExZDUsIHsgMHhhNywgMHgzYywgMHhl YywgMHhhNCwgMHgzYywgMHhhOCwgMHgzNiwgMHhmYyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEFkZENvbW1hbmRUb0dyb3VwKGNvbnN0IGNoYXIgKmFDb21tYW5kLCBjb25z dCBjaGFyICphR3JvdXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ29tbWFuZEZy b21Hcm91cChjb25zdCBjaGFyICphQ29tbWFuZCwgY29uc3QgY2hhciAqYUdyb3VwKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IElzQ29tbWFuZEluR3JvdXAoY29uc3QgY2hhciAqYUNvbW1hbmQs IGNvbnN0IGNoYXIgKmFHcm91cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEdyb3Vwc0VudW1lcmF0b3IobnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW51bWVyYXRvckZvckdyb3VwKGNvbnN0IGNo YXIgKmFHcm91cCwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94dWxkb2MvbnNJQ29udHJvbGxlcnMuaCIgMgoKCgoKCgpj bGFzcyBuc0lET01YVUxDb21tYW5kRGlzcGF0Y2hlcjsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3h1bGRvYy9uc0lDb250cm9sbGVycy5oIgpjbGFzcyBuc0lDb250cm9sbGVycyA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNWVkM2EwMSwgMHg3Y2M3LCAweDExZDMsIHsg MHhiZiwgMHg4NywgMHgwMCwgMHgxMCwgMHg1YSwgMHgxYiwgMHgwNiwgMHgyNyB9fTsgcmV0dXJu IGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbW1hbmREaXNwYXRjaGVyKG5zSURPTVhV TENvbW1hbmREaXNwYXRjaGVyICogKmFDb21tYW5kRGlzcGF0Y2hlcikgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0Q29tbWFuZERpc3BhdGNoZXIobnNJRE9NWFVMQ29tbWFuZERpc3BhdGNoZXIg KiBhQ29tbWFuZERpc3BhdGNoZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJv bGxlckZvckNvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCwgbnNJQ29udHJvbGxlciAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q29udHJvbGxlckF0KFBSVWludDMy IGluZGV4LCBuc0lDb250cm9sbGVyICpjb250cm9sbGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IFJlbW92ZUNvbnRyb2xsZXJBdChQUlVpbnQzMiBpbmRleCwgbnNJQ29udHJvbGxlciAqKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJvbGxlckF0KFBSVWludDMy IGluZGV4LCBuc0lDb250cm9sbGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBBcHBlbmRDb250cm9sbGVyKG5zSUNvbnRyb2xsZXIgKmNvbnRyb2xsZXIpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ29udHJvbGxlcihuc0lDb250cm9sbGVyICpjb250cm9sbGVy KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRyb2xsZXJJZChuc0lDb250cm9sbGVy ICpjb250cm9sbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb250cm9sbGVyQnlJZChQUlVpbnQzMiBjb250cm9sbGVySUQsIG5zSUNvbnRyb2xsZXIg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRyb2xsZXJDb3VudChQ UlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAyNzMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSVNlbGVjdGlvbi5oIiAxCiMgMTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSVNlbGVjdGlvbi5oIgpjbGFzcyBuc0lE T01Ob2RlOwoKY2xhc3MgbnNJRE9NUmFuZ2U7CiMgMzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j b250ZW50L25zSVNlbGVjdGlvbi5oIgpjbGFzcyBuc0lTZWxlY3Rpb24gOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YjJjN2VkNTksIDB4ODYzNCwgMHg0MzUyLCB7IDB4OWUsIDB4 MzcsIDB4NTQsIDB4ODQsIDB4YzgsIDB4YjYsIDB4ZTQsIDB4ZTEgfX07IHJldHVybiBpaWQ7fQoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbmNob3JOb2RlKG5zSURPTU5vZGUgKiAqYUFuY2hv ck5vZGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QW5jaG9yT2Zmc2V0KFBSSW50 MzIgKmFBbmNob3JPZmZzZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNO b2RlKG5zSURPTU5vZGUgKiAqYUZvY3VzTm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRGb2N1c09mZnNldChQUkludDMyICphRm9jdXNPZmZzZXQpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SXNDb2xsYXBzZWQoUFJCb29sICphSXNDb2xsYXBzZWQpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VDb3VudChQUkludDMyICphUmFuZ2VDb3VudCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSYW5nZUF0KFBSSW50MzIgaW5kZXgsIG5z SURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbGxhcHNlKG5zSURPTU5v ZGUgKnBhcmVudE5vZGUsIFBSSW50MzIgb2Zmc2V0KSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvY29udGVudC9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEV4dGVu ZChuc0lET01Ob2RlICpwYXJlbnROb2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IENvbGxhcHNlVG9TdGFydCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQ29sbGFwc2VUb0VuZCh2b2lkKSA9IDA7CiMgMTI3ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvY29udGVudC9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRh aW5zTm9kZShuc0lET01Ob2RlICpub2RlLCBQUkJvb2wgZW50aXJlbHlDb250YWluZWQsIFBSQm9v bCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxsQ2hpbGRy ZW4obnNJRE9NTm9kZSAqcGFyZW50Tm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBB ZGRSYW5nZShuc0lET01SYW5nZSAqcmFuZ2UpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg UmVtb3ZlUmFuZ2UobnNJRE9NUmFuZ2UgKnJhbmdlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IFJlbW92ZUFsbFJhbmdlcyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERl bGV0ZUZyb21Eb2N1bWVudCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Vs ZWN0aW9uTGFuZ3VhZ2VDaGFuZ2UoUFJCb29sIGxhbmdSVEwpID0gMDsKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgVG9TdHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAyNzQgIm5z RE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJ Qm94T2JqZWN0LmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lCb3hP YmplY3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveExheW91dE1h bmFnZXIuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveExheW91 dE1hbmFnZXIuaCIKY2xhc3MgbnNJQm94TGF5b3V0TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0 cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7MHhkYzA2Yjg5MCwgMHgxNWExLCAweDQ1YTksIHsgMHhhMSwgMHhhMywg MHhmMSwgMHg0NCwgMHhiNCwgMHgyZSwgMHhlYSwgMHgyOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IExheW91dCh2b2lkKSA9IDA7Cgp9OwojIDg0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbGF5b3V0L25zSUJveExheW91dE1hbmFnZXIuaCIKbnNyZXN1bHQKTlNfTmV3Qm94 TGF5b3V0TWFuYWdlcihuc0lCb3hMYXlvdXRNYW5hZ2VyKiogYVJlc3VsdCk7CiMgMTUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJQm94T2JqZWN0LmgiIDIKCgoKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveFBhaW50TWFuYWdlci5oIiAxCiMgMjUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJQm94UGFpbnRNYW5hZ2VyLmgiCmNsYXNzIG5zSUJv eFBhaW50TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1ZGExZThm MCwgMHg2MjU1LCAweDRiOWMsIHsgMHhhZiwgMHg4MCwgMHhhYSwgMHgzZCwgMHhhZCwgMHg3Ziwg MHgyZiwgMHhkYiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KHZv aWQpID0gMDsKCn07CiMgODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJQm94UGFp bnRNYW5hZ2VyLmgiCm5zcmVzdWx0Ck5TX05ld0JveFBhaW50TWFuYWdlcihuc0lCb3hQYWludE1h bmFnZXIqKiBhUmVzdWx0KTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lC b3hPYmplY3QuaCIgMgoKCgoKCgpjbGFzcyBuc0lET01FbGVtZW50OwojIDM1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveE9iamVjdC5oIgpjbGFzcyBuc0lCb3hPYmplY3QgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Y2FhYmY3NmYsIDB4OWQzNSwgMHg0MDFm LCB7IDB4YmUsIDB4YWMsIDB4MzksIDB4NTUsIDB4ODEsIDB4N2MsIDB4NjQsIDB4NWMgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50KG5zSURPTUVsZW1lbnQg KiAqYUVsZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGF5b3V0TWFuYWdlcihu c0lCb3hMYXlvdXRNYW5hZ2VyICogKmFMYXlvdXRNYW5hZ2VyKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRMYXlvdXRNYW5hZ2VyKG5zSUJveExheW91dE1hbmFnZXIgKiBhTGF5b3V0TWFuYWdl cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWludE1hbmFnZXIobnNJQm94UGFpbnRN YW5hZ2VyICogKmFQYWludE1hbmFnZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhaW50 TWFuYWdlcihuc0lCb3hQYWludE1hbmFnZXIgKiBhUGFpbnRNYW5hZ2VyKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFgoUFJJbnQzMiAqYVgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0WShQUkludDMyICphWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW5YKFBS SW50MzIgKmFTY3JlZW5YKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcmVlblkoUFJJ bnQzMiAqYVNjcmVlblkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgoUFJJbnQz MiAqYVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhlaWdodChQUkludDMyICph SGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5QXNTdXBwb3J0cyhj b25zdCBQUlVuaWNoYXIgKnByb3BlcnR5TmFtZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5QXNTdXBwb3J0cyhjb25zdCBQUlVuaWNo YXIgKnByb3BlcnR5TmFtZSwgbnNJU3VwcG9ydHMgKnZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb3BlcnR5KGNvbnN0IFBSVW5pY2hhciAqcHJvcGVydHlOYW1lLCBQUlVuaWNo YXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KGNvbnN0 IFBSVW5pY2hhciAqcHJvcGVydHlOYW1lLCBjb25zdCBQUlVuaWNoYXIgKnByb3BlcnR5VmFsdWUp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlUHJvcGVydHkoY29uc3QgUFJVbmljaGFy ICpwcm9wZXJ0eU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50Qm94KG5z SURPTUVsZW1lbnQgKiAqYVBhcmVudEJveCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG aXJzdENoaWxkKG5zSURPTUVsZW1lbnQgKiAqYUZpcnN0Q2hpbGQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TGFzdENoaWxkKG5zSURPTUVsZW1lbnQgKiAqYUxhc3RDaGlsZCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0U2libGluZyhuc0lET01FbGVtZW50ICogKmFOZXh0 U2libGluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJ RE9NRWxlbWVudCAqICphUHJldmlvdXNTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldExvb2tBbmRGZWVsTWV0cmljKGNvbnN0IFBSVW5pY2hhciAqcHJvcGVydHlOYW1lLCBQUlVu aWNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDMzOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0lCb3hPYmplY3QuaCIKbnNyZXN1bHQKTlNfTmV3Qm94T2JqZWN0KG5zSUJveE9iamVj dCoqIGFSZXN1bHQpOwojIDI3NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlU2VsZWN0aW9uLmgiIDEKIyAxNyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlU2VsZWN0aW9uLmgiCmNsYXNzIG5zSVRyZWVCb3hP YmplY3Q7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJVHJlZVNlbGVjdGlv bi5oIgpjbGFzcyBuc0lUcmVlU2VsZWN0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweGY4YTEzMzY0LCAweDE4NGUsIDB4NGRhMywgeyAweGJhLCAweGRmLCAweDVjLCAweDA0 LCAweDgzLCAweDc1LCAweDM3LCAweGY4IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VHJlZShuc0lUcmVlQm94T2JqZWN0ICogKmFUcmVlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRUcmVlKG5zSVRyZWVCb3hPYmplY3QgKiBhVHJlZSkgPSAwOwoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDb3VudChQUkludDMyICphQ291bnQpID0gMDsKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzU2VsZWN0ZWQoUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdChQUkludDMyIGluZGV4KSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRpbWVkU2VsZWN0KFBSSW50MzIgaW5kZXgsIFBSSW50 MzIgZGVsYXkpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9nZ2xlU2VsZWN0KFBSSW50 MzIgaW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSYW5nZWRTZWxlY3QoUFJJ bnQzMiBzdGFydEluZGV4LCBQUkludDMyIGVuZEluZGV4LCBQUkJvb2wgYXVnbWVudCkgPSAwOwoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhclJhbmdlKFBSSW50MzIgc3RhcnRJbmRleCwgUFJJ bnQzMiBlbmRJbmRleCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhclNlbGVjdGlv bih2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmVydFNlbGVjdGlvbih2b2lk KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsbCh2b2lkKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJhbmdlQ291bnQoUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSYW5nZUF0KFBSSW50MzIgaSwgUFJJbnQzMiAqbWluLCBQ UkludDMyICptYXgpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZVNlbGVj dGlvbih2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdFNlbGVjdGlvbihQ UkludDMyIGluZGV4LCBQUkludDMyIGNvdW50KSA9IDA7CiMgMTMxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbGF5b3V0L25zSVRyZWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNl bGVjdEV2ZW50c1N1cHByZXNzZWQoUFJCb29sICphU2VsZWN0RXZlbnRzU3VwcHJlc3NlZCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0RXZlbnRzU3VwcHJlc3NlZChQUkJvb2wgYVNl bGVjdEV2ZW50c1N1cHByZXNzZWQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1 cnJlbnRJbmRleChQUkludDMyICphQ3VycmVudEluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRDdXJyZW50SW5kZXgoUFJJbnQzMiBhQ3VycmVudEluZGV4KSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTaGlmdFNlbGVjdFBpdm90KFBSSW50MzIgKmFTaGlmdFNlbGVjdFBp dm90KSA9IDA7Cgp9OwojIDI3NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlQ29udGVudFZpZXcuaCIgMQojIDI5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVDb250ZW50Vmlldy5oIgpjbGFzcyBuc0lUcmVl Q29udGVudFZpZXcgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OTcyYWU5ZmYs IDB4YzdiMywgMHg0YjYwLCB7IDB4YTUsIDB4MWUsIDB4YTIsIDB4MGEsIDB4OWQsIDB4ZTMsIDB4 NjksIDB4NDcgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290 KG5zSURPTUVsZW1lbnQgKiAqYVJvb3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SXRlbUF0SW5kZXgoUFJJbnQzMiBpbmRleCwgbnNJRE9NRWxlbWVudCAqKl9yZXR2YWwpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5kZXhPZkl0ZW0obnNJRE9NRWxlbWVudCAqaXRl bSwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAyNzcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJVHJlZVZpZXcuaCIgMQojIDEw ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlQm94T2JqZWN0LmgiIDEKIyAyMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlQm94T2JqZWN0LmgiCmNsYXNzIG5zSVRyZWVW aWV3OwoKY2xhc3MgbnNJVHJlZVNlbGVjdGlvbjsKCmNsYXNzIG5zSURPTUV2ZW50OwojIDM1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVCb3hPYmplY3QuaCIKY2xhc3MgbnNJ VHJlZUJveE9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0NDQ4MTM4 NSwgMHhiMWRhLCAweDQ4MGEsIHsgMHg5MCwgMHgyNiwgMHgxZiwgMHgwMiwgMHgzMiwgMHhjNCwg MHhlZSwgMHg1OSB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Vmlldyhuc0lUcmVlVmlldyAqICphVmlldykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmll dyhuc0lUcmVlVmlldyAqIGFWaWV3KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZv Y3VzZWQoUFJCb29sICphRm9jdXNlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9jdXNl ZChQUkJvb2wgYUZvY3VzZWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHJlZUJv ZHkobnNJRE9NRWxlbWVudCAqICphVHJlZUJvZHkpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U2VsZWN0aW9uKG5zSVRyZWVTZWxlY3Rpb24gKiAqYVNlbGVjdGlvbikgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb3dIZWlnaHQoUFJJbnQzMiAqYVJvd0hlaWdodCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2x1bW5JbmRleChjb25zdCBQUlVuaWNoYXIg KmNvbElELCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dENvbHVtbklEKFBSSW50MzIgY29sSW5kZXgsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0S2V5Q29sdW1uSW5kZXgoUFJJbnQzMiAqX3JldHZhbCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaXJzdFZpc2libGVSb3coUFJJbnQzMiAq X3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0VmlzaWJsZVJvdyhQ UkludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VDb3Vu dChQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuc3VyZVJv d0lzVmlzaWJsZShQUkludDMyIGluZGV4KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNj cm9sbFRvUm93KFBSSW50MzIgaW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT Y3JvbGxCeUxpbmVzKFBSSW50MzIgbnVtTGluZXMpID0gMDsKIyAxMzcgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9sYXlvdXQvbnNJVHJlZUJveE9iamVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Ny b2xsQnlQYWdlcyhQUkludDMyIG51bVBhZ2VzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEludmFsaWRhdGUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlQ29s dW1uKGNvbnN0IFBSVW5pY2hhciAqY29sSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW52 YWxpZGF0ZVJvdyhQUkludDMyIGluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmFs aWRhdGVDZWxsKFBSSW50MzIgcm93LCBjb25zdCBQUlVuaWNoYXIgKmNvbElEKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEludmFsaWRhdGVQcmltYXJ5Q2VsbChQUkludDMyIHJvdykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmFuZ2UoUFJJbnQzMiBzdGFydEluZGV4LCBQ UkludDMyIGVuZEluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmFsaWRhdGVTY3Jv bGxiYXIodm9pZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93QXQoUFJJbnQz MiB4LCBQUkludDMyIHksIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNzcgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9sYXlvdXQvbnNJVHJlZUJveE9iamVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q2VsbEF0KFBSSW50MzIgeCwgUFJJbnQzMiB5LCBQUkludDMyICpyb3csIFBSVW5pY2hhciAq KmNvbElELCBQUlVuaWNoYXIgKipjaGlsZEVsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb29yZHNGb3JDZWxsSXRlbShQUkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJ RCwgY29uc3QgUFJVbmljaGFyICplbGVtZW50LCBQUkludDMyICp4LCBQUkludDMyICp5LCBQUklu dDMyICp3aWR0aCwgUFJJbnQzMiAqaGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IElzQ2VsbENyb3BwZWQoUFJJbnQzMiByb3csIGNvbnN0IG5zQVN0cmluZyAmIGNvbElELCBQUkJv b2wgKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJ VHJlZUJveE9iamVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUm93Q291bnRDaGFuZ2VkKFBSSW50 MzIgaW5kZXgsIFBSSW50MzIgY291bnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25E cmFnRW50ZXIobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9u RHJhZ0V4aXQobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9u RHJhZ092ZXIobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9u RHJhZ0Ryb3AobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENsZWFyU3R5bGVBbmRJbWFnZUNhY2hlcyh2b2lkKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiIDIKIyAyNSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lUcmVlVmlldy5oIgpjbGFzcyBuc0lUcmVlU2VsZWN0aW9uOwojIDM1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiCmNsYXNzIG5zSVRy ZWVWaWV3IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDU4YTUzNzM0LCAweDE4 MzcsIDB4NGYzMCwgeyAweDliLCAweGZkLCAweGVlLCAweDU4LCAweGY2LCAweDNjLCAweGEwLCAw eDQ5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93Q291bnQo UFJJbnQzMiAqYVJvd0NvdW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVj dGlvbihuc0lUcmVlU2VsZWN0aW9uICogKmFTZWxlY3Rpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFNlbGVjdGlvbihuc0lUcmVlU2VsZWN0aW9uICogYVNlbGVjdGlvbikgPSAwOwoKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvd1Byb3BlcnRpZXMoUFJJbnQzMiBpbmRleCwgbnNJ U3VwcG9ydHNBcnJheSAqcHJvcGVydGllcykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldENlbGxQcm9wZXJ0aWVzKFBSSW50MzIgcm93LCBjb25zdCBQUlVuaWNoYXIgKmNvbElELCBu c0lTdXBwb3J0c0FycmF5ICpwcm9wZXJ0aWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbnN0IFBSVW5pY2hhciAqY29sSUQsIG5zSURPTUVsZW1l bnQgKmNvbEVsdCwgbnNJU3VwcG9ydHNBcnJheSAqcHJvcGVydGllcykgPSAwOwoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgSXNDb250YWluZXIoUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzQ29udGFpbmVyT3BlbihQUkludDMyIGluZGV4 LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDb250YWluZXJF bXB0eShQUkludDMyIGluZGV4LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyA5NiAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlVmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNT ZXBhcmF0b3IoUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBJc1NvcnRlZChQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDYW5Ecm9wT24oUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkRyb3BCZWZvcmVBZnRlcihQUkludDMyIGluZGV4 LCBQUkJvb2wgYmVmb3JlLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIGVudW0geyBpbkRy b3BCZWZvcmUgPSAwIH07CgogIGVudW0geyBpbkRyb3BPbiA9IDEgfTsKCiAgZW51bSB7IGluRHJv cEFmdGVyID0gMiB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcm9wKFBSSW50MzIgcm93LCBQUklu dDMyIG9yaWVudGF0aW9uKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnRJ bmRleChQUkludDMyIHJvd0luZGV4LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CiMgMTQzICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBIYXNOZXh0U2libGluZyhQUkludDMyIHJvd0luZGV4LCBQUkludDMyIGFmdGVySW5kZXgsIFBS Qm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExldmVsKFBS SW50MzIgaW5kZXgsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRJbWFnZVNyYyhQUkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwgbnNB U3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCgoKCiAgZW51bSB7IHByb2dyZXNzTm9ybWFsID0gMSB9 OwoKICBlbnVtIHsgcHJvZ3Jlc3NVbmRldGVybWluZWQgPSAyIH07CgogIGVudW0geyBwcm9ncmVz c05vbmUgPSAzIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2dyZXNzTW9kZShQUkludDMy IHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2VsbFZhbHVlKFBSSW50MzIgcm93LCBjb25zdCBQUlVu aWNoYXIgKmNvbElELCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRDZWxsVGV4dChQUkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwg bnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUcmVl KG5zSVRyZWVCb3hPYmplY3QgKnRyZWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9n Z2xlT3BlblN0YXRlKFBSSW50MzIgaW5kZXgpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg Q3ljbGVIZWFkZXIoY29uc3QgUFJVbmljaGFyICpjb2xJRCwgbnNJRE9NRWxlbWVudCAqZWx0KSA9 IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3Rpb25DaGFuZ2VkKHZvaWQpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3ljbGVDZWxsKFBSSW50MzIgcm93LCBjb25zdCBQUlVu aWNoYXIgKmNvbElEKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNFZGl0YWJsZShQ UkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENlbGxUZXh0KFBSSW50MzIgcm93LCBjb25zdCBQ UlVuaWNoYXIgKmNvbElELCBjb25zdCBQUlVuaWNoYXIgKnZhbHVlKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgUGVyZm9ybUFjdGlvbihjb25zdCBQUlVuaWNoYXIgKmFjdGlvbikgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQZXJmb3JtQWN0aW9uT25Sb3coY29uc3QgUFJVbmlj aGFyICphY3Rpb24sIFBSSW50MzIgcm93KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBl cmZvcm1BY3Rpb25PbkNlbGwoY29uc3QgUFJVbmljaGFyICphY3Rpb24sIFBSSW50MzIgcm93LCBj b25zdCBQUlVuaWNoYXIgKmNvbElEKSA9IDA7Cgp9OwojIDI3OCAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YUGF0aEV2YWx1YXRvci5o IiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWFBhdGhFdmFsdWF0b3Iu aCIKY2xhc3MgbnNJRE9NWFBhdGhOU1Jlc29sdmVyOwoKY2xhc3MgbnNJRE9NWFBhdGhSZXN1bHQ7 CgpjbGFzcyBuc0lET01YUGF0aEV4cHJlc3Npb247CgpjbGFzcyBYUGF0aEV4Y2VwdGlvbjsKIyAz MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YUGF0aEV2YWx1YXRvci5oIgpjbGFz cyBuc0lET01YUGF0aEV2YWx1YXRvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHg3NTUwNmY4YSwgMHhiNTA0LCAweDExZDUsIHsgMHhhNywgMHhmMiwgMHhjYSwgMHgxMCwgMHg4 YSwgMHhiOCwgMHhiNiwgMHhmYyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENyZWF0ZUV4cHJlc3Npb24oY29uc3QgbnNBU3RyaW5nICYgZXhwcmVzc2lvbiwgbnNJRE9NWFBh dGhOU1Jlc29sdmVyICpyZXNvbHZlciwgbnNJRE9NWFBhdGhFeHByZXNzaW9uICoqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVOU1Jlc29sdmVyKG5zSURPTU5vZGUgKm5v ZGVSZXNvbHZlciwgbnNJRE9NWFBhdGhOU1Jlc29sdmVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBFdmFsdWF0ZShjb25zdCBuc0FTdHJpbmcgJiBleHByZXNzaW9uLCBuc0lE T01Ob2RlICpjb250ZXh0Tm9kZSwgbnNJRE9NWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciwgUFJV aW50MTYgdHlwZSwgbnNJRE9NWFBhdGhSZXN1bHQgKnJlc3VsdCwgbnNJRE9NWFBhdGhSZXN1bHQg KipfcmV0dmFsKSA9IDA7Cgp9OwojIDI3OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMzEyICJu c0RPTUNsYXNzSW5mby5jcHAiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJ SW1hZ2VEb2N1bWVudC5oIiAxCiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25z SUltYWdlRG9jdW1lbnQuaCIKY2xhc3MgbnNJSW1hZ2VEb2N1bWVudCA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhiNDgyZjZkOCwgMHg0MGE5LCAweDRmMjAsIHsgMHg4OSwgMHhm MywgMHg3NywgMHgyZCwgMHg0MSwgMHg3YSwgMHg0YywgMHg4MSB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlUmVzaXppbmdFbmFibGVkKFBSQm9vbCAqYUltYWdl UmVzaXppbmdFbmFibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlSXNPdmVy Zmxvd2luZyhQUkJvb2wgKmFJbWFnZUlzT3ZlcmZsb3dpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0SW1hZ2VJc1Jlc2l6ZWQoUFJCb29sICphSW1hZ2VJc1Jlc2l6ZWQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgU2hyaW5rVG9GaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZXN0b3JlSW1hZ2Uodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb2dnbGVJ bWFnZVNpemUodm9pZCkgPSAwOwoKfTsKIyAzMTMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoKc3Rh dGljIGNvbnN0IG5zQ0lEIGtDUGx1Z2luTWFuYWdlckNJRCA9IHsgMHhjZTc2ODk5MCwgMHg1YTRl LCAweDExZDIsIHsweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdh fSB9OwpzdGF0aWMgY29uc3QgbnNDSUQga0RPTVNPRl9DSUQgPSB7IDB4OWViNzYwZjAsIDB4NDM4 MCwgMHgxMWQyLCB7MHhiMywgMHgyOCwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHgzOCwgMHg1 OX0gfTsKIyAzODQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIKc3RhdGljIG5zRE9NQ2xhc3NJbmZvRGF0 YSBzQ2xhc3NJbmZvRGF0YVtdID0gewojIDM5NCAibnNET01DbGFzc0luZm8uY3BwIgogIHsgIldp bmRvdyIsIHsgbnNXaW5kb3dTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9T RVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfR0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0ZJTkFMSVpFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0VOVU1F UkFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UsIDEsIH0s CiMgNDA2ICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgeyAiTG9jYXRpb24iLCB7IG5zTG9jYXRpb25T SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllf SU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkg JiB+bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSwgMSwgfSwK CgoKICB7ICJOYXZpZ2F0b3IiLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BS T1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9E U19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1Jf U0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFN RVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3Jp cHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiUGx1Z2luIiwg eyBuc1BsdWdpblNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVS RkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwK CiAgeyAiUGx1Z2luQXJyYXkiLCB7IG5zUGx1Z2luQXJyYXlTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1df UFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZP Ul9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9O QU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUp IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9HRVRQUk9QRVJUWSksIDEsIH0sCgogIHsgIk1pbWVUeXBlIiwgeyBuc0RPTUdlbmVyaWNT SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllf SU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSks IDEsIH0sCgogIHsgIk1pbWVUeXBlQXJyYXkiLCB7IG5zTWltZVR5cGVBcnJheVNIOjpkb0NyZWF0 ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tf SU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1Rf SU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf UE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNF IHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiQmFyUHJvcCIsIHsgbnNE T01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwg bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9F TlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpLCAxLCB9LAoKICB7ICJIaXN0b3J5IiwgeyBuc0hpc3RvcnlTSDo6ZG9DcmVhdGUg fSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxM T1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lO U1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lO VEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BP U1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSksIDEsIH0sCgogIHsgIlNjcmVlbiIsIHsgbnNET01H ZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKCgogIHsgIlhNTERvY3VtZW50IiwgeyBuc0RvY3VtZW50U0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf QVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZM RUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVS RkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfRU5VTUVSQVRFLCAxLCB9LAoKCiAgeyAiRG9jdW1lbnRUeXBlIiwgeyBuc05vZGVTSDo6 ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf UkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9J TlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSwgMSwgfSwKCiAgeyAi RE9NSW1wbGVtZW50YXRpb24iLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BS T1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9E U19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1Jf U0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFN RVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3Jp cHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiRE9NRXhjZXB0 aW9uIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5H X1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBF IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FD Q0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkRvY3VtZW50RnJhZ21lbnQiLCB7IG5z RE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf RU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJG QUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiRWxlbWVudCIsIHsgbnNFbGVtZW50U0g6OmRvQ3JlYXRl IH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJBdHRyIiwgeyBuc0RPTUdl bmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSksIDEsIH0sCgogIHsgIlRleHQiLCB7IG5zTm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1df UFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZP Ul9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9O QU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUp IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpLCAxLCB9LAoKICB7ICJDb21tZW50IiwgeyBuc05vZGVT SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVS WV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYg fm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSwgMSwgfSwKCiAg eyAiQ0RBVEFTZWN0aW9uIiwgeyBuc05vZGVTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9E U19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19Q Uk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBU QUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxl OjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJF Q1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZKSwgMSwgfSwKICB7ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCB7IG5z Tm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpLCAxLCB9 LAoKICB7ICJFbnRpdHkiLCB7IG5zTm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgobnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BS T1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRB QkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf Q0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVD UkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkpLCAxLCB9LAogIHsgIkVudGl0eVJlZmVyZW5jZSIsIHsgbnNOb2RlU0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllf SU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5u c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSksIDEsIH0sCiAgeyAi Tm90YXRpb24iLCB7IG5zTm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgobnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklO R19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQ RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tB Q0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNT SU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkpLCAxLCB9LAogIHsgIk5vZGVMaXN0IiwgeyBuc0FycmF5U0g6OmRvQ3JlYXRlIH0s IDAsIDAsIDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNU QU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRF UkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NU Q1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBu c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAogIHsgIk5hbWVkTm9kZU1hcCIsIHsgbnNO YW1lZE5vZGVNYXBTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSksIDEsIH0s CgoKCgoKICB7ICJTdHlsZVNoZWV0TGlzdCIsIHsgbnNTdHlsZVNoZWV0TGlzdFNIOjpkb0NyZWF0 ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tf SU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1Rf SU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf UE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNF IHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCgoKCiAgeyAiRXZlbnQiLCB7IG5z RE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf RU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJG QUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiTXV0YXRpb25FdmVudCIsIHsgbnNET01HZW5lcmljU0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9S RUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lO VEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAx LCB9LAoKCgogIHsgIkhUTUxEb2N1bWVudCIsIHsgbnNIVE1MRG9jdW1lbnRTSDo6ZG9DcmVhdGUg fSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tf SU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1Rf SU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf UE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNF IHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9FTlVNRVJBVEUsIDEsIH0sCgoKICB7ICJIVE1MQ29sbGVjdGlvbiIsIHsgbnNIVE1MQ29sbGVj dGlvblNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAi SFRNTE9wdGlvbkNvbGxlY3Rpb24iLCB7IG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSDo6ZG9DcmVh dGUgfSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZLCAxLCB9LAoKCgogIHsgIkhUTUxDb2xsZWN0aW9uIiwgeyBuc0Zvcm1Db250cm9s TGlzdFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCgogIHsg IkhUTUxDb2xsZWN0aW9uIiwgeyBuc0hUTUxDb2xsZWN0aW9uU0g6OmRvQ3JlYXRlIH0sIDAsIDAs IDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1Bf TU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9G T1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0Vf TkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRF KSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENT Y3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAoKCgoKICB7ICJIVE1MQW5jaG9yRWxlbWVudCIsIHsg bnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9T RVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9f SU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf U0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwg fSwKCiAgeyAiSFRNTEFwcGxldEVsZW1lbnQiLCB7IG5zSFRNTEFwcGxldEVsZW1lbnRTSDo6ZG9D cmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JF RkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5U RVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxBcmVhRWxl bWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19E VVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9U T1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJM RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NI RUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpD TEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JF QVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSwgMSwgfSwKCiAgeyAiSFRNTEJSRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0Ny ZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRF UkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRh YmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTEJhc2VFbGVt ZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RV UklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RP VFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxF IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hF Q0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNM QVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVB VEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09O TFkpLCAxLCB9LAoKICB7ICJIVE1MQmFzZUZvbnRFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZ X0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkp IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MQm9k eUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxCdXR0b25FbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50 U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQ Uk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVX UkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FV RVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09O TFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkg JiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQ Q1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1M RExpc3RFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgo KCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9T Q1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1F UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MRGVsRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVu dFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVM UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05F V1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9R VUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRN TERpcmVjdG9yeUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxEaXZFbGVtZW50IiwgeyBuc0hUTUxF bGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwg bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9F TlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9Q RVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYg fm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7 ICJIVE1MRW1iZWRFbGVtZW50IiwgeyBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0g6OmRvQ3JlYXRl IH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MRmllbGRTZXRFbGVt ZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RV UklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RP VFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxF IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hF Q0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNM QVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVB VEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09O TFkpLCAxLCB9LAoKICB7ICJIVE1MRm9udEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9D cmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JF RkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5U RVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxGb3JtRWxl bWVudCIsIHsgbnNIVE1MRm9ybUVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9ORVdFTlVNRVJBVEUsIDEsIH0sCgoKCiAgeyAiSFRNTEZyYW1lRWxlbWVu dCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJ TkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZ UEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNL QUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFT U0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRF IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSwgMSwgfSwKCiAgeyAiSFRNTEZyYW1lU2V0RWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpk b0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf UkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9J TlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3Jp cHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTEhSRWxl bWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19E VVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9U T1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJM RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NI RUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpD TEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JF QVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSwgMSwgfSwKCiAgeyAiSFRNTEhlYWRFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRv Q3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9S RUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lO VEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MSGVhZGlu Z0VsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxIdG1sRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNI Ojpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVS WV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYg fm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENT Y3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTElG cmFtZUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgo KChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNf VE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1ND UklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVS RkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxJbWFnZUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1l bnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZ KSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhU TUxJbnB1dEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwg KCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9S X1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05B TUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxJbnNFbGVtZW50IiwgeyBuc0hUTUxFbGVt ZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5z SVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJI VE1MSXNJbmRleEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxMSUVsZW1lbnQiLCB7IG5zSFRNTEVs ZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsg IkhUTUxMYWJlbEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxMZWdlbmRFbGVtZW50IiwgeyBuc0hU TUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQ Uk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK ICB7ICJIVE1MTGlua0VsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFO Q0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJG QUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENS RUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxNYXBFbGVtZW50IiwgeyBuc0hU TUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQ Uk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK ICB7ICJIVE1MTWVudUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFO Q0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJG QUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENS RUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxNZXRhRWxlbWVudCIsIHsgbnNI VE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQ Uk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5U RVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VU UFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ KSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwK CiAgeyAiSFRNTE1vZEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFO Q0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJG QUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENS RUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxPTGlzdEVsZW1lbnQiLCB7IG5z SFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0s CgogIHsgIkhUTUxPYmplY3RFbGVtZW50IiwgeyBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0g6OmRv Q3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9S RUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lO VEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MT3B0R3Jv dXBFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgo bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RP X1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJ UFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9Q UkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MT3B0aW9uRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVu dFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVM UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05F V1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9R VUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRN TFBhcmFncmFwaEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxQYXJhbUVsZW1lbnQiLCB7IG5zSFRN TEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVS RkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBS T1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkg JiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgog IHsgIkhUTUxQcmVFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAs IDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxM T1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNF X0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFD RV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVB VEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5G T19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MUXVvdGVFbGVtZW50IiwgeyBuc0hU TUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQ Uk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK ICB7ICJIVE1MU2NyaXB0RWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAw LCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNU QU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRF UkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NU Q1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBu c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFT U0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTFNlbGVjdEVsZW1lbnQiLCB7 IG5zSFRNTFNlbGVjdEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVS SU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9U WVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVD S0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xB U1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFU RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9B RERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05M WSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZLCAxLCB9LAoKCiAgeyAiSFRN TFNwYWNlckVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwg KCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9S X1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05B TUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxTcGFuRWxlbWVudCIsIHsgbnNIVE1MRWxl bWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf REVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5V TV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNF U19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVS VFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5u c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAi SFRNTFN0eWxlRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1Bf TU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9G T1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0Vf TkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRF KSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENT Y3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9f SU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQiLCB7 IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf U0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VT UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEs IH0sCgogIHsgIkhUTUxUYWJsZUNlbGxFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf QVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZM RUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVS RkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGFibGVDb2xF bGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BS T1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRB QkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf Q0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVD UkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGFibGVDb2xHcm91cEVsZW1lbnQiLCB7IG5zSFRNTEVs ZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsg IkhUTUxUYWJsZUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxUYWJsZVJvd0VsZW1lbnQiLCB7IG5z SFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0s CgogIHsgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf QVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZM RUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVS RkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGV4dEFyZWFF bGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BS T1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRB QkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf Q0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVD UkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGl0bGVFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZ X0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkp IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVUxp c3RFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgo bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RP X1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJ UFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9Q UkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVW5rbm93bkVsZW1lbnQiLCB7IG5zSFRNTEVsZW1l bnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZ KSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhU TUxXQlJFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgo KCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9T Q1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1F UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpLCAxLCB9LAoKCgogIHsgIkNTU1N0eWxlUnVsZSIsIHsgbnNET01HZW5lcmlj U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZ X0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkp LCAxLCB9LAoKICB7ICJDU1NDaGFyc2V0UnVsZSIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRl IH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxM T1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lO U1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lO VEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BP U1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7 ICJDU1NJbXBvcnRSdWxlIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwg KChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNf VE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1ND UklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkNTU01lZGlhUnVs ZSIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19S RVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NF U1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5G T19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJDU1NOYW1lU3BhY2VSdWxlIiwgeyBuc0RP TUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIkNTU1J1bGVMaXN0IiwgeyBuc0NTU1J1bGVMaXN0U0g6OmRv Q3JlYXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRF UkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAoKICB7ICJDU1NHcm91cFJ1 bGVSdWxlTGlzdCIsIHsgbnNDU1NSdWxlTGlzdFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dF VFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiTWVkaWFMaXN0IiwgeyBuc01lZGlhTGlzdFNIOjpkb0Ny ZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FT S19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVD VF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZB Q0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwK CiAgeyAiU3R5bGVTaGVldExpc3QiLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAw LCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiQ1NTU3R5bGVTaGVldCIsIHsgbnNET01H ZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKICB7ICJDU1NTdHlsZURlY2xhcmF0aW9uIiwgeyBuc0NTU1N0eWxlRGVj bFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdS RVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVF UllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05M WSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiQ29t cHV0ZWRDU1NTdHlsZURlY2xhcmF0aW9uIiwgeyBuc0NTU1N0eWxlRGVjbFNIOjpkb0NyZWF0ZSB9 LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNU QU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRF UkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NU Q1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBu c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAi Uk9DU1NQcmltaXRpdmVWYWx1ZSIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAs IDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1df UFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZP Ul9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9O QU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUp IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKCgogIHsgIlJhbmdl IiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf U0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VT UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIlNlbGVjdGlvbiIsIHsgbnNET01HZW5lcmlj U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsIChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSksIDEsIH0sCgoKCiAgeyAiWFVMRG9jdW1lbnQiLCB7IG5zRG9j dW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9FTlVNRVJBVEUsIDEsIH0sCgoKICB7ICJYVUxFbGVtZW50Iiwg eyBuc0VsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0s CgogIHsgIlhVTENvbW1hbmREaXNwYXRjaGVyIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUg fSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5T VEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5U RVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9T VENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwg bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsg Ik5vZGVMaXN0IiwgeyBuc0FycmF5U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJ TkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZ UEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNL QUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFT U0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVS VFkpLCAxLCB9LAoKICB7ICJOYW1lZE5vZGVNYXAiLCB7IG5zTmFtZWROb2RlTWFwU0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FT S19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVD VF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZB Q0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAoKICB7ICJBdHRyIiwgeyBuc0RP TUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIlhVTENvbnRyb2xsZXJzIiwgeyBuc0RPTUdlbmVyaWNTSDo6 ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSwgMSwgfSwKCiAgeyAiQm94T2JqZWN0IiwgeyBuc0RPTUdlbmVyaWNT SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf UkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QT1NUQ1JFQVRFKSwgMSwgfSwKCiAgeyAiVHJlZVNlbGVjdGlvbiIsIHsgbnNET01H ZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsIChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSksIDEsIH0sCgogIHsgIlRyZWVDb250ZW50VmlldyIs IHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsIChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSksIDEsIH0sCgoKCiAgeyAiQ3J5cHRv IiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf U0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VT UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkNSTUZPYmplY3QiLCB7IG5zRE9NR2VuZXJp Y1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVS WV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSwgMSwgfSwKCiAgeyAiUGtjczExIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCiMgNzcwICJuc0RP TUNsYXNzSW5mby5jcHAiCiAgeyAiVHJlZVdhbGtlciIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK CgoKCiAgeyAiQ1NTUmVjdCIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAs ICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9T Q1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1F UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKCgogIHsgIkNocm9tZVdp bmRvdyIsIHsgbnNXaW5kb3dTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9T RVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfR0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0ZJTkFMSVpFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0VOVU1FUkFURSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UsIDEsIH0sCiMgNzkyICJuc0RPTUNsYXNzSW5m by5jcHAiCiAgeyAiQ1NTUkdCQ29sb3IiLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAw LCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFM TE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BS T1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5D RV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZB Q0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JF QVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lY UENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCgogIHsgIlJh bmdlRXhjZXB0aW9uIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgoKICB7ICJDU1NWYWx1ZUxpc3Qi LCB7IG5zQ1NTVmFsdWVMaXN0U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdf UkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5z SVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUND RVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lO Rk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkp LCAxLCB9LAoKCiAgeyAiSFRNTENvbGxlY3Rpb24iLCB7IG5zQ29udGVudExpc3RTSDo6ZG9DcmVh dGUgfSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSwgMSwgfSwKCgoKCiAgeyAiWE1MU3R5bGVzaGVldFByb2Nlc3NpbmdJbnN0cnVjdGlv biIsIHsgbnNOb2RlU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSksIDEsIH0sCgoKICB7ICJJbWFnZURvY3VtZW50IiwgeyBuc0hUTUxEb2N1bWVudFNIOjpkb0Ny ZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRF UkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0RFTFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0VOVU1FUkFURSwgMSwgfSwKCgp9OwoKbnNJWFBDb25uZWN0ICpuc0RPTUNsYXNzSW5m bzo6c1hQQ29ubmVjdCA9IDA7Cm5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlciAqbnNET01DbGFzc0lu Zm86OnNTZWNNYW4gPSAwOwpQUkJvb2wgbnNET01DbGFzc0luZm86OnNJc0luaXRpYWxpemVkID0g MDsKCgoKanN2YWwgbnNET01DbGFzc0luZm86OnNUb3BfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Njcm9s bGJhcnNfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEp Owpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0xvY2F0aW9uX2lkID0gKCgoanN2YWwpKDAgLSAoKGpz dmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNDb21w b25lbnRzX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KTsKanN2YWwgbnNET01DbGFzc0luZm86OnNDb25zdHJ1Y3Rvcl9pZCA9ICgoKGpzdmFsKSgwIC0g KChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpz X2NvbnRlbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0NvbnRlbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgo anN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Np ZGViYXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEp Owpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c01lbnViYXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Rvb2xi YXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpq c3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0xvY2F0aW9uYmFyX2lkID0gKCgoanN2YWwpKDAgLSAoKGpz dmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNQZXJz b25hbGJhcl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4 MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzU3RhdHVzYmFyX2lkID0gKCgoanN2YWwpKDAgLSAo KGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNE aXJlY3Rvcmllc19pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzQ29udHJvbGxlcnNfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5m bzo6c0xlbmd0aF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzSW5uZXJIZWlnaHRfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5m bzo6c0lubmVyV2lkdGhfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c091dGVySGVpZ2h0X2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNPdXRlcldpZHRoX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkp IDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNTY3JlZW5YX2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNTY3JlZW5ZX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8 IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNTdGF0dXNfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5m bzo6c05hbWVfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ubW91c2Vkb3duX2lkID0gKCgoanN2YWwpKDAg LSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86 OnNPbm1vdXNldXBfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09uY2xpY2tfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6 c09uY29udGV4dG1lbnVfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ubW91c2VvdmVyX2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNPbm1vdXNlb3V0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkp IDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbmtleWRvd25faWQgPSAoKChq c3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNs YXNzSW5mbzo6c09ua2V5dXBfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkg PDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ua2V5cHJlc3NfaWQgPSAoKChq c3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNs YXNzSW5mbzo6c09ubW91c2Vtb3ZlX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMw KSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbmZvY3VzX2lkID0gKCgo anN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01D bGFzc0luZm86OnNPbmJsdXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkg PDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09uc3VibWl0X2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNPbnJlc2V0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8 IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbmNoYW5nZV9pZCA9ICgoKGpzdmFs KSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJ bmZvOjpzT25zZWxlY3RfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ubG9hZF9pZCA9ICgoKGpzdmFsKSgw IC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZv OjpzT251bmxvYWRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09uYWJvcnRfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6 c09uZXJyb3JfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ucGFpbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgo anN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09u cmVzaXplX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbnNjcm9sbF9pZCA9ICgoKGpzdmFsKSgwIC0gKChq c3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzU2Ny b2xsSW50b1ZpZXdfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Njcm9sbFhfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6 c1Njcm9sbFlfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09wZW5faWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0l0ZW1f aWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3Zh bCBuc0RPTUNsYXNzSW5mbzo6c0VudW1lcmF0ZV9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkx IDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzTmF2aWdhdG9y X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2 YWwgbnNET01DbGFzc0luZm86OnNEb2N1bWVudF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkx IDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzV2luZG93X2lk ID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwg bnNET01DbGFzc0luZm86OnNGcmFtZXNfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAo MzApKSkgPDwgMSkgfCAweDEpOwoKY29uc3QgSlNDbGFzcyAqbnNET01DbGFzc0luZm86OnNPYmpl Y3RDbGFzcyA9IDA7CgpQUkJvb2wgbnNET01DbGFzc0luZm86OnNEb1NlY3VyaXR5Q2hlY2tJbkFk ZFByb3BlcnR5ID0gMTsKCgpzdGF0aWMgaW5saW5lIEpTT2JqZWN0ICoKR2V0R2xvYmFsSlNPYmpl Y3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaikKewogIEpTT2JqZWN0ICp0bXA7CgogIHdo aWxlICgodG1wID0gOjpKU19HZXRQYXJlbnQoY3gsIG9iaikpKSB7CiAgICBvYmogPSB0bXA7CiAg fQoKICByZXR1cm4gb2JqOwp9CgpzdGF0aWMganN2YWwKR2V0SW50ZXJuZWRKU1ZhbChKU0NvbnRl eHQgKmN4LCBjb25zdCBjaGFyICpzdHIpCnsKICBKU1N0cmluZyAqcyA9IDo6SlNfSW50ZXJuU3Ry aW5nKGN4LCBzdHIpOwoKICBpZiAoIXMpIHsKICAgIHJldHVybiAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIH0KCiAgcmV0dXJuICgoKGpzdmFsKShzKSkg fCAoMHg0KSk7Cn0KCgoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkRlZmluZVN0YXRpY0pTVmFs cyhKU0NvbnRleHQgKmN4KQp7CgoKCgoKCiAgc1RvcF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gs ICJ0b3AiKTsgaWYgKCEoKChzVG9wX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9 PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc1Njcm9sbGJh cnNfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAic2Nyb2xsYmFycyIpOyBpZiAoISgoKHNTY3Jv bGxiYXJzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0xvY2F0aW9uX2lkID0gR2V0SW50ZXJu ZWRKU1ZhbChjeCwgImxvY2F0aW9uIik7IGlmICghKCgoc0xvY2F0aW9uX2lkKSAmICgoKEpTVWlu dDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcw MDBlTCk7IH07CiAgc0NvbXBvbmVudHNfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAiQ29tcG9u ZW50cyIpOyBpZiAoISgoKHNDb21wb25lbnRzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAt IDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0Nv bnN0cnVjdG9yX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImNvbnN0cnVjdG9yIik7IGlmICgh KCgoc0NvbnN0cnVjdG9yX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQp KSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc19jb250ZW50X2lkID0g R2V0SW50ZXJuZWRKU1ZhbChjeCwgIl9jb250ZW50Iik7IGlmICghKCgoc19jb250ZW50X2lkKSAm ICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDBlTCk7IH07CiAgc0NvbnRlbnRfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAi Y29udGVudCIpOyBpZiAoISgoKHNDb250ZW50X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAt IDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc1Np ZGViYXJfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAic2lkZWJhciIpOyBpZiAoISgoKHNTaWRl YmFyX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc01lbnViYXJfaWQgPSBHZXRJbnRlcm5lZEpT VmFsKGN4LCAibWVudWJhciIpOyBpZiAoISgoKHNNZW51YmFyX2lkKSAmICgoKEpTVWludDMyKTEg PDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7 IH07CiAgc1Rvb2xiYXJfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAidG9vbGJhciIpOyBpZiAo ISgoKHNUb29sYmFyX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7 IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0xvY2F0aW9uYmFyX2lkID0g R2V0SW50ZXJuZWRKU1ZhbChjeCwgImxvY2F0aW9uYmFyIik7IGlmICghKCgoc0xvY2F0aW9uYmFy X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc1BlcnNvbmFsYmFyX2lkID0gR2V0SW50ZXJuZWRK U1ZhbChjeCwgInBlcnNvbmFsYmFyIik7IGlmICghKCgoc1BlcnNvbmFsYmFyX2lkKSAmICgoKEpT VWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDcwMDBlTCk7IH07CiAgc1N0YXR1c2Jhcl9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJzdGF0 dXNiYXIiKTsgaWYgKCEoKChzU3RhdHVzYmFyX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAt IDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0Rp cmVjdG9yaWVzX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImRpcmVjdG9yaWVzIik7IGlmICgh KCgoc0RpcmVjdG9yaWVzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQp KSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0NvbnRyb2xsZXJzX2lk ID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImNvbnRyb2xsZXJzIik7IGlmICghKCgoc0NvbnRyb2xs ZXJzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0xlbmd0aF9pZCA9IEdldEludGVybmVkSlNW YWwoY3gsICJsZW5ndGgiKTsgaWYgKCEoKChzTGVuZ3RoX2lkKSAmICgoKEpTVWludDMyKTEgPDwg KDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07 CiAgc0lubmVySGVpZ2h0X2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImlubmVySGVpZ2h0Iik7 IGlmICghKCgoc0lubmVySGVpZ2h0X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9 PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0lubmVyV2lk dGhfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAiaW5uZXJXaWR0aCIpOyBpZiAoISgoKHNJbm5l cldpZHRoX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc091dGVySGVpZ2h0X2lkID0gR2V0SW50 ZXJuZWRKU1ZhbChjeCwgIm91dGVyV2lkdGgiKTsgaWYgKCEoKChzT3V0ZXJIZWlnaHRfaWQpICYg KCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwNzAwMGVMKTsgfTsKICBzT3V0ZXJXaWR0aF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gs ICJvdXRlcldpZHRoIik7IGlmICghKCgoc091dGVyV2lkdGhfaWQpICYgKCgoSlNVaW50MzIpMSA8 PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsg fTsKICBzU2NyZWVuWF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJzY3JlZW5YIik7IGlmICgh KCgoc1NjcmVlblhfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzU2NyZWVuWV9pZCA9IEdldElu dGVybmVkSlNWYWwoY3gsICJzY3JlZW5ZIik7IGlmICghKCgoc1NjcmVlbllfaWQpICYgKCgoSlNV aW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw NzAwMGVMKTsgfTsKICBzU3RhdHVzX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgInN0YXR1cyIp OyBpZiAoISgoKHNTdGF0dXNfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4 NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzTmFtZV9pZCA9IEdl dEludGVybmVkSlNWYWwoY3gsICJuYW1lIik7IGlmICghKCgoc05hbWVfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzT25tb3VzZWRvd25faWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25tb3Vz ZWRvd24iKTsgaWYgKCEoKChzT25tb3VzZWRvd25faWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykp IC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBz T25tb3VzZXVwX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgIm9ubW91c2V1cCIpOyBpZiAoISgo KHNPbm1vdXNldXBfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25jbGlja19pZCA9IEdldElu dGVybmVkSlNWYWwoY3gsICJvbmNsaWNrIik7IGlmICghKCgoc09uY2xpY2tfaWQpICYgKCgoSlNV aW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw NzAwMGVMKTsgfTsKICBzT25jb250ZXh0bWVudV9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJv bmNvbnRleHRtZW51Iik7IGlmICghKCgoc09uY29udGV4dG1lbnVfaWQpICYgKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgfTsKICBzT25tb3VzZW92ZXJfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25tb3VzZW92 ZXIiKTsgaWYgKCEoKChzT25tb3VzZW92ZXJfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25t b3VzZW91dF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbm1vdXNlb3V0Iik7IGlmICghKCgo c09ubW91c2VvdXRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25rZXlkb3duX2lkID0gR2V0 SW50ZXJuZWRKU1ZhbChjeCwgIm9ua2V5ZG93biIpOyBpZiAoISgoKHNPbmtleWRvd25faWQpICYg KCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwNzAwMGVMKTsgfTsKICBzT25rZXl1cF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJv bmtleXVwIik7IGlmICghKCgoc09ua2V5dXBfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25r ZXlwcmVzc19pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbmtleXByZXNzIik7IGlmICghKCgo c09ua2V5cHJlc3NfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25tb3VzZW1vdmVfaWQgPSBH ZXRJbnRlcm5lZEpTVmFsKGN4LCAib25tb3VzZW1vdmUiKTsgaWYgKCEoKChzT25tb3VzZW1vdmVf aWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNy ZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25mb2N1c19pZCA9IEdldEludGVybmVkSlNWYWwo Y3gsICJvbmZvY3VzIik7IGlmICghKCgoc09uZm9jdXNfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAo MykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsK ICBzT25ibHVyX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgIm9uYmx1ciIpOyBpZiAoISgoKHNP bmJsdXJfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25zdWJtaXRfaWQgPSBHZXRJbnRlcm5l ZEpTVmFsKGN4LCAib25zdWJtaXQiKTsgaWYgKCEoKChzT25zdWJtaXRfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzT25yZXNldF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbnJlc2V0Iik7 IGlmICghKCgoc09ucmVzZXRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4 NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25jaGFuZ2VfaWQg PSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25jaGFuZ2UiKTsgaWYgKCEoKChzT25jaGFuZ2VfaWQp ICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1 bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25zZWxlY3RfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4 LCAib25zZWxlY3QiKTsgaWYgKCEoKChzT25zZWxlY3RfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAo MykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsK ICBzT25sb2FkX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgIm9ubG9hZCIpOyBpZiAoISgoKHNP bmxvYWRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT251bmxvYWRfaWQgPSBHZXRJbnRlcm5l ZEpTVmFsKGN4LCAib251bmxvYWQiKTsgaWYgKCEoKChzT251bmxvYWRfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzT25hYm9ydF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbmFib3J0Iik7 IGlmICghKCgoc09uYWJvcnRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4 NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25lcnJvcl9pZCA9 IEdldEludGVybmVkSlNWYWwoY3gsICJvbmVycm9yIik7IGlmICghKCgoc09uZXJyb3JfaWQpICYg KCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwNzAwMGVMKTsgfTsKICBzT25wYWludF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJv bnBhaW50Iik7IGlmICghKCgoc09ucGFpbnRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25y ZXNpemVfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25yZXNpemUiKTsgaWYgKCEoKChzT25y ZXNpemVfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25zY3JvbGxfaWQgPSBHZXRJbnRlcm5l ZEpTVmFsKGN4LCAib25zY3JvbGwiKTsgaWYgKCEoKChzT25zY3JvbGxfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzU2Nyb2xsSW50b1ZpZXdfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAic2Ny b2xsSW50b1ZpZXciKTsgaWYgKCEoKChzU2Nyb2xsSW50b1ZpZXdfaWQpICYgKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgfTsKICBzU2Nyb2xsWF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJzY3JvbGxYIik7IGlm ICghKCgoc1Njcm9sbFhfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkp IHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzU2Nyb2xsWV9pZCA9IEdl dEludGVybmVkSlNWYWwoY3gsICJzY3JvbGxZIik7IGlmICghKCgoc1Njcm9sbFlfaWQpICYgKCgo SlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwNzAwMGVMKTsgfTsKICBzT3Blbl9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvcGVuIik7 IGlmICghKCgoc09wZW5faWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkp IHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzSXRlbV9pZCA9IEdldElu dGVybmVkSlNWYWwoY3gsICJpdGVtIik7IGlmICghKCgoc0l0ZW1faWQpICYgKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgfTsKICBzRW51bWVyYXRlX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImVudW1lcmF0ZVBy b3BlcnRpZXMiKTsgaWYgKCEoKChzRW51bWVyYXRlX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMp KSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAg c05hdmlnYXRvcl9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJuYXZpZ2F0b3IiKTsgaWYgKCEo KChzTmF2aWdhdG9yX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7 IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0RvY3VtZW50X2lkID0gR2V0 SW50ZXJuZWRKU1ZhbChjeCwgImRvY3VtZW50Iik7IGlmICghKCgoc0RvY3VtZW50X2lkKSAmICgo KEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDcwMDBlTCk7IH07CiAgc1dpbmRvd19pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJ3aW5k b3ciKTsgaWYgKCEoKChzV2luZG93X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9 PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0ZyYW1lc19p ZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJmcmFtZXMiKTsgaWYgKCEoKChzRnJhbWVzX2lkKSAm ICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDBlTCk7IH07CgogIHJldHVybiAwOwp9CgoKbnNyZXN1bHQKbnNET01DbGFzc0lu Zm86OldyYXBOYXRpdmUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnNjb3BlLCBuc0lTdXBwb3J0 cyAqbmF0aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCYgYUlJRCwg anN2YWwgKnZwKQp7CiAgaWYgKCFuYXRpdmUpIHsKICAgICp2cCA9ICgoanN2YWwpKDApKTsKCiAg ICByZXR1cm4gMDsKICB9CgogIGRvIHsgaWYgKCEoc1hQQ29ubmVjdCkpIHsgOyByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lYUENv bm5lY3RKU09iamVjdEhvbGRlcj4gaG9sZGVyOwoKICBuc3Jlc3VsdCBydiA9IHNYUENvbm5lY3Qt PldyYXBOYXRpdmUoY3gsIHNjb3BlLCBuYXRpdmUsIGFJSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGhvbGRlcikpOwogIGRvIHsgaWYgKCEo KCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7Cgog IEpTT2JqZWN0KiBvYmogPSAwOwogIHJ2ID0gaG9sZGVyLT5HZXRKU09iamVjdCgmb2JqKTsKICBk byB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hp bGUgKDApOwoKICAqdnAgPSAoKGpzdmFsKShvYmopKTsKCiAgcmV0dXJuIHJ2Owp9CgoKbnNyZXN1 bHQKbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwgbnNyZXN1 bHQgYVJlc3VsdCkKewogIG5zQ09NUHRyPG5zSUV4Y2VwdGlvblNlcnZpY2U+IHhzID0KICAgIGRv X0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9leGNlcHRpb25zZXJ2aWNlOzEiKTsKICBpZiAoIXhz KQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKCiAgbnNDT01QdHI8bnNJRXhj ZXB0aW9uTWFuYWdlcj4geG07CiAgbnNyZXN1bHQgcnYgPSB4cy0+R2V0Q3VycmVudEV4Y2VwdGlv bk1hbmFnZXIoZ2V0dGVyX0FkZFJlZnMoeG0pKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgw MDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lF eGNlcHRpb24+IGV4Y2VwdGlvbjsKICBydiA9IHhtLT5HZXRFeGNlcHRpb25Gcm9tUHJvdmlkZXIo YVJlc3VsdCwgMCwgZ2V0dGVyX0FkZFJlZnMoZXhjZXB0aW9uKSk7CgogIGpzdmFsIGp2OwogIHJ2 ID0gV3JhcE5hdGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBleGNlcHRpb24sCiAg ICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJRXhjZXB0aW9uPjo6R2V0SUlEKCksICZq dik7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKICBKU19TZXRQZW5kaW5nRXhjZXB0aW9uKGN4LCBqdik7CgogIHJldHVy biAwOwp9Cgpuc0RPTUNsYXNzSW5mbzo6bnNET01DbGFzc0luZm8obnNET01DbGFzc0luZm9EYXRh KiBhRGF0YSkgOiBtRGF0YShhRGF0YSkKewp9Cgpuc0RPTUNsYXNzSW5mbzo6fm5zRE9NQ2xhc3NJ bmZvKCkKewogIGlmICgoUHRyQml0cyhtRGF0YS0+bUNhY2hlZENsYXNzSW5mbykgJiAweDEpKSB7 CgogICAgbnNET01DbGFzc0luZm9EYXRhKiBkYXRhID0gY29uc3RfY2FzdDwgbnNET01DbGFzc0lu Zm9EYXRhKiA+KG1EYXRhKTsKICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDwgbnNFeHRlcm5hbERPTUNs YXNzSW5mb0RhdGEqID4oZGF0YSk7CiAgfQp9Cgpuc3JlZmNudCBuc0RPTUNsYXNzSW5mbzo6QWRk UmVmKHZvaWQpIHsgOyAoKHZvaWQpMCk7ICsrbVJlZkNudDsgOyByZXR1cm4gbVJlZkNudDsgfTsK bnNyZWZjbnQgbnNET01DbGFzc0luZm86OlJlbGVhc2Uodm9pZCkgeyA7ICgodm9pZCkwKTsgLS1t UmVmQ250OyA7IGlmIChtUmVmQ250ID09IDApIHsgbVJlZkNudCA9IDE7IGRvIHsgOyBkZWxldGUg KHRoaXMpOyB9IHdoaWxlICgwKTsgcmV0dXJuIDA7IH0gcmV0dXJuIG1SZWZDbnQ7IH07Cgpuc3Jl c3VsdCBuc0RPTUNsYXNzSW5mbzo6UXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZv aWQqKiBhSW5zdGFuY2VQdHIpIHsgOyBpZiAoICFhSW5zdGFuY2VQdHIgKSByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwNDAwM0wpOyBuc0lTdXBwb3J0cyogZm91bmRJbnRlcmZhY2U7CiAgaWYgKCBh SUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSVhQQ1NjcmlwdGFibGU+OjpHZXRJSUQoKSkgKSBm b3VuZEludGVyZmFjZSA9IHN0YXRpY19jYXN0PCBuc0lYUENTY3JpcHRhYmxlKiA+KHRoaXMpOyBl bHNlCiAgaWYgKCBhSUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSUNsYXNzSW5mbz46OkdldElJ RCgpKSApIGZvdW5kSW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSUNsYXNzSW5mbyogPih0aGlz KTsgZWxzZQogIGlmICggYUlJRC5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46Okdl dElJRCgpKSApIGZvdW5kSW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KHN0 YXRpY19jYXN0PCBuc0lYUENTY3JpcHRhYmxlKiA+KHRoaXMpKTsgZWxzZQpmb3VuZEludGVyZmFj ZSA9IDA7IG5zcmVzdWx0IHN0YXR1czsgaWYgKCAhZm91bmRJbnRlcmZhY2UgKSBzdGF0dXMgPSAo KG5zcmVzdWx0KSAweDgwMDA0MDAyTCk7IGVsc2UgeyAoZm91bmRJbnRlcmZhY2UpLT5BZGRSZWYo KTsgc3RhdHVzID0gMDsgfSAqYUluc3RhbmNlUHRyID0gZm91bmRJbnRlcmZhY2U7IHJldHVybiBz dGF0dXM7IH0KCgpKU0NsYXNzIG5zRE9NQ2xhc3NJbmZvOjpzRE9NQ29uc3RydWN0b3JQcm90b0Ns YXNzID0gewogICJET00gQ29uc3RydWN0b3IucHJvdG90eXBlIiwgMCwKICBKU19Qcm9wZXJ0eVN0 dWIsIEpTX1Byb3BlcnR5U3R1YiwgSlNfUHJvcGVydHlTdHViLCBKU19Qcm9wZXJ0eVN0dWIsCiAg SlNfRW51bWVyYXRlU3R1YiwgSlNfUmVzb2x2ZVN0dWIsIEpTX0NvbnZlcnRTdHViLCBKU19GaW5h bGl6ZVN0dWIKfTsKCgpzdGF0aWMgY29uc3QgY2hhciAqCkN1dFByZWZpeChjb25zdCBjaGFyICph TmFtZSkgewogIHN0YXRpYyBjb25zdCBjaGFyIHByZWZpeF9uc0lET01bXSA9ICJuc0lET00iOwog IHN0YXRpYyBjb25zdCBjaGFyIHByZWZpeF9uc0lbXSA9ICJuc0kiOwoKICBpZiAoc3RybmNtcChh TmFtZSwgcHJlZml4X25zSURPTSwgc2l6ZW9mKHByZWZpeF9uc0lET00pIC0gMSkgPT0gMCkgewog ICAgcmV0dXJuIGFOYW1lICsgc2l6ZW9mKHByZWZpeF9uc0lET00pIC0gMTsKICB9CgogIGlmIChz dHJuY21wKGFOYW1lLCBwcmVmaXhfbnNJLCBzaXplb2YocHJlZml4X25zSSkgLSAxKSA9PSAwKSB7 CiAgICByZXR1cm4gYU5hbWUgKyBzaXplb2YocHJlZml4X25zSSkgLSAxOwogIH0KCiAgcmV0dXJu IGFOYW1lOwp9CgoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OlJlZ2lzdGVyQ2xhc3NOYW1lKFBS SW50MzIgYUNsYXNzSW5mb0lEKQp7CiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAq Z05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBpZiAoIShnTmFtZVNwYWNlTWFuYWdlcikpIHsgOyBy ZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7IH0gfSB3aGlsZSAoMCk7CgogIGdO YW1lU3BhY2VNYW5hZ2VyLT5SZWdpc3RlckNsYXNzTmFtZShzQ2xhc3NJbmZvRGF0YVthQ2xhc3NJ bmZvSURdLm1OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ2xh c3NJbmZvSUQpOwoKICByZXR1cm4gMDsKfQoKCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpSZWdp c3RlckNsYXNzUHJvdG9zKFBSSW50MzIgYUNsYXNzSW5mb0lEKQp7CiAgZXh0ZXJuIG5zU2NyaXB0 TmFtZVNwYWNlTWFuYWdlciAqZ05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBpZiAoIShnTmFtZVNw YWNlTWFuYWdlcikpIHsgOyByZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7IH0g fSB3aGlsZSAoMCk7CiAgUFJCb29sIGZvdW5kX29sZDsKCiAgY29uc3QgbnNJSUQgKnByaW1hcnlf aWlkID0gc0NsYXNzSW5mb0RhdGFbYUNsYXNzSW5mb0lEXS5tUHJvdG9DaGFpbkludGVyZmFjZTsK CiAgaWYgKCFwcmltYXJ5X2lpZCB8fCBwcmltYXJ5X2lpZCA9PSAmbnNDT01UeXBlSW5mbzxuc0lT dXBwb3J0cz46OkdldElJRCgpKSB7CiAgICByZXR1cm4gMDsKICB9CgogIG5zQ09NUHRyPG5zSUlu dGVyZmFjZUluZm9NYW5hZ2VyPiBpaW0gPQogICAgZG9udF9BZGRSZWYoWFBUSV9HZXRJbnRlcmZh Y2VJbmZvTWFuYWdlcigpKTsKICBkbyB7IGlmICghKGlpbSkpIHsgOyByZXR1cm4gKChuc3Jlc3Vs dCkgMHg4MDA0MDExMUwpOyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJ bmZvPiBpZl9pbmZvOwogIFBSQm9vbCBmaXJzdCA9IDE7CgogIGlpbS0+R2V0SW5mb0ZvcklJRChw cmltYXJ5X2lpZCwgZ2V0dGVyX0FkZFJlZnMoaWZfaW5mbykpOwoKICB3aGlsZSAoaWZfaW5mbykg ewogICAgbnNJSUQgKmlpZCA9IDA7CgogICAgaWZfaW5mby0+R2V0SW50ZXJmYWNlSUlEKCZpaWQp OwogICAgZG8geyBpZiAoIShpaWQpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZM KTsgfSB9IHdoaWxlICgwKTsKCiAgICBpZiAoaWlkLT5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lT dXBwb3J0cz46OkdldElJRCgpKSkgewogICAgICBuc01lbW9yeTo6RnJlZShpaWQpOwoKICAgICAg YnJlYWs7CiAgICB9CgogICAgbnNYUElETENTdHJpbmcgbmFtZTsKICAgIGlmX2luZm8tPkdldE5h bWUoZ2V0dGVyX0NvcGllcyhuYW1lKSk7CgogICAgZ05hbWVTcGFjZU1hbmFnZXItPlJlZ2lzdGVy Q2xhc3NQcm90byhDdXRQcmVmaXgobmFtZSksIGlpZCwgJmZvdW5kX29sZCk7CgogICAgbnNNZW1v cnk6OkZyZWUoaWlkKTsKCiAgICBpZiAoZmlyc3QpIHsKICAgICAgZmlyc3QgPSAwOwogICAgfSBl bHNlIGlmIChmb3VuZF9vbGQpIHsKICAgICAgYnJlYWs7CiAgICB9CgogICAgbnNDT01QdHI8bnNJ SW50ZXJmYWNlSW5mbz4gdG1wKGlmX2luZm8pOwogICAgdG1wLT5HZXRQYXJlbnQoZ2V0dGVyX0Fk ZFJlZnMoaWZfaW5mbykpOwogIH0KCiAgcmV0dXJuIDA7Cn0KCgpuc3Jlc3VsdApuc0RPTUNsYXNz SW5mbzo6UmVnaXN0ZXJFeHRlcm5hbENsYXNzZXMoKQp7CiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNw YWNlTWFuYWdlciAqZ05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBpZiAoIShnTmFtZVNwYWNlTWFu YWdlcikpIHsgOyByZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7IH0gfSB3aGls ZSAoMCk7CgogIG5zcmVzdWx0IHJ2ID0gMDsKICBuc0NPTVB0cjxuc0lDYXRlZ29yeU1hbmFnZXI+ IGNtID0KICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9jYXRlZ29yeW1hbmFnZXI7MSIs ICZydik7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBy djsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJU2ltcGxlRW51bWVyYXRvcj4gZTsKICBy diA9IGNtLT5FbnVtZXJhdGVDYXRlZ29yeSgiSmF2YVNjcmlwdCBET00gY2xhc3MiLCBnZXR0ZXJf QWRkUmVmcyhlKSk7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJl dHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgbnNYUElETENTdHJpbmcgY29udHJhY3RJZDsKICBu c0NBdXRvU3RyaW5nIGNhdGVnb3J5RW50cnk7CiAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IGVudHJ5 OwoKICB3aGlsZSAoKCEoKGUtPkdldE5leHQoZ2V0dGVyX0FkZFJlZnMoZW50cnkpKSkgJiAweDgw MDAwMDAwKSkpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzQ1N0cmluZz4gY2F0ZWdvcnkoZG9f UXVlcnlJbnRlcmZhY2UoZW50cnkpKTsKCiAgICBpZiAoIWNhdGVnb3J5KSB7CiAgICAgIDsKICAg ICAgY29udGludWU7CiAgICB9CgogICAgcnYgPSBjYXRlZ29yeS0+R2V0RGF0YShjYXRlZ29yeUVu dHJ5KTsKCiAgICBjbS0+R2V0Q2F0ZWdvcnlFbnRyeSgiSmF2YVNjcmlwdCBET00gY2xhc3MiLCBj YXRlZ29yeUVudHJ5LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0NvcGll cyhjb250cmFjdElkKSk7CiAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7 IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ0lEIGNpZDsKICAgIHJ2ID0gbnND b21wb25lbnRNYW5hZ2VyOjpDb250cmFjdElEVG9DbGFzc0lEKGNvbnRyYWN0SWQsICZjaWQpOwoK ICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7CiAgICAgIDsKICAgICAgY29udGludWU7CiAg ICB9CgogICAgcnYgPSBnTmFtZVNwYWNlTWFuYWdlci0+UmVnaXN0ZXJFeHRlcm5hbENsYXNzTmFt ZShjYXRlZ29yeUVudHJ5LmdldCgpLCBjaWQpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4 MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKICB9CgogIHJ2ID0gZ05h bWVTcGFjZU1hbmFnZXItPlJlZ2lzdGVyRXh0ZXJuYWxJbnRlcmZhY2VzKDEpOwoKICByZXR1cm4g cnY7Cn0KIyAxMjM3ICJuc0RPTUNsYXNzSW5mby5jcHAiCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZv OjpJbml0KCkKewoKCiAgOwoKCgogIGRvIHsgaWYgKCEoIXNJc0luaXRpYWxpemVkKSkgeyA7IHJl dHVybiAoKChuc3Jlc3VsdCkgMHhDMUYzMDAwMCkgKyAyKTsgfSB9IHdoaWxlICgwKTsKCiAgZXh0 ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAqZ05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBp ZiAoIShnTmFtZVNwYWNlTWFuYWdlcikpIHsgOyByZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAw MDApICsgMSk7IH0gfSB3aGlsZSAoMCk7CgogIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uo bnNJWFBDb25uZWN0OjpHZXRDSUQoKSwgJnNYUENvbm5lY3QpOwogIGRvIHsgaWYgKCEoKCEoKHJ2 KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09N UHRyPG5zSVhQQ0Z1bmN0aW9uVGhpc1RyYW5zbGF0b3I+IG9sZDsKCiAgbnNDT01QdHI8bnNJWFBD RnVuY3Rpb25UaGlzVHJhbnNsYXRvcj4gZWx0ID0gbmV3IG5zRXZlbnRMaXN0ZW5lclRoaXNUcmFu c2xhdG9yKCk7CiAgZG8geyBpZiAoIShlbHQpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw NzAwMGVMKTsgfSB9IHdoaWxlICgwKTsKCiAgc1hQQ29ubmVjdC0+U2V0RnVuY3Rpb25UaGlzVHJh bnNsYXRvcihuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50TGlzdGVuZXI+OjpHZXRJSUQoKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsdCwgZ2V0dGVyX0FkZFJlZnMo b2xkKSk7CgogIG5zQ09NUHRyPG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcj4gc20gPQogICAgZG9f R2V0U2VydmljZSgiQG1vemlsbGEub3JnL3NjcmlwdHNlY3VyaXR5bWFuYWdlcjsxIiwgJnJ2KTsK ICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0g d2hpbGUgKDApOwoKICBzU2VjTWFuID0gc207CiAgKHNTZWNNYW4pLT5BZGRSZWYoKTsKCiAgbnND T01QdHI8bnNJVGhyZWFkSlNDb250ZXh0U3RhY2s+IHN0YWNrID0KICAgIGRvX0dldFNlcnZpY2Uo IkBtb3ppbGxhLm9yZy9qcy94cGMvQ29udGV4dFN0YWNrOzEiLCAmcnYpOwogIGRvIHsgaWYgKCEo KCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7Cgog IEpTQ29udGV4dCAqY3ggPSAwOwoKICBydiA9IHN0YWNrLT5HZXRTYWZlSlNDb250ZXh0KCZjeCk7 CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9 IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJQ29tcG9uZW50UmVnaXN0cmFyPiBjcjsKICBOU19H ZXRDb21wb25lbnRSZWdpc3RyYXIoZ2V0dGVyX0FkZFJlZnMoY3IpKTsKICBjb25zdCBuc0lJRCog eHBhdGhFdmFsdWF0b3JJSUQgPSAwOwogIGlmIChjcikgewogICAgUFJCb29sIGhhdmVYUGF0aERP TTsKICAgIGNyLT5Jc0NvbnRyYWN0SURSZWdpc3RlcmVkKCJAbW96aWxsYS5vcmcvZG9tL3hwYXRo LWV2YWx1YXRvcjsxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXZlWFBhdGhE T00pOwogICAgaWYgKGhhdmVYUGF0aERPTSkgewogICAgICB4cGF0aEV2YWx1YXRvcklJRCA9ICZu c0NPTVR5cGVJbmZvPG5zSURPTVhQYXRoRXZhbHVhdG9yPjo6R2V0SUlEKCk7CiAgICB9CiAgfQoK ICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9f V2luZG93X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxu c0lET01XaW5kb3c+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMg Y29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01XaW5kb3c+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUpTV2luZG93Pjo6 R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01XaW5kb3dJbnRlcm5hbD46OkdldElJ RCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRSZWNlaXZlcj46OkdldElJRCgpLAog ICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NP TVR5cGVJbmZvPG5zSURPTVZpZXdDU1M+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTUFic3RyYWN0Vmlldz46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19Mb2NhdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0g Jm5zQ09NVHlwZUluZm88bnNJRE9NTG9jYXRpb24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01Mb2NhdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUlu Zm88bnNJRE9NTlNMb2NhdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGlu dGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0Rh dGFbZURPTUNsYXNzSW5mb19OYXZpZ2F0b3JfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFj ZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTU5hdmlnYXRvcj46OkdldElJRCgpOyBkLm1IYXNDbGFz c0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5hdmlnYXRvcj46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NSlNOYXZpZ2F0b3I+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fUGx1Z2luX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01QbHVnaW4+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01QbHVnaW4+OjpHZXRJSUQoKSwKICAwIH07IGQubUlu dGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9 IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fUGx1Z2luQXJyYXlfaWRdOyA7IDsgZC5tUHJv dG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTVBsdWdpbkFycmF5Pjo6R2V0 SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRl cmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NUGx1Z2luQXJyYXk+OjpH ZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUpTUGx1Z2luQXJyYXk+OjpHZXRJSUQo KSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xh c3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fTWltZVR5cGVfaWRd OyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTU1pbWVU eXBlPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5z SUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTWltZVR5 cGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoK ICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9f TWltZVR5cGVBcnJheV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlw ZUluZm88bnNJRE9NTWltZVR5cGVBcnJheT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFj ZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NP TVR5cGVJbmZvPG5zSURPTU1pbWVUeXBlQXJyYXk+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVy ZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHND bGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQmFyUHJvcF9pZF07IDsgOyBkLm1Qcm90b0NoYWlu SW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQmFyUHJvcD46OkdldElJRCgpOyBkLm1I YXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3Rb XSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUJhclByb3A+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSGlzdG9yeV9pZF07IDsgOyBkLm1Q cm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSGlzdG9yeT46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSGlzdG9yeT46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19TY3JlZW5faWRd OyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTVNjcmVl bj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJ RCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTVNjcmVlbj46 OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsg bnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19YTUxE b2N1bWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88 bnNJRE9NWE1MRG9jdW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBz dGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5m bzxuc0lET01Eb2N1bWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NWE1M RG9jdW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TRG9jdW1lbnQ+ OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50RXZlbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50U3R5bGU+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50Vmlldz46OkdldElJRCgpLAogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRSYW5nZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NRG9jdW1lbnRUcmF2ZXJzYWw+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTURvY3VtZW50WEJMPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01FdmVudFRhcmdldD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+ OjpHZXRJSUQoKSwKICB4cGF0aEV2YWx1YXRvcklJRCwgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX0RvY3VtZW50VHlwZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRUeXBlPjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRUeXBlPjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJm YWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0Ns YXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19ET01JbXBsZW1lbnRhdGlvbl9pZF07IDsgOyBkLm1Q cm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NRE9NSW1wbGVtZW50YXRp b24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJ SUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01ET01JbXBs ZW1lbnRhdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9s aXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNs YXNzSW5mb19ET01FeGNlcHRpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZu c0NPTVR5cGVJbmZvPG5zSURPTURPTUV4Y2VwdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTURPTUV4Y2VwdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRXhjZXB0aW9uPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0g aW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZv RGF0YVtlRE9NQ2xhc3NJbmZvX0RvY3VtZW50RnJhZ21lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50RnJhZ21lbnQ+OjpHZXRJ SUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVy ZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudEZyYWdtZW50 Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAog IDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0lu Zm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19FbGVtZW50X2lkXTsgOyA7 IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudD46Okdl dElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0F0dHJfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbklu dGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUF0dHI+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01BdHRyPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19UZXh0X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnND T01UeXBlSW5mbzxuc0lET01UZXh0Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NVGV4dD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZl bnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NvbW1lbnRf aWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNv bW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3Qg bnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Db21t ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46Okdl dElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ0RBVEFTZWN0aW9uX2lkXTsgOyA7 IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01DREFUQVNlY3Rp b24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJ SUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DREFUQVNl Y3Rpb24+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6 R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAg fTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9E YXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19Qcm9jZXNzaW5nSW5zdHJ1Y3Rp b25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURP TVByb2Nlc3NpbmdJbnN0cnVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9 IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNl X2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9N Q2xhc3NJbmZvX0VudGl0eV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09N VHlwZUluZm88bnNJRE9NRW50aXR5Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NRW50aXR5Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX0VudGl0eVJlZmVyZW5jZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50 ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NRW50aXR5UmVmZXJlbmNlPjo6R2V0SUlEKCk7 IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2Vf bGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRW50aXR5UmVmZXJlbmNlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX05vdGF0aW9u X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01O b3RhdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5v dGF0aW9uPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7 IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJ bmZvX05vZGVMaXN0X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBl SW5mbzxuc0lET01Ob2RlTGlzdD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7 IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTU5vZGVMaXN0Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX05hbWVkTm9kZU1hcF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NTmFtZWROb2RlTWFwPjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTmFtZWROb2RlTWFwPjo6R2V0SUlEKCksCiAg MCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5m b0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0RvY3VtZW50U3R5bGVTaGVl dExpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5z SURPTVN0eWxlU2hlZXRMaXN0Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsg c3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewoKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTVN0eWxlU2hlZXRMaXN0Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2Vz ID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJ bmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0V2ZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZh Y2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TRXZlbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTUtleUV2ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01N b3VzZUV2ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU1VJRXZlbnQ+ OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7 IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fTXV0 YXRpb25FdmVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NTXV0YXRpb25FdmVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9 IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTU11dGF0aW9uRXZlbnQ+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTERvY3VtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hh aW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRG9jdW1lbnQ+OjpHZXRJSUQo KTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFj ZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRG9jdW1lbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTERvY3VtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0RvY3VtZW50Pjo6R2V0SUlEKCksCiAgICAmbnND T01UeXBlSW5mbzxuc0lET01Eb2N1bWVudEV2ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01Eb2N1bWVudFN0eWxlPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01Eb2N1bWVudFZpZXc+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURv Y3VtZW50UmFuZ2U+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50 VHJhdmVyc2FsPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudFhC TD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgeHBhdGhF dmFsdWF0b3JJSUQsIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsg bnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1M Q29sbGVjdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTENvbGxlY3Rpb24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2Ug PSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01U eXBlSW5mbzxuc0lET01Ob2RlTGlzdD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJ RE9NSFRNTENvbGxlY3Rpb24+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fSFRNTE9wdGlvbkNvbGxlY3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0SUlE KCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZh Y2VfbGlzdFtdID0gewoKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTE9wdGlvbkNvbGxl Y3Rpb24+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9u Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAg eyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hU TUxGb3JtQ29udHJvbENvbGxlY3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewoKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3Q+OjpHZXRJSUQoKSwK ICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJ bmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEdlbmVyaWNDb2xs ZWN0aW9uX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxu c0lET01IVE1MQ29sbGVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7 IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01IVE1MQ29sbGVjdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNl cyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNz SW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MQW5jaG9yRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90 b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFuY2hvckVsZW1lbnQ+ OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQg KmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MQW5jaG9y RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MQW5jaG9y RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVu dD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+ OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwg Jm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEFwcGxldEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJv dG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxBcHBsZXRFbGVtZW50 Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFwcGxl dEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1l bnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxl Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCks ICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZh Y2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xh c3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxBcmVhRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90 b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFyZWFFbGVtZW50Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFyZWFFbGVt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxBcmVhRWxlbWVu dD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJ SUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBp bnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9E YXRhW2VET01DbGFzc0luZm9fSFRNTEJSRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50 ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJSRWxlbWVudD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxCUkVsZW1lbnQ+OjpHZXRJSUQo KSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5z SURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xp c3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xh c3NJbmZvX0hUTUxCYXNlRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0g Jm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJhc2VFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJhc2VFbGVtZW50Pjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00z Tm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9 CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5m b19IVE1MQmFzZUZvbnRFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MQmFzZUZvbnRFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJhc2VGb250RWxlbWVudD46OkdldElJ RCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAm bnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88 bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2Vf bGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01D bGFzc0luZm9fSFRNTEJvZHlFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2Ug PSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MQm9keUVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MQm9keUVsZW1lbnQ+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7 IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJ bmZvX0hUTUxCdXR0b25FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MQnV0dG9uRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXND bGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9 IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxCdXR0b25FbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxCdXR0b25FbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19IVE1MRExpc3RFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRExpc3RFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTERMaXN0RWxlbWVudD46OkdldElJRCgpLAog ICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlw ZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N M05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsg fQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0lu Zm9fSFRNTERlbEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NP TVR5cGVJbmZvPG5zSURPTUhUTUxFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJm YWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NSFRNTE1vZEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxEaXJl Y3RvcnlFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBl SW5mbzxuc0lET01IVE1MRGlyZWN0b3J5RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxEaXJlY3RvcnlFbGVtZW50Pjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00z Tm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9 CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5m b19IVE1MRGl2RWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09N VHlwZUluZm88bnNJRE9NSFRNTERpdkVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRGl2RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxu c0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEVt YmVkRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTEVtYmVkRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFj ZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NP TVR5cGVJbmZvPG5zSURPTUhUTUxFbWJlZEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxGaWVs ZFNldEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJ bmZvPG5zSURPTUhUTUxGaWVsZFNldEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRmllbGRTZXRFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJ bmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5m bzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9k ZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9Cgog IHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19I VE1MRm9udEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5 cGVJbmZvPG5zSURPTUhUTUxGb250RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVy ZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZu c0NPTVR5cGVJbmZvPG5zSURPTUhUTUxGb250RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxu c0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEZv cm1FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5m bzxuc0lET01IVE1MRm9ybUVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2Ug PSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01U eXBlSW5mbzxuc0lET01IVE1MRm9ybUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTU5TSFRNTEZvcm1FbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5m bzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVs ZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVu dFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgp LAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFz c0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MRnJhbWVFbGVt ZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01IVE1MRnJhbWVFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsg c3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTEZyYW1lRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NTlNIVE1MRnJhbWVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1l bnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRh cmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAog IDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0lu Zm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MRnJhbWVTZXRFbGVt ZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01IVE1MRnJhbWVTZXRFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NSFRNTEZyYW1lU2V0RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N RXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJ SUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9N Q2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEhSRWxl bWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJ RE9NSFRNTEhSRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0 YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTUhUTUxIUkVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENT U0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0 Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9 OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0Rh dGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkRWxlbWVudF9pZF07 IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEhl YWRFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNv bnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9N SFRNTEhlYWRFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hU TUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxp bmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5t SW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZk ID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MSGVhZGluZ0VsZW1lbnRfaWRdOyA7 IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxIZWFk aW5nRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBj b25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TUhUTUxIZWFkaW5nRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9N TlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NT SW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+ OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEh0bWxFbGVtZW50X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MSHRt bEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29u c3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01I VE1MSHRtbEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRN TEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGlu ZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1J bnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQg PSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJRnJhbWVFbGVtZW50X2lkXTsgOyA7 IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MSUZyYW1l RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhU TUxJRnJhbWVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hU TUxGcmFtZUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRN TEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGlu ZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1J bnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQg PSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJbWFnZUVsZW1lbnRfaWRdOyA7IDsg ZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJbWFnZUVs ZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3Qg bnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1M SW1hZ2VFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxJ bWFnZUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVs ZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0 eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJbnB1dEVsZW1lbnRfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJbnB1dEVsZW1l bnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJ SUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MSW5w dXRFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxJbnB1 dEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1l bnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxl Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCks ICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZh Y2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xh c3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJbnNFbGVtZW50X2lkXTsgOyA7IGQubVByb3Rv Q2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxNb2RFbGVtZW50Pjo6 R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgp LCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19IVE1MSXNJbmRleEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbklu dGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJc0luZGV4RWxlbWVudD46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJc0luZGV4RWxlbWVu dD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJ SUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBp bnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9E YXRhW2VET01DbGFzc0luZm9fSFRNTExJRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50 ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTExJRWxlbWVudD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxMSUVsZW1lbnQ+OjpHZXRJSUQo KSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5z SURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xp c3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xh c3NJbmZvX0hUTUxMYWJlbEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxMYWJlbEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGFiZWxFbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19IVE1MTGVnZW5kRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0g Jm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTExlZ2VuZEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGVnZW5kRWxlbWVudD46OkdldElJRCgp LAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnND T01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlz dDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFz c0luZm9fSFRNTExpbmtFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGlua0VsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGlua0VsZW1lbnQ+OjpHZXRJSUQoKSwKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTUxpbmtTdHlsZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N RXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJ SUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9N Q2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTE1hcEVs ZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5z SURPTUhUTUxNYXBFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsg c3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTE1hcEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVu dENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFy Z2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAg MCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5m b0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxNZW51RWxlbWVudF9p ZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRN TE1lbnVFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGlj IGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJ RE9NSFRNTE1lbnVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01O U0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJ bmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46 OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsg ZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRh ICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MTWV0YUVsZW1lbnRfaWRdOyA7 IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxNZXRh RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhU TUxNZXRhRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1M RWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5l U3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJ SUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUlu dGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9 IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTE1vZEVsZW1lbnRfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxNb2RFbGVtZW50 Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTE1vZEVs ZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+ OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6 R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZu c0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2Vz ID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJ bmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxPTGlzdEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9D aGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxPTGlzdEVsZW1lbnQ+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MT0xpc3RFbGVt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6 R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnND T01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9 IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5m b0RhdGFbZURPTUNsYXNzSW5mb19IVE1MT2JqZWN0RWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0No YWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTE9iamVjdEVsZW1lbnQ+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MT2JqZWN0RWxl bWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46 OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpH ZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMg PSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0lu Zm9EYXRhW2VET01DbGFzc0luZm9fSFRNTE9wdEdyb3VwRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90 b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTE9wdEdyb3VwRWxlbWVu dD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJ RCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxPcHRH cm91cEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVs ZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0 eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxPcHRpb25FbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MT3B0aW9uRWxl bWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBu c0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxP cHRpb25FbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxF bGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVT dHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50 ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0g c0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MUGFyYWdyYXBoRWxlbWVudF9pZF07IDsg OyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFBhcmFn cmFwaEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMg Y29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01IVE1MUGFyYWdyYXBoRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJ RE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50 Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJn ZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAw IH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZv RGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFBhcmFtRWxlbWVudF9p ZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRN TFBhcmFtRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRp YyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTUhUTUxQYXJhbUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENT U0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0 Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9 OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0Rh dGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxQcmVFbGVtZW50X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MUHJl RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhU TUxQcmVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxF bGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVT dHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50 ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0g c0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MUXVvdGVFbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MUXVvdGVFbGVt ZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5z SUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFF1 b3RlRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxl bWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5 bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVy ZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHND bGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFNjcmlwdEVsZW1lbnRfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxTY3JpcHRFbGVt ZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5z SUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFNj cmlwdEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVs ZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0 eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxTZWxlY3RFbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MU2VsZWN0RWxl bWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBu c0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxT ZWxlY3RFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxT ZWxlY3RFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU1hCTEZv cm1Db250cm9sPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVt ZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHls ZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgp LCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJm YWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0Ns YXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MU3BhY2VyRWxlbWVudF9pZF07IDsgOyBkLm1Q cm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEVsZW1lbnQ+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAwOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46 OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlw ZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fSFRNTFNwYW5FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJRCgpOyBkLm1I YXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3Rb XSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxFbGVtZW50Pjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00z Tm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9 CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5m b19IVE1MU3R5bGVFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnND T01UeXBlSW5mbzxuc0lET01IVE1MU3R5bGVFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNz SW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewog ICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFN0eWxlRWxlbWVudD46OkdldElJRCgpLAogICAg Jm5zQ09NVHlwZUluZm88bnNJRE9NTGlua1N0eWxlPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01F dmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MVGFibGVD YXB0aW9uRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlw ZUluZm88bnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CgogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwg Jm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZu c0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZv PG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNl X2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9N Q2xhc3NJbmZvX0hUTUxUYWJsZUNlbGxFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGFibGVDZWxsRWxlbWVudD46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxUYWJsZUNlbGxFbGVt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6 R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnND T01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9 IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5m b0RhdGFbZURPTUNsYXNzSW5mb19IVE1MVGFibGVDb2xFbGVtZW50X2lkXTsgOyA7IGQubVByb3Rv Q2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGFibGVDb2xFbGVtZW50 Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFRhYmxl Q29sRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxl bWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5 bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVy ZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKCgoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9 IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFRhYmxlQ29sR3JvdXBFbGVtZW50X2lk XTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1M VGFibGVDb2xFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3Rh dGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NSFRNTFRhYmxlQ29sRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVt ZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRU YXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwK ICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJ bmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFRhYmxlRWxlbWVu dF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N SFRNTFRhYmxlRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0 YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTUhUTUxUYWJsZUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVu dENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFy Z2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAg MCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5m b0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxUYWJsZVJvd0VsZW1l bnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURP TUhUTUxUYWJsZVJvd0VsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAx OyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01IVE1MVGFibGVSb3dFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01F dmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MVGFibGVT ZWN0aW9uRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlw ZUluZm88bnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CgogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwg Jm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZu c0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZv PG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNl X2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9N Q2xhc3NJbmZvX0hUTUxUZXh0QXJlYUVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVy ZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxUZXh0QXJlYUVsZW1lbnQ+OjpHZXRJSUQo KTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFj ZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGV4dEFyZWFFbGVtZW50 Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxUZXh0QXJlYUVsZW1l bnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpH ZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0g aW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZv RGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxUaXRsZUVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxUaXRsZUVsZW1lbnQ+OjpHZXRJ SUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVy ZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGl0bGVFbGVtZW50 Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGlu dGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0Rh dGFbZURPTUNsYXNzSW5mb19IVE1MVUxpc3RFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5J bnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVUxpc3RFbGVtZW50Pjo6R2V0SUlE KCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZh Y2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFVMaXN0RWxlbWVudD46 OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlw ZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fSFRNTFVua25vd25FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5J bnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxFbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19IVE1MV0JSRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5z Q09NVHlwZUluZm88bnNJRE9NSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAwOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N RXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJ SUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9N Q2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTU3R5bGVS dWxlX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01DU1NTdHlsZVJ1bGU+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0 aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01DU1NTdHlsZVJ1bGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fQ1NTQ2hhcnNldFJ1bGVfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVy ZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU0NoYXJzZXRSdWxlPjo6R2V0SUlEKCk7IGQu bUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlz dFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTQ2hhcnNldFJ1bGU+OjpHZXRJSUQo KSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xh c3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTSW1wb3J0UnVs ZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N Q1NTSW1wb3J0UnVsZT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRp YyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTUNTU0ltcG9ydFJ1bGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fQ1NTTWVkaWFSdWxlX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZh Y2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NNZWRpYVJ1bGU+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NNZWRpYVJ1bGU+OjpHZXRJSUQoKSwKICAw IH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZv RGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTTmFtZVNwYWNlUnVsZV9p ZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NT UnVsZT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBu c0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1J1 bGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoK ICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9f Q1NTUnVsZUxpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJ bmZvPG5zSURPTUNTU1J1bGVMaXN0Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NQ1NTUnVsZUxpc3Q+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMg PSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0lu Zm9EYXRhW2VET01DbGFzc0luZm9fQ1NTR3JvdXBSdWxlUnVsZUxpc3RfaWRdOyA7IDsgZC5tUHJv dG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1J1bGVMaXN0Pjo6R2V0 SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRl cmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTUnVsZUxpc3Q+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fTWVkaWFM aXN0X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01NZWRpYUxpc3Q+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMg Y29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01NZWRpYUxpc3Q+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2Vf bGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01D bGFzc0luZm9fU3R5bGVTaGVldExpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSURPTVN0eWxlU2hlZXRMaXN0Pjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NU3R5bGVTaGVldExpc3Q+OjpHZXRJSUQoKSwKICAw IH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZv RGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTU3R5bGVTaGVldF9pZF07 IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTU3R5 bGVTaGVldD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNT U1N0eWxlU2hlZXQ+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2Vf bGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01D bGFzc0luZm9fQ1NTU3R5bGVEZWNsYXJhdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbj46OkdldElJRCgp OyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNl X2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1N0eWxlRGVjbGFyYXRpb24+ OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTUzJQcm9wZXJ0aWVzPjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0NTUzJQcm9wZXJ0aWVzPjo6R2V0SUlE KCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNs YXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NvbXB1dGVkQ1NT U3R5bGVEZWNsYXJhdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09N VHlwZUluZm88bnNJRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFz c0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsK CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uPjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DU1MyUHJvcGVydGllcz46OkdldElJRCgpLAogICAg Jm5zQ09NVHlwZUluZm88bnNJRE9NTlNDU1MyUHJvcGVydGllcz46OkdldElJRCgpLAogIDAgfTsg ZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRh ICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19ST0NTU1ByaW1pdGl2ZVZhbHVlX2lk XTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NQ cmltaXRpdmVWYWx1ZT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRp YyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01DU1NQcmltaXRpdmVWYWx1ZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9 IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5m b0RhdGFbZURPTUNsYXNzSW5mb19DU1NWYWx1ZUxpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbklu dGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1ZhbHVlTGlzdD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1ZhbHVlTGlzdD46OkdldElJRCgp LAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFz c0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19DU1NSZWN0X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01SZWN0Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NUmVjdD46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19DU1NSR0JDb2xv cl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N UkdCQ29sb3I+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29u c3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01S R0JDb2xvcj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19SYW5nZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NUmFuZ2U+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0 aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01SYW5nZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNSYW5nZT46 OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsg bnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19UcmVl V2Fsa2VyX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxu c0lET01UcmVlV2Fsa2VyPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3Rh dGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NVHJlZVdhbGtlcj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19TZWxlY3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSVNlbGVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVy ZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZu c0NPTVR5cGVJbmZvPG5zSVNlbGVjdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNl cyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNz SW5mb0RhdGFbZURPTUNsYXNzSW5mb19YVUxEb2N1bWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWlu SW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NWFVMRG9jdW1lbnQ+OjpHZXRJSUQoKTsg ZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9s aXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01YVUxEb2N1bWVudD46OkdldElJRCgp LAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNEb2N1bWVudD46OkdldElJRCgpLAogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRFdmVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NRG9jdW1lbnRWaWV3Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01Eb2N1bWVudFhCTD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9j dW1lbnRTdHlsZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRS YW5nZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRUcmF2ZXJz YWw+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsg ZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRh ICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19YVUxFbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01YVUxFbGVtZW50Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NWFVMRWxlbWVudD46 OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQo KSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xh c3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMQ29tbWFuZERp c3BhdGNoZXJfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZv PG5zSURPTVhVTENvbW1hbmREaXNwYXRjaGVyPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJm YWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NWFVMQ29tbWFuZERpc3BhdGNoZXI+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMTm9kZUxpc3RfaWRdOyA7IDsg ZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTU5vZGVMaXN0Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTm9kZUxpc3Q+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMTmFt ZWROb2RlTWFwX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5m bzxuc0lET01OYW1lZE5vZGVNYXA+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAw OyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01OYW1lZE5vZGVNYXA+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMg PSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0lu Zm9EYXRhW2VET01DbGFzc0luZm9fWFVMQXR0cl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQXR0cj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTUF0dHI+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMQ29udHJvbGxlcnNfaWRdOyA7IDsgZC5tUHJvdG9D aGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSUNvbnRyb2xsZXJzPjo6R2V0SUlEKCk7 IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2Vf bGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJQ29udHJvbGxlcnM+OjpHZXRJSUQoKSwK ICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJ bmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQm94T2JqZWN0X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lCb3hPYmplY3Q+ OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQg KmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lCb3hPYmplY3Q+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fVHJlZVNl bGVjdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88 bnNJVHJlZVNlbGVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0 YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZv PG5zSVRyZWVTZWxlY3Rpb24+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fVHJlZUNvbnRlbnRWaWV3X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lUcmVlQ29udGVudFZpZXc+OjpHZXRJSUQoKTsgZC5t SGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0 W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lUcmVlQ29udGVudFZpZXc+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSVRyZWVWaWV3Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NyeXB0b19pZF07IDsgOyBkLm1Qcm90b0NoYWlu SW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ3J5cHRvPjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ3J5cHRvPjo6R2V0SUlEKCksCiAgMCB9OyBk Lm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEg JmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NSTUZPYmplY3RfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNSTUZPYmplY3Q+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DUk1GT2JqZWN0Pjo6 R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBu c0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX1BrY3Mx MV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N UGtjczExPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0 IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NUGtj czExPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0K CiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZv X1hNTFN0eWxlc2hlZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbj46 OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAq aW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTVByb2Nlc3NpbmdJ bnN0cnVjdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTGlua1N0eWxl Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJ RCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQu bUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQojIDIxNjAgIm5zRE9NQ2xhc3NJbmZvLmNw cCIKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0lu Zm9fQ2hyb21lV2luZG93X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01U eXBlSW5mbzxuc0lET01XaW5kb3c+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAw OyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01XaW5kb3c+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUpT V2luZG93Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01XaW5kb3dJbnRlcm5h bD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ2hyb21lV2luZG93Pjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFJlY2VpdmVyPjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLAogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NVmlld0NTUz46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NQWJzdHJhY3RWaWV3Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX1JhbmdlRXhjZXB0aW9uX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01SYW5nZUV4Y2VwdGlvbj46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTVJhbmdlRXhjZXB0aW9uPjo6R2V0SUlE KCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lFeGNlcHRpb24+OjpHZXRJSUQoKSwKICAwIH07IGQu bUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAm ZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ29udGVudExpc3RfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9u Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTm9kZUxpc3Q+ OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0ltYWdlRG9j dW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5z SUltYWdlRG9jdW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0 aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01IVE1MRG9jdW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSUltYWdl RG9jdW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTERvY3Vt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0RvY3VtZW50Pjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudEV2ZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudFN0eWxlPjo6R2V0SUlEKCksCiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudFZpZXc+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTURvY3VtZW50UmFuZ2U+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTURvY3VtZW50VHJhdmVyc2FsPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01Eb2N1bWVudFhCTD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZl bnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KIyAyMjMwICJu c0RPTUNsYXNzSW5mby5jcHAiCiAgRGVmaW5lU3RhdGljSlNWYWxzKGN4KTsKCiAgUFJJbnQzMiBp OwoKICBmb3IgKGkgPSAwOyBpIDwgZURPTUNsYXNzSW5mb0lEQ291bnQ7ICsraSkgewogICAgUmVn aXN0ZXJDbGFzc05hbWUoaSk7CiAgfQoKICBmb3IgKGkgPSAwOyBpIDwgZURPTUNsYXNzSW5mb0lE Q291bnQ7ICsraSkgewogICAgUmVnaXN0ZXJDbGFzc1Byb3RvcyhpKTsKICB9CgogIFJlZ2lzdGVy RXh0ZXJuYWxDbGFzc2VzKCk7CgogIHNJc0luaXRpYWxpemVkID0gMTsKCiAgcmV0dXJuIDA7Cn0K CgpQUkludDMyCm5zRE9NQ2xhc3NJbmZvOjpHZXRBcnJheUluZGV4RnJvbUlkKEpTQ29udGV4dCAq Y3gsIGpzdmFsIGlkLCBQUkJvb2wgKmFJc051bWJlcikKewogIGpzZG91YmxlIGFycmF5X2luZGV4 OwoKICBpZiAoYUlzTnVtYmVyKSB7CiAgICAqYUlzTnVtYmVyID0gMDsKICB9CgogIGlmICghOjpK U19WYWx1ZVRvTnVtYmVyKGN4LCBpZCwgJmFycmF5X2luZGV4KSkgewogICAgcmV0dXJuIC0xOwog IH0KCiAganNpbnQgaSA9IC0xOwoKICBpZiAoISgoKChfX2V4dGVuc2lvbl9fICh7IGpzX2llZWVf ZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsgc2hfdS52YWx1ZSA9IChhcnJheV9pbmRleCk7IHNoX3Uu cGFydHMubXN3OyB9KSkgJiAweDdmZjAwMDAwKSAhPSAweDdmZjAwMDAwKSAmJiAhKChfX2V4dGVu c2lvbl9fICh7IGpzX2llZWVfZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsgc2hfdS52YWx1ZSA9IChh cnJheV9pbmRleCk7IHNoX3UucGFydHMubXN3OyB9KSkgPT0gMHg4MDAwMDAwMCAmJiAoX19leHRl bnNpb25fXyAoeyBqc19pZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNoX3U7IHNoX3UudmFsdWUgPSAo YXJyYXlfaW5kZXgpOyBzaF91LnBhcnRzLmxzdzsgfSkpID09IDApICYmICgoYXJyYXlfaW5kZXgp ID09IChpID0gKGpzaW50KShhcnJheV9pbmRleCkpKSkpIHsKICAgIHJldHVybiAtMTsKICB9Cgog IGlmIChhSXNOdW1iZXIpIHsKICAgICphSXNOdW1iZXIgPSAxOwogIH0KCiAgcmV0dXJuIGk7Cn0K Cm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpHZXRJbnRlcmZhY2VzKFBSVWludDMyICphQ291bnQs IG5zSUlEICoqKmFBcnJheSkKewogIFBSVWludDMyIGNvdW50ID0gMDsKCiAgd2hpbGUgKG1EYXRh LT5tSW50ZXJmYWNlc1tjb3VudF0pIHsKICAgIGNvdW50Kys7CiAgfQoKICAqYUNvdW50ID0gY291 bnQ7CgogIGlmICghY291bnQpIHsKICAgICphQXJyYXkgPSAwOwoKICAgIHJldHVybiAwOwogIH0K CiAgKmFBcnJheSA9IHN0YXRpY19jYXN0PCBuc0lJRCAqKiA+KG5zTWVtb3J5OjpBbGxvYyhjb3Vu dCAqIHNpemVvZihuc0lJRCAqKSkpOwogIGRvIHsgaWYgKCEoKmFBcnJheSkpIHsgOyByZXR1cm4g KChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyB9IH0gd2hpbGUgKDApOwoKICBQUlVpbnQzMiBpOwog IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICBuc0lJRCAqaWlkID0gc3RhdGljX2Nh c3Q8IG5zSUlEICogPihuc01lbW9yeTo6Q2xvbmUobURhdGEtPm1JbnRlcmZhY2VzW2ldLCBzaXpl b2YobnNJSUQpKSk7CgoKICAgIGlmICghaWlkKSB7CiAgICAgIGRvIHsgUFJJbnQzMiBpdGVyXyA9 IFBSSW50MzIoKGkpKTsgd2hpbGUgKC0taXRlcl8gPj0gMCkgbnNNZW1vcnk6OkZyZWUoKCgqYUFy cmF5KSlbaXRlcl9dKTsgbnNNZW1vcnk6OkZyZWUoKCgqYUFycmF5KSkpOyB9IHdoaWxlICgwKTsK CiAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICB9CgogICAgKigoKmFB cnJheSkgKyBpKSA9IGlpZDsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNz SW5mbzo6R2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBvcnRz ICoqX3JldHZhbCkKewogIGlmIChsYW5ndWFnZSA9PSBuc0lQcm9ncmFtbWluZ0xhbmd1YWdlOjpK QVZBU0NSSVBUKSB7CiAgICAqX3JldHZhbCA9IHN0YXRpY19jYXN0PCBuc0lYUENTY3JpcHRhYmxl ICogPih0aGlzKTsKCiAgICAoKl9yZXR2YWwpLT5BZGRSZWYoKTsKICB9IGVsc2UgewogICAgKl9y ZXR2YWwgPSAwOwogIH0KCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpH ZXRDb250cmFjdElEKGNoYXIgKiphQ29udHJhY3RJRCkKewogICphQ29udHJhY3RJRCA9IDA7Cgog IHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6R2V0Q2xhc3NEZXNjcmlwdGlv bihjaGFyICoqYUNsYXNzRGVzY3JpcHRpb24pCnsKICByZXR1cm4gR2V0Q2xhc3NOYW1lKGFDbGFz c0Rlc2NyaXB0aW9uKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkdldENsYXNzSUQobnND SUQgKiphQ2xhc3NJRCkKewogICphQ2xhc3NJRCA9IDA7CiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0 Cm5zRE9NQ2xhc3NJbmZvOjpHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCAqYUNsYXNzSUQpCnsKICBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA0MDExMUwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5m bzo6R2V0SW1wbGVtZW50YXRpb25MYW5ndWFnZShQUlVpbnQzMiAqYUltcGxMYW5ndWFnZSkKewog ICphSW1wbExhbmd1YWdlID0gbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZTo6Q1BMVVNQTFVTOwoKICBy ZXR1cm4gMDsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkdldEZsYWdzKFBSVWludDMyICph RmxhZ3MpCnsKICAqYUZsYWdzID0gKG5zSUNsYXNzSW5mbzo6TUFJTl9USFJFQURfT05MWSB8IG5z SUNsYXNzSW5mbzo6RE9NX09CSkVDVCk7CgogIHJldHVybiAwOwp9CgoKCm5zcmVzdWx0Cm5zRE9N Q2xhc3NJbmZvOjpHZXRDbGFzc05hbWUoY2hhciAqKmFDbGFzc05hbWUpCnsKICAqYUNsYXNzTmFt ZSA9IG5zQ1JUOjpzdHJkdXAobURhdGEtPm1OYW1lKTsKCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0 Cm5zRE9NQ2xhc3NJbmZvOjpHZXRTY3JpcHRhYmxlRmxhZ3MoUFJVaW50MzIgKmFGbGFncykKewog ICphRmxhZ3MgPSBtRGF0YS0+bVNjcmlwdGFibGVGbGFnczsKCiAgcmV0dXJuIDA7Cn0KCm5zcmVz dWx0Cm5zRE9NQ2xhc3NJbmZvOjpQcmVDcmVhdGUobnNJU3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlND b250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqZ2xvYmFsT2Jq LCBKU09iamVjdCAqKnBhcmVudE9iaikKewogIDsKCiAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw MGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkNyZWF0ZShuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmopCnsKICA7CgogIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZm TCk7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpQb3N0Q3JlYXRlKG5zSVhQQ29ubmVjdFdy YXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4 dCAqY3gsIEpTT2JqZWN0ICpvYmopCnsKICBzdGF0aWMgY29uc3QgbnNJSUQgKnNTdXBwb3J0c0lJ RCA9ICZuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCk7CgoKICBpZiAobURhdGEt Pm1Qcm90b0NoYWluSW50ZXJmYWNlID09IHNTdXBwb3J0c0lJRCB8fAogICAgICAhbURhdGEtPm1Q cm90b0NoYWluSW50ZXJmYWNlKSB7CiAgICByZXR1cm4gMDsKICB9CgogIEpTT2JqZWN0ICpwcm90 byA9IDA7CgogIHdyYXBwZXItPkdldEpTT2JqZWN0UHJvdG90eXBlKCZwcm90byk7CgogIEpTT2Jq ZWN0ICpwcm90b19wcm90byA9IDo6SlNfR2V0UHJvdG90eXBlKGN4LCBwcm90byk7CgogIEpTQ2xh c3MgKnByb3RvX3Byb3RvX2NsYXNzID0gSlNfR2V0Q2xhc3MoY3gsIHByb3RvX3Byb3RvKTsKCiAg aWYgKCFzT2JqZWN0Q2xhc3MpIHsKICAgIHNPYmplY3RDbGFzcyA9IHByb3RvX3Byb3RvX2NsYXNz OwogIH0KCiAgaWYgKHByb3RvX3Byb3RvX2NsYXNzICE9IHNPYmplY3RDbGFzcykgewoKCgoKICAg IHJldHVybiAwOwogIH0KIyAyNDU5ICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgSlNPYmplY3QgKmds b2JhbCA9IEdldEdsb2JhbEpTT2JqZWN0KGN4LCBvYmopOwoKICBqc3ZhbCB2YWw7CiAgaWYgKCE6 OkpTX0dldFByb3BlcnR5KGN4LCBnbG9iYWwsIG1EYXRhLT5tTmFtZSwgJnZhbCkpIHsKICAgIHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICByZXR1cm4gMDsKfQoKbnNyZXN1 bHQKbnNET01DbGFzc0luZm86OkFkZFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUg KndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i amVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICpfcmV0dmFsKQp7CiAgOwoKICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZm ZkwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6RGVsUHJvcGVydHkobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUkJvb2wgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5zcmVz dWx0KSAweDgwMDBmZmZmTCk7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpHZXRQcm9wZXJ0 eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2 cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIDsKCiAg cmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpTZXRQcm9wZXJ0eShuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIDsKCiAgcmV0dXJuICgo bnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkVudW1l cmF0ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAog ICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIFBSQm9vbCAqX3JldHZhbCkK ewogIGlmICghc1NlY01hbikKICAgIHJldHVybiAwOwoKCiAgbnNyZXN1bHQgcnYgPQogICAgc1Nl Y01hbi0+Q2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBtRGF0YS0+bU5hbWUsIHNFbnVtZXJh dGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVhQQ1NlY3VyaXR5TWFu YWdlcjo6QUNDRVNTX0dFVF9QUk9QRVJUWSk7CgogIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7 CgogICAgKl9yZXR2YWwgPSAwOwogIH0KCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xh c3NJbmZvOjpOZXdFbnVtZXJhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LCBQUlVpbnQzMiBlbnVtX29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpz dGF0ZXAsIGpzaWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgOwoKICByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwZmZmZkwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6UmVzb2x2ZUNv bnN0cnVjdG9yKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwKQp7CiAgSlNPYmplY3QgKmdsb2JhbCA9 IEdldEdsb2JhbEpTT2JqZWN0KGN4LCBvYmopOwoKICBqc3ZhbCB2YWw7CiAgaWYgKCE6OkpTX0dl dFByb3BlcnR5KGN4LCBnbG9iYWwsIG1EYXRhLT5tTmFtZSwgJnZhbCkpIHsKICAgIHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICBpZiAoISghKCgodmFsKSAmICgoKEpTVWlu dDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDApIHx8ICgodmFsKSA9PSAoKGpzdmFsKSgwKSkpKSkg ewoKCgoKCiAgICBKU1N0cmluZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAqKSgoc0NvbnN0 cnVjdG9yX2lkKSAmIH4oanN2YWwpKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpKSk7CiAgICBp ZiAoITo6SlNfU2V0VUNQcm9wZXJ0eShjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0NoYXJzKHN0ciks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpLCAm dmFsKSkgewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQoKICAg ICpvYmpwID0gb2JqOwogIH0KCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZv OjpOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4 dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk LCBQUlVpbnQzMiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipv YmpwLCBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoaWQgPT0gc0NvbnN0cnVjdG9yX2lkICYmICEo ZmxhZ3MgJiAweDAyKSkgewogICAgcmV0dXJuIFJlc29sdmVDb25zdHJ1Y3RvcihjeCwgb2JqLCBv YmpwKTsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6Q29udmVy dChuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg ICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAq dnAsCiAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIDsKCiAgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86 OkZpbmFsaXplKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqKQp7CiAgOwoKICByZXR1 cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6 Q2hlY2tBY2Nlc3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0 ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk LCBQUlVpbnQzMiBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQ UkJvb2wgKl9yZXR2YWwpCnsKICBQUlVpbnQzMiBtb2RlX3R5cGUgPSBtb2RlICYgKEpTQUNDX1dS SVRFIC0gMSk7CgogIGlmICgobW9kZV90eXBlID09IEpTQUNDX1dBVENIIHx8CiAgICAgICBtb2Rl X3R5cGUgPT0gSlNBQ0NfUFJPVE8gfHwKICAgICAgIG1vZGVfdHlwZSA9PSBKU0FDQ19QQVJFTlQp CiAgICAgICYmIHNTZWNNYW4pIHsKCiAgICBKU09iamVjdCAqcmVhbF9vYmogPSAwOwogICAgbnNy ZXN1bHQgcnYgPSB3cmFwcGVyLT5HZXRKU09iamVjdCgmcmVhbF9vYmopOwogICAgZG8geyBpZiAo ISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsK CiAgICBydiA9CiAgICAgIHNTZWNNYW4tPkNoZWNrUHJvcGVydHlBY2Nlc3MoY3gsIHJlYWxfb2Jq LCBtRGF0YS0+bU5hbWUsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVhQQ1NlY3VyaXR5TWFuYWdlcjo6QUNDRVNTX0dFVF9QUk9QRVJUWSk7CgogICAgaWYgKCgocnYp ICYgMHg4MDAwMDAwMCkpIHsKCiAgICAgICpfcmV0dmFsID0gMDsKICAgIH0KICB9CgogIHJldHVy biAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6Q2FsbChuc0lYUENvbm5lY3RXcmFwcGVk TmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICBKU09i amVjdCAqb2JqLCBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJndiwganN2YWwgKnZwLAogICAgICAg ICAgICAgICAgICAgICBQUkJvb2wgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDBmZmZmTCk7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpDb25zdHJ1Y3QobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJn diwKICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkK ewogIDsKCiAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNE T01DbGFzc0luZm86Okhhc0luc3RhbmNlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAq b2JqLCBqc3ZhbCB2YWwsIFBSQm9vbCAqYnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkJvb2wgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7 Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpNYXJrKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRp dmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0 ICpvYmosIHZvaWQgKmFyZywgUFJVaW50MzIgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDBmZmZmTCk7Cn0KCgoKbnNJQ2xhc3NJbmZvICoKbnNET01DbGFzc0luZm86 OkdldENsYXNzSW5mb0luc3RhbmNlKG5zRE9NQ2xhc3NJbmZvSUQgYUlEKQp7CiAgaWYgKGFJRCA+ PSBlRE9NQ2xhc3NJbmZvSURDb3VudCkgewogICAgOwoKICAgIHJldHVybiAwOwogIH0KCiAgaWYg KCFzSXNJbml0aWFsaXplZCkgewogICAgbnNyZXN1bHQgcnYgPSBJbml0KCk7CgogICAgZG8geyBp ZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiAwOyB9IH0gd2hpbGUgKDAp OwogIH0KCiAgaWYgKCFzQ2xhc3NJbmZvRGF0YVthSURdLm1DYWNoZWRDbGFzc0luZm8pIHsKICAg IG5zRE9NQ2xhc3NJbmZvRGF0YSYgZGF0YSA9IHNDbGFzc0luZm9EYXRhW2FJRF07CgogICAgZGF0 YS5tQ2FjaGVkQ2xhc3NJbmZvID0gZGF0YS51Lm1Db25zdHJ1Y3RvckZwdHIoJmRhdGEpOwogICAg ZG8geyBpZiAoIShkYXRhLm1DYWNoZWRDbGFzc0luZm8pKSB7IDsgcmV0dXJuIDA7IH0gfSB3aGls ZSAoMCk7CgogICAgKGRhdGEubUNhY2hlZENsYXNzSW5mbyktPkFkZFJlZigpOwogIH0KCiAgOwoK CiAgbnNJQ2xhc3NJbmZvICpjbGFzc2luZm8gPSBzQ2xhc3NJbmZvRGF0YVthSURdLm1DYWNoZWRD bGFzc0luZm87CgogIChjbGFzc2luZm8pLT5BZGRSZWYoKTsKCiAgcmV0dXJuIGNsYXNzaW5mbzsK fQoKCm5zSUNsYXNzSW5mbyAqCm5zRE9NQ2xhc3NJbmZvOjpHZXRDbGFzc0luZm9JbnN0YW5jZShu c0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQp7CiAgOwoKCgogIGlmICghYURhdGEtPm1DYWNoZWRD bGFzc0luZm8pIHsKICAgIGlmIChhRGF0YS0+dS5tRXh0ZXJuYWxDb25zdHJ1Y3RvckZwdHIpIHsK ICAgICAgYURhdGEtPm1DYWNoZWRDbGFzc0luZm8gPQogICAgICAgIGFEYXRhLT51Lm1FeHRlcm5h bENvbnN0cnVjdG9yRnB0cihhRGF0YS0+bU5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgYURhdGEt Pm1DYWNoZWRDbGFzc0luZm8gPSBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUoYURhdGEpOwogICAg fQogICAgZG8geyBpZiAoIShhRGF0YS0+bUNhY2hlZENsYXNzSW5mbykpIHsgOyByZXR1cm4gMDsg fSB9IHdoaWxlICgwKTsKCiAgICAoYURhdGEtPm1DYWNoZWRDbGFzc0luZm8pLT5BZGRSZWYoKTsK ICAgIGFEYXRhLT5tQ2FjaGVkQ2xhc3NJbmZvID0gKG5zSUNsYXNzSW5mbyopKFB0ckJpdHMoYURh dGEtPm1DYWNoZWRDbGFzc0luZm8pIHwgMHgxKTsKICB9CgogIG5zSUNsYXNzSW5mbyAqY2xhc3Np bmZvID0gKG5zSUNsYXNzSW5mbyopKFB0ckJpdHMoYURhdGEtPm1DYWNoZWRDbGFzc0luZm8pICYg fjB4MSk7CgogIChjbGFzc2luZm8pLT5BZGRSZWYoKTsKCiAgcmV0dXJuIGNsYXNzaW5mbzsKfQoK CnZvaWQKbnNET01DbGFzc0luZm86OlNodXREb3duKCkKewogIGlmIChzQ2xhc3NJbmZvRGF0YVsw XS51Lm1Db25zdHJ1Y3RvckZwdHIpIHsKICAgIFBSVWludDMyIGk7CgogICAgZm9yIChpID0gMDsg aSA8IGVET01DbGFzc0luZm9JRENvdW50OyBpKyspIHsKICAgICAgZG8geyBpZiAoc0NsYXNzSW5m b0RhdGFbaV0ubUNhY2hlZENsYXNzSW5mbykgeyAoc0NsYXNzSW5mb0RhdGFbaV0ubUNhY2hlZENs YXNzSW5mbyktPlJlbGVhc2UoKTsgKHNDbGFzc0luZm9EYXRhW2ldLm1DYWNoZWRDbGFzc0luZm8p ID0gMDsgfSB9IHdoaWxlICgwKTsKICAgIH0KICB9CgogIHNUb3BfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3JvbGxiYXJzX2lkID0gKCgo anN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzTG9jYXRpb25f aWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHND b21wb25lbnRzX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwg MHgxKTsKICBzQ29uc3RydWN0b3JfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzAp KSkgPDwgMSkgfCAweDEpOwogIHNfY29udGVudF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkx IDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc0NvbnRlbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgo anN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTaWRlYmFyX2lkID0gKCgoanN2YWwp KDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzTWVudWJhcl9pZCA9ICgo KGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1Rvb2xiYXJf aWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNM b2NhdGlvbmJhcl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CiAgc1BlcnNvbmFsYmFyX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMw KSkpIDw8IDEpIHwgMHgxKTsKICBzU3RhdHVzYmFyX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzRGlyZWN0b3JpZXNfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNDb250cm9sbGVyc19pZCA9 ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc0xlbmd0 aF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAg c0lubmVySGVpZ2h0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEp IHwgMHgxKTsKICBzSW5uZXJXaWR0aF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgz MCkpKSA8PCAxKSB8IDB4MSk7CiAgc091dGVySGVpZ2h0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpz dmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT3V0ZXJXaWR0aF9pZCA9ICgoKGpzdmFs KSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1NjcmVlblhfaWQgPSAo KChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3JlZW5Z X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBz U3RhdHVzX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KTsKICBzTmFtZV9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CiAgc09ubW91c2Vkb3duX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMw KSkpIDw8IDEpIHwgMHgxKTsKICBzT25tb3VzZXVwX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25jbGlja19pZCA9ICgoKGpzdmFsKSgwIC0g KChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc09uY29udGV4dG1lbnVfaWQgPSAo KChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNPbm1vdXNl b3Zlcl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7 CiAgc09ubW91c2VvdXRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwogIHNPbmtleWRvd25faWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAo MzApKSkgPDwgMSkgfCAweDEpOwogIHNPbmtleXVwX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25rZXlwcmVzc19pZCA9ICgoKGpzdmFsKSgw IC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc09ubW91c2Vtb3ZlX2lkID0g KCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25mb2N1 c19pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAg c09uYmx1cl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4 MSk7CiAgc09uc3VibWl0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8 IDEpIHwgMHgxKTsKICBzT25yZXNldF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgz MCkpKSA8PCAxKSB8IDB4MSk7CiAgc09uY2hhbmdlX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25zZWxlY3RfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNPbmxvYWRfaWQgPSAoKChqc3Zh bCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNPbnVubG9hZF9pZCA9 ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc09uYWJv cnRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwog IHNPbmVycm9yX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwg MHgxKTsKICBzT25wYWludF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8 PCAxKSB8IDB4MSk7CiAgc09ucmVzaXplX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwg KDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25zY3JvbGxfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3JvbGxJbnRvVmlld19pZCA9ICgoKGpz dmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1Njcm9sbFhfaWQg PSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3Jv bGxZX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsK ICBzT3Blbl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4 MSk7CiAgc0l0ZW1faWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwogIHNFbnVtZXJhdGVfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzAp KSkgPDwgMSkgfCAweDEpOwogIHNOYXZpZ2F0b3JfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwp MSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNEb2N1bWVudF9pZCA9ICgoKGpzdmFsKSgwIC0g KChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1dpbmRvd19pZCA9ICgoKGpzdmFs KSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc0ZyYW1lc19pZCA9ICgo KGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CgogIGRvIHsgaWYg KHNYUENvbm5lY3QpIHsgKHNYUENvbm5lY3QpLT5SZWxlYXNlKCk7IChzWFBDb25uZWN0KSA9IDA7 IH0gfSB3aGlsZSAoMCk7CiAgZG8geyBpZiAoc1NlY01hbikgeyAoc1NlY01hbiktPlJlbGVhc2Uo KTsgKHNTZWNNYW4pID0gMDsgfSB9IHdoaWxlICgwKTsKfQoKCnN0YXRpYyBjb25zdCBuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICpjYWNoZWRfd3JhcHBlcjsKc3RhdGljIGNvbnN0IEpTQ29udGV4 dCAqY2FjaGVkX2N4OwoKdm9pZCBJbnZhbGlkYXRlQ29udGV4dEFuZFdyYXBwZXJDYWNoZSgpCnsK ICBjYWNoZWRfd3JhcHBlciA9IDA7CiAgY2FjaGVkX2N4ID0gMDsKfQoKCgoKCnN0YXRpYyBpbmxp bmUgUFJCb29sCm5lZWRzU2VjdXJpdHlDaGVjayhKU0NvbnRleHQgKmN4LCBuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyKQp7CgoKCgoKCgogIGlmIChjeCAhPSBjYWNoZWRfY3ggfHwg d3JhcHBlciAhPSBjYWNoZWRfd3JhcHBlcikgewogICAgY2FjaGVkX2N4ID0gMDsKICAgIGNhY2hl ZF93cmFwcGVyID0gMDsKCiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwogICAgd3Jh cHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRyPG5z SVNjcmlwdEdsb2JhbE9iamVjdD4gc2dvKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwoKICAg IGlmICghc2dvKSB7CiAgICAgIDsKCiAgICAgIHJldHVybiAxOwogICAgfQoKICAgIG5zQ09NUHRy PG5zSVNjcmlwdENvbnRleHQ+IG90aGVyU2NyaXB0Q29udGV4dDsKICAgIHNnby0+R2V0Q29udGV4 dChnZXR0ZXJfQWRkUmVmcyhvdGhlclNjcmlwdENvbnRleHQpKTsKCiAgICBpZiAoIW90aGVyU2Ny aXB0Q29udGV4dCkgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpZiAoY3ggIT0gKEpTQ29u dGV4dCAqKW90aGVyU2NyaXB0Q29udGV4dC0+R2V0TmF0aXZlQ29udGV4dCgpKSB7CiAgICAgIHJl dHVybiAxOwogICAgfQogIH0KCgoKICBKU1N0YWNrRnJhbWUgKmZwID0gMDsKICBKU09iamVjdCAq ZnBfb2JqID0gMDsKCiAgZG8gewogICAgZnAgPSA6OkpTX0ZyYW1lSXRlcmF0b3IoY3gsICZmcCk7 CgogICAgaWYoIWZwKSB7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGZwX29iaiA9IDo6SlNfR2V0 RnJhbWVGdW5jdGlvbk9iamVjdChjeCwgZnApOwogIH0gd2hpbGUgKCFmcF9vYmopOwoKICBpZiAo ZnBfb2JqKSB7CiAgICBKU09iamVjdCAqZ2xvYmFsID0gR2V0R2xvYmFsSlNPYmplY3QoY3gsIGZw X29iaik7CgogICAgSlNPYmplY3QgKndyYXBwZXJfb2JqID0gMDsKICAgIHdyYXBwZXItPkdldEpT T2JqZWN0KCZ3cmFwcGVyX29iaik7CgogICAgaWYgKGdsb2JhbCAhPSB3cmFwcGVyX29iaikgewog ICAgICByZXR1cm4gMTsKICAgIH0KICB9CgogIGNhY2hlZF9jeCA9IGN4OwogIGNhY2hlZF93cmFw cGVyID0gd3JhcHBlcjsKCiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZv Ojpkb0NoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2 YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBhY2Nlc3NNb2RlLCBQUkJvb2wgaXNXaW5kb3cpCnsKICBpZiAoIXNTZWNN YW4pIHsKICAgIHJldHVybiAwOwogIH0KCgoKICBpZiAoaWQgPT0gc0NvbXBvbmVudHNfaWQgJiYK ICAgICAgYWNjZXNzTW9kZSA9PSBuc0lYUENTZWN1cml0eU1hbmFnZXI6OkFDQ0VTU19HRVRfUFJP UEVSVFkgJiYgaXNXaW5kb3cpIHsKICAgIHJldHVybiAwOwogIH0KCiAgbnNDT01QdHI8bnNJU3Vw cG9ydHM+IG5hdGl2ZTsKICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZl KSk7CgogIG5zQ09NUHRyPG5zSVNjcmlwdEdsb2JhbE9iamVjdD4gc2dvKGRvX1F1ZXJ5SW50ZXJm YWNlKG5hdGl2ZSkpOwoKICBpZiAoIXNnbykgewogICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRv Yyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEoZG9jKSkgeyA7IHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgZG9jLT5H ZXRTY3JpcHRHbG9iYWxPYmplY3QoZ2V0dGVyX0FkZFJlZnMoc2dvKSk7CgogICAgaWYgKCFzZ28p IHsKIyAyOTMwICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgICAgIHJldHVybiAwOwogICAgfQogIH0K CiAgbnNDT01QdHI8bnNJU2NyaXB0Q29udGV4dD4gc2N4OwogIHNnby0+R2V0Q29udGV4dChnZXR0 ZXJfQWRkUmVmcyhzY3gpKTsKCiAgaWYgKCFzY3ggfHwgKChzY3gtPklzQ29udGV4dEluaXRpYWxp emVkKCkpICYgMHg4MDAwMDAwMCkpIHsKICAgIHJldHVybiAwOwogIH0KCiAgSlNPYmplY3QgKmds b2JhbCA9IHNnby0+R2V0R2xvYmFsSlNPYmplY3QoKTsKCiAgcmV0dXJuIHNTZWNNYW4tPkNoZWNr UHJvcGVydHlBY2Nlc3MoY3gsIGdsb2JhbCwgbURhdGEtPm1OYW1lLCBpZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NNb2RlKTsKfQoKbnNyZXN1bHQKbnNXaW5k b3dTSDo6UHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAqIGN4LAog ICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKiBnbG9iYWxPYmosIEpTT2JqZWN0ICogKnBh cmVudE9iaikKewojIDI5NjMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIKICBuc0NPTVB0cjxuc0lTY3Jp cHRHbG9iYWxPYmplY3Q+IHNnbyhkb19RdWVyeUludGVyZmFjZShuYXRpdmVPYmopKTsKICA7Cgog IGlmIChzZ28pIHsKICAgICpwYXJlbnRPYmogPSBzZ28tPkdldEdsb2JhbEpTT2JqZWN0KCk7Cgog ICAgaWYgKCpwYXJlbnRPYmopIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKCgoKCiAgKnBh cmVudE9iaiA9IGdsb2JhbE9iajsKCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zV2luZG93U0g6 OkdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4 dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBq c3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewoKCgoKICBpZiAoKCgoKGlkKSAmIDB4MSkgJiYg KGlkKSAhPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpKSB8 fCAoKChpZCkgJiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHgyKSkpIHsKCgoKCgog ICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShn ZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lET01XaW5kb3dJbnRlcm5h bD4gd2luKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRyPG5zSURPTVdp bmRvd0NvbGxlY3Rpb24+IGZyYW1lczsKICAgIHdpbi0+R2V0RnJhbWVzKGdldHRlcl9BZGRSZWZz KGZyYW1lcykpOwoKICAgIGlmIChmcmFtZXMpIHsKICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93 PiBmcmFtZTsKICAgICAgZnJhbWVzLT5JdGVtKCgoanNpbnQpKGlkKSA+PiAxKSwgZ2V0dGVyX0Fk ZFJlZnMoZnJhbWUpKTsKCiAgICAgIGlmIChmcmFtZSkgewoKCgoKICAgICAgICByZXR1cm4gV3Jh cE5hdGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBmcmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSURPTVdpbmRvdz46OkdldElJRCgpLCB2cCk7 CiAgICAgIH0KICAgIH0KICB9CgogIGlmIChuZWVkc1NlY3VyaXR5Q2hlY2soY3gsIHdyYXBwZXIp KSB7CgoKCgogICAgaWYgKCgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAw eDQpICYmICEoISgoKCp2cCkgJiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHgwKSB8 fCAoKCp2cCkgPT0gKChqc3ZhbCkoMCkpKSkgJiYKICAgICAgICA6OkpTX1R5cGVPZlZhbHVlKGN4 LCAqdnApICE9IEpTVFlQRV9GVU5DVElPTikgewoKCgoKCiAgICAgIG5zQ09NUHRyPG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmU+IHdyYXBwZXI7CiAgICAgIHNYUENvbm5lY3QtPkdldFdyYXBwZWRO YXRpdmVPZkpTT2JqZWN0KGN4LCAoKEpTT2JqZWN0ICopKCh2b2lkICopKCgqdnApICYgfihqc3Zh bCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMod3JhcHBlcikpOwoKICAgICAgaWYg KHdyYXBwZXIpIHsKICAgICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwogICAgICAg IHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKCiAgICAgICAgbnND T01QdHI8bnNJRE9NV2luZG93PiB3aW5kb3coZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7Cgog ICAgICAgIGlmICh3aW5kb3cpIHsKCgoKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAg ICAgfQogICAgfQoKICAgIG5zcmVzdWx0IHJ2ID0KICAgICAgZG9DaGVja1Byb3BlcnR5QWNjZXNz KGN4LCBvYmosIGlkLCB3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJWFBD U2VjdXJpdHlNYW5hZ2VyOjpBQ0NFU1NfR0VUX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSk7CgogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHsKCgoKICAgICAgKl9y ZXR2YWwgPSAwOwoKICAgICAgKnZwID0gKChqc3ZhbCkoMCkpOwogICAgfQogIH0KCiAgcmV0dXJu IDA7Cn0KCm5zcmVzdWx0Cm5zV2luZG93U0g6OlNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAg IEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewog IGlmIChuZWVkc1NlY3VyaXR5Q2hlY2soY3gsIHdyYXBwZXIpKSB7CiAgICBuc3Jlc3VsdCBydiA9 CiAgICAgIGRvQ2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBpZCwgd3JhcHBlciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVhQQ1NlY3VyaXR5TWFuYWdlcjo6QUNDRVNTX1NFVF9Q Uk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwoKICAgIGlmICgoKHJ2KSAm IDB4ODAwMDAwMDApKSB7CgoKCiAgICAgICpfcmV0dmFsID0gMDsKCiAgICAgIHJldHVybiAwOwog ICAgfQogIH0KCiAgaWYgKGlkID09IHNMb2NhdGlvbl9pZCkgewogICAgSlNTdHJpbmcgKnZhbCA9 IDo6SlNfVmFsdWVUb1N0cmluZyhjeCwgKnZwKTsKICAgIGRvIHsgaWYgKCEodmFsKSkgeyA7IHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01Q dHI8bnNJU3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRk UmVmcyhuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lET01XaW5kb3dJbnRlcm5hbD4gd2luZG93 KGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwogICAgZG8geyBpZiAoISh3aW5kb3cpKSB7IDsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICBuc0NP TVB0cjxuc0lET01Mb2NhdGlvbj4gbG9jYXRpb247CiAgICBuc3Jlc3VsdCBydiA9IHdpbmRvdy0+ R2V0TG9jYXRpb24oZ2V0dGVyX0FkZFJlZnMobG9jYXRpb24pKTsKICAgIGRvIHsgaWYgKCEoKCEo KHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAg bnNEZXBlbmRlbnRTdHJpbmcgaHJlZihyZWludGVycHJldF9jYXN0PCBQUlVuaWNoYXIgKiA+KDo6 SlNfR2V0U3RyaW5nQ2hhcnModmFsKSksCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpT X0dldFN0cmluZ0xlbmd0aCh2YWwpKTsKCiAgICBydiA9IGxvY2F0aW9uLT5TZXRIcmVmKGhyZWYp OwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKCiAgICByZXR1cm4gV3JhcE5hdGl2ZShjeCwgb2JqLCBsb2NhdGlvbiwg bnNDT01UeXBlSW5mbzxuc0lET01Mb2NhdGlvbj46OkdldElJRCgpLCB2cCk7CiAgfQoKICByZXR1 cm4gbnNFdmVudFJlY2lldmVyU0g6OlNldFByb3BlcnR5KHdyYXBwZXIsIGN4LCBvYmosIGlkLCB2 cCwgX3JldHZhbCk7Cn0KCm5zcmVzdWx0Cm5zV2luZG93U0g6OkFkZFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg ICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewoKCiAgaWYgKCFzRG9TZWN1cml0eUNoZWNr SW5BZGRQcm9wZXJ0eSkgewogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoaWQgPT0gc0xvY2F0aW9u X2lkKSB7CgoKCiAgICByZXR1cm4gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDEpPDwzMSkgfCAo KFBSVWludDMyKSgxNCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEwMDApKSkgKTsKICB9Cgog IG5zcmVzdWx0IHJ2ID0KICAgIGRvQ2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBpZCwgd3Jh cHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUENTZWN1cml0eU1hbmFnZXI6OkFD Q0VTU19TRVRfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CgogIGlmICgo KHJ2KSAmIDB4ODAwMDAwMDApKSB7CgoKCiAgICAqX3JldHZhbCA9IDA7CiAgfQoKICByZXR1cm4g MDsKfQoKbnNyZXN1bHQKbnNXaW5kb3dTSDo6RGVsUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBl ZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg SlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKGlkID09IHNMb2NhdGlvbl9pZCkgewoKCgogICAg cmV0dXJuICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQg KzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxMDAwKSkpICk7CiAgfQoKICBuc3Jlc3VsdCBydiA9 CiAgICBkb0NoZWNrUHJvcGVydHlBY2Nlc3MoY3gsIG9iaiwgaWQsIHdyYXBwZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOjpBQ0NFU1NfU0VUX1BST1BF UlRZLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwoKICBpZiAoKChydikgJiAweDgwMDAw MDAwKSkgewoKCgogICAgKl9yZXR2YWwgPSAwOwogIH0KCiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBK U0Jvb2wKQmFzZVN0dWJDb25zdHJ1Y3Rvcihjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5hbWVf c3RydWN0LCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmos IHVpbnROIGFyZ2MsIGpzdmFsICphcmd2LCBqc3ZhbCAqcnZhbCkKewogIG5zcmVzdWx0IHJ2Owog IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9 PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvcikgewogICAgbmF0 aXZlID0gZG9fQ3JlYXRlSW5zdGFuY2UobmFtZV9zdHJ1Y3QtPm1DSUQsICZydik7CiAgfSBlbHNl IGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUV4dGVy bmFsQ29uc3RydWN0b3JBbGlhcykgewogICAgbmF0aXZlID0gZG9fQ3JlYXRlSW5zdGFuY2UobmFt ZV9zdHJ1Y3QtPm1BbGlhcy0+bUNJRCwgJnJ2KTsKICB9IGVsc2UgewogICAgbmF0aXZlID0gZG9f Q3JlYXRlSW5zdGFuY2UoKm5hbWVfc3RydWN0LT5tRGF0YS0+bUNvbnN0cnVjdG9yQ0lELCAmcnYp OwogIH0KICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgewogICAgOwogICAgbnNET01DbGFzc0lu Zm86OlRocm93SlNFeGNlcHRpb24oY3gsIHJ2KTsKCiAgICByZXR1cm4gKEpTSW50bikwOwogIH0K CiAgbnNDT01QdHI8bnNJSlNOYXRpdmVJbml0aWFsaXplcj4gaW5pdGlhbGl6ZXIoZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CiAgaWYgKGluaXRpYWxpemVyKSB7CiAgICBydiA9IGluaXRpYWxp emVyLT5Jbml0aWFsaXplKGN4LCBvYmosIGFyZ2MsIGFyZ3YpOwogICAgaWYgKCgocnYpICYgMHg4 MDAwMDAwMCkpIHsKICAgICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgo KG5zcmVzdWx0KSAweEMxRjMwMDAwKSArIDEpKTsKCiAgICAgIHJldHVybiAoSlNJbnRuKTA7CiAg ICB9CiAgfQoKICBuc0NPTVB0cjxuc0lTY3JpcHRPYmplY3RPd25lcj4gb3duZXIoZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CiAgaWYgKG93bmVyKSB7CiAgICBuc0NPTVB0cjxuc0lTY3JpcHRD b250ZXh0PiBjb250ZXh0OwoKICAgIG5zSlNVdGlsczo6R2V0U3RhdGljU2NyaXB0Q29udGV4dChj eCwgb2JqLCBnZXR0ZXJfQWRkUmVmcyhjb250ZXh0KSk7CiAgICBpZiAoIWNvbnRleHQpIHsKICAg ICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAw MGZmZmZMKSk7CgogICAgICByZXR1cm4gKEpTSW50bikwOwogICAgfQoKICAgIEpTT2JqZWN0KiBu ZXdfb2JqOwogICAgcnYgPSBvd25lci0+R2V0U2NyaXB0T2JqZWN0KGNvbnRleHQsICh2b2lkKiop Jm5ld19vYmopOwoKICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpKSB7CiAgICAgICpydmFs ID0gKChqc3ZhbCkobmV3X29iaikpOwogICAgfQoKICAgIHJldHVybiBydjsKICB9CgogIHJ2ID0g bnNET01HZW5lcmljU0g6OldyYXBOYXRpdmUoY3gsIDo6SlNfR2V0R2xvYmFsT2JqZWN0KGN4KSwg bmF0aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxu c0lTdXBwb3J0cz46OkdldElJRCgpLCBydmFsKTsKCiAgcmV0dXJuICghKChydikgJiAweDgwMDAw MDAwKSkgPyAoSlNJbnRuKTEgOiAoSlNJbnRuKTA7Cn0KCnN0YXRpYyBuc3Jlc3VsdApEZWZpbmVJ bnRlcmZhY2VDb25zdGFudHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgbnNJ SUQgKmFJSUQpCnsKICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJbmZvTWFuYWdlcj4gaWltID0KICAg IGRvbnRfQWRkUmVmKFhQVElfR2V0SW50ZXJmYWNlSW5mb01hbmFnZXIoKSk7CiAgZG8geyBpZiAo IShpaW0pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgw KTsKCiAgbnNDT01QdHI8bnNJSW50ZXJmYWNlSW5mbz4gaWZfaW5mbzsKCiAgbnNyZXN1bHQgcnYg PSBpaW0tPkdldEluZm9Gb3JJSUQoYUlJRCwgZ2V0dGVyX0FkZFJlZnMoaWZfaW5mbykpOwogIGRv IHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSAmJiBpZl9pbmZvKSkgeyA7IHJldHVybiBy djsgfSB9IHdoaWxlICgwKTsKCiAgUFJVaW50MTYgY29uc3RhbnRfY291bnQ7CgogIGlmX2luZm8t PkdldENvbnN0YW50Q291bnQoJmNvbnN0YW50X2NvdW50KTsKCiAgaWYgKCFjb25zdGFudF9jb3Vu dCkgewogICAgcmV0dXJuIDA7CiAgfQoKICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJbmZvPiBwYXJl bnRfaWZfaW5mbzsKCiAgcnYgPSBpZl9pbmZvLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFy ZW50X2lmX2luZm8pKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgcGFy ZW50X2lmX2luZm8pKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICBQUlVpbnQxNiBw YXJlbnRfY29uc3RhbnRfY291bnQsIGk7CiAgcGFyZW50X2lmX2luZm8tPkdldENvbnN0YW50Q291 bnQoJnBhcmVudF9jb25zdGFudF9jb3VudCk7CgogIGZvciAoaSA9IHBhcmVudF9jb25zdGFudF9j b3VudDsgaSA8IGNvbnN0YW50X2NvdW50OyBpKyspIHsKICAgIGNvbnN0IG5zWFBUQ29uc3RhbnQg KmMgPSAwOwoKICAgIHJ2ID0gaWZfaW5mby0+R2V0Q29uc3RhbnQoaSwgJmMpOwogICAgZG8geyBp ZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIGMpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hp bGUgKDApOwoKICAgIFBSVWludDE2IHR5cGUgPSBjLT5HZXRUeXBlKCkuVGFnUGFydCgpOwoKICAg IGpzdmFsIHY7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTg6 CiAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1U4OgogICAgICB7CiAgICAgICAgdiA9ICgoKGpzdmFs KShjLT5HZXRWYWx1ZSgpLT52YWwudTgpIDw8IDEpIHwgMHgxKTsKICAgICAgICBicmVhazsKICAg ICAgfQogICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JMTY6CiAgICAgIGNhc2UgbnNYUFRUeXBlOjpU X1UxNjoKICAgICAgewogICAgICAgIHYgPSAoKChqc3ZhbCkoYy0+R2V0VmFsdWUoKS0+dmFsLnUx NikgPDwgMSkgfCAweDEpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgbnNYUFRU eXBlOjpUX0kzMjoKICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfVTMyOgogICAgICB7CiAgICAgICAg diA9ICgoKGpzdmFsKShjLT5HZXRWYWx1ZSgpLT52YWwudTMyKSA8PCAxKSB8IDB4MSk7CiAgICAg ICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgewoKCgogICAgICAgIGNvbnRp bnVlOwogICAgICB9CiAgICB9CgogICAgaWYgKCE6OkpTX0RlZmluZVByb3BlcnR5KGN4LCBvYmos IGMtPkdldE5hbWUoKSwgdiwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAx KSkgewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQogIH0KCiAg cmV0dXJuIDA7Cn0KCnN0YXRpYyBKU0Jvb2wKRE9NSlNDbGFzc19Db25zdHJ1Y3QoSlNDb250ZXh0 ICpjeCwgSlNPYmplY3QgKm9iaiwgdWludE4gYXJnYywganN2YWwgKmFyZ3YsCiAgICAgICAgICAg ICAgICAgICAgIGpzdmFsICpydmFsKQp7CiAgSlNPYmplY3QqIGNsYXNzX29iaiA9ICgoSlNPYmpl Y3QgKikoKHZvaWQgKikoKGFyZ3ZbLTJdKSAmIH4oanN2YWwpKCgoSlNVaW50MzIpMSA8PCAoMykp IC0gMSkpKSk7CiAgaWYgKCFjbGFzc19vYmopIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJbmZvOjpU aHJvd0pTRXhjZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgIHJldHVy biAoSlNJbnRuKTA7CiAgfQoKICBjb25zdCBQUlVuaWNoYXIqIGNsYXNzX25hbWUgPQogICAgICBj b25zdF9jYXN0PCBjb25zdCBQUlVuaWNoYXIgKiA+KHN0YXRpY19jYXN0PCBQUlVuaWNoYXIgKiA+ KDo6SlNfR2V0UHJpdmF0ZShjeCwgY2xhc3Nfb2JqKSkpOwoKCgogIGV4dGVybiBuc1NjcmlwdE5h bWVTcGFjZU1hbmFnZXIgKmdOYW1lU3BhY2VNYW5hZ2VyOwogIGlmICghY2xhc3NfbmFtZSB8fCAh Z05hbWVTcGFjZU1hbmFnZXIpIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJbmZvOjpUaHJvd0pTRXhj ZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgIHJldHVybiAoSlNJbnRu KTA7CiAgfQoKICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5hbWVfc3RydWN0ID0gMDsKICBn TmFtZVNwYWNlTWFuYWdlci0+TG9va3VwTmFtZShuc0RlcGVuZGVudFN0cmluZyhjbGFzc19uYW1l KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9zdHJ1Y3QpOwogIGlmICgh bmFtZV9zdHJ1Y3QpIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJbmZvOjpUaHJvd0pTRXhjZXB0aW9u KGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgIHJldHVybiAoSlNJbnRuKTA7CiAg fQoKICBpZiAoKG5hbWVfc3RydWN0LT5tVHlwZSAhPSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBl RXh0ZXJuYWxDbGFzc0luZm8gfHwKICAgICAgICFuYW1lX3N0cnVjdC0+bURhdGEtPm1Db25zdHJ1 Y3RvckNJRCkgJiYKICAgICAgbmFtZV9zdHJ1Y3QtPm1UeXBlICE9IG5zR2xvYmFsTmFtZVN0cnVj dDo6ZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yICYmCiAgICAgIG5hbWVfc3RydWN0LT5tVHlwZSAh PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvckFsaWFzKSB7Cgog ICAgOwogICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQp ICgoKFBSVWludDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikgfCAoKFBS VWludDMyKSg5KSkpICkpOwoKICAgIHJldHVybiAoSlNJbnRuKTA7CiAgfQoKICByZXR1cm4gQmFz ZVN0dWJDb25zdHJ1Y3RvcihuYW1lX3N0cnVjdCwgY3gsIG9iaiwgYXJnYywgYXJndiwgcnZhbCk7 Cn0KCnN0YXRpYyBKU0Jvb2wKRE9NSlNDbGFzc19IYXNJbnN0YW5jZShKU0NvbnRleHQgKmN4LCBK U09iamVjdCAqb2JqLCBqc3ZhbCB2LCBKU0Jvb2wgKmJwKQp7CiAgSlNPYmplY3QgKmRvbV9vYmo7 CiAgaWYgKCE6OkpTX1ZhbHVlVG9PYmplY3QoY3gsIHYsICZkb21fb2JqKSkgewogICAgOwogICAg bnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpICgoKFBSVWlu dDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSg5 KSkpICkpOwoKICAgIHJldHVybiAoSlNJbnRuKTA7CiAgfQoKICBpZiAoIWRvbV9vYmopIHsKICAg IHJldHVybiAoSlNJbnRuKTE7CiAgfQoKICBKU0NsYXNzICpkb21fY2xhc3MgPSBKU19HZXRDbGFz cyhjeCwgZG9tX29iaik7CiAgaWYgKCFkb21fY2xhc3MpIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJ bmZvOjpUaHJvd0pTRXhjZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAg IHJldHVybiAoSlNJbnRuKTA7CiAgfQoKICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5hbWVf c3RydWN0ID0gMDsKCiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAqZ05hbWVTcGFj ZU1hbmFnZXI7CiAgaWYgKCFnTmFtZVNwYWNlTWFuYWdlcikgewogICAgOwogICAgbnNET01DbGFz c0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7Cgog ICAgcmV0dXJuIChKU0ludG4pMDsKICB9CgogIGdOYW1lU3BhY2VNYW5hZ2VyLT5Mb29rdXBOYW1l KE5TX0NvbnZlcnRBU0NJSXRvVUNTMihkb21fY2xhc3MtPm5hbWUpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZuYW1lX3N0cnVjdCk7CiAgaWYgKCFuYW1lX3N0cnVjdCkgewogICAg OwogICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKSk7CgogICAgcmV0dXJuIChKU0ludG4pMDsKICB9CgogIDsKCgoKCiAgY29uc3Qg UFJVbmljaGFyKiBjbGFzc19uYW1lID0KICAgICAgY29uc3RfY2FzdDwgY29uc3QgUFJVbmljaGFy ICogPihzdGF0aWNfY2FzdDwgUFJVbmljaGFyICogPig6OkpTX0dldFByaXZhdGUoY3gsIG9iaikp KTsKCgogIGlmICghY2xhc3NfbmFtZSkgewogICAgOwogICAgbnNET01DbGFzc0luZm86OlRocm93 SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7CgogICAgcmV0dXJuIChK U0ludG4pMDsKICB9CgogIGNvbnN0IG5zR2xvYmFsTmFtZVN0cnVjdCAqY2xhc3NfbmFtZV9zdHJ1 Y3QgPSAwOwogIGdOYW1lU3BhY2VNYW5hZ2VyLT5Mb29rdXBOYW1lKG5zRGVwZW5kZW50U3RyaW5n KGNsYXNzX25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGFzc19uYW1l X3N0cnVjdCk7CiAgaWYgKCFjbGFzc19uYW1lX3N0cnVjdCkgewogICAgOwogICAgbnNET01DbGFz c0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7Cgog ICAgcmV0dXJuIChKU0ludG4pMDsKICB9CgogIGlmIChjbGFzc19uYW1lX3N0cnVjdC0+bVR5cGUg IT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzUHJvdG8gJiYKICAgICAgY2xhc3NfbmFt ZV9zdHJ1Y3QtPm1UeXBlICE9IG5zR2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVJbnRlcmZhY2UpIHsK ICAgICpicCA9IChuYW1lX3N0cnVjdCA9PSBjbGFzc19uYW1lX3N0cnVjdCk7CgogICAgcmV0dXJu IChKU0ludG4pMTsKICB9CgogIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1l U3RydWN0OjplVHlwZUV4dGVybmFsQ29uc3RydWN0b3JBbGlhcykgewogICAgbmFtZV9zdHJ1Y3Qg PSBnTmFtZVNwYWNlTWFuYWdlci0+R2V0Q29uc3RydWN0b3JQcm90byhuYW1lX3N0cnVjdCk7CiAg ICBpZiAoIW5hbWVfc3RydWN0KSB7CiAgICAgIDsKICAgICAgbnNET01DbGFzc0luZm86OlRocm93 SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7CgogICAgICByZXR1cm4g KEpTSW50bikwOwogICAgfQogIH0KCiAgOwoKCgogIGNvbnN0IG5zRE9NQ2xhc3NJbmZvRGF0YSAq Y2lfZGF0YSA9IDA7CiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1 Y3Q6OmVUeXBlQ2xhc3NDb25zdHJ1Y3RvciAmJgogICAgICBuYW1lX3N0cnVjdC0+bURPTUNsYXNz SW5mb0lEID49IDApIHsKICAgIGNpX2RhdGEgPSAmc0NsYXNzSW5mb0RhdGFbbmFtZV9zdHJ1Y3Qt Pm1ET01DbGFzc0luZm9JRF07CiAgfSBlbHNlIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNH bG9iYWxOYW1lU3RydWN0OjplVHlwZUV4dGVybmFsQ2xhc3NJbmZvKSB7CiAgICBjaV9kYXRhID0g bmFtZV9zdHJ1Y3QtPm1EYXRhOwogIH0KCiAgbnNDT01QdHI8bnNJSW50ZXJmYWNlSW5mb01hbmFn ZXI+IGlpbSA9CiAgICBkb250X0FkZFJlZihYUFRJX0dldEludGVyZmFjZUluZm9NYW5hZ2VyKCkp OwogIGlmICghaWltKSB7CiAgICA7CiAgICBuc0RPTUNsYXNzSW5mbzo6VGhyb3dKU0V4Y2VwdGlv bihjeCwgKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpKTsKCiAgICByZXR1cm4gKEpTSW50bikwOwog IH0KCiAgbnNDT01QdHI8bnNJSW50ZXJmYWNlSW5mbz4gaWZfaW5mbzsKICBQUlVpbnQzMiBjb3Vu dCA9IDA7CiAgY29uc3QgbnNJSUQqIGNsYXNzX2ludGVyZmFjZTsKICB3aGlsZSAoKGNsYXNzX2lu dGVyZmFjZSA9IGNpX2RhdGEtPm1JbnRlcmZhY2VzW2NvdW50KytdKSkgewogICAgaWYgKGNsYXNz X25hbWVfc3RydWN0LT5tSUlELkVxdWFscygqY2xhc3NfaW50ZXJmYWNlKSkgewogICAgICAqYnAg PSAoSlNJbnRuKTE7CgogICAgICByZXR1cm4gKEpTSW50bikxOwogICAgfQoKICAgIGlpbS0+R2V0 SW5mb0ZvcklJRChjbGFzc19pbnRlcmZhY2UsIGdldHRlcl9BZGRSZWZzKGlmX2luZm8pKTsKICAg IGlmICghaWZfaW5mbykgewogICAgICA7CiAgICAgIG5zRE9NQ2xhc3NJbmZvOjpUaHJvd0pTRXhj ZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgICAgcmV0dXJuIChKU0lu dG4pMDsKICAgIH0KCiAgICBpZl9pbmZvLT5IYXNBbmNlc3RvcigmY2xhc3NfbmFtZV9zdHJ1Y3Qt Pm1JSUQsIGJwKTsKCiAgICBpZiAoKmJwKSB7CiAgICAgIHJldHVybiAoSlNJbnRuKTE7CiAgICB9 CiAgfQoKICByZXR1cm4gKEpTSW50bikxOwp9CgpzdGF0aWMgSlNCb29sCkRPTUpTQ2xhc3NfdG9T dHJpbmcoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdWludE4gYXJnYywganN2YWwgKmFy Z3YsCiAgICAgICAgICAgICAgICAgICAganN2YWwgKnJ2YWwpCnsKICBjb25zdCBQUlVuaWNoYXIq IGNsYXNzX25hbWUgPQogICAgICBjb25zdF9jYXN0PCBjb25zdCBQUlVuaWNoYXIgKiA+KHN0YXRp Y19jYXN0PCBQUlVuaWNoYXIgKiA+KDo6SlNfR2V0UHJpdmF0ZShjeCwgb2JqKSkpOwoKCiAgaWYg KCFjbGFzc19uYW1lKSB7CiAgICA7CiAgICBuc0RPTUNsYXNzSW5mbzo6VGhyb3dKU0V4Y2VwdGlv bihjeCwgKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpKTsKCiAgICByZXR1cm4gKEpTSW50bikwOwog IH0KCiAgbnNBdXRvU3RyaW5nIHJlc3VsdFN0cmluZygnWycpOwogIHJlc3VsdFN0cmluZy5BcHBl bmQoY2xhc3NfbmFtZSk7CiAgcmVzdWx0U3RyaW5nLkFwcGVuZChQUlVuaWNoYXIoJ10nKSk7Cgog IEpTU3RyaW5nKiBzdHIgPSA6OkpTX05ld1VDU3RyaW5nQ29weU4oY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PCBjb25zdCBqc2NoYXIg KiA+KHJlc3VsdFN0cmluZy5nZXQoKSksCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0U3RyaW5nLkxlbmd0aCgpKTsKICBkbyB7IGlmICghKHN0cikpIHsgOyBy ZXR1cm4gKEpTSW50bikwOyB9IH0gd2hpbGUgKDApOwoKICAqcnZhbCA9ICgoKGpzdmFsKShzdHIp KSB8ICgweDQpKTsKCiAgcmV0dXJuIChKU0ludG4pMTsKfQoKSlNDbGFzcyBuc0RPTUNsYXNzSW5m bzo6c0RPTUpTQ2xhc3MgPSB7CiAgIkRPTSBDbGFzcyIsICgxPDwwKSwKICBKU19Qcm9wZXJ0eVN0 dWIsIEpTX1Byb3BlcnR5U3R1YiwgSlNfUHJvcGVydHlTdHViLCBKU19Qcm9wZXJ0eVN0dWIsCiAg SlNfRW51bWVyYXRlU3R1YiwgSlNfUmVzb2x2ZVN0dWIsIEpTX0NvbnZlcnRTdHViLCBKU19GaW5h bGl6ZVN0dWIsCiAgMCwgMCwgMCwgRE9NSlNDbGFzc19Db25zdHJ1Y3QsCiAgMCwgRE9NSlNDbGFz c19IYXNJbnN0YW5jZQp9OwoKSlNGdW5jdGlvblNwZWMgbnNET01DbGFzc0luZm86OnNET01KU0Ns YXNzX21ldGhvZHNbXSA9IHsKICB7InRvU3RyaW5nIiwgRE9NSlNDbGFzc190b1N0cmluZywgMCwg MCwgMH0sCiAgezAsIDAsIDAsIDAsIDB9Cn07CgoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86Oklu aXRET01KU0NsYXNzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopCnsKICBKU09iamVjdCAq cHJvdG8gPSA6OkpTX0luaXRDbGFzcyhjeCwgb2JqLCAwLCAmc0RPTUpTQ2xhc3MsIDAsIDAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc0RPTUpTQ2xhc3NfbWV0aG9kcywg MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICA7CiAgaWYgKCFwcm90 bykgewogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKICB9CgogIHJldHVybiAw Owp9CgoKbnNyZXN1bHQKbnNXaW5kb3dTSDo6R2xvYmFsUmVzb2x2ZShuc0lTdXBwb3J0cyAqbmF0 aXZlLCBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAg ICAgIEpTU3RyaW5nICpzdHIsIFBSVWludDMyIGZsYWdzLCBQUkJvb2wgKmRpZF9yZXNvbHZlKQp7 CiAgKmRpZF9yZXNvbHZlID0gMDsKCiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAq Z05hbWVTcGFjZU1hbmFnZXI7CgogIGRvIHsgaWYgKCEoZ05hbWVTcGFjZU1hbmFnZXIpKSB7IDsg cmV0dXJuICgoKG5zcmVzdWx0KSAweEMxRjMwMDAwKSArIDEpOyB9IH0gd2hpbGUgKDApOwoKICBu c0RlcGVuZGVudFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IFBSVW5pY2hhciog Pig6OkpTX0dldFN0cmluZ0NoYXJzKHN0cikpLAoKICAgICAgICAgICAgICAgICAgICAgICAgIDo6 SlNfR2V0U3RyaW5nTGVuZ3RoKHN0cikpOwoKICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5h bWVfc3RydWN0ID0gMDsKICBjb25zdCBQUlVuaWNoYXIgKmNsYXNzX25hbWUgPSAwOwoKICBnTmFt ZVNwYWNlTWFuYWdlci0+TG9va3VwTmFtZShuYW1lLCAmbmFtZV9zdHJ1Y3QsICZjbGFzc19uYW1l KTsKCiAgaWYgKCFuYW1lX3N0cnVjdCkgewogICAgcmV0dXJuIDA7CiAgfQoKICBkbyB7IGlmICgh KGNsYXNzX25hbWUpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdo aWxlICgwKTsKCiAgbnNyZXN1bHQgcnYgPSAwOwoKICBpZiAobmFtZV9zdHJ1Y3QtPm1UeXBlID09 IG5zR2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVFeHRlcm5hbENsYXNzSW5mb0NyZWF0b3IpIHsKICAg IG5zQ09NUHRyPG5zSURPTUNJRXh0ZW5zaW9uPiBjcmVhdG9yKGRvX0NyZWF0ZUluc3RhbmNlKG5h bWVfc3RydWN0LT5tQ0lELCAmcnYpKTsKICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAw MDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01QdHI8bnNJRE9N U2NyaXB0T2JqZWN0RmFjdG9yeT4gc29mKGRvX0dldFNlcnZpY2Uoa0RPTVNPRl9DSUQpKTsKICAg IGRvIHsgaWYgKCEoc29mKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7IH0g fSB3aGlsZSAoMCk7CgogICAgcnYgPSBjcmVhdG9yLT5SZWdpc3RlckRPTUNJKE5TX0NvbnZlcnRV Q1MydG9VVEY4KG5hbWUpLmdldCgpLCBzb2YpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4 MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBydiA9IGdOYW1l U3BhY2VNYW5hZ2VyLT5Mb29rdXBOYW1lKG5hbWUsICZuYW1lX3N0cnVjdCk7CiAgICBpZiAoKChy dikgJiAweDgwMDAwMDAwKSB8fCAhbmFtZV9zdHJ1Y3QgfHwKICAgICAgICBuYW1lX3N0cnVjdC0+ bVR5cGUgIT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUV4dGVybmFsQ2xhc3NJbmZvKSB7CiAg ICAgIDsKCiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgaWYgKG5hbWVfc3RydWN0LT5tVHlw ZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlSW50ZXJmYWNlKSB7CgoKCiAgICBKU09iamVj dCogY2xhc3Nfb2JqID0gOjpKU19EZWZpbmVPYmplY3QoY3gsIG9iaiwgOjpKU19HZXRTdHJpbmdC eXRlcyhzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz RE9NSlNDbGFzcywgMCwgMCk7CiAgICBpZiAoIWNsYXNzX29iaikgewogICAgICByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQoKICAgIGlmICghOjpKU19TZXRQcml2YXRlKGN4 LCBjbGFzc19vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PCB2b2lkICog PihzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCAqID4oY2xhc3NfbmFtZSkpKSkgewoKCiAgICAgIHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICB9CgoKCgogICAgcnYgPSBEZWZpbmVJ bnRlcmZhY2VDb25zdGFudHMoY3gsIGNsYXNzX29iaiwgJm5hbWVfc3RydWN0LT5tSUlEKTsKICAg IGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3 aGlsZSAoMCk7CgogICAgKmRpZF9yZXNvbHZlID0gMTsKCiAgICByZXR1cm4gMDsKICB9CgogIGlm IChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzQ29u c3RydWN0b3IgfHwKICAgICAgbmFtZV9zdHJ1Y3QtPm1UeXBlID09IG5zR2xvYmFsTmFtZVN0cnVj dDo6ZVR5cGVFeHRlcm5hbENsYXNzSW5mbyB8fAogICAgICBuYW1lX3N0cnVjdC0+bVR5cGUgPT0g bnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzUHJvdG8gfHwKICAgICAgbmFtZV9zdHJ1Y3Qt Pm1UeXBlID09IG5zR2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yQWxp YXMpIHsKICAgIGNvbnN0IG5zRE9NQ2xhc3NJbmZvRGF0YSAqY2lfZGF0YSA9IDA7CiAgICBjb25z dCBuc0dsb2JhbE5hbWVTdHJ1Y3QqIGFsaWFzX3N0cnVjdCA9IDA7CgogICAgaWYgKG5hbWVfc3Ry dWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlQ2xhc3NDb25zdHJ1Y3RvciAm JgogICAgICAgIG5hbWVfc3RydWN0LT5tRE9NQ2xhc3NJbmZvSUQgPj0gMCkgewogICAgICBjaV9k YXRhID0gJnNDbGFzc0luZm9EYXRhW25hbWVfc3RydWN0LT5tRE9NQ2xhc3NJbmZvSURdOwogICAg fSBlbHNlIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlw ZUV4dGVybmFsQ2xhc3NJbmZvKSB7CiAgICAgIGNpX2RhdGEgPSBuYW1lX3N0cnVjdC0+bURhdGE7 CiAgICB9IGVsc2UgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6 OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvckFsaWFzKSB7CiAgICAgIGFsaWFzX3N0cnVjdCA9IGdO YW1lU3BhY2VNYW5hZ2VyLT5HZXRDb25zdHJ1Y3RvclByb3RvKG5hbWVfc3RydWN0KTsKICAgICAg ZG8geyBpZiAoIShhbGlhc19zdHJ1Y3QpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZm ZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgIGlmIChhbGlhc19zdHJ1Y3QtPm1UeXBlID09IG5z R2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVDbGFzc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgY2lfZGF0 YSA9ICZzQ2xhc3NJbmZvRGF0YVthbGlhc19zdHJ1Y3QtPm1ET01DbGFzc0luZm9JRF07CiAgICAg IH0gZWxzZSBpZiAoYWxpYXNfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVU eXBlRXh0ZXJuYWxDbGFzc0luZm8pIHsKICAgICAgICBjaV9kYXRhID0gYWxpYXNfc3RydWN0LT5t RGF0YTsKICAgICAgfQogICAgfQoKICAgIEpTT2JqZWN0KiBjbGFzc19vYmogPSA6OkpTX0RlZmlu ZU9iamVjdChjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0J5dGVzKHN0ciksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNET01KU0NsYXNzLCAwLCAwKTsKICAgIGlm ICghY2xhc3Nfb2JqKSB7CiAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAg ICB9CgogICAgaWYgKCE6OkpTX1NldFByaXZhdGUoY3gsIGNsYXNzX29iaiwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8IHZvaWQgKiA+KHN0YXRpY19jYXN0PCBjb25zdCB2b2lk ICogPihjbGFzc19uYW1lKSkpKSB7CgoKICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZm ZmZMKTsKICAgIH0KCiAgICBjb25zdCBuc0lJRCAqcHJpbWFyeV9paWQgPSAmbnNDT01UeXBlSW5m bzxuc0lTdXBwb3J0cz46OkdldElJRCgpOwoKICAgIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0g bnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzUHJvdG8pIHsKICAgICAgcHJpbWFyeV9paWQg PSAmbmFtZV9zdHJ1Y3QtPm1JSUQ7CiAgICB9IGVsc2UgaWYgKGNpX2RhdGEgJiYgY2lfZGF0YS0+ bVByb3RvQ2hhaW5JbnRlcmZhY2UpIHsKICAgICAgcHJpbWFyeV9paWQgPSBjaV9kYXRhLT5tUHJv dG9DaGFpbkludGVyZmFjZTsKICAgIH0KCiAgICBuc1hQSURMQ1N0cmluZyBjbGFzc19wYXJlbnRf bmFtZTsKCiAgICBpZiAoIXByaW1hcnlfaWlkLT5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBw b3J0cz46OkdldElJRCgpKSkgewogICAgICBydiA9IERlZmluZUludGVyZmFjZUNvbnN0YW50cyhj eCwgY2xhc3Nfb2JqLCBwcmltYXJ5X2lpZCk7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgoKCiAgICAgIGlmIChw cmltYXJ5X2lpZC0+RXF1YWxzKG5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnQ+OjpHZXRJSUQoKSkp IHsKICAgICAgICBydiA9IERlZmluZUludGVyZmFjZUNvbnN0YW50cyhjeCwgY2xhc3Nfb2JqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TU5TRXZlbnQ+OjpHZXRJSUQoKSk7CiAgICAgICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAw MDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKICAgICAgfQoKICAgICAgbnND T01QdHI8bnNJSW50ZXJmYWNlSW5mb01hbmFnZXI+IGlpbSA9CiAgICAgICAgZG9udF9BZGRSZWYo WFBUSV9HZXRJbnRlcmZhY2VJbmZvTWFuYWdlcigpKTsKICAgICAgZG8geyBpZiAoIShpaW0pKSB7 IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNDAxMTFMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAg IG5zQ09NUHRyPG5zSUludGVyZmFjZUluZm8+IGlmX2luZm87CiAgICAgIGlpbS0+R2V0SW5mb0Zv cklJRChwcmltYXJ5X2lpZCwgZ2V0dGVyX0FkZFJlZnMoaWZfaW5mbykpOwogICAgICBkbyB7IGlm ICghKGlmX2luZm8pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdo aWxlICgwKTsKCiAgICAgIG5zQ09NUHRyPG5zSUludGVyZmFjZUluZm8+IHBhcmVudDsKICAgICAg bnNJSUQgKmlpZCA9IDA7CgogICAgICBpZiAoY2lfZGF0YSAmJiAhY2lfZGF0YS0+bUhhc0NsYXNz SW50ZXJmYWNlKSB7CiAgICAgICAgaWZfaW5mby0+R2V0SW50ZXJmYWNlSUlEKCZpaWQpOwogICAg ICB9IGVsc2UgewogICAgICAgIGlmX2luZm8tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJl bnQpKTsKICAgICAgICBkbyB7IGlmICghKHBhcmVudCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkg MHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICBwYXJlbnQtPkdldEludGVyZmFj ZUlJRCgmaWlkKTsKICAgICAgfQoKICAgICAgaWYgKGlpZCkgewogICAgICAgIGlmICghaWlkLT5F cXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpKSkgewogICAgICAgICAg aWYgKGNpX2RhdGEgJiYgIWNpX2RhdGEtPm1IYXNDbGFzc0ludGVyZmFjZSkgewoKCgoKICAgICAg ICAgICAgaWZfaW5mby0+R2V0TmFtZShnZXR0ZXJfQ29waWVzKGNsYXNzX3BhcmVudF9uYW1lKSk7 CiAgICAgICAgICB9IGVsc2UgewoKCgoKCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIHBhcmVu dC0+R2V0TmFtZShnZXR0ZXJfQ29waWVzKGNsYXNzX3BhcmVudF9uYW1lKSk7CiAgICAgICAgICB9 CiAgICAgICAgfQoKICAgICAgICBuc01lbW9yeTo6RnJlZShpaWQpOwogICAgICB9CiAgICB9Cgog ICAgSlNPYmplY3QgKnByb3RvID0gMDsKCiAgICBpZiAoY2xhc3NfcGFyZW50X25hbWUpIHsKICAg ICAganN2YWwgdmFsOwoKICAgICAgaWYgKCE6OkpTX0dldFByb3BlcnR5KGN4LCBvYmosIEN1dFBy ZWZpeChjbGFzc19wYXJlbnRfbmFtZSksICZ2YWwpKSB7CiAgICAgICAgcmV0dXJuICgobnNyZXN1 bHQpIDB4ODAwMGZmZmZMKTsKICAgICAgfQoKICAgICAgSlNPYmplY3QgKnRtcCA9ICgoKHZhbCkg JiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHgwKSA/ICgoSlNPYmplY3QgKikoKHZv aWQgKikoKHZhbCkgJiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSkpIDogMDsK CiAgICAgIGlmICh0bXApIHsKICAgICAgICBpZiAoITo6SlNfR2V0UHJvcGVydHkoY3gsIHRtcCwg InByb3RvdHlwZSIsICZ2YWwpKSB7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw ZmZmZkwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgoKHZhbCkgJiAoKChKU1VpbnQzMikxIDw8 ICgzKSkgLSAxKSkgPT0gMHgwKSkgewogICAgICAgICAgcHJvdG8gPSAoKEpTT2JqZWN0ICopKCh2 b2lkICopKCh2YWwpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKTsKICAg ICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBKU09iamVjdCAqZG90X3Byb3RvdHlwZSA9IDA7Cgog ICAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0 ZXJuYWxDb25zdHJ1Y3RvckFsaWFzKSB7CiAgICAgIG5hbWVfc3RydWN0ID0gYWxpYXNfc3RydWN0 OwogICAgfQoKICAgIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0 OjplVHlwZUNsYXNzQ29uc3RydWN0b3IpIHsKICAgICAgUFJJbnQzMiBpZCA9IG5hbWVfc3RydWN0 LT5tRE9NQ2xhc3NJbmZvSUQ7CiAgICAgIDsKCiAgICAgIG5zRE9NQ2xhc3NJbmZvSUQgY2lfaWQg PSAobnNET01DbGFzc0luZm9JRClpZDsKCiAgICAgIG5zQ09NUHRyPG5zSUNsYXNzSW5mbz4gY2ko ZG9udF9BZGRSZWYoR2V0Q2xhc3NJbmZvSW5zdGFuY2UoY2lfaWQpKSk7CiAgICAgIGRvIHsgaWYg KCEoY2kpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgw KTsKCiAgICAgIG5zQ09NUHRyPG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyPiBwcm90b19ob2xk ZXI7CgogICAgICBuc3Jlc3VsdCBydiA9CiAgICAgICAgc1hQQ29ubmVjdC0+R2V0V3JhcHBlZE5h dGl2ZVByb3RvdHlwZShjeCwgb2JqLCBjaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHByb3RvX2hvbGRlcikpOwogICAgICBkbyB7 IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgIHJ2ID0gcHJvdG9faG9sZGVyLT5HZXRK U09iamVjdCgmZG90X3Byb3RvdHlwZSk7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAw MDAwMDApKSkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUg KDApOwoKICAgICAgSlNPYmplY3QgKnhwY19wcm90b19wcm90byA9IDo6SlNfR2V0UHJvdG90eXBl KGN4LCBkb3RfcHJvdG90eXBlKTsKCiAgICAgIGlmIChwcm90byAmJiBKU19HZXRDbGFzcyhjeCwg eHBjX3Byb3RvX3Byb3RvKSA9PSBzT2JqZWN0Q2xhc3MpIHsKICAgICAgICBpZiAoITo6SlNfU2V0 UHJvdG90eXBlKGN4LCBkb3RfcHJvdG90eXBlLCBwcm90bykpIHsKICAgICAgICAgIHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYg KG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0ZXJuYWxD bGFzc0luZm8pIHsKICAgICAgbnNDT01QdHI8bnNJQ2xhc3NJbmZvPiBjaSA9CiAgICAgICAgZ2V0 dGVyX0FkZFJlZnMoR2V0Q2xhc3NJbmZvSW5zdGFuY2UobmFtZV9zdHJ1Y3QtPm1EYXRhKSk7CiAg ICAgIGRvIHsgaWYgKCEoY2kpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsg fSB9IHdoaWxlICgwKTsKCiAgICAgIG5zQ09NUHRyPG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVy PiBwcm90b19ob2xkZXI7CgogICAgICBuc3Jlc3VsdCBydiA9CiAgICAgICAgc1hQQ29ubmVjdC0+ R2V0V3JhcHBlZE5hdGl2ZVByb3RvdHlwZShjeCwgb2JqLCBjaSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHByb3RvX2hvbGRlcikp OwogICAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuICgo bnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgIHJ2ID0gcHJvdG9f aG9sZGVyLT5HZXRKU09iamVjdCgmZG90X3Byb3RvdHlwZSk7CiAgICAgIGRvIHsgaWYgKCEoKCEo KHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwp OyB9IH0gd2hpbGUgKDApOwoKICAgICAgSlNPYmplY3QgKnhwY19wcm90b19wcm90byA9IDo6SlNf R2V0UHJvdG90eXBlKGN4LCBkb3RfcHJvdG90eXBlKTsKCiAgICAgIGlmIChwcm90byAmJiBKU19H ZXRDbGFzcyhjeCwgeHBjX3Byb3RvX3Byb3RvKSA9PSBzT2JqZWN0Q2xhc3MpIHsKICAgICAgICBp ZiAoITo6SlNfU2V0UHJvdG90eXBlKGN4LCBkb3RfcHJvdG90eXBlLCBwcm90bykpIHsKICAgICAg ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICAgICAgfQogICAgICB9CiAg ICB9IGVsc2UgewogICAgICBkb3RfcHJvdG90eXBlID0gOjpKU19OZXdPYmplY3QoY3gsICZzRE9N Q29uc3RydWN0b3JQcm90b0NsYXNzLCBwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9iaik7CiAgICAgIGRvIHsgaWYgKCEoZG90X3Byb3RvdHlwZSkpIHsgOyByZXR1 cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyB9IH0gd2hpbGUgKDApOwogICAgfQoKICAgIGpz dmFsIHYgPSAoKGpzdmFsKShkb3RfcHJvdG90eXBlKSk7CgogICAgaWYgKCE6OkpTX1NldFByb3Bl cnR5KGN4LCBjbGFzc19vYmosICJwcm90b3R5cGUiLCAmdikpIHsKICAgICAgcmV0dXJuICgobnNy ZXN1bHQpIDB4ODAwMGZmZmZMKTsKICAgIH0KCiAgICAqZGlkX3Jlc29sdmUgPSAxOwoKICAgIHJl dHVybiAwOwogIH0KCiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1 Y3Q6OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvcikgewoKICAgIEpTT2JqZWN0KiBjbGFzc19vYmog PSA6OkpTX0RlZmluZU9iamVjdChjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0J5dGVzKHN0ciksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNET01KU0NsYXNzLCAw LCAwKTsKICAgIGlmICghY2xhc3Nfb2JqKSB7CiAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDBmZmZmTCk7CiAgICB9CgogICAgaWYgKCE6OkpTX1NldFByaXZhdGUoY3gsIGNsYXNzX29iaiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8IHZvaWQgKiA+KHN0YXRpY19jYXN0 PCBjb25zdCB2b2lkICogPihjbGFzc19uYW1lKSkpKSB7CgoKICAgICAgcmV0dXJuICgobnNyZXN1 bHQpIDB4ODAwMGZmZmZMKTsKICAgIH0KCiAgICAqZGlkX3Jlc29sdmUgPSAxOwoKICAgIHJldHVy biAwOwogIH0KCiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6 OmVUeXBlUHJvcGVydHkpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmUoZG9fQ3Jl YXRlSW5zdGFuY2UobmFtZV9zdHJ1Y3QtPm1DSUQsICZydikpOwogICAgZG8geyBpZiAoISgoISgo cnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBq c3ZhbCBwcm9wX3ZhbDsKCiAgICBuc0NPTVB0cjxuc0lTY3JpcHRPYmplY3RPd25lcj4gb3duZXIo ZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7CiAgICBpZiAob3duZXIpIHsKICAgICAgbnNDT01Q dHI8bnNJU2NyaXB0Q29udGV4dD4gY29udGV4dDsKICAgICAgbnNKU1V0aWxzOjpHZXRTdGF0aWNT Y3JpcHRDb250ZXh0KGN4LCBvYmosIGdldHRlcl9BZGRSZWZzKGNvbnRleHQpKTsKICAgICAgZG8g eyBpZiAoIShjb250ZXh0KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0g fSB3aGlsZSAoMCk7CgogICAgICBKU09iamVjdCAqcHJvcF9vYmogPSAwOwoKICAgICAgcnYgPSBv d25lci0+R2V0U2NyaXB0T2JqZWN0KGNvbnRleHQsICh2b2lkKiopJnByb3Bfb2JqKTsKICAgICAg ZG8geyBpZiAoIShwcm9wX29iaikpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwp OyB9IH0gd2hpbGUgKDApOwoKICAgICAgcHJvcF92YWwgPSAoKGpzdmFsKShwcm9wX29iaikpOwog ICAgfSBlbHNlIHsKICAgICAgcnYgPSBXcmFwTmF0aXZlKGN4LCA6OkpTX0dldEdsb2JhbE9iamVj dChjeCksIG5hdGl2ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJU3Vw cG9ydHM+OjpHZXRJSUQoKSwgJnByb3BfdmFsKTsKICAgIH0KCiAgICBkbyB7IGlmICghKCghKChy dikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICAgIFBS Qm9vbCByZXR2YWwgPSA6OkpTX0RlZmluZVVDUHJvcGVydHkoY3gsIG9iaiwgOjpKU19HZXRTdHJp bmdDaGFycyhzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcm9wX3ZhbCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMSB8IDB4MDIpOwogICAgKmRpZF9yZXNvbHZlID0gMTsKCiAgICByZXR1 cm4gcmV0dmFsID8gMCA6ICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKICB9CgogIGlmIChuYW1l X3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUR5bmFtaWNOYW1lU2V0 KSB7CiAgICBuc0NPTVB0cjxuc0lTY3JpcHRFeHRlcm5hbE5hbWVTZXQ+IG5hbWVzZXQgPQogICAg ICBkb19DcmVhdGVJbnN0YW5jZShuYW1lX3N0cnVjdC0+bUNJRCwgJnJ2KTsKICAgIGRvIHsgaWYg KCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7 CgogICAgbnNDT01QdHI8bnNJU2NyaXB0R2xvYmFsT2JqZWN0PiBzZ28oZG9fUXVlcnlJbnRlcmZh Y2UobmF0aXZlKSk7CiAgICBkbyB7IGlmICghKHNnbykpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkg MHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ09NUHRyPG5zSVNjcmlwdENvbnRl eHQ+IGNvbnRleHQ7CgogICAgc2dvLT5HZXRDb250ZXh0KGdldHRlcl9BZGRSZWZzKGNvbnRleHQp KTsKICAgIGRvIHsgaWYgKCEoY29udGV4dCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw ZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIHJ2ID0gbmFtZXNldC0+SW5pdGlhbGl6ZU5hbWVT ZXQoY29udGV4dCk7CgogICAgKmRpZF9yZXNvbHZlID0gMTsKICB9CgogIHJldHVybiBydjsKfQoK Cm5zcmVzdWx0Cm5zV2luZG93U0g6OkNhY2hlRG9jdW1lbnRQcm9wZXJ0eShKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9N V2luZG93ICp3aW5kb3cpCnsKICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9jdW1lbnQ7CiAg bnNyZXN1bHQgcnYgPSB3aW5kb3ctPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvY3VtZW50 KSk7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKCiAganN2YWwgdjsKICBydiA9IFdyYXBOYXRpdmUoY3gsIG9iaiwgZG9j dW1lbnQsIG5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnQ+OjpHZXRJSUQoKSwgJnYpOwogIGRv IHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGls ZSAoMCk7CgogIG5zRGVwZW5kZW50U3RyaW5nIGRvY19zdHIocmVpbnRlcnByZXRfY2FzdDwgY29u c3QgbnNBU3RyaW5nOjpjaGFyX3R5cGUqID4oTCJkb2N1bWVudCIpLCBQUlVpbnQzMigoc2l6ZW9m KEwiZG9jdW1lbnQiKS9zaXplb2Yod2NoYXJfdCkpLTEpKTsKCiAgaWYgKCE6OkpTX0RlZmluZVVD UHJvcGVydHkoY3gsIG9iaiwgcmVpbnRlcnByZXRfY2FzdDwgY29uc3QganNjaGFyICogPihkb2Nf c3RyLmdldCgpKSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jX3N0ci5MZW5ndGgo KSwgdiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAweDAyKSkgewogICAgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3Vs dApuc1dpbmRvd1NIOjpOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0 ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgSlNCb29sIGRpZF9yZXNvbHZlID0gKEpTSW50 bikwOwoKICBpZiAoITo6SlNfUmVzb2x2ZVN0YW5kYXJkQ2xhc3MoY3gsIG9iaiwgaWQsICZkaWRf cmVzb2x2ZSkpIHsKICAgICpfcmV0dmFsID0gKEpTSW50bikwOwoKICAgIHJldHVybiAoKG5zcmVz dWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICBpZiAoZGlkX3Jlc29sdmUpIHsKICAgICpvYmpwID0g b2JqOwoKICAgIHJldHVybiAwOwogIH0KCiAgaWYgKGlkID09IHNDb25zdHJ1Y3Rvcl9pZCAmJiAh KGZsYWdzICYgMHgwMikpIHsKICAgIHJldHVybiBSZXNvbHZlQ29uc3RydWN0b3IoY3gsIG9iaiwg b2JqcCk7CiAgfQoKICBpZiAoKCgoaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09 IDB4NCkpIHsKICAgIEpTU3RyaW5nICpzdHIgPSAoKEpTU3RyaW5nICopKCh2b2lkICopKChpZCkg JiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSkpOwogICAgbnNDT01QdHI8bnNJ U3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhu YXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lTY3JpcHRHbG9iYWxPYmplY3Q+IHNnbyhkb19RdWVy eUludGVyZmFjZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEoc2dvKSkgeyA7IHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01QdHI8bnNJU2Ny aXB0Q29udGV4dD4gbXlfY29udGV4dDsKICAgIHNnby0+R2V0Q29udGV4dChnZXR0ZXJfQWRkUmVm cyhteV9jb250ZXh0KSk7CgogICAgaWYgKCFteV9jb250ZXh0IHx8ICgobXlfY29udGV4dC0+SXND b250ZXh0SW5pdGlhbGl6ZWQoKSkgJiAweDgwMDAwMDAwKSkgewoKCgogICAgICByZXR1cm4gMDsK ICAgIH0KCiAgICBuc3Jlc3VsdCBydiA9IDA7CgogICAgaWYgKCEoZmxhZ3MgJiAweDAyKSkgewoK CiAgICAgIHJ2ID0gR2xvYmFsUmVzb2x2ZShuYXRpdmUsIGN4LCBvYmosIHN0ciwgZmxhZ3MsICZk aWRfcmVzb2x2ZSk7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsg OyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICBpZiAoZGlkX3Jlc29sdmUpIHsKCgog ICAgICAgICpvYmpwID0gb2JqOwoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgfQoKCgoK CiAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGw7CgogICAgc2dvLT5HZXREb2NTaGVs bChnZXR0ZXJfQWRkUmVmcyhkb2NTaGVsbCkpOwoKICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl ZU5vZGU+IGRzbihkb19RdWVyeUludGVyZmFjZShkb2NTaGVsbCkpOwoKICAgIFBSSW50MzIgY291 bnQgPSAwOwoKICAgIGlmIChkc24pIHsKICAgICAgZHNuLT5HZXRDaGlsZENvdW50KCZjb3VudCk7 CiAgICB9CgogICAgaWYgKGNvdW50ID4gMCkgewogICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRy ZWVJdGVtPiBjaGlsZDsKCiAgICAgIGNvbnN0IGpzY2hhciAqY2hhcnMgPSA6OkpTX0dldFN0cmlu Z0NoYXJzKHN0cik7CgogICAgICBkc24tPkZpbmRDaGlsZFdpdGhOYW1lKHJlaW50ZXJwcmV0X2Nh c3Q8IGNvbnN0IFBSVW5pY2hhciogPihjaGFycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgMSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhj aGlsZCkpOwoKICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBjaGlsZF93aW4oZG9fR2V0SW50 ZXJmYWNlKGNoaWxkKSk7CgogICAgICBpZiAoY2hpbGRfd2luKSB7CgoKCgogICAgICAgIGpzdmFs IHY7CiAgICAgICAgcnYgPSBXcmFwTmF0aXZlKGN4LCA6OkpTX0dldEdsb2JhbE9iamVjdChjeCks IGNoaWxkX3dpbiwKICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxuc0lET01X aW5kb3dJbnRlcm5hbD46OkdldElJRCgpLCAmdik7CiAgICAgICAgZG8geyBpZiAoISgoISgocnYp ICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKIyA0MDI1ICJu c0RPTUNsYXNzSW5mby5jcHAiCiAgICAgICAgc0RvU2VjdXJpdHlDaGVja0luQWRkUHJvcGVydHkg PSAwOwoKICAgICAgICBQUkJvb2wgb2sgPSA6OkpTX0RlZmluZVVDUHJvcGVydHkoY3gsIG9iaiwg Y2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6SlNfR2V0 U3RyaW5nTGVuZ3RoKHN0ciksIHYsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIDApOwoKICAgICAgICBzRG9TZWN1cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSA9 IDE7CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDA0MDA1TCk7CiAgICAgICAgfQoKICAgICAgICAqb2JqcCA9IG9iajsKCiAgICAgICAgcmV0dXJu IDA7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaWQgPT0gc19jb250ZW50X2lkKSB7CgoKCiAgICAg IEpTT2JqZWN0KiBnZXR0ZXJPYmo7CiAgICAgIHJ2ID0gbXlfY29udGV4dC0+Q29tcGlsZUZ1bmN0 aW9uKG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDQXV0b1N0 cmluZygiX2NvbnRlbnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8IGNvbnN0IG5zQUZsYXRTdHJp bmcmID4obnNEZXBlbmRlbnRTdHJpbmcocmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNBU3RyaW5n OjpjaGFyX3R5cGUqID4oTCJyZXR1cm4gdGhpcy5jb250ZW50OyIpLCBQUlVpbnQzMigoc2l6ZW9m KEwicmV0dXJuIHRoaXMuY29udGVudDsiKS9zaXplb2Yod2NoYXJfdCkpLTEpKSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJmdl dHRlck9iaik7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSAmJiBnZXR0 ZXJPYmopKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsgfSB9IHdoaWxlICgw KTsKCiAgICAgIGlmICghOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6SlNfR2V0U3Ry aW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRT dHJpbmdMZW5ndGgoc3RyKSwgKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEp IHwgMHgxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpTUHJvcGVydHlPcCln ZXR0ZXJPYmosIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgfCAweDEw IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MCkpIHsKICAgICAgICByZXR1 cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwogICAgICB9CgogICAgICAqb2JqcCA9IG9iajsK CiAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlmIChpZCA9PSBzTG9jYXRpb25faWQpIHsKCgoK CgogICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3dJbnRlcm5hbD4gd2luZG93KGRvX1F1ZXJ5SW50 ZXJmYWNlKG5hdGl2ZSkpOwogICAgICBkbyB7IGlmICghKHdpbmRvdykpIHsgOyByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgbnNDT01QdHI8bnNJ RE9NTG9jYXRpb24+IGxvY2F0aW9uOwogICAgICBydiA9IHdpbmRvdy0+R2V0TG9jYXRpb24oZ2V0 dGVyX0FkZFJlZnMobG9jYXRpb24pKTsKICAgICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAw MDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICAgIGpzdmFsIHY7CiAg ICAgIHJ2ID0gV3JhcE5hdGl2ZShjeCwgb2JqLCBsb2NhdGlvbiwgbnNDT01UeXBlSW5mbzxuc0lE T01Mb2NhdGlvbj46OkdldElJRCgpLCAmdik7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICBzRG9TZWN1 cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSA9IDA7CgogICAgICBKU0Jvb2wgb2sgPSA6OkpTX0RlZmlu ZVVDUHJvcGVydHkoY3gsIG9iaiwgOjpKU19HZXRTdHJpbmdDaGFycyhzdHIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwg diwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOwoKICAg ICAgc0RvU2VjdXJpdHlDaGVja0luQWRkUHJvcGVydHkgPSAxOwoKICAgICAgaWYgKCFvaykgewog ICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7CiAgICAgIH0KCiAgICAgICpv YmpwID0gb2JqOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKGZsYWdzICYgMHgwMikg ewogICAgICBpZiAoSXNSZWFkb25seVJlcGxhY2VhYmxlKGlkKSB8fAogICAgICAgICAgKCEoZmxh Z3MgJiAweDAxKSAmJiBJc1dyaXRhYmxlUmVwbGFjZWFibGUoaWQpKSkgewoKCgoKCgogICAgICAg IGlmICghOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6SlNfR2V0U3RyaW5nQ2hhcnMo c3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xl bmd0aChzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGpzdmFsKSgw IC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSksIDAsIDAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMSkpIHsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDA0MDA1TCk7CiAgICAgICAgfQoKICAgICAgICAqb2JqcCA9IG9iajsKCiAgICAgICAg cmV0dXJuIDA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChpZCA9PSBzTmF2aWdhdG9y X2lkKSB7CiAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93SW50ZXJuYWw+IHdpbmRvdyhkb19R dWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgICAgICBkbyB7IGlmICghKHdpbmRvdykpIHsgOyBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICBu c0NPTVB0cjxuc0lET01OYXZpZ2F0b3I+IG5hdmlnYXRvcjsKICAgICAgICBydiA9IHdpbmRvdy0+ R2V0TmF2aWdhdG9yKGdldHRlcl9BZGRSZWZzKG5hdmlnYXRvcikpOwogICAgICAgIGRvIHsgaWYg KCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7 CgogICAgICAgIGpzdmFsIHY7CiAgICAgICAgcnYgPSBXcmFwTmF0aXZlKGN4LCBvYmosIG5hdmln YXRvciwgbnNDT01UeXBlSW5mbzxuc0lET01OYXZpZ2F0b3I+OjpHZXRJSUQoKSwgJnYpOwogICAg ICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0g fSB3aGlsZSAoMCk7CgogICAgICAgIGlmICghOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmos IDo6SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpLCB2LCAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIDApKSB7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4 MDAwNDAwNUwpOwogICAgICAgIH0KCiAgICAgICAgKm9ianAgPSBvYmo7CgogICAgICAgIHJldHVy biAwOwogICAgICB9CgogICAgICBpZiAoaWQgPT0gc0RvY3VtZW50X2lkKSB7CiAgICAgICAgbnND T01QdHI8bnNJRE9NV2luZG93SW50ZXJuYWw+IHdpbmRvdyhkb19RdWVyeUludGVyZmFjZShuYXRp dmUpKTsKICAgICAgICBkbyB7IGlmICghKHdpbmRvdykpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkg MHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICBydiA9IENhY2hlRG9jdW1lbnRQ cm9wZXJ0eShjeCwgb2JqLCB3aW5kb3cpOwogICAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgICpvYmpw ID0gb2JqOwoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgaWYgKGlkID09IHNXaW5k b3dfaWQpIHsKICAgICAgICBqc3ZhbCB2OwogICAgICAgIHJ2ID0gV3JhcE5hdGl2ZShjeCwgb2Jq LCBuYXRpdmUsIG5zQ09NVHlwZUluZm88bnNJRE9NV2luZG93Pjo6R2V0SUlEKCksICZ2KTsKICAg ICAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9 IH0gd2hpbGUgKDApOwoKICAgICAgICBpZiAoITo6SlNfRGVmaW5lVUNQcm9wZXJ0eShjeCwgb2Jq LCA6OkpTX0dldFN0cmluZ0NoYXJzKHN0ciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwgdiwgMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAweDAyKSkgewogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwMDQwMDVMKTsKICAgICAgICB9CgogICAgICAgICpvYmpwID0gb2JqOwoKICAgICAgICBy ZXR1cm4gMDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuc0V2ZW50UmVjaWV2ZXJTSDo6TmV3 UmVzb2x2ZSh3cmFwcGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JldHZhbCk7CiAgfQoKICByZXR1cm4gMDsKfQoK bnNyZXN1bHQKbnNXaW5kb3dTSDo6RmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq d3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9i aikKewogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgd3JhcHBlci0+R2V0TmF0aXZl KGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobmF0aXZlKSkgeyA7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5z SVNjcmlwdEdsb2JhbE9iamVjdD4gc2dvKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwogIGRv IHsgaWYgKCEoc2dvKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3 aGlsZSAoMCk7CgogIHJldHVybiBzZ28tPk9uRmluYWxpemUob2JqKTsKfQoKCgoKbnNyZXN1bHQK bnNMb2NhdGlvblNIOjpDaGVja0FjY2Vzcyhuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFw cGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpv YmosIGpzdmFsIGlkLCBQUlVpbnQzMiBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKChtb2RlICYgKEpTQUNDX1dSSVRFIC0g MSkpID09IEpTQUNDX1BST1RPICYmIChtb2RlICYgSlNBQ0NfV1JJVEUpKSB7CgoKCiAgICAqX3Jl dHZhbCA9IDA7CgogICAgcmV0dXJuICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgxKTw8MzEpIHwg KChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxMDAwKSkpICk7CiAgfQoK ICByZXR1cm4gbnNET01HZW5lcmljU0g6OkNoZWNrQWNjZXNzKHdyYXBwZXIsIGN4LCBvYmosIGlk LCBtb2RlLCB2cCwgX3JldHZhbCk7Cn0KCgoKCm5zcmVzdWx0Cm5zTm9kZVNIOjpQcmVDcmVhdGUo bnNJU3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKmdsb2JhbE9i aiwKICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBhcmVudE9iaikKewogIG5zQ09NUHRy PG5zSUNvbnRlbnQ+IGNvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlT2JqKSk7CiAgbnND T01QdHI8bnNJRG9jdW1lbnQ+IGRvYzsKCiAgaWYgKGNvbnRlbnQpIHsKICAgIGNvbnRlbnQtPkdl dERvY3VtZW50KCpnZXR0ZXJfQWRkUmVmcyhkb2MpKTsKICB9CgogIGlmICghZG9jKSB7CiMgNDI1 NCAibnNET01DbGFzc0luZm8uY3BwIgogICAgZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZl T2JqKTsKCiAgICBpZiAoIWRvYykgewoKCgogICAgICAqcGFyZW50T2JqID0gZ2xvYmFsT2JqOwoK ICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBuc0lTdXBwb3J0cyAqbmF0aXZlX3BhcmVudCA9 IDA7CgogIGlmIChjb250ZW50KSB7CiAgICBpZiAoY29udGVudC0+SXNDb250ZW50T2ZUeXBlKG5z SUNvbnRlbnQ6OmVFTEVNRU5UIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ Q29udGVudDo6ZUhUTUwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250 ZW50OjplSFRNTF9GT1JNX0NPTlRST0wpKSB7CiAgICAgIG5zQ09NUHRyPG5zSUZvcm1Db250cm9s PiBmb3JtX2NvbnRyb2woZG9fUXVlcnlJbnRlcmZhY2UoY29udGVudCkpOwoKICAgICAgaWYgKGZv cm1fY29udHJvbCkgewogICAgICAgIG5zQ09NUHRyPG5zSURPTUhUTUxGb3JtRWxlbWVudD4gZm9y bTsKCiAgICAgICAgZm9ybV9jb250cm9sLT5HZXRGb3JtKGdldHRlcl9BZGRSZWZzKGZvcm0pKTsK CiAgICAgICAgbmF0aXZlX3BhcmVudCA9IGZvcm07CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIW5h dGl2ZV9wYXJlbnQpIHsKICAgICAgbnNDT01QdHI8bnNJQ29udGVudD4gcGFyZW50Q29udGVudDsK CiAgICAgIGNvbnRlbnQtPkdldFBhcmVudCgqZ2V0dGVyX0FkZFJlZnMocGFyZW50Q29udGVudCkp OwogICAgICBuYXRpdmVfcGFyZW50ID0gcGFyZW50Q29udGVudDsKCiAgICAgIGlmICghbmF0aXZl X3BhcmVudCkgewogICAgICAgIG5hdGl2ZV9wYXJlbnQgPSBkb2M7CiAgICAgIH0KICAgIH0KICB9 CgogIGlmICghbmF0aXZlX3BhcmVudCkgewoKCgoKCgogICAgbnNDT01QdHI8bnNJU2NyaXB0R2xv YmFsT2JqZWN0PiBzZ287CiAgICBkb2MtPkdldFNjcmlwdEdsb2JhbE9iamVjdChnZXR0ZXJfQWRk UmVmcyhzZ28pKTsKCiAgICBpZiAoIXNnbykgewoKCgogICAgICAqcGFyZW50T2JqID0gZ2xvYmFs T2JqOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbmF0aXZlX3BhcmVudCA9IHNnbzsKICB9 CgogIGpzdmFsIHY7CgogIG5zcmVzdWx0IHJ2ID0gV3JhcE5hdGl2ZShjeCwgOjpKU19HZXRHbG9i YWxPYmplY3QoY3gpLCBuYXRpdmVfcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBu c0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCksICZ2KTsKCiAgKnBhcmVudE9iaiA9 ICgoSlNPYmplY3QgKikoKHZvaWQgKikoKHYpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgz KSkgLSAxKSkpKTsKCiAgcmV0dXJuIHJ2Owp9Cgpuc3Jlc3VsdApuc05vZGVTSDo6QWRkUHJvcGVy dHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAg ICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBS Qm9vbCAqX3JldHZhbCkKewogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgd3JhcHBl ci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICBuc0NPTVB0cjxuc0lET01O b2RlPiBub2RlKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwoKICBuc0NPTVB0cjxuc0lEb2N1 bWVudD4gZG9jOwoKICBpZiAobm9kZSkgewogICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRv bWRvYzsKICAgIG5vZGUtPkdldE93bmVyRG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7 CiAgICBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOwogIH0KCiAgaWYgKCFkb2MpIHsK ICAgIGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSk7CiAgfQoKICBpZiAoZG9jKSB7CiAg ICBuc0NPTVB0cjxuc0lDb250ZW50PiBjb250ZW50KGRvX1F1ZXJ5SW50ZXJmYWNlKG5vZGUpKTsK ICAgIGRvYy0+QWRkUmVmZXJlbmNlKGNvbnRlbnQsIHdyYXBwZXIpOwogIH0KCiAgcmV0dXJuIDA7 Cn0KCm5zcmVzdWx0Cm5zTm9kZVNIOjpHZXRGbGFncyhQUlVpbnQzMiAqYUZsYWdzKQp7CiAgKmFG bGFncyA9IChuc0lDbGFzc0luZm86Ok1BSU5fVEhSRUFEX09OTFkgfCBuc0lDbGFzc0luZm86OkRP TV9PQkpFQ1QpIHwgbnNJQ2xhc3NJbmZvOjpDT05URU5UX05PREU7CgogIHJldHVybiAwOwp9CgoK CgpQUkJvb2wKbnNFdmVudFJlY2lldmVyU0g6OlJlYWxseUlzRXZlbnROYW1lKGpzdmFsIGlkLCBq c2NoYXIgYUZpcnN0Q2hhcikKewoKCiAgc3dpdGNoIChhRmlyc3RDaGFyKSB7CiAgY2FzZSAnYScg OgogICAgcmV0dXJuIGlkID09IHNPbmFib3J0X2lkOwogIGNhc2UgJ2InIDoKICAgIHJldHVybiBp ZCA9PSBzT25ibHVyX2lkOwogIGNhc2UgJ2UnIDoKICAgIHJldHVybiBpZCA9PSBzT25lcnJvcl9p ZDsKICBjYXNlICdmJyA6CiAgICByZXR1cm4gaWQgPT0gc09uZm9jdXNfaWQ7CiAgY2FzZSAnYycg OgogICAgcmV0dXJuICgoaWQgPT0gc09uY2hhbmdlX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0g c09uY2xpY2tfaWQpIHx8CiAgICAgICAgICAgIChpZCA9PSBzT25jb250ZXh0bWVudV9pZCkpOwog IGNhc2UgJ2wnIDoKICAgIHJldHVybiBpZCA9PSBzT25sb2FkX2lkOwogIGNhc2UgJ3AnIDoKICAg IHJldHVybiBpZCA9PSBzT25wYWludF9pZDsKICBjYXNlICdrJyA6CiAgICByZXR1cm4gKChpZCA9 PSBzT25rZXlkb3duX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0gc09ua2V5cHJlc3NfaWQpIHx8 CiAgICAgICAgICAgIChpZCA9PSBzT25rZXl1cF9pZCkpOwogIGNhc2UgJ3UnIDoKICAgIHJldHVy biBpZCA9PSBzT251bmxvYWRfaWQ7CiAgY2FzZSAnbScgOgogICAgcmV0dXJuICgoaWQgPT0gc09u bW91c2Vtb3ZlX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0gc09ubW91c2VvdXRfaWQpIHx8CiAg ICAgICAgICAgIChpZCA9PSBzT25tb3VzZW92ZXJfaWQpIHx8CiAgICAgICAgICAgIChpZCA9PSBz T25tb3VzZXVwX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0gc09ubW91c2Vkb3duX2lkKSk7CiAg Y2FzZSAncicgOgogICAgcmV0dXJuICgoaWQgPT0gc09ucmVzZXRfaWQpIHx8CiAgICAgICAgICAg IChpZCA9PSBzT25yZXNpemVfaWQpKTsKICBjYXNlICdzJyA6CiAgICByZXR1cm4gKChpZCA9PSBz T25zY3JvbGxfaWQpIHx8CiAgICAgICAgICAgIChpZCA9PSBzT25zZWxlY3RfaWQpIHx8CiAgICAg ICAgICAgIChpZCA9PSBzT25zdWJtaXRfaWQpKTsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3Vs dApuc0V2ZW50UmVjaWV2ZXJTSDo6UmVnaXN0ZXJDb21waWxlSGFuZGxlcihuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCBpZCwgUFJCb29sIGNvbXBpbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqZGlkX2NvbXBpbGUpCnsK ICAqZGlkX2NvbXBpbGUgPSAwOwoKICBpZiAoIUlzRXZlbnROYW1lKGlkKSkgewogICAgcmV0dXJu IDA7CiAgfQoKICBuc0NPTVB0cjxuc0lTY3JpcHRDb250ZXh0PiBzY3JpcHRfY3g7CiAgbnNyZXN1 bHQgcnYgPSBuc0pTVXRpbHM6OkdldFN0YXRpY1NjcmlwdENvbnRleHQoY3gsIG9iaiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVm cyhzY3JpcHRfY3gpKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsg cmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZl OwogIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKICA7CgogIG5z Q09NUHRyPG5zSURPTUV2ZW50UmVjZWl2ZXI+IHJlY2VpdmVyKGRvX1F1ZXJ5SW50ZXJmYWNlKG5h dGl2ZSkpOwogIGRvIHsgaWYgKCEocmVjZWl2ZXIpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJRXZlbnRMaXN0ZW5lck1h bmFnZXI+IG1hbmFnZXI7CgogIHJlY2VpdmVyLT5HZXRMaXN0ZW5lck1hbmFnZXIoZ2V0dGVyX0Fk ZFJlZnMobWFuYWdlcikpOwogIGRvIHsgaWYgKCEobWFuYWdlcikpIHsgOyByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICBKU1N0cmluZyAqc3RyID0gKChK U1N0cmluZyAqKSgodm9pZCAqKSgoaWQpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkg LSAxKSkpKTsKICBjb25zdCBQUlVuaWNoYXIgKnVzdHIgPSByZWludGVycHJldF9jYXN0PCBjb25z dCBQUlVuaWNoYXIgKiA+KDo6SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSk7CgoKICBuc0NPTVB0cjxu c0lBdG9tPiBhdG9tKGdldHRlcl9BZGRSZWZzKE5TX05ld0F0b20odXN0cikpKTsKICBkbyB7IGlm ICghKGF0b20pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfSB9IHdoaWxl ICgwKTsKCiAgaWYgKGNvbXBpbGUpIHsKICAgIHJ2ID0gbWFuYWdlci0+Q29tcGlsZVNjcmlwdEV2 ZW50TGlzdGVuZXIoc2NyaXB0X2N4LCBuYXRpdmUsIGF0b20sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZF9jb21waWxlKTsKICB9IGVsc2UgewogICAgcnYg PSBtYW5hZ2VyLT5SZWdpc3RlclNjcmlwdEV2ZW50TGlzdGVuZXIoc2NyaXB0X2N4LCBuYXRpdmUs IGF0b20pOwogIH0KCiAgcmV0dXJuIHJ2Owp9Cgpuc3Jlc3VsdApuc0V2ZW50UmVjaWV2ZXJTSDo6 TmV3UmVzb2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBp ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgZmxhZ3MsIEpTT2JqZWN0 ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKCEoKChpZCkgJiAoKChKU1VpbnQzMikx IDw8ICgzKSkgLSAxKSkgPT0gMHg0KSkgewogICAgcmV0dXJuIDA7CiAgfQoKICBQUkJvb2wgZGlk X2NvbXBpbGUgPSAwOwoKICBuc3Jlc3VsdCBydiA9IFJlZ2lzdGVyQ29tcGlsZUhhbmRsZXIod3Jh cHBlciwgY3gsIG9iaiwgaWQsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZkaWRfY29tcGlsZSk7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkg eyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgaWYgKGRpZF9jb21waWxlKSB7CiAgICAq b2JqcCA9IG9iajsKICB9CgogIHJldHVybiBuc0RPTUNsYXNzSW5mbzo6TmV3UmVzb2x2ZSh3cmFw cGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9yZXR2YWwpOwp9Cgpuc3Jlc3VsdApuc0V2ZW50UmVjaWV2ZXJTSDo6U2V0UHJv cGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwp CnsKICBpZiAoOjpKU19UeXBlT2ZWYWx1ZShjeCwgKnZwKSAhPSBKU1RZUEVfRlVOQ1RJT04gfHwg ISgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7CiAgICByZXR1 cm4gMDsKICB9CgogIFBSQm9vbCBkaWRfY29tcGlsZTsKCiAgcmV0dXJuIFJlZ2lzdGVyQ29tcGls ZUhhbmRsZXIod3JhcHBlciwgY3gsIG9iaiwgaWQsIDAsICZkaWRfY29tcGlsZSk7Cn0KIyA0NTA3 ICJuc0RPTUNsYXNzSW5mby5jcHAiCm5zcmVzdWx0Cm5zRWxlbWVudFNIOjpQb3N0Q3JlYXRlKG5z SVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAg ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmopCnsKICBuc3Jlc3VsdCBydiA9IG5zTm9kZVNI OjpQb3N0Q3JlYXRlKHdyYXBwZXIsIGN4LCBvYmopOwogIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5z SVN1cHBvcnRzPiBuYXRpdmU7CgogIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhu YXRpdmUpKTsKCiAgbnNDT01QdHI8bnNJQ29udGVudD4gY29udGVudChkb19RdWVyeUludGVyZmFj ZShuYXRpdmUpKTsKICBkbyB7IGlmICghKGNvbnRlbnQpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRv YzsKCiAgY29udGVudC0+R2V0RG9jdW1lbnQoKmdldHRlcl9BZGRSZWZzKGRvYykpOwoKICBpZiAo IWRvYykgewoKCgogICAgcmV0dXJuIDA7CiAgfQoKCiAgbnNDT01QdHI8bnNJUHJlc1NoZWxsPiBz aGVsbDsKICBkb2MtPkdldFNoZWxsQXQoMCwgZ2V0dGVyX0FkZFJlZnMoc2hlbGwpKTsKCiAgaWYg KCFzaGVsbCkgewogICAgcmV0dXJuIDA7CiAgfQoKICBuc0lGcmFtZSogZnJhbWUgPSAwOwogIHNo ZWxsLT5HZXRQcmltYXJ5RnJhbWVGb3IoY29udGVudCwgJmZyYW1lKTsKCiAgaWYgKGZyYW1lKSB7 CgoKICAgIHJldHVybiAwOwogIH0KCgoKCiAgbnNDT01QdHI8bnNJQmluZGluZ01hbmFnZXI+IGJp bmRpbmdNYW5hZ2VyOwogIGRvYy0+R2V0QmluZGluZ01hbmFnZXIoZ2V0dGVyX0FkZFJlZnMoYmlu ZGluZ01hbmFnZXIpKTsKICBkbyB7IGlmICghKGJpbmRpbmdNYW5hZ2VyKSkgeyA7IHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5zSVhC TEJpbmRpbmc+IGJpbmRpbmc7CiAgYmluZGluZ01hbmFnZXItPkdldEJpbmRpbmcoY29udGVudCwg Z2V0dGVyX0FkZFJlZnMoYmluZGluZykpOwoKICBpZiAoYmluZGluZykgewoKCgogICAgcmV0dXJu IDA7CiAgfQoKCiAgbnNDT01QdHI8bnNJUHJlc0NvbnRleHQ+IHBjdHg7CiAgc2hlbGwtPkdldFBy ZXNDb250ZXh0KGdldHRlcl9BZGRSZWZzKHBjdHgpKTsKICBkbyB7IGlmICghKHBjdHgpKSB7IDsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCgoKCgogIG5z QXV0b1N0cmluZyBiaW5kaW5nVVJMOwogIHBjdHgtPkdldFhCTEJpbmRpbmdVUkwoY29udGVudCwg YmluZGluZ1VSTCk7CiAgaWYgKGJpbmRpbmdVUkwuSXNFbXB0eSgpKSB7CgogICAgcmV0dXJuIDA7 CiAgfQoKCiAgUFJCb29sIGR1bW15OwoKICBuc0NPTVB0cjxuc0lYQkxTZXJ2aWNlPiB4YmxTZXJ2 aWNlKGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy94Ymw7MSIpKTsKICBkbyB7IGlmICghKHhi bFNlcnZpY2UpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNDAxMTFMKTsgfSB9IHdoaWxl ICgwKTsKCiAgeGJsU2VydmljZS0+TG9hZEJpbmRpbmdzKGNvbnRlbnQsIGJpbmRpbmdVUkwsIDAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGJpbmRpbmcpLCAmZHVt bXkpOwoKICBpZiAoYmluZGluZykgewogICAgYmluZGluZy0+RXhlY3V0ZUF0dGFjaGVkSGFuZGxl cigpOwogIH0KCiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zQXJyYXlTSDo6R2V0SXRlbUF0 KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewogIG5zQ09NUHRyPG5zSURPTU5vZGVMaXN0PiBs aXN0KGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGxpc3QpKSB7IDsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9N Tm9kZSAqbm9kZSA9IDA7CiAgbnNyZXN1bHQgcnYgPSBsaXN0LT5JdGVtKGFJbmRleCwgJm5vZGUp OwoKICAqYVJlc3VsdCA9IG5vZGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1bHQKbnNBcnJheVNI OjpHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRl eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBq c3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewogIFBSQm9vbCBpc19udW1iZXIgPSAwOwogIGlu dDMyIG4gPSBHZXRBcnJheUluZGV4RnJvbUlkKGN4LCBpZCwgJmlzX251bWJlcik7CgogIGlmIChp c19udW1iZXIpIHsKICAgIGlmIChuIDwgMCkgewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgKCgo UFJVaW50MzIpKDEpPDwzMSkgfCAoKFBSVWludDMyKSgxNCArMHg0NSk8PDE2KSB8ICgoUFJVaW50 MzIpKDEpKSkgKTsKICAgIH0KCiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwogICAg d3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRy PG5zSVN1cHBvcnRzPiBhcnJheV9pdGVtOwoKICAgIG5zcmVzdWx0IHJ2ID0gR2V0SXRlbUF0KG5h dGl2ZSwgbiwgZ2V0dGVyX0FkZFJlZnMoYXJyYXlfaXRlbSkpOwogICAgZG8geyBpZiAoISgoISgo cnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBp ZiAoYXJyYXlfaXRlbSkgewogICAgICBydiA9IFdyYXBOYXRpdmUoY3gsIDo6SlNfR2V0R2xvYmFs T2JqZWN0KGN4KSwgYXJyYXlfaXRlbSwKICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUlu Zm88bnNJU3VwcG9ydHM+OjpHZXRJSUQoKSwgdnApOwogICAgICBkbyB7IGlmICghKCghKChydikg JiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwogICAgfQogIH0K CiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zTmFtZWRBcnJheVNIOjpHZXRQcm9wZXJ0eShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIGlmICgoKChp ZCkgJiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHg0KSkgewogICAgbnNDT01QdHI8 bnNJU3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVm cyhuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gaXRlbTsKCiAgICBKU1N0cmlu ZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAqKSgoaWQpICYgfihqc3ZhbCkoKChKU1VpbnQz MikxIDw8ICgzKSkgLSAxKSkpKTsKICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUocmVpbnRlcnBy ZXRfY2FzdDwgY29uc3QgUFJVbmljaGFyICogPig6OkpTX0dldFN0cmluZ0NoYXJzKHN0cikpLAoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSk7Cgog ICAgbnNyZXN1bHQgcnYgPSBHZXROYW1lZEl0ZW0obmF0aXZlLCBuYW1lLCBnZXR0ZXJfQWRkUmVm cyhpdGVtKSk7CiAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0 dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICAgIGlmIChpdGVtKSB7CiAgICAgIHJ2ID0gV3JhcE5h dGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBpdGVtLAogICAgICAgICAgICAgICAg ICAgICAgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpLCB2cCk7CiAgICAgIGRv IHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGls ZSAoMCk7CgogICAgICByZXR1cm4gMDsKICAgIH0KCiAgICByZXR1cm4gMDsKICB9CgogIHJldHVy biBuc0FycmF5U0g6OkdldFByb3BlcnR5KHdyYXBwZXIsIGN4LCBvYmosIGlkLCB2cCwgX3JldHZh bCk7Cn0KCgoKCm5zcmVzdWx0Cm5zTmFtZWROb2RlTWFwU0g6OkdldEl0ZW1BdChuc0lTdXBwb3J0 cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJU3VwcG9ydHMgKiphUmVzdWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NTmFtZWROb2RlTWFwPiBt YXAoZG9fUXVlcnlJbnRlcmZhY2UoYU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobWFwKSkgeyA7IHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU5v ZGUgKm5vZGUgPSAwOwogIG5zcmVzdWx0IHJ2ID0gbWFwLT5JdGVtKGFJbmRleCwgJm5vZGUpOwoK ICAqYVJlc3VsdCA9IG5vZGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1bHQKbnNOYW1lZE5vZGVN YXBTSDo6R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcm IGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVz dWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NTmFtZWROb2RlTWFwPiBtYXAoZG9fUXVlcnlJbnRlcmZh Y2UoYU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobWFwKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU5vZGUgKm5vZGUgPSAwOwogIG5z cmVzdWx0IHJ2ID0gbWFwLT5HZXROYW1lZEl0ZW0oYU5hbWUsICZub2RlKTsKCiAgKmFSZXN1bHQg PSBub2RlOwoKICByZXR1cm4gcnY7Cn0KCgoKCm5zcmVzdWx0Cm5zSFRNTENvbGxlY3Rpb25TSDo6 R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewogIG5zQ09NUHRy PG5zSURPTUhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uKGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRp dmUpKTsKICBkbyB7IGlmICghKGNvbGxlY3Rpb24pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NTm9kZSAqbm9kZSA9IDA7CiAgbnNy ZXN1bHQgcnYgPSBjb2xsZWN0aW9uLT5JdGVtKGFJbmRleCwgJm5vZGUpOwoKICAqYVJlc3VsdCA9 IG5vZGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1bHQKbnNIVE1MQ29sbGVjdGlvblNIOjpHZXRO YW1lZEl0ZW0obnNJU3VwcG9ydHMgKmFOYXRpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewogIG5zQ09NUHRyPG5zSURPTUhUTUxDb2xs ZWN0aW9uPiBjb2xsZWN0aW9uKGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKICBkbyB7IGlm ICghKGNvbGxlY3Rpb24pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9 IHdoaWxlICgwKTsKCiAgbnNJRE9NTm9kZSAqbm9kZSA9IDA7CiAgbnNyZXN1bHQgcnYgPSBjb2xs ZWN0aW9uLT5OYW1lZEl0ZW0oYU5hbWUsICZub2RlKTsKCiAgKmFSZXN1bHQgPSBub2RlOwoKICBy ZXR1cm4gcnY7Cn0KCgoKbnNyZXN1bHQKbnNDb250ZW50TGlzdFNIOjpQcmVDcmVhdGUobnNJU3Vw cG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3QgKipwYXJlbnRPYmopCnsKICBuc0NPTVB0 cjxuc0lDb250ZW50TGlzdD4gY29udGVudExpc3QoZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlT2Jq KSk7CiAgOwoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlX3BhcmVudDsKICBjb250ZW50 TGlzdC0+R2V0UGFyZW50T2JqZWN0KGdldHRlcl9BZGRSZWZzKG5hdGl2ZV9wYXJlbnQpKTsKCiAg aWYgKCFuYXRpdmVfcGFyZW50KSB7CiAgICAqcGFyZW50T2JqID0gZ2xvYmFsT2JqOwogICAgcmV0 dXJuIDA7CiAgfQoKICBqc3ZhbCB2OwogIG5zcmVzdWx0IHJ2ID0gV3JhcE5hdGl2ZShjeCwgOjpK U19HZXRHbG9iYWxPYmplY3QoY3gpLCBuYXRpdmVfcGFyZW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCksICZ2KTsKCiAgKnBh cmVudE9iaiA9ICgoSlNPYmplY3QgKikoKHZvaWQgKikoKHYpICYgfihqc3ZhbCkoKChKU1VpbnQz MikxIDw8ICgzKSkgLSAxKSkpKTsKCiAgcmV0dXJuIHJ2Owp9CgoKCm5zcmVzdWx0Cm5zRm9ybUNv bnRyb2xMaXN0U0g6OkdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpCnsKICBuc0NP TVB0cjxuc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3Q+IGxpc3QoZG9fUXVlcnlJbnRlcmZhY2Uo YU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobGlzdCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4 MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICByZXR1cm4gbGlzdC0+TmFtZWRJdGVtKGFOYW1l LCBhUmVzdWx0KTsKfQoKCgpzdGF0aWMgaW5saW5lIFBSQm9vbApkb2N1bWVudE5lZWRzU2VjdXJp dHlDaGVjayhKU0NvbnRleHQgKmN4LCBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy KQp7CgogIEpTT2JqZWN0ICp3cmFwcGVyX29iaiA9IDA7CiAgd3JhcHBlci0+R2V0SlNPYmplY3Qo JndyYXBwZXJfb2JqKTsKCiAgSlNPYmplY3QgKndyYXBwZXJfZ2xvYmFsID0gR2V0R2xvYmFsSlNP YmplY3QoY3gsIHdyYXBwZXJfb2JqKTsKIyA0ODA5ICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgaWYg KHdyYXBwZXJfZ2xvYmFsICE9IDo6SlNfR2V0R2xvYmFsT2JqZWN0KGN4KSkgewoKCgogICAgcmV0 dXJuIDE7CiAgfQoKCgoKCgoKICBKU09iamVjdCAqZnVuY3Rpb25fb2JqID0gMDsKICBKU1N0YWNr RnJhbWUgKmZwID0gMDsKCiAgZG8gewogICAgZnAgPSA6OkpTX0ZyYW1lSXRlcmF0b3IoY3gsICZm cCk7CgogICAgaWYgKCFmcCkgewogICAgICBpZiAoIWZ1bmN0aW9uX29iaikgewoKCgoKCiAgICAg ICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGZ1bmN0aW9uX29i aiA9IDo6SlNfR2V0RnJhbWVGdW5jdGlvbk9iamVjdChjeCwgZnApOwogIH0gd2hpbGUgKCFmdW5j dGlvbl9vYmopOwoKCiAgSlNPYmplY3QgKmZ1bmN0aW9uX2dsb2JhbCA9IEdldEdsb2JhbEpTT2Jq ZWN0KGN4LCBmdW5jdGlvbl9vYmopOwoKICBpZiAoZnVuY3Rpb25fZ2xvYmFsICE9IHdyYXBwZXJf Z2xvYmFsKSB7CgoKCgogICAgcmV0dXJuIDE7CiAgfQoKCgoKCiAgcmV0dXJuIDA7Cn0KCm5zcmVz dWx0Cm5zRG9jdW1lbnRTSDo6QWRkUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq d3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVj dCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCAqX3JldHZhbCkKewoKCiAgaWYgKCFzRG9TZWN1cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSkg ewogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoaWQgPT0gc0xvY2F0aW9uX2lkKSB7CgoKCiAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDEpPDwzMSkgfCAoKFBSVWludDMyKSgxNCAr MHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEwMDApKSkgKTsKICB9CgogIHJldHVybiAwOwp9Cgpu c3Jlc3VsdApuc0RvY3VtZW50U0g6OkRlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRp dmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoaWQgPT0gc0xvY2F0aW9uX2lkKSB7CgoKCiAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDEpPDwzMSkgfCAoKFBSVWludDMyKSgxNCAr MHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEwMDApKSkgKTsKICB9CgogIHJldHVybiAwOwp9Cgpu c3Jlc3VsdApuc0RvY3VtZW50U0g6Ok5ld1Jlc29sdmUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2 ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq ZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAgICAgICAgICAgICAgICAg ICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKGlkID09IHNMb2Nh dGlvbl9pZCkgewoKCgoKCiAgICBKU1N0cmluZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAq KSgoaWQpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKTsKICAgIG5zQ09N UHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0Fk ZFJlZnMobmF0aXZlKSk7CiAgICBkbyB7IGlmICghKG5hdGl2ZSkpIHsgOyByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ09NUHRyPG5zSURPTU5T RG9jdW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEo ZG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7 CgogICAgbnNDT01QdHI8bnNJRE9NTG9jYXRpb24+IGxvY2F0aW9uOwogICAgbnNyZXN1bHQgcnYg PSBkb2MtPkdldExvY2F0aW9uKGdldHRlcl9BZGRSZWZzKGxvY2F0aW9uKSk7CiAgICBkbyB7IGlm ICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDAp OwoKICAgIGpzdmFsIHY7CgogICAgcnYgPSBXcmFwTmF0aXZlKGN4LCBvYmosIGxvY2F0aW9uLCBu c0NPTVR5cGVJbmZvPG5zSURPTUxvY2F0aW9uPjo6R2V0SUlEKCksICZ2KTsKICAgIGRvIHsgaWYg KCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7 CgogICAgc0RvU2VjdXJpdHlDaGVja0luQWRkUHJvcGVydHkgPSAwOwoKICAgIEpTQm9vbCBvayA9 IDo6SlNfRGVmaW5lVUNQcm9wZXJ0eShjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0NoYXJzKHN0ciks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5n dGgoc3RyKSwgdiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw KTsKCiAgICBzRG9TZWN1cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSA9IDE7CgogICAgaWYgKCFvaykg ewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwogICAgfQoKICAgICpvYmpw ID0gb2JqOwoKICAgIHJldHVybiAwOwogIH0KCiAgcmV0dXJuIG5zTm9kZVNIOjpOZXdSZXNvbHZl KHdyYXBwZXIsIGN4LCBvYmosIGlkLCBmbGFncywgb2JqcCwgX3JldHZhbCk7Cn0KCm5zcmVzdWx0 Cm5zRG9jdW1lbnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3Jh cHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAq b2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoZG9jdW1l bnROZWVkc1NlY3VyaXR5Q2hlY2soY3gsIHdyYXBwZXIpKSB7CiAgICBuc3Jlc3VsdCBydiA9CiAg ICAgIGRvQ2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBpZCwgd3JhcHBlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSVhQQ1NlY3VyaXR5TWFuYWdlcjo6QUNDRVNTX0dFVF9QUk9Q RVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwoKICAgIGlmICgoKHJ2KSAmIDB4 ODAwMDAwMDApKSB7CgoKCiAgICAgICpfcmV0dmFsID0gMDsKCiAgICAgICp2cCA9ICgoanN2YWwp KDApKTsKICAgIH0KICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RvY3VtZW50U0g6OlNl dFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKGRvY3VtZW50TmVlZHNTZWN1cml0eUNo ZWNrKGN4LCB3cmFwcGVyKSkgewogICAgbnNyZXN1bHQgcnYgPQogICAgICBkb0NoZWNrUHJvcGVy dHlBY2Nlc3MoY3gsIG9iaiwgaWQsIHdyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lYUENTZWN1cml0eU1hbmFnZXI6OkFDQ0VTU19TRVRfUFJPUEVSVFksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwKTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgewoKCgog ICAgICAqX3JldHZhbCA9IDA7CgogICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIGlmIChpZCA9 PSBzTG9jYXRpb25faWQpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICB3 cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7CiAgICBkbyB7IGlmICgh KG5hdGl2ZSkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUg KDApOwoKICAgIG5zQ09NUHRyPG5zSURPTU5TRG9jdW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFj ZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEoZG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01QdHI8bnNJRE9NTG9jYXRpb24+ IGxvY2F0aW9uOwoKICAgIG5zcmVzdWx0IHJ2ID0gZG9jLT5HZXRMb2NhdGlvbihnZXR0ZXJfQWRk UmVmcyhsb2NhdGlvbikpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkg eyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBpZiAobG9jYXRpb24pIHsKICAgICAg SlNTdHJpbmcgKnZhbCA9IDo6SlNfVmFsdWVUb1N0cmluZyhjeCwgKnZwKTsKICAgICAgZG8geyBp ZiAoISh2YWwpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxl ICgwKTsKCiAgICAgIG5zRGVwZW5kZW50U3RyaW5nIGhyZWYocmVpbnRlcnByZXRfY2FzdDwgY29u c3QgUFJVbmljaGFyICogPig6OkpTX0dldFN0cmluZ0NoYXJzKHZhbCkpLAoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aCh2YWwpKTsKCiAgICAgIG5zcmVz dWx0IHJ2ID0gbG9jYXRpb24tPlNldEhyZWYoaHJlZik7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2 KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICBy ZXR1cm4gV3JhcE5hdGl2ZShjeCwgb2JqLCBsb2NhdGlvbiwgbnNDT01UeXBlSW5mbzxuc0lET01M b2NhdGlvbj46OkdldElJRCgpLCB2cCk7CiAgICB9CiAgfQoKICByZXR1cm4gbnNOb2RlU0g6OlNl dFByb3BlcnR5KHdyYXBwZXIsIGN4LCBvYmosIGlkLCB2cCwgX3JldHZhbCk7Cn0KCm5zcmVzdWx0 Cm5zRG9jdW1lbnRTSDo6R2V0RmxhZ3MoUFJVaW50MzIqIGFGbGFncykKewogICphRmxhZ3MgPSAo bnNJQ2xhc3NJbmZvOjpNQUlOX1RIUkVBRF9PTkxZIHwgbnNJQ2xhc3NJbmZvOjpET01fT0JKRUNU KTsKCiAgcmV0dXJuIDA7Cn0KCgoKCgpuc3Jlc3VsdApuc0hUTUxEb2N1bWVudFNIOjpSZXNvbHZl SW1wbChKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3VwcG9ydHMgKipyZXN1bHQpCnsKICBuc0NPTVB0cjxuc0lTdXBwb3J0 cz4gbmF0aXZlOwoKICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7 CiAgOwoKICBuc0NPTVB0cjxuc0lIVE1MRG9jdW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFjZShu YXRpdmUpKTsKICBkbyB7IGlmICghKGRvYykpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw ZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKCgoKICBKU1N0cmluZyAqc3RyID0gSlNfVmFsdWVUb1N0 cmluZyhjeCwgaWQpOwoKICBjb25zdCBuc0RlcGVuZGVudFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0 X2Nhc3Q8IGNvbnN0IFBSVW5pY2hhciAqID4oOjpKU19HZXRTdHJpbmdDaGFycyhzdHIpKSwKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpKTsK CiAgcmV0dXJuIGRvYy0+UmVzb2x2ZU5hbWUobmFtZSwgMCwgcmVzdWx0KTsKfQoKCkpTQm9vbApu c0hUTUxEb2N1bWVudFNIOjpEb2N1bWVudE9wZW4oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICphcmd2 LCBqc3ZhbCAqcnZhbCkKewogIGlmIChhcmdjID4gMikgewogICAgSlNPYmplY3QgKmdsb2JhbCA9 IEdldEdsb2JhbEpTT2JqZWN0KGN4LCBvYmopOwoKCgoKICAgIHJldHVybiA6OkpTX0NhbGxGdW5j dGlvbk5hbWUoY3gsIGdsb2JhbCwgIm9wZW4iLCBhcmdjLCBhcmd2LCBydmFsKTsKICB9CgogIG5z Q09NUHRyPG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU+IHdyYXBwZXI7CgogIG5zcmVzdWx0IHJ2 ID0KICAgIHNYUENvbm5lY3QtPkdldFdyYXBwZWROYXRpdmVPZkpTT2JqZWN0KGN4LCBvYmosIGdl dHRlcl9BZGRSZWZzKHdyYXBwZXIpKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAw KSkpKSB7IDsgcmV0dXJuIChKU0ludG4pMDsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJ U3VwcG9ydHM+IG5hdGl2ZTsKICBydiA9IHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVm cyhuYXRpdmUpKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0 dXJuIChKU0ludG4pMDsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJRE9NTlNIVE1MRG9j dW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICBkbyB7IGlmICghKGRvYykp IHsgOyByZXR1cm4gKEpTSW50bikwOyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lET01E b2N1bWVudD4gcmV0dmFsOwoKICBydiA9IGRvYy0+T3BlbihnZXR0ZXJfQWRkUmVmcyhyZXR2YWwp KTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIDA7IH0g fSB3aGlsZSAoMCk7CgogIHJ2ID0gV3JhcE5hdGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3Qo Y3gpLCByZXR2YWwsCiAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1l bnQ+OjpHZXRJSUQoKSwgcnZhbCk7CiAgOwoKICByZXR1cm4gKCEoKHJ2KSAmIDB4ODAwMDAwMDAp KTsKfQoKbnNyZXN1bHQKbnNIVE1MRG9jdW1lbnRTSDo6TmV3UmVzb2x2ZShuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCkK ewogIGlmICghKGZsYWdzICYgMHgwMikpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiByZXN1 bHQ7CgogICAgbnNyZXN1bHQgcnYgPSBSZXNvbHZlSW1wbChjeCwgd3JhcHBlciwgaWQsIGdldHRl cl9BZGRSZWZzKHJlc3VsdCkpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkp KSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAg IEpTU3RyaW5nICpzdHIgPSBKU19WYWx1ZVRvU3RyaW5nKGN4LCBpZCk7CgogICAgICBKU0Jvb2wg b2sgPSAqX3JldHZhbCA9CiAgICAgICAgOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6 SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpK U19HZXRTdHJpbmdMZW5ndGgoc3RyKSwgKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkp IDw8IDEpIHwgMHgxKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CiAg ICAgICpvYmpwID0gb2JqOwoKICAgICAgcmV0dXJuIG9rID8gMCA6ICgobnNyZXN1bHQpIDB4ODAw MDQwMDVMKTsKICAgIH0KCiAgICBpZiAoaWQgPT0gc09wZW5faWQpIHsKICAgICAgSlNTdHJpbmcg KnN0ciA9ICgoSlNTdHJpbmcgKikoKHZvaWQgKikoKGlkKSAmIH4oanN2YWwpKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpKSk7CiAgICAgIEpTRnVuY3Rpb24gKmZuYyA9CiAgICAgICAgOjpKU19E ZWZpbmVGdW5jdGlvbihjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0J5dGVzKHN0ciksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEb2N1bWVudE9wZW4sIDAsIDB4MDEpOwoKICAgICAgKm9ianAg PSBvYmo7CgogICAgICByZXR1cm4gZm5jID8gMCA6ICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsK ICAgIH0KICB9CgogIHJldHVybiBuc0RvY3VtZW50U0g6Ok5ld1Jlc29sdmUod3JhcHBlciwgY3gs IG9iaiwgaWQsIGZsYWdzLCBvYmpwLCBfcmV0dmFsKTsKfQoKbnNyZXN1bHQKbnNIVE1MRG9jdW1l bnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCwgUFJCb29s ICpfcmV0dmFsKQp7CgoKICBuc3Jlc3VsdCBydiA9IG5zRG9jdW1lbnRTSDo6R2V0UHJvcGVydHko d3JhcHBlciwgY3gsIG9iaiwgaWQsIHZwLCBfcmV0dmFsKTsKICBpZiAoISpfcmV0dmFsKSB7CiAg ICByZXR1cm4gcnY7CiAgfQoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gcmVzdWx0OwoKICBydiA9 IFJlc29sdmVJbXBsKGN4LCB3cmFwcGVyLCBpZCwgZ2V0dGVyX0FkZFJlZnMocmVzdWx0KSk7CiAg ZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdo aWxlICgwKTsKCiAgaWYgKHJlc3VsdCkgewogICAgcmV0dXJuIFdyYXBOYXRpdmUoY3gsIDo6SlNf R2V0R2xvYmFsT2JqZWN0KGN4KSwgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgbnNDT01U eXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpLCB2cCk7CiAgfQoKICByZXR1cm4gMDsKfQoK CgoKSlNCb29sCm5zSFRNTEVsZW1lbnRTSDo6U2Nyb2xsSW50b1ZpZXcoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqc3ZhbCAqYXJndiwganN2YWwgKnJ2YWwpCnsKICBuc0NPTVB0cjxuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlPiB3cmFwcGVyOwoKICBuc3Jlc3VsdCBydiA9CiAgICBzWFBDb25uZWN0LT5HZXRX cmFwcGVkTmF0aXZlT2ZKU09iamVjdChjeCwgb2JqLCBnZXR0ZXJfQWRkUmVmcyh3cmFwcGVyKSk7 CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiAoSlNJbnRu KTA7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgcnYg PSB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7CiAgZG8geyBpZiAo ISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiAoSlNJbnRuKTA7IH0gfSB3aGls ZSAoMCk7CgogIG5zQ09NUHRyPG5zSURPTU5TSFRNTEVsZW1lbnQ+IGVsZW1lbnQoZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CiAgZG8geyBpZiAoIShlbGVtZW50KSkgeyA7IHJldHVybiAoSlNJ bnRuKTA7IH0gfSB3aGlsZSAoMCk7CgogIEpTQm9vbCB0b3AgPSAoSlNJbnRuKTE7CgogIGlmIChh cmdjID4gMCkgewogICAgOjpKU19WYWx1ZVRvQm9vbGVhbihjeCwgYXJndlswXSwgJnRvcCk7CiAg fQoKICBydiA9IGVsZW1lbnQtPlNjcm9sbEludG9WaWV3KHRvcCk7CgogICpydmFsID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKCiAgcmV0dXJuICghKChy dikgJiAweDgwMDAwMDAwKSk7Cn0KCm5zcmVzdWx0Cm5zSFRNTEVsZW1lbnRTSDo6TmV3UmVzb2x2 ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMy IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJv b2wgKl9yZXR2YWwpCnsKICBpZiAoaWQgPT0gc1Njcm9sbEludG9WaWV3X2lkICYmICEoMHgwMiAm IGZsYWdzKSkgewogICAgSlNTdHJpbmcgKnN0ciA9ICgoSlNTdHJpbmcgKikoKHZvaWQgKikoKGlk KSAmIH4oanN2YWwpKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpKSk7CiAgICBKU0Z1bmN0aW9u ICpjZm5jID0KICAgICAgOjpKU19EZWZpbmVGdW5jdGlvbihjeCwgb2JqLCA6OkpTX0dldFN0cmlu Z0J5dGVzKHN0ciksIFNjcm9sbEludG9WaWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgIDAs IDApOwoKICAgICpvYmpwID0gb2JqOwoKICAgIHJldHVybiBjZm5jID8gMCA6ICgobnNyZXN1bHQp IDB4ODAwMGZmZmZMKTsKICB9CgogIHJldHVybiBuc0VsZW1lbnRTSDo6TmV3UmVzb2x2ZSh3cmFw cGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsIF9yZXR2YWwpOwp9CgoKCgoKbnNyZXN1bHQK bnNIVE1MRm9ybUVsZW1lbnRTSDo6RmluZE5hbWVkSXRlbShuc0lGb3JtICphRm9ybSwgSlNTdHJp bmcgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq KmFSZXN1bHQpCnsKICAqYVJlc3VsdCA9IDA7CgogIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUocmVp bnRlcnByZXRfY2FzdDwgY29uc3QgUFJVbmljaGFyICogPig6OkpTX0dldFN0cmluZ0NoYXJzKHN0 cikpLAoKICAgICAgICAgICAgICAgICAgICAgICAgIDo6SlNfR2V0U3RyaW5nTGVuZ3RoKHN0cikp OwoKICBhRm9ybS0+UmVzb2x2ZU5hbWUobmFtZSwgYVJlc3VsdCk7CgogIGlmICghKmFSZXN1bHQp IHsKICAgIG5zQ09NUHRyPG5zSUNvbnRlbnQ+IGNvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UoYUZv cm0pKTsKICAgIG5zQ09NUHRyPG5zSURPTUhUTUxGb3JtRWxlbWVudD4gZm9ybV9lbGVtZW50KGRv X1F1ZXJ5SW50ZXJmYWNlKGFGb3JtKSk7CgogICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYzsK ICAgIGNvbnRlbnQtPkdldERvY3VtZW50KCpnZXR0ZXJfQWRkUmVmcyhkb2MpKTsKCiAgICBuc0NP TVB0cjxuc0lIVE1MRG9jdW1lbnQ+IGh0bWxfZG9jKGRvX1F1ZXJ5SW50ZXJmYWNlKGRvYykpOwoK ICAgIGlmIChodG1sX2RvYyAmJiBmb3JtX2VsZW1lbnQpIHsKICAgICAgaHRtbF9kb2MtPlJlc29s dmVOYW1lKG5hbWUsIGZvcm1fZWxlbWVudCwgYVJlc3VsdCk7CiAgICB9CiAgfQoKICByZXR1cm4g MDsKfQoKbnNyZXN1bHQKbnNIVE1MRm9ybUVsZW1lbnRTSDo6TmV3UmVzb2x2ZShuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSVWludDMyIGZsYWdzLCBKU09iamVjdCAqKm9ianAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKCghKDB4MDIg JiBmbGFncykpICYmICgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQp KSB7CiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwoKICAgIHdyYXBwZXItPkdldE5h dGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKICAgIDsKCiAgICBuc0NPTVB0cjxuc0lGb3Jt PiBmb3JtKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwogICAgbnNDT01QdHI8bnNJU3VwcG9y dHM+IHJlc3VsdDsKCiAgICBKU1N0cmluZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAqKSgo aWQpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKTsKICAgIEZpbmROYW1l ZEl0ZW0oZm9ybSwgc3RyLCBnZXR0ZXJfQWRkUmVmcyhyZXN1bHQpKTsKCiAgICBpZiAocmVzdWx0 KSB7CiAgICAgICpfcmV0dmFsID0gOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6SlNf R2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KSwgMCwgMCwgMCk7CgogICAgICAqb2JqcCA9IG9iajsKCiAgICAgIHJldHVybiAqX3JldHZhbCA/ IDAgOiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7CiAgICB9CiAgfQoKICByZXR1cm4gbnNIVE1M RWxlbWVudFNIOjpOZXdSZXNvbHZlKHdyYXBwZXIsIGN4LCBvYmosIGlkLCBmbGFncywgb2JqcCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXR2YWwpOwp9CgoKbnNyZXN1 bHQKbnNIVE1MRm9ybUVsZW1lbnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5h dGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250ZXh0 ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgbnNDT01QdHI8bnNJU3VwcG9y dHM+IG5hdGl2ZTsKCiAgd3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkp OwogIDsKCiAgbnNDT01QdHI8bnNJRm9ybT4gZm9ybShkb19RdWVyeUludGVyZmFjZShuYXRpdmUp KTsKCiAgaWYgKCgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7 CiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gcmVzdWx0OwoKICAgIEpTU3RyaW5nICpzdHIgPSAo KEpTU3RyaW5nICopKCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMp KSAtIDEpKSkpOwogICAgRmluZE5hbWVkSXRlbShmb3JtLCBzdHIsIGdldHRlcl9BZGRSZWZzKHJl c3VsdCkpOwoKICAgIGlmIChyZXN1bHQpIHsKCgogICAgICByZXR1cm4gV3JhcE5hdGl2ZShjeCwg OjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg IG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJSUQoKSwgdnApOwogICAgfQoKICAgIHJl dHVybiAwOwogIH0KCiAgUFJJbnQzMiBuID0gR2V0QXJyYXlJbmRleEZyb21JZChjeCwgaWQpOwoK ICBpZiAobiA+PSAwKSB7CiAgICBuc0NPTVB0cjxuc0lGb3JtQ29udHJvbD4gY29udHJvbDsKICAg IGZvcm0tPkdldEVsZW1lbnRBdChuLCBnZXR0ZXJfQWRkUmVmcyhjb250cm9sKSk7CgogICAgaWYg KGNvbnRyb2wpIHsKICAgICAgcmV0dXJuIFdyYXBOYXRpdmUoY3gsIDo6SlNfR2V0R2xvYmFsT2Jq ZWN0KGN4KSwgY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxu c0lTdXBwb3J0cz46OkdldElJRCgpLCB2cCk7CiAgICB9CiAgfQoKICByZXR1cm4gMDsKfQoKbnNy ZXN1bHQKbnNIVE1MRm9ybUVsZW1lbnRTSDo6TmV3RW51bWVyYXRlKG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJVaW50MzIgZW51bV9vcCwganN2YWwgKnN0YXRlcCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzaWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgc3dpdGNoIChlbnVt X29wKSB7CiAgY2FzZSBKU0VOVU1FUkFURV9JTklUOgogICAgewogICAgICBuc0NPTVB0cjxuc0lT dXBwb3J0cz4gbmF0aXZlOwogICAgICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMo bmF0aXZlKSk7CiAgICAgIDsKCiAgICAgIG5zQ09NUHRyPG5zSUZvcm0+IGZvcm0oZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CgogICAgICBpZiAoIWZvcm0pIHsKICAgICAgICAqc3RhdGVwID0g KChqc3ZhbCkoMCkpOwogICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAg ICAgIH0KCiAgICAgICpzdGF0ZXAgPSAoKChqc3ZhbCkoMCkgPDwgMSkgfCAweDEpOwoKICAgICAg aWYgKGlkcCkgewogICAgICAgIFBSVWludDMyIGNvdW50ID0gMDsKICAgICAgICBmb3JtLT5HZXRF bGVtZW50Q291bnQoJmNvdW50KTsKCiAgICAgICAgKmlkcCA9ICgoKGpzdmFsKShjb3VudCkgPDwg MSkgfCAweDEpOwogICAgICB9CgogICAgICBicmVhazsKICAgIH0KICBjYXNlIEpTRU5VTUVSQVRF X05FWFQ6CiAgICB7CiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICAgIHdy YXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKICAgICAgOwoKICAgICAg bnNDT01QdHI8bnNJRm9ybT4gZm9ybShkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgICAg ZG8geyBpZiAoIShmb3JtKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7IH0g fSB3aGlsZSAoMCk7CgogICAgICBQUkludDMyIGluZGV4ID0gKFBSSW50MzIpKChqc2ludCkoKnN0 YXRlcCkgPj4gMSk7CgogICAgICBQUlVpbnQzMiBjb3VudCA9IDA7CiAgICAgIGZvcm0tPkdldEVs ZW1lbnRDb3VudCgmY291bnQpOwoKICAgICAgaWYgKChQUlVpbnQzMilpbmRleCA8IGNvdW50KSB7 CiAgICAgICAgbnNDT01QdHI8bnNJRm9ybUNvbnRyb2w+IGNvbnRyb2xOb2RlOwogICAgICAgIGZv cm0tPkdldEVsZW1lbnRBdChpbmRleCwgZ2V0dGVyX0FkZFJlZnMoY29udHJvbE5vZGUpKTsKICAg ICAgICBkbyB7IGlmICghKGNvbnRyb2xOb2RlKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDA0MDA1TCk7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgIG5zQ09NUHRyPG5zSURPTUVsZW1lbnQ+ IGRvbUVsZW1lbnQgPSBkb19RdWVyeUludGVyZmFjZShjb250cm9sTm9kZSk7CiAgICAgICAgZG8g eyBpZiAoIShkb21FbGVtZW50KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7 IH0gfSB3aGlsZSAoMCk7CgogICAgICAgIG5zQXV0b1N0cmluZyBhdHRyOwogICAgICAgIGRvbUVs ZW1lbnQtPkdldEF0dHJpYnV0ZShzdGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0cmluZyYgPihu c0RlcGVuZGVudFN0cmluZyhyZWludGVycHJldF9jYXN0PCBjb25zdCBuc0FTdHJpbmc6OmNoYXJf dHlwZSogPihMIm5hbWUiKSwgUFJVaW50MzIoKHNpemVvZihMIm5hbWUiKS9zaXplb2Yod2NoYXJf dCkpLTEpKSksIGF0dHIpOwogICAgICAgIGlmIChhdHRyLklzRW1wdHkoKSkgewoKICAgICAgICAg IGF0dHIuQXBwZW5kSW50KGluZGV4KTsKICAgICAgICB9CiAgICAgICAgSlNTdHJpbmcgKmpzbmFt ZSA9CiAgICAgICAgICBKU19OZXdVQ1N0cmluZ0NvcHlOKGN4LCByZWludGVycHJldF9jYXN0PCBj b25zdCBqc2NoYXIgKiA+KGF0dHIuZ2V0KCkpLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXR0ci5MZW5ndGgoKSk7CiAgICAgICAgZG8geyBpZiAoIShqc25hbWUpKSB7IDsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgICAgSlNfVmFs dWVUb0lkKGN4LCAoKChqc3ZhbCkoanNuYW1lKSkgfCAoMHg0KSksIGlkcCk7CgogICAgICAgICpz dGF0ZXAgPSAoKChqc3ZhbCkoKytpbmRleCkgPDwgMSkgfCAweDEpOwogICAgICB9IGVsc2Ugewog ICAgICAgICpzdGF0ZXAgPSAoKGpzdmFsKSgwKSk7CiAgICAgIH0KCiAgICAgIGJyZWFrOwogICAg fQogIGNhc2UgSlNFTlVNRVJBVEVfREVTVFJPWToKICAgICpzdGF0ZXAgPSAoKGpzdmFsKSgwKSk7 CgogICAgYnJlYWs7CiAgfQoKICByZXR1cm4gMDsKfQoKCgoKbnNyZXN1bHQKbnNIVE1MU2VsZWN0 RWxlbWVudFNIOjpHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgUFJJbnQzMiBuID0gR2V0QXJyYXlJbmRleEZy b21JZChjeCwgaWQpOwoKICBpZiAobiA+PSAwKSB7CiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4g bmF0aXZlOwoKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsK ICAgIDsKCiAgICBuc0NPTVB0cjxuc0lET01IVE1MU2VsZWN0RWxlbWVudD4gcyhkb19RdWVyeUlu dGVyZmFjZShuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lET01IVE1MQ29sbGVjdGlvbj4gb3B0 aW9uczsKCiAgICBzLT5HZXRPcHRpb25zKGdldHRlcl9BZGRSZWZzKG9wdGlvbnMpKTsKCiAgICBp ZiAob3B0aW9ucykgewogICAgICBuc0NPTVB0cjxuc0lET01Ob2RlPiBub2RlOwoKICAgICAgb3B0 aW9ucy0+SXRlbShuLCBnZXR0ZXJfQWRkUmVmcyhub2RlKSk7CgogICAgICByZXR1cm4gV3JhcE5h dGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBub2RlLAogICAgICAgICAgICAgICAg ICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSURPTU5vZGU+OjpHZXRJSUQoKSwgdnApOwogICAgfQog IH0KCiAgcmV0dXJuIDA7Cn0KCgpuc3Jlc3VsdApuc0hUTUxTZWxlY3RFbGVtZW50U0g6OlNldE9w dGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCAqdnAsIFBSVWludDMyIGFJbmRleCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NTlNIVE1MT3B0aW9uQ29sbGVjdGlvbiAqYU9w dENvbGxlY3Rpb24pCnsKCiAgaWYgKCEoKCgqdnApICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4MCkgJiYgITo6SlNfQ29udmVydFZhbHVlKGN4LCAqdnAsIEpTVFlQRV9PQkpFQ1Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnApKSB7 CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogIH0KCiAgbnNDT01QdHI8bnNJ RE9NSFRNTE9wdGlvbkVsZW1lbnQ+IG5ld19vcHRpb247CgogIGlmICghKCgqdnApID09ICgoanN2 YWwpKDApKSkpIHsKICAgIG5zQ09NUHRyPG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU+IG5ld193 cmFwcGVyOwogICAgbnNyZXN1bHQgcnY7CgogICAgcnYgPSBzWFBDb25uZWN0LT5HZXRXcmFwcGVk TmF0aXZlT2ZKU09iamVjdChjeCwgKChKU09iamVjdCAqKSgodm9pZCAqKSgoKnZwKSAmIH4oanN2 YWwpKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpKSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG5ld193cmFwcGVyKSk7CiAg ICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0g d2hpbGUgKDApOwoKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICBuZXdfd3Jh cHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICAgIG5ld19vcHRpb24g PSBkb19RdWVyeUludGVyZmFjZShuYXRpdmUpOwoKICAgIGlmICghbmV3X29wdGlvbikgewoKCiAg ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICB9CiAgfQoKICByZXR1cm4g YU9wdENvbGxlY3Rpb24tPlNldE9wdGlvbihhSW5kZXgsIG5ld19vcHRpb24pOwp9Cgpuc3Jlc3Vs dApuc0hUTUxTZWxlY3RFbGVtZW50U0g6OlNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWRO YXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250 ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpCnsKICBpbnQzMiBuID0gR2V0 QXJyYXlJbmRleEZyb21JZChjeCwgaWQpOwoKICBpZiAobiA+PSAwKSB7CiAgICBuc0NPTVB0cjxu c0lTdXBwb3J0cz4gbmF0aXZlOwogICAgd3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZz KG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRyPG5zSURPTUhUTUxTZWxlY3RFbGVtZW50PiBzZWxlY3Qo ZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7CiAgICBkbyB7IGlmICghKHNlbGVjdCkpIHsgOyBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ09N UHRyPG5zSURPTUhUTUxDb2xsZWN0aW9uPiBvcHRpb25zOwogICAgc2VsZWN0LT5HZXRPcHRpb25z KGdldHRlcl9BZGRSZWZzKG9wdGlvbnMpKTsKCiAgICBuc0NPTVB0cjxuc0lET01OU0hUTUxPcHRp b25Db2xsZWN0aW9uPiBvYyhkb19RdWVyeUludGVyZmFjZShvcHRpb25zKSk7CiAgICBkbyB7IGlm ICghKG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAo MCk7CgogICAgcmV0dXJuIFNldE9wdGlvbihjeCwgdnAsIG4sIG9jKTsKICB9CgogIHJldHVybiBu c0VsZW1lbnRTSDo6U2V0UHJvcGVydHkod3JhcHBlciwgY3gsIG9iaiwgaWQsIHZwLCBfcmV0dmFs KTsKfQojIDU1MTAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIKbnNyZXN1bHQKbnNIVE1MRXh0ZXJuYWxP YmpTSDo6R2V0UGx1Z2luSW5zdGFuY2UobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUGx1Z2luSW5zdGFu Y2UgKipfcmVzdWx0KQp7CiAgKl9yZXN1bHQgPSAwOwoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4g bmF0aXZlOwoKICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7Cgog IG5zQ09NUHRyPG5zSUNvbnRlbnQ+IGNvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7 CiAgZG8geyBpZiAoIShjb250ZW50KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZm TCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2M7CgogIGNvbnRl bnQtPkdldERvY3VtZW50KCpnZXR0ZXJfQWRkUmVmcyhkb2MpKTsKCiAgaWYgKCFkb2MpIHsKCgog ICAgcmV0dXJuIDA7CiAgfQoKICBkb2MtPkZsdXNoUGVuZGluZ05vdGlmaWNhdGlvbnMoKTsKCgog IG5zQ09NUHRyPG5zSVByZXNTaGVsbD4gc2hlbGw7CiAgZG9jLT5HZXRTaGVsbEF0KDAsIGdldHRl cl9BZGRSZWZzKHNoZWxsKSk7CgogIGlmICghc2hlbGwpIHsKICAgIHJldHVybiAwOwogIH0KCiAg bnNJRnJhbWUqIGZyYW1lID0gMDsKICBzaGVsbC0+R2V0UHJpbWFyeUZyYW1lRm9yKGNvbnRlbnQs ICZmcmFtZSk7CgogIGlmICghZnJhbWUpIHsKCgogICAgcmV0dXJuIDA7CiAgfQoKICBuc0lPYmpl Y3RGcmFtZSogb2JqZWN0RnJhbWUgPSAwOwogIENhbGxRdWVyeUludGVyZmFjZShmcmFtZSwgJm9i amVjdEZyYW1lKTsKICBpZiAoIW9iamVjdEZyYW1lKSB7CiAgICByZXR1cm4gMDsKICB9CgogIHJl dHVybiBvYmplY3RGcmFtZS0+R2V0UGx1Z2luSW5zdGFuY2UoKl9yZXN1bHQpOwp9CgoKCnN0YXRp YyBQUkJvb2wKSXNPYmpJblByb3RvQ2hhaW4oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg SlNPYmplY3QgKnByb3RvKQp7CiAgSlNPYmplY3QgKm8gPSBvYmo7CgogIHdoaWxlIChvKSB7CiAg ICBKU09iamVjdCAqcCA9IDo6SlNfR2V0UHJvdG90eXBlKGN4LCBvKTsKCiAgICBpZiAocCA9PSBw cm90bykgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBvID0gcDsKICB9CgogIHJldHVybiAw Owp9CiMgNTU4OCAibnNET01DbGFzc0luZm8uY3BwIgpuc3Jlc3VsdApuc0hUTUxFeHRlcm5hbE9i alNIOjpQb3N0Q3JlYXRlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaikK ewogIG5zcmVzdWx0IHJ2ID0gbnNFbGVtZW50U0g6OlBvc3RDcmVhdGUod3JhcHBlciwgY3gsIG9i aik7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJUGx1Z2luSW5zdGFuY2U+IHBpOwoKICBydiA9 IEdldFBsdWdpbkluc3RhbmNlKHdyYXBwZXIsIGdldHRlcl9BZGRSZWZzKHBpKSk7CiAgZG8geyBp ZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgw KTsKCiAgaWYgKCFwaSkgewoKCiAgICByZXR1cm4gMDsKICB9CgogIEpTT2JqZWN0ICpwaV9vYmog PSAwOwogIEpTT2JqZWN0ICpwaV9wcm90byA9IDA7CgogIHJ2ID0gR2V0UGx1Z2luSlNPYmplY3Qo Y3gsIG9iaiwgcGksICZwaV9vYmosICZwaV9wcm90byk7CiAgZG8geyBpZiAoISgoISgocnYpICYg MHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgaWYgKCFwaV9v YmopIHsKCgogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoSXNPYmpJblByb3RvQ2hhaW4oY3gsIG9i aiwgcGlfb2JqKSkgewoKCgoKCiAgICByZXR1cm4gMDsKICB9CgoKCgoKICBKU09iamVjdCAqbXlf cHJvdG8gPSAwOwoKCiAgcnYgPSB3cmFwcGVyLT5HZXRKU09iamVjdFByb3RvdHlwZSgmbXlfcHJv dG8pOwogIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7 IH0gfSB3aGlsZSAoMCk7CgoKICBpZiAoITo6SlNfU2V0UHJvdG90eXBlKGN4LCBvYmosIHBpX29i aikpIHsKICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICBpZiAocGlf cHJvdG8gJiYgSlNfR2V0Q2xhc3MoY3gsIHBpX3Byb3RvKSAhPSBzT2JqZWN0Q2xhc3MpIHsKCgog ICAgaWYgKCE6OkpTX1NldFByb3RvdHlwZShjeCwgcGlfcHJvdG8sIG15X3Byb3RvKSkgewogICAg ICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQogIH0gZWxzZSB7CgoKCiAg ICBpZiAoITo6SlNfU2V0UHJvdG90eXBlKGN4LCBwaV9vYmosIG15X3Byb3RvKSkgewogICAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQogIH0KIyA1NzA2ICJuc0RPTUNs YXNzSW5mby5jcHAiCiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zSFRNTEFwcGxldEVsZW1l bnRTSDo6R2V0UGx1Z2luSlNPYmplY3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAq cGx1Z2luX2luc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKipwbHVnaW5fb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEpTT2JqZWN0ICoqcGx1Z2luX3Byb3RvKQp7CiAgKnBsdWdpbl9vYmogPSAwOwogICpwbHVn aW5fcHJvdG8gPSAwOwoKICBuc0NPTVB0cjxuc0lKVk1NYW5hZ2VyPiBqdm0oZG9fR2V0U2Vydmlj ZShuc0lKVk1NYW5hZ2VyOjpHZXRDSUQoKSkpOwoKICBpZiAoIWp2bSkgewogICAgcmV0dXJuIDA7 CiAgfQoKICBuc0NPTVB0cjxuc0lKVk1QbHVnaW5JbnN0YW5jZT4gamF2YVBsdWdpbkluc3RhbmNl OwoKICBqYXZhUGx1Z2luSW5zdGFuY2UgPSBkb19RdWVyeUludGVyZmFjZShwbHVnaW5faW5zdCk7 CgogIGlmICghamF2YVBsdWdpbkluc3RhbmNlKSB7CiAgICByZXR1cm4gMDsKICB9CgogIGpvYmpl Y3QgYXBwbGV0T2JqZWN0ID0gMDsKICBuc3Jlc3VsdCBydiA9IGphdmFQbHVnaW5JbnN0YW5jZS0+ R2V0SmF2YU9iamVjdCgmYXBwbGV0T2JqZWN0KTsKCiAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkg fHwgIWFwcGxldE9iamVjdCkgewogICAgcmV0dXJuIHJ2OwogIH0KCiAgbnNDT01QdHI8bnNJTGl2 ZUNvbm5lY3RNYW5hZ2VyPiBtYW5hZ2VyID0KICAgIGRvX0dldFNlcnZpY2UobnNJSlZNTWFuYWdl cjo6R2V0Q0lEKCkpOwoKICBpZiAoIW1hbmFnZXIpIHsKICAgIHJldHVybiAwOwogIH0KCiAgcmV0 dXJuIG1hbmFnZXItPldyYXBKYXZhT2JqZWN0KGN4LCBhcHBsZXRPYmplY3QsIHBsdWdpbl9vYmop Owp9CgoKCgpuc3Jlc3VsdApuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0g6OkdldFBsdWdpbkpTT2Jq ZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJUGx1Z2luSW5zdGFuY2UgKnBsdWdpbl9pbnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqcGx1Z2lu X29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVj dCAqKnBsdWdpbl9wcm90bykKewogICpwbHVnaW5fb2JqID0gMDsKICAqcGx1Z2luX3Byb3RvID0g MDsKCgoKCgoKCiAgbnNJSUQgc2NyaXB0YWJsZUlJRCA9IG5zQ09NVHlwZUluZm88bnNJU3VwcG9y dHM+OjpHZXRJSUQoKTsKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gc2NyaXB0YWJsZV9wZWVyOwoK ICBuc0NPTVB0cjxuc0lTY3JpcHRhYmxlUGx1Z2luPiBzcGkoZG9fUXVlcnlJbnRlcmZhY2UocGx1 Z2luX2luc3QpKTsKCiAgaWYgKHNwaSkgewogICAgbnNJSUQgKnNjcmlwdGFibGVJbnRlcmZhY2VQ dHIgPSAwOwogICAgc3BpLT5HZXRTY3JpcHRhYmxlSW50ZXJmYWNlKCZzY3JpcHRhYmxlSW50ZXJm YWNlUHRyKTsKCiAgICBpZiAoc2NyaXB0YWJsZUludGVyZmFjZVB0cikgewogICAgICBzcGktPkdl dFNjcmlwdGFibGVQZWVyKGdldHRlcl9BZGRSZWZzKHNjcmlwdGFibGVfcGVlcikpOwoKICAgICAg c2NyaXB0YWJsZUlJRCA9ICpzY3JpcHRhYmxlSW50ZXJmYWNlUHRyOwoKICAgICAgbnNNZW1vcnk6 OkZyZWUoc2NyaXB0YWJsZUludGVyZmFjZVB0cik7CiAgICB9CiAgfQoKICBuc0NPTVB0cjxuc0lD bGFzc0luZm8+IGNpKGRvX1F1ZXJ5SW50ZXJmYWNlKHBsdWdpbl9pbnN0KSk7CgogIGlmICghc2Ny aXB0YWJsZV9wZWVyKSB7CiAgICBpZiAoIWNpKSB7CgoKCgoKICAgICAgcmV0dXJuIG5zSFRNTEFw cGxldEVsZW1lbnRTSDo6R2V0UGx1Z2luSlNPYmplY3QoY3gsIG9iaiwgcGx1Z2luX2luc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdp bl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBsdWdpbl9wcm90byk7CiAgICB9CgoKCiAgICBzY3JpcHRhYmxlX3BlZXIgPSBwbHVnaW5f aW5zdDsKICB9CgoKCgoKCiAgaWYgKGNpKSB7CgoKCiAgICBQUlVpbnQzMiBmbGFnczsKICAgIGNp LT5HZXRGbGFncygmZmxhZ3MpOwoKICAgIGlmICghKGZsYWdzICYgbnNJQ2xhc3NJbmZvOjpQTFVH SU5fT0JKRUNUKSkgewoKCgoKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKCgogIG5zQ09NUHRy PG5zSVBsdWdpbkhvc3Q+IHBsdWdpbk1hbmFnZXIgPQogICAgZG9fR2V0U2VydmljZShrQ1BsdWdp bk1hbmFnZXJDSUQpOwoKICBuc0NPTVB0cjxuc1BJUGx1Z2luSG9zdD4gcGx1Z2luSG9zdChkb19R dWVyeUludGVyZmFjZShwbHVnaW5NYW5hZ2VyKSk7CgogIGlmKHBsdWdpbkhvc3QpIHsKICAgIHBs dWdpbkhvc3QtPlNldElzU2NyaXB0YWJsZUluc3RhbmNlKHBsdWdpbl9pbnN0LCAxKTsKICB9CgoK CiAgbnNDT01QdHI8bnNJWFBDb25uZWN0SlNPYmplY3RIb2xkZXI+IGhvbGRlcjsKICBuc3Jlc3Vs dCBydiA9IHNYUENvbm5lY3QtPldyYXBOYXRpdmUoY3gsIDo6SlNfR2V0UGFyZW50KGN4LCBvYmop LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRhYmxlX3BlZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdGFibGVJSUQsIGdl dHRlcl9BZGRSZWZzKGhvbGRlcikpOwogIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDAp KSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgoKCiAgbnNDT01QdHI8bnNJWFBDb25u ZWN0V3JhcHBlZE5hdGl2ZT4gcGlfd3JhcHBlcihkb19RdWVyeUludGVyZmFjZShob2xkZXIpKTsK ICBkbyB7IGlmICghKHBpX3dyYXBwZXIpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZm ZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgcnYgPSBwaV93cmFwcGVyLT5HZXRKU09iamVjdChwbHVn aW5fb2JqKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJu IHJ2OyB9IH0gd2hpbGUgKDApOwoKICByZXR1cm4gcGlfd3JhcHBlci0+R2V0SlNPYmplY3RQcm90 b3R5cGUocGx1Z2luX3Byb3RvKTsKfQoKbnNyZXN1bHQKbnNIVE1MUGx1Z2luT2JqRWxlbWVudFNI OjpOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy IGZsYWdzLCBKU09iamVjdCAqKm9ianAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoKCgoaWQpICYgKCgoSlNVaW50MzIpMSA8PCAo MykpIC0gMSkpID09IDB4NCkpIHsKCgoKICAgIEpTU3RyaW5nICpzdHIgPSAoKEpTU3RyaW5nICop KCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSkpOwog ICAgY2hhciogY3N0cmluZyA9IDo6SlNfR2V0U3RyaW5nQnl0ZXMoc3RyKTsKCiAgICBuc0NPTVB0 cjxuc0lJbnRlcmZhY2VJbmZvTWFuYWdlcj4gaWltID0KICAgICAgZG9udF9BZGRSZWYoWFBUSV9H ZXRJbnRlcmZhY2VJbmZvTWFuYWdlcigpKTsKICAgIGRvIHsgaWYgKCEoaWltKSkgeyA7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNJSUQqIGlp ZCA9IDA7CgogICAgbnNyZXN1bHQgcnYgPSBpaW0tPkdldElJREZvck5hbWUoY3N0cmluZywgJmlp ZCk7CgogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgaWlkKSB7CiAgICAgIG5zQ09N UHRyPG5zSVBsdWdpbkluc3RhbmNlPiBwaTsKCiAgICAgIEdldFBsdWdpbkluc3RhbmNlKHdyYXBw ZXIsIGdldHRlcl9BZGRSZWZzKHBpKSk7CgogICAgICBpZiAocGkpIHsKCgoKICAgICAgICBuc0NP TVB0cjxuc0lQbHVnaW5Ib3N0PiBwbHVnaW5NYW5hZ2VyID0KICAgICAgICAgIGRvX0dldFNlcnZp Y2Uoa0NQbHVnaW5NYW5hZ2VyQ0lEKTsKCiAgICAgICAgbnNDT01QdHI8bnNQSVBsdWdpbkhvc3Q+ IHBsdWdpbkhvc3QoZG9fUXVlcnlJbnRlcmZhY2UocGx1Z2luTWFuYWdlcikpOwoKICAgICAgICBp ZihwbHVnaW5Ib3N0KSB7CiAgICAgICAgICBwbHVnaW5Ib3N0LT5TZXRJc1NjcmlwdGFibGVJbnN0 YW5jZShwaSwgMSk7CiAgICAgICAgfQoKICAgICAgICBuc0NPTVB0cjxuc0lYUENvbm5lY3RKU09i amVjdEhvbGRlcj4gaG9sZGVyOwogICAgICAgIHJ2ID0gc1hQQ29ubmVjdC0+V3JhcE5hdGl2ZShj eCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBwaSwgKmlpZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoaG9sZGVyKSk7CgogICAgICAgIGlmICgo ISgocnYpICYgMHg4MDAwMDAwMCkpKSB7CiAgICAgICAgICBKU09iamVjdCogaWZhY2VPYmo7Cgog ICAgICAgICAgcnYgPSBob2xkZXItPkdldEpTT2JqZWN0KCZpZmFjZU9iaik7CgogICAgICAgICAg aWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpIHsKICAgICAgICAgICAgbnNNZW1vcnk6OkZyZWUo aWlkKTsKCiAgICAgICAgICAgICpfcmV0dmFsID0gOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBv YmosIDo6SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChqc3ZhbCkoaWZhY2VPYmopKSwgMCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMHgwMSk7Cgog ICAgICAgICAgICAqb2JqcCA9IG9iajsKCiAgICAgICAgICAgIHJldHVybiAqX3JldHZhbCA/IDAg OiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9 CgogICAgICBuc01lbW9yeTo6RnJlZShpaWQpOwogICAgfQogIH0KCiAgcmV0dXJuIG5zSFRNTEVs ZW1lbnRTSDo6TmV3UmVzb2x2ZSh3cmFwcGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmV0dmFsKTsKfQoKCgoKbnNyZXN1 bHQKbnNIVE1MT3B0aW9uQ29sbGVjdGlvblNIOjpTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaW50 MzIgbiA9IEdldEFycmF5SW5kZXhGcm9tSWQoY3gsIGlkKTsKCiAgaWYgKG4gPCAwKSB7CiAgICBy ZXR1cm4gMDsKICB9CgogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgd3JhcHBlci0+ R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICBuc0NPTVB0cjxuc0lET01OU0hU TUxPcHRpb25Db2xsZWN0aW9uPiBvYyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICBkbyB7 IGlmICghKG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGls ZSAoMCk7CgogIHJldHVybiBuc0hUTUxTZWxlY3RFbGVtZW50U0g6OlNldE9wdGlvbihjeCwgdnAs IG4sIG9jKTsKfQoKCgoKbnNyZXN1bHQKbnNQbHVnaW5TSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRz ICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBw b3J0cyAqKmFSZXN1bHQpCnsKICBuc0NPTVB0cjxuc0lET01QbHVnaW4+IHBsdWdpbihkb19RdWVy eUludGVyZmFjZShhTmF0aXZlKSk7CiAgZG8geyBpZiAoIShwbHVnaW4pKSB7IDsgcmV0dXJuICgo bnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NTWltZVR5cGUg Km1pbWVfdHlwZSA9IDA7CiAgbnNyZXN1bHQgcnYgPSBwbHVnaW4tPkl0ZW0oYUluZGV4LCAmbWlt ZV90eXBlKTsKCiAgKmFSZXN1bHQgPSBtaW1lX3R5cGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1 bHQKbnNQbHVnaW5TSDo6R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBu c0FTdHJpbmcmIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiph UmVzdWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NUGx1Z2luPiBwbHVnaW4oZG9fUXVlcnlJbnRlcmZh Y2UoYU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEocGx1Z2luKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU1pbWVUeXBlICptaW1lX3R5 cGUgPSAwOwoKICBuc3Jlc3VsdCBydiA9IHBsdWdpbi0+TmFtZWRJdGVtKGFOYW1lLCAmbWltZV90 eXBlKTsKCiAgKmFSZXN1bHQgPSBtaW1lX3R5cGU7CgogIHJldHVybiBydjsKfQoKCgoKbnNyZXN1 bHQKbnNQbHVnaW5BcnJheVNIOjpHZXRJdGVtQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBSVWlu dDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVz dWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NUGx1Z2luQXJyYXk+IGFycmF5KGRvX1F1ZXJ5SW50ZXJm YWNlKGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGFycmF5KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTVBsdWdpbiAqcGx1Z2luID0g MDsKICBuc3Jlc3VsdCBydiA9IGFycmF5LT5JdGVtKGFJbmRleCwgJnBsdWdpbik7CgogICphUmVz dWx0ID0gcGx1Z2luOwoKICByZXR1cm4gcnY7Cn0KCm5zcmVzdWx0Cm5zUGx1Z2luQXJyYXlTSDo6 R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpCnsK ICBuc0NPTVB0cjxuc0lET01QbHVnaW5BcnJheT4gYXJyYXkoZG9fUXVlcnlJbnRlcmZhY2UoYU5h dGl2ZSkpOwogIGRvIHsgaWYgKCEoYXJyYXkpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw MGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NUGx1Z2luICpwbHVnaW4gPSAwOwoKICBu c3Jlc3VsdCBydiA9IGFycmF5LT5OYW1lZEl0ZW0oYU5hbWUsICZwbHVnaW4pOwoKICAqYVJlc3Vs dCA9IHBsdWdpbjsKCiAgcmV0dXJuIHJ2Owp9CgoKCgpuc3Jlc3VsdApuc01pbWVUeXBlQXJyYXlT SDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KQp7CiAgbnNDT01Q dHI8bnNJRE9NTWltZVR5cGVBcnJheT4gYXJyYXkoZG9fUXVlcnlJbnRlcmZhY2UoYU5hdGl2ZSkp OwogIGRvIHsgaWYgKCEoYXJyYXkpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZM KTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NTWltZVR5cGUgKm1pbWVfdHlwZSA9IDA7CiAgbnNy ZXN1bHQgcnYgPSBhcnJheS0+SXRlbShhSW5kZXgsICZtaW1lX3R5cGUpOwoKICAqYVJlc3VsdCA9 IG1pbWVfdHlwZTsKCiAgcmV0dXJuIHJ2Owp9Cgpuc3Jlc3VsdApuc01pbWVUeXBlQXJyYXlTSDo6 R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkK ewogIG5zQ09NUHRyPG5zSURPTU1pbWVUeXBlQXJyYXk+IGFycmF5KGRvX1F1ZXJ5SW50ZXJmYWNl KGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGFycmF5KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU1pbWVUeXBlICptaW1lX3R5cGUg PSAwOwoKICBuc3Jlc3VsdCBydiA9IGFycmF5LT5OYW1lZEl0ZW0oYU5hbWUsICZtaW1lX3R5cGUp OwoKICAqYVJlc3VsdCA9IG1pbWVfdHlwZTsKCiAgcmV0dXJuIHJ2Owp9CgoKCgpuc3Jlc3VsdApu c1N0cmluZ0FycmF5U0g6OkdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndy YXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl Y3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgKl9yZXR2YWwpCnsKICBQUkJvb2wgaXNfbnVtYmVyID0gMDsKICBQUkludDMyIG4g PSBHZXRBcnJheUluZGV4RnJvbUlkKGN4LCBpZCwgJmlzX251bWJlcik7CgogIGlmICghaXNfbnVt YmVyKSB7CiAgICByZXR1cm4gMDsKICB9CgogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7 CiAgd3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICBuc0F1dG9T dHJpbmcgdmFsOwoKICBuc3Jlc3VsdCBydiA9IEdldFN0cmluZ0F0KG5hdGl2ZSwgbiwgdmFsKTsK ICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0g d2hpbGUgKDApOwoKCgogIEpTU3RyaW5nICpzdHIgPQogICAgOjpKU19OZXdVQ1N0cmluZ0NvcHlO KGN4LCByZWludGVycHJldF9jYXN0PCBjb25zdCBqc2NoYXIgKiA+KHZhbC5nZXQoKSksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFsLkxlbmd0aCgpKTsKICBkbyB7IGlmICghKHN0cikpIHsg OyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyB9IH0gd2hpbGUgKDApOwoKICAqdnAg PSAoKChqc3ZhbCkoc3RyKSkgfCAoMHg0KSk7CgogIHJldHVybiAwOwp9CgoKCgpuc3Jlc3VsdApu c0hpc3RvcnlTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl ciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmos IGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewogIFBSQm9vbCBpc19udW1i ZXIgPSAwOwogIEdldEFycmF5SW5kZXhGcm9tSWQoY3gsIGlkLCAmaXNfbnVtYmVyKTsKCiAgaWYg KCFpc19udW1iZXIpIHsKICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgcnYgPQogICAgc1Nl Y01hbi0+Q2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBtRGF0YS0+bU5hbWUsIHNJdGVtX2lk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUENTZWN1cml0eU1hbmFnZXI6 OkFDQ0VTU19DQUxMX01FVEhPRCk7CgogIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7CgogICAg Kl9yZXR2YWwgPSAwOwoKICAgIHJldHVybiAwOwogIH0KCgoKICByZXR1cm4gbnNTdHJpbmdBcnJh eVNIOjpHZXRQcm9wZXJ0eSh3cmFwcGVyLCBjeCwgb2JqLCBpZCwgdnAsIF9yZXR2YWwpOwp9Cgpu c3Jlc3VsdApuc0hpc3RvcnlTSDo6R2V0U3RyaW5nQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBS SW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhUmVzdWx0 KQp7CiAgaWYgKGFJbmRleCA8IDApIHsKICAgIHJldHVybiAoKG5zcmVzdWx0KSAoKChQUlVpbnQz MikoMSk8PDMxKSB8ICgoUFJVaW50MzIpKDE0ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQzMikoMSkp KSApOwogIH0KCiAgbnNDT01QdHI8bnNJRE9NSGlzdG9yeT4gaGlzdG9yeShkb19RdWVyeUludGVy ZmFjZShhTmF0aXZlKSk7CgogIHJldHVybiBoaXN0b3J5LT5JdGVtKGFJbmRleCwgYVJlc3VsdCk7 Cn0KCgoKCm5zcmVzdWx0Cm5zTWVkaWFMaXN0U0g6OkdldFN0cmluZ0F0KG5zSVN1cHBvcnRzICph TmF0aXZlLCBQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3Ry aW5nJiBhUmVzdWx0KQp7CiAgaWYgKGFJbmRleCA8IDApIHsKICAgIHJldHVybiAoKG5zcmVzdWx0 KSAoKChQUlVpbnQzMikoMSk8PDMxKSB8ICgoUFJVaW50MzIpKDE0ICsweDQ1KTw8MTYpIHwgKChQ UlVpbnQzMikoMSkpKSApOwogIH0KCiAgbnNDT01QdHI8bnNJRE9NTWVkaWFMaXN0PiBtZWRpYV9s aXN0KGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKCiAgcmV0dXJuIG1lZGlhX2xpc3QtPkl0 ZW0oUFJVaW50MzIoYUluZGV4KSwgYVJlc3VsdCk7Cn0KCgoKCm5zcmVzdWx0Cm5zU3R5bGVTaGVl dExpc3RTSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewog IG5zQ09NUHRyPG5zSURPTVN0eWxlU2hlZXRMaXN0PiBzdHlsZXNoZWV0cyhkb19RdWVyeUludGVy ZmFjZShhTmF0aXZlKSk7CiAgZG8geyBpZiAoIShzdHlsZXNoZWV0cykpIHsgOyByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICBuc0lET01TdHlsZVNoZWV0 ICpzaGVldCA9IDA7CiAgbnNyZXN1bHQgcnYgPSBzdHlsZXNoZWV0cy0+SXRlbShhSW5kZXgsICZz aGVldCk7CgogICphUmVzdWx0ID0gc2hlZXQ7CgogIHJldHVybiBydjsKfQoKCgoKbnNyZXN1bHQK bnNDU1NWYWx1ZUxpc3RTSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQz MiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1 bHQpCnsKICBuc0NPTVB0cjxuc0lET01DU1NWYWx1ZUxpc3Q+IGNzc1ZhbHVlTGlzdChkb19RdWVy eUludGVyZmFjZShhTmF0aXZlKSk7CiAgZG8geyBpZiAoIShjc3NWYWx1ZUxpc3QpKSB7IDsgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NQ1NT VmFsdWUgKmNzc1ZhbHVlID0gMDsKICBuc3Jlc3VsdCBydiA9IGNzc1ZhbHVlTGlzdC0+SXRlbShh SW5kZXgsICZjc3NWYWx1ZSk7CgogICphUmVzdWx0ID0gY3NzVmFsdWU7CgogIHJldHVybiBydjsK fQoKCgoKbnNyZXN1bHQKbnNDU1NTdHlsZURlY2xTSDo6R2V0U3RyaW5nQXQobnNJU3VwcG9ydHMg KmFOYXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0FTdHJpbmcmIGFSZXN1bHQpCnsKICBpZiAoYUluZGV4IDwgMCkgewogICAgcmV0dXJuICgobnNy ZXN1bHQpICgoKFBSVWludDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikg fCAoKFBSVWludDMyKSgxKSkpICk7CiAgfQoKICBuc0NPTVB0cjxuc0lET01DU1NTdHlsZURlY2xh cmF0aW9uPiBzdHlsZV9kZWNsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKCiAgcmV0dXJu IHN0eWxlX2RlY2wtPkl0ZW0oUFJVaW50MzIoYUluZGV4KSwgYVJlc3VsdCk7Cn0KCgoKCm5zcmVz dWx0Cm5zQ1NTUnVsZUxpc3RTSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVp bnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJl c3VsdCkKewogIG5zQ09NUHRyPG5zSURPTUNTU1J1bGVMaXN0PiBsaXN0KGRvX1F1ZXJ5SW50ZXJm YWNlKGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGxpc3QpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NQ1NTUnVsZSAqcnVsZSA9IDA7 CiAgbnNyZXN1bHQgcnYgPSBsaXN0LT5JdGVtKGFJbmRleCwgJnJ1bGUpOwoKICAqYVJlc3VsdCA9 IHJ1bGU7CgogIHJldHVybiBydjsKfQoKCgoKbnNyZXN1bHQgbnNFdmVudExpc3RlbmVyVGhpc1Ry YW5zbGF0b3I6OlF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEJiBhSUlELCB2b2lkKiogYUluc3Rh bmNlUHRyKSB7IDsgaWYgKCAhYUluc3RhbmNlUHRyICkgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw MDQwMDNMKTsgbnNJU3VwcG9ydHMqIGZvdW5kSW50ZXJmYWNlOwogIGlmICggYUlJRC5FcXVhbHMo bnNDT01UeXBlSW5mbzxuc0lYUENGdW5jdGlvblRoaXNUcmFuc2xhdG9yPjo6R2V0SUlEKCkpICkg Zm91bmRJbnRlcmZhY2UgPSBzdGF0aWNfY2FzdDwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRv ciogPih0aGlzKTsgZWxzZQogIGlmICggYUlJRC5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBw b3J0cz46OkdldElJRCgpKSApIGZvdW5kSW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSVN1cHBv cnRzKiA+KHRoaXMpOyBlbHNlCmZvdW5kSW50ZXJmYWNlID0gMDsgbnNyZXN1bHQgc3RhdHVzOyBp ZiAoICFmb3VuZEludGVyZmFjZSApIHN0YXR1cyA9ICgobnNyZXN1bHQpIDB4ODAwMDQwMDJMKTsg ZWxzZSB7IChmb3VuZEludGVyZmFjZSktPkFkZFJlZigpOyBzdGF0dXMgPSAwOyB9ICphSW5zdGFu Y2VQdHIgPSBmb3VuZEludGVyZmFjZTsgcmV0dXJuIHN0YXR1czsgfQoKCm5zcmVmY250IG5zRXZl bnRMaXN0ZW5lclRoaXNUcmFuc2xhdG9yOjpBZGRSZWYodm9pZCkgeyA7ICgodm9pZCkwKTsgKytt UmVmQ250OyA7IHJldHVybiBtUmVmQ250OyB9Cm5zcmVmY250IG5zRXZlbnRMaXN0ZW5lclRoaXNU cmFuc2xhdG9yOjpSZWxlYXNlKHZvaWQpIHsgOyAoKHZvaWQpMCk7IC0tbVJlZkNudDsgOyBpZiAo bVJlZkNudCA9PSAwKSB7IG1SZWZDbnQgPSAxOyBkbyB7IDsgZGVsZXRlICh0aGlzKTsgfSB3aGls ZSAoMCk7IHJldHVybiAwOyB9IHJldHVybiBtUmVmQ250OyB9CgoKbnNyZXN1bHQKbnNFdmVudExp c3RlbmVyVGhpc1RyYW5zbGF0b3I6OlRyYW5zbGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFs VGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJSW50 ZXJmYWNlSW5mbyAqYUludGVyZmFjZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSVWludDE2IGFNZXRob2RJbmRleCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICphSGlkZUZpcnN0UGFyYW1Gcm9tSlMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlEICogKmFJ SURPZlJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJU3VwcG9ydHMgKipfcmV0dmFsKQp7CiAgKmFIaWRlRmlyc3RQYXJhbUZyb21KUyA9IDA7CiAg KmFJSURPZlJlc3VsdCA9IDA7CgogIG5zQ09NUHRyPG5zSURPTUV2ZW50PiBldmVudChkb19RdWVy eUludGVyZmFjZShhSW5pdGlhbFRoaXMpKTsKICBkbyB7IGlmICghKGV2ZW50KSkgeyA7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5z SURPTUV2ZW50VGFyZ2V0PiB0YXJnZXQ7CgogIGV2ZW50LT5HZXRDdXJyZW50VGFyZ2V0KGdldHRl cl9BZGRSZWZzKHRhcmdldCkpOwoKICAqX3JldHZhbCA9IHRhcmdldDsKICBuc19pZl9hZGRyZWYo Kl9yZXR2YWwpOwoKICByZXR1cm4gMDsKfQo=