diff --git a/src/lib.c b/src/lib.c index 9511294d..76e3ff97 100644 --- a/src/lib.c +++ b/src/lib.c @@ -24780,7 +24780,7 @@ void format_visit(struct format_visit_ctx* ctx); //#pragma once -#define CAKE_VERSION "0.8.2" +#define CAKE_VERSION "0.8.3" diff --git a/src/version.h b/src/version.h index 0a025007..d8cecad0 100644 --- a/src/version.h +++ b/src/version.h @@ -1,4 +1,4 @@ #pragma once -#define CAKE_VERSION "0.8.2" +#define CAKE_VERSION "0.8.3" diff --git a/src/web/cake.js b/src/web/cake.js index 15f8dee8..bb3565d6 100644 --- a/src/web/cake.js +++ b/src/web/cake.js @@ -399,7 +399,7 @@ function Table(ret) { } } function initActiveSegments(imports) { - base64DecodeToExistingUint8Array(bufferView, 65536, "fgA7ICVzIHJldHVybiBfdG1wO30AfSBlbHNlIHtfY2F0Y2hfbGFiZWxfJWQ6O30Aey4uLn0Abm90IGZvbGxvd2luZyBjb3JyZWN0IGNsb3NlIGJyYWNlIHN0eWxlIH0AICUqcyB8ACAlcyB8AG5vdCBmb2xsb3dpbmcgY29ycmVjdCBicmFjZSBzdHlsZSB7AHRva2VuX2xpc3RfaXNfZW1wdHkAcG9pbnRlZCBvYmplY3QgbWF5IGJlIG5vdCBlbXB0eQBvYmplY3QgJyVzJyBtYXkgYmUgbm90IGVtcHR5AGluZmluaXR5AHNhZmV0eQB0cnkAX0ltYWdpbmFyeQBmbG93X3Zpc2l0X2N0eF9kZXN0cm95AG93bmVyX2hhc2htYXBfZGVzdHJveQBhbnkAX2lzX2FycmF5AG51bGwtYXMtYXJyYXkAIHBhc3NpbmcgbnVsbCBhcyBhcnJheQB1c2luZyBpbmRpcmVjdGlvbiAnLT4nIGluIGFycmF5AGluZGV4ICVkIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkALXRhcmdldD1jeHgALXN0ZD1jeHgAX0NvbXBsZXgAc3RhdGljX2RlYnVnX2V4AC10YXJnZXQ9YzJ4AC1zdGQ9YzJ4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAXHgleAAweCV4AHRocm93AGZsb3cAdmlldwBfVmlldwAtc3R5bGU9Z251ACVsbHUALW5vLW91dHB1dAAtbXN2Yy1vdXRwdXQAX091dABfaXNfY29uc3QAIGNvbnN0AG1hY3JvX2NvcHlfcmVwbGFjZW1lbnRfbGlzdAB2aXNpdF9icmFja2V0X2luaXRpYWxpemVyX2xpc3QAaWRlbnRpZmllcl9saXN0AHRva2VuX2xpc3RfYXBwZW5kX2xpc3QAc2hvcnQAc3RhdGljX2Fzc2VydABfU3RhdGljX2Fzc2VydAAtZGlzYWJsZS1hc3NlcnQAZXNjYXBlX3NlcXVlbmNlc19kZWNvZGVfb3B0AF9PcHQAdHlwZV9saXN0X3B1c2hfZnJvbnQAX2lzX2Zsb2F0aW5nX3BvaW50AGFycmF5LXBhcmFtZXRlci1hc3NpZ25tZW50AGx2YWx1ZSByZXF1aXJlZCBhcyBsZWZ0IG9wZXJhbmQgb2YgYXNzaWdubWVudABtdWx0aS1saW5lIC8vY29tbWVudABtaXNzaW5nIGVuZCBvZiBjb21tZW50AHRyeV9zdGF0ZW1lbnQAZmxvd192aXNpdF9mb3Jfc3RhdGVtZW50AGZsb3dfdmlzaXRfanVtcF9zdGF0ZW1lbnQAZm9ybWF0X3Zpc2l0X2p1bXBfc3RhdGVtZW50AGZsb3dfdmlzaXRfc2VsZWN0aW9uX3N0YXRlbWVudABmbG93X3Zpc2l0X2l0ZXJhdGlvbl9zdGF0ZW1lbnQAZmxvd192aXNpdF9pZl9zdGF0ZW1lbnQAZmxvd192aXNpdF93aGlsZV9zdGF0ZW1lbnQAZmxvd192aXNpdF9kb193aGlsZV9zdGF0ZW1lbnQAZmxvd192aXNpdF91bmxhYmVsZWRfc3RhdGVtZW50AGZvcm1hdF92aXNpdF91bmxhYmVsZWRfc3RhdGVtZW50AGNvbmRpdGlvbmFsLWNvbnN0YW50AF9CaXRJbnQAZGVmYXVsdABleHBlY3RlZCBpbnRlZ2VyIHR5cGUgb24gcmlnaHQALXN0eWxlPW1pY3Jvc29mdABleHBlY3RlZCBpbnRlZ2VyIHR5cGUgb24gbGVmdABzdGF0aWNfc2V0AGdldF9hbGlnbm9mX3N0cnVjdABnZXRfc2l6ZW9mX3N0cnVjdAByZXN0cmljdABzZXRfb2JqZWN0AGV4cGFuZF9wb2ludGVyX29iamVjdAB1c2luZy1tb3ZlZC1vYmplY3QAYXNzaWdubWVudCBvZiByZWFkLW9ubHkgb2JqZWN0AG51bGwgb2JqZWN0AG1heWJlIHVzaW5nIGEgdW5pbml0aWFsaXplZCBvYmplY3QAZGVyZWZlcmVuY2UgYSBOVUxMIG9iamVjdABwYXNzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgYXJndW1lbnQgJyVzJyBvYmplY3QAcmV0dXJuaW5nIGFuIHVuaW5pdGlhbGl6ZWQgJyVzJyBvYmplY3QAcmVhZGluZyBhbiB1bmluaXRpYWxpemVkICclcycgb2JqZWN0AGZsb2F0AG51bGxwdHJfdABjb2xsZWN0X21hY3JvX2FyZ3VtZW50cwByZXBsYWNlX21hY3JvX2FyZ3VtZW50cwB0b28gbWFueSBhcmd1bWVudHMAdHlwZW9mIHVzZWQgaW4gYXJyYXkgYXJndW1lbnRzAHRvbyBmZXcgYXJndW1lbnRzAHVzZSBzbmFrZV9jYXNlIGZvciBhcmd1bWVudHMALXJlbW92ZS1jb21tZW50cwBhZGRyZXNzAHVzZSBVUFBFUkNBU0UgZm9yIGVudW1lcmF0b3JzAG9ial9vd25lciBxdWFsaWZpZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBvaW50ZXJzAHByb2Nlc3NfaWRlbnRpZmllcnMAZGlzY2FyZGVkLXF1YWxpZmllcnMAcHJpbnRfdHlwZV9xdWFsaWZpZXJfc3BlY2lmaWVycwBkZWNsYXJhdGlvbl9zcGVjaWZpZXJzAHVzZSBzbmFrZV9jYXNlIGZvciBzdHJ1Y3QgbWVtYmVycwB1c2UgU0NSRUFNSU5HX0NBU0UgZm9yIG1hY3JvcwB0b2tlbiAnJXMnIGlzIG5vdCB2YWxpZCBpbiBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbnMALWR1bXAtcHAtdG9rZW5zAC1kdW1wLXRva2VucwAtbnVsbGNoZWNrcwBpbnZhbGlkIGFyZ3MAdXNlIHNuYWtlX2Nhc2UgZm9yIHN0cnVjdC91bmlvbiB0YWdzAHVzZSBjYW1lbENhc2UgZm9yIHN0cnVjdC91bmlvbiB0YWdzAHVzZSBzbmFrZV9jYXNlIGZvciBlbnVtIHRhZ3MAdXNlIFBhc2NhbENhc2UgZm9yIGVudW0gdGFncwBfTm9yZXR1cm4gaXMgZGVwcmVjYXRlZCB1c2UgYXR0cmlidXRlcwBpbmNvbXBhdGlibGUgcG9pbnRlciB0eXBlcwBpbmNvbXBhdGlibGUgdHlwZXMAdXNlIHNuYWtlX2Nhc2UgZm9yIGxvY2FsIHZhcmlhYmxlcwB1c2UgY2FtZWxDYXNlIGZvciBsb2NhbCB2YXJpYWJsZXMAdXNlIHNuYWtlX2Nhc2UgZ2xvYmFsIHZhcmlhYmxlcwB1c2UgcHJlZml4IHNfIGZvciBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcwAtc2hvd0luY2x1ZGVzAG91dC1vZi1ib3VuZHMAYWxpZ25hcwBfQWxpZ25hcwAlcyVzAC1XJXMAJXMtPiVzACVzLyVzACVzLiVzAColcwBzdHJ1Y3QgJXMAJXMgJXMAaW52YWxpZCBwYXJhbWV0ZXIgJXMAZW51bSAlcwBleGVwYXRoICVzAGV4cGVjdGVkICVzAHN0YXRpYyAlcwBfaGFzX2F0dHIAX2RlbF9hdHRyAF9hZGRfYXR0cgBudWxscHRyAGNvbnN0ZXhwcgBtaXNzaW5nLWRlc3RydWN0b3IAZmxvd192aXNpdF9pbml0X2RlY2xhcmF0b3IAcF9kZWNsYXJhdGlvbi0+aW5pdF9kZWNsYXJhdG9yX2xpc3QuaGVhZC0+cF9kZWNsYXJhdG9yLT5kaXJlY3RfZGVjbGFyYXRvci0+ZnVuY3Rpb25fZGVjbGFyYXRvcgBtYWtlX3R5cGVfdXNpbmdfZGVjbGFyYXRvcgBoaWRlLWRlY2xhcmF0b3IAc3RhdGljIG9yIHR5cGUgcXVhbGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gbm9uLXBhcmFtZXRlciBhcnJheSBkZWNsYXJhdG9yACclcyc6IHVucmVmZXJlbmNlZCBkZWNsYXJhdG9yACNlcnJvcgBleHByZXNzaW9uIGVycm9yAGludGVybmFsIGVycm9yAGZvcgBkaXIALWZhbmFseXplcgBlbWJlZF90b2tlbml6ZXIAcmVnaXN0ZXIAX2lzX3BvaW50ZXIAdHlwZV9wYXJhbV9hcnJheV90b19wb2ludGVyAHR5cGVfcmVtb3ZlX3BvaW50ZXIAc3Vic2NyaXB0ZWQgdmFsdWUgaXMgbmVpdGhlciBhcnJheSBub3IgcG9pbnRlcgBkaXNjYXJkaW5nIG93bmVyIHBvaW50ZXIAY2FsbGVkIG9iamVjdCBpcyBub3QgYXR0ciBmdW5jdGlvbiBvciBmdW5jdGlvbiBwb2ludGVyAGNhbm5vdCBjb252ZXJ0IGEgbnVsbCBwb2ludGVyIGNvbnN0YW50IHRvIG5vbi1udWxsYWJsZSBwb2ludGVyAGFzc2lnbm1lbnQgb2YgcG9zc2libGUgbnVsbCBvYmplY3QgJyVzJyB0byBub24tbnVsbGFibGUgcG9pbnRlcgB0b2tlbl9saXN0X2luc2VydF9hZnRlcgB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGFmdGVyAHR5cGVvZi1wYXJhbWV0ZXIAdW51c2VkLXBhcmFtZXRlcgBhc3NpZ25tZW50IHRvIGFycmF5IHBhcmFtZXRlcgAnJXMnOiB1bnJlZmVyZW5jZWQgZm9ybWFsIHBhcmFtZXRlcgBtaXNzaW5nIHRlcm1pbmF0aW5nICcgY2hhcmFjdGVyAG1pc3NpbmcgdGVybWluYXRpbmcgIiBjaGFyYWN0ZXIAX2lzX293bmVyAG9ial9vd25lcgBfT2JqX293bmVyAG5vdC1vd25lcgB0ZW1wLW93bmVyAGNhbm5vdCByZXR1cm4gYSBhdXRvbWF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvd25lciB0byBub24tb3duZXIAZGlzY2FyZC1vd25lcgBjYW5ub3QgYXNzaWduIGEgbm9uLW93bmVyIHRvIG93bmVyAGRpc2NhcmRpbmcgb3duZXIAX093bmVyAHByZXByb2Nlc3Nvcl90b2tlbl9haGVhZF9pc19pZGVudGlmaWVyAGV4cGVjdGVkIGlkZW50aWZpZXIAdHlwZV9zcGVjaWZpZXJfcXVhbGlmaWVyAG1pc3Npbmctb3duZXItcXVhbGlmaWVyAHN0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyAHN0cnVjdF9vcl91bmlvbl9zcGVjaWZpZXIAdHlwZV9zcGVjaWZpZXIAY2Fubm90IGNvbWJpbmUgd2l0aCBwcmV2aW91cyAnbG9uZyBsb25nJyBkZWNsYXJhdGlvbiBzcGVjaWZpZXIAcmlnaHQgaXMgbm90IGludGVnZXIAbGVmdCBpcyBub3QgaW50ZWdlcgBkZWZlcgBwcG51bWJlcgBjb252ZXJ0X3RvX251bWJlcgByZXR1cm4tbG9jYWwtYWRkcgBfaXNfc2NhbGFyAHJpZ2h0IG9wZXJhdG9yIGlzIG5vdCBzY2FsYXIAbGVmdCBvcGVyYXRvciBpcyBub3Qgc2NhbGFyAG11bHRpLWNoYXIAdW5zaWduZWQgY2hhcgBpZl9ncm91cABwb3AAY29uc3RhbnRfdmFsdWVfdW5hcnlfb3AAY29uc3RhbnRfdmFsdWVfb3AAb3duZXJzaGlwAGF1dG8AZ290bwB0eXBlX2NvbnZlcnRfdG8AZGl2LWJ5LXplcm8Abm90LXplcm8AZGl2aXppb24gYnkgemVybwBkaXZpc2lvbiBieSB6ZXJvAGV4cGFuZF9tYWNybwAtZm8AZG8ALW8Ac3RvcmFnZSBzaXplIG9mICclcycgaXNuJ3Qga25vd24Abm9yZXR1cm4AX05vcmV0dXJuAGV4dGVybgBpbnRlcm5hbCBlcnJvciB0eXBlX2NvbW1vbgBfaXNfZnVuY3Rpb24AYXNzaWdubWVudCBvZiBmdW5jdGlvbgBhcnJheS1pbmRpcmVjdGlvbgBhcnJheSBpbmRpcmVjdGlvbgByZWRlY2xhcmF0aW9uAGZsb3dfdmlzaXRfZGVjbGFyYXRpb24AZmxvd19zdGFydF92aXNpdF9kZWNsYXJhdGlvbgBmdW5jdGlvbl9kZWZpbml0aW9uX29yX2RlY2xhcmF0aW9uAHByYWdtYV9kZWNsYXJhdGlvbgBkZWNsYXJhdGlvbiBvZiAnJXMnIGhpZGVzIHByZXZpb3VzIGRlY2xhcmF0aW9uAHJlcGxhY2VtZW50X2xpc3RfcmVleGFtaW5hdGlvbgAtZGlyZWN0LWNvbXBpbGF0aW9uAHN0YW5kYXJkIG1hY3JvcyBpbmNsdXNpb24AX19EQVRFX18gbWFjcm8gaW5jbHVzaW9uAF9fVElNRV9fIG1hY3JvIGluY2x1c2lvbgBlcXVhbGl0eV9leHByZXNzaW9uAHVuYXJ5X2V4cHJlc3Npb24AcHJpbWFyeV9leHByZXNzaW9uAHBvc3RmaXhfZXhwcmVzc2lvbgBjYXN0X2V4cHJlc3Npb24AcHJlcHJvY2Vzc29yX2NvbnN0YW50X2V4cHJlc3Npb24AZmxvd192aXNpdF9leHByZXNzaW9uAGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uAGNvbmRpdGlvbmFsX2V4cHJlc3Npb24AcmVsYXRpb25hbF9leHByZXNzaW9uAGFuZF9leHByZXNzaW9uAGVtcHR5IGV4cHJlc3Npb24AZXhwZWN0ZWQgY29uc3RhbnQgZXhwcmVzc2lvbgBpbnZhbGlkIHR5cGUgc2hpZnQgZXhwcmVzc2lvbgBpbnZhbGlkIHR5cGVzIG9yIGV4cHJlc3Npb24AcmlnaHQgdHlwZSBpcyBub3Qgc2NhbGFyIGZvciBvciBleHByZXNzaW9uAGxlZnQgdHlwZSBpcyBub3Qgc2NhbGFyIGZvciBvciBleHByZXNzaW9uAGludmFsaWQgdHlwZXMgaW5jbHVzaXZlIG9yIGV4cHJlc3Npb24AaW52YWxpZCB0eXBlcyBhZGRpdGl2ZSBleHByZXNzaW9uAGludmFsaWQgdHlwZSBtdWx0aXBsaWNhdGl2ZSBleHByZXNzaW9uAGludmFsaWQgdHlwZXMgYW5kIGV4cHJlc3Npb24AaW52YWxpZCB0eXBlcyBsb2dpY2FsIGFuZCBleHByZXNzaW9uAGV4cGVjdGVkIGV4cHJlc3Npb24AZW51bS1jb252ZXJzaW9uAHVuaW9uAGJyZWFrIGpvaW4AaW52YWxpZCB0b2tlbgB1bmV4cGVjdGVkIHRva2VuAG5hbgBpbmNvbXBhdGlibGUtZW51bQAtcm0Ab3V0IG9mIG1lbQAbWzM3bQAbWzk1bQAbWzkybQAbWzM2OzFtABtbOTBtJXMbWzBtABtbOTVtd2FybmluZzogG1s5N20lcyBbG1s5NW0lcxtbOTdtXQobWzBtABtbMzY7MW1ub3RlOiAbWzk3bSVzIFsbWzM2OzFtJXMbWzk3bV0KG1swbQAbWzkxbWVycm9yOiAbWzk3bSVzIFsbWzkxbSVzG1s5N21dChtbMG0AYm9vbABfQm9vbABub25udWxsAHBvaW50ZXIgaXMgYWx3YXlzIG5vdC1udWxsAG1heWJlLW51bGwAb2JqZWN0IGlzIHBvc3NpYmx5IG51bGwAcG9pbnRlciBpcyBhbHdheXMgbnVsbABub24tbnVsbGFibGUgcG9pbnRlciAnJXMnIG1heSBiZSBudWxsAC1XYWxsAHR5cGVvZl91bnF1YWwAZXhwcmVzc2lvbl9ldmFsdWF0ZV9lcXVhbF9ub3RfZXF1YWwAX2lzX2ludGVncmFsAG9yaWdpbmFsAHRocmVhZF9sb2NhbABfVGhyZWFkX2xvY2FsAGdldF93YXJuaW5nX2JpdF9tYXNrAGZvcm1hdF92aXNpdF9wcmltYXJ5X2Jsb2NrAHRocm93IHN0YXRlbWVudCBub3Qgd2l0aGluIHRyeSBibG9jawBjaGVjawB0b2tlbl9saXN0X3BvcF9iYWNrAHR5cGVfbGlzdF9wdXNoX2JhY2sAb2JqZWN0c19wdXNoX2JhY2sAYnJlYWsALWZpAGFyZ3VtZW50X2V4cHJlc3Npb25fbGlzdF9wdXNoAGZhbGx0aHJvdWdoAHN3aXRjaABjYXRjaABsZWZ0LXRydWUtYnJhbmNoAGM6L2Fzc2VydC5oAGM6L2xpbWl0cy5oAGM6L293bmVyc2hpcC5oAGM6L2Vycm5vLmgAYzovc3RkaW8uaABjOi9tYXRoLmgAYzovc3RyaW5nLmgAYzovc3RkZGVmLmgAYzovc3RkbGliLmgAc3RhdGljX2RlYnVnAGFuYWx5emVyLW5vbi1vcHQtYXJnAGxvbmcgbG9uZwAjd2FybmluZwB0b2tlbl9saXN0X2FwcGVuZF9saXN0X2F0X2JlZ2lubmluZwBzdHJpbmctc2xpY2luZwB1bm5lY2Vzc2FyeSBsaW5lLXNsaWNpbmcAJUxnAHNzX3ZhZnByaW50ZgBzb3VyY2UgZXhwcmVzc2lvbiBvZiBvYmpfb3duZXIgbXVzdCBiZSBhZGRyZXNzb2YAdHlwZV9nZXRfYWxpZ25vZgBfQWxpZ25vZgB0eXBlX2dldF9zaXplb2YAdHlwZW9mAG11c3QtdXNlLWFkZHJlc3Mtb2YAaW5mAC1zYXJpZgBlbGlmAGVuZGlmAGJlZm9yZS1pZgB1bmRlZgBlbGlmbmRlZgBlbGlmZGVmAHR5cGVkZWYAJWYAbm9uLW93bmVyLXRvLW93bmVyLW1vdmUAbm9uLW93bmVyLW1vdmUAdHJ1ZQBjb250aW51ZQBfaXNfbHZhbHVlAHVudXNlZC12YWx1ZQB2b2lkIGZ1bmN0aW9uICclcycgc2hvdWxkIG5vdCByZXR1cm4gYSB2YWx1ZQBfX2hhc19jX2F0dHJpYnV0ZQB3YXJuaW5nICclcycgaXMgbm90IGFuIGNha2UgYXR0cmlidXRlAHdhcm5pbmcgJyVzJyBpcyBub3QgYW4gc3RhbmRhcmQgYXR0cmlidXRlAGlnbm9yaW5nIHJldHVybiB2YWx1ZSBvZiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRoICdub2Rpc2NhcmQnIGF0dHJpYnV0ZQBub3RlAG1hY3JvX2FyZ3VtZW50X2RlbGV0ZQBlbnVtZXJhdG9yX2RlbGV0ZQBpbml0X2RlY2xhcmF0b3JfZGVsZXRlAG1lbWJlcl9kZWNsYXJhdG9yX2RlbGV0ZQBkZXNpZ25hdG9yX2RlbGV0ZQBpbml0aWFsaXplcl9kZWxldGUAdHlwZV9zcGVjaWZpZXJfcXVhbGlmaWVyX2RlbGV0ZQBkZWNsYXJhdGlvbl9zcGVjaWZpZXJfZGVsZXRlAGF0dHJpYnV0ZV9zcGVjaWZpZXJfZGVsZXRlAHBhcmFtZXRlcl9kZWNsYXJhdGlvbl9kZWxldGUAbWVtYmVyX2RlY2xhcmF0aW9uX2RlbGV0ZQBnZW5lcmljX2Fzc29jaWF0aW9uX2RlbGV0ZQBhcmd1bWVudF9leHByZXNzaW9uX2RlbGV0ZQB0b2tlbl9kZWxldGUAYmxvY2tfaXRlbV9kZWxldGUAYXR0cmlidXRlX2RlbGV0ZQBzZXRfZGlyZWN0X3N0YXRlAHN0YXRpY19zdGF0ZQBkZWNsYXJhdG9yLXN0YXRlAGNvbmNhdGVuYXRlAGVsc2UAZmFsc2UAY2FzZQBpZ25vcmUAZW5kX29mX3N0b3JhZ2VfdmlzaXRfY29yZQBwcmludF9vYmplY3RfY29yZQBtYWtlX29iamVjdF9jb3JlAHByZXZpb3VzIGRlY2xhcmF0aW9uIGlzIGhlcmUAdHlwZV9nZXRfZW51bV90eXBlAGFzc2lnbm1lbnQgdG8gZXhwcmVzc2lvbiB3aXRoIGFycmF5IHR5cGUAY2hhcmFjdGVyIGNvbnN0YW50IHRvbyBsb25nIGZvciBpdHMgdHlwZQByaWdodCBtdXN0IGJlIGludGVnZXIgdHlwZQBjb25kaXRpb24gbXVzdCBoYXZlIHNjYWxhciB0eXBlAGRlZmVyIGVuZCBvZiBzY29wZQBlbmQgb2YgJyVzJyBzY29wZQB0eXBlX2Rlc3Ryb3lfb25lAGZsb3dfZGVmZXJfc2NvcGVfZGVsZXRlX29uZQBpbmxpbmUAY29udHJvbF9saW5lAGRlZmluZQBvd25lcnNoaXAgb2YgJyVzJyBub3QgbW92ZWQgYmVmb3JlIHRoZSBlbmQgb2YgbGlmZXRpbWUAcG9zdGZpeF9leHByZXNzaW9uX3R5cGVfbmFtZQBzdHlsZQBtb2R1bGUAdm9sYXRpbGUAd2hpbGUAdW5leHBlY3RlZCBlbmQgb2YgZmlsZQBkb3VibGUAcmVwcm9kdWNpYmxlAC1vd25lcnNoaXA9ZGlzYWJsZQAtbnVsbGFibGU9ZGlzYWJsZQAtb3duZXJzaGlwPWVuYWJsZQBudWxsYWJsZS10by1ub24tbnVsbGFibGUAdW51c2VkLXZhcmlhYmxlAC1zdHlsZT1jYWtlAF9faGFzX2luY2x1ZGUALXRlc3QtbW9kZQB1dGY4X2RlY29kZQBvbmNlAGFuYWx5emVyLW51bGwtZGVyZWZlcmVuY2UAb25lIHNwYWNlAG5vZGlzY2FyZABmaWxlICVzIG5vdCBmb3VuZABmaWxlICclcycgbm90IGZvdW5kAGx2YWx1ZSByZXF1aXJlZCBhcyBpbmNyZW1lbnQgb3BlcmFuZABsdmFsdWUgcmVxdWlyZWQgYXMgZGVjcmVtZW50IG9wZXJhbmQAaW5kaXJlY3Rpb24gcmVxdWlyZXMgcG9pbnRlciBvcGVyYW5kAGx2YWx1ZSByZXF1aXJlZCBhcyB1bmFyeSAnJicgb3BlcmFuZABleHBhbmQAJWxsZAB2b2lkAGFuYWx5emVyLW1heWJlLXVuaW5pdGlhbGl6ZWQAb2JqZWN0IGlzIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQAb2JqZWN0ICclcycgd2FzIG5vdCBtb3ZlZC9kZXN0cm95ZWQAc291cmNlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIG1vdmVkAGFkZHJlc3Mgb2YgcmVnaXN0ZXIgdmFyaWFibGUgJ3gnIHJlcXVlc3RlZABlbXB0eSBkZWNsYXJhdG9yIG5hbWU/PyB1bmV4cGVjdGVkACclcycgaXMgZGVwcmVjYXRlZABtYXliZV91bnVzZWQAZGVjbGFyYXRvciAnJXMnIG5vdCB1c2VkAGlnbm9yZWQAc3RydWN0dXJlIG9yIHVuaW9uIHJlcXVpcmVkAGRlZmluZWQAdW5zaWduZWQAX1N0YXRpY19hc3NlcnQgZmFpbGVkAHByYWdtYSBjaGVjayBmYWlsZWQAc3RhdGljX3N0YXRlIGZhaWxlZAAtbnVsbGFibGU9ZW5hYmxlZABsaWZldGltZS1lbmRlZABvYmplY3QgbGlmZXRpbWUgZW5kZWQAdW5zZXF1ZW5jZWQAdG9rZW4gc2xpY2VkAF9faGFzX2VtYmVkAGFyZ3VtZW50X2xpc3RfYWRkAGVudW1lcmF0b3JfbGlzdF9hZGQAaW5pdF9kZWNsYXJhdG9yX2xpc3RfYWRkAG1lbWJlcl9kZWNsYXJhdG9yX2xpc3RfYWRkAGRlc2lnbmF0b3JfbGlzdF9hZGQAaW5pdGlhbGl6ZXJfbGlzdF9hZGQAcGFyYW1ldGVyX2xpc3RfYWRkAHNwZWNpZmllcl9xdWFsaWZpZXJfbGlzdF9hZGQAdHlwZV9xdWFsaWZpZXJfbGlzdF9hZGQAbWVtYmVyX2RlY2xhcmF0aW9uX2xpc3RfYWRkAHRva2VuX2xpc3RfYWRkAGJsb2NrX2l0ZW1fbGlzdF9hZGQAcGFyYW1fbGlzdF9hZGQAYXR0cmlidXRlX2xpc3RfYWRkAGdlbmVyaWNfYXNzb2NfbGlzdF9hZGQAZGVjbGFyYXRpb25fc3BlY2lmaWVyc19hZGQAaW5jbHVkZV9kaXJfYWRkAGF0dHJpYnV0ZV9zcGVjaWZpZXJfc2VxdWVuY2VfYWRkACAjJTAyZABfJXMlZABfYW5vbnltb3VzX3N0cnVjdF8lZABnb3RvIF9jYXRjaF9sYWJlbF8lZAAgX2xpdF9mdW5jXyVkAEUlZABtYWxsb2MAY2FsbG9jAGRpYWdub3N0aWMAX2lzX2FyaXRobWV0aWMAcmlnaHQgLyBpcyBub3QgYXJpdGhtZXRpYwBsZWZ0IC8gaXMgbm90IGFyaXRobWV0aWMAcmlnaHQgKiBpcyBub3QgYXJpdGhtZXRpYwBsZWZ0ICogaXMgbm90IGFyaXRobWV0aWMAc3RhdGljAG5vIG1hdGNoIGZvciBnZW5lcmljAF9HZW5lcmljAF9BdG9taWMAYzovbWFpbi5jAGxpYi5jAAolKmMAJWMAZXhlY3V0ZV9wcmFnbWEAdW5rbm93biBwcmFnbWEAX190eXBlb2ZfXwBfX2Z1bmNfXwBfX1ZBX09QVF9fAF9fVkFfQVJHU19fAF9fQ09VTlRFUl9fAF9fTElORV9fAF9fRklMRV9fAF4AIGFyZ3VtZW50IG9mIHNpemUgWyVkXSBpcyBzbWFsbGVyIHRoYW4gcGFyYW1ldGVyIG9mIHNpemUgWyVkXQBbW25vcmV0dXJuXV0AWwBjdHgtPmN1cnJlbnQtPnR5cGUgPT0gVEtfS0VZV09SRF9UUlkAVEtfS0VZV09SRF9fSU1BR0lOQVJZAFRLX0tFWVdPUkRfSVNfQVJSQVkAVEtfS0VZV09SRF9TVEFUSUNfREVCVUdfRVgAVEtfS0VZV09SRF9fQ09NUExFWABUS19BUlJPVwBUS19LRVlXT1JEX1RIUk9XAFRLX0tFWVdPUkRfX1ZJRVcAVEtfS0VZV09SRF9fT1VUAFRLX0tFWVdPUkRfSVNfQ09OU1QAVEtfS0VZV09SRF9DT05TVABUS19LRVlXT1JEX1NIT1JUAFRLX0tFWVdPUkRfQVNTRVJUAFRLX0tFWVdPUkRfX1NUQVRJQ19BU1NFUlQAVEtfS0VZV09SRF9fT1BUAFRLX0tFWVdPUkRfSU5UAFRLX0tFWVdPUkRfX0JJVElOVABUS19LRVlXT1JEX0lTX0ZMT0FUSU5HX1BPSU5UAFRLX0NPTU1FTlQAVEtfTElORV9DT01NRU5UAFRLX0NJUkNVTUZMRVhfQUNDRU5UAFRLX0dSQVZFX0FDQ0VOVABUS19DT01QSUxFUl9CSU5BUllfQ09OU1RBTlQAVEtfQ0hBUl9DT05TVEFOVABUS19DT01QSUxFUl9PQ1RBTF9DT05TVEFOVABUS19DT01QSUxFUl9ERUNJTUFMX0NPTlNUQU5UAFRLX0NPTVBJTEVSX0hFWEFERUNJTUFMX0NPTlNUQU5UAFRLX0NPTVBJTEVSX0RFQ0lNQUxfRkxPQVRJTkdfQ09OU1RBTlQAVEtfQ09NUElMRVJfSEVYQURFQ0lNQUxfRkxPQVRJTkdfQ09OU1RBTlQAVEtfS0VZV09SRF9ERUZBVUxUAFRLX1NISUZUUklHSFQAVEtfU0hJRlRMRUZUAFRLX0tFWVdPUkRfU1RBVElDX1NFVABUS19SSUdIVF9DVVJMWV9CUkFDS0VUAFRLX0xFRlRfQ1VSTFlfQlJBQ0tFVABUS19SSUdIVF9TUVVBUkVfQlJBQ0tFVABUS19MRUZUX1NRVUFSRV9CUkFDS0VUAFRLX0tFWVdPUkRfU1RSVUNUAFRLX0tFWVdPUkRfUkVTVFJJQ1QAVEtfQ09NTUVSQ0lBTF9BVABUS19LRVlXT1JEX0ZMT0FUAFRLX0hZUEhFTl9NSU5VUwBUS19NSU5VU01JTlVTAFRLX1BMVVNQTFVTAFRLX1NPTElEVVMAVEtfUkVWRVJTRV9TT0xJRFVTAFRLX0JMQU5LUwBUS19SSUdIVF9QQVJFTlRIRVNJUwBUS19MRUZUX1BBUkVOVEhFU0lTAFRLX0tFWVdPUkRfX0FMSUdOQVMAVEtfS0VZV09SRF9BVFRSX0hBUwBUS19LRVlXT1JEX05VTExQVFIAVEtfS0VZV09SRF9DT05TVEVYUFIAVEtfTE9HSUNBTF9PUEVSQVRPUl9PUgBUS19NQUNST19DT05DQVRFTkFURV9PUEVSQVRPUgBwX2l0ZXJhdGlvbl9zdGF0ZW1lbnQtPmZpcnN0X3Rva2VuLT50eXBlID09IFRLX0tFWVdPUkRfRk9SAFRLX0tFWVdPUkRfUkVHSVNURVIAVEtfS0VZV09SRF9JU19QT0lOVEVSAFRLX0tFWVdPUkRfX09XTkVSAFRLX0tFWVdPUkRfSVNfT1dORVIAVEtfS0VZV09SRF9fT0JKX09XTkVSAFRLX1BMQUNFTUFSS0VSAGlucHV0X2xpc3QtPmhlYWQtPnR5cGUgPT0gVEtfSURFTlRJRklFUgBUS19LRVlXT1JEX0RFRkVSAFRLX1BQTlVNQkVSAFRLX0tFWVdPUkRfSVNfU0NBTEFSAFRLX0tFWVdPUkRfQ0hBUgBUS19GVUxMX1NUT1AAVEtfS0VZV09SRF9BVVRPAFRLX0tFWVdPUkRfR09UTwBUS19JREVOVElGSUVSX1JFQ1VSU0lWRV9NQUNSTwBwX2l0ZXJhdGlvbl9zdGF0ZW1lbnQtPmZpcnN0X3Rva2VuLT50eXBlID09IFRLX0tFWVdPUkRfRE8AVEtfS0VZV09SRF9SRVRVUk4AVEtfS0VZV09SRF9fTk9SRVRVUk4AVEtfS0VZV09SRF9FWFRFUk4AVEtfQ09MT04AVEtfU0VNSUNPTE9OAFRLX0tFWVdPUkRfSVNfRlVOQ1RJT04AVEtfS0VZV09SRF9VTklPTgBUS19QRVJDRU5UX1NJR04AVEtfUExVU19TSUdOAFRLX0VRVUFMU19TSUdOAFRLX05VTUJFUl9TSUdOAFRLX0RPTExBUl9TSUdOAFRLX0xFU1NfVEhBTl9TSUdOAFRLX0dSRUFURVJfVEhBTl9TSUdOAEFOWV9PVEhFUl9QUF9UT0tFTgBOQU4AVEtfS0VZV09SRF9FTlVNAFRLX0tFWVdPUkRfX0FTTQBUS19LRVlXT1JEX19CT09MAHBfZGVjbGFyYXRpb24tPmZ1bmN0aW9uX2JvZHkgPT0gTlVMTABwbmV3LT5wcmV2ID09IE5VTEwAcG5ldy0+bmV4dCA9PSBOVUxMAHBfbGFzdF9wYXJhbWV0ZXItPm5leHQgPT0gTlVMTABwLT50eXBlX3F1YWxpZmllci0+bmV4dCA9PSBOVUxMAHAtPm5leHQgPT0gTlVMTAB0eXBlX2xpc3QtPnRhaWwtPm5leHQgPT0gTlVMTABhcHBlbmRfbGlzdC0+dGFpbC0+bmV4dCA9PSBOVUxMAGRlc3QtPnRhaWwtPm5leHQgPT0gTlVMTABzb3VyY2UtPnRhaWwtPm5leHQgPT0gTlVMTABsaXN0LnRhaWwtPm5leHQgPT0gTlVMTABuZXdfYm9vay0+bmV4dCA9PSBOVUxMAHBfdHlwZS0+bmV4dCA9PSBOVUxMAHBfdHJ5X3N0YXRlbWVudC0+Y2F0Y2hfc2Vjb25kYXJ5X2Jsb2NrX29wdCA9PSBOVUxMAHQubmFtZV9vcHQgPT0gTlVMTABwX2RlY2xhcmF0aW9uX3NwZWNpZmllcnMtPnBfYXR0cmlidXRlX3NwZWNpZmllcl9zZXF1ZW5jZV9vcHQgPT0gTlVMTABwX2FyZ3VtZW50ID09IE5VTEwAcF9leHByZXNzaW9uLT5yaWdodCA9PSBOVUxMAHBfZXhwcmVzc2lvbi0+bGVmdCA9PSBOVUxMAHBfYmxvY2stPnByZXZpb3VzID09IE5VTEwAbWFjcm8tPnBhcmFtZXRlcnMgPT0gTlVMTABwX2luaXRpYWxpemVyLT5kZXNpZ25hdGlvbiA9PSBOVUxMAHBfaW5pdGlhbGl6ZXIyLT5kZXNpZ25hdGlvbiA9PSBOVUxMAG5ld19leHByZXNzaW9uID09IE5VTEwAbGlzdC0+dGFpbCA9PSBOVUxMAHIyLnRhaWwgPT0gTlVMTABjdHgtPnRhaWxfYmxvY2sgPT0gTlVMTABwLT50YWlsX2Jsb2NrID09IE5VTEwAY3R4LT5wX3JldHVybl90eXBlID09IE5VTEwAcF9leHByZXNzaW9uX25vZGUtPnR5cGVfbmFtZSA9PSBOVUxMAG1hY3JvLT5uYW1lID09IE5VTEwAbWFwLT50YWJsZSA9PSBOVUxMAHBfZXhwcmVzc2lvbl9ub2RlID09IE5VTEwAdHlwZV9saXN0LT5oZWFkID09IE5VTEwAbWFjcm8tPnJlcGxhY2VtZW50X2xpc3QuaGVhZCA9PSBOVUxMAHIyLmhlYWQgPT0gTlVMTABmaW5kX21hY3JvKGN0eCwgaW5wdXRfbGlzdC0+aGVhZC0+bGV4ZW1lKSA9PSBOVUxMAHR5cGVfbGlzdCAhPSBOVUxMAHBfbGFzdCAhPSBOVUxMAHBfZGVjbGFyYXRvcl9vcHQgIT0gTlVMTABjdHgtPmN1cnJlbnQgIT0gTlVMTABib29rcyAhPSBOVUxMAHBfdHlwZV9zcGVjaWZpZXItPnR5cGVkZWZfZGVjbGFyYXRvciAhPSBOVUxMAHBfdHlwZS0+ZW51bV9zcGVjaWZpZXIgIT0gTlVMTABwICE9IE5VTEwAcF9leHByZXNzaW9uX29yaWdpbiAhPSBOVUxMAG5ld19ib29rICE9IE5VTEwAbGlzdC5oZWFkICE9IE5VTEwAbGlzdDQuaGVhZCAhPSBOVUxMAHAtPmRhdGEgIT0gTlVMTABUS19LRVlXT1JEX1RZUEVPRl9VTlFVQUwAVEtfS0VZV09SRF9JU19JTlRFR1JBTABUS19TVFJJTkdfTElURVJBTABUS19LRVlXT1JEX19USFJFQURfTE9DQUwAVEtfQVNURVJJU0sAVEtfUVVFU1RJT05fTUFSSwBUS19RVU9UQVRJT05fTUFSSwBUS19FWENMQU1BVElPTl9NQVJLAFRLX0tFWVdPUkRfQlJFQUsAVEtfS0VZV09SRF9TV0lUQ0gAVEtfS0VZV09SRF9DQVRDSABUS19LRVlXT1JEX1NUQVRJQ19ERUJVRwBUS19LRVlXT1JEX0xPTkcAVEtfS0VZV09SRF9fQUxJR05PRgBUS19LRVlXT1JEX1NJWkVPRgBUS19LRVlXT1JEX1RZUEVPRgBJTkYAcF9zZWxlY3Rpb25fc3RhdGVtZW50LT5maXJzdF90b2tlbi0+dHlwZSA9PSBUS19LRVlXT1JEX0lGAG51bGxjaGVja3MgcHJhZ21hIG5lZWRzIHRvIHVzZSBPTiBPRkYAKmMgPj0gMHgwODAwICYmICpjIDw9IDB4RkZGRgAqYyA+PSAweDEwMDAwICYmICpjIDw9IDB4MTBGRkZGACpjID49IDB4MDA4MCAmJiAqYyA8PSAweDA3RkYAVEtfS0VZV09SRF9UWVBFREVGACpjID49IDB4MDAwMCAmJiAqYyA8PSAweDAwN0YAVEtfS0VZV09SRF9BVFRSX1JFTU9WRQBUS19LRVlXT1JEX1RSVUUAVEtfS0VZV09SRF9DT05USU5VRQBUS19LRVlXT1JEX0lTX0xWQUxVRQBUS19LRVlXT1JEX1NUQVRJQ19TVEFURQBUS19LRVlXT1JEX0VMU0UAVEtfS0VZV09SRF9GQUxTRQBUS19LRVlXT1JEX0NBU0UAVEtfTk9ORQBUS19GTE9XX0xJTkUAVEtfUFJFUFJPQ0VTU09SX0xJTkUAVEtfVkVSVElDQUxfTElORQBUS19ORVdMSU5FAFRLX0tFWVdPUkRfSU5MSU5FAFRLX1hfTUlTU0lOR19OQU1FAFRLX0tFWVdPUkRfVk9MQVRJTEUAcF9pdGVyYXRpb25fc3RhdGVtZW50LT5maXJzdF90b2tlbi0+dHlwZSA9PSBUS19LRVlXT1JEX1dISUxFAFRLX0JFR0lOX09GX0ZJTEUAVEtfS0VZV09SRF9ET1VCTEUAcF92aXNpdG9yLT5wX29iamVjdC0+c3RhdGUgPT0gT0JKRUNUX1NUQVRFX05PVF9BUFBMSUNBQkxFAENBS0UAVEtfQVBPU1RST1BIRQBUS19USUxERQBUS19XSElURV9TUEFDRQAtRQBUS19MT0dJQ0FMX09QRVJBVE9SX0FORABUS19BTVBFUlNBTkQAVEtfS0VZV09SRF9WT0lEAFRLX0tFWVdPUkRfU0lHTkVEAFRLX0tFWVdPUkRfVU5TSUdORUQAVEtfS0VZV09SRF9BVFRSX0FERABUS19LRVlXT1JEX0lTX0FSSVRITUVUSUMAVEtfS0VZV09SRF9TVEFUSUMAVEtfS0VZV09SRF9fR0VORVJJQwBUS19LRVlXT1JEX19BVE9NSUMAVEtfQ09NTUEAY3R4LT5jdXJyZW50LT50eXBlID09IFRLX1BSQUdNQQBhZGRyZXNzIG9mIHJlZ2lzdGVyIHZhcmlhYmxlIHJlcXVlc3RlZCAtIGRlY2xhcmF0b3I/AGluY29tcGF0aWJsZSB0eXBlcz8/ADw+AGJyZWFrOwBnb3RvIF9jYXRjaF9sYWJlbF8lZDsAdHlwZWRlZiBsb25nIGxvbmcgZnBvc190Owp0eXBlZGVmIHVuc2lnbmVkIHNpemVfdDsKCiNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKI2RlZmluZSBFWElUX0ZBSUxVUkUgMQojZGVmaW5lIE5VTEwgKCh2b2lkKikwKQp0eXBlZGVmIGludCB3Y2hhcl90OwpbW25vZGlzY2FyZF1dIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIqIG5wdHIpOwpbW25vZGlzY2FyZF1dIGludCBhdG9pKGNvbnN0IGNoYXIqIG5wdHIpOwpbW25vZGlzY2FyZF1dIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciogbnB0cik7Cltbbm9kaXNjYXJkXV0gbG9uZyBsb25nIGludCBhdG9sbChjb25zdCBjaGFyKiBucHRyKTsKZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiByZXN0cmljdCBucHRyLCBjaGFyKiogcmVzdHJpY3QgZW5kcHRyKTsKZmxvYXQgc3RydG9mKGNvbnN0IGNoYXIqIHJlc3RyaWN0IG5wdHIsIGNoYXIqKiByZXN0cmljdCBlbmRwdHIpOwpsb25nIGRvdWJsZSBzdHJ0b2xkKGNvbnN0IGNoYXIqIHJlc3RyaWN0IG5wdHIsIGNoYXIqKiByZXN0cmljdCBlbmRwdHIpOwpsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciogcmVzdHJpY3QgbnB0ciwgY2hhcioqIHJlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpOwpsb25nIGxvbmcgaW50IHN0cnRvbGwoY29uc3QgY2hhciogcmVzdHJpY3QgbnB0ciwgY2hhcioqIHJlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpOwp1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIqIHJlc3RyaWN0IG5wdHIsIGNoYXIqKiByZXN0cmljdCBlbmRwdHIsIGludCBiYXNlKTsKdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbChjb25zdCBjaGFyKiByZXN0cmljdCBucHRyLCBjaGFyKiogcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSk7CmludCByYW5kKHZvaWQpOwp2b2lkIHNyYW5kKHVuc2lnbmVkIGludCBzZWVkKTsKdm9pZCogYWxpZ25lZF9hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7CiNpZiBkZWZpbmVkKF9fU1REQ19PV05FUlNISVBfXykgCltbbm9kaXNjYXJkXV0gdm9pZCogX093bmVyIF9PcHQgY2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOwp2b2lkIGZyZWUodm9pZCogX093bmVyIF9PcHQgcHRyKTsKW1tub2Rpc2NhcmRdXSB2b2lkKiBfT3duZXIgX09wdCBtYWxsb2Moc2l6ZV90IHNpemUpOwpbW25vZGlzY2FyZF1dIHZvaWQqIF9Pd25lciBfT3B0IHJlYWxsb2Modm9pZCogX09wdCBwdHIsIHNpemVfdCBzaXplKTsKI2Vsc2UKW1tub2Rpc2NhcmRdXSB2b2lkKiBjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7CnZvaWQgZnJlZSh2b2lkKiBwdHIpOwpbW25vZGlzY2FyZF1dIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSk7Cltbbm9kaXNjYXJkXV0gdm9pZCogcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKI2VuZGlmCltbbm9yZXR1cm5dXSB2b2lkIGFib3J0KHZvaWQpOwppbnQgYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7CmludCBhdF9xdWlja19leGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7Cltbbm9yZXR1cm5dXSB2b2lkIGV4aXQoaW50IHN0YXR1cyk7Cltbbm9yZXR1cm5dXSB2b2lkIF9FeGl0KGludCBzdGF0dXMpOwpjaGFyKiBnZXRlbnYoY29uc3QgY2hhciogbmFtZSk7Cltbbm9yZXR1cm5dXSB2b2lkIHF1aWNrX2V4aXQoaW50IHN0YXR1cyk7CmludCBzeXN0ZW0oY29uc3QgY2hhciogc3RyaW5nKTsAIAp0eXBlZGVmIGludCBlcnJub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHJzaXplX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgd2NoYXJfdDsKdm9pZCogbWVtY2hyKHZvaWQgY29uc3QqIF9CdWYsIGludCBfVmFsLCBzaXplX3QgX01heENvdW50KTsKaW50IG1lbWNtcCh2b2lkIGNvbnN0KiBfQnVmMSwgdm9pZCBjb25zdCogX0J1ZjIsIHNpemVfdCBfU2l6ZSk7CnZvaWQqIG1lbWNweSh2b2lkKiBfRHN0LCB2b2lkIGNvbnN0KiBfU3JjLCBzaXplX3QgX1NpemUpOwp2b2lkKiBtZW1tb3ZlKHZvaWQqIF9Ec3QsIHZvaWQgY29uc3QqIF9TcmMsIHNpemVfdCBfU2l6ZSk7CnZvaWQqIG1lbXNldCh2b2lkKiBfRHN0LCBpbnQgX1ZhbCwgc2l6ZV90IF9TaXplKTsKY2hhciogc3RyY2hyKGNoYXIgY29uc3QqIF9TdHIsIGludCBfVmFsKTsKY2hhciAqc3RyY3B5KF9PdXQgY2hhciAqcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjICk7CmNoYXIqIHN0cnJjaHIoY2hhciBjb25zdCogX1N0ciwgaW50IF9DaCk7CmNoYXIqIHN0cnN0cihjaGFyIGNvbnN0KiBfU3RyLCBjaGFyIGNvbnN0KiBfU3ViU3RyKTsKd2NoYXJfdCogd2NzY2hyKHdjaGFyX3QgY29uc3QqIF9TdHIsIHdjaGFyX3QgX0NoKTsKd2NoYXJfdCogd2NzcmNocih3Y2hhcl90IGNvbnN0KiBfU3RyLCB3Y2hhcl90IF9DaCk7CndjaGFyX3QqIHdjc3N0cih3Y2hhcl90IGNvbnN0KiBfU3RyLCB3Y2hhcl90IGNvbnN0KiBfU3ViU3RyKTsKc3RhdGljIGlubGluZSBlcnJub190IG1lbWNweV9zKHZvaWQqIGNvbnN0IF9EZXN0aW5hdGlvbiwgcnNpemVfdCBjb25zdCBfRGVzdGluYXRpb25TaXplLCB2b2lkIGNvbnN0KiBjb25zdCBfU291cmNlLCByc2l6ZV90IGNvbnN0IF9Tb3VyY2VTaXplKTsKc3RhdGljIGlubGluZSBlcnJub190IG1lbW1vdmVfcyh2b2lkKiBjb25zdCBfRGVzdGluYXRpb24sIHJzaXplX3QgY29uc3QgX0Rlc3RpbmF0aW9uU2l6ZSwgdm9pZCBjb25zdCogY29uc3QgX1NvdXJjZSwgcnNpemVfdCBjb25zdCBfU291cmNlU2l6ZSk7CmludCBfbWVtaWNtcCh2b2lkIGNvbnN0KiBfQnVmMSwgdm9pZCBjb25zdCogX0J1ZjIsIHNpemVfdCBfU2l6ZSk7CnZvaWQqIG1lbWNjcHkodm9pZCogX0RzdCwgdm9pZCBjb25zdCogX1NyYywgaW50IF9WYWwsIHNpemVfdCBfU2l6ZSk7CmludCBtZW1pY21wKHZvaWQgY29uc3QqIF9CdWYxLCB2b2lkIGNvbnN0KiBfQnVmMiwgc2l6ZV90IF9TaXplKTsKZXJybm9fdCB3Y3NjYXRfcyh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHJzaXplX3QgX1NpemVJbldvcmRzLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlKTsKZXJybm9fdCB3Y3NjcHlfcyh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHJzaXplX3QgX1NpemVJbldvcmRzLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlKTsKZXJybm9fdCB3Y3NuY2F0X3Mod2NoYXJfdCogX0Rlc3RpbmF0aW9uLCByc2l6ZV90IF9TaXplSW5Xb3Jkcywgd2NoYXJfdCBjb25zdCogX1NvdXJjZSwgcnNpemVfdCBfTWF4Q291bnQpOwplcnJub190IHdjc25jcHlfcyh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHJzaXplX3QgX1NpemVJbldvcmRzLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlLCByc2l6ZV90IF9NYXhDb3VudCk7CndjaGFyX3QqIHdjc3Rva19zKHdjaGFyX3QqIF9TdHJpbmcsIHdjaGFyX3QgY29uc3QqIF9EZWxpbWl0ZXIsIHdjaGFyX3QqKiBfQ29udGV4dCk7CndjaGFyX3QqIF93Y3NkdXAod2NoYXJfdCBjb25zdCogX1N0cmluZyk7CndjaGFyX3QqIHdjc2NhdCh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UpOyBpbnQgd2NzY21wKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcxLCB3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMik7CndjaGFyX3QqIHdjc2NweSh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UpOyBzaXplX3Qgd2NzY3Nwbih3Y2hhcl90IGNvbnN0KiBfU3RyaW5nLCB3Y2hhcl90IGNvbnN0KiBfQ29udHJvbCk7CnNpemVfdCB3Y3NsZW4od2NoYXJfdCBjb25zdCogX1N0cmluZyk7CnNpemVfdCB3Y3NubGVuKHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UsIHNpemVfdCBfTWF4Q291bnQpOwpzdGF0aWMgaW5saW5lIHNpemVfdCB3Y3NubGVuX3Mod2NoYXJfdCBjb25zdCogX1NvdXJjZSwgc2l6ZV90IF9NYXhDb3VudCk7CndjaGFyX3QqIHdjc25jYXQod2NoYXJfdCogX0Rlc3RpbmF0aW9uLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlLCBzaXplX3QgX0NvdW50KTsKaW50IHdjc25jbXAod2NoYXJfdCBjb25zdCogX1N0cmluZzEsIHdjaGFyX3QgY29uc3QqIF9TdHJpbmcyLCBzaXplX3QgX01heENvdW50KTsKd2NoYXJfdCogd2NzbmNweSh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UsIHNpemVfdCBfQ291bnQpOwp3Y2hhcl90KiB3Y3NwYnJrKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcsIHdjaGFyX3QgY29uc3QqIF9Db250cm9sKTsKc2l6ZV90IHdjc3Nwbih3Y2hhcl90IGNvbnN0KiBfU3RyaW5nLCB3Y2hhcl90IGNvbnN0KiBfQ29udHJvbCk7CndjaGFyX3QqIHdjc3Rvayh3Y2hhcl90KiBfU3RyaW5nLCB3Y2hhcl90IGNvbnN0KiBfRGVsaW1pdGVyLCB3Y2hhcl90KiogX0NvbnRleHQpOwpzaXplX3Qgd2NzeGZybSh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UsIHNpemVfdCBfTWF4Q291bnQpOwppbnQgd2NzY29sbCh3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMSwgd2NoYXJfdCBjb25zdCogX1N0cmluZzIpOwp3Y2hhcl90KiB3Y3NkdXAod2NoYXJfdCBjb25zdCogX1N0cmluZyk7CmludCB3Y3NpY21wKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcxLCB3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMik7CmludCB3Y3NuaWNtcCh3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMSwgd2NoYXJfdCBjb25zdCogX1N0cmluZzIsIHNpemVfdCBfTWF4Q291bnQpOwp3Y2hhcl90KiB3Y3Nuc2V0KHdjaGFyX3QqIF9TdHJpbmcsIHdjaGFyX3QgX1ZhbHVlLCBzaXplX3QgX01heENvdW50KTsKd2NoYXJfdCogd2NzcmV2KHdjaGFyX3QqIF9TdHJpbmcpOwp3Y2hhcl90KiB3Y3NzZXQod2NoYXJfdCogX1N0cmluZywgd2NoYXJfdCBfVmFsdWUpOwp3Y2hhcl90KiB3Y3Nsd3Iod2NoYXJfdCogX1N0cmluZyk7IHdjaGFyX3QqIHdjc3Vwcih3Y2hhcl90KiBfU3RyaW5nKTsKaW50IHdjc2ljb2xsKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcxLCB3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMik7CmNoYXIqIHN0cnRva19zKGNoYXIqIF9TdHJpbmcsIGNoYXIgY29uc3QqIF9EZWxpbWl0ZXIsIGNoYXIqKiBfQ29udGV4dCk7CnZvaWQqIF9tZW1jY3B5KHZvaWQqIF9Ec3QsIHZvaWQgY29uc3QqIF9TcmMsIGludCBfVmFsLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RyY2F0KGNoYXIqIF9EZXN0aW5hdGlvbiwgY2hhciBjb25zdCogX1NvdXJjZSk7CmludCBzdHJjbXAoY2hhciBjb25zdCogX1N0cjEsIGNoYXIgY29uc3QqIF9TdHIyKTsKaW50IHN0cmNvbGwoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyKTsKY2hhciogc3RyZXJyb3IoaW50IF9FcnJvck1lc3NhZ2UpOwpzaXplX3Qgc3RybGVuKGNoYXIgY29uc3QqIF9TdHIpOwpjaGFyKiBzdHJuY2F0KGNoYXIqIF9EZXN0aW5hdGlvbiwgY2hhciBjb25zdCogX1NvdXJjZSwgc2l6ZV90IF9Db3VudCk7CmludCBzdHJuY21wKGNoYXIgY29uc3QqIF9TdHIxLCBjaGFyIGNvbnN0KiBfU3RyMiwgc2l6ZV90IF9NYXhDb3VudCk7CmNoYXIqIHN0cm5jcHkoY2hhciogX0Rlc3RpbmF0aW9uLCBjaGFyIGNvbnN0KiBfU291cmNlLCBzaXplX3QgX0NvdW50KTsKc2l6ZV90IHN0cm5sZW4oY2hhciBjb25zdCogX1N0cmluZywgc2l6ZV90IF9NYXhDb3VudCk7CnN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cm5sZW5fcyhjaGFyIGNvbnN0KiBfU3RyaW5nLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RycGJyayhjaGFyIGNvbnN0KiBfU3RyLCBjaGFyIGNvbnN0KiBfQ29udHJvbCk7CnNpemVfdCBzdHJzcG4oY2hhciBjb25zdCogX1N0ciwgY2hhciBjb25zdCogX0NvbnRyb2wpOwpjaGFyKiBzdHJ0b2soY2hhciogX1N0cmluZywgY2hhciBjb25zdCogX0RlbGltaXRlcik7CiNpZiBkZWZpbmVkKF9fU1REQ19PV05FUlNISVBfXykgCmNoYXIqIF9Pd25lciBfT3B0IHN0cmR1cChjaGFyIGNvbnN0KiBfU3RyaW5nKTsKI2Vsc2UKY2hhciogc3RyZHVwKGNoYXIgY29uc3QqIF9TdHJpbmcpOwojZW5kaWYKaW50IHN0cmNtcGkoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyKTsKaW50IHN0cmljbXAoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyKTsKY2hhciogc3RybHdyKGNoYXIqIF9TdHJpbmcpOwppbnQgc3RybmljbXAoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RybnNldChjaGFyKiBfU3RyaW5nLCBpbnQgX1ZhbHVlLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RycmV2KGNoYXIqIF9TdHJpbmcpOwpjaGFyKiBzdHJzZXQoY2hhciogX1N0cmluZywgaW50IF9WYWx1ZSk7IGNoYXIqIHN0cnVwcihjaGFyKiBfU3RyaW5nKTsATm90ZTogaW5jbHVkaW5nIGZpbGU6AGVsc2UgX2NhdGNoX2xhYmVsXyVkOgBjdXJyZW50ICA6AC10YXJnZXQ9Yzk5AC1zdGQ9Yzk5AC10YXJnZXQ9Yzg5AFRLX0tFWVdPUkRfX0lOVDgAX0RlY2ltYWwxMjgAVEtfS0VZV09SRF9fREVDSU1BTDEyOABfX2ludDE2AFRLX0tFWVdPUkRfX0lOVDE2AF9faW50NjQAX0RlY2ltYWw2NABUS19LRVlXT1JEX19JTlQ2NABUS19LRVlXT1JEX19ERUNJTUFMNjQAX19pbnQzMgBfRGVjaW1hbDMyAFRLX0tFWVdPUkRfX0lOVDMyAFRLX0tFWVdPUkRfX0RFQ0lNQUwzMgAtdGFyZ2V0PWMxMQAtc3RkPWMxMQBhbGlnbiA+IDAAbGlzdC50YWlsLT5uZXh0ID09IDAAcF9pbml0X2RlY2xhcmF0b3ItPnBfZGVjbGFyYXRvci0+dHlwZS50eXBlX3NwZWNpZmllcl9mbGFncyA9PSAwAHBfb2JqZWN0LT5tZW1iZXJzLnNpemUgPT0gMABmbXQgIT0gMABhbGlnbiAhPSAwAGlmICgxKSAvKnRyeSovAC8qX0ltcGxpY2l0Ki8ALypyZXN0cmljdCovAC8qJXMqLwAvKltbbm9yZXR1cm5dXSovAGNhbm5vdCBhc3NpZ24gYSB0ZW1wb3Jhcnkgb3duZXIgdG8gbm8tb3duZXIgb2JqZWN0LgBVbmljb2RlIGNoYXJhY3RlciBsaXRlcmFscyBtYXkgbm90IGNvbnRhaW4gbXVsdGlwbGUgY2hhcmFjdGVycy4AdXNlIG9mICclcycgd2l0aCB0YWcgdHlwZSB0aGF0IGRvZXMgbm90IG1hdGNoIHByZXZpb3VzIGRlY2xhcmF0aW9uLgBzdHJ1Y3QgJyVzJyBpcyBpbmNvbXBsZXRlLgBDaGFyYWN0ZXIgdG9vIGxhcmdlIGZvciBlbmNsb3NpbmcgY2hhcmFjdGVyIGxpdGVyYWwgdHlwZS4AVGhlIG9iamVjdCAnJXMnIG1heSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpdHMgbGlmZXRpbWUgaGF2ZSBlbmRlZC4AaW52YWxpZCB0eXBlcyBmb3Igb3BlcmF0b3IgLQAsACoAIXRva2VuX2xpc3RfaXNfZW1wdHkobGlzdCkAKGN1cnJlbnQpACgoJXMpJXMpACgjJTAyZCAlcykAcF9leHByZXNzaW9uX25vZGUgPT0gTlVMTCB8fCAocF9leHByZXNzaW9uX25vZGUtPmZpcnN0X3Rva2VuICYmIHBfZXhwcmVzc2lvbl9ub2RlLT5sYXN0X3Rva2VuKQAobnVsbCkAci50YWlsID09IE5VTEwgfHwgIXRva2VuX2lzX2JsYW5rKHIudGFpbCkAbWlzc2luZyBtYWNybyBhcmd1bWVudCAoc2hvdWxkIGJlIGNoZWNrZWQgYmVmb3JlKQB0eXBlX2lzX2FycmF5KHBfdHlwZSkAdHlwZV9pc19wb2ludGVyX29yX2FycmF5KHBfdHlwZSkAIW1hY3JvX2FscmVhZHlfZXhwYW5kZWQobGlzdCwgbWFjcm8tPm5hbWUpACF0b2tlbl9pc19ibGFuayhpbnB1dF9saXN0LT5oZWFkKQAhdG9rZW5faXNfYmxhbmsobmV3X2xpc3QuaGVhZCkAYXNzZXJ0KF9fVkFfQVJHU19fKQAocC0+aGVhZCA9PSBOVUxMICYmIHAtPnRhaWwgPT0gTlVMTCkgfHwgKHAtPmhlYWQgIT0gTlVMTCAmJiBwLT50YWlsICE9IE5VTEwpACEoaW5wdXRfbGlzdC0+aGVhZC0+ZmxhZ3MgJiBUS19GTEFHX0hBU19ORVdMSU5FX0JFRk9SRSkAIShuZXdfbGlzdC5oZWFkLT5mbGFncyAmIFRLX0ZMQUdfSEFTX05FV0xJTkVfQkVGT1JFKQAhdG9rZW5fbGlzdF9pc19lbXB0eSgmbGlzdDIpACgoX0Jvb2wpMSkAKChfQm9vbCkwKQAoKHZvaWQqKTApAG1pc3NpbmcgKQBleHBlY3RlZCApACgAcF9icmFja2V0X2luaXRpYWxpemVyX2xpc3QtPmZpcnN0X3Rva2VuLT50eXBlID09ICd7JwBleHBlY3RlZCBkZWNsYXJhdGlvbiBub3QgJyVzJwBtZW1iZXIgJyVzJyBub3QgZm91bmQgaW4gc3RydWN0ICclcycAdXNpbmcgYSB1bmluaXRpYWxpemVkIG9iamVjdCAnJXMnAHVua25vd24gb3B0aW9uICclcycAc3RydWN0IG1lbWJlciAnJXMnIG5vdCBmb3VuZCBpbiAnJXMnAHVua25vd24gd2FybmluZyAnJXMnAGludmFsaWQgdHlwZSAnJXMnAG5vdCBmb3VuZCAnJXMnAGRpciA9ICclcycAaW1wbGljaXQgY29udmVyc2lvbiBmcm9tICdlbnVtICVzJyB0byAnZW51bSAlcycAb3AgPT0gJz09JyB8fCBvcCA9PSAnIT0nAHduYW1lWzBdID09ICctJwBleHBlY3RlZCAnfScgYmVmb3JlICcpJwBleHBlY3RlZCAnXScgYmVmb3JlICcpJwBwX2V4cHJlc3Npb25fbm9kZS0+Zmlyc3RfdG9rZW4tPnR5cGUgPT0gJygnAC8vIwB5b3UgY2FuIHVzZSAiYWRqYWNlbnQiICJzdHJpbmdzIgAsICJlcnJvciIAInplcm8iAFwiACB8IAB7IAAgZGlzY2FyZGluZyBjb25zdCBhdCBhcmd1bWVudCAAIGluY29tcGF0aWJsZSB0eXBlcyBhdCBhcmd1bWVudCAAc3RydWN0IAAgaW5jb21wYXRpYmxlIHR5cGVzIAB7ICVzIABlbnVtIABpZ25vcmluZyB0aGUgcmVzdWx0IG9mIG93bmVyIHR5cGUgAG9iamVjdCAnJXMnIGNhbiBiZSB1bmluaXRpYWxpemVkIABlbGlmIGRlZmluZWQgAGVsaWYgISBkZWZpbmVkIAAgLT4gACVwOiVzID09IAAjJTAyZCAlcyA9PSAAICVzIF90bXAgPSAAZXJyb3I6IAB3YXJuaW5nOiAAbm90ZTogABtbOTdtJXM6JWQ6JWQ6IAAlcyglZCwlZCk6IAAgICAgICAgICAgICAgICB9CgAjJTAyZCB7CgAgICAgICAgICAgICAgImFydGlmYWN0TG9jYXRpb24iOiB7CgAgICAgICAgInBoeXNpY2FsTG9jYXRpb24iOiB7CgAgICAgICAgICAgICAgICJyZWdpb24iOiB7CgAgICAgICJtZXNzYWdlIjogewoAICAgICAgICAgIHsKABtbOTFtZXJyb3I6IBtbOTdtJXMKABtbOTVtd2FybmluZzogG1s5N20lcwoAG1szNjsxbW5vdGU6IBtbOTdtJXMKAGV4cGVjdGVkIDolcwoAZXhwZWN0ZWQgdG9rZW4gJXMgZ290ICVzCgAlcyAlcwoAdGFnICVzCgBfU3RhdGljX2Fzc2VydCBmYWlsZWQgJXMKAHJlYWQgJXMKAGVycm9yOiAlcwoAd2FybmluZzogJXMKAG5vdGU6ICVzCgB0b28gZmV3IGFyZ3VtZW50cyBwcm92aWRlZCB0byBmdW5jdGlvbi1saWtlIG1hY3JvIGludm9jYXRpb24KABtbOTdtQ2FrZSAwLjguMhtbMG0KACNwcmFnbWEgb25jZQojZGVmaW5lIF9JT0ZCRiAweDAwMDAKI2RlZmluZSBfSU9MQkYgMHgwMDQwCiNkZWZpbmUgX0lPTkJGIDB4MDAwNAoKI2RlZmluZSBCVUZTSVogIDUxMgoKI2RlZmluZSBFT0YgICAgKC0xKQoKI2RlZmluZSBGSUxFTkFNRV9NQVggICAgMjYwCiNkZWZpbmUgRk9QRU5fTUFYICAgICAgIDIwCgojZGVmaW5lIExfdG1wbmFtICAgMjYwIC8vIF9NQVhfUEFUSAoKLyogU2VlayBtZXRob2QgY29uc3RhbnRzICovCgojZGVmaW5lIFNFRUtfQ1VSICAgIDEKI2RlZmluZSBTRUVLX0VORCAgICAyCiNkZWZpbmUgU0VFS19TRVQgICAgMAoKCiNkZWZpbmUgVE1QX01BWCAgICAgICAgIDIxNDc0ODM2NDcKCgoKdHlwZWRlZiBsb25nIGxvbmcgZnBvc190Owp0eXBlZGVmIGludCBGSUxFOwoKZXh0ZXJuIEZJTEUqIHN0ZGluOwpleHRlcm4gRklMRSogc3Rkb3V0OwpleHRlcm4gRklMRSogc3RkZXJyOwoKdHlwZWRlZiBpbnQgc2l6ZV90Owp0eXBlZGVmIHZvaWQqIHZhX2xpc3Q7CmludCByZW1vdmUoY29uc3QgY2hhciogZmlsZW5hbWUpOwppbnQgcmVuYW1lKGNvbnN0IGNoYXIqIG9sZCwgY29uc3QgY2hhciogbmV3cyk7CkZJTEUqIF9PcHQgdG1wZmlsZSh2b2lkKTsKY2hhciogdG1wbmFtKGNoYXIqIHMpOwojaWYgZGVmaW5lZChfX1NURENfT1dORVJTSElQX18pIAppbnQgZmNsb3NlKEZJTEUqIF9Pd25lciBzdHJlYW0pOwojZWxzZQppbnQgZmNsb3NlKEZJTEUqIHN0cmVhbSk7CiNlbmRpZgppbnQgZmZsdXNoKEZJTEUqIHN0cmVhbSk7CiNpZiBkZWZpbmVkKF9fU1REQ19PV05FUlNISVBfXykgCkZJTEUqIF9Pd25lciBfT3B0IGZvcGVuKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZpbGVuYW1lLCBjb25zdCBjaGFyKiByZXN0cmljdCBtb2RlKTsKRklMRSogX093bmVyIF9PcHQgZnJlb3Blbihjb25zdCBjaGFyKiByZXN0cmljdCBmaWxlbmFtZSwgY29uc3QgY2hhciogcmVzdHJpY3QgbW9kZSwgRklMRSogcmVzdHJpY3Qgc3RyZWFtKTsKI2Vsc2UKRklMRSogZm9wZW4oY29uc3QgY2hhciogcmVzdHJpY3QgZmlsZW5hbWUsIGNvbnN0IGNoYXIqIHJlc3RyaWN0IG1vZGUpOwpGSUxFKiBmcmVvcGVuKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZpbGVuYW1lLCBjb25zdCBjaGFyKiByZXN0cmljdCBtb2RlLCBGSUxFKiByZXN0cmljdCBzdHJlYW0pOwojZW5kaWYKdm9pZCBzZXRidWYoRklMRSogcmVzdHJpY3Qgc3RyZWFtLCBjaGFyKiByZXN0cmljdCBidWYpOwppbnQgc2V0dmJ1ZihGSUxFKiByZXN0cmljdCBzdHJlYW0sIGNoYXIqIHJlc3RyaWN0IGJ1ZiwgaW50IG1vZGUsIHNpemVfdCBzaXplKTsKaW50IGZwcmludGYoRklMRSogcmVzdHJpY3Qgc3RyZWFtLCBjb25zdCBjaGFyKiByZXN0cmljdCBmb3JtYXQsIC4uLik7CmludCBmc2NhbmYoRklMRSogcmVzdHJpY3Qgc3RyZWFtLCBjb25zdCBjaGFyKiByZXN0cmljdCBmb3JtYXQsIC4uLik7CmludCBwcmludGYoY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwppbnQgc2NhbmYoY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwppbnQgc25wcmludGYoY2hhciogcmVzdHJpY3Qgcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgLi4uKTsKaW50IHNwcmludGYoY2hhciogcmVzdHJpY3QgcywgY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwppbnQgc3NjYW5mKGNvbnN0IGNoYXIqIHJlc3RyaWN0IHMsIGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgLi4uKTsKaW50IHZmcHJpbnRmKEZJTEUqIHJlc3RyaWN0IHN0cmVhbSwgY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCB2YV9saXN0IGFyZyk7CmludCB2ZnNjYW5mKEZJTEUqIHJlc3RyaWN0IHN0cmVhbSwgY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCB2YV9saXN0IGFyZyk7CmludCB2cHJpbnRmKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgdmFfbGlzdCBhcmcpOwppbnQgdnNjYW5mKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgdmFfbGlzdCBhcmcpOwppbnQgcHV0cyhjb25zdCBjaGFyKiBzdHIpOwppbnQgZnB1dHMoY29uc3QgY2hhciogcmVzdHJpY3QgcywgRklMRSogcmVzdHJpY3Qgc3RyZWFtKTsKaW50IGdldGMoRklMRSogc3RyZWFtKTsKaW50IGdldGNoYXIodm9pZCk7CmludCBwdXRjKGludCBjLCBGSUxFKiBzdHJlYW0pOwppbnQgcHV0Y2hhcihpbnQgYyk7CmludCBwdXRzKGNvbnN0IGNoYXIqIHMpOwppbnQgdW5nZXRjKGludCBjLCBGSUxFKiBzdHJlYW0pOwppbnQgZmdldGMoRklMRSogc3RyZWFtKTsKc2l6ZV90IGZyZWFkKHZvaWQqIHJlc3RyaWN0IHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgRklMRSogcmVzdHJpY3Qgc3RyZWFtKTsKc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiByZXN0cmljdCBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEZJTEUqIHJlc3RyaWN0IHN0cmVhbSk7CmludCBmZ2V0cG9zKEZJTEUqIHJlc3RyaWN0IHN0cmVhbSwgZnBvc190KiByZXN0cmljdCBwb3MpOwppbnQgZnNlZWsoRklMRSogc3RyZWFtLCBsb25nIGludCBvZmZzZXQsIGludCB3aGVuY2UpOwppbnQgZnNldHBvcyhGSUxFKiBzdHJlYW0sIGNvbnN0IGZwb3NfdCogcG9zKTsKbG9uZyBpbnQgZnRlbGwoRklMRSogc3RyZWFtKTsKdm9pZCByZXdpbmQoRklMRSogc3RyZWFtKTsKdm9pZCBjbGVhcmVycihGSUxFKiBzdHJlYW0pOwppbnQgZmVvZihGSUxFKiBzdHJlYW0pOwppbnQgZmVycm9yKEZJTEUqIHN0cmVhbSk7CnZvaWQgcGVycm9yKGNvbnN0IGNoYXIqIHMpOwoKCgojaWZuZGVmIE5VTEwKI2RlZmluZSBOVUxMICgodm9pZCopMCkKI2VuZGlmCgAvLwojcHJhZ21hIG9uY2UKI2RlZmluZSBDSEFSX0JJVCAgICAgIDgKI2RlZmluZSBTQ0hBUl9NSU4gICAoLTEyOCkKI2RlZmluZSBTQ0hBUl9NQVggICAgIDEyNwojZGVmaW5lIFVDSEFSX01BWCAgICAgMHhmZgoKI2lmbmRlZiBfQ0hBUl9VTlNJR05FRAogICAgI2RlZmluZSBDSEFSX01JTiAgICBTQ0hBUl9NSU4KICAgICNkZWZpbmUgQ0hBUl9NQVggICAgU0NIQVJfTUFYCiNlbHNlCiAgICAjZGVmaW5lIENIQVJfTUlOICAgIDAKICAgICNkZWZpbmUgQ0hBUl9NQVggICAgVUNIQVJfTUFYCiNlbmRpZgoKI2RlZmluZSBNQl9MRU5fTUFYICAgIDUKI2RlZmluZSBTSFJUX01JTiAgICAoLTMyNzY4KQojZGVmaW5lIFNIUlRfTUFYICAgICAgMzI3NjcKI2RlZmluZSBVU0hSVF9NQVggICAgIDB4ZmZmZgojZGVmaW5lIElOVF9NSU4gICAgICgtMjE0NzQ4MzY0NyAtIDEpCiNkZWZpbmUgSU5UX01BWCAgICAgICAyMTQ3NDgzNjQ3CiNkZWZpbmUgVUlOVF9NQVggICAgICAweGZmZmZmZmZmCiNkZWZpbmUgTE9OR19NSU4gICAgKC0yMTQ3NDgzNjQ3TCAtIDEpCiNkZWZpbmUgTE9OR19NQVggICAgICAyMTQ3NDgzNjQ3TAojZGVmaW5lIFVMT05HX01BWCAgICAgMHhmZmZmZmZmZlVMCiNkZWZpbmUgTExPTkdfTUFYICAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3aTY0CiNkZWZpbmUgTExPTkdfTUlOICAgKC05MjIzMzcyMDM2ODU0Nzc1ODA3aTY0IC0gMSkKI2RlZmluZSBVTExPTkdfTUFYICAgIDB4ZmZmZmZmZmZmZmZmZmZmZnVpNjQKCiNkZWZpbmUgX0k4X01JTiAgICAgKC0xMjdpOCAtIDEpCiNkZWZpbmUgX0k4X01BWCAgICAgICAxMjdpOAojZGVmaW5lIF9VSThfTUFYICAgICAgMHhmZnVpOAoKI2RlZmluZSBfSTE2X01JTiAgICAoLTMyNzY3aTE2IC0gMSkKI2RlZmluZSBfSTE2X01BWCAgICAgIDMyNzY3aTE2CiNkZWZpbmUgX1VJMTZfTUFYICAgICAweGZmZmZ1aTE2CgojZGVmaW5lIF9JMzJfTUlOICAgICgtMjE0NzQ4MzY0N2kzMiAtIDEpCiNkZWZpbmUgX0kzMl9NQVggICAgICAyMTQ3NDgzNjQ3aTMyCiNkZWZpbmUgX1VJMzJfTUFYICAgICAweGZmZmZmZmZmdWkzMgoKI2RlZmluZSBfSTY0X01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdpNjQgLSAxKQojZGVmaW5lIF9JNjRfTUFYICAgICAgOTIyMzM3MjAzNjg1NDc3NTgwN2k2NAojZGVmaW5lIF9VSTY0X01BWCAgICAgMHhmZmZmZmZmZmZmZmZmZmZmdWk2NAogICAgICAgICNkZWZpbmUgU0laRV9NQVggMHhmZmZmZmZmZgoAICAgICAgICAgICAgICAgICAgImVuZENvbHVtbiI6ICVkCgAbWzk3bWNha2UgJXMgbWFpbi5jCgAgWyVzXQoAICAgICAgICAgXQoAICAgICAgImxvY2F0aW9ucyI6IFsKACAgICAgICAgICJsb2dpY2FsTG9jYXRpb25zIjogWwoAI3ByYWdtYSBvbmNlCgpkb3VibGUgYWNvcyhkb3VibGUgX194KTsKZG91YmxlIGFzaW4oZG91YmxlIF9feCk7CmRvdWJsZSBhdGFuKGRvdWJsZSBfX3gpOwpkb3VibGUgYXRhbjIoZG91YmxlIF9feSwgZG91YmxlIF9feCk7CmRvdWJsZSBjb3MoZG91YmxlIF9feCk7CmRvdWJsZSBzaW4oZG91YmxlIF9feCk7CmRvdWJsZSB0YW4oZG91YmxlIF9feCk7CmRvdWJsZSBjb3NoKGRvdWJsZSBfX3gpOwpkb3VibGUgc2luaChkb3VibGUgX194KTsKZG91YmxlIHRhbmgoZG91YmxlIF9feCk7CmRvdWJsZSBhY29zaChkb3VibGUgX194KTsKZG91YmxlIGFzaW5oKGRvdWJsZSBfX3gpOwpkb3VibGUgYXRhbmgoZG91YmxlIF9feCk7CmRvdWJsZSBleHAoZG91YmxlIF9feCk7CmRvdWJsZSBmcmV4cChkb3VibGUgX194LCBpbnQqIF9fZXhwb25lbnQpOwpkb3VibGUgbGRleHAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOwpkb3VibGUgbG9nKGRvdWJsZSBfX3gpOwpkb3VibGUgbG9nMTAoZG91YmxlIF9feCk7CmRvdWJsZSBtb2RmKGRvdWJsZSBfX3gsIGRvdWJsZSogX19pcHRyKTsKZG91YmxlIGV4cG0xKGRvdWJsZSBfX3gpOwpkb3VibGUgbG9nMXAoZG91YmxlIF9feCk7CmRvdWJsZSBsb2diKGRvdWJsZSBfX3gpOwpkb3VibGUgZXhwMihkb3VibGUgX194KTsKZG91YmxlIGxvZzIoZG91YmxlIF9feCk7CmRvdWJsZSBwb3coZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBzcXJ0KGRvdWJsZSBfX3gpOwpkb3VibGUgaHlwb3QoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBjYnJ0KGRvdWJsZSBfX3gpOwpkb3VibGUgY2VpbChkb3VibGUgX194KTsKZG91YmxlIGZhYnMoZG91YmxlIF9feCk7CmRvdWJsZSBmbG9vcihkb3VibGUgX194KTsKZG91YmxlIGZtb2QoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmludCBpc2luZihkb3VibGUgX192YWx1ZSk7CmludCBmaW5pdGUoZG91YmxlIF9fdmFsdWUpOwpkb3VibGUgZHJlbShkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIHNpZ25pZmljYW5kKGRvdWJsZSBfX3gpOwpkb3VibGUgY29weXNpZ24oZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBuYW4oY29uc3QgY2hhciogX190YWdiKTsKaW50IGlzbmFuKGRvdWJsZSBfX3ZhbHVlKTsKZG91YmxlIGowKGRvdWJsZSk7CmRvdWJsZSBqMShkb3VibGUpOwpkb3VibGUgam4oaW50LCBkb3VibGUpOwpkb3VibGUgeTAoZG91YmxlKTsKZG91YmxlIHkxKGRvdWJsZSk7CmRvdWJsZSB5bihpbnQsIGRvdWJsZSk7CmRvdWJsZSBlcmYoZG91YmxlKTsKZG91YmxlIGVyZmMoZG91YmxlKTsKZG91YmxlIGxnYW1tYShkb3VibGUpOwpkb3VibGUgdGdhbW1hKGRvdWJsZSk7CmRvdWJsZSBnYW1tYShkb3VibGUpOwpkb3VibGUgbGdhbW1hX3IoZG91YmxlLCBpbnQqIF9fc2lnbmdhbXApOwpkb3VibGUgcmludChkb3VibGUgX194KTsKZG91YmxlIG5leHRhZnRlcihkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIG5leHR0b3dhcmQoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKZG91YmxlIHJlbWFpbmRlcihkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIHNjYWxibihkb3VibGUgX194LCBpbnQgX19uKTsKaW50IGlsb2diKGRvdWJsZSBfX3gpOwpkb3VibGUgc2NhbGJsbihkb3VibGUgX194LCBsb25nIGludCBfX24pOwpkb3VibGUgbmVhcmJ5aW50KGRvdWJsZSBfX3gpOwpkb3VibGUgcm91bmQoZG91YmxlIF9feCk7CmRvdWJsZSB0cnVuYyhkb3VibGUgX194KTsKZG91YmxlIHJlbXF1byhkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQqIF9fcXVvKTsKbG9uZyBpbnQgbHJpbnQoZG91YmxlIF9feCk7CmxvbmcgbG9uZyBpbnQgbGxyb3VuZChkb3VibGUgX194KTsKZG91YmxlIGZkaW0oZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBmbWF4KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwpkb3VibGUgZm1pbihkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIGZtYShkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KTsKZG91YmxlIHNjYWxiKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOwpmbG9hdCBhY29zZihmbG9hdCBfX3gpOwpmbG9hdCBhc2luZihmbG9hdCBfX3gpOwpmbG9hdCBhdGFuZihmbG9hdCBfX3gpOwpmbG9hdCBhdGFuMmYoZmxvYXQgX195LCBmbG9hdCBfX3gpOwpmbG9hdCBjb3NmKGZsb2F0IF9feCk7CmZsb2F0IHNpbmYoZmxvYXQgX194KTsKZmxvYXQgdGFuZihmbG9hdCBfX3gpOwpmbG9hdCBjb3NoZihmbG9hdCBfX3gpOwpmbG9hdCBzaW5oZihmbG9hdCBfX3gpOwpmbG9hdCB0YW5oZihmbG9hdCBfX3gpOwpmbG9hdCBhY29zaGYoZmxvYXQgX194KTsKZmxvYXQgYXNpbmhmKGZsb2F0IF9feCk7CmZsb2F0IGF0YW5oZihmbG9hdCBfX3gpOwpmbG9hdCBleHBmKGZsb2F0IF9feCk7CmZsb2F0IGZyZXhwZihmbG9hdCBfX3gsIGludCogX19leHBvbmVudCk7CmZsb2F0IGxkZXhwZihmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsKZmxvYXQgbG9nZihmbG9hdCBfX3gpOwpmbG9hdCBsb2cxMGYoZmxvYXQgX194KTsgZmxvYXQgX19sb2cxMGYoZmxvYXQgX194KTsKZmxvYXQgbW9kZmYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKTsKZmxvYXQgZXhwbTFmKGZsb2F0IF9feCk7CmZsb2F0IGxvZzFwZihmbG9hdCBfX3gpOwpmbG9hdCBsb2diZihmbG9hdCBfX3gpOwpmbG9hdCBleHAyZihmbG9hdCBfX3gpOwpmbG9hdCBsb2cyZihmbG9hdCBfX3gpOwpmbG9hdCBwb3dmKGZsb2F0IF9feCwgZmxvYXQgX195KTsKZmxvYXQgc3FydGYoZmxvYXQgX194KTsKZmxvYXQgaHlwb3RmKGZsb2F0IF9feCwgZmxvYXQgX195KTsKZmxvYXQgY2JydGYoZmxvYXQgX194KTsKZmxvYXQgY2VpbGYoZmxvYXQgX194KTsKZmxvYXQgZmFic2YoZmxvYXQgX194KTsKZmxvYXQgZmxvb3JmKGZsb2F0IF9feCk7CmZsb2F0IGZtb2RmKGZsb2F0IF9feCwgZmxvYXQgX195KTsgCmludCBpc2luZmYoZmxvYXQgX192YWx1ZSk7CmludCBmaW5pdGVmKGZsb2F0IF9fdmFsdWUpOwpmbG9hdCBkcmVtZihmbG9hdCBfX3gsIGZsb2F0IF9feSk7CmZsb2F0IHNpZ25pZmljYW5kZihmbG9hdCBfX3gpOyAKZmxvYXQgY29weXNpZ25mKGZsb2F0IF9feCwgZmxvYXQgX195KTsgCmZsb2F0IG5hbmYoY29uc3QgY2hhciogX190YWdiKTsgCmludCBpc25hbmYoZmxvYXQgX192YWx1ZSk7CmZsb2F0IGowZihmbG9hdCk7IApmbG9hdCBqMWYoZmxvYXQpOyAKZmxvYXQgam5mKGludCwgZmxvYXQpOyAKZmxvYXQgeTBmKGZsb2F0KTsgCmZsb2F0IHkxZihmbG9hdCk7IApmbG9hdCB5bmYoaW50LCBmbG9hdCk7IApmbG9hdCBlcmZmKGZsb2F0KTsgCmZsb2F0IGVyZmNmKGZsb2F0KTsKZmxvYXQgbGdhbW1hZihmbG9hdCk7CmZsb2F0IHRnYW1tYWYoZmxvYXQpOwpmbG9hdCBnYW1tYWYoZmxvYXQpOyAKZmxvYXQgbGdhbW1hZl9yKGZsb2F0LCBpbnQqIF9fc2lnbmdhbXApOyAKZmxvYXQgcmludGYoZmxvYXQgX194KTsgCmZsb2F0IG5leHRhZnRlcmYoZmxvYXQgX194LCBmbG9hdCBfX3kpOyAKZmxvYXQgbmV4dHRvd2FyZGYoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKZmxvYXQgcmVtYWluZGVyZihmbG9hdCBfX3gsIGZsb2F0IF9feSk7IApmbG9hdCBzY2FsYm5mKGZsb2F0IF9feCwgaW50IF9fbik7IAppbnQgaWxvZ2JmKGZsb2F0IF9feCk7IApmbG9hdCBzY2FsYmxuZihmbG9hdCBfX3gsIGxvbmcgaW50IF9fbik7IApmbG9hdCBuZWFyYnlpbnRmKGZsb2F0IF9feCk7IApmbG9hdCByb3VuZGYoZmxvYXQgX194KTsgCmZsb2F0IHRydW5jZihmbG9hdCBfX3gpOyAKZmxvYXQgcmVtcXVvZihmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50KiBfX3F1byk7IApsb25nIGludCBscmludGYoZmxvYXQgX194KTsgCmxvbmcgbG9uZyBpbnQgbGxyb3VuZGYoZmxvYXQgX194KTsgCmZsb2F0IGZkaW1mKGZsb2F0IF9feCwgZmxvYXQgX195KTsKZmxvYXQgZm1heGYoZmxvYXQgX194LCBmbG9hdCBfX3kpOyAKZmxvYXQgZm1pbmYoZmxvYXQgX194LCBmbG9hdCBfX3kpOwpmbG9hdCBmbWFmKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opOyAKZmxvYXQgc2NhbGJmKGZsb2F0IF9feCwgZmxvYXQgX19uKTsgCmxvbmcgZG91YmxlIGFjb3NsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBhc2lubChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgYXRhbmwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGF0YW4ybChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBjb3NsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBzaW5sKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSB0YW5sKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBjb3NobChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSBzaW5obChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSB0YW5obChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSBhY29zaGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGFzaW5obChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgYXRhbmhsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBleHBsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBmcmV4cGwobG9uZyBkb3VibGUgX194LCBpbnQqIF9fZXhwb25lbnQpOyAKbG9uZyBkb3VibGUgbGRleHBsKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyAKbG9uZyBkb3VibGUgbG9nbChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgbG9nMTBsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBtb2RmbChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpOyAKbG9uZyBkb3VibGUgZXhwbTFsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBsb2cxcGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGxvZ2JsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBleHAybChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgbG9nMmwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIHBvd2wobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKbG9uZyBkb3VibGUgc3FydGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGh5cG90bChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IApsb25nIGRvdWJsZSBjYnJ0bChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgY2VpbGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGZhYnNsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBmbG9vcmwobG9uZyBkb3VibGUgX194KTsKbG9uZyBkb3VibGUgZm1vZGwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKaW50IGlzaW5mbChsb25nIGRvdWJsZSBfX3ZhbHVlKTsKaW50IGZpbml0ZWwobG9uZyBkb3VibGUgX192YWx1ZSk7CmxvbmcgZG91YmxlIGRyZW1sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgCmxvbmcgZG91YmxlIHNpZ25pZmljYW5kbChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgCmxvbmcgZG91YmxlIG5hbmwoY29uc3QgY2hhciogX190YWdiKTsgCmludCBpc25hbmwobG9uZyBkb3VibGUgX192YWx1ZSk7CmxvbmcgZG91YmxlIGowbChsb25nIGRvdWJsZSk7IApsb25nIGRvdWJsZSBqMWwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgam5sKGludCwgbG9uZyBkb3VibGUpOwpsb25nIGRvdWJsZSB5MGwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgeTFsKGxvbmcgZG91YmxlKTsgCmxvbmcgZG91YmxlIHlubChpbnQsIGxvbmcgZG91YmxlKTsKbG9uZyBkb3VibGUgZXJmbChsb25nIGRvdWJsZSk7IApsb25nIGRvdWJsZSBlcmZjbChsb25nIGRvdWJsZSk7CmxvbmcgZG91YmxlIGxnYW1tYWwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgdGdhbW1hbChsb25nIGRvdWJsZSk7IApsb25nIGRvdWJsZSBnYW1tYWwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgbGdhbW1hbF9yKGxvbmcgZG91YmxlLCBpbnQqIF9fc2lnbmdhbXApOyAKbG9uZyBkb3VibGUgcmludGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIG5leHRhZnRlcmwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwpsb25nIGRvdWJsZSByZW1haW5kZXJsKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgCmxvbmcgZG91YmxlIHNjYWxibmwobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsgCmludCBpbG9nYmwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIHNjYWxibG5sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsgCmxvbmcgZG91YmxlIG5lYXJieWludGwobG9uZyBkb3VibGUgX194KTsKbG9uZyBkb3VibGUgcm91bmRsKGxvbmcgZG91YmxlIF9feCk7CmxvbmcgZG91YmxlIHRydW5jbChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSByZW1xdW9sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQqIF9fcXVvKTsKbG9uZyBpbnQgbHJpbnRsKGxvbmcgZG91YmxlIF9feCk7CmxvbmcgbG9uZyBpbnQgbGxyb3VuZGwobG9uZyBkb3VibGUgX194KTsKbG9uZyBkb3VibGUgZmRpbWwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwpsb25nIGRvdWJsZSBmbWF4bChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CmxvbmcgZG91YmxlIGZtaW5sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKbG9uZyBkb3VibGUgZm1hbChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KTsKbG9uZyBkb3VibGUgc2NhbGJsKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKTsKAC0tLSBiZWdpbiBvZiBzY29wZS0tLQoALS0tIGVuZCBvZiBzY29wZS0tLQoAICAgICAgICAgICAgICB9LAoAICAgICAgICAgICAgICAgICAgInN0YXJ0Q29sdW1uIjogJWQsCgAgICAgICAgICAgICAgICAgICAic3RhcnRMaW5lIjogJWQsCgAgICAgICAgICAgICAgICAgICAiZW5kTGluZSI6ICVkLAoAICAgICAicnVsZUlkIjoiJXMiLAoAICAgICAgICAgICAgICAiZGVjb3JhdGVkTmFtZSI6ICIlcyIsCgAgICAgICAgICAgICAgICJmdWxseVF1YWxpZmllZE5hbWUiOiAiJXMiLAoAICAgICAibGV2ZWwiOiJ3YXJuaW5nIiwKACAgICAgICAgICAgICAgICAgInVyaSI6ICJmaWxlOi8vLyVzIgoAICAgICAgICAgICAgInRleHQiOiAiJXMiCgAgICAgICAgICAgICAgICJraW5kIjogIiVzIgoAI2RlZmluZSBfX1RJTUVfXyAiJTAyZDolMDJkOiUwMmQiCgAjZGVmaW5lIF9fREFURV9fICIlcyAlMmQgJWQiCgBleHBlY3RlZCBFT0YgCgAKI2lmZGVmIE5ERUJVRwojZGVmaW5lIGFzc2VydCguLi4pICgodm9pZCkwKSNlbHNlI2RlZmluZSBhc3NlcnQoLi4uKSBhc3NlcnQoX19WQV9BUkdTX18pCiNlbmRpZgoKACNpZm5kZWYgX19PV05FUlNISVBfSF9fCiNkZWZpbmUgX19PV05FUlNISVBfSF9fCgojcHJhZ21hIG93bmVyc2hpcCBlbmFibGUKI2lmZGVmIF9fU1REQ19PV05FUlNISVBfXwojZGVmaW5lIG91dCBfT3V0CiNkZWZpbmUgb3B0IF9PcHQKI2RlZmluZSBvd25lciBfT3duZXIKI2RlZmluZSBvYmpfb3duZXIgIF9PYmpfb3duZXIKI2RlZmluZSB2aWV3IF9WaWV3CgojZWxzZQojZGVmaW5lIG91dCAKI2RlZmluZSBvcHQgCiNkZWZpbmUgb3duZXIKI2RlZmluZSBvYmpfb3duZXIKI2RlZmluZSB2aWV3CiNkZWZpbmUgc3RhdGljX2RlYnVnKHgpCiNkZWZpbmUgc3RhdGljX3NldCh4LCBzKQojZW5kaWYKCiNlbmRpZgoKAAojZGVmaW5lIHVucmVhY2hhYmxlKCkgZG8ge30gd2hpbGUoMCkgCnR5cGVkZWYgbG9uZyBpbnQgcHRyZGlmZl90Owp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsKdHlwZWRlZiBpbnQgd2NoYXJfdDsKdHlwZWRlZiBzdHJ1Y3QgewogIGxvbmcgbG9uZyBfX21heF9hbGlnbl9sbDsKICBsb25nIGRvdWJsZSBfX21heF9hbGlnbl9sZDsKfSBtYXhfYWxpZ25fdDsKCnR5cGVkZWYgdHlwZW9mKG51bGxwdHIpIG51bGxwdHJfdDsKCgAjZGVmaW5lIF9fQ0FLRV9fIDIwMjMxMUwKI2RlZmluZSBfX1NURENfVkVSU0lPTl9fIDIwMjMxMUwKI2RlZmluZSBfX0ZJTEVfXyAiX19GSUxFX18iCiNkZWZpbmUgX19MSU5FX18gMAojZGVmaW5lIF9fQ09VTlRFUl9fIDAKI2RlZmluZSBfQ09OU09MRQojZGVmaW5lIF9fU1REQ19PV05FUlNISVBfXyAxCiNkZWZpbmUgX1dfRElWSVpJT05fQllfWkVST18gMjkKCgAjcHJhZ21hIG9uY2UKCmludCogX2Vycm5vKHZvaWQpOwojZGVmaW5lIGVycm5vICgqX2Vycm5vKCkpCgoKI2RlZmluZSBFUEVSTSAgICAgICAgICAgMQojZGVmaW5lIEVOT0VOVCAgICAgICAgICAyCiNkZWZpbmUgRVNSQ0ggICAgICAgICAgIDMKI2RlZmluZSBFSU5UUiAgICAgICAgICAgNAojZGVmaW5lIEVJTyAgICAgICAgICAgICA1CiNkZWZpbmUgRU5YSU8gICAgICAgICAgIDYKI2RlZmluZSBFMkJJRyAgICAgICAgICAgNwojZGVmaW5lIEVOT0VYRUMgICAgICAgICA4CiNkZWZpbmUgRUJBREYgICAgICAgICAgIDkKI2RlZmluZSBFQ0hJTEQgICAgICAgICAgMTAKI2RlZmluZSBFQUdBSU4gICAgICAgICAgMTEKI2RlZmluZSBFTk9NRU0gICAgICAgICAgMTIKI2RlZmluZSBFQUNDRVMgICAgICAgICAgMTMKI2RlZmluZSBFRkFVTFQgICAgICAgICAgMTQKI2RlZmluZSBFQlVTWSAgICAgICAgICAgMTYKI2RlZmluZSBFRVhJU1QgICAgICAgICAgMTcKI2RlZmluZSBFWERFViAgICAgICAgICAgMTgKI2RlZmluZSBFTk9ERVYgICAgICAgICAgMTkKI2RlZmluZSBFTk9URElSICAgICAgICAgMjAKI2RlZmluZSBFSVNESVIgICAgICAgICAgMjEKI2RlZmluZSBFTkZJTEUgICAgICAgICAgMjMKI2RlZmluZSBFTUZJTEUgICAgICAgICAgMjQKI2RlZmluZSBFTk9UVFkgICAgICAgICAgMjUKI2RlZmluZSBFRkJJRyAgICAgICAgICAgMjcKI2RlZmluZSBFTk9TUEMgICAgICAgICAgMjgKI2RlZmluZSBFU1BJUEUgICAgICAgICAgMjkKI2RlZmluZSBFUk9GUyAgICAgICAgICAgMzAKI2RlZmluZSBFTUxJTksgICAgICAgICAgMzEKI2RlZmluZSBFUElQRSAgICAgICAgICAgMzIKI2RlZmluZSBFRE9NICAgICAgICAgICAgMzMKI2RlZmluZSBFREVBRExLICAgICAgICAgMzYKI2RlZmluZSBFTkFNRVRPT0xPTkcgICAgMzgKI2RlZmluZSBFTk9MQ0sgICAgICAgICAgMzkKI2RlZmluZSBFTk9TWVMgICAgICAgICAgNDAKI2RlZmluZSBFTk9URU1QVFkgICAgICAgNDEKCgovLyBTdXBwb3J0IEVERUFETE9DSyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIE1pY3Jvc29mdCBDIHZlcnNpb25zCiNkZWZpbmUgRURFQURMT0NLICAgICAgIEVERUFETEsKCiNkZWZpbmUgRUFERFJJTlVTRSAgICAgIDEwMAojZGVmaW5lIEVBRERSTk9UQVZBSUwgICAxMDEKI2RlZmluZSBFQUZOT1NVUFBPUlQgICAgMTAyCiNkZWZpbmUgRUFMUkVBRFkgICAgICAgIDEwMwojZGVmaW5lIEVCQURNU0cgICAgICAgICAxMDQKI2RlZmluZSBFQ0FOQ0VMRUQgICAgICAgMTA1CiNkZWZpbmUgRUNPTk5BQk9SVEVEICAgIDEwNgojZGVmaW5lIEVDT05OUkVGVVNFRCAgICAxMDcKI2RlZmluZSBFQ09OTlJFU0VUICAgICAgMTA4CiNkZWZpbmUgRURFU1RBRERSUkVRICAgIDEwOQojZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAxMTAKI2RlZmluZSBFSURSTSAgICAgICAgICAgMTExCiNkZWZpbmUgRUlOUFJPR1JFU1MgICAgIDExMgojZGVmaW5lIEVJU0NPTk4gICAgICAgICAxMTMKI2RlZmluZSBFTE9PUCAgICAgICAgICAgMTE0CiNkZWZpbmUgRU1TR1NJWkUgICAgICAgIDExNQojZGVmaW5lIEVORVRET1dOICAgICAgICAxMTYKI2RlZmluZSBFTkVUUkVTRVQgICAgICAgMTE3CiNkZWZpbmUgRU5FVFVOUkVBQ0ggICAgIDExOAojZGVmaW5lIEVOT0JVRlMgICAgICAgICAxMTkKI2RlZmluZSBFTk9EQVRBICAgICAgICAgMTIwCiNkZWZpbmUgRU5PTElOSyAgICAgICAgIDEyMQojZGVmaW5lIEVOT01TRyAgICAgICAgICAxMjIKI2RlZmluZSBFTk9QUk9UT09QVCAgICAgMTIzCiNkZWZpbmUgRU5PU1IgICAgICAgICAgIDEyNAojZGVmaW5lIEVOT1NUUiAgICAgICAgICAxMjUKI2RlZmluZSBFTk9UQ09OTiAgICAgICAgMTI2CiNkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDEyNwojZGVmaW5lIEVOT1RTT0NLICAgICAgICAxMjgKI2RlZmluZSBFTk9UU1VQICAgICAgICAgMTI5CiNkZWZpbmUgRU9QTk9UU1VQUCAgICAgIDEzMAojZGVmaW5lIEVPVEhFUiAgICAgICAgICAxMzEKI2RlZmluZSBFT1ZFUkZMT1cgICAgICAgMTMyCiNkZWZpbmUgRU9XTkVSREVBRCAgICAgIDEzMwojZGVmaW5lIEVQUk9UTyAgICAgICAgICAxMzQKI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgMTM1CiNkZWZpbmUgRVBST1RPVFlQRSAgICAgIDEzNgojZGVmaW5lIEVUSU1FICAgICAgICAgICAxMzcKI2RlZmluZSBFVElNRURPVVQgICAgICAgMTM4CiNkZWZpbmUgRVRYVEJTWSAgICAgICAgIDEzOQojZGVmaW5lIEVXT1VMREJMT0NLICAgICAxNDAKCgAAAABolQEAAAAAAAAAAAAAAAAAAAAAANF0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAAGQAKABkZGQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAAZABEKGRkZAwoHAAEACQsYAAAJBgsAAAsABhkAAAAZGRkAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAGQAKDRkZGQANAAACAAkOAAAACQAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABMAAAAAEwAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAABA8AAAAACRAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAaGhoAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAXAAAAABcAAAAACRQAAAAAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAFQAAAAAVAAAAAAkWAAAAAAAWAAAWAAAwMTIzNDU2Nzg5QUJDREVG"); + base64DecodeToExistingUint8Array(bufferView, 65536, "fgA7ICVzIHJldHVybiBfdG1wO30AfSBlbHNlIHtfY2F0Y2hfbGFiZWxfJWQ6O30Aey4uLn0Abm90IGZvbGxvd2luZyBjb3JyZWN0IGNsb3NlIGJyYWNlIHN0eWxlIH0AICUqcyB8ACAlcyB8AG5vdCBmb2xsb3dpbmcgY29ycmVjdCBicmFjZSBzdHlsZSB7AHRva2VuX2xpc3RfaXNfZW1wdHkAcG9pbnRlZCBvYmplY3QgbWF5IGJlIG5vdCBlbXB0eQBvYmplY3QgJyVzJyBtYXkgYmUgbm90IGVtcHR5AGluZmluaXR5AHNhZmV0eQB0cnkAX0ltYWdpbmFyeQBmbG93X3Zpc2l0X2N0eF9kZXN0cm95AG93bmVyX2hhc2htYXBfZGVzdHJveQBhbnkAX2lzX2FycmF5AG51bGwtYXMtYXJyYXkAIHBhc3NpbmcgbnVsbCBhcyBhcnJheQB1c2luZyBpbmRpcmVjdGlvbiAnLT4nIGluIGFycmF5AGluZGV4ICVkIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkALXRhcmdldD1jeHgALXN0ZD1jeHgAX0NvbXBsZXgAc3RhdGljX2RlYnVnX2V4AC10YXJnZXQ9YzJ4AC1zdGQ9YzJ4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAXHgleAAweCV4AHRocm93AGZsb3cAdmlldwBfVmlldwAtc3R5bGU9Z251ACVsbHUALW5vLW91dHB1dAAtbXN2Yy1vdXRwdXQAX091dABfaXNfY29uc3QAIGNvbnN0AG1hY3JvX2NvcHlfcmVwbGFjZW1lbnRfbGlzdAB2aXNpdF9icmFja2V0X2luaXRpYWxpemVyX2xpc3QAaWRlbnRpZmllcl9saXN0AHRva2VuX2xpc3RfYXBwZW5kX2xpc3QAc2hvcnQAc3RhdGljX2Fzc2VydABfU3RhdGljX2Fzc2VydAAtZGlzYWJsZS1hc3NlcnQAZXNjYXBlX3NlcXVlbmNlc19kZWNvZGVfb3B0AF9PcHQAdHlwZV9saXN0X3B1c2hfZnJvbnQAX2lzX2Zsb2F0aW5nX3BvaW50AGFycmF5LXBhcmFtZXRlci1hc3NpZ25tZW50AGx2YWx1ZSByZXF1aXJlZCBhcyBsZWZ0IG9wZXJhbmQgb2YgYXNzaWdubWVudABtdWx0aS1saW5lIC8vY29tbWVudABtaXNzaW5nIGVuZCBvZiBjb21tZW50AHRyeV9zdGF0ZW1lbnQAZmxvd192aXNpdF9mb3Jfc3RhdGVtZW50AGZsb3dfdmlzaXRfanVtcF9zdGF0ZW1lbnQAZm9ybWF0X3Zpc2l0X2p1bXBfc3RhdGVtZW50AGZsb3dfdmlzaXRfc2VsZWN0aW9uX3N0YXRlbWVudABmbG93X3Zpc2l0X2l0ZXJhdGlvbl9zdGF0ZW1lbnQAZmxvd192aXNpdF9pZl9zdGF0ZW1lbnQAZmxvd192aXNpdF93aGlsZV9zdGF0ZW1lbnQAZmxvd192aXNpdF9kb193aGlsZV9zdGF0ZW1lbnQAZmxvd192aXNpdF91bmxhYmVsZWRfc3RhdGVtZW50AGZvcm1hdF92aXNpdF91bmxhYmVsZWRfc3RhdGVtZW50AGNvbmRpdGlvbmFsLWNvbnN0YW50AF9CaXRJbnQAZGVmYXVsdABleHBlY3RlZCBpbnRlZ2VyIHR5cGUgb24gcmlnaHQALXN0eWxlPW1pY3Jvc29mdABleHBlY3RlZCBpbnRlZ2VyIHR5cGUgb24gbGVmdABzdGF0aWNfc2V0AGdldF9hbGlnbm9mX3N0cnVjdABnZXRfc2l6ZW9mX3N0cnVjdAByZXN0cmljdABzZXRfb2JqZWN0AGV4cGFuZF9wb2ludGVyX29iamVjdAB1c2luZy1tb3ZlZC1vYmplY3QAYXNzaWdubWVudCBvZiByZWFkLW9ubHkgb2JqZWN0AG51bGwgb2JqZWN0AG1heWJlIHVzaW5nIGEgdW5pbml0aWFsaXplZCBvYmplY3QAZGVyZWZlcmVuY2UgYSBOVUxMIG9iamVjdABwYXNzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgYXJndW1lbnQgJyVzJyBvYmplY3QAcmV0dXJuaW5nIGFuIHVuaW5pdGlhbGl6ZWQgJyVzJyBvYmplY3QAcmVhZGluZyBhbiB1bmluaXRpYWxpemVkICclcycgb2JqZWN0AGZsb2F0AG51bGxwdHJfdABjb2xsZWN0X21hY3JvX2FyZ3VtZW50cwByZXBsYWNlX21hY3JvX2FyZ3VtZW50cwB0b28gbWFueSBhcmd1bWVudHMAdHlwZW9mIHVzZWQgaW4gYXJyYXkgYXJndW1lbnRzAHRvbyBmZXcgYXJndW1lbnRzAHVzZSBzbmFrZV9jYXNlIGZvciBhcmd1bWVudHMALXJlbW92ZS1jb21tZW50cwBhZGRyZXNzAHVzZSBVUFBFUkNBU0UgZm9yIGVudW1lcmF0b3JzAG9ial9vd25lciBxdWFsaWZpZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBvaW50ZXJzAHByb2Nlc3NfaWRlbnRpZmllcnMAZGlzY2FyZGVkLXF1YWxpZmllcnMAcHJpbnRfdHlwZV9xdWFsaWZpZXJfc3BlY2lmaWVycwBkZWNsYXJhdGlvbl9zcGVjaWZpZXJzAHVzZSBzbmFrZV9jYXNlIGZvciBzdHJ1Y3QgbWVtYmVycwB1c2UgU0NSRUFNSU5HX0NBU0UgZm9yIG1hY3JvcwB0b2tlbiAnJXMnIGlzIG5vdCB2YWxpZCBpbiBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbnMALWR1bXAtcHAtdG9rZW5zAC1kdW1wLXRva2VucwAtbnVsbGNoZWNrcwBpbnZhbGlkIGFyZ3MAdXNlIHNuYWtlX2Nhc2UgZm9yIHN0cnVjdC91bmlvbiB0YWdzAHVzZSBjYW1lbENhc2UgZm9yIHN0cnVjdC91bmlvbiB0YWdzAHVzZSBzbmFrZV9jYXNlIGZvciBlbnVtIHRhZ3MAdXNlIFBhc2NhbENhc2UgZm9yIGVudW0gdGFncwBfTm9yZXR1cm4gaXMgZGVwcmVjYXRlZCB1c2UgYXR0cmlidXRlcwBpbmNvbXBhdGlibGUgcG9pbnRlciB0eXBlcwBpbmNvbXBhdGlibGUgdHlwZXMAdXNlIHNuYWtlX2Nhc2UgZm9yIGxvY2FsIHZhcmlhYmxlcwB1c2UgY2FtZWxDYXNlIGZvciBsb2NhbCB2YXJpYWJsZXMAdXNlIHNuYWtlX2Nhc2UgZ2xvYmFsIHZhcmlhYmxlcwB1c2UgcHJlZml4IHNfIGZvciBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcwAtc2hvd0luY2x1ZGVzAG91dC1vZi1ib3VuZHMAYWxpZ25hcwBfQWxpZ25hcwAlcyVzAC1XJXMAJXMtPiVzACVzLyVzACVzLiVzAColcwBzdHJ1Y3QgJXMAJXMgJXMAaW52YWxpZCBwYXJhbWV0ZXIgJXMAZW51bSAlcwBleGVwYXRoICVzAGV4cGVjdGVkICVzAHN0YXRpYyAlcwBfaGFzX2F0dHIAX2RlbF9hdHRyAF9hZGRfYXR0cgBudWxscHRyAGNvbnN0ZXhwcgBtaXNzaW5nLWRlc3RydWN0b3IAZmxvd192aXNpdF9pbml0X2RlY2xhcmF0b3IAcF9kZWNsYXJhdGlvbi0+aW5pdF9kZWNsYXJhdG9yX2xpc3QuaGVhZC0+cF9kZWNsYXJhdG9yLT5kaXJlY3RfZGVjbGFyYXRvci0+ZnVuY3Rpb25fZGVjbGFyYXRvcgBtYWtlX3R5cGVfdXNpbmdfZGVjbGFyYXRvcgBoaWRlLWRlY2xhcmF0b3IAc3RhdGljIG9yIHR5cGUgcXVhbGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gbm9uLXBhcmFtZXRlciBhcnJheSBkZWNsYXJhdG9yACclcyc6IHVucmVmZXJlbmNlZCBkZWNsYXJhdG9yACNlcnJvcgBleHByZXNzaW9uIGVycm9yAGludGVybmFsIGVycm9yAGZvcgBkaXIALWZhbmFseXplcgBlbWJlZF90b2tlbml6ZXIAcmVnaXN0ZXIAX2lzX3BvaW50ZXIAdHlwZV9wYXJhbV9hcnJheV90b19wb2ludGVyAHR5cGVfcmVtb3ZlX3BvaW50ZXIAc3Vic2NyaXB0ZWQgdmFsdWUgaXMgbmVpdGhlciBhcnJheSBub3IgcG9pbnRlcgBkaXNjYXJkaW5nIG93bmVyIHBvaW50ZXIAY2FsbGVkIG9iamVjdCBpcyBub3QgYXR0ciBmdW5jdGlvbiBvciBmdW5jdGlvbiBwb2ludGVyAGNhbm5vdCBjb252ZXJ0IGEgbnVsbCBwb2ludGVyIGNvbnN0YW50IHRvIG5vbi1udWxsYWJsZSBwb2ludGVyAGFzc2lnbm1lbnQgb2YgcG9zc2libGUgbnVsbCBvYmplY3QgJyVzJyB0byBub24tbnVsbGFibGUgcG9pbnRlcgB0b2tlbl9saXN0X2luc2VydF9hZnRlcgB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGFmdGVyAHR5cGVvZi1wYXJhbWV0ZXIAdW51c2VkLXBhcmFtZXRlcgBhc3NpZ25tZW50IHRvIGFycmF5IHBhcmFtZXRlcgAnJXMnOiB1bnJlZmVyZW5jZWQgZm9ybWFsIHBhcmFtZXRlcgBtaXNzaW5nIHRlcm1pbmF0aW5nICcgY2hhcmFjdGVyAG1pc3NpbmcgdGVybWluYXRpbmcgIiBjaGFyYWN0ZXIAX2lzX293bmVyAG9ial9vd25lcgBfT2JqX293bmVyAG5vdC1vd25lcgB0ZW1wLW93bmVyAGNhbm5vdCByZXR1cm4gYSBhdXRvbWF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvd25lciB0byBub24tb3duZXIAZGlzY2FyZC1vd25lcgBjYW5ub3QgYXNzaWduIGEgbm9uLW93bmVyIHRvIG93bmVyAGRpc2NhcmRpbmcgb3duZXIAX093bmVyAHByZXByb2Nlc3Nvcl90b2tlbl9haGVhZF9pc19pZGVudGlmaWVyAGV4cGVjdGVkIGlkZW50aWZpZXIAdHlwZV9zcGVjaWZpZXJfcXVhbGlmaWVyAG1pc3Npbmctb3duZXItcXVhbGlmaWVyAHN0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyAHN0cnVjdF9vcl91bmlvbl9zcGVjaWZpZXIAdHlwZV9zcGVjaWZpZXIAY2Fubm90IGNvbWJpbmUgd2l0aCBwcmV2aW91cyAnbG9uZyBsb25nJyBkZWNsYXJhdGlvbiBzcGVjaWZpZXIAcmlnaHQgaXMgbm90IGludGVnZXIAbGVmdCBpcyBub3QgaW50ZWdlcgBkZWZlcgBwcG51bWJlcgBjb252ZXJ0X3RvX251bWJlcgByZXR1cm4tbG9jYWwtYWRkcgBfaXNfc2NhbGFyAHJpZ2h0IG9wZXJhdG9yIGlzIG5vdCBzY2FsYXIAbGVmdCBvcGVyYXRvciBpcyBub3Qgc2NhbGFyAG11bHRpLWNoYXIAdW5zaWduZWQgY2hhcgBpZl9ncm91cABwb3AAY29uc3RhbnRfdmFsdWVfdW5hcnlfb3AAY29uc3RhbnRfdmFsdWVfb3AAb3duZXJzaGlwAGF1dG8AZ290bwB0eXBlX2NvbnZlcnRfdG8AZGl2LWJ5LXplcm8Abm90LXplcm8AZGl2aXppb24gYnkgemVybwBkaXZpc2lvbiBieSB6ZXJvAGV4cGFuZF9tYWNybwAtZm8AZG8ALW8Ac3RvcmFnZSBzaXplIG9mICclcycgaXNuJ3Qga25vd24Abm9yZXR1cm4AX05vcmV0dXJuAGV4dGVybgBpbnRlcm5hbCBlcnJvciB0eXBlX2NvbW1vbgBfaXNfZnVuY3Rpb24AYXNzaWdubWVudCBvZiBmdW5jdGlvbgBhcnJheS1pbmRpcmVjdGlvbgBhcnJheSBpbmRpcmVjdGlvbgByZWRlY2xhcmF0aW9uAGZsb3dfdmlzaXRfZGVjbGFyYXRpb24AZmxvd19zdGFydF92aXNpdF9kZWNsYXJhdGlvbgBmdW5jdGlvbl9kZWZpbml0aW9uX29yX2RlY2xhcmF0aW9uAHByYWdtYV9kZWNsYXJhdGlvbgBkZWNsYXJhdGlvbiBvZiAnJXMnIGhpZGVzIHByZXZpb3VzIGRlY2xhcmF0aW9uAHJlcGxhY2VtZW50X2xpc3RfcmVleGFtaW5hdGlvbgAtZGlyZWN0LWNvbXBpbGF0aW9uAHN0YW5kYXJkIG1hY3JvcyBpbmNsdXNpb24AX19EQVRFX18gbWFjcm8gaW5jbHVzaW9uAF9fVElNRV9fIG1hY3JvIGluY2x1c2lvbgBlcXVhbGl0eV9leHByZXNzaW9uAHVuYXJ5X2V4cHJlc3Npb24AcHJpbWFyeV9leHByZXNzaW9uAHBvc3RmaXhfZXhwcmVzc2lvbgBjYXN0X2V4cHJlc3Npb24AcHJlcHJvY2Vzc29yX2NvbnN0YW50X2V4cHJlc3Npb24AZmxvd192aXNpdF9leHByZXNzaW9uAGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uAGNvbmRpdGlvbmFsX2V4cHJlc3Npb24AcmVsYXRpb25hbF9leHByZXNzaW9uAGFuZF9leHByZXNzaW9uAGVtcHR5IGV4cHJlc3Npb24AZXhwZWN0ZWQgY29uc3RhbnQgZXhwcmVzc2lvbgBpbnZhbGlkIHR5cGUgc2hpZnQgZXhwcmVzc2lvbgBpbnZhbGlkIHR5cGVzIG9yIGV4cHJlc3Npb24AcmlnaHQgdHlwZSBpcyBub3Qgc2NhbGFyIGZvciBvciBleHByZXNzaW9uAGxlZnQgdHlwZSBpcyBub3Qgc2NhbGFyIGZvciBvciBleHByZXNzaW9uAGludmFsaWQgdHlwZXMgaW5jbHVzaXZlIG9yIGV4cHJlc3Npb24AaW52YWxpZCB0eXBlcyBhZGRpdGl2ZSBleHByZXNzaW9uAGludmFsaWQgdHlwZSBtdWx0aXBsaWNhdGl2ZSBleHByZXNzaW9uAGludmFsaWQgdHlwZXMgYW5kIGV4cHJlc3Npb24AaW52YWxpZCB0eXBlcyBsb2dpY2FsIGFuZCBleHByZXNzaW9uAGV4cGVjdGVkIGV4cHJlc3Npb24AZW51bS1jb252ZXJzaW9uAHVuaW9uAGJyZWFrIGpvaW4AaW52YWxpZCB0b2tlbgB1bmV4cGVjdGVkIHRva2VuAG5hbgBpbmNvbXBhdGlibGUtZW51bQAtcm0Ab3V0IG9mIG1lbQAbWzM3bQAbWzk1bQAbWzkybQAbWzM2OzFtABtbOTBtJXMbWzBtABtbOTVtd2FybmluZzogG1s5N20lcyBbG1s5NW0lcxtbOTdtXQobWzBtABtbMzY7MW1ub3RlOiAbWzk3bSVzIFsbWzM2OzFtJXMbWzk3bV0KG1swbQAbWzkxbWVycm9yOiAbWzk3bSVzIFsbWzkxbSVzG1s5N21dChtbMG0AYm9vbABfQm9vbABub25udWxsAHBvaW50ZXIgaXMgYWx3YXlzIG5vdC1udWxsAG1heWJlLW51bGwAb2JqZWN0IGlzIHBvc3NpYmx5IG51bGwAcG9pbnRlciBpcyBhbHdheXMgbnVsbABub24tbnVsbGFibGUgcG9pbnRlciAnJXMnIG1heSBiZSBudWxsAC1XYWxsAHR5cGVvZl91bnF1YWwAZXhwcmVzc2lvbl9ldmFsdWF0ZV9lcXVhbF9ub3RfZXF1YWwAX2lzX2ludGVncmFsAG9yaWdpbmFsAHRocmVhZF9sb2NhbABfVGhyZWFkX2xvY2FsAGdldF93YXJuaW5nX2JpdF9tYXNrAGZvcm1hdF92aXNpdF9wcmltYXJ5X2Jsb2NrAHRocm93IHN0YXRlbWVudCBub3Qgd2l0aGluIHRyeSBibG9jawBjaGVjawB0b2tlbl9saXN0X3BvcF9iYWNrAHR5cGVfbGlzdF9wdXNoX2JhY2sAb2JqZWN0c19wdXNoX2JhY2sAYnJlYWsALWZpAGFyZ3VtZW50X2V4cHJlc3Npb25fbGlzdF9wdXNoAGZhbGx0aHJvdWdoAHN3aXRjaABjYXRjaABsZWZ0LXRydWUtYnJhbmNoAGM6L2Fzc2VydC5oAGM6L2xpbWl0cy5oAGM6L293bmVyc2hpcC5oAGM6L2Vycm5vLmgAYzovc3RkaW8uaABjOi9tYXRoLmgAYzovc3RyaW5nLmgAYzovc3RkZGVmLmgAYzovc3RkbGliLmgAc3RhdGljX2RlYnVnAGFuYWx5emVyLW5vbi1vcHQtYXJnAGxvbmcgbG9uZwAjd2FybmluZwB0b2tlbl9saXN0X2FwcGVuZF9saXN0X2F0X2JlZ2lubmluZwBzdHJpbmctc2xpY2luZwB1bm5lY2Vzc2FyeSBsaW5lLXNsaWNpbmcAJUxnAHNzX3ZhZnByaW50ZgBzb3VyY2UgZXhwcmVzc2lvbiBvZiBvYmpfb3duZXIgbXVzdCBiZSBhZGRyZXNzb2YAdHlwZV9nZXRfYWxpZ25vZgBfQWxpZ25vZgB0eXBlX2dldF9zaXplb2YAdHlwZW9mAG11c3QtdXNlLWFkZHJlc3Mtb2YAaW5mAC1zYXJpZgBlbGlmAGVuZGlmAGJlZm9yZS1pZgB1bmRlZgBlbGlmbmRlZgBlbGlmZGVmAHR5cGVkZWYAJWYAbm9uLW93bmVyLXRvLW93bmVyLW1vdmUAbm9uLW93bmVyLW1vdmUAdHJ1ZQBjb250aW51ZQBfaXNfbHZhbHVlAHVudXNlZC12YWx1ZQB2b2lkIGZ1bmN0aW9uICclcycgc2hvdWxkIG5vdCByZXR1cm4gYSB2YWx1ZQBfX2hhc19jX2F0dHJpYnV0ZQB3YXJuaW5nICclcycgaXMgbm90IGFuIGNha2UgYXR0cmlidXRlAHdhcm5pbmcgJyVzJyBpcyBub3QgYW4gc3RhbmRhcmQgYXR0cmlidXRlAGlnbm9yaW5nIHJldHVybiB2YWx1ZSBvZiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRoICdub2Rpc2NhcmQnIGF0dHJpYnV0ZQBub3RlAG1hY3JvX2FyZ3VtZW50X2RlbGV0ZQBlbnVtZXJhdG9yX2RlbGV0ZQBpbml0X2RlY2xhcmF0b3JfZGVsZXRlAG1lbWJlcl9kZWNsYXJhdG9yX2RlbGV0ZQBkZXNpZ25hdG9yX2RlbGV0ZQBpbml0aWFsaXplcl9kZWxldGUAdHlwZV9zcGVjaWZpZXJfcXVhbGlmaWVyX2RlbGV0ZQBkZWNsYXJhdGlvbl9zcGVjaWZpZXJfZGVsZXRlAGF0dHJpYnV0ZV9zcGVjaWZpZXJfZGVsZXRlAHBhcmFtZXRlcl9kZWNsYXJhdGlvbl9kZWxldGUAbWVtYmVyX2RlY2xhcmF0aW9uX2RlbGV0ZQBnZW5lcmljX2Fzc29jaWF0aW9uX2RlbGV0ZQBhcmd1bWVudF9leHByZXNzaW9uX2RlbGV0ZQB0b2tlbl9kZWxldGUAYmxvY2tfaXRlbV9kZWxldGUAYXR0cmlidXRlX2RlbGV0ZQBzZXRfZGlyZWN0X3N0YXRlAHN0YXRpY19zdGF0ZQBkZWNsYXJhdG9yLXN0YXRlAGNvbmNhdGVuYXRlAGVsc2UAZmFsc2UAY2FzZQBpZ25vcmUAZW5kX29mX3N0b3JhZ2VfdmlzaXRfY29yZQBwcmludF9vYmplY3RfY29yZQBtYWtlX29iamVjdF9jb3JlAHByZXZpb3VzIGRlY2xhcmF0aW9uIGlzIGhlcmUAdHlwZV9nZXRfZW51bV90eXBlAGFzc2lnbm1lbnQgdG8gZXhwcmVzc2lvbiB3aXRoIGFycmF5IHR5cGUAY2hhcmFjdGVyIGNvbnN0YW50IHRvbyBsb25nIGZvciBpdHMgdHlwZQByaWdodCBtdXN0IGJlIGludGVnZXIgdHlwZQBjb25kaXRpb24gbXVzdCBoYXZlIHNjYWxhciB0eXBlAGRlZmVyIGVuZCBvZiBzY29wZQBlbmQgb2YgJyVzJyBzY29wZQB0eXBlX2Rlc3Ryb3lfb25lAGZsb3dfZGVmZXJfc2NvcGVfZGVsZXRlX29uZQBpbmxpbmUAY29udHJvbF9saW5lAGRlZmluZQBvd25lcnNoaXAgb2YgJyVzJyBub3QgbW92ZWQgYmVmb3JlIHRoZSBlbmQgb2YgbGlmZXRpbWUAcG9zdGZpeF9leHByZXNzaW9uX3R5cGVfbmFtZQBzdHlsZQBtb2R1bGUAdm9sYXRpbGUAd2hpbGUAdW5leHBlY3RlZCBlbmQgb2YgZmlsZQBkb3VibGUAcmVwcm9kdWNpYmxlAC1vd25lcnNoaXA9ZGlzYWJsZQAtbnVsbGFibGU9ZGlzYWJsZQAtb3duZXJzaGlwPWVuYWJsZQBudWxsYWJsZS10by1ub24tbnVsbGFibGUAdW51c2VkLXZhcmlhYmxlAC1zdHlsZT1jYWtlAF9faGFzX2luY2x1ZGUALXRlc3QtbW9kZQB1dGY4X2RlY29kZQBvbmNlAGFuYWx5emVyLW51bGwtZGVyZWZlcmVuY2UAb25lIHNwYWNlAG5vZGlzY2FyZABmaWxlICVzIG5vdCBmb3VuZABmaWxlICclcycgbm90IGZvdW5kAGx2YWx1ZSByZXF1aXJlZCBhcyBpbmNyZW1lbnQgb3BlcmFuZABsdmFsdWUgcmVxdWlyZWQgYXMgZGVjcmVtZW50IG9wZXJhbmQAaW5kaXJlY3Rpb24gcmVxdWlyZXMgcG9pbnRlciBvcGVyYW5kAGx2YWx1ZSByZXF1aXJlZCBhcyB1bmFyeSAnJicgb3BlcmFuZABleHBhbmQAJWxsZAB2b2lkAGFuYWx5emVyLW1heWJlLXVuaW5pdGlhbGl6ZWQAb2JqZWN0IGlzIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQAb2JqZWN0ICclcycgd2FzIG5vdCBtb3ZlZC9kZXN0cm95ZWQAc291cmNlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIG1vdmVkAGFkZHJlc3Mgb2YgcmVnaXN0ZXIgdmFyaWFibGUgJ3gnIHJlcXVlc3RlZABlbXB0eSBkZWNsYXJhdG9yIG5hbWU/PyB1bmV4cGVjdGVkACclcycgaXMgZGVwcmVjYXRlZABtYXliZV91bnVzZWQAZGVjbGFyYXRvciAnJXMnIG5vdCB1c2VkAGlnbm9yZWQAc3RydWN0dXJlIG9yIHVuaW9uIHJlcXVpcmVkAGRlZmluZWQAdW5zaWduZWQAX1N0YXRpY19hc3NlcnQgZmFpbGVkAHByYWdtYSBjaGVjayBmYWlsZWQAc3RhdGljX3N0YXRlIGZhaWxlZAAtbnVsbGFibGU9ZW5hYmxlZABsaWZldGltZS1lbmRlZABvYmplY3QgbGlmZXRpbWUgZW5kZWQAdW5zZXF1ZW5jZWQAdG9rZW4gc2xpY2VkAF9faGFzX2VtYmVkAGFyZ3VtZW50X2xpc3RfYWRkAGVudW1lcmF0b3JfbGlzdF9hZGQAaW5pdF9kZWNsYXJhdG9yX2xpc3RfYWRkAG1lbWJlcl9kZWNsYXJhdG9yX2xpc3RfYWRkAGRlc2lnbmF0b3JfbGlzdF9hZGQAaW5pdGlhbGl6ZXJfbGlzdF9hZGQAcGFyYW1ldGVyX2xpc3RfYWRkAHNwZWNpZmllcl9xdWFsaWZpZXJfbGlzdF9hZGQAdHlwZV9xdWFsaWZpZXJfbGlzdF9hZGQAbWVtYmVyX2RlY2xhcmF0aW9uX2xpc3RfYWRkAHRva2VuX2xpc3RfYWRkAGJsb2NrX2l0ZW1fbGlzdF9hZGQAcGFyYW1fbGlzdF9hZGQAYXR0cmlidXRlX2xpc3RfYWRkAGdlbmVyaWNfYXNzb2NfbGlzdF9hZGQAZGVjbGFyYXRpb25fc3BlY2lmaWVyc19hZGQAaW5jbHVkZV9kaXJfYWRkAGF0dHJpYnV0ZV9zcGVjaWZpZXJfc2VxdWVuY2VfYWRkACAjJTAyZABfJXMlZABfYW5vbnltb3VzX3N0cnVjdF8lZABnb3RvIF9jYXRjaF9sYWJlbF8lZAAgX2xpdF9mdW5jXyVkAEUlZABtYWxsb2MAY2FsbG9jAGRpYWdub3N0aWMAX2lzX2FyaXRobWV0aWMAcmlnaHQgLyBpcyBub3QgYXJpdGhtZXRpYwBsZWZ0IC8gaXMgbm90IGFyaXRobWV0aWMAcmlnaHQgKiBpcyBub3QgYXJpdGhtZXRpYwBsZWZ0ICogaXMgbm90IGFyaXRobWV0aWMAc3RhdGljAG5vIG1hdGNoIGZvciBnZW5lcmljAF9HZW5lcmljAF9BdG9taWMAYzovbWFpbi5jAGxpYi5jAAolKmMAJWMAZXhlY3V0ZV9wcmFnbWEAdW5rbm93biBwcmFnbWEAX190eXBlb2ZfXwBfX2Z1bmNfXwBfX1ZBX09QVF9fAF9fVkFfQVJHU19fAF9fQ09VTlRFUl9fAF9fTElORV9fAF9fRklMRV9fAF4AIGFyZ3VtZW50IG9mIHNpemUgWyVkXSBpcyBzbWFsbGVyIHRoYW4gcGFyYW1ldGVyIG9mIHNpemUgWyVkXQBbW25vcmV0dXJuXV0AWwBjdHgtPmN1cnJlbnQtPnR5cGUgPT0gVEtfS0VZV09SRF9UUlkAVEtfS0VZV09SRF9fSU1BR0lOQVJZAFRLX0tFWVdPUkRfSVNfQVJSQVkAVEtfS0VZV09SRF9TVEFUSUNfREVCVUdfRVgAVEtfS0VZV09SRF9fQ09NUExFWABUS19BUlJPVwBUS19LRVlXT1JEX1RIUk9XAFRLX0tFWVdPUkRfX1ZJRVcAVEtfS0VZV09SRF9fT1VUAFRLX0tFWVdPUkRfSVNfQ09OU1QAVEtfS0VZV09SRF9DT05TVABUS19LRVlXT1JEX1NIT1JUAFRLX0tFWVdPUkRfQVNTRVJUAFRLX0tFWVdPUkRfX1NUQVRJQ19BU1NFUlQAVEtfS0VZV09SRF9fT1BUAFRLX0tFWVdPUkRfSU5UAFRLX0tFWVdPUkRfX0JJVElOVABUS19LRVlXT1JEX0lTX0ZMT0FUSU5HX1BPSU5UAFRLX0NPTU1FTlQAVEtfTElORV9DT01NRU5UAFRLX0NJUkNVTUZMRVhfQUNDRU5UAFRLX0dSQVZFX0FDQ0VOVABUS19DT01QSUxFUl9CSU5BUllfQ09OU1RBTlQAVEtfQ0hBUl9DT05TVEFOVABUS19DT01QSUxFUl9PQ1RBTF9DT05TVEFOVABUS19DT01QSUxFUl9ERUNJTUFMX0NPTlNUQU5UAFRLX0NPTVBJTEVSX0hFWEFERUNJTUFMX0NPTlNUQU5UAFRLX0NPTVBJTEVSX0RFQ0lNQUxfRkxPQVRJTkdfQ09OU1RBTlQAVEtfQ09NUElMRVJfSEVYQURFQ0lNQUxfRkxPQVRJTkdfQ09OU1RBTlQAVEtfS0VZV09SRF9ERUZBVUxUAFRLX1NISUZUUklHSFQAVEtfU0hJRlRMRUZUAFRLX0tFWVdPUkRfU1RBVElDX1NFVABUS19SSUdIVF9DVVJMWV9CUkFDS0VUAFRLX0xFRlRfQ1VSTFlfQlJBQ0tFVABUS19SSUdIVF9TUVVBUkVfQlJBQ0tFVABUS19MRUZUX1NRVUFSRV9CUkFDS0VUAFRLX0tFWVdPUkRfU1RSVUNUAFRLX0tFWVdPUkRfUkVTVFJJQ1QAVEtfQ09NTUVSQ0lBTF9BVABUS19LRVlXT1JEX0ZMT0FUAFRLX0hZUEhFTl9NSU5VUwBUS19NSU5VU01JTlVTAFRLX1BMVVNQTFVTAFRLX1NPTElEVVMAVEtfUkVWRVJTRV9TT0xJRFVTAFRLX0JMQU5LUwBUS19SSUdIVF9QQVJFTlRIRVNJUwBUS19MRUZUX1BBUkVOVEhFU0lTAFRLX0tFWVdPUkRfX0FMSUdOQVMAVEtfS0VZV09SRF9BVFRSX0hBUwBUS19LRVlXT1JEX05VTExQVFIAVEtfS0VZV09SRF9DT05TVEVYUFIAVEtfTE9HSUNBTF9PUEVSQVRPUl9PUgBUS19NQUNST19DT05DQVRFTkFURV9PUEVSQVRPUgBwX2l0ZXJhdGlvbl9zdGF0ZW1lbnQtPmZpcnN0X3Rva2VuLT50eXBlID09IFRLX0tFWVdPUkRfRk9SAFRLX0tFWVdPUkRfUkVHSVNURVIAVEtfS0VZV09SRF9JU19QT0lOVEVSAFRLX0tFWVdPUkRfX09XTkVSAFRLX0tFWVdPUkRfSVNfT1dORVIAVEtfS0VZV09SRF9fT0JKX09XTkVSAFRLX1BMQUNFTUFSS0VSAGlucHV0X2xpc3QtPmhlYWQtPnR5cGUgPT0gVEtfSURFTlRJRklFUgBUS19LRVlXT1JEX0RFRkVSAFRLX1BQTlVNQkVSAFRLX0tFWVdPUkRfSVNfU0NBTEFSAFRLX0tFWVdPUkRfQ0hBUgBUS19GVUxMX1NUT1AAVEtfS0VZV09SRF9BVVRPAFRLX0tFWVdPUkRfR09UTwBUS19JREVOVElGSUVSX1JFQ1VSU0lWRV9NQUNSTwBwX2l0ZXJhdGlvbl9zdGF0ZW1lbnQtPmZpcnN0X3Rva2VuLT50eXBlID09IFRLX0tFWVdPUkRfRE8AVEtfS0VZV09SRF9SRVRVUk4AVEtfS0VZV09SRF9fTk9SRVRVUk4AVEtfS0VZV09SRF9FWFRFUk4AVEtfQ09MT04AVEtfU0VNSUNPTE9OAFRLX0tFWVdPUkRfSVNfRlVOQ1RJT04AVEtfS0VZV09SRF9VTklPTgBUS19QRVJDRU5UX1NJR04AVEtfUExVU19TSUdOAFRLX0VRVUFMU19TSUdOAFRLX05VTUJFUl9TSUdOAFRLX0RPTExBUl9TSUdOAFRLX0xFU1NfVEhBTl9TSUdOAFRLX0dSRUFURVJfVEhBTl9TSUdOAEFOWV9PVEhFUl9QUF9UT0tFTgBOQU4AVEtfS0VZV09SRF9FTlVNAFRLX0tFWVdPUkRfX0FTTQBUS19LRVlXT1JEX19CT09MAHBfZGVjbGFyYXRpb24tPmZ1bmN0aW9uX2JvZHkgPT0gTlVMTABwbmV3LT5wcmV2ID09IE5VTEwAcG5ldy0+bmV4dCA9PSBOVUxMAHBfbGFzdF9wYXJhbWV0ZXItPm5leHQgPT0gTlVMTABwLT50eXBlX3F1YWxpZmllci0+bmV4dCA9PSBOVUxMAHAtPm5leHQgPT0gTlVMTAB0eXBlX2xpc3QtPnRhaWwtPm5leHQgPT0gTlVMTABhcHBlbmRfbGlzdC0+dGFpbC0+bmV4dCA9PSBOVUxMAGRlc3QtPnRhaWwtPm5leHQgPT0gTlVMTABzb3VyY2UtPnRhaWwtPm5leHQgPT0gTlVMTABsaXN0LnRhaWwtPm5leHQgPT0gTlVMTABuZXdfYm9vay0+bmV4dCA9PSBOVUxMAHBfdHlwZS0+bmV4dCA9PSBOVUxMAHBfdHJ5X3N0YXRlbWVudC0+Y2F0Y2hfc2Vjb25kYXJ5X2Jsb2NrX29wdCA9PSBOVUxMAHQubmFtZV9vcHQgPT0gTlVMTABwX2RlY2xhcmF0aW9uX3NwZWNpZmllcnMtPnBfYXR0cmlidXRlX3NwZWNpZmllcl9zZXF1ZW5jZV9vcHQgPT0gTlVMTABwX2FyZ3VtZW50ID09IE5VTEwAcF9leHByZXNzaW9uLT5yaWdodCA9PSBOVUxMAHBfZXhwcmVzc2lvbi0+bGVmdCA9PSBOVUxMAHBfYmxvY2stPnByZXZpb3VzID09IE5VTEwAbWFjcm8tPnBhcmFtZXRlcnMgPT0gTlVMTABwX2luaXRpYWxpemVyLT5kZXNpZ25hdGlvbiA9PSBOVUxMAHBfaW5pdGlhbGl6ZXIyLT5kZXNpZ25hdGlvbiA9PSBOVUxMAG5ld19leHByZXNzaW9uID09IE5VTEwAbGlzdC0+dGFpbCA9PSBOVUxMAHIyLnRhaWwgPT0gTlVMTABjdHgtPnRhaWxfYmxvY2sgPT0gTlVMTABwLT50YWlsX2Jsb2NrID09IE5VTEwAY3R4LT5wX3JldHVybl90eXBlID09IE5VTEwAcF9leHByZXNzaW9uX25vZGUtPnR5cGVfbmFtZSA9PSBOVUxMAG1hY3JvLT5uYW1lID09IE5VTEwAbWFwLT50YWJsZSA9PSBOVUxMAHBfZXhwcmVzc2lvbl9ub2RlID09IE5VTEwAdHlwZV9saXN0LT5oZWFkID09IE5VTEwAbWFjcm8tPnJlcGxhY2VtZW50X2xpc3QuaGVhZCA9PSBOVUxMAHIyLmhlYWQgPT0gTlVMTABmaW5kX21hY3JvKGN0eCwgaW5wdXRfbGlzdC0+aGVhZC0+bGV4ZW1lKSA9PSBOVUxMAHR5cGVfbGlzdCAhPSBOVUxMAHBfbGFzdCAhPSBOVUxMAHBfZGVjbGFyYXRvcl9vcHQgIT0gTlVMTABjdHgtPmN1cnJlbnQgIT0gTlVMTABib29rcyAhPSBOVUxMAHBfdHlwZV9zcGVjaWZpZXItPnR5cGVkZWZfZGVjbGFyYXRvciAhPSBOVUxMAHBfdHlwZS0+ZW51bV9zcGVjaWZpZXIgIT0gTlVMTABwICE9IE5VTEwAcF9leHByZXNzaW9uX29yaWdpbiAhPSBOVUxMAG5ld19ib29rICE9IE5VTEwAbGlzdC5oZWFkICE9IE5VTEwAbGlzdDQuaGVhZCAhPSBOVUxMAHAtPmRhdGEgIT0gTlVMTABUS19LRVlXT1JEX1RZUEVPRl9VTlFVQUwAVEtfS0VZV09SRF9JU19JTlRFR1JBTABUS19TVFJJTkdfTElURVJBTABUS19LRVlXT1JEX19USFJFQURfTE9DQUwAVEtfQVNURVJJU0sAVEtfUVVFU1RJT05fTUFSSwBUS19RVU9UQVRJT05fTUFSSwBUS19FWENMQU1BVElPTl9NQVJLAFRLX0tFWVdPUkRfQlJFQUsAVEtfS0VZV09SRF9TV0lUQ0gAVEtfS0VZV09SRF9DQVRDSABUS19LRVlXT1JEX1NUQVRJQ19ERUJVRwBUS19LRVlXT1JEX0xPTkcAVEtfS0VZV09SRF9fQUxJR05PRgBUS19LRVlXT1JEX1NJWkVPRgBUS19LRVlXT1JEX1RZUEVPRgBJTkYAcF9zZWxlY3Rpb25fc3RhdGVtZW50LT5maXJzdF90b2tlbi0+dHlwZSA9PSBUS19LRVlXT1JEX0lGAG51bGxjaGVja3MgcHJhZ21hIG5lZWRzIHRvIHVzZSBPTiBPRkYAKmMgPj0gMHgwODAwICYmICpjIDw9IDB4RkZGRgAqYyA+PSAweDEwMDAwICYmICpjIDw9IDB4MTBGRkZGACpjID49IDB4MDA4MCAmJiAqYyA8PSAweDA3RkYAVEtfS0VZV09SRF9UWVBFREVGACpjID49IDB4MDAwMCAmJiAqYyA8PSAweDAwN0YAVEtfS0VZV09SRF9BVFRSX1JFTU9WRQBUS19LRVlXT1JEX1RSVUUAVEtfS0VZV09SRF9DT05USU5VRQBUS19LRVlXT1JEX0lTX0xWQUxVRQBUS19LRVlXT1JEX1NUQVRJQ19TVEFURQBUS19LRVlXT1JEX0VMU0UAVEtfS0VZV09SRF9GQUxTRQBUS19LRVlXT1JEX0NBU0UAVEtfTk9ORQBUS19GTE9XX0xJTkUAVEtfUFJFUFJPQ0VTU09SX0xJTkUAVEtfVkVSVElDQUxfTElORQBUS19ORVdMSU5FAFRLX0tFWVdPUkRfSU5MSU5FAFRLX1hfTUlTU0lOR19OQU1FAFRLX0tFWVdPUkRfVk9MQVRJTEUAcF9pdGVyYXRpb25fc3RhdGVtZW50LT5maXJzdF90b2tlbi0+dHlwZSA9PSBUS19LRVlXT1JEX1dISUxFAFRLX0JFR0lOX09GX0ZJTEUAVEtfS0VZV09SRF9ET1VCTEUAcF92aXNpdG9yLT5wX29iamVjdC0+c3RhdGUgPT0gT0JKRUNUX1NUQVRFX05PVF9BUFBMSUNBQkxFAENBS0UAVEtfQVBPU1RST1BIRQBUS19USUxERQBUS19XSElURV9TUEFDRQAtRQBUS19MT0dJQ0FMX09QRVJBVE9SX0FORABUS19BTVBFUlNBTkQAVEtfS0VZV09SRF9WT0lEAFRLX0tFWVdPUkRfU0lHTkVEAFRLX0tFWVdPUkRfVU5TSUdORUQAVEtfS0VZV09SRF9BVFRSX0FERABUS19LRVlXT1JEX0lTX0FSSVRITUVUSUMAVEtfS0VZV09SRF9TVEFUSUMAVEtfS0VZV09SRF9fR0VORVJJQwBUS19LRVlXT1JEX19BVE9NSUMAVEtfQ09NTUEAY3R4LT5jdXJyZW50LT50eXBlID09IFRLX1BSQUdNQQBhZGRyZXNzIG9mIHJlZ2lzdGVyIHZhcmlhYmxlIHJlcXVlc3RlZCAtIGRlY2xhcmF0b3I/AGluY29tcGF0aWJsZSB0eXBlcz8/ADw+AGJyZWFrOwBnb3RvIF9jYXRjaF9sYWJlbF8lZDsAdHlwZWRlZiBsb25nIGxvbmcgZnBvc190Owp0eXBlZGVmIHVuc2lnbmVkIHNpemVfdDsKCiNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKI2RlZmluZSBFWElUX0ZBSUxVUkUgMQojZGVmaW5lIE5VTEwgKCh2b2lkKikwKQp0eXBlZGVmIGludCB3Y2hhcl90OwpbW25vZGlzY2FyZF1dIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIqIG5wdHIpOwpbW25vZGlzY2FyZF1dIGludCBhdG9pKGNvbnN0IGNoYXIqIG5wdHIpOwpbW25vZGlzY2FyZF1dIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciogbnB0cik7Cltbbm9kaXNjYXJkXV0gbG9uZyBsb25nIGludCBhdG9sbChjb25zdCBjaGFyKiBucHRyKTsKZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiByZXN0cmljdCBucHRyLCBjaGFyKiogcmVzdHJpY3QgZW5kcHRyKTsKZmxvYXQgc3RydG9mKGNvbnN0IGNoYXIqIHJlc3RyaWN0IG5wdHIsIGNoYXIqKiByZXN0cmljdCBlbmRwdHIpOwpsb25nIGRvdWJsZSBzdHJ0b2xkKGNvbnN0IGNoYXIqIHJlc3RyaWN0IG5wdHIsIGNoYXIqKiByZXN0cmljdCBlbmRwdHIpOwpsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciogcmVzdHJpY3QgbnB0ciwgY2hhcioqIHJlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpOwpsb25nIGxvbmcgaW50IHN0cnRvbGwoY29uc3QgY2hhciogcmVzdHJpY3QgbnB0ciwgY2hhcioqIHJlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpOwp1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIqIHJlc3RyaWN0IG5wdHIsIGNoYXIqKiByZXN0cmljdCBlbmRwdHIsIGludCBiYXNlKTsKdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbChjb25zdCBjaGFyKiByZXN0cmljdCBucHRyLCBjaGFyKiogcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSk7CmludCByYW5kKHZvaWQpOwp2b2lkIHNyYW5kKHVuc2lnbmVkIGludCBzZWVkKTsKdm9pZCogYWxpZ25lZF9hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7CiNpZiBkZWZpbmVkKF9fU1REQ19PV05FUlNISVBfXykgCltbbm9kaXNjYXJkXV0gdm9pZCogX093bmVyIF9PcHQgY2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOwp2b2lkIGZyZWUodm9pZCogX093bmVyIF9PcHQgcHRyKTsKW1tub2Rpc2NhcmRdXSB2b2lkKiBfT3duZXIgX09wdCBtYWxsb2Moc2l6ZV90IHNpemUpOwpbW25vZGlzY2FyZF1dIHZvaWQqIF9Pd25lciBfT3B0IHJlYWxsb2Modm9pZCogX09wdCBwdHIsIHNpemVfdCBzaXplKTsKI2Vsc2UKW1tub2Rpc2NhcmRdXSB2b2lkKiBjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7CnZvaWQgZnJlZSh2b2lkKiBwdHIpOwpbW25vZGlzY2FyZF1dIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSk7Cltbbm9kaXNjYXJkXV0gdm9pZCogcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKI2VuZGlmCltbbm9yZXR1cm5dXSB2b2lkIGFib3J0KHZvaWQpOwppbnQgYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7CmludCBhdF9xdWlja19leGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7Cltbbm9yZXR1cm5dXSB2b2lkIGV4aXQoaW50IHN0YXR1cyk7Cltbbm9yZXR1cm5dXSB2b2lkIF9FeGl0KGludCBzdGF0dXMpOwpjaGFyKiBnZXRlbnYoY29uc3QgY2hhciogbmFtZSk7Cltbbm9yZXR1cm5dXSB2b2lkIHF1aWNrX2V4aXQoaW50IHN0YXR1cyk7CmludCBzeXN0ZW0oY29uc3QgY2hhciogc3RyaW5nKTsAIAp0eXBlZGVmIGludCBlcnJub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHJzaXplX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgd2NoYXJfdDsKdm9pZCogbWVtY2hyKHZvaWQgY29uc3QqIF9CdWYsIGludCBfVmFsLCBzaXplX3QgX01heENvdW50KTsKaW50IG1lbWNtcCh2b2lkIGNvbnN0KiBfQnVmMSwgdm9pZCBjb25zdCogX0J1ZjIsIHNpemVfdCBfU2l6ZSk7CnZvaWQqIG1lbWNweSh2b2lkKiBfRHN0LCB2b2lkIGNvbnN0KiBfU3JjLCBzaXplX3QgX1NpemUpOwp2b2lkKiBtZW1tb3ZlKHZvaWQqIF9Ec3QsIHZvaWQgY29uc3QqIF9TcmMsIHNpemVfdCBfU2l6ZSk7CnZvaWQqIG1lbXNldCh2b2lkKiBfRHN0LCBpbnQgX1ZhbCwgc2l6ZV90IF9TaXplKTsKY2hhciogc3RyY2hyKGNoYXIgY29uc3QqIF9TdHIsIGludCBfVmFsKTsKY2hhciAqc3RyY3B5KF9PdXQgY2hhciAqcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjICk7CmNoYXIqIHN0cnJjaHIoY2hhciBjb25zdCogX1N0ciwgaW50IF9DaCk7CmNoYXIqIHN0cnN0cihjaGFyIGNvbnN0KiBfU3RyLCBjaGFyIGNvbnN0KiBfU3ViU3RyKTsKd2NoYXJfdCogd2NzY2hyKHdjaGFyX3QgY29uc3QqIF9TdHIsIHdjaGFyX3QgX0NoKTsKd2NoYXJfdCogd2NzcmNocih3Y2hhcl90IGNvbnN0KiBfU3RyLCB3Y2hhcl90IF9DaCk7CndjaGFyX3QqIHdjc3N0cih3Y2hhcl90IGNvbnN0KiBfU3RyLCB3Y2hhcl90IGNvbnN0KiBfU3ViU3RyKTsKc3RhdGljIGlubGluZSBlcnJub190IG1lbWNweV9zKHZvaWQqIGNvbnN0IF9EZXN0aW5hdGlvbiwgcnNpemVfdCBjb25zdCBfRGVzdGluYXRpb25TaXplLCB2b2lkIGNvbnN0KiBjb25zdCBfU291cmNlLCByc2l6ZV90IGNvbnN0IF9Tb3VyY2VTaXplKTsKc3RhdGljIGlubGluZSBlcnJub190IG1lbW1vdmVfcyh2b2lkKiBjb25zdCBfRGVzdGluYXRpb24sIHJzaXplX3QgY29uc3QgX0Rlc3RpbmF0aW9uU2l6ZSwgdm9pZCBjb25zdCogY29uc3QgX1NvdXJjZSwgcnNpemVfdCBjb25zdCBfU291cmNlU2l6ZSk7CmludCBfbWVtaWNtcCh2b2lkIGNvbnN0KiBfQnVmMSwgdm9pZCBjb25zdCogX0J1ZjIsIHNpemVfdCBfU2l6ZSk7CnZvaWQqIG1lbWNjcHkodm9pZCogX0RzdCwgdm9pZCBjb25zdCogX1NyYywgaW50IF9WYWwsIHNpemVfdCBfU2l6ZSk7CmludCBtZW1pY21wKHZvaWQgY29uc3QqIF9CdWYxLCB2b2lkIGNvbnN0KiBfQnVmMiwgc2l6ZV90IF9TaXplKTsKZXJybm9fdCB3Y3NjYXRfcyh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHJzaXplX3QgX1NpemVJbldvcmRzLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlKTsKZXJybm9fdCB3Y3NjcHlfcyh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHJzaXplX3QgX1NpemVJbldvcmRzLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlKTsKZXJybm9fdCB3Y3NuY2F0X3Mod2NoYXJfdCogX0Rlc3RpbmF0aW9uLCByc2l6ZV90IF9TaXplSW5Xb3Jkcywgd2NoYXJfdCBjb25zdCogX1NvdXJjZSwgcnNpemVfdCBfTWF4Q291bnQpOwplcnJub190IHdjc25jcHlfcyh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHJzaXplX3QgX1NpemVJbldvcmRzLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlLCByc2l6ZV90IF9NYXhDb3VudCk7CndjaGFyX3QqIHdjc3Rva19zKHdjaGFyX3QqIF9TdHJpbmcsIHdjaGFyX3QgY29uc3QqIF9EZWxpbWl0ZXIsIHdjaGFyX3QqKiBfQ29udGV4dCk7CndjaGFyX3QqIF93Y3NkdXAod2NoYXJfdCBjb25zdCogX1N0cmluZyk7CndjaGFyX3QqIHdjc2NhdCh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UpOyBpbnQgd2NzY21wKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcxLCB3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMik7CndjaGFyX3QqIHdjc2NweSh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UpOyBzaXplX3Qgd2NzY3Nwbih3Y2hhcl90IGNvbnN0KiBfU3RyaW5nLCB3Y2hhcl90IGNvbnN0KiBfQ29udHJvbCk7CnNpemVfdCB3Y3NsZW4od2NoYXJfdCBjb25zdCogX1N0cmluZyk7CnNpemVfdCB3Y3NubGVuKHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UsIHNpemVfdCBfTWF4Q291bnQpOwpzdGF0aWMgaW5saW5lIHNpemVfdCB3Y3NubGVuX3Mod2NoYXJfdCBjb25zdCogX1NvdXJjZSwgc2l6ZV90IF9NYXhDb3VudCk7CndjaGFyX3QqIHdjc25jYXQod2NoYXJfdCogX0Rlc3RpbmF0aW9uLCB3Y2hhcl90IGNvbnN0KiBfU291cmNlLCBzaXplX3QgX0NvdW50KTsKaW50IHdjc25jbXAod2NoYXJfdCBjb25zdCogX1N0cmluZzEsIHdjaGFyX3QgY29uc3QqIF9TdHJpbmcyLCBzaXplX3QgX01heENvdW50KTsKd2NoYXJfdCogd2NzbmNweSh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UsIHNpemVfdCBfQ291bnQpOwp3Y2hhcl90KiB3Y3NwYnJrKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcsIHdjaGFyX3QgY29uc3QqIF9Db250cm9sKTsKc2l6ZV90IHdjc3Nwbih3Y2hhcl90IGNvbnN0KiBfU3RyaW5nLCB3Y2hhcl90IGNvbnN0KiBfQ29udHJvbCk7CndjaGFyX3QqIHdjc3Rvayh3Y2hhcl90KiBfU3RyaW5nLCB3Y2hhcl90IGNvbnN0KiBfRGVsaW1pdGVyLCB3Y2hhcl90KiogX0NvbnRleHQpOwpzaXplX3Qgd2NzeGZybSh3Y2hhcl90KiBfRGVzdGluYXRpb24sIHdjaGFyX3QgY29uc3QqIF9Tb3VyY2UsIHNpemVfdCBfTWF4Q291bnQpOwppbnQgd2NzY29sbCh3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMSwgd2NoYXJfdCBjb25zdCogX1N0cmluZzIpOwp3Y2hhcl90KiB3Y3NkdXAod2NoYXJfdCBjb25zdCogX1N0cmluZyk7CmludCB3Y3NpY21wKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcxLCB3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMik7CmludCB3Y3NuaWNtcCh3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMSwgd2NoYXJfdCBjb25zdCogX1N0cmluZzIsIHNpemVfdCBfTWF4Q291bnQpOwp3Y2hhcl90KiB3Y3Nuc2V0KHdjaGFyX3QqIF9TdHJpbmcsIHdjaGFyX3QgX1ZhbHVlLCBzaXplX3QgX01heENvdW50KTsKd2NoYXJfdCogd2NzcmV2KHdjaGFyX3QqIF9TdHJpbmcpOwp3Y2hhcl90KiB3Y3NzZXQod2NoYXJfdCogX1N0cmluZywgd2NoYXJfdCBfVmFsdWUpOwp3Y2hhcl90KiB3Y3Nsd3Iod2NoYXJfdCogX1N0cmluZyk7IHdjaGFyX3QqIHdjc3Vwcih3Y2hhcl90KiBfU3RyaW5nKTsKaW50IHdjc2ljb2xsKHdjaGFyX3QgY29uc3QqIF9TdHJpbmcxLCB3Y2hhcl90IGNvbnN0KiBfU3RyaW5nMik7CmNoYXIqIHN0cnRva19zKGNoYXIqIF9TdHJpbmcsIGNoYXIgY29uc3QqIF9EZWxpbWl0ZXIsIGNoYXIqKiBfQ29udGV4dCk7CnZvaWQqIF9tZW1jY3B5KHZvaWQqIF9Ec3QsIHZvaWQgY29uc3QqIF9TcmMsIGludCBfVmFsLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RyY2F0KGNoYXIqIF9EZXN0aW5hdGlvbiwgY2hhciBjb25zdCogX1NvdXJjZSk7CmludCBzdHJjbXAoY2hhciBjb25zdCogX1N0cjEsIGNoYXIgY29uc3QqIF9TdHIyKTsKaW50IHN0cmNvbGwoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyKTsKY2hhciogc3RyZXJyb3IoaW50IF9FcnJvck1lc3NhZ2UpOwpzaXplX3Qgc3RybGVuKGNoYXIgY29uc3QqIF9TdHIpOwpjaGFyKiBzdHJuY2F0KGNoYXIqIF9EZXN0aW5hdGlvbiwgY2hhciBjb25zdCogX1NvdXJjZSwgc2l6ZV90IF9Db3VudCk7CmludCBzdHJuY21wKGNoYXIgY29uc3QqIF9TdHIxLCBjaGFyIGNvbnN0KiBfU3RyMiwgc2l6ZV90IF9NYXhDb3VudCk7CmNoYXIqIHN0cm5jcHkoY2hhciogX0Rlc3RpbmF0aW9uLCBjaGFyIGNvbnN0KiBfU291cmNlLCBzaXplX3QgX0NvdW50KTsKc2l6ZV90IHN0cm5sZW4oY2hhciBjb25zdCogX1N0cmluZywgc2l6ZV90IF9NYXhDb3VudCk7CnN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cm5sZW5fcyhjaGFyIGNvbnN0KiBfU3RyaW5nLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RycGJyayhjaGFyIGNvbnN0KiBfU3RyLCBjaGFyIGNvbnN0KiBfQ29udHJvbCk7CnNpemVfdCBzdHJzcG4oY2hhciBjb25zdCogX1N0ciwgY2hhciBjb25zdCogX0NvbnRyb2wpOwpjaGFyKiBzdHJ0b2soY2hhciogX1N0cmluZywgY2hhciBjb25zdCogX0RlbGltaXRlcik7CiNpZiBkZWZpbmVkKF9fU1REQ19PV05FUlNISVBfXykgCmNoYXIqIF9Pd25lciBfT3B0IHN0cmR1cChjaGFyIGNvbnN0KiBfU3RyaW5nKTsKI2Vsc2UKY2hhciogc3RyZHVwKGNoYXIgY29uc3QqIF9TdHJpbmcpOwojZW5kaWYKaW50IHN0cmNtcGkoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyKTsKaW50IHN0cmljbXAoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyKTsKY2hhciogc3RybHdyKGNoYXIqIF9TdHJpbmcpOwppbnQgc3RybmljbXAoY2hhciBjb25zdCogX1N0cmluZzEsIGNoYXIgY29uc3QqIF9TdHJpbmcyLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RybnNldChjaGFyKiBfU3RyaW5nLCBpbnQgX1ZhbHVlLCBzaXplX3QgX01heENvdW50KTsKY2hhciogc3RycmV2KGNoYXIqIF9TdHJpbmcpOwpjaGFyKiBzdHJzZXQoY2hhciogX1N0cmluZywgaW50IF9WYWx1ZSk7IGNoYXIqIHN0cnVwcihjaGFyKiBfU3RyaW5nKTsATm90ZTogaW5jbHVkaW5nIGZpbGU6AGVsc2UgX2NhdGNoX2xhYmVsXyVkOgBjdXJyZW50ICA6AC10YXJnZXQ9Yzk5AC1zdGQ9Yzk5AC10YXJnZXQ9Yzg5AFRLX0tFWVdPUkRfX0lOVDgAX0RlY2ltYWwxMjgAVEtfS0VZV09SRF9fREVDSU1BTDEyOABfX2ludDE2AFRLX0tFWVdPUkRfX0lOVDE2AF9faW50NjQAX0RlY2ltYWw2NABUS19LRVlXT1JEX19JTlQ2NABUS19LRVlXT1JEX19ERUNJTUFMNjQAX19pbnQzMgBfRGVjaW1hbDMyAFRLX0tFWVdPUkRfX0lOVDMyAFRLX0tFWVdPUkRfX0RFQ0lNQUwzMgAtdGFyZ2V0PWMxMQAtc3RkPWMxMQBhbGlnbiA+IDAAbGlzdC50YWlsLT5uZXh0ID09IDAAcF9pbml0X2RlY2xhcmF0b3ItPnBfZGVjbGFyYXRvci0+dHlwZS50eXBlX3NwZWNpZmllcl9mbGFncyA9PSAwAHBfb2JqZWN0LT5tZW1iZXJzLnNpemUgPT0gMABmbXQgIT0gMABhbGlnbiAhPSAwAGlmICgxKSAvKnRyeSovAC8qX0ltcGxpY2l0Ki8ALypyZXN0cmljdCovAC8qJXMqLwAvKltbbm9yZXR1cm5dXSovAGNhbm5vdCBhc3NpZ24gYSB0ZW1wb3Jhcnkgb3duZXIgdG8gbm8tb3duZXIgb2JqZWN0LgBVbmljb2RlIGNoYXJhY3RlciBsaXRlcmFscyBtYXkgbm90IGNvbnRhaW4gbXVsdGlwbGUgY2hhcmFjdGVycy4AdXNlIG9mICclcycgd2l0aCB0YWcgdHlwZSB0aGF0IGRvZXMgbm90IG1hdGNoIHByZXZpb3VzIGRlY2xhcmF0aW9uLgBzdHJ1Y3QgJyVzJyBpcyBpbmNvbXBsZXRlLgBDaGFyYWN0ZXIgdG9vIGxhcmdlIGZvciBlbmNsb3NpbmcgY2hhcmFjdGVyIGxpdGVyYWwgdHlwZS4AVGhlIG9iamVjdCAnJXMnIG1heSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpdHMgbGlmZXRpbWUgaGF2ZSBlbmRlZC4AaW52YWxpZCB0eXBlcyBmb3Igb3BlcmF0b3IgLQAsACoAIXRva2VuX2xpc3RfaXNfZW1wdHkobGlzdCkAKGN1cnJlbnQpACgoJXMpJXMpACgjJTAyZCAlcykAcF9leHByZXNzaW9uX25vZGUgPT0gTlVMTCB8fCAocF9leHByZXNzaW9uX25vZGUtPmZpcnN0X3Rva2VuICYmIHBfZXhwcmVzc2lvbl9ub2RlLT5sYXN0X3Rva2VuKQAobnVsbCkAci50YWlsID09IE5VTEwgfHwgIXRva2VuX2lzX2JsYW5rKHIudGFpbCkAbWlzc2luZyBtYWNybyBhcmd1bWVudCAoc2hvdWxkIGJlIGNoZWNrZWQgYmVmb3JlKQB0eXBlX2lzX2FycmF5KHBfdHlwZSkAdHlwZV9pc19wb2ludGVyX29yX2FycmF5KHBfdHlwZSkAIW1hY3JvX2FscmVhZHlfZXhwYW5kZWQobGlzdCwgbWFjcm8tPm5hbWUpACF0b2tlbl9pc19ibGFuayhpbnB1dF9saXN0LT5oZWFkKQAhdG9rZW5faXNfYmxhbmsobmV3X2xpc3QuaGVhZCkAYXNzZXJ0KF9fVkFfQVJHU19fKQAocC0+aGVhZCA9PSBOVUxMICYmIHAtPnRhaWwgPT0gTlVMTCkgfHwgKHAtPmhlYWQgIT0gTlVMTCAmJiBwLT50YWlsICE9IE5VTEwpACEoaW5wdXRfbGlzdC0+aGVhZC0+ZmxhZ3MgJiBUS19GTEFHX0hBU19ORVdMSU5FX0JFRk9SRSkAIShuZXdfbGlzdC5oZWFkLT5mbGFncyAmIFRLX0ZMQUdfSEFTX05FV0xJTkVfQkVGT1JFKQAhdG9rZW5fbGlzdF9pc19lbXB0eSgmbGlzdDIpACgoX0Jvb2wpMSkAKChfQm9vbCkwKQAoKHZvaWQqKTApAG1pc3NpbmcgKQBleHBlY3RlZCApACgAcF9icmFja2V0X2luaXRpYWxpemVyX2xpc3QtPmZpcnN0X3Rva2VuLT50eXBlID09ICd7JwBleHBlY3RlZCBkZWNsYXJhdGlvbiBub3QgJyVzJwBtZW1iZXIgJyVzJyBub3QgZm91bmQgaW4gc3RydWN0ICclcycAdXNpbmcgYSB1bmluaXRpYWxpemVkIG9iamVjdCAnJXMnAHVua25vd24gb3B0aW9uICclcycAc3RydWN0IG1lbWJlciAnJXMnIG5vdCBmb3VuZCBpbiAnJXMnAHVua25vd24gd2FybmluZyAnJXMnAGludmFsaWQgdHlwZSAnJXMnAG5vdCBmb3VuZCAnJXMnAGRpciA9ICclcycAaW1wbGljaXQgY29udmVyc2lvbiBmcm9tICdlbnVtICVzJyB0byAnZW51bSAlcycAb3AgPT0gJz09JyB8fCBvcCA9PSAnIT0nAHduYW1lWzBdID09ICctJwBleHBlY3RlZCAnfScgYmVmb3JlICcpJwBleHBlY3RlZCAnXScgYmVmb3JlICcpJwBwX2V4cHJlc3Npb25fbm9kZS0+Zmlyc3RfdG9rZW4tPnR5cGUgPT0gJygnAC8vIwB5b3UgY2FuIHVzZSAiYWRqYWNlbnQiICJzdHJpbmdzIgAsICJlcnJvciIAInplcm8iAFwiACB8IAB7IAAgZGlzY2FyZGluZyBjb25zdCBhdCBhcmd1bWVudCAAIGluY29tcGF0aWJsZSB0eXBlcyBhdCBhcmd1bWVudCAAc3RydWN0IAAgaW5jb21wYXRpYmxlIHR5cGVzIAB7ICVzIABlbnVtIABpZ25vcmluZyB0aGUgcmVzdWx0IG9mIG93bmVyIHR5cGUgAG9iamVjdCAnJXMnIGNhbiBiZSB1bmluaXRpYWxpemVkIABlbGlmIGRlZmluZWQgAGVsaWYgISBkZWZpbmVkIAAgLT4gACVwOiVzID09IAAjJTAyZCAlcyA9PSAAICVzIF90bXAgPSAAZXJyb3I6IAB3YXJuaW5nOiAAbm90ZTogABtbOTdtJXM6JWQ6JWQ6IAAlcyglZCwlZCk6IAAgICAgICAgICAgICAgICB9CgAjJTAyZCB7CgAgICAgICAgICAgICAgImFydGlmYWN0TG9jYXRpb24iOiB7CgAgICAgICAgInBoeXNpY2FsTG9jYXRpb24iOiB7CgAgICAgICAgICAgICAgICJyZWdpb24iOiB7CgAgICAgICJtZXNzYWdlIjogewoAICAgICAgICAgIHsKABtbOTFtZXJyb3I6IBtbOTdtJXMKABtbOTVtd2FybmluZzogG1s5N20lcwoAG1szNjsxbW5vdGU6IBtbOTdtJXMKAGV4cGVjdGVkIDolcwoAZXhwZWN0ZWQgdG9rZW4gJXMgZ290ICVzCgAlcyAlcwoAdGFnICVzCgBfU3RhdGljX2Fzc2VydCBmYWlsZWQgJXMKAHJlYWQgJXMKAGVycm9yOiAlcwoAd2FybmluZzogJXMKAG5vdGU6ICVzCgB0b28gZmV3IGFyZ3VtZW50cyBwcm92aWRlZCB0byBmdW5jdGlvbi1saWtlIG1hY3JvIGludm9jYXRpb24KABtbOTdtQ2FrZSAwLjguMxtbMG0KACNwcmFnbWEgb25jZQojZGVmaW5lIF9JT0ZCRiAweDAwMDAKI2RlZmluZSBfSU9MQkYgMHgwMDQwCiNkZWZpbmUgX0lPTkJGIDB4MDAwNAoKI2RlZmluZSBCVUZTSVogIDUxMgoKI2RlZmluZSBFT0YgICAgKC0xKQoKI2RlZmluZSBGSUxFTkFNRV9NQVggICAgMjYwCiNkZWZpbmUgRk9QRU5fTUFYICAgICAgIDIwCgojZGVmaW5lIExfdG1wbmFtICAgMjYwIC8vIF9NQVhfUEFUSAoKLyogU2VlayBtZXRob2QgY29uc3RhbnRzICovCgojZGVmaW5lIFNFRUtfQ1VSICAgIDEKI2RlZmluZSBTRUVLX0VORCAgICAyCiNkZWZpbmUgU0VFS19TRVQgICAgMAoKCiNkZWZpbmUgVE1QX01BWCAgICAgICAgIDIxNDc0ODM2NDcKCgoKdHlwZWRlZiBsb25nIGxvbmcgZnBvc190Owp0eXBlZGVmIGludCBGSUxFOwoKZXh0ZXJuIEZJTEUqIHN0ZGluOwpleHRlcm4gRklMRSogc3Rkb3V0OwpleHRlcm4gRklMRSogc3RkZXJyOwoKdHlwZWRlZiBpbnQgc2l6ZV90Owp0eXBlZGVmIHZvaWQqIHZhX2xpc3Q7CmludCByZW1vdmUoY29uc3QgY2hhciogZmlsZW5hbWUpOwppbnQgcmVuYW1lKGNvbnN0IGNoYXIqIG9sZCwgY29uc3QgY2hhciogbmV3cyk7CkZJTEUqIF9PcHQgdG1wZmlsZSh2b2lkKTsKY2hhciogdG1wbmFtKGNoYXIqIHMpOwojaWYgZGVmaW5lZChfX1NURENfT1dORVJTSElQX18pIAppbnQgZmNsb3NlKEZJTEUqIF9Pd25lciBzdHJlYW0pOwojZWxzZQppbnQgZmNsb3NlKEZJTEUqIHN0cmVhbSk7CiNlbmRpZgppbnQgZmZsdXNoKEZJTEUqIHN0cmVhbSk7CiNpZiBkZWZpbmVkKF9fU1REQ19PV05FUlNISVBfXykgCkZJTEUqIF9Pd25lciBfT3B0IGZvcGVuKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZpbGVuYW1lLCBjb25zdCBjaGFyKiByZXN0cmljdCBtb2RlKTsKRklMRSogX093bmVyIF9PcHQgZnJlb3Blbihjb25zdCBjaGFyKiByZXN0cmljdCBmaWxlbmFtZSwgY29uc3QgY2hhciogcmVzdHJpY3QgbW9kZSwgRklMRSogcmVzdHJpY3Qgc3RyZWFtKTsKI2Vsc2UKRklMRSogZm9wZW4oY29uc3QgY2hhciogcmVzdHJpY3QgZmlsZW5hbWUsIGNvbnN0IGNoYXIqIHJlc3RyaWN0IG1vZGUpOwpGSUxFKiBmcmVvcGVuKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZpbGVuYW1lLCBjb25zdCBjaGFyKiByZXN0cmljdCBtb2RlLCBGSUxFKiByZXN0cmljdCBzdHJlYW0pOwojZW5kaWYKdm9pZCBzZXRidWYoRklMRSogcmVzdHJpY3Qgc3RyZWFtLCBjaGFyKiByZXN0cmljdCBidWYpOwppbnQgc2V0dmJ1ZihGSUxFKiByZXN0cmljdCBzdHJlYW0sIGNoYXIqIHJlc3RyaWN0IGJ1ZiwgaW50IG1vZGUsIHNpemVfdCBzaXplKTsKaW50IGZwcmludGYoRklMRSogcmVzdHJpY3Qgc3RyZWFtLCBjb25zdCBjaGFyKiByZXN0cmljdCBmb3JtYXQsIC4uLik7CmludCBmc2NhbmYoRklMRSogcmVzdHJpY3Qgc3RyZWFtLCBjb25zdCBjaGFyKiByZXN0cmljdCBmb3JtYXQsIC4uLik7CmludCBwcmludGYoY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwppbnQgc2NhbmYoY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwppbnQgc25wcmludGYoY2hhciogcmVzdHJpY3Qgcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgLi4uKTsKaW50IHNwcmludGYoY2hhciogcmVzdHJpY3QgcywgY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwppbnQgc3NjYW5mKGNvbnN0IGNoYXIqIHJlc3RyaWN0IHMsIGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgLi4uKTsKaW50IHZmcHJpbnRmKEZJTEUqIHJlc3RyaWN0IHN0cmVhbSwgY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCB2YV9saXN0IGFyZyk7CmludCB2ZnNjYW5mKEZJTEUqIHJlc3RyaWN0IHN0cmVhbSwgY29uc3QgY2hhciogcmVzdHJpY3QgZm9ybWF0LCB2YV9saXN0IGFyZyk7CmludCB2cHJpbnRmKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgdmFfbGlzdCBhcmcpOwppbnQgdnNjYW5mKGNvbnN0IGNoYXIqIHJlc3RyaWN0IGZvcm1hdCwgdmFfbGlzdCBhcmcpOwppbnQgcHV0cyhjb25zdCBjaGFyKiBzdHIpOwppbnQgZnB1dHMoY29uc3QgY2hhciogcmVzdHJpY3QgcywgRklMRSogcmVzdHJpY3Qgc3RyZWFtKTsKaW50IGdldGMoRklMRSogc3RyZWFtKTsKaW50IGdldGNoYXIodm9pZCk7CmludCBwdXRjKGludCBjLCBGSUxFKiBzdHJlYW0pOwppbnQgcHV0Y2hhcihpbnQgYyk7CmludCBwdXRzKGNvbnN0IGNoYXIqIHMpOwppbnQgdW5nZXRjKGludCBjLCBGSUxFKiBzdHJlYW0pOwppbnQgZmdldGMoRklMRSogc3RyZWFtKTsKc2l6ZV90IGZyZWFkKHZvaWQqIHJlc3RyaWN0IHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgRklMRSogcmVzdHJpY3Qgc3RyZWFtKTsKc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiByZXN0cmljdCBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEZJTEUqIHJlc3RyaWN0IHN0cmVhbSk7CmludCBmZ2V0cG9zKEZJTEUqIHJlc3RyaWN0IHN0cmVhbSwgZnBvc190KiByZXN0cmljdCBwb3MpOwppbnQgZnNlZWsoRklMRSogc3RyZWFtLCBsb25nIGludCBvZmZzZXQsIGludCB3aGVuY2UpOwppbnQgZnNldHBvcyhGSUxFKiBzdHJlYW0sIGNvbnN0IGZwb3NfdCogcG9zKTsKbG9uZyBpbnQgZnRlbGwoRklMRSogc3RyZWFtKTsKdm9pZCByZXdpbmQoRklMRSogc3RyZWFtKTsKdm9pZCBjbGVhcmVycihGSUxFKiBzdHJlYW0pOwppbnQgZmVvZihGSUxFKiBzdHJlYW0pOwppbnQgZmVycm9yKEZJTEUqIHN0cmVhbSk7CnZvaWQgcGVycm9yKGNvbnN0IGNoYXIqIHMpOwoKCgojaWZuZGVmIE5VTEwKI2RlZmluZSBOVUxMICgodm9pZCopMCkKI2VuZGlmCgAvLwojcHJhZ21hIG9uY2UKI2RlZmluZSBDSEFSX0JJVCAgICAgIDgKI2RlZmluZSBTQ0hBUl9NSU4gICAoLTEyOCkKI2RlZmluZSBTQ0hBUl9NQVggICAgIDEyNwojZGVmaW5lIFVDSEFSX01BWCAgICAgMHhmZgoKI2lmbmRlZiBfQ0hBUl9VTlNJR05FRAogICAgI2RlZmluZSBDSEFSX01JTiAgICBTQ0hBUl9NSU4KICAgICNkZWZpbmUgQ0hBUl9NQVggICAgU0NIQVJfTUFYCiNlbHNlCiAgICAjZGVmaW5lIENIQVJfTUlOICAgIDAKICAgICNkZWZpbmUgQ0hBUl9NQVggICAgVUNIQVJfTUFYCiNlbmRpZgoKI2RlZmluZSBNQl9MRU5fTUFYICAgIDUKI2RlZmluZSBTSFJUX01JTiAgICAoLTMyNzY4KQojZGVmaW5lIFNIUlRfTUFYICAgICAgMzI3NjcKI2RlZmluZSBVU0hSVF9NQVggICAgIDB4ZmZmZgojZGVmaW5lIElOVF9NSU4gICAgICgtMjE0NzQ4MzY0NyAtIDEpCiNkZWZpbmUgSU5UX01BWCAgICAgICAyMTQ3NDgzNjQ3CiNkZWZpbmUgVUlOVF9NQVggICAgICAweGZmZmZmZmZmCiNkZWZpbmUgTE9OR19NSU4gICAgKC0yMTQ3NDgzNjQ3TCAtIDEpCiNkZWZpbmUgTE9OR19NQVggICAgICAyMTQ3NDgzNjQ3TAojZGVmaW5lIFVMT05HX01BWCAgICAgMHhmZmZmZmZmZlVMCiNkZWZpbmUgTExPTkdfTUFYICAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3aTY0CiNkZWZpbmUgTExPTkdfTUlOICAgKC05MjIzMzcyMDM2ODU0Nzc1ODA3aTY0IC0gMSkKI2RlZmluZSBVTExPTkdfTUFYICAgIDB4ZmZmZmZmZmZmZmZmZmZmZnVpNjQKCiNkZWZpbmUgX0k4X01JTiAgICAgKC0xMjdpOCAtIDEpCiNkZWZpbmUgX0k4X01BWCAgICAgICAxMjdpOAojZGVmaW5lIF9VSThfTUFYICAgICAgMHhmZnVpOAoKI2RlZmluZSBfSTE2X01JTiAgICAoLTMyNzY3aTE2IC0gMSkKI2RlZmluZSBfSTE2X01BWCAgICAgIDMyNzY3aTE2CiNkZWZpbmUgX1VJMTZfTUFYICAgICAweGZmZmZ1aTE2CgojZGVmaW5lIF9JMzJfTUlOICAgICgtMjE0NzQ4MzY0N2kzMiAtIDEpCiNkZWZpbmUgX0kzMl9NQVggICAgICAyMTQ3NDgzNjQ3aTMyCiNkZWZpbmUgX1VJMzJfTUFYICAgICAweGZmZmZmZmZmdWkzMgoKI2RlZmluZSBfSTY0X01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdpNjQgLSAxKQojZGVmaW5lIF9JNjRfTUFYICAgICAgOTIyMzM3MjAzNjg1NDc3NTgwN2k2NAojZGVmaW5lIF9VSTY0X01BWCAgICAgMHhmZmZmZmZmZmZmZmZmZmZmdWk2NAogICAgICAgICNkZWZpbmUgU0laRV9NQVggMHhmZmZmZmZmZgoAICAgICAgICAgICAgICAgICAgImVuZENvbHVtbiI6ICVkCgAbWzk3bWNha2UgJXMgbWFpbi5jCgAgWyVzXQoAICAgICAgICAgXQoAICAgICAgImxvY2F0aW9ucyI6IFsKACAgICAgICAgICJsb2dpY2FsTG9jYXRpb25zIjogWwoAI3ByYWdtYSBvbmNlCgpkb3VibGUgYWNvcyhkb3VibGUgX194KTsKZG91YmxlIGFzaW4oZG91YmxlIF9feCk7CmRvdWJsZSBhdGFuKGRvdWJsZSBfX3gpOwpkb3VibGUgYXRhbjIoZG91YmxlIF9feSwgZG91YmxlIF9feCk7CmRvdWJsZSBjb3MoZG91YmxlIF9feCk7CmRvdWJsZSBzaW4oZG91YmxlIF9feCk7CmRvdWJsZSB0YW4oZG91YmxlIF9feCk7CmRvdWJsZSBjb3NoKGRvdWJsZSBfX3gpOwpkb3VibGUgc2luaChkb3VibGUgX194KTsKZG91YmxlIHRhbmgoZG91YmxlIF9feCk7CmRvdWJsZSBhY29zaChkb3VibGUgX194KTsKZG91YmxlIGFzaW5oKGRvdWJsZSBfX3gpOwpkb3VibGUgYXRhbmgoZG91YmxlIF9feCk7CmRvdWJsZSBleHAoZG91YmxlIF9feCk7CmRvdWJsZSBmcmV4cChkb3VibGUgX194LCBpbnQqIF9fZXhwb25lbnQpOwpkb3VibGUgbGRleHAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOwpkb3VibGUgbG9nKGRvdWJsZSBfX3gpOwpkb3VibGUgbG9nMTAoZG91YmxlIF9feCk7CmRvdWJsZSBtb2RmKGRvdWJsZSBfX3gsIGRvdWJsZSogX19pcHRyKTsKZG91YmxlIGV4cG0xKGRvdWJsZSBfX3gpOwpkb3VibGUgbG9nMXAoZG91YmxlIF9feCk7CmRvdWJsZSBsb2diKGRvdWJsZSBfX3gpOwpkb3VibGUgZXhwMihkb3VibGUgX194KTsKZG91YmxlIGxvZzIoZG91YmxlIF9feCk7CmRvdWJsZSBwb3coZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBzcXJ0KGRvdWJsZSBfX3gpOwpkb3VibGUgaHlwb3QoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBjYnJ0KGRvdWJsZSBfX3gpOwpkb3VibGUgY2VpbChkb3VibGUgX194KTsKZG91YmxlIGZhYnMoZG91YmxlIF9feCk7CmRvdWJsZSBmbG9vcihkb3VibGUgX194KTsKZG91YmxlIGZtb2QoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmludCBpc2luZihkb3VibGUgX192YWx1ZSk7CmludCBmaW5pdGUoZG91YmxlIF9fdmFsdWUpOwpkb3VibGUgZHJlbShkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIHNpZ25pZmljYW5kKGRvdWJsZSBfX3gpOwpkb3VibGUgY29weXNpZ24oZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBuYW4oY29uc3QgY2hhciogX190YWdiKTsKaW50IGlzbmFuKGRvdWJsZSBfX3ZhbHVlKTsKZG91YmxlIGowKGRvdWJsZSk7CmRvdWJsZSBqMShkb3VibGUpOwpkb3VibGUgam4oaW50LCBkb3VibGUpOwpkb3VibGUgeTAoZG91YmxlKTsKZG91YmxlIHkxKGRvdWJsZSk7CmRvdWJsZSB5bihpbnQsIGRvdWJsZSk7CmRvdWJsZSBlcmYoZG91YmxlKTsKZG91YmxlIGVyZmMoZG91YmxlKTsKZG91YmxlIGxnYW1tYShkb3VibGUpOwpkb3VibGUgdGdhbW1hKGRvdWJsZSk7CmRvdWJsZSBnYW1tYShkb3VibGUpOwpkb3VibGUgbGdhbW1hX3IoZG91YmxlLCBpbnQqIF9fc2lnbmdhbXApOwpkb3VibGUgcmludChkb3VibGUgX194KTsKZG91YmxlIG5leHRhZnRlcihkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIG5leHR0b3dhcmQoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKZG91YmxlIHJlbWFpbmRlcihkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIHNjYWxibihkb3VibGUgX194LCBpbnQgX19uKTsKaW50IGlsb2diKGRvdWJsZSBfX3gpOwpkb3VibGUgc2NhbGJsbihkb3VibGUgX194LCBsb25nIGludCBfX24pOwpkb3VibGUgbmVhcmJ5aW50KGRvdWJsZSBfX3gpOwpkb3VibGUgcm91bmQoZG91YmxlIF9feCk7CmRvdWJsZSB0cnVuYyhkb3VibGUgX194KTsKZG91YmxlIHJlbXF1byhkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQqIF9fcXVvKTsKbG9uZyBpbnQgbHJpbnQoZG91YmxlIF9feCk7CmxvbmcgbG9uZyBpbnQgbGxyb3VuZChkb3VibGUgX194KTsKZG91YmxlIGZkaW0oZG91YmxlIF9feCwgZG91YmxlIF9feSk7CmRvdWJsZSBmbWF4KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwpkb3VibGUgZm1pbihkb3VibGUgX194LCBkb3VibGUgX195KTsKZG91YmxlIGZtYShkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KTsKZG91YmxlIHNjYWxiKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOwpmbG9hdCBhY29zZihmbG9hdCBfX3gpOwpmbG9hdCBhc2luZihmbG9hdCBfX3gpOwpmbG9hdCBhdGFuZihmbG9hdCBfX3gpOwpmbG9hdCBhdGFuMmYoZmxvYXQgX195LCBmbG9hdCBfX3gpOwpmbG9hdCBjb3NmKGZsb2F0IF9feCk7CmZsb2F0IHNpbmYoZmxvYXQgX194KTsKZmxvYXQgdGFuZihmbG9hdCBfX3gpOwpmbG9hdCBjb3NoZihmbG9hdCBfX3gpOwpmbG9hdCBzaW5oZihmbG9hdCBfX3gpOwpmbG9hdCB0YW5oZihmbG9hdCBfX3gpOwpmbG9hdCBhY29zaGYoZmxvYXQgX194KTsKZmxvYXQgYXNpbmhmKGZsb2F0IF9feCk7CmZsb2F0IGF0YW5oZihmbG9hdCBfX3gpOwpmbG9hdCBleHBmKGZsb2F0IF9feCk7CmZsb2F0IGZyZXhwZihmbG9hdCBfX3gsIGludCogX19leHBvbmVudCk7CmZsb2F0IGxkZXhwZihmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsKZmxvYXQgbG9nZihmbG9hdCBfX3gpOwpmbG9hdCBsb2cxMGYoZmxvYXQgX194KTsgZmxvYXQgX19sb2cxMGYoZmxvYXQgX194KTsKZmxvYXQgbW9kZmYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKTsKZmxvYXQgZXhwbTFmKGZsb2F0IF9feCk7CmZsb2F0IGxvZzFwZihmbG9hdCBfX3gpOwpmbG9hdCBsb2diZihmbG9hdCBfX3gpOwpmbG9hdCBleHAyZihmbG9hdCBfX3gpOwpmbG9hdCBsb2cyZihmbG9hdCBfX3gpOwpmbG9hdCBwb3dmKGZsb2F0IF9feCwgZmxvYXQgX195KTsKZmxvYXQgc3FydGYoZmxvYXQgX194KTsKZmxvYXQgaHlwb3RmKGZsb2F0IF9feCwgZmxvYXQgX195KTsKZmxvYXQgY2JydGYoZmxvYXQgX194KTsKZmxvYXQgY2VpbGYoZmxvYXQgX194KTsKZmxvYXQgZmFic2YoZmxvYXQgX194KTsKZmxvYXQgZmxvb3JmKGZsb2F0IF9feCk7CmZsb2F0IGZtb2RmKGZsb2F0IF9feCwgZmxvYXQgX195KTsgCmludCBpc2luZmYoZmxvYXQgX192YWx1ZSk7CmludCBmaW5pdGVmKGZsb2F0IF9fdmFsdWUpOwpmbG9hdCBkcmVtZihmbG9hdCBfX3gsIGZsb2F0IF9feSk7CmZsb2F0IHNpZ25pZmljYW5kZihmbG9hdCBfX3gpOyAKZmxvYXQgY29weXNpZ25mKGZsb2F0IF9feCwgZmxvYXQgX195KTsgCmZsb2F0IG5hbmYoY29uc3QgY2hhciogX190YWdiKTsgCmludCBpc25hbmYoZmxvYXQgX192YWx1ZSk7CmZsb2F0IGowZihmbG9hdCk7IApmbG9hdCBqMWYoZmxvYXQpOyAKZmxvYXQgam5mKGludCwgZmxvYXQpOyAKZmxvYXQgeTBmKGZsb2F0KTsgCmZsb2F0IHkxZihmbG9hdCk7IApmbG9hdCB5bmYoaW50LCBmbG9hdCk7IApmbG9hdCBlcmZmKGZsb2F0KTsgCmZsb2F0IGVyZmNmKGZsb2F0KTsKZmxvYXQgbGdhbW1hZihmbG9hdCk7CmZsb2F0IHRnYW1tYWYoZmxvYXQpOwpmbG9hdCBnYW1tYWYoZmxvYXQpOyAKZmxvYXQgbGdhbW1hZl9yKGZsb2F0LCBpbnQqIF9fc2lnbmdhbXApOyAKZmxvYXQgcmludGYoZmxvYXQgX194KTsgCmZsb2F0IG5leHRhZnRlcmYoZmxvYXQgX194LCBmbG9hdCBfX3kpOyAKZmxvYXQgbmV4dHRvd2FyZGYoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKZmxvYXQgcmVtYWluZGVyZihmbG9hdCBfX3gsIGZsb2F0IF9feSk7IApmbG9hdCBzY2FsYm5mKGZsb2F0IF9feCwgaW50IF9fbik7IAppbnQgaWxvZ2JmKGZsb2F0IF9feCk7IApmbG9hdCBzY2FsYmxuZihmbG9hdCBfX3gsIGxvbmcgaW50IF9fbik7IApmbG9hdCBuZWFyYnlpbnRmKGZsb2F0IF9feCk7IApmbG9hdCByb3VuZGYoZmxvYXQgX194KTsgCmZsb2F0IHRydW5jZihmbG9hdCBfX3gpOyAKZmxvYXQgcmVtcXVvZihmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50KiBfX3F1byk7IApsb25nIGludCBscmludGYoZmxvYXQgX194KTsgCmxvbmcgbG9uZyBpbnQgbGxyb3VuZGYoZmxvYXQgX194KTsgCmZsb2F0IGZkaW1mKGZsb2F0IF9feCwgZmxvYXQgX195KTsKZmxvYXQgZm1heGYoZmxvYXQgX194LCBmbG9hdCBfX3kpOyAKZmxvYXQgZm1pbmYoZmxvYXQgX194LCBmbG9hdCBfX3kpOwpmbG9hdCBmbWFmKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opOyAKZmxvYXQgc2NhbGJmKGZsb2F0IF9feCwgZmxvYXQgX19uKTsgCmxvbmcgZG91YmxlIGFjb3NsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBhc2lubChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgYXRhbmwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGF0YW4ybChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBjb3NsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBzaW5sKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSB0YW5sKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBjb3NobChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSBzaW5obChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSB0YW5obChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSBhY29zaGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGFzaW5obChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgYXRhbmhsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBleHBsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBmcmV4cGwobG9uZyBkb3VibGUgX194LCBpbnQqIF9fZXhwb25lbnQpOyAKbG9uZyBkb3VibGUgbGRleHBsKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyAKbG9uZyBkb3VibGUgbG9nbChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgbG9nMTBsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBtb2RmbChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpOyAKbG9uZyBkb3VibGUgZXhwbTFsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBsb2cxcGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGxvZ2JsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBleHAybChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgbG9nMmwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIHBvd2wobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKbG9uZyBkb3VibGUgc3FydGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGh5cG90bChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IApsb25nIGRvdWJsZSBjYnJ0bChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgY2VpbGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIGZhYnNsKGxvbmcgZG91YmxlIF9feCk7IApsb25nIGRvdWJsZSBmbG9vcmwobG9uZyBkb3VibGUgX194KTsKbG9uZyBkb3VibGUgZm1vZGwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKaW50IGlzaW5mbChsb25nIGRvdWJsZSBfX3ZhbHVlKTsKaW50IGZpbml0ZWwobG9uZyBkb3VibGUgX192YWx1ZSk7CmxvbmcgZG91YmxlIGRyZW1sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgCmxvbmcgZG91YmxlIHNpZ25pZmljYW5kbChsb25nIGRvdWJsZSBfX3gpOyAKbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgCmxvbmcgZG91YmxlIG5hbmwoY29uc3QgY2hhciogX190YWdiKTsgCmludCBpc25hbmwobG9uZyBkb3VibGUgX192YWx1ZSk7CmxvbmcgZG91YmxlIGowbChsb25nIGRvdWJsZSk7IApsb25nIGRvdWJsZSBqMWwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgam5sKGludCwgbG9uZyBkb3VibGUpOwpsb25nIGRvdWJsZSB5MGwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgeTFsKGxvbmcgZG91YmxlKTsgCmxvbmcgZG91YmxlIHlubChpbnQsIGxvbmcgZG91YmxlKTsKbG9uZyBkb3VibGUgZXJmbChsb25nIGRvdWJsZSk7IApsb25nIGRvdWJsZSBlcmZjbChsb25nIGRvdWJsZSk7CmxvbmcgZG91YmxlIGxnYW1tYWwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgdGdhbW1hbChsb25nIGRvdWJsZSk7IApsb25nIGRvdWJsZSBnYW1tYWwobG9uZyBkb3VibGUpOyAKbG9uZyBkb3VibGUgbGdhbW1hbF9yKGxvbmcgZG91YmxlLCBpbnQqIF9fc2lnbmdhbXApOyAKbG9uZyBkb3VibGUgcmludGwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIG5leHRhZnRlcmwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyAKbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwpsb25nIGRvdWJsZSByZW1haW5kZXJsKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgCmxvbmcgZG91YmxlIHNjYWxibmwobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsgCmludCBpbG9nYmwobG9uZyBkb3VibGUgX194KTsgCmxvbmcgZG91YmxlIHNjYWxibG5sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsgCmxvbmcgZG91YmxlIG5lYXJieWludGwobG9uZyBkb3VibGUgX194KTsKbG9uZyBkb3VibGUgcm91bmRsKGxvbmcgZG91YmxlIF9feCk7CmxvbmcgZG91YmxlIHRydW5jbChsb25nIGRvdWJsZSBfX3gpOwpsb25nIGRvdWJsZSByZW1xdW9sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQqIF9fcXVvKTsKbG9uZyBpbnQgbHJpbnRsKGxvbmcgZG91YmxlIF9feCk7CmxvbmcgbG9uZyBpbnQgbGxyb3VuZGwobG9uZyBkb3VibGUgX194KTsKbG9uZyBkb3VibGUgZmRpbWwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwpsb25nIGRvdWJsZSBmbWF4bChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CmxvbmcgZG91YmxlIGZtaW5sKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKbG9uZyBkb3VibGUgZm1hbChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KTsKbG9uZyBkb3VibGUgc2NhbGJsKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKTsKAC0tLSBiZWdpbiBvZiBzY29wZS0tLQoALS0tIGVuZCBvZiBzY29wZS0tLQoAICAgICAgICAgICAgICB9LAoAICAgICAgICAgICAgICAgICAgInN0YXJ0Q29sdW1uIjogJWQsCgAgICAgICAgICAgICAgICAgICAic3RhcnRMaW5lIjogJWQsCgAgICAgICAgICAgICAgICAgICAiZW5kTGluZSI6ICVkLAoAICAgICAicnVsZUlkIjoiJXMiLAoAICAgICAgICAgICAgICAiZGVjb3JhdGVkTmFtZSI6ICIlcyIsCgAgICAgICAgICAgICAgICJmdWxseVF1YWxpZmllZE5hbWUiOiAiJXMiLAoAICAgICAibGV2ZWwiOiJ3YXJuaW5nIiwKACAgICAgICAgICAgICAgICAgInVyaSI6ICJmaWxlOi8vLyVzIgoAICAgICAgICAgICAgInRleHQiOiAiJXMiCgAgICAgICAgICAgICAgICJraW5kIjogIiVzIgoAI2RlZmluZSBfX1RJTUVfXyAiJTAyZDolMDJkOiUwMmQiCgAjZGVmaW5lIF9fREFURV9fICIlcyAlMmQgJWQiCgBleHBlY3RlZCBFT0YgCgAKI2lmZGVmIE5ERUJVRwojZGVmaW5lIGFzc2VydCguLi4pICgodm9pZCkwKSNlbHNlI2RlZmluZSBhc3NlcnQoLi4uKSBhc3NlcnQoX19WQV9BUkdTX18pCiNlbmRpZgoKACNpZm5kZWYgX19PV05FUlNISVBfSF9fCiNkZWZpbmUgX19PV05FUlNISVBfSF9fCgojcHJhZ21hIG93bmVyc2hpcCBlbmFibGUKI2lmZGVmIF9fU1REQ19PV05FUlNISVBfXwojZGVmaW5lIG91dCBfT3V0CiNkZWZpbmUgb3B0IF9PcHQKI2RlZmluZSBvd25lciBfT3duZXIKI2RlZmluZSBvYmpfb3duZXIgIF9PYmpfb3duZXIKI2RlZmluZSB2aWV3IF9WaWV3CgojZWxzZQojZGVmaW5lIG91dCAKI2RlZmluZSBvcHQgCiNkZWZpbmUgb3duZXIKI2RlZmluZSBvYmpfb3duZXIKI2RlZmluZSB2aWV3CiNkZWZpbmUgc3RhdGljX2RlYnVnKHgpCiNkZWZpbmUgc3RhdGljX3NldCh4LCBzKQojZW5kaWYKCiNlbmRpZgoKAAojZGVmaW5lIHVucmVhY2hhYmxlKCkgZG8ge30gd2hpbGUoMCkgCnR5cGVkZWYgbG9uZyBpbnQgcHRyZGlmZl90Owp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsKdHlwZWRlZiBpbnQgd2NoYXJfdDsKdHlwZWRlZiBzdHJ1Y3QgewogIGxvbmcgbG9uZyBfX21heF9hbGlnbl9sbDsKICBsb25nIGRvdWJsZSBfX21heF9hbGlnbl9sZDsKfSBtYXhfYWxpZ25fdDsKCnR5cGVkZWYgdHlwZW9mKG51bGxwdHIpIG51bGxwdHJfdDsKCgAjZGVmaW5lIF9fQ0FLRV9fIDIwMjMxMUwKI2RlZmluZSBfX1NURENfVkVSU0lPTl9fIDIwMjMxMUwKI2RlZmluZSBfX0ZJTEVfXyAiX19GSUxFX18iCiNkZWZpbmUgX19MSU5FX18gMAojZGVmaW5lIF9fQ09VTlRFUl9fIDAKI2RlZmluZSBfQ09OU09MRQojZGVmaW5lIF9fU1REQ19PV05FUlNISVBfXyAxCiNkZWZpbmUgX1dfRElWSVpJT05fQllfWkVST18gMjkKCgAjcHJhZ21hIG9uY2UKCmludCogX2Vycm5vKHZvaWQpOwojZGVmaW5lIGVycm5vICgqX2Vycm5vKCkpCgoKI2RlZmluZSBFUEVSTSAgICAgICAgICAgMQojZGVmaW5lIEVOT0VOVCAgICAgICAgICAyCiNkZWZpbmUgRVNSQ0ggICAgICAgICAgIDMKI2RlZmluZSBFSU5UUiAgICAgICAgICAgNAojZGVmaW5lIEVJTyAgICAgICAgICAgICA1CiNkZWZpbmUgRU5YSU8gICAgICAgICAgIDYKI2RlZmluZSBFMkJJRyAgICAgICAgICAgNwojZGVmaW5lIEVOT0VYRUMgICAgICAgICA4CiNkZWZpbmUgRUJBREYgICAgICAgICAgIDkKI2RlZmluZSBFQ0hJTEQgICAgICAgICAgMTAKI2RlZmluZSBFQUdBSU4gICAgICAgICAgMTEKI2RlZmluZSBFTk9NRU0gICAgICAgICAgMTIKI2RlZmluZSBFQUNDRVMgICAgICAgICAgMTMKI2RlZmluZSBFRkFVTFQgICAgICAgICAgMTQKI2RlZmluZSBFQlVTWSAgICAgICAgICAgMTYKI2RlZmluZSBFRVhJU1QgICAgICAgICAgMTcKI2RlZmluZSBFWERFViAgICAgICAgICAgMTgKI2RlZmluZSBFTk9ERVYgICAgICAgICAgMTkKI2RlZmluZSBFTk9URElSICAgICAgICAgMjAKI2RlZmluZSBFSVNESVIgICAgICAgICAgMjEKI2RlZmluZSBFTkZJTEUgICAgICAgICAgMjMKI2RlZmluZSBFTUZJTEUgICAgICAgICAgMjQKI2RlZmluZSBFTk9UVFkgICAgICAgICAgMjUKI2RlZmluZSBFRkJJRyAgICAgICAgICAgMjcKI2RlZmluZSBFTk9TUEMgICAgICAgICAgMjgKI2RlZmluZSBFU1BJUEUgICAgICAgICAgMjkKI2RlZmluZSBFUk9GUyAgICAgICAgICAgMzAKI2RlZmluZSBFTUxJTksgICAgICAgICAgMzEKI2RlZmluZSBFUElQRSAgICAgICAgICAgMzIKI2RlZmluZSBFRE9NICAgICAgICAgICAgMzMKI2RlZmluZSBFREVBRExLICAgICAgICAgMzYKI2RlZmluZSBFTkFNRVRPT0xPTkcgICAgMzgKI2RlZmluZSBFTk9MQ0sgICAgICAgICAgMzkKI2RlZmluZSBFTk9TWVMgICAgICAgICAgNDAKI2RlZmluZSBFTk9URU1QVFkgICAgICAgNDEKCgovLyBTdXBwb3J0IEVERUFETE9DSyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIE1pY3Jvc29mdCBDIHZlcnNpb25zCiNkZWZpbmUgRURFQURMT0NLICAgICAgIEVERUFETEsKCiNkZWZpbmUgRUFERFJJTlVTRSAgICAgIDEwMAojZGVmaW5lIEVBRERSTk9UQVZBSUwgICAxMDEKI2RlZmluZSBFQUZOT1NVUFBPUlQgICAgMTAyCiNkZWZpbmUgRUFMUkVBRFkgICAgICAgIDEwMwojZGVmaW5lIEVCQURNU0cgICAgICAgICAxMDQKI2RlZmluZSBFQ0FOQ0VMRUQgICAgICAgMTA1CiNkZWZpbmUgRUNPTk5BQk9SVEVEICAgIDEwNgojZGVmaW5lIEVDT05OUkVGVVNFRCAgICAxMDcKI2RlZmluZSBFQ09OTlJFU0VUICAgICAgMTA4CiNkZWZpbmUgRURFU1RBRERSUkVRICAgIDEwOQojZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAxMTAKI2RlZmluZSBFSURSTSAgICAgICAgICAgMTExCiNkZWZpbmUgRUlOUFJPR1JFU1MgICAgIDExMgojZGVmaW5lIEVJU0NPTk4gICAgICAgICAxMTMKI2RlZmluZSBFTE9PUCAgICAgICAgICAgMTE0CiNkZWZpbmUgRU1TR1NJWkUgICAgICAgIDExNQojZGVmaW5lIEVORVRET1dOICAgICAgICAxMTYKI2RlZmluZSBFTkVUUkVTRVQgICAgICAgMTE3CiNkZWZpbmUgRU5FVFVOUkVBQ0ggICAgIDExOAojZGVmaW5lIEVOT0JVRlMgICAgICAgICAxMTkKI2RlZmluZSBFTk9EQVRBICAgICAgICAgMTIwCiNkZWZpbmUgRU5PTElOSyAgICAgICAgIDEyMQojZGVmaW5lIEVOT01TRyAgICAgICAgICAxMjIKI2RlZmluZSBFTk9QUk9UT09QVCAgICAgMTIzCiNkZWZpbmUgRU5PU1IgICAgICAgICAgIDEyNAojZGVmaW5lIEVOT1NUUiAgICAgICAgICAxMjUKI2RlZmluZSBFTk9UQ09OTiAgICAgICAgMTI2CiNkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDEyNwojZGVmaW5lIEVOT1RTT0NLICAgICAgICAxMjgKI2RlZmluZSBFTk9UU1VQICAgICAgICAgMTI5CiNkZWZpbmUgRU9QTk9UU1VQUCAgICAgIDEzMAojZGVmaW5lIEVPVEhFUiAgICAgICAgICAxMzEKI2RlZmluZSBFT1ZFUkZMT1cgICAgICAgMTMyCiNkZWZpbmUgRU9XTkVSREVBRCAgICAgIDEzMwojZGVmaW5lIEVQUk9UTyAgICAgICAgICAxMzQKI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgMTM1CiNkZWZpbmUgRVBST1RPVFlQRSAgICAgIDEzNgojZGVmaW5lIEVUSU1FICAgICAgICAgICAxMzcKI2RlZmluZSBFVElNRURPVVQgICAgICAgMTM4CiNkZWZpbmUgRVRYVEJTWSAgICAgICAgIDEzOQojZGVmaW5lIEVXT1VMREJMT0NLICAgICAxNDAKCgAAAABolQEAAAAAAAAAAAAAAAAAAAAAANF0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAAGQAKABkZGQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAAZABEKGRkZAwoHAAEACQsYAAAJBgsAAAsABhkAAAAZGRkAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAGQAKDRkZGQANAAACAAkOAAAACQAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABMAAAAAEwAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAABA8AAAAACRAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAaGhoAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAXAAAAABcAAAAACRQAAAAAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAFQAAAAAVAAAAAAkWAAAAAAAWAAAWAAAwMTIzNDU2Nzg5QUJDREVG"); base64DecodeToExistingUint8Array(bufferView, 104368, "SmFuAEZlYgBNYXIAQXByAE1heQBKdW4ASnVsAEF1ZwBTZXAAT2N0AE5vdgBEZWMAd4kBAJVmAQCWWwEApzcBANOKAQDoawEAnIwBAEk+AQAViQEAAAAAAAAAAAAAAAAA3fv///r//38AAAAAAAAAAAEAAACDHwEAAgAAAJ8hAQADAAAAqxUBABsAAAC+FgEABAAAAFgHAQAFAAAA4w0BAAYAAACWCwEABwAAANINAQAIAAAAWgkBAAkAAACGGgEACgAAAOweAQALAAAAsAMBAAwAAABwGQEADgAAAMUHAQAQAAAA8iABABEAAABnEAEAIwAAADERAQANAAAAVRkBAA8AAAD9HAEAFAAAAIUPAQAVAAAAlQ4BABYAAACfDgEAFwAAAF4aAQAYAAAARhoBABkAAADoDgEAHAAAAO4KAQAaAAAAXhoBAB8AAACxBQEAHQAAAMIgAQAgAAAAyR8BACEAAAAJGQEAHgAAAFUiAQASAAAA8BkBACQAAAA8AQEAJQAAAO8VAQAmAAAAvRABABMAAAD5EQEAJwAAADAKAQAoAAAAQwMBACkAAADkBAEAIgAAAGofAQABAAAAAAAAAAUAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAEAAAAKJsBAAAEAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAD/////CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCZAQBAoQEA"); base64DecodeToExistingUint8Array(bufferView, 104976, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); }