From 89bc96c1f56305e18d1284e7d18f5801e28b9857 Mon Sep 17 00:00:00 2001 From: mzed <github@mikezed.com> Date: Wed, 5 Oct 2016 16:24:15 +0100 Subject: [PATCH] Fixes #20 ofx example and html example using pulse modulation and regerssion --- .gitignore | 28 +- examples/html/RapidAPI_006.html | 235 +++++ examples/ofx/rapidAPI006/Makefile | 13 + examples/ofx/rapidAPI006/Project.xcconfig | 17 + examples/ofx/rapidAPI006/addons.make | 2 + examples/ofx/rapidAPI006/config.make | 142 +++ .../ofx/rapidAPI006/openFrameworks-Info.plist | 22 + .../rapidAPI006/rapidAPI_006 copy-Info.plist | 22 + .../rapidAPI_006.xcodeproj/project.pbxproj | 889 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + examples/ofx/rapidAPI006/src/main.cpp | 13 + examples/ofx/rapidAPI006/src/ofApp.cpp | 206 ++++ examples/ofx/rapidAPI006/src/ofApp.h | 65 ++ src/rapidMix.js | 176 ++-- 14 files changed, 1748 insertions(+), 89 deletions(-) create mode 100644 examples/html/RapidAPI_006.html create mode 100644 examples/ofx/rapidAPI006/Makefile create mode 100644 examples/ofx/rapidAPI006/Project.xcconfig create mode 100644 examples/ofx/rapidAPI006/addons.make create mode 100644 examples/ofx/rapidAPI006/config.make create mode 100644 examples/ofx/rapidAPI006/openFrameworks-Info.plist create mode 100644 examples/ofx/rapidAPI006/rapidAPI_006 copy-Info.plist create mode 100644 examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.pbxproj create mode 100644 examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 examples/ofx/rapidAPI006/src/main.cpp create mode 100644 examples/ofx/rapidAPI006/src/ofApp.cpp create mode 100644 examples/ofx/rapidAPI006/src/ofApp.h diff --git a/.gitignore b/.gitignore index fdbf970..e789f02 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,30 @@ flycheck_*.el /server/ # projectiles files -.projectile \ No newline at end of file +.projectile + + +### Xcode ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ + +## Other +*.moved-aside +*.xccheckout +*.xcscmblueprint \ No newline at end of file diff --git a/examples/html/RapidAPI_006.html b/examples/html/RapidAPI_006.html new file mode 100644 index 0000000..13b996f --- /dev/null +++ b/examples/html/RapidAPI_006.html @@ -0,0 +1,235 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta charset="utf-8"> +<title>Simple Rapid API</title> +<style> + canvas { + background: rgb(54, 75, 85); + border: 1px; + margin-bottom: 1em; + } +</style> +</head> +<body><script>var mp_xhr = function(){var a=function(a){if(-1!=a.indexOf(";base64,")){var b=a.indexOf(";base64,")+8;return a.slice(b).match(/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/)?a.slice(b):!1}return!1},b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c=function(a){var c=b.indexOf(a.charAt(a.length-1));return 64==c?a.substring(0,a.length-1):a},d=function(a){var d=a.length/4*3,e=new ArrayBuffer(d);a=c(c(a));var g,h,i,j,k,l,m,n,f=parseInt(a.length/4*3,10),o=0,p=0;for(g=new Uint8Array(e),a=a.replace(/[^A-Za-z0-9+/=]/g,""),o=0;f>o;o+=3)k=b.indexOf(a.charAt(p++)),l=b.indexOf(a.charAt(p++)),m=b.indexOf(a.charAt(p++)),n=b.indexOf(a.charAt(p++)),h=k<<2|l>>4,i=(15&l)<<4|m>>2,j=(3&m)<<6|n,g[o]=h,64!=m&&(g[o+1]=i),64!=n&&(g[o+2]=j);return e},e=window.XMLHttpRequest;window.XMLHttpRequest=function(){this._orig=e,this.xhr=new this._orig,this.is_b64=!1,this.responseURL="",this.response=null,this.responseXML="",this.responseType="",this.withCredentials=!1,this.status=0,this.statusText="",this.readyState=0,this.timeout=0,this.upload={onloadstart:null,onloadend:null,onprogress:null},this.onreadystatechange=null,this.onprogress=null,this.onload=null,this.upload={}},window.XMLHttpRequest.prototype.open=function(b,c,e,f,g){var h=a(c);h?(this.is_b64=!0,console.log("overriding XHR open"),this.responseURL="monkeypatched://base64",this.response=d(h),console.log(this.response)):(console.log("using normal xhr"),this.is_b64=!1,this.xhr.open.apply(this.xhr,arguments))},window.XMLHttpRequest.prototype.send=function(){if(this.is_b64){console.log("overriding XHR send");var a=new CustomEvent("load",{target:this}),b=new CustomEvent("readystatechange",{target:this});this.readyState=4,this.status=200,this.statusText="OK",this.onreadystatechange&&this.onreadystatechange(b),this.onload&&this.onload(a)}else{this.upload=this.xhr.upload,this.xhr.withCredentials=this.withCredentials,this.xhr.responseType=this.responseType;var c=this;this.xhr.onload=function(a){c.readyState=c.xhr.readyState,(""==c.responseType||"document"==c.responseType)&&(c.responseXML=c.xhr.responseXML),c.response=c.xhr.response,(""==c.responseType||"text"==c.responseType)&&(c.responseText=c.xhr.responseText),c.status=c.xhr.status,c.statusText=c.xhr.statusText,c.onload&&c.onload(a)},this.xhr.onreadystatechange=function(a){c.readyState=c.xhr.readyState,c.status=c.xhr.status,c.statusText=c.xhr.statusText,c.onreadystatechange&&c.onreadystatechange(a)},this.xhr.send.apply(this.xhr,arguments)}},window.XMLHttpRequest.prototype.abort=function(){this.xhr.abort.apply(this.xhr,arguments)},window.XMLHttpRequest.prototype.setRequestHeader=function(){this.xhr.setRequestHeader.apply(this.xhr,arguments)},window.XMLHttpRequest.prototype.getAllResponseHeaders=function(){return this.xhr.getAllResponseHeaders.apply(this.xhr,arguments)},window.XMLHttpRequest.prototype.getResponseHeader=function(){return this.xhr.getResponseHeader.apply(this.xhr,arguments)},window.XMLHttpRequest.prototype.addEventListener=function(a,b){this["on"+a]=b}}; mp_xhr(); window.parent = null; document.onkeydown = function (e) { if (e.which === 8 && !(e.target.tagName == 'INPUT') && !(e.target.tagName == 'TEXTAREA') && !(e.target.getAttribute('contenteditable'))) { e.preventDefault(); } }; </script> <style> body { margin: 0; padding: 0; background:white; } </style><script type="text/javascript" src="data:text/javascript;base64,dmFyIE1vZHVsZTsKaWYgKCFNb2R1bGUpIE1vZHVsZSA9ICh0eXBlb2YgTW9kdWxlICE9PSAidW5kZWZpbmVkIiA/IE1vZHVsZSA6IG51bGwpIHx8IHt9Owp2YXIgbW9kdWxlT3ZlcnJpZGVzID0ge307CmZvciAodmFyIGtleSBpbiBNb2R1bGUpIHsKIGlmIChNb2R1bGUuaGFzT3duUHJvcGVydHkoa2V5KSkgewogIG1vZHVsZU92ZXJyaWRlc1trZXldID0gTW9kdWxlW2tleV07CiB9Cn0KdmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHR5cGVvZiB3aW5kb3cgPT09ICJvYmplY3QiOwp2YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICJmdW5jdGlvbiI7CnZhciBFTlZJUk9OTUVOVF9JU19OT0RFID0gdHlwZW9mIHByb2Nlc3MgPT09ICJvYmplY3QiICYmIHR5cGVvZiByZXF1aXJlID09PSAiZnVuY3Rpb24iICYmICFFTlZJUk9OTUVOVF9JU19XRUIgJiYgIUVOVklST05NRU5UX0lTX1dPUktFUjsKdmFyIEVOVklST05NRU5UX0lTX1NIRUxMID0gIUVOVklST05NRU5UX0lTX1dFQiAmJiAhRU5WSVJPTk1FTlRfSVNfTk9ERSAmJiAhRU5WSVJPTk1FTlRfSVNfV09SS0VSOwppZiAoRU5WSVJPTk1FTlRfSVNfTk9ERSkgewogaWYgKCFNb2R1bGVbInByaW50Il0pIE1vZHVsZVsicHJpbnQiXSA9IGZ1bmN0aW9uIHByaW50KHgpIHsKICBwcm9jZXNzWyJzdGRvdXQiXS53cml0ZSh4ICsgIlxuIik7CiB9OwogaWYgKCFNb2R1bGVbInByaW50RXJyIl0pIE1vZHVsZVsicHJpbnRFcnIiXSA9IGZ1bmN0aW9uIHByaW50RXJyKHgpIHsKICBwcm9jZXNzWyJzdGRlcnIiXS53cml0ZSh4ICsgIlxuIik7CiB9OwogdmFyIG5vZGVGUyA9IHJlcXVpcmUoImZzIik7CiB2YXIgbm9kZVBhdGggPSByZXF1aXJlKCJwYXRoIik7CiBNb2R1bGVbInJlYWQiXSA9IGZ1bmN0aW9uIHJlYWQoZmlsZW5hbWUsIGJpbmFyeSkgewogIGZpbGVuYW1lID0gbm9kZVBhdGhbIm5vcm1hbGl6ZSJdKGZpbGVuYW1lKTsKICB2YXIgcmV0ID0gbm9kZUZTWyJyZWFkRmlsZVN5bmMiXShmaWxlbmFtZSk7CiAgaWYgKCFyZXQgJiYgZmlsZW5hbWUgIT0gbm9kZVBhdGhbInJlc29sdmUiXShmaWxlbmFtZSkpIHsKICAgZmlsZW5hbWUgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAiLi4iLCAic3JjIiwgZmlsZW5hbWUpOwogICByZXQgPSBub2RlRlNbInJlYWRGaWxlU3luYyJdKGZpbGVuYW1lKTsKICB9CiAgaWYgKHJldCAmJiAhYmluYXJ5KSByZXQgPSByZXQudG9TdHJpbmcoKTsKICByZXR1cm4gcmV0OwogfTsKIE1vZHVsZVsicmVhZEJpbmFyeSJdID0gZnVuY3Rpb24gcmVhZEJpbmFyeShmaWxlbmFtZSkgewogIHZhciByZXQgPSBNb2R1bGVbInJlYWQiXShmaWxlbmFtZSwgdHJ1ZSk7CiAgaWYgKCFyZXQuYnVmZmVyKSB7CiAgIHJldCA9IG5ldyBVaW50OEFycmF5KHJldCk7CiAgfQogIGFzc2VydChyZXQuYnVmZmVyKTsKICByZXR1cm4gcmV0OwogfTsKIE1vZHVsZVsibG9hZCJdID0gZnVuY3Rpb24gbG9hZChmKSB7CiAgZ2xvYmFsRXZhbChyZWFkKGYpKTsKIH07CiBpZiAoIU1vZHVsZVsidGhpc1Byb2dyYW0iXSkgewogIGlmIChwcm9jZXNzWyJhcmd2Il0ubGVuZ3RoID4gMSkgewogICBNb2R1bGVbInRoaXNQcm9ncmFtIl0gPSBwcm9jZXNzWyJhcmd2Il1bMV0ucmVwbGFjZSgvXFwvZywgIi8iKTsKICB9IGVsc2UgewogICBNb2R1bGVbInRoaXNQcm9ncmFtIl0gPSAidW5rbm93bi1wcm9ncmFtIjsKICB9CiB9CiBNb2R1bGVbImFyZ3VtZW50cyJdID0gcHJvY2Vzc1siYXJndiJdLnNsaWNlKDIpOwogaWYgKHR5cGVvZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiKSB7CiAgbW9kdWxlWyJleHBvcnRzIl0gPSBNb2R1bGU7CiB9CiBwcm9jZXNzWyJvbiJdKCJ1bmNhdWdodEV4Y2VwdGlvbiIsIChmdW5jdGlvbihleCkgewogIGlmICghKGV4IGluc3RhbmNlb2YgRXhpdFN0YXR1cykpIHsKICAgdGhyb3cgZXg7CiAgfQogfSkpOwogTW9kdWxlWyJpbnNwZWN0Il0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuICJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSI7CiB9KTsKfSBlbHNlIGlmIChFTlZJUk9OTUVOVF9JU19TSEVMTCkgewogaWYgKCFNb2R1bGVbInByaW50Il0pIE1vZHVsZVsicHJpbnQiXSA9IHByaW50OwogaWYgKHR5cGVvZiBwcmludEVyciAhPSAidW5kZWZpbmVkIikgTW9kdWxlWyJwcmludEVyciJdID0gcHJpbnRFcnI7CiBpZiAodHlwZW9mIHJlYWQgIT0gInVuZGVmaW5lZCIpIHsKICBNb2R1bGVbInJlYWQiXSA9IHJlYWQ7CiB9IGVsc2UgewogIE1vZHVsZVsicmVhZCJdID0gZnVuY3Rpb24gcmVhZCgpIHsKICAgdGhyb3cgIm5vIHJlYWQoKSBhdmFpbGFibGUgKGpzYz8pIjsKICB9OwogfQogTW9kdWxlWyJyZWFkQmluYXJ5Il0gPSBmdW5jdGlvbiByZWFkQmluYXJ5KGYpIHsKICBpZiAodHlwZW9mIHJlYWRidWZmZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlYWRidWZmZXIoZikpOwogIH0KICB2YXIgZGF0YSA9IHJlYWQoZiwgImJpbmFyeSIpOwogIGFzc2VydCh0eXBlb2YgZGF0YSA9PT0gIm9iamVjdCIpOwogIHJldHVybiBkYXRhOwogfTsKIGlmICh0eXBlb2Ygc2NyaXB0QXJncyAhPSAidW5kZWZpbmVkIikgewogIE1vZHVsZVsiYXJndW1lbnRzIl0gPSBzY3JpcHRBcmdzOwogfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnRzICE9ICJ1bmRlZmluZWQiKSB7CiAgTW9kdWxlWyJhcmd1bWVudHMiXSA9IGFyZ3VtZW50czsKIH0KfSBlbHNlIGlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7CiBNb2R1bGVbInJlYWQiXSA9IGZ1bmN0aW9uIHJlYWQodXJsKSB7CiAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKICB4aHIub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgeGhyLnNlbmQobnVsbCk7CiAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7CiB9OwogaWYgKHR5cGVvZiBhcmd1bWVudHMgIT0gInVuZGVmaW5lZCIpIHsKICBNb2R1bGVbImFyZ3VtZW50cyJdID0gYXJndW1lbnRzOwogfQogaWYgKHR5cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIikgewogIGlmICghTW9kdWxlWyJwcmludCJdKSBNb2R1bGVbInByaW50Il0gPSBmdW5jdGlvbiBwcmludCh4KSB7CiAgIGNvbnNvbGUubG9nKHgpOwogIH07CiAgaWYgKCFNb2R1bGVbInByaW50RXJyIl0pIE1vZHVsZVsicHJpbnRFcnIiXSA9IGZ1bmN0aW9uIHByaW50RXJyKHgpIHsKICAgY29uc29sZS5sb2coeCk7CiAgfTsKIH0gZWxzZSB7CiAgdmFyIFRSWV9VU0VfRFVNUCA9IGZhbHNlOwogIGlmICghTW9kdWxlWyJwcmludCJdKSBNb2R1bGVbInByaW50Il0gPSBUUllfVVNFX0RVTVAgJiYgdHlwZW9mIGR1bXAgIT09ICJ1bmRlZmluZWQiID8gKGZ1bmN0aW9uKHgpIHsKICAgZHVtcCh4KTsKICB9KSA6IChmdW5jdGlvbih4KSB7fSk7CiB9CiBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7CiAgTW9kdWxlWyJsb2FkIl0gPSBpbXBvcnRTY3JpcHRzOwogfQogaWYgKHR5cGVvZiBNb2R1bGVbInNldFdpbmRvd1RpdGxlIl0gPT09ICJ1bmRlZmluZWQiKSB7CiAgTW9kdWxlWyJzZXRXaW5kb3dUaXRsZSJdID0gKGZ1bmN0aW9uKHRpdGxlKSB7CiAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7CiAgfSk7CiB9Cn0gZWxzZSB7CiB0aHJvdyAiVW5rbm93biBydW50aW1lIGVudmlyb25tZW50LiBXaGVyZSBhcmUgd2U/IjsKfQpmdW5jdGlvbiBnbG9iYWxFdmFsKHgpIHsKIGV2YWwuY2FsbChudWxsLCB4KTsKfQppZiAoIU1vZHVsZVsibG9hZCJdICYmIE1vZHVsZVsicmVhZCJdKSB7CiBNb2R1bGVbImxvYWQiXSA9IGZ1bmN0aW9uIGxvYWQoZikgewogIGdsb2JhbEV2YWwoTW9kdWxlWyJyZWFkIl0oZikpOwogfTsKfQppZiAoIU1vZHVsZVsicHJpbnQiXSkgewogTW9kdWxlWyJwcmludCJdID0gKGZ1bmN0aW9uKCkge30pOwp9CmlmICghTW9kdWxlWyJwcmludEVyciJdKSB7CiBNb2R1bGVbInByaW50RXJyIl0gPSBNb2R1bGVbInByaW50Il07Cn0KaWYgKCFNb2R1bGVbImFyZ3VtZW50cyJdKSB7CiBNb2R1bGVbImFyZ3VtZW50cyJdID0gW107Cn0KaWYgKCFNb2R1bGVbInRoaXNQcm9ncmFtIl0pIHsKIE1vZHVsZVsidGhpc1Byb2dyYW0iXSA9ICIuL3RoaXMucHJvZ3JhbSI7Cn0KTW9kdWxlLnByaW50ID0gTW9kdWxlWyJwcmludCJdOwpNb2R1bGUucHJpbnRFcnIgPSBNb2R1bGVbInByaW50RXJyIl07Ck1vZHVsZVsicHJlUnVuIl0gPSBbXTsKTW9kdWxlWyJwb3N0UnVuIl0gPSBbXTsKZm9yICh2YXIga2V5IGluIG1vZHVsZU92ZXJyaWRlcykgewogaWYgKG1vZHVsZU92ZXJyaWRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CiAgTW9kdWxlW2tleV0gPSBtb2R1bGVPdmVycmlkZXNba2V5XTsKIH0KfQp2YXIgUnVudGltZSA9IHsKIHNldFRlbXBSZXQwOiAoZnVuY3Rpb24odmFsdWUpIHsKICB0ZW1wUmV0MCA9IHZhbHVlOwogfSksCiBnZXRUZW1wUmV0MDogKGZ1bmN0aW9uKCkgewogIHJldHVybiB0ZW1wUmV0MDsKIH0pLAogc3RhY2tTYXZlOiAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIFNUQUNLVE9QOwogfSksCiBzdGFja1Jlc3RvcmU6IChmdW5jdGlvbihzdGFja1RvcCkgewogIFNUQUNLVE9QID0gc3RhY2tUb3A7CiB9KSwKIGdldE5hdGl2ZVR5cGVTaXplOiAoZnVuY3Rpb24odHlwZSkgewogIHN3aXRjaCAodHlwZSkgewogIGNhc2UgImkxIjoKICBjYXNlICJpOCI6CiAgIHJldHVybiAxOwogIGNhc2UgImkxNiI6CiAgIHJldHVybiAyOwogIGNhc2UgImkzMiI6CiAgIHJldHVybiA0OwogIGNhc2UgImk2NCI6CiAgIHJldHVybiA4OwogIGNhc2UgImZsb2F0IjoKICAgcmV0dXJuIDQ7CiAgY2FzZSAiZG91YmxlIjoKICAgcmV0dXJuIDg7CiAgZGVmYXVsdDoKICAgewogICAgaWYgKHR5cGVbdHlwZS5sZW5ndGggLSAxXSA9PT0gIioiKSB7CiAgICAgcmV0dXJuIFJ1bnRpbWUuUVVBTlRVTV9TSVpFOwogICAgfSBlbHNlIGlmICh0eXBlWzBdID09PSAiaSIpIHsKICAgICB2YXIgYml0cyA9IHBhcnNlSW50KHR5cGUuc3Vic3RyKDEpKTsKICAgICBhc3NlcnQoYml0cyAlIDggPT09IDApOwogICAgIHJldHVybiBiaXRzIC8gODsKICAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIDA7CiAgICB9CiAgIH0KICB9CiB9KSwKIGdldE5hdGl2ZUZpZWxkU2l6ZTogKGZ1bmN0aW9uKHR5cGUpIHsKICByZXR1cm4gTWF0aC5tYXgoUnVudGltZS5nZXROYXRpdmVUeXBlU2l6ZSh0eXBlKSwgUnVudGltZS5RVUFOVFVNX1NJWkUpOwogfSksCiBTVEFDS19BTElHTjogMTYsCiBwcmVwVmFyYXJnOiAoZnVuY3Rpb24ocHRyLCB0eXBlKSB7CiAgaWYgKHR5cGUgPT09ICJkb3VibGUiIHx8IHR5cGUgPT09ICJpNjQiKSB7CiAgIGlmIChwdHIgJiA3KSB7CiAgICBhc3NlcnQoKHB0ciAmIDcpID09PSA0KTsKICAgIHB0ciArPSA0OwogICB9CiAgfSBlbHNlIHsKICAgYXNzZXJ0KChwdHIgJiAzKSA9PT0gMCk7CiAgfQogIHJldHVybiBwdHI7CiB9KSwKIGdldEFsaWduU2l6ZTogKGZ1bmN0aW9uKHR5cGUsIHNpemUsIHZhcmFyZykgewogIGlmICghdmFyYXJnICYmICh0eXBlID09ICJpNjQiIHx8IHR5cGUgPT0gImRvdWJsZSIpKSByZXR1cm4gODsKICBpZiAoIXR5cGUpIHJldHVybiBNYXRoLm1pbihzaXplLCA4KTsKICByZXR1cm4gTWF0aC5taW4oc2l6ZSB8fCAodHlwZSA/IFJ1bnRpbWUuZ2V0TmF0aXZlRmllbGRTaXplKHR5cGUpIDogMCksIFJ1bnRpbWUuUVVBTlRVTV9TSVpFKTsKIH0pLAogZHluQ2FsbDogKGZ1bmN0aW9uKHNpZywgcHRyLCBhcmdzKSB7CiAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGgpIHsKICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09IHNpZy5sZW5ndGggLSAxKTsKICAgaWYgKCFhcmdzLnNwbGljZSkgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOwogICBhcmdzLnNwbGljZSgwLCAwLCBwdHIpOwogICBhc3NlcnQoImR5bkNhbGxfIiArIHNpZyBpbiBNb2R1bGUsICJiYWQgZnVuY3Rpb24gcG9pbnRlciB0eXBlIC0gbm8gdGFibGUgZm9yIHNpZyAnIiArIHNpZyArICInIik7CiAgIHJldHVybiBNb2R1bGVbImR5bkNhbGxfIiArIHNpZ10uYXBwbHkobnVsbCwgYXJncyk7CiAgfSBlbHNlIHsKICAgYXNzZXJ0KHNpZy5sZW5ndGggPT0gMSk7CiAgIGFzc2VydCgiZHluQ2FsbF8iICsgc2lnIGluIE1vZHVsZSwgImJhZCBmdW5jdGlvbiBwb2ludGVyIHR5cGUgLSBubyB0YWJsZSBmb3Igc2lnICciICsgc2lnICsgIiciKTsKICAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF8iICsgc2lnXS5jYWxsKG51bGwsIHB0cik7CiAgfQogfSksCiBmdW5jdGlvblBvaW50ZXJzOiBbXSwKIGFkZEZ1bmN0aW9uOiAoZnVuY3Rpb24oZnVuYykgewogIGZvciAodmFyIGkgPSAwOyBpIDwgUnVudGltZS5mdW5jdGlvblBvaW50ZXJzLmxlbmd0aDsgaSsrKSB7CiAgIGlmICghUnVudGltZS5mdW5jdGlvblBvaW50ZXJzW2ldKSB7CiAgICBSdW50aW1lLmZ1bmN0aW9uUG9pbnRlcnNbaV0gPSBmdW5jOwogICAgcmV0dXJuIDIgKiAoMSArIGkpOwogICB9CiAgfQogIHRocm93ICJGaW5pc2hlZCB1cCBhbGwgcmVzZXJ2ZWQgZnVuY3Rpb24gcG9pbnRlcnMuIFVzZSBhIGhpZ2hlciB2YWx1ZSBmb3IgUkVTRVJWRURfRlVOQ1RJT05fUE9JTlRFUlMuIjsKIH0pLAogcmVtb3ZlRnVuY3Rpb246IChmdW5jdGlvbihpbmRleCkgewogIFJ1bnRpbWUuZnVuY3Rpb25Qb2ludGVyc1soaW5kZXggLSAyKSAvIDJdID0gbnVsbDsKIH0pLAogd2Fybk9uY2U6IChmdW5jdGlvbih0ZXh0KSB7CiAgaWYgKCFSdW50aW1lLndhcm5PbmNlLnNob3duKSBSdW50aW1lLndhcm5PbmNlLnNob3duID0ge307CiAgaWYgKCFSdW50aW1lLndhcm5PbmNlLnNob3duW3RleHRdKSB7CiAgIFJ1bnRpbWUud2Fybk9uY2Uuc2hvd25bdGV4dF0gPSAxOwogICBNb2R1bGUucHJpbnRFcnIodGV4dCk7CiAgfQogfSksCiBmdW5jV3JhcHBlcnM6IHt9LAogZ2V0RnVuY1dyYXBwZXI6IChmdW5jdGlvbihmdW5jLCBzaWcpIHsKICBhc3NlcnQoc2lnKTsKICBpZiAoIVJ1bnRpbWUuZnVuY1dyYXBwZXJzW3NpZ10pIHsKICAgUnVudGltZS5mdW5jV3JhcHBlcnNbc2lnXSA9IHt9OwogIH0KICB2YXIgc2lnQ2FjaGUgPSBSdW50aW1lLmZ1bmNXcmFwcGVyc1tzaWddOwogIGlmICghc2lnQ2FjaGVbZnVuY10pIHsKICAgc2lnQ2FjaGVbZnVuY10gPSBmdW5jdGlvbiBkeW5DYWxsX3dyYXBwZXIoKSB7CiAgICByZXR1cm4gUnVudGltZS5keW5DYWxsKHNpZywgZnVuYywgYXJndW1lbnRzKTsKICAgfTsKICB9CiAgcmV0dXJuIHNpZ0NhY2hlW2Z1bmNdOwogfSksCiBnZXRDb21waWxlclNldHRpbmc6IChmdW5jdGlvbihuYW1lKSB7CiAgdGhyb3cgIllvdSBtdXN0IGJ1aWxkIHdpdGggLXMgUkVUQUlOX0NPTVBJTEVSX1NFVFRJTkdTPTEgZm9yIFJ1bnRpbWUuZ2V0Q29tcGlsZXJTZXR0aW5nIG9yIGVtc2NyaXB0ZW5fZ2V0X2NvbXBpbGVyX3NldHRpbmcgdG8gd29yayI7CiB9KSwKIHN0YWNrQWxsb2M6IChmdW5jdGlvbihzaXplKSB7CiAgdmFyIHJldCA9IFNUQUNLVE9QOwogIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyBzaXplIHwgMDsKICBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTUgJiAtMTY7CiAgYXNzZXJ0KChTVEFDS1RPUCB8IDApIDwgKFNUQUNLX01BWCB8IDApIHwgMCkgfCAwOwogIHJldHVybiByZXQ7CiB9KSwKIHN0YXRpY0FsbG9jOiAoZnVuY3Rpb24oc2l6ZSkgewogIHZhciByZXQgPSBTVEFUSUNUT1A7CiAgU1RBVElDVE9QID0gU1RBVElDVE9QICsgKGFzc2VydCghc3RhdGljU2VhbGVkKSwgc2l6ZSkgfCAwOwogIFNUQVRJQ1RPUCA9IFNUQVRJQ1RPUCArIDE1ICYgLTE2OwogIHJldHVybiByZXQ7CiB9KSwKIGR5bmFtaWNBbGxvYzogKGZ1bmN0aW9uKHNpemUpIHsKICB2YXIgcmV0ID0gRFlOQU1JQ1RPUDsKICBEWU5BTUlDVE9QID0gRFlOQU1JQ1RPUCArIChhc3NlcnQoRFlOQU1JQ1RPUCA+IDApLCBzaXplKSB8IDA7CiAgRFlOQU1JQ1RPUCA9IERZTkFNSUNUT1AgKyAxNSAmIC0xNjsKICBpZiAoRFlOQU1JQ1RPUCA+PSBUT1RBTF9NRU1PUlkpIHsKICAgdmFyIHN1Y2Nlc3MgPSBlbmxhcmdlTWVtb3J5KCk7CiAgIGlmICghc3VjY2VzcykgewogICAgRFlOQU1JQ1RPUCA9IHJldDsKICAgIHJldHVybiAwOwogICB9CiAgfQogIHJldHVybiByZXQ7CiB9KSwKIGFsaWduTWVtb3J5OiAoZnVuY3Rpb24oc2l6ZSwgcXVhbnR1bSkgewogIHZhciByZXQgPSBzaXplID0gTWF0aC5jZWlsKHNpemUgLyAocXVhbnR1bSA/IHF1YW50dW0gOiAxNikpICogKHF1YW50dW0gPyBxdWFudHVtIDogMTYpOwogIHJldHVybiByZXQ7CiB9KSwKIG1ha2VCaWdJbnQ6IChmdW5jdGlvbihsb3csIGhpZ2gsIHVuc2lnbmVkKSB7CiAgdmFyIHJldCA9IHVuc2lnbmVkID8gKyhsb3cgPj4+IDApICsgKyhoaWdoID4+PiAwKSAqICs0Mjk0OTY3Mjk2IDogKyhsb3cgPj4+IDApICsgKyhoaWdoIHwgMCkgKiArNDI5NDk2NzI5NjsKICByZXR1cm4gcmV0OwogfSksCiBHTE9CQUxfQkFTRTogOCwKIFFVQU5UVU1fU0laRTogNCwKIF9fZHVtbXlfXzogMAp9OwpNb2R1bGVbIlJ1bnRpbWUiXSA9IFJ1bnRpbWU7CnZhciBfX1RIUkVXX18gPSAwOwp2YXIgQUJPUlQgPSBmYWxzZTsKdmFyIEVYSVRTVEFUVVMgPSAwOwp2YXIgdW5kZWYgPSAwOwp2YXIgdGVtcFZhbHVlLCB0ZW1wSW50LCB0ZW1wQmlnSW50LCB0ZW1wSW50MiwgdGVtcEJpZ0ludDIsIHRlbXBQYWlyLCB0ZW1wQmlnSW50SSwgdGVtcEJpZ0ludFIsIHRlbXBCaWdJbnRTLCB0ZW1wQmlnSW50UCwgdGVtcEJpZ0ludEQsIHRlbXBEb3VibGUsIHRlbXBGbG9hdDsKdmFyIHRlbXBJNjQsIHRlbXBJNjRiOwp2YXIgdGVtcFJldDAsIHRlbXBSZXQxLCB0ZW1wUmV0MiwgdGVtcFJldDMsIHRlbXBSZXQ0LCB0ZW1wUmV0NSwgdGVtcFJldDYsIHRlbXBSZXQ3LCB0ZW1wUmV0OCwgdGVtcFJldDk7CmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHRleHQpIHsKIGlmICghY29uZGl0aW9uKSB7CiAgYWJvcnQoIkFzc2VydGlvbiBmYWlsZWQ6ICIgKyB0ZXh0KTsKIH0KfQp2YXIgZ2xvYmFsU2NvcGUgPSB0aGlzOwpmdW5jdGlvbiBnZXRDRnVuYyhpZGVudCkgewogdmFyIGZ1bmMgPSBNb2R1bGVbIl8iICsgaWRlbnRdOwogaWYgKCFmdW5jKSB7CiAgdHJ5IHsKICAgZnVuYyA9IGV2YWwoIl8iICsgaWRlbnQpOwogIH0gY2F0Y2ggKGUpIHt9CiB9CiBhc3NlcnQoZnVuYywgIkNhbm5vdCBjYWxsIHVua25vd24gZnVuY3Rpb24gIiArIGlkZW50ICsgIiAocGVyaGFwcyBMTFZNIG9wdGltaXphdGlvbnMgb3IgY2xvc3VyZSByZW1vdmVkIGl0PykiKTsKIHJldHVybiBmdW5jOwp9CnZhciBjd3JhcCwgY2NhbGw7CigoZnVuY3Rpb24oKSB7CiB2YXIgSlNmdW5jcyA9IHsKICAic3RhY2tTYXZlIjogKGZ1bmN0aW9uKCkgewogICBSdW50aW1lLnN0YWNrU2F2ZSgpOwogIH0pLAogICJzdGFja1Jlc3RvcmUiOiAoZnVuY3Rpb24oKSB7CiAgIFJ1bnRpbWUuc3RhY2tSZXN0b3JlKCk7CiAgfSksCiAgImFycmF5VG9DIjogKGZ1bmN0aW9uKGFycikgewogICB2YXIgcmV0ID0gUnVudGltZS5zdGFja0FsbG9jKGFyci5sZW5ndGgpOwogICB3cml0ZUFycmF5VG9NZW1vcnkoYXJyLCByZXQpOwogICByZXR1cm4gcmV0OwogIH0pLAogICJzdHJpbmdUb0MiOiAoZnVuY3Rpb24oc3RyKSB7CiAgIHZhciByZXQgPSAwOwogICBpZiAoc3RyICE9PSBudWxsICYmIHN0ciAhPT0gdW5kZWZpbmVkICYmIHN0ciAhPT0gMCkgewogICAgcmV0ID0gUnVudGltZS5zdGFja0FsbG9jKChzdHIubGVuZ3RoIDw8IDIpICsgMSk7CiAgICB3cml0ZVN0cmluZ1RvTWVtb3J5KHN0ciwgcmV0KTsKICAgfQogICByZXR1cm4gcmV0OwogIH0pCiB9OwogdmFyIHRvQyA9IHsKICAic3RyaW5nIjogSlNmdW5jc1sic3RyaW5nVG9DIl0sCiAgImFycmF5IjogSlNmdW5jc1siYXJyYXlUb0MiXQogfTsKIGNjYWxsID0gZnVuY3Rpb24gY2NhbGxGdW5jKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgYXJncywgb3B0cykgewogIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpOwogIHZhciBjQXJncyA9IFtdOwogIHZhciBzdGFjayA9IDA7CiAgYXNzZXJ0KHJldHVyblR5cGUgIT09ICJhcnJheSIsICdSZXR1cm4gdHlwZSBzaG91bGQgbm90IGJlICJhcnJheSIuJyk7CiAgaWYgKGFyZ3MpIHsKICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgY29udmVydGVyID0gdG9DW2FyZ1R5cGVzW2ldXTsKICAgIGlmIChjb252ZXJ0ZXIpIHsKICAgICBpZiAoc3RhY2sgPT09IDApIHN0YWNrID0gUnVudGltZS5zdGFja1NhdmUoKTsKICAgICBjQXJnc1tpXSA9IGNvbnZlcnRlcihhcmdzW2ldKTsKICAgIH0gZWxzZSB7CiAgICAgY0FyZ3NbaV0gPSBhcmdzW2ldOwogICAgfQogICB9CiAgfQogIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTsKICBpZiAoKCFvcHRzIHx8ICFvcHRzLmFzeW5jKSAmJiB0eXBlb2YgRW10ZXJwcmV0ZXJBc3luYyA9PT0gIm9iamVjdCIpIHsKICAgYXNzZXJ0KCFFbXRlcnByZXRlckFzeW5jLnN0YXRlLCAiY2Fubm90IHN0YXJ0IGFzeW5jIG9wIHdpdGggbm9ybWFsIEpTIGNhbGxpbmcgY2NhbGwiKTsKICB9CiAgaWYgKG9wdHMgJiYgb3B0cy5hc3luYykgYXNzZXJ0KCFyZXR1cm5UeXBlLCAiYXN5bmMgY2NhbGxzIGNhbm5vdCByZXR1cm4gdmFsdWVzIik7CiAgaWYgKHJldHVyblR5cGUgPT09ICJzdHJpbmciKSByZXQgPSBQb2ludGVyX3N0cmluZ2lmeShyZXQpOwogIGlmIChzdGFjayAhPT0gMCkgewogICBpZiAob3B0cyAmJiBvcHRzLmFzeW5jKSB7CiAgICBFbXRlcnByZXRlckFzeW5jLmFzeW5jRmluYWxpemVycy5wdXNoKChmdW5jdGlvbigpIHsKICAgICBSdW50aW1lLnN0YWNrUmVzdG9yZShzdGFjayk7CiAgICB9KSk7CiAgICByZXR1cm47CiAgIH0KICAgUnVudGltZS5zdGFja1Jlc3RvcmUoc3RhY2spOwogIH0KICByZXR1cm4gcmV0OwogfTsKIHZhciBzb3VyY2VSZWdleCA9IC9eZnVuY3Rpb25ccypcKChbXildKilcKVxzKntccyooW14qXSo/KVtccztdKig/OnJldHVyblxzKiguKj8pWztcc10qKT99JC87CiBmdW5jdGlvbiBwYXJzZUpTRnVuYyhqc2Z1bmMpIHsKICB2YXIgcGFyc2VkID0ganNmdW5jLnRvU3RyaW5nKCkubWF0Y2goc291cmNlUmVnZXgpLnNsaWNlKDEpOwogIHJldHVybiB7CiAgIGFyZ3VtZW50czogcGFyc2VkWzBdLAogICBib2R5OiBwYXJzZWRbMV0sCiAgIHJldHVyblZhbHVlOiBwYXJzZWRbMl0KICB9OwogfQogdmFyIEpTc291cmNlID0ge307CiBmb3IgKHZhciBmdW4gaW4gSlNmdW5jcykgewogIGlmIChKU2Z1bmNzLmhhc093blByb3BlcnR5KGZ1bikpIHsKICAgSlNzb3VyY2VbZnVuXSA9IHBhcnNlSlNGdW5jKEpTZnVuY3NbZnVuXSk7CiAgfQogfQogY3dyYXAgPSBmdW5jdGlvbiBjd3JhcChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMpIHsKICBhcmdUeXBlcyA9IGFyZ1R5cGVzIHx8IFtdOwogIHZhciBjZnVuYyA9IGdldENGdW5jKGlkZW50KTsKICB2YXIgbnVtZXJpY0FyZ3MgPSBhcmdUeXBlcy5ldmVyeSgoZnVuY3Rpb24odHlwZSkgewogICByZXR1cm4gdHlwZSA9PT0gIm51bWJlciI7CiAgfSkpOwogIHZhciBudW1lcmljUmV0ID0gcmV0dXJuVHlwZSAhPT0gInN0cmluZyI7CiAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MpIHsKICAgcmV0dXJuIGNmdW5jOwogIH0KICB2YXIgYXJnTmFtZXMgPSBhcmdUeXBlcy5tYXAoKGZ1bmN0aW9uKHgsIGkpIHsKICAgcmV0dXJuICIkIiArIGk7CiAgfSkpOwogIHZhciBmdW5jc3RyID0gIihmdW5jdGlvbigiICsgYXJnTmFtZXMuam9pbigiLCIpICsgIikgeyI7CiAgdmFyIG5hcmdzID0gYXJnVHlwZXMubGVuZ3RoOwogIGlmICghbnVtZXJpY0FyZ3MpIHsKICAgZnVuY3N0ciArPSAidmFyIHN0YWNrID0gIiArIEpTc291cmNlWyJzdGFja1NhdmUiXS5ib2R5ICsgIjsiOwogICBmb3IgKHZhciBpID0gMDsgaSA8IG5hcmdzOyBpKyspIHsKICAgIHZhciBhcmcgPSBhcmdOYW1lc1tpXSwgdHlwZSA9IGFyZ1R5cGVzW2ldOwogICAgaWYgKHR5cGUgPT09ICJudW1iZXIiKSBjb250aW51ZTsKICAgIHZhciBjb252ZXJ0Q29kZSA9IEpTc291cmNlW3R5cGUgKyAiVG9DIl07CiAgICBmdW5jc3RyICs9ICJ2YXIgIiArIGNvbnZlcnRDb2RlLmFyZ3VtZW50cyArICIgPSAiICsgYXJnICsgIjsiOwogICAgZnVuY3N0ciArPSBjb252ZXJ0Q29kZS5ib2R5ICsgIjsiOwogICAgZnVuY3N0ciArPSBhcmcgKyAiPSIgKyBjb252ZXJ0Q29kZS5yZXR1cm5WYWx1ZSArICI7IjsKICAgfQogIH0KICB2YXIgY2Z1bmNuYW1lID0gcGFyc2VKU0Z1bmMoKGZ1bmN0aW9uKCkgewogICByZXR1cm4gY2Z1bmM7CiAgfSkpLnJldHVyblZhbHVlOwogIGZ1bmNzdHIgKz0gInZhciByZXQgPSAiICsgY2Z1bmNuYW1lICsgIigiICsgYXJnTmFtZXMuam9pbigiLCIpICsgIik7IjsKICBpZiAoIW51bWVyaWNSZXQpIHsKICAgdmFyIHN0cmdmeSA9IHBhcnNlSlNGdW5jKChmdW5jdGlvbigpIHsKICAgIHJldHVybiBQb2ludGVyX3N0cmluZ2lmeTsKICAgfSkpLnJldHVyblZhbHVlOwogICBmdW5jc3RyICs9ICJyZXQgPSAiICsgc3RyZ2Z5ICsgIihyZXQpOyI7CiAgfQogIGZ1bmNzdHIgKz0gImlmICh0eXBlb2YgRW10ZXJwcmV0ZXJBc3luYyA9PT0gJ29iamVjdCcpIHsgYXNzZXJ0KCFFbXRlcnByZXRlckFzeW5jLnN0YXRlLCAnY2Fubm90IHN0YXJ0IGFzeW5jIG9wIHdpdGggbm9ybWFsIEpTIGNhbGxpbmcgY3dyYXAnKSB9IjsKICBpZiAoIW51bWVyaWNBcmdzKSB7CiAgIGZ1bmNzdHIgKz0gSlNzb3VyY2VbInN0YWNrUmVzdG9yZSJdLmJvZHkucmVwbGFjZSgiKCkiLCAiKHN0YWNrKSIpICsgIjsiOwogIH0KICBmdW5jc3RyICs9ICJyZXR1cm4gcmV0fSkiOwogIHJldHVybiBldmFsKGZ1bmNzdHIpOwogfTsKfSkpKCk7Ck1vZHVsZVsiY2NhbGwiXSA9IGNjYWxsOwpNb2R1bGVbImN3cmFwIl0gPSBjd3JhcDsKZnVuY3Rpb24gc2V0VmFsdWUocHRyLCB2YWx1ZSwgdHlwZSwgbm9TYWZlKSB7CiB0eXBlID0gdHlwZSB8fCAiaTgiOwogaWYgKHR5cGUuY2hhckF0KHR5cGUubGVuZ3RoIC0gMSkgPT09ICIqIikgdHlwZSA9ICJpMzIiOwogc3dpdGNoICh0eXBlKSB7CiBjYXNlICJpMSI6CiAgSEVBUDhbcHRyID4+IDBdID0gdmFsdWU7CiAgYnJlYWs7CiBjYXNlICJpOCI6CiAgSEVBUDhbcHRyID4+IDBdID0gdmFsdWU7CiAgYnJlYWs7CiBjYXNlICJpMTYiOgogIEhFQVAxNltwdHIgPj4gMV0gPSB2YWx1ZTsKICBicmVhazsKIGNhc2UgImkzMiI6CiAgSEVBUDMyW3B0ciA+PiAyXSA9IHZhbHVlOwogIGJyZWFrOwogY2FzZSAiaTY0IjoKICB0ZW1wSTY0ID0gWyB2YWx1ZSA+Pj4gMCwgKHRlbXBEb3VibGUgPSB2YWx1ZSwgK01hdGhfYWJzKHRlbXBEb3VibGUpID49ICsxID8gdGVtcERvdWJsZSA+ICswID8gKE1hdGhfbWluKCtNYXRoX2Zsb29yKHRlbXBEb3VibGUgLyArNDI5NDk2NzI5NiksICs0Mjk0OTY3Mjk1KSB8IDApID4+PiAwIDogfn4rTWF0aF9jZWlsKCh0ZW1wRG91YmxlIC0gKyh+fnRlbXBEb3VibGUgPj4+IDApKSAvICs0Mjk0OTY3Mjk2KSA+Pj4gMCA6IDApIF0sIEhFQVAzMltwdHIgPj4gMl0gPSB0ZW1wSTY0WzBdLCBIRUFQMzJbcHRyICsgNCA+PiAyXSA9IHRlbXBJNjRbMV07CiAgYnJlYWs7CiBjYXNlICJmbG9hdCI6CiAgSEVBUEYzMltwdHIgPj4gMl0gPSB2YWx1ZTsKICBicmVhazsKIGNhc2UgImRvdWJsZSI6CiAgSEVBUEY2NFtwdHIgPj4gM10gPSB2YWx1ZTsKICBicmVhazsKIGRlZmF1bHQ6CiAgYWJvcnQoImludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICIgKyB0eXBlKTsKIH0KfQpNb2R1bGVbInNldFZhbHVlIl0gPSBzZXRWYWx1ZTsKZnVuY3Rpb24gZ2V0VmFsdWUocHRyLCB0eXBlLCBub1NhZmUpIHsKIHR5cGUgPSB0eXBlIHx8ICJpOCI7CiBpZiAodHlwZS5jaGFyQXQodHlwZS5sZW5ndGggLSAxKSA9PT0gIioiKSB0eXBlID0gImkzMiI7CiBzd2l0Y2ggKHR5cGUpIHsKIGNhc2UgImkxIjoKICByZXR1cm4gSEVBUDhbcHRyID4+IDBdOwogY2FzZSAiaTgiOgogIHJldHVybiBIRUFQOFtwdHIgPj4gMF07CiBjYXNlICJpMTYiOgogIHJldHVybiBIRUFQMTZbcHRyID4+IDFdOwogY2FzZSAiaTMyIjoKICByZXR1cm4gSEVBUDMyW3B0ciA+PiAyXTsKIGNhc2UgImk2NCI6CiAgcmV0dXJuIEhFQVAzMltwdHIgPj4gMl07CiBjYXNlICJmbG9hdCI6CiAgcmV0dXJuIEhFQVBGMzJbcHRyID4+IDJdOwogY2FzZSAiZG91YmxlIjoKICByZXR1cm4gSEVBUEY2NFtwdHIgPj4gM107CiBkZWZhdWx0OgogIGFib3J0KCJpbnZhbGlkIHR5cGUgZm9yIHNldFZhbHVlOiAiICsgdHlwZSk7CiB9CiByZXR1cm4gbnVsbDsKfQpNb2R1bGVbImdldFZhbHVlIl0gPSBnZXRWYWx1ZTsKdmFyIEFMTE9DX05PUk1BTCA9IDA7CnZhciBBTExPQ19TVEFDSyA9IDE7CnZhciBBTExPQ19TVEFUSUMgPSAyOwp2YXIgQUxMT0NfRFlOQU1JQyA9IDM7CnZhciBBTExPQ19OT05FID0gNDsKTW9kdWxlWyJBTExPQ19OT1JNQUwiXSA9IEFMTE9DX05PUk1BTDsKTW9kdWxlWyJBTExPQ19TVEFDSyJdID0gQUxMT0NfU1RBQ0s7Ck1vZHVsZVsiQUxMT0NfU1RBVElDIl0gPSBBTExPQ19TVEFUSUM7Ck1vZHVsZVsiQUxMT0NfRFlOQU1JQyJdID0gQUxMT0NfRFlOQU1JQzsKTW9kdWxlWyJBTExPQ19OT05FIl0gPSBBTExPQ19OT05FOwpmdW5jdGlvbiBhbGxvY2F0ZShzbGFiLCB0eXBlcywgYWxsb2NhdG9yLCBwdHIpIHsKIHZhciB6ZXJvaW5pdCwgc2l6ZTsKIGlmICh0eXBlb2Ygc2xhYiA9PT0gIm51bWJlciIpIHsKICB6ZXJvaW5pdCA9IHRydWU7CiAgc2l6ZSA9IHNsYWI7CiB9IGVsc2UgewogIHplcm9pbml0ID0gZmFsc2U7CiAgc2l6ZSA9IHNsYWIubGVuZ3RoOwogfQogdmFyIHNpbmdsZVR5cGUgPSB0eXBlb2YgdHlwZXMgPT09ICJzdHJpbmciID8gdHlwZXMgOiBudWxsOwogdmFyIHJldDsKIGlmIChhbGxvY2F0b3IgPT0gQUxMT0NfTk9ORSkgewogIHJldCA9IHB0cjsKIH0gZWxzZSB7CiAgcmV0ID0gWyBfbWFsbG9jLCBSdW50aW1lLnN0YWNrQWxsb2MsIFJ1bnRpbWUuc3RhdGljQWxsb2MsIFJ1bnRpbWUuZHluYW1pY0FsbG9jIF1bYWxsb2NhdG9yID09PSB1bmRlZmluZWQgPyBBTExPQ19TVEFUSUMgOiBhbGxvY2F0b3JdKE1hdGgubWF4KHNpemUsIHNpbmdsZVR5cGUgPyAxIDogdHlwZXMubGVuZ3RoKSk7CiB9CiBpZiAoemVyb2luaXQpIHsKICB2YXIgcHRyID0gcmV0LCBzdG9wOwogIGFzc2VydCgocmV0ICYgMykgPT0gMCk7CiAgc3RvcCA9IHJldCArIChzaXplICYgfjMpOwogIGZvciAoOyBwdHIgPCBzdG9wOyBwdHIgKz0gNCkgewogICBIRUFQMzJbcHRyID4+IDJdID0gMDsKICB9CiAgc3RvcCA9IHJldCArIHNpemU7CiAgd2hpbGUgKHB0ciA8IHN0b3ApIHsKICAgSEVBUDhbcHRyKysgPj4gMF0gPSAwOwogIH0KICByZXR1cm4gcmV0OwogfQogaWYgKHNpbmdsZVR5cGUgPT09ICJpOCIpIHsKICBpZiAoc2xhYi5zdWJhcnJheSB8fCBzbGFiLnNsaWNlKSB7CiAgIEhFQVBVOC5zZXQoc2xhYiwgcmV0KTsKICB9IGVsc2UgewogICBIRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHNsYWIpLCByZXQpOwogIH0KICByZXR1cm4gcmV0OwogfQogdmFyIGkgPSAwLCB0eXBlLCB0eXBlU2l6ZSwgcHJldmlvdXNUeXBlOwogd2hpbGUgKGkgPCBzaXplKSB7CiAgdmFyIGN1cnIgPSBzbGFiW2ldOwogIGlmICh0eXBlb2YgY3VyciA9PT0gImZ1bmN0aW9uIikgewogICBjdXJyID0gUnVudGltZS5nZXRGdW5jdGlvbkluZGV4KGN1cnIpOwogIH0KICB0eXBlID0gc2luZ2xlVHlwZSB8fCB0eXBlc1tpXTsKICBpZiAodHlwZSA9PT0gMCkgewogICBpKys7CiAgIGNvbnRpbnVlOwogIH0KICBhc3NlcnQodHlwZSwgIk11c3Qga25vdyB3aGF0IHR5cGUgdG8gc3RvcmUgaW4gYWxsb2NhdGUhIik7CiAgaWYgKHR5cGUgPT0gImk2NCIpIHR5cGUgPSAiaTMyIjsKICBzZXRWYWx1ZShyZXQgKyBpLCBjdXJyLCB0eXBlKTsKICBpZiAocHJldmlvdXNUeXBlICE9PSB0eXBlKSB7CiAgIHR5cGVTaXplID0gUnVudGltZS5nZXROYXRpdmVUeXBlU2l6ZSh0eXBlKTsKICAgcHJldmlvdXNUeXBlID0gdHlwZTsKICB9CiAgaSArPSB0eXBlU2l6ZTsKIH0KIHJldHVybiByZXQ7Cn0KTW9kdWxlWyJhbGxvY2F0ZSJdID0gYWxsb2NhdGU7CmZ1bmN0aW9uIGdldE1lbW9yeShzaXplKSB7CiBpZiAoIXN0YXRpY1NlYWxlZCkgcmV0dXJuIFJ1bnRpbWUuc3RhdGljQWxsb2Moc2l6ZSk7CiBpZiAodHlwZW9mIF9zYnJrICE9PSAidW5kZWZpbmVkIiAmJiAhX3NicmsuY2FsbGVkIHx8ICFydW50aW1lSW5pdGlhbGl6ZWQpIHJldHVybiBSdW50aW1lLmR5bmFtaWNBbGxvYyhzaXplKTsKIHJldHVybiBfbWFsbG9jKHNpemUpOwp9Ck1vZHVsZVsiZ2V0TWVtb3J5Il0gPSBnZXRNZW1vcnk7CmZ1bmN0aW9uIFBvaW50ZXJfc3RyaW5naWZ5KHB0ciwgbGVuZ3RoKSB7CiBpZiAobGVuZ3RoID09PSAwIHx8ICFwdHIpIHJldHVybiAiIjsKIHZhciBoYXNVdGYgPSAwOwogdmFyIHQ7CiB2YXIgaSA9IDA7CiB3aGlsZSAoMSkgewogIGFzc2VydChwdHIgKyBpIDwgVE9UQUxfTUVNT1JZKTsKICB0ID0gSEVBUFU4W3B0ciArIGkgPj4gMF07CiAgaGFzVXRmIHw9IHQ7CiAgaWYgKHQgPT0gMCAmJiAhbGVuZ3RoKSBicmVhazsKICBpKys7CiAgaWYgKGxlbmd0aCAmJiBpID09IGxlbmd0aCkgYnJlYWs7CiB9CiBpZiAoIWxlbmd0aCkgbGVuZ3RoID0gaTsKIHZhciByZXQgPSAiIjsKIGlmIChoYXNVdGYgPCAxMjgpIHsKICB2YXIgTUFYX0NIVU5LID0gMTAyNDsKICB2YXIgY3VycjsKICB3aGlsZSAobGVuZ3RoID4gMCkgewogICBjdXJyID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIEhFQVBVOC5zdWJhcnJheShwdHIsIHB0ciArIE1hdGgubWluKGxlbmd0aCwgTUFYX0NIVU5LKSkpOwogICByZXQgPSByZXQgPyByZXQgKyBjdXJyIDogY3VycjsKICAgcHRyICs9IE1BWF9DSFVOSzsKICAgbGVuZ3RoIC09IE1BWF9DSFVOSzsKICB9CiAgcmV0dXJuIHJldDsKIH0KIHJldHVybiBNb2R1bGVbIlVURjhUb1N0cmluZyJdKHB0cik7Cn0KTW9kdWxlWyJQb2ludGVyX3N0cmluZ2lmeSJdID0gUG9pbnRlcl9zdHJpbmdpZnk7CmZ1bmN0aW9uIEFzY2lpVG9TdHJpbmcocHRyKSB7CiB2YXIgc3RyID0gIiI7CiB3aGlsZSAoMSkgewogIHZhciBjaCA9IEhFQVA4W3B0cisrID4+IDBdOwogIGlmICghY2gpIHJldHVybiBzdHI7CiAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwogfQp9Ck1vZHVsZVsiQXNjaWlUb1N0cmluZyJdID0gQXNjaWlUb1N0cmluZzsKZnVuY3Rpb24gc3RyaW5nVG9Bc2NpaShzdHIsIG91dFB0cikgewogcmV0dXJuIHdyaXRlQXNjaWlUb01lbW9yeShzdHIsIG91dFB0ciwgZmFsc2UpOwp9Ck1vZHVsZVsic3RyaW5nVG9Bc2NpaSJdID0gc3RyaW5nVG9Bc2NpaTsKZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcodThBcnJheSwgaWR4KSB7CiB2YXIgdTAsIHUxLCB1MiwgdTMsIHU0LCB1NTsKIHZhciBzdHIgPSAiIjsKIHdoaWxlICgxKSB7CiAgdTAgPSB1OEFycmF5W2lkeCsrXTsKICBpZiAoIXUwKSByZXR1cm4gc3RyOwogIGlmICghKHUwICYgMTI4KSkgewogICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7CiAgIGNvbnRpbnVlOwogIH0KICB1MSA9IHU4QXJyYXlbaWR4KytdICYgNjM7CiAgaWYgKCh1MCAmIDIyNCkgPT0gMTkyKSB7CiAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh1MCAmIDMxKSA8PCA2IHwgdTEpOwogICBjb250aW51ZTsKICB9CiAgdTIgPSB1OEFycmF5W2lkeCsrXSAmIDYzOwogIGlmICgodTAgJiAyNDApID09IDIyNCkgewogICB1MCA9ICh1MCAmIDE1KSA8PCAxMiB8IHUxIDw8IDYgfCB1MjsKICB9IGVsc2UgewogICB1MyA9IHU4QXJyYXlbaWR4KytdICYgNjM7CiAgIGlmICgodTAgJiAyNDgpID09IDI0MCkgewogICAgdTAgPSAodTAgJiA3KSA8PCAxOCB8IHUxIDw8IDEyIHwgdTIgPDwgNiB8IHUzOwogICB9IGVsc2UgewogICAgdTQgPSB1OEFycmF5W2lkeCsrXSAmIDYzOwogICAgaWYgKCh1MCAmIDI1MikgPT0gMjQ4KSB7CiAgICAgdTAgPSAodTAgJiAzKSA8PCAyNCB8IHUxIDw8IDE4IHwgdTIgPDwgMTIgfCB1MyA8PCA2IHwgdTQ7CiAgICB9IGVsc2UgewogICAgIHU1ID0gdThBcnJheVtpZHgrK10gJiA2MzsKICAgICB1MCA9ICh1MCAmIDEpIDw8IDMwIHwgdTEgPDwgMjQgfCB1MiA8PCAxOCB8IHUzIDw8IDEyIHwgdTQgPDwgNiB8IHU1OwogICAgfQogICB9CiAgfQogIGlmICh1MCA8IDY1NTM2KSB7CiAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTsKICB9IGVsc2UgewogICB2YXIgY2ggPSB1MCAtIDY1NTM2OwogICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGNoID4+IDEwLCA1NjMyMCB8IGNoICYgMTAyMyk7CiAgfQogfQp9Ck1vZHVsZVsiVVRGOEFycmF5VG9TdHJpbmciXSA9IFVURjhBcnJheVRvU3RyaW5nOwpmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyKSB7CiByZXR1cm4gVVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LCBwdHIpOwp9Ck1vZHVsZVsiVVRGOFRvU3RyaW5nIl0gPSBVVEY4VG9TdHJpbmc7CmZ1bmN0aW9uIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgb3V0VThBcnJheSwgb3V0SWR4LCBtYXhCeXRlc1RvV3JpdGUpIHsKIGlmICghKG1heEJ5dGVzVG9Xcml0ZSA+IDApKSByZXR1cm4gMDsKIHZhciBzdGFydElkeCA9IG91dElkeDsKIHZhciBlbmRJZHggPSBvdXRJZHggKyBtYXhCeXRlc1RvV3JpdGUgLSAxOwogZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpOwogIGlmICh1ID49IDU1Mjk2ICYmIHUgPD0gNTczNDMpIHUgPSA2NTUzNiArICgodSAmIDEwMjMpIDw8IDEwKSB8IHN0ci5jaGFyQ29kZUF0KCsraSkgJiAxMDIzOwogIGlmICh1IDw9IDEyNykgewogICBpZiAob3V0SWR4ID49IGVuZElkeCkgYnJlYWs7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gdTsKICB9IGVsc2UgaWYgKHUgPD0gMjA0NykgewogICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrOwogICBvdXRVOEFycmF5W291dElkeCsrXSA9IDE5MiB8IHUgPj4gNjsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ICYgNjM7CiAgfSBlbHNlIGlmICh1IDw9IDY1NTM1KSB7CiAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gMjI0IHwgdSA+PiAxMjsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ID4+IDYgJiA2MzsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ICYgNjM7CiAgfSBlbHNlIGlmICh1IDw9IDIwOTcxNTEpIHsKICAgaWYgKG91dElkeCArIDMgPj0gZW5kSWR4KSBicmVhazsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAyNDAgfCB1ID4+IDE4OwogICBvdXRVOEFycmF5W291dElkeCsrXSA9IDEyOCB8IHUgPj4gMTIgJiA2MzsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ID4+IDYgJiA2MzsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ICYgNjM7CiAgfSBlbHNlIGlmICh1IDw9IDY3MTA4ODYzKSB7CiAgIGlmIChvdXRJZHggKyA0ID49IGVuZElkeCkgYnJlYWs7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gMjQ4IHwgdSA+PiAyNDsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ID4+IDE4ICYgNjM7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gMTI4IHwgdSA+PiAxMiAmIDYzOwogICBvdXRVOEFycmF5W291dElkeCsrXSA9IDEyOCB8IHUgPj4gNiAmIDYzOwogICBvdXRVOEFycmF5W291dElkeCsrXSA9IDEyOCB8IHUgJiA2MzsKICB9IGVsc2UgewogICBpZiAob3V0SWR4ICsgNSA+PSBlbmRJZHgpIGJyZWFrOwogICBvdXRVOEFycmF5W291dElkeCsrXSA9IDI1MiB8IHUgPj4gMzA7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gMTI4IHwgdSA+PiAyNCAmIDYzOwogICBvdXRVOEFycmF5W291dElkeCsrXSA9IDEyOCB8IHUgPj4gMTggJiA2MzsKICAgb3V0VThBcnJheVtvdXRJZHgrK10gPSAxMjggfCB1ID4+IDEyICYgNjM7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gMTI4IHwgdSA+PiA2ICYgNjM7CiAgIG91dFU4QXJyYXlbb3V0SWR4KytdID0gMTI4IHwgdSAmIDYzOwogIH0KIH0KIG91dFU4QXJyYXlbb3V0SWR4XSA9IDA7CiByZXR1cm4gb3V0SWR4IC0gc3RhcnRJZHg7Cn0KTW9kdWxlWyJzdHJpbmdUb1VURjhBcnJheSJdID0gc3RyaW5nVG9VVEY4QXJyYXk7CmZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7CiBhc3NlcnQodHlwZW9mIG1heEJ5dGVzVG9Xcml0ZSA9PSAibnVtYmVyIiwgInN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSBpcyBtaXNzaW5nIHRoZSB0aGlyZCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciEiKTsKIHJldHVybiBzdHJpbmdUb1VURjhBcnJheShzdHIsIEhFQVBVOCwgb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpOwp9Ck1vZHVsZVsic3RyaW5nVG9VVEY4Il0gPSBzdHJpbmdUb1VURjg7CmZ1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpIHsKIHZhciBsZW4gPSAwOwogZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpOwogIGlmICh1ID49IDU1Mjk2ICYmIHUgPD0gNTczNDMpIHUgPSA2NTUzNiArICgodSAmIDEwMjMpIDw8IDEwKSB8IHN0ci5jaGFyQ29kZUF0KCsraSkgJiAxMDIzOwogIGlmICh1IDw9IDEyNykgewogICArK2xlbjsKICB9IGVsc2UgaWYgKHUgPD0gMjA0NykgewogICBsZW4gKz0gMjsKICB9IGVsc2UgaWYgKHUgPD0gNjU1MzUpIHsKICAgbGVuICs9IDM7CiAgfSBlbHNlIGlmICh1IDw9IDIwOTcxNTEpIHsKICAgbGVuICs9IDQ7CiAgfSBlbHNlIGlmICh1IDw9IDY3MTA4ODYzKSB7CiAgIGxlbiArPSA1OwogIH0gZWxzZSB7CiAgIGxlbiArPSA2OwogIH0KIH0KIHJldHVybiBsZW47Cn0KTW9kdWxlWyJsZW5ndGhCeXRlc1VURjgiXSA9IGxlbmd0aEJ5dGVzVVRGODsKZnVuY3Rpb24gVVRGMTZUb1N0cmluZyhwdHIpIHsKIHZhciBpID0gMDsKIHZhciBzdHIgPSAiIjsKIHdoaWxlICgxKSB7CiAgdmFyIGNvZGVVbml0ID0gSEVBUDE2W3B0ciArIGkgKiAyID4+IDFdOwogIGlmIChjb2RlVW5pdCA9PSAwKSByZXR1cm4gc3RyOwogICsraTsKICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlVW5pdCk7CiB9Cn0KTW9kdWxlWyJVVEYxNlRvU3RyaW5nIl0gPSBVVEYxNlRvU3RyaW5nOwpmdW5jdGlvbiBzdHJpbmdUb1VURjE2KHN0ciwgb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpIHsKIGFzc2VydCh0eXBlb2YgbWF4Qnl0ZXNUb1dyaXRlID09ICJudW1iZXIiLCAic3RyaW5nVG9VVEYxNihzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSBpcyBtaXNzaW5nIHRoZSB0aGlyZCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciEiKTsKIGlmIChtYXhCeXRlc1RvV3JpdGUgPT09IHVuZGVmaW5lZCkgewogIG1heEJ5dGVzVG9Xcml0ZSA9IDIxNDc0ODM2NDc7CiB9CiBpZiAobWF4Qnl0ZXNUb1dyaXRlIDwgMikgcmV0dXJuIDA7CiBtYXhCeXRlc1RvV3JpdGUgLT0gMjsKIHZhciBzdGFydFB0ciA9IG91dFB0cjsKIHZhciBudW1DaGFyc1RvV3JpdGUgPSBtYXhCeXRlc1RvV3JpdGUgPCBzdHIubGVuZ3RoICogMiA/IG1heEJ5dGVzVG9Xcml0ZSAvIDIgOiBzdHIubGVuZ3RoOwogZm9yICh2YXIgaSA9IDA7IGkgPCBudW1DaGFyc1RvV3JpdGU7ICsraSkgewogIHZhciBjb2RlVW5pdCA9IHN0ci5jaGFyQ29kZUF0KGkpOwogIEhFQVAxNltvdXRQdHIgPj4gMV0gPSBjb2RlVW5pdDsKICBvdXRQdHIgKz0gMjsKIH0KIEhFQVAxNltvdXRQdHIgPj4gMV0gPSAwOwogcmV0dXJuIG91dFB0ciAtIHN0YXJ0UHRyOwp9Ck1vZHVsZVsic3RyaW5nVG9VVEYxNiJdID0gc3RyaW5nVG9VVEYxNjsKZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEYxNihzdHIpIHsKIHJldHVybiBzdHIubGVuZ3RoICogMjsKfQpNb2R1bGVbImxlbmd0aEJ5dGVzVVRGMTYiXSA9IGxlbmd0aEJ5dGVzVVRGMTY7CmZ1bmN0aW9uIFVURjMyVG9TdHJpbmcocHRyKSB7CiB2YXIgaSA9IDA7CiB2YXIgc3RyID0gIiI7CiB3aGlsZSAoMSkgewogIHZhciB1dGYzMiA9IEhFQVAzMltwdHIgKyBpICogNCA+PiAyXTsKICBpZiAodXRmMzIgPT0gMCkgcmV0dXJuIHN0cjsKICArK2k7CiAgaWYgKHV0ZjMyID49IDY1NTM2KSB7CiAgIHZhciBjaCA9IHV0ZjMyIC0gNjU1MzY7CiAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2IHwgY2ggPj4gMTAsIDU2MzIwIHwgY2ggJiAxMDIzKTsKICB9IGVsc2UgewogICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1dGYzMik7CiAgfQogfQp9Ck1vZHVsZVsiVVRGMzJUb1N0cmluZyJdID0gVVRGMzJUb1N0cmluZzsKZnVuY3Rpb24gc3RyaW5nVG9VVEYzMihzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7CiBhc3NlcnQodHlwZW9mIG1heEJ5dGVzVG9Xcml0ZSA9PSAibnVtYmVyIiwgInN0cmluZ1RvVVRGMzIoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkgaXMgbWlzc2luZyB0aGUgdGhpcmQgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIhIik7CiBpZiAobWF4Qnl0ZXNUb1dyaXRlID09PSB1bmRlZmluZWQpIHsKICBtYXhCeXRlc1RvV3JpdGUgPSAyMTQ3NDgzNjQ3OwogfQogaWYgKG1heEJ5dGVzVG9Xcml0ZSA8IDQpIHJldHVybiAwOwogdmFyIHN0YXJ0UHRyID0gb3V0UHRyOwogdmFyIGVuZFB0ciA9IHN0YXJ0UHRyICsgbWF4Qnl0ZXNUb1dyaXRlIC0gNDsKIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CiAgdmFyIGNvZGVVbml0ID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgaWYgKGNvZGVVbml0ID49IDU1Mjk2ICYmIGNvZGVVbml0IDw9IDU3MzQzKSB7CiAgIHZhciB0cmFpbFN1cnJvZ2F0ZSA9IHN0ci5jaGFyQ29kZUF0KCsraSk7CiAgIGNvZGVVbml0ID0gNjU1MzYgKyAoKGNvZGVVbml0ICYgMTAyMykgPDwgMTApIHwgdHJhaWxTdXJyb2dhdGUgJiAxMDIzOwogIH0KICBIRUFQMzJbb3V0UHRyID4+IDJdID0gY29kZVVuaXQ7CiAgb3V0UHRyICs9IDQ7CiAgaWYgKG91dFB0ciArIDQgPiBlbmRQdHIpIGJyZWFrOwogfQogSEVBUDMyW291dFB0ciA+PiAyXSA9IDA7CiByZXR1cm4gb3V0UHRyIC0gc3RhcnRQdHI7Cn0KTW9kdWxlWyJzdHJpbmdUb1VURjMyIl0gPSBzdHJpbmdUb1VURjMyOwpmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjMyKHN0cikgewogdmFyIGxlbiA9IDA7CiBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogIHZhciBjb2RlVW5pdCA9IHN0ci5jaGFyQ29kZUF0KGkpOwogIGlmIChjb2RlVW5pdCA+PSA1NTI5NiAmJiBjb2RlVW5pdCA8PSA1NzM0MykgKytpOwogIGxlbiArPSA0OwogfQogcmV0dXJuIGxlbjsKfQpNb2R1bGVbImxlbmd0aEJ5dGVzVVRGMzIiXSA9IGxlbmd0aEJ5dGVzVVRGMzI7CmZ1bmN0aW9uIGRlbWFuZ2xlKGZ1bmMpIHsKIHZhciBoYXNMaWJjeHhhYmkgPSAhIU1vZHVsZVsiX19fY3hhX2RlbWFuZ2xlIl07CiBpZiAoaGFzTGliY3h4YWJpKSB7CiAgdHJ5IHsKICAgdmFyIGJ1ZiA9IF9tYWxsb2MoZnVuYy5sZW5ndGgpOwogICB3cml0ZVN0cmluZ1RvTWVtb3J5KGZ1bmMuc3Vic3RyKDEpLCBidWYpOwogICB2YXIgc3RhdHVzID0gX21hbGxvYyg0KTsKICAgdmFyIHJldCA9IE1vZHVsZVsiX19fY3hhX2RlbWFuZ2xlIl0oYnVmLCAwLCAwLCBzdGF0dXMpOwogICBpZiAoZ2V0VmFsdWUoc3RhdHVzLCAiaTMyIikgPT09IDAgJiYgcmV0KSB7CiAgICByZXR1cm4gUG9pbnRlcl9zdHJpbmdpZnkocmV0KTsKICAgfQogIH0gY2F0Y2ggKGUpIHt9IGZpbmFsbHkgewogICBpZiAoYnVmKSBfZnJlZShidWYpOwogICBpZiAoc3RhdHVzKSBfZnJlZShzdGF0dXMpOwogICBpZiAocmV0KSBfZnJlZShyZXQpOwogIH0KIH0KIHZhciBpID0gMzsKIHZhciBiYXNpY1R5cGVzID0gewogICJ2IjogInZvaWQiLAogICJiIjogImJvb2wiLAogICJjIjogImNoYXIiLAogICJzIjogInNob3J0IiwKICAiaSI6ICJpbnQiLAogICJsIjogImxvbmciLAogICJmIjogImZsb2F0IiwKICAiZCI6ICJkb3VibGUiLAogICJ3IjogIndjaGFyX3QiLAogICJhIjogInNpZ25lZCBjaGFyIiwKICAiaCI6ICJ1bnNpZ25lZCBjaGFyIiwKICAidCI6ICJ1bnNpZ25lZCBzaG9ydCIsCiAgImoiOiAidW5zaWduZWQgaW50IiwKICAibSI6ICJ1bnNpZ25lZCBsb25nIiwKICAieCI6ICJsb25nIGxvbmciLAogICJ5IjogInVuc2lnbmVkIGxvbmcgbG9uZyIsCiAgInoiOiAiLi4uIgogfTsKIHZhciBzdWJzID0gW107CiB2YXIgZmlyc3QgPSB0cnVlOwogZnVuY3Rpb24gZHVtcCh4KSB7CiAgaWYgKHgpIE1vZHVsZS5wcmludCh4KTsKICBNb2R1bGUucHJpbnQoZnVuYyk7CiAgdmFyIHByZSA9ICIiOwogIGZvciAodmFyIGEgPSAwOyBhIDwgaTsgYSsrKSBwcmUgKz0gIiAiOwogIE1vZHVsZS5wcmludChwcmUgKyAiXiIpOwogfQogZnVuY3Rpb24gcGFyc2VOZXN0ZWQoKSB7CiAgaSsrOwogIGlmIChmdW5jW2ldID09PSAiSyIpIGkrKzsKICB2YXIgcGFydHMgPSBbXTsKICB3aGlsZSAoZnVuY1tpXSAhPT0gIkUiKSB7CiAgIGlmIChmdW5jW2ldID09PSAiUyIpIHsKICAgIGkrKzsKICAgIHZhciBuZXh0ID0gZnVuYy5pbmRleE9mKCJfIiwgaSk7CiAgICB2YXIgbnVtID0gZnVuYy5zdWJzdHJpbmcoaSwgbmV4dCkgfHwgMDsKICAgIHBhcnRzLnB1c2goc3Vic1tudW1dIHx8ICI/Iik7CiAgICBpID0gbmV4dCArIDE7CiAgICBjb250aW51ZTsKICAgfQogICBpZiAoZnVuY1tpXSA9PT0gIkMiKSB7CiAgICBwYXJ0cy5wdXNoKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKTsKICAgIGkgKz0gMjsKICAgIGNvbnRpbnVlOwogICB9CiAgIHZhciBzaXplID0gcGFyc2VJbnQoZnVuYy5zdWJzdHIoaSkpOwogICB2YXIgcHJlID0gc2l6ZS50b1N0cmluZygpLmxlbmd0aDsKICAgaWYgKCFzaXplIHx8ICFwcmUpIHsKICAgIGktLTsKICAgIGJyZWFrOwogICB9CiAgIHZhciBjdXJyID0gZnVuYy5zdWJzdHIoaSArIHByZSwgc2l6ZSk7CiAgIHBhcnRzLnB1c2goY3Vycik7CiAgIHN1YnMucHVzaChjdXJyKTsKICAgaSArPSBwcmUgKyBzaXplOwogIH0KICBpKys7CiAgcmV0dXJuIHBhcnRzOwogfQogZnVuY3Rpb24gcGFyc2UocmF3TGlzdCwgbGltaXQsIGFsbG93Vm9pZCkgewogIGxpbWl0ID0gbGltaXQgfHwgSW5maW5pdHk7CiAgdmFyIHJldCA9ICIiLCBsaXN0ID0gW107CiAgZnVuY3Rpb24gZmx1c2hMaXN0KCkgewogICByZXR1cm4gIigiICsgbGlzdC5qb2luKCIsICIpICsgIikiOwogIH0KICB2YXIgbmFtZTsKICBpZiAoZnVuY1tpXSA9PT0gIk4iKSB7CiAgIG5hbWUgPSBwYXJzZU5lc3RlZCgpLmpvaW4oIjo6Iik7CiAgIGxpbWl0LS07CiAgIGlmIChsaW1pdCA9PT0gMCkgcmV0dXJuIHJhd0xpc3QgPyBbIG5hbWUgXSA6IG5hbWU7CiAgfSBlbHNlIHsKICAgaWYgKGZ1bmNbaV0gPT09ICJLIiB8fCBmaXJzdCAmJiBmdW5jW2ldID09PSAiTCIpIGkrKzsKICAgdmFyIHNpemUgPSBwYXJzZUludChmdW5jLnN1YnN0cihpKSk7CiAgIGlmIChzaXplKSB7CiAgICB2YXIgcHJlID0gc2l6ZS50b1N0cmluZygpLmxlbmd0aDsKICAgIG5hbWUgPSBmdW5jLnN1YnN0cihpICsgcHJlLCBzaXplKTsKICAgIGkgKz0gcHJlICsgc2l6ZTsKICAgfQogIH0KICBmaXJzdCA9IGZhbHNlOwogIGlmIChmdW5jW2ldID09PSAiSSIpIHsKICAgaSsrOwogICB2YXIgaUxpc3QgPSBwYXJzZSh0cnVlKTsKICAgdmFyIGlSZXQgPSBwYXJzZSh0cnVlLCAxLCB0cnVlKTsKICAgcmV0ICs9IGlSZXRbMF0gKyAiICIgKyBuYW1lICsgIjwiICsgaUxpc3Quam9pbigiLCAiKSArICI+IjsKICB9IGVsc2UgewogICByZXQgPSBuYW1lOwogIH0KICBwYXJhbUxvb3AgOiB3aGlsZSAoaSA8IGZ1bmMubGVuZ3RoICYmIGxpbWl0LS0gPiAwKSB7CiAgIHZhciBjID0gZnVuY1tpKytdOwogICBpZiAoYyBpbiBiYXNpY1R5cGVzKSB7CiAgICBsaXN0LnB1c2goYmFzaWNUeXBlc1tjXSk7CiAgIH0gZWxzZSB7CiAgICBzd2l0Y2ggKGMpIHsKICAgIGNhc2UgIlAiOgogICAgIGxpc3QucHVzaChwYXJzZSh0cnVlLCAxLCB0cnVlKVswXSArICIqIik7CiAgICAgYnJlYWs7CiAgICBjYXNlICJSIjoKICAgICBsaXN0LnB1c2gocGFyc2UodHJ1ZSwgMSwgdHJ1ZSlbMF0gKyAiJiIpOwogICAgIGJyZWFrOwogICAgY2FzZSAiTCI6CiAgICAgewogICAgICBpKys7CiAgICAgIHZhciBlbmQgPSBmdW5jLmluZGV4T2YoIkUiLCBpKTsKICAgICAgdmFyIHNpemUgPSBlbmQgLSBpOwogICAgICBsaXN0LnB1c2goZnVuYy5zdWJzdHIoaSwgc2l6ZSkpOwogICAgICBpICs9IHNpemUgKyAyOwogICAgICBicmVhazsKICAgICB9CiAgICBjYXNlICJBIjoKICAgICB7CiAgICAgIHZhciBzaXplID0gcGFyc2VJbnQoZnVuYy5zdWJzdHIoaSkpOwogICAgICBpICs9IHNpemUudG9TdHJpbmcoKS5sZW5ndGg7CiAgICAgIGlmIChmdW5jW2ldICE9PSAiXyIpIHRocm93ICI/IjsKICAgICAgaSsrOwogICAgICBsaXN0LnB1c2gocGFyc2UodHJ1ZSwgMSwgdHJ1ZSlbMF0gKyAiIFsiICsgc2l6ZSArICJdIik7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIGNhc2UgIkUiOgogICAgIGJyZWFrIHBhcmFtTG9vcDsKICAgIGRlZmF1bHQ6CiAgICAgcmV0ICs9ICI/IiArIGM7CiAgICAgYnJlYWsgcGFyYW1Mb29wOwogICAgfQogICB9CiAgfQogIGlmICghYWxsb3dWb2lkICYmIGxpc3QubGVuZ3RoID09PSAxICYmIGxpc3RbMF0gPT09ICJ2b2lkIikgbGlzdCA9IFtdOwogIGlmIChyYXdMaXN0KSB7CiAgIGlmIChyZXQpIHsKICAgIGxpc3QucHVzaChyZXQgKyAiPyIpOwogICB9CiAgIHJldHVybiBsaXN0OwogIH0gZWxzZSB7CiAgIHJldHVybiByZXQgKyBmbHVzaExpc3QoKTsKICB9CiB9CiB2YXIgcGFyc2VkID0gZnVuYzsKIHRyeSB7CiAgaWYgKGZ1bmMgPT0gIk9iamVjdC5fbWFpbiIgfHwgZnVuYyA9PSAiX21haW4iKSB7CiAgIHJldHVybiAibWFpbigpIjsKICB9CiAgaWYgKHR5cGVvZiBmdW5jID09PSAibnVtYmVyIikgZnVuYyA9IFBvaW50ZXJfc3RyaW5naWZ5KGZ1bmMpOwogIGlmIChmdW5jWzBdICE9PSAiXyIpIHJldHVybiBmdW5jOwogIGlmIChmdW5jWzFdICE9PSAiXyIpIHJldHVybiBmdW5jOwogIGlmIChmdW5jWzJdICE9PSAiWiIpIHJldHVybiBmdW5jOwogIHN3aXRjaCAoZnVuY1szXSkgewogIGNhc2UgIm4iOgogICByZXR1cm4gIm9wZXJhdG9yIG5ldygpIjsKICBjYXNlICJkIjoKICAgcmV0dXJuICJvcGVyYXRvciBkZWxldGUoKSI7CiAgfQogIHBhcnNlZCA9IHBhcnNlKCk7CiB9IGNhdGNoIChlKSB7CiAgcGFyc2VkICs9ICI/IjsKIH0KIGlmIChwYXJzZWQuaW5kZXhPZigiPyIpID49IDAgJiYgIWhhc0xpYmN4eGFiaSkgewogIFJ1bnRpbWUud2Fybk9uY2UoIndhcm5pbmc6IGEgcHJvYmxlbSBvY2N1cnJlZCBpbiBidWlsdGluIEMrKyBuYW1lIGRlbWFuZ2xpbmc7IGJ1aWxkIHdpdGggIC1zIERFTUFOR0xFX1NVUFBPUlQ9MSAgdG8gbGluayBpbiBsaWJjeHhhYmkgZGVtYW5nbGluZyIpOwogfQogcmV0dXJuIHBhcnNlZDsKfQpmdW5jdGlvbiBkZW1hbmdsZUFsbCh0ZXh0KSB7CiByZXR1cm4gdGV4dC5yZXBsYWNlKC9fX1pbXHdcZF9dKy9nLCAoZnVuY3Rpb24oeCkgewogIHZhciB5ID0gZGVtYW5nbGUoeCk7CiAgcmV0dXJuIHggPT09IHkgPyB4IDogeCArICIgWyIgKyB5ICsgIl0iOwogfSkpOwp9CmZ1bmN0aW9uIGpzU3RhY2tUcmFjZSgpIHsKIHZhciBlcnIgPSBuZXcgRXJyb3I7CiBpZiAoIWVyci5zdGFjaykgewogIHRyeSB7CiAgIHRocm93IG5ldyBFcnJvcigwKTsKICB9IGNhdGNoIChlKSB7CiAgIGVyciA9IGU7CiAgfQogIGlmICghZXJyLnN0YWNrKSB7CiAgIHJldHVybiAiKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkiOwogIH0KIH0KIHJldHVybiBlcnIuc3RhY2sudG9TdHJpbmcoKTsKfQpmdW5jdGlvbiBzdGFja1RyYWNlKCkgewogcmV0dXJuIGRlbWFuZ2xlQWxsKGpzU3RhY2tUcmFjZSgpKTsKfQpNb2R1bGVbInN0YWNrVHJhY2UiXSA9IHN0YWNrVHJhY2U7CnZhciBQQUdFX1NJWkUgPSA0MDk2OwpmdW5jdGlvbiBhbGlnbk1lbW9yeVBhZ2UoeCkgewogaWYgKHggJSA0MDk2ID4gMCkgewogIHggKz0gNDA5NiAtIHggJSA0MDk2OwogfQogcmV0dXJuIHg7Cn0KdmFyIEhFQVA7CnZhciBIRUFQOCwgSEVBUFU4LCBIRUFQMTYsIEhFQVBVMTYsIEhFQVAzMiwgSEVBUFUzMiwgSEVBUEYzMiwgSEVBUEY2NDsKdmFyIFNUQVRJQ19CQVNFID0gMCwgU1RBVElDVE9QID0gMCwgc3RhdGljU2VhbGVkID0gZmFsc2U7CnZhciBTVEFDS19CQVNFID0gMCwgU1RBQ0tUT1AgPSAwLCBTVEFDS19NQVggPSAwOwp2YXIgRFlOQU1JQ19CQVNFID0gMCwgRFlOQU1JQ1RPUCA9IDA7CmZ1bmN0aW9uIGVubGFyZ2VNZW1vcnkoKSB7CiBhc3NlcnQoRFlOQU1JQ1RPUCA+PSBUT1RBTF9NRU1PUlkpOwogYXNzZXJ0KFRPVEFMX01FTU9SWSA+IDQpOwogdmFyIE9MRF9UT1RBTF9NRU1PUlkgPSBUT1RBTF9NRU1PUlk7CiB2YXIgTElNSVQgPSBNYXRoLnBvdygyLCAzMSk7CiBpZiAoRFlOQU1JQ1RPUCA+PSBMSU1JVCkgcmV0dXJuIGZhbHNlOwogd2hpbGUgKFRPVEFMX01FTU9SWSA8PSBEWU5BTUlDVE9QKSB7CiAgaWYgKFRPVEFMX01FTU9SWSA8IExJTUlUIC8gMikgewogICBUT1RBTF9NRU1PUlkgPSBhbGlnbk1lbW9yeVBhZ2UoMiAqIFRPVEFMX01FTU9SWSk7CiAgfSBlbHNlIHsKICAgdmFyIGxhc3QgPSBUT1RBTF9NRU1PUlk7CiAgIFRPVEFMX01FTU9SWSA9IGFsaWduTWVtb3J5UGFnZSgoMyAqIFRPVEFMX01FTU9SWSArIExJTUlUKSAvIDQpOwogICBpZiAoVE9UQUxfTUVNT1JZIDw9IGxhc3QpIHJldHVybiBmYWxzZTsKICB9CiB9CiBUT1RBTF9NRU1PUlkgPSBNYXRoLm1heChUT1RBTF9NRU1PUlksIDE2ICogMTAyNCAqIDEwMjQpOwogaWYgKFRPVEFMX01FTU9SWSA+PSBMSU1JVCkgcmV0dXJuIGZhbHNlOwogTW9kdWxlLnByaW50RXJyKCJXYXJuaW5nOiBFbmxhcmdpbmcgbWVtb3J5IGFycmF5cywgdGhpcyBpcyBub3QgZmFzdCEgIiArIFsgT0xEX1RPVEFMX01FTU9SWSwgVE9UQUxfTUVNT1JZIF0pOwogdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsKIHRyeSB7CiAgaWYgKEFycmF5QnVmZmVyLnRyYW5zZmVyKSB7CiAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyLnRyYW5zZmVyKGJ1ZmZlciwgVE9UQUxfTUVNT1JZKTsKICB9IGVsc2UgewogICB2YXIgb2xkSEVBUDggPSBIRUFQODsKICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKFRPVEFMX01FTU9SWSk7CiAgfQogfSBjYXRjaCAoZSkgewogIHJldHVybiBmYWxzZTsKIH0KIHZhciBzdWNjZXNzID0gX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnkoYnVmZmVyKTsKIGlmICghc3VjY2VzcykgcmV0dXJuIGZhbHNlOwogTW9kdWxlWyJidWZmZXIiXSA9IGJ1ZmZlcjsKIE1vZHVsZVsiSEVBUDgiXSA9IEhFQVA4ID0gbmV3IEludDhBcnJheShidWZmZXIpOwogTW9kdWxlWyJIRUFQMTYiXSA9IEhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7CiBNb2R1bGVbIkhFQVAzMiJdID0gSEVBUDMyID0gbmV3IEludDMyQXJyYXkoYnVmZmVyKTsKIE1vZHVsZVsiSEVBUFU4Il0gPSBIRUFQVTggPSBuZXcgVWludDhBcnJheShidWZmZXIpOwogTW9kdWxlWyJIRUFQVTE2Il0gPSBIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlcik7CiBNb2R1bGVbIkhFQVBVMzIiXSA9IEhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTsKIE1vZHVsZVsiSEVBUEYzMiJdID0gSEVBUEYzMiA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTsKIE1vZHVsZVsiSEVBUEY2NCJdID0gSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVyKTsKIGlmICghQXJyYXlCdWZmZXIudHJhbnNmZXIpIHsKICBIRUFQOC5zZXQob2xkSEVBUDgpOwogfQogTW9kdWxlLnByaW50RXJyKCJlbmxhcmdlZCBtZW1vcnkgYXJyYXlzIGZyb20gIiArIE9MRF9UT1RBTF9NRU1PUlkgKyAiIHRvICIgKyBUT1RBTF9NRU1PUlkgKyAiLCB0b29rICIgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0KSArICIgbXMgKGhhcyBBcnJheUJ1ZmZlci50cmFuc2Zlcj8gIiArICEhQXJyYXlCdWZmZXIudHJhbnNmZXIgKyAiKSIpOwogcmV0dXJuIHRydWU7Cn0KdmFyIGJ5dGVMZW5ndGg7CnRyeSB7CiBieXRlTGVuZ3RoID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwgImJ5dGVMZW5ndGgiKS5nZXQpOwogYnl0ZUxlbmd0aChuZXcgQXJyYXlCdWZmZXIoNCkpOwp9IGNhdGNoIChlKSB7CiBieXRlTGVuZ3RoID0gKGZ1bmN0aW9uKGJ1ZmZlcikgewogIHJldHVybiBidWZmZXIuYnl0ZUxlbmd0aDsKIH0pOwp9CnZhciBUT1RBTF9TVEFDSyA9IE1vZHVsZVsiVE9UQUxfU1RBQ0siXSB8fCA1MjQyODgwOwp2YXIgVE9UQUxfTUVNT1JZID0gTW9kdWxlWyJUT1RBTF9NRU1PUlkiXSB8fCAxNjc3NzIxNjsKdmFyIHRvdGFsTWVtb3J5ID0gNjQgKiAxMDI0Owp3aGlsZSAodG90YWxNZW1vcnkgPCBUT1RBTF9NRU1PUlkgfHwgdG90YWxNZW1vcnkgPCAyICogVE9UQUxfU1RBQ0spIHsKIGlmICh0b3RhbE1lbW9yeSA8IDE2ICogMTAyNCAqIDEwMjQpIHsKICB0b3RhbE1lbW9yeSAqPSAyOwogfSBlbHNlIHsKICB0b3RhbE1lbW9yeSArPSAxNiAqIDEwMjQgKiAxMDI0OwogfQp9CnRvdGFsTWVtb3J5ID0gTWF0aC5tYXgodG90YWxNZW1vcnksIDE2ICogMTAyNCAqIDEwMjQpOwppZiAodG90YWxNZW1vcnkgIT09IFRPVEFMX01FTU9SWSkgewogTW9kdWxlLnByaW50RXJyKCJpbmNyZWFzaW5nIFRPVEFMX01FTU9SWSB0byAiICsgdG90YWxNZW1vcnkgKyAiIHRvIGJlIGNvbXBsaWFudCB3aXRoIHRoZSBhc20uanMgc3BlYyAoYW5kIGdpdmVuIHRoYXQgVE9UQUxfU1RBQ0s9IiArIFRPVEFMX1NUQUNLICsgIikiKTsKIFRPVEFMX01FTU9SWSA9IHRvdGFsTWVtb3J5Owp9CmFzc2VydCh0eXBlb2YgSW50MzJBcnJheSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIEZsb2F0NjRBcnJheSAhPT0gInVuZGVmaW5lZCIgJiYgISEobmV3IEludDMyQXJyYXkoMSkpWyJzdWJhcnJheSJdICYmICEhKG5ldyBJbnQzMkFycmF5KDEpKVsic2V0Il0sICJKUyBlbmdpbmUgZG9lcyBub3QgcHJvdmlkZSBmdWxsIHR5cGVkIGFycmF5IHN1cHBvcnQiKTsKdmFyIGJ1ZmZlcjsKYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKFRPVEFMX01FTU9SWSk7CkhFQVA4ID0gbmV3IEludDhBcnJheShidWZmZXIpOwpIRUFQMTYgPSBuZXcgSW50MTZBcnJheShidWZmZXIpOwpIRUFQMzIgPSBuZXcgSW50MzJBcnJheShidWZmZXIpOwpIRUFQVTggPSBuZXcgVWludDhBcnJheShidWZmZXIpOwpIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlcik7CkhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTsKSEVBUEYzMiA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTsKSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVyKTsKSEVBUDMyWzBdID0gMjU1Owphc3NlcnQoSEVBUFU4WzBdID09PSAyNTUgJiYgSEVBUFU4WzNdID09PSAwLCAiVHlwZWQgYXJyYXlzIDIgbXVzdCBiZSBydW4gb24gYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSIpOwpNb2R1bGVbIkhFQVAiXSA9IEhFQVA7Ck1vZHVsZVsiYnVmZmVyIl0gPSBidWZmZXI7Ck1vZHVsZVsiSEVBUDgiXSA9IEhFQVA4OwpNb2R1bGVbIkhFQVAxNiJdID0gSEVBUDE2OwpNb2R1bGVbIkhFQVAzMiJdID0gSEVBUDMyOwpNb2R1bGVbIkhFQVBVOCJdID0gSEVBUFU4OwpNb2R1bGVbIkhFQVBVMTYiXSA9IEhFQVBVMTY7Ck1vZHVsZVsiSEVBUFUzMiJdID0gSEVBUFUzMjsKTW9kdWxlWyJIRUFQRjMyIl0gPSBIRUFQRjMyOwpNb2R1bGVbIkhFQVBGNjQiXSA9IEhFQVBGNjQ7CmZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcykgewogd2hpbGUgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7CiAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzLnNoaWZ0KCk7CiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAiZnVuY3Rpb24iKSB7CiAgIGNhbGxiYWNrKCk7CiAgIGNvbnRpbnVlOwogIH0KICB2YXIgZnVuYyA9IGNhbGxiYWNrLmZ1bmM7CiAgaWYgKHR5cGVvZiBmdW5jID09PSAibnVtYmVyIikgewogICBpZiAoY2FsbGJhY2suYXJnID09PSB1bmRlZmluZWQpIHsKICAgIFJ1bnRpbWUuZHluQ2FsbCgidiIsIGZ1bmMpOwogICB9IGVsc2UgewogICAgUnVudGltZS5keW5DYWxsKCJ2aSIsIGZ1bmMsIFsgY2FsbGJhY2suYXJnIF0pOwogICB9CiAgfSBlbHNlIHsKICAgZnVuYyhjYWxsYmFjay5hcmcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjay5hcmcpOwogIH0KIH0KfQp2YXIgX19BVFBSRVJVTl9fID0gW107CnZhciBfX0FUSU5JVF9fID0gW107CnZhciBfX0FUTUFJTl9fID0gW107CnZhciBfX0FURVhJVF9fID0gW107CnZhciBfX0FUUE9TVFJVTl9fID0gW107CnZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTsKdmFyIHJ1bnRpbWVFeGl0ZWQgPSBmYWxzZTsKZnVuY3Rpb24gcHJlUnVuKCkgewogaWYgKE1vZHVsZVsicHJlUnVuIl0pIHsKICBpZiAodHlwZW9mIE1vZHVsZVsicHJlUnVuIl0gPT0gImZ1bmN0aW9uIikgTW9kdWxlWyJwcmVSdW4iXSA9IFsgTW9kdWxlWyJwcmVSdW4iXSBdOwogIHdoaWxlIChNb2R1bGVbInByZVJ1biJdLmxlbmd0aCkgewogICBhZGRPblByZVJ1bihNb2R1bGVbInByZVJ1biJdLnNoaWZ0KCkpOwogIH0KIH0KIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7Cn0KZnVuY3Rpb24gZW5zdXJlSW5pdFJ1bnRpbWUoKSB7CiBpZiAocnVudGltZUluaXRpYWxpemVkKSByZXR1cm47CiBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlOwogY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyk7Cn0KZnVuY3Rpb24gcHJlTWFpbigpIHsKIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRNQUlOX18pOwp9CmZ1bmN0aW9uIGV4aXRSdW50aW1lKCkgewogY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVEVYSVRfXyk7CiBydW50aW1lRXhpdGVkID0gdHJ1ZTsKfQpmdW5jdGlvbiBwb3N0UnVuKCkgewogaWYgKE1vZHVsZVsicG9zdFJ1biJdKSB7CiAgaWYgKHR5cGVvZiBNb2R1bGVbInBvc3RSdW4iXSA9PSAiZnVuY3Rpb24iKSBNb2R1bGVbInBvc3RSdW4iXSA9IFsgTW9kdWxlWyJwb3N0UnVuIl0gXTsKICB3aGlsZSAoTW9kdWxlWyJwb3N0UnVuIl0ubGVuZ3RoKSB7CiAgIGFkZE9uUG9zdFJ1bihNb2R1bGVbInBvc3RSdW4iXS5zaGlmdCgpKTsKICB9CiB9CiBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKTsKfQpmdW5jdGlvbiBhZGRPblByZVJ1bihjYikgewogX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsiYWRkT25QcmVSdW4iXSA9IGFkZE9uUHJlUnVuOwpmdW5jdGlvbiBhZGRPbkluaXQoY2IpIHsKIF9fQVRJTklUX18udW5zaGlmdChjYik7Cn0KTW9kdWxlWyJhZGRPbkluaXQiXSA9IGFkZE9uSW5pdDsKZnVuY3Rpb24gYWRkT25QcmVNYWluKGNiKSB7CiBfX0FUTUFJTl9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsiYWRkT25QcmVNYWluIl0gPSBhZGRPblByZU1haW47CmZ1bmN0aW9uIGFkZE9uRXhpdChjYikgewogX19BVEVYSVRfXy51bnNoaWZ0KGNiKTsKfQpNb2R1bGVbImFkZE9uRXhpdCJdID0gYWRkT25FeGl0OwpmdW5jdGlvbiBhZGRPblBvc3RSdW4oY2IpIHsKIF9fQVRQT1NUUlVOX18udW5zaGlmdChjYik7Cn0KTW9kdWxlWyJhZGRPblBvc3RSdW4iXSA9IGFkZE9uUG9zdFJ1bjsKZnVuY3Rpb24gaW50QXJyYXlGcm9tU3RyaW5nKHN0cmluZ3ksIGRvbnRBZGROdWxsLCBsZW5ndGgpIHsKIHZhciBsZW4gPSBsZW5ndGggPiAwID8gbGVuZ3RoIDogbGVuZ3RoQnl0ZXNVVEY4KHN0cmluZ3kpICsgMTsKIHZhciB1OGFycmF5ID0gbmV3IEFycmF5KGxlbik7CiB2YXIgbnVtQnl0ZXNXcml0dGVuID0gc3RyaW5nVG9VVEY4QXJyYXkoc3RyaW5neSwgdThhcnJheSwgMCwgdThhcnJheS5sZW5ndGgpOwogaWYgKGRvbnRBZGROdWxsKSB1OGFycmF5Lmxlbmd0aCA9IG51bUJ5dGVzV3JpdHRlbjsKIHJldHVybiB1OGFycmF5Owp9Ck1vZHVsZVsiaW50QXJyYXlGcm9tU3RyaW5nIl0gPSBpbnRBcnJheUZyb21TdHJpbmc7CmZ1bmN0aW9uIGludEFycmF5VG9TdHJpbmcoYXJyYXkpIHsKIHZhciByZXQgPSBbXTsKIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICB2YXIgY2hyID0gYXJyYXlbaV07CiAgaWYgKGNociA+IDI1NSkgewogICBhc3NlcnQoZmFsc2UsICJDaGFyYWN0ZXIgY29kZSAiICsgY2hyICsgIiAoIiArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKSArICIpICBhdCBvZmZzZXQgIiArIGkgKyAiIG5vdCBpbiAweDAwLTB4RkYuIik7CiAgIGNociAmPSAyNTU7CiAgfQogIHJldC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKSk7CiB9CiByZXR1cm4gcmV0LmpvaW4oIiIpOwp9Ck1vZHVsZVsiaW50QXJyYXlUb1N0cmluZyJdID0gaW50QXJyYXlUb1N0cmluZzsKZnVuY3Rpb24gd3JpdGVTdHJpbmdUb01lbW9yeShzdHJpbmcsIGJ1ZmZlciwgZG9udEFkZE51bGwpIHsKIHZhciBhcnJheSA9IGludEFycmF5RnJvbVN0cmluZyhzdHJpbmcsIGRvbnRBZGROdWxsKTsKIHZhciBpID0gMDsKIHdoaWxlIChpIDwgYXJyYXkubGVuZ3RoKSB7CiAgdmFyIGNociA9IGFycmF5W2ldOwogIEhFQVA4W2J1ZmZlciArIGkgPj4gMF0gPSBjaHI7CiAgaSA9IGkgKyAxOwogfQp9Ck1vZHVsZVsid3JpdGVTdHJpbmdUb01lbW9yeSJdID0gd3JpdGVTdHJpbmdUb01lbW9yeTsKZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LCBidWZmZXIpIHsKIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICBIRUFQOFtidWZmZXIrKyA+PiAwXSA9IGFycmF5W2ldOwogfQp9Ck1vZHVsZVsid3JpdGVBcnJheVRvTWVtb3J5Il0gPSB3cml0ZUFycmF5VG9NZW1vcnk7CmZ1bmN0aW9uIHdyaXRlQXNjaWlUb01lbW9yeShzdHIsIGJ1ZmZlciwgZG9udEFkZE51bGwpIHsKIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CiAgYXNzZXJ0KHN0ci5jaGFyQ29kZUF0KGkpID09PSBzdHIuY2hhckNvZGVBdChpKSAmIDI1NSk7CiAgSEVBUDhbYnVmZmVyKysgPj4gMF0gPSBzdHIuY2hhckNvZGVBdChpKTsKIH0KIGlmICghZG9udEFkZE51bGwpIEhFQVA4W2J1ZmZlciA+PiAwXSA9IDA7Cn0KTW9kdWxlWyJ3cml0ZUFzY2lpVG9NZW1vcnkiXSA9IHdyaXRlQXNjaWlUb01lbW9yeTsKZnVuY3Rpb24gdW5TaWduKHZhbHVlLCBiaXRzLCBpZ25vcmUpIHsKIGlmICh2YWx1ZSA+PSAwKSB7CiAgcmV0dXJuIHZhbHVlOwogfQogcmV0dXJuIGJpdHMgPD0gMzIgPyAyICogTWF0aC5hYnMoMSA8PCBiaXRzIC0gMSkgKyB2YWx1ZSA6IE1hdGgucG93KDIsIGJpdHMpICsgdmFsdWU7Cn0KZnVuY3Rpb24gcmVTaWduKHZhbHVlLCBiaXRzLCBpZ25vcmUpIHsKIGlmICh2YWx1ZSA8PSAwKSB7CiAgcmV0dXJuIHZhbHVlOwogfQogdmFyIGhhbGYgPSBiaXRzIDw9IDMyID8gTWF0aC5hYnMoMSA8PCBiaXRzIC0gMSkgOiBNYXRoLnBvdygyLCBiaXRzIC0gMSk7CiBpZiAodmFsdWUgPj0gaGFsZiAmJiAoYml0cyA8PSAzMiB8fCB2YWx1ZSA+IGhhbGYpKSB7CiAgdmFsdWUgPSAtMiAqIGhhbGYgKyB2YWx1ZTsKIH0KIHJldHVybiB2YWx1ZTsKfQppZiAoIU1hdGhbImltdWwiXSB8fCBNYXRoWyJpbXVsIl0oNDI5NDk2NzI5NSwgNSkgIT09IC01KSBNYXRoWyJpbXVsIl0gPSBmdW5jdGlvbiBpbXVsKGEsIGIpIHsKIHZhciBhaCA9IGEgPj4+IDE2OwogdmFyIGFsID0gYSAmIDY1NTM1OwogdmFyIGJoID0gYiA+Pj4gMTY7CiB2YXIgYmwgPSBiICYgNjU1MzU7CiByZXR1cm4gYWwgKiBibCArIChhaCAqIGJsICsgYWwgKiBiaCA8PCAxNikgfCAwOwp9OwpNYXRoLmltdWwgPSBNYXRoWyJpbXVsIl07CmlmICghTWF0aFsiY2x6MzIiXSkgTWF0aFsiY2x6MzIiXSA9IChmdW5jdGlvbih4KSB7CiB4ID0geCA+Pj4gMDsKIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykgewogIGlmICh4ICYgMSA8PCAzMSAtIGkpIHJldHVybiBpOwogfQogcmV0dXJuIDMyOwp9KTsKTWF0aC5jbHozMiA9IE1hdGhbImNsejMyIl07CnZhciBNYXRoX2FicyA9IE1hdGguYWJzOwp2YXIgTWF0aF9jb3MgPSBNYXRoLmNvczsKdmFyIE1hdGhfc2luID0gTWF0aC5zaW47CnZhciBNYXRoX3RhbiA9IE1hdGgudGFuOwp2YXIgTWF0aF9hY29zID0gTWF0aC5hY29zOwp2YXIgTWF0aF9hc2luID0gTWF0aC5hc2luOwp2YXIgTWF0aF9hdGFuID0gTWF0aC5hdGFuOwp2YXIgTWF0aF9hdGFuMiA9IE1hdGguYXRhbjI7CnZhciBNYXRoX2V4cCA9IE1hdGguZXhwOwp2YXIgTWF0aF9sb2cgPSBNYXRoLmxvZzsKdmFyIE1hdGhfc3FydCA9IE1hdGguc3FydDsKdmFyIE1hdGhfY2VpbCA9IE1hdGguY2VpbDsKdmFyIE1hdGhfZmxvb3IgPSBNYXRoLmZsb29yOwp2YXIgTWF0aF9wb3cgPSBNYXRoLnBvdzsKdmFyIE1hdGhfaW11bCA9IE1hdGguaW11bDsKdmFyIE1hdGhfZnJvdW5kID0gTWF0aC5mcm91bmQ7CnZhciBNYXRoX21pbiA9IE1hdGgubWluOwp2YXIgTWF0aF9jbHozMiA9IE1hdGguY2x6MzI7CnZhciBydW5EZXBlbmRlbmNpZXMgPSAwOwp2YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsOwp2YXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDsKdmFyIHJ1bkRlcGVuZGVuY3lUcmFja2luZyA9IHt9OwpmdW5jdGlvbiBnZXRVbmlxdWVSdW5EZXBlbmRlbmN5KGlkKSB7CiB2YXIgb3JpZyA9IGlkOwogd2hpbGUgKDEpIHsKICBpZiAoIXJ1bkRlcGVuZGVuY3lUcmFja2luZ1tpZF0pIHJldHVybiBpZDsKICBpZCA9IG9yaWcgKyBNYXRoLnJhbmRvbSgpOwogfQogcmV0dXJuIGlkOwp9CmZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHsKIHJ1bkRlcGVuZGVuY2llcysrOwogaWYgKE1vZHVsZVsibW9uaXRvclJ1bkRlcGVuZGVuY2llcyJdKSB7CiAgTW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0ocnVuRGVwZW5kZW5jaWVzKTsKIH0KIGlmIChpZCkgewogIGFzc2VydCghcnVuRGVwZW5kZW5jeVRyYWNraW5nW2lkXSk7CiAgcnVuRGVwZW5kZW5jeVRyYWNraW5nW2lkXSA9IDE7CiAgaWYgKHJ1bkRlcGVuZGVuY3lXYXRjaGVyID09PSBudWxsICYmIHR5cGVvZiBzZXRJbnRlcnZhbCAhPT0gInVuZGVmaW5lZCIpIHsKICAgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICBpZiAoQUJPUlQpIHsKICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTsKICAgICBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7CiAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHNob3duID0gZmFsc2U7CiAgICBmb3IgKHZhciBkZXAgaW4gcnVuRGVwZW5kZW5jeVRyYWNraW5nKSB7CiAgICAgaWYgKCFzaG93bikgewogICAgICBzaG93biA9IHRydWU7CiAgICAgIE1vZHVsZS5wcmludEVycigic3RpbGwgd2FpdGluZyBvbiBydW4gZGVwZW5kZW5jaWVzOiIpOwogICAgIH0KICAgICBNb2R1bGUucHJpbnRFcnIoImRlcGVuZGVuY3k6ICIgKyBkZXApOwogICAgfQogICAgaWYgKHNob3duKSB7CiAgICAgTW9kdWxlLnByaW50RXJyKCIoZW5kIG9mIGxpc3QpIik7CiAgICB9CiAgIH0pLCAxZTQpOwogIH0KIH0gZWxzZSB7CiAgTW9kdWxlLnByaW50RXJyKCJ3YXJuaW5nOiBydW4gZGVwZW5kZW5jeSBhZGRlZCB3aXRob3V0IElEIik7CiB9Cn0KTW9kdWxlWyJhZGRSdW5EZXBlbmRlbmN5Il0gPSBhZGRSdW5EZXBlbmRlbmN5OwpmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7CiBydW5EZXBlbmRlbmNpZXMtLTsKIGlmIChNb2R1bGVbIm1vbml0b3JSdW5EZXBlbmRlbmNpZXMiXSkgewogIE1vZHVsZVsibW9uaXRvclJ1bkRlcGVuZGVuY2llcyJdKHJ1bkRlcGVuZGVuY2llcyk7CiB9CiBpZiAoaWQpIHsKICBhc3NlcnQocnVuRGVwZW5kZW5jeVRyYWNraW5nW2lkXSk7CiAgZGVsZXRlIHJ1bkRlcGVuZGVuY3lUcmFja2luZ1tpZF07CiB9IGVsc2UgewogIE1vZHVsZS5wcmludEVycigid2FybmluZzogcnVuIGRlcGVuZGVuY3kgcmVtb3ZlZCB3aXRob3V0IElEIik7CiB9CiBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHsKICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHsKICAgY2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7CiAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDsKICB9CiAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkgewogICB2YXIgY2FsbGJhY2sgPSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ7CiAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7CiAgIGNhbGxiYWNrKCk7CiAgfQogfQp9Ck1vZHVsZVsicmVtb3ZlUnVuRGVwZW5kZW5jeSJdID0gcmVtb3ZlUnVuRGVwZW5kZW5jeTsKTW9kdWxlWyJwcmVsb2FkZWRJbWFnZXMiXSA9IHt9OwpNb2R1bGVbInByZWxvYWRlZEF1ZGlvcyJdID0ge307CnZhciBtZW1vcnlJbml0aWFsaXplciA9IG51bGw7CnZhciBBU01fQ09OU1RTID0gW107ClNUQVRJQ19CQVNFID0gODsKU1RBVElDVE9QID0gU1RBVElDX0JBU0UgKyA0MzU4NDsKX19BVElOSVRfXy5wdXNoKHsKIGZ1bmM6IChmdW5jdGlvbigpIHsKICBfX0dMT0JBTF9fc3ViX0lfbWF4aV9lbXNjcl9uZXdfY3BwKCk7CiB9KQp9LCB7CiBmdW5jOiAoZnVuY3Rpb24oKSB7CiAgX19HTE9CQUxfX3N1Yl9JX21heGlGRlRfY3BwKCk7CiB9KQp9LCB7CiBmdW5jOiAoZnVuY3Rpb24oKSB7CiAgX19HTE9CQUxfX3N1Yl9JX21heGlNRkNDX2NwcCgpOwogfSkKfSwgewogZnVuYzogKGZ1bmN0aW9uKCkgewogIF9fR0xPQkFMX19zdWJfSV9tYXhpR3JhaW5zX2NwcCgpOwogfSkKfSwgewogZnVuYzogKGZ1bmN0aW9uKCkgewogIF9fR0xPQkFMX19zdWJfSV9iaW5kX2NwcCgpOwogfSkKfSk7CmFsbG9jYXRlKFsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5LCAxMTQsIDc2LCAyMiwgMjQ3LCAzMSwgMTM3LCA2MywgMTU5LCAxMTQsIDc2LCAyMiwgMjQ3LCAzMSwgMTUzLCA2MywgMjQ4LCA4NSwgMTg1LCA4MCwgMjQ5LCAyMTUsIDE2MiwgNjMsIDI1MiwgMTk5LCA2NiwgMTE2LCA4LCAyOCwgMTY5LCA2MywgMTY0LCAyMjgsIDIxMywgNTcsIDYsIDEwMCwgMTc1LCA2MywgMTU4LCAxMCwgMTg0LCAyMzEsIDI0OSwgMjExLCAxNzgsIDYzLCAxNjAsIDE5NSwgMTI0LCAxMjEsIDEsIDI0NiwgMTgxLCA2MywgMTU0LCA2LCA2OSwgMjQzLCAwLCAyMiwgMTg1LCA2MywgNzUsIDIzNCwgNCwgNTIsIDE3LCA1NCwgMTg4LCA2MywgMTAzLCAxNSwgMTgwLCAyLCA2NywgODYsIDE5MSwgNjMsIDk4LCAxNjEsIDIxNCwgNTIsIDIzOSwgNTYsIDE5MywgNjMsIDE1OCwgOTQsIDQxLCAyMDMsIDE2LCAxOTksIDE5NCwgNjMsIDc3LCAyNDgsIDE2NSwgMTI2LCAyMjIsIDg0LCAxOTYsIDYzLCA1NSwgMjI0LCAyNDMsIDE5NSwgOCwgMjI1LCAxOTcsIDYzLCAxNDgsIDE2NCwgMTA3LCAzOCwgMjIzLCAxMDgsIDE5OSwgNjMsIDIxMywgMzMsIDU1LCAxOTUsIDEzLCAyNDgsIDIwMCwgNjMsIDIyNCwgMTYsIDE3MCwgMjEyLCAyMzYsIDEyOSwgMjAyLCA2MywgMjA4LCAxODQsIDExMiwgMzIsIDM2LCAxMSwgMjA0LCA2MywgMTM3LCAyMTAsIDIyMiwgMjI0LCAxMSwgMTQ3LCAyMDUsIDYzLCAyNDAsIDIyLCA3MiwgODAsIDI1MiwgMjQsIDIwNywgNjMsIDE3MiwgMTczLCAyMTYsIDk1LCAxMTgsIDc5LCAyMDgsIDYzLCA1NCwgMjI5LCAxMCwgMjM5LCAxMTQsIDE3LCAyMDksIDYzLCAxMDksIDIzMSwgMjUxLCAxNjksIDI0MSwgMjEwLCAyMDksIDYzLCAyNTAsIDEyNiwgMTA2LCAxODgsIDExNiwgMTQ3LCAyMTAsIDYzLCA1MSwgMjI1LCAxNTEsIDI1MCwgMTIxLCA4MywgMjExLCA2MywgMjMsIDE0LCAxMzIsIDEwMCwgMSwgMTksIDIxMiwgNjMsIDgzLCAyMDgsIDIzNywgMzcsIDE0MSwgMjA5LCAyMTIsIDYzLCAzMCwgMjIsIDEwNiwgNzcsIDI0MywgMTQyLCAyMTMsIDYzLCA5MiwgNTYsIDE2LCAxNDYsIDUsIDc2LCAyMTQsIDYzLCA0MywgMjIyLCAyMDAsIDYwLCAyNDIsIDcsIDIxNSwgNjMsIDIzLCA0MywgMTA2LCA0OCwgMTMsIDE5NSwgMjE1LCA2MywgMjMyLCA0OCwgOTUsIDk0LCAxMjgsIDEyNSwgMjE2LCA2MywgMTg4LCAxNTAsIDE0NCwgMTUsIDEyMiwgNTQsIDIxNywgNjMsIDU5LCAxOTksIDEyOCwgMjM2LCAyNDUsIDIzOCwgMjE3LCA2MywgMTcsIDE0MSwgMjM4LCAzMiwgMTE4LCAxNjYsIDIxOCwgNjMsIDIzNCwgMTc4LCAxNTIsIDIxNiwgMTI0LCA5MiwgMjE5LCA2MywgMTEwLCAxNjMsIDEsIDE4OCwgNSwgMTgsIDIyMCwgNjMsIDQ2LCAyMjYsIDU5LCA0OSwgMjM1LCAxOTcsIDIyMCwgNjMsIDEyLCAyMDAsIDk0LCAyMzksIDI1NCwgMTIwLCAyMjEsIDYzLCAxMjMsIDQ5LCAxNDgsIDE5LCAyMzcsIDQyLCAyMjIsIDYzLCAxNzksIDEyLCAxMTMsIDE3MiwgMTM5LCAyMTksIDIyMiwgNjMsIDEyMywgMTA3LCA5NiwgMTcxLCA0LCAxMzksIDIyMywgNjMsIDIwNSwgMTc1LCAyMzAsIDAsIDE5MywgMjgsIDIyNCwgNjMsIDIyMiwgODksIDE4NywgMjM3LCA2NiwgMTE1LCAyMjQsIDYzLCAxNTQsIDIwNiwgNzgsIDYsIDcxLCAyMDEsIDIyNCwgNjMsIDExNiwgMjM0LCAyMDIsIDEwMywgMTIxLCAzMCwgMjI1LCA2MywgNTIsIDE5MSwgMTU0LCAzLCA0LCAxMTUsIDIyNSwgNjMsIDE4NywgMjEzLCAxMTUsIDIxMCwgMjUxLCAxOTgsIDIyNSwgNjMsIDY3LCAyOCwgMjM1LCAyMjYsIDU0LCAyNiwgMjI2LCA2MywgMTc2LCAyNywgMTgyLCA0NSwgMjAyLCAxMDgsIDIyNiwgNjMsIDg4LCA1NywgMTgwLCAyMDAsIDExOCwgMTkwLCAyMjYsIDYzLCAxNDMsIDE3MCwgMzgsIDEzNiwgMTg2LCAxNSwgMjI3LCA2MywgMjgsIDE3NywgMjIsIDE1OSwgMiwgOTYsIDIyNywgNjMsIDExNCwgMjQ5LCAxNSwgMjMzLCAxODMsIDE3NSwgMjI3LCA2MywgMywgOTYsIDYwLCAxMzEsIDEzNCwgMjU0LCAyMjcsIDYzLCA5MSwgOCwgMTE0LCA4MCwgMTk0LCA3NiwgMjI4LCA2MywgMTEsIDcwLCAzNywgMTE3LCAyLCAxNTQsIDIyOCwgNjMsIDE4OCwgMTc5LCAxMTgsIDIxOSwgMTMzLCAyMzAsIDIyOCwgNjMsIDEzOCwgMjAwLCAxNzYsIDEzOCwgNTUsIDUwLCAyMjksIDYzLCAxNDgsIDI1MSwgMjksIDEzOCwgMiwgMTI1LCAyMjksIDYzLCAxMDEsIDExMiwgMTQ4LCAxODgsIDU4LCAxOTksIDIyOSwgNjMsIDE0MSwgMTIyLCAxMzYsIDcwLCAxMTksIDE2LCAyMzAsIDYzLCAxMywgMjYsIDI1MCwgMzksIDE4NCwgODgsIDIzMCwgNjMsIDE0MiwgMjMzLCA5LCA3NSwgNjAsIDE2MCwgMjMwLCA2MywgMTYsIDIzMywgMTgzLCAxNzUsIDMsIDIzMSwgMjMwLCA2MywgNiwgMjQ1LCA0NSwgMTE1LCAxODYsIDQ0LCAyMzEsIDYzLCA4MywgMTUwLCAzMywgMTQyLCAxMTcsIDExMywgMjMxLCA2MywgMTMyLCAyNDAsIDEwNCwgMjI3LCAxMzYsIDE4MSwgMjMxLCA2MywgNzAsIDIwNiwgMTk0LCAxNTgsIDExOCwgMjQ4LCAyMzEsIDYzLCAyMzcsIDEwMCwgMTEyLCAxNDgsIDE4OCwgNTgsIDIzMiwgNjMsIDIzNSwgMTQ0LCAxNTUsIDIyNSwgNiwgMTI0LCAyMzIsIDYzLCA5MiwgMjAxLCAxNDIsIDE0MSwgNjQsIDE4OCwgMjMyLCA2MywgMzYsIDE1MSwgMjU1LCAxNDQsIDEyNiwgMjUxLCAyMzIsIDYzLCA2OCwgMjUwLCAyMzcsIDIzNSwgMTkyLCA1NywgMjMzLCA2MywgMTAxLCAxNDEsIDEyMiwgMTM2LCA3MCwgMTE5LCAyMzMsIDYzLCA3OSwgMTQ2LCAxNzQsIDE1MywgMTI0LCAxNzksIDIzMywgNjMsIDU5LCAxOTksIDEyOCwgMjM2LCAyNDUsIDIzOCwgMjMzLCA2MywgMTgzLCAxMjcsIDEwMSwgMTY1LCA3MywgNDEsIDIzNCwgNjMsIDEwOSwgODYsIDEyNSwgMTc0LCAxODIsIDk4LCAyMzQsIDYzLCAxODAsIDE3NiwgMTY3LCAyOSwgMjU0LCAxNTQsIDIzNCwgNjMsIDI1MSwgNTgsIDExMiwgMjA2LCAxMzYsIDIxMCwgMjM0LCA2MywgMTMsIDU1LCAyMjQsIDI0MywgMTk1LCA4LCAyMzUsIDYzLCAxMTcsIDIwMCwgMjA1LCAxMTIsIDMsIDYyLCAyMzUsIDYzLCA1MywgMjM5LCA1NiwgNjksIDcxLCAxMTQsIDIzNSwgNjMsIDE5MCwgMTM1LCA3NSwgMTQyLCA1OSwgMTY1LCAyMzUsIDYzLCA0MywgMjE3LCAxNzcsIDE3LCAxMzYsIDIxNSwgMjM1LCA2MywgOTksIDE1NiwgMTkxLCA5LCAxMzMsIDgsIDIzNiwgNjMsIDcxLCA5MCwgNDIsIDExMSwgNzEsIDU2LCAyMzYsIDYzLCA3MiwgMTkxLCAxMjUsIDI5LCA1NiwgMTAzLCAyMzYsIDYzLCAyMTksIDE2NywgMjI3LCA0OSwgMywgMTQ5LCAyMzYsIDYzLCA1NCwgMiwgMjQxLCAxODYsIDEyNiwgMTkzLCAyMzYsIDYzLCAxNDcsIDE0MCwgMTU2LCAxMzMsIDYxLCAyMzcsIDIzNiwgNjMsIDI0MywgMTE4LCAxMzIsIDIxMSwgMTMwLCAyMywgMjM3LCA2MywgMTk4LCAxMDksIDUyLCAxMjgsIDE4MywgNjQsIDIzNywgNjMsIDIxMiwgMTMwLCAyMywgMTI1LCA1LCAxMDUsIDIzNywgNjMsIDE3MSwgOSwgMTYyLCAyMzgsIDMsIDE0NCwgMjM3LCA2MywgMjE3LCAzNywgMTcwLCAxODMsIDYsIDE4MiwgMjM3LCA2MywgMjA4LCAxNzksIDg5LCAyNDUsIDE4NSwgMjE4LCAyMzcsIDYzLCA4OCwgMTk3LCAyNywgMTUzLCA3MSwgMjU0LCAyMzcsIDYzLCA4NCwgMjI3LCAxNjUsIDE1NSwgMTk2LCAzMiwgMjM4LCA2MywgMjUyLCAyNTEsIDE0MCwgMTEsIDcsIDY2LCAyMzgsIDYzLCAyNCwgMzMsIDYwLCAyMTgsIDU2LCA5OCwgMjM4LCA2MywgMjcsIDQ3LCAyMjEsIDM2LCA2LCAxMjksIDIzOCwgNjMsIDU5LCAyMjgsIDEwMiwgMTg0LCAxLCAxNTksIDIzOCwgNjMsIDkzLCAyNDksIDQ0LCAyMDcsIDEzMSwgMTg3LCAyMzgsIDYzLCAyMTUsIDE2MywgMTEyLCA2MSwgMTAsIDIxNSwgMjM4LCA2MywgMTEyLCAzNywgNTksIDU0LCAyLCAyNDEsIDIzOCwgNjMsIDEwLCAyMTUsIDE2MywgMTEyLCA2MSwgMTAsIDIzOSwgNjMsIDE2NywgMjMyLCA3MiwgNDYsIDI1NSwgMzMsIDIzOSwgNjMsIDI0MSwgMjQ0LCA3NCwgODksIDEzNCwgNTYsIDIzOSwgNjMsIDE3NCwgMTMsIDIxLCAyMjcsIDI1MiwgNzcsIDIzOSwgNjMsIDI0LCAzMywgNjAsIDIxOCwgNTYsIDk4LCAyMzksIDYzLCA0OCwgNDcsIDE5MiwgNjIsIDU4LCAxMTcsIDIzOSwgNjMsIDI0NCwgNTUsIDE2MSwgMTYsIDEsIDEzNSwgMjM5LCA2MywgMTI5LCAxNzgsIDQxLCA4NywgMTIwLCAxNTEsIDIzOSwgNjMsIDczLCA3NSwgMjI5LCAyMzcsIDgsIDE2NywgMjM5LCA2MywgNzcsIDUwLCAxMTQsIDIyLCAyNDYsIDE4MCwgMjM5LCA2MywgMTM5LCA1NSwgNTAsIDE0MywgMjUyLCAxOTMsIDIzOSwgNjMsIDExOCwgNTUsIDc5LCAxMTcsIDIwMCwgMjA1LCAyMzksIDYzLCA0MiwgMTY5LCAxOSwgMjA4LCA2OCwgMjE2LCAyMzksIDYzLCAxNDAsIDIxLCA1MywgMTUyLCAxMzQsIDIyNSwgMjM5LCA2MywgMTgyLCAyNDMsIDI1MywgMjEyLCAxMjAsIDIzMywgMjM5LCA2MywgMTEzLCA4NSwgMjE3LCAxMTksIDY5LCAyNDAsIDIzOSwgNjMsIDI0NiwgNDAsIDkyLCAxNDMsIDE5NCwgMjQ1LCAyMzksIDYzLCAzOSwgMjQ3LCA1OSwgMjAsIDUsIDI1MCwgMjM5LCA2MywgMjA0LCAyMDksIDIyNywgMjQ3LCA1NCwgMjUzLCAyMzksIDYzLCA4NywgMTQ5LCAxMjUsIDg3LCA0LCAyNTUsIDIzOSwgNjMsIDg2LCAxMDEsIDIyMywgMjEsIDE5MywgMjU1LCAyMzksIDYzLCA4NywgMTQ5LCAxMjUsIDg3LCA0LCAyNTUsIDIzOSwgNjMsIDIwNCwgMjA5LCAyMjcsIDI0NywgNTQsIDI1MywgMjM5LCA2MywgMzksIDI0NywgNTksIDIwLCA1LCAyNTAsIDIzOSwgNjMsIDI0NiwgNDAsIDkyLCAxNDMsIDE5NCwgMjQ1LCAyMzksIDYzLCAxMTMsIDg1LCAyMTcsIDExOSwgNjksIDI0MCwgMjM5LCA2MywgMTgyLCAyNDMsIDI1MywgMjEyLCAxMjAsIDIzMywgMjM5LCA2MywgMTQwLCAyMSwgNTMsIDE1MiwgMTM0LCAyMjUsIDIzOSwgNjMsIDQyLCAxNjksIDE5LCAyMDgsIDY4LCAyMTYsIDIzOSwgNjMsIDExOCwgNTUsIDc5LCAxMTcsIDIwMCwgMjA1LCAyMzksIDYzLCAxMzksIDU1LCA1MCwgMTQzLCAyNTIsIDE5MywgMjM5LCA2MywgNzcsIDUwLCAxMTQsIDIyLCAyNDYsIDE4MCwgMjM5LCA2MywgNzMsIDc1LCAyMjksIDIzNywgOCwgMTY3LCAyMzksIDYzLCAxMjksIDE3OCwgNDEsIDg3LCAxMjAsIDE1MSwgMjM5LCA2MywgMjQ0LCA1NSwgMTYxLCAxNiwgMSwgMTM1LCAyMzksIDYzLCA0OCwgNDcsIDE5MiwgNjIsIDU4LCAxMTcsIDIzOSwgNjMsIDI0LCAzMywgNjAsIDIxOCwgNTYsIDk4LCAyMzksIDYzLCAxNzQsIDEzLCAyMSwgMjI3LCAyNTIsIDc3LCAyMzksIDYzLCAyNDEsIDI0NCwgNzQsIDg5LCAxMzQsIDU2LCAyMzksIDYzLCAxNjcsIDIzMiwgNzIsIDQ2LCAyNTUsIDMzLCAyMzksIDYzLCAxMCwgMjE1LCAxNjMsIDExMiwgNjEsIDEwLCAyMzksIDYzLCAxMTIsIDM3LCA1OSwgNTQsIDIsIDI0MSwgMjM4LCA2MywgMjE1LCAxNjMsIDExMiwgNjEsIDEwLCAyMTUsIDIzOCwgNjMsIDkzLCAyNDksIDQ0LCAyMDcsIDEzMSwgMTg3LCAyMzgsIDYzLCA1OSwgMjI4LCAxMDIsIDE4NCwgMSwgMTU5LCAyMzgsIDYzLCAyNywgNDcsIDIyMSwgMzYsIDYsIDEyOSwgMjM4LCA2MywgMjQsIDMzLCA2MCwgMjE4LCA1NiwgOTgsIDIzOCwgNjMsIDI1MiwgMjUxLCAxNDAsIDExLCA3LCA2NiwgMjM4LCA2MywgODQsIDIyNywgMTY1LCAxNTUsIDE5NiwgMzIsIDIzOCwgNjMsIDg4LCAxOTcsIDI3LCAxNTMsIDcxLCAyNTQsIDIzNywgNjMsIDIwOCwgMTc5LCA4OSwgMjQ1LCAxODUsIDIxOCwgMjM3LCA2MywgMjE3LCAzNywgMTcwLCAxODMsIDYsIDE4MiwgMjM3LCA2MywgMTcxLCA5LCAxNjIsIDIzOCwgMywgMTQ0LCAyMzcsIDYzLCAyMTIsIDEzMCwgMjMsIDEyNSwgNSwgMTA1LCAyMzcsIDYzLCAxOTgsIDEwOSwgNTIsIDEyOCwgMTgzLCA2NCwgMjM3LCA2MywgMjQzLCAxMTgsIDEzMiwgMjExLCAxMzAsIDIzLCAyMzcsIDYzLCAxNDcsIDE0MCwgMTU2LCAxMzMsIDYxLCAyMzcsIDIzNiwgNjMsIDU0LCAyLCAyNDEsIDE4NiwgMTI2LCAxOTMsIDIzNiwgNjMsIDIxOSwgMTY3LCAyMjcsIDQ5LCAzLCAxNDksIDIzNiwgNjMsIDcyLCAxOTEsIDEyNSwgMjksIDU2LCAxMDMsIDIzNiwgNjMsIDcxLCA5MCwgNDIsIDExMSwgNzEsIDU2LCAyMzYsIDYzLCA5OSwgMTU2LCAxOTEsIDksIDEzMywgOCwgMjM2LCA2MywgNDMsIDIxNywgMTc3LCAxNywgMTM2LCAyMTUsIDIzNSwgNjMsIDE5MCwgMTM1LCA3NSwgMTQyLCA1OSwgMTY1LCAyMzUsIDYzLCA1MywgMjM5LCA1NiwgNjksIDcxLCAxMTQsIDIzNSwgNjMsIDExNywgMjAwLCAyMDUsIDExMiwgMywgNjIsIDIzNSwgNjMsIDEzLCA1NSwgMjI0LCAyNDMsIDE5NSwgOCwgMjM1LCA2MywgMjUxLCA1OCwgMTEyLCAyMDYsIDEzNiwgMjEwLCAyMzQsIDYzLCAxODAsIDE3NiwgMTY3LCAyOSwgMjU0LCAxNTQsIDIzNCwgNjMsIDEwOSwgODYsIDEyNSwgMTc0LCAxODIsIDk4LCAyMzQsIDYzLCAxODMsIDEyNywgMTAxLCAxNjUsIDczLCA0MSwgMjM0LCA2MywgNTksIDE5OSwgMTI4LCAyMzYsIDI0NSwgMjM4LCAyMzMsIDYzLCA3OSwgMTQ2LCAxNzQsIDE1MywgMTI0LCAxNzksIDIzMywgNjMsIDEwMSwgMTQxLCAxMjIsIDEzNiwgNzAsIDExOSwgMjMzLCA2MywgNjgsIDI1MCwgMjM3LCAyMzUsIDE5MiwgNTcsIDIzMywgNjMsIDM2LCAxNTEsIDI1NSwgMTQ0LCAxMjYsIDI1MSwgMjMyLCA2MywgOTIsIDIwMSwgMTQyLCAxNDEsIDY0LCAxODgsIDIzMiwgNjMsIDIzNSwgMTQ0LCAxNTUsIDIyNSwgNiwgMTI0LCAyMzIsIDYzLCAyMzcsIDEwMCwgMTEyLCAxNDgsIDE4OCwgNTgsIDIzMiwgNjMsIDcwLCAyMDYsIDE5NCwgMTU4LCAxMTgsIDI0OCwgMjMxLCA2MywgMTMyLCAyNDAsIDEwNCwgMjI3LCAxMzYsIDE4MSwgMjMxLCA2MywgODMsIDE1MCwgMzMsIDE0MiwgMTE3LCAxMTMsIDIzMSwgNjMsIDYsIDI0NSwgNDUsIDExNSwgMTg2LCA0NCwgMjMxLCA2MywgMTYsIDIzMywgMTgzLCAxNzUsIDMsIDIzMSwgMjMwLCA2MywgMTQyLCAyMzMsIDksIDc1LCA2MCwgMTYwLCAyMzAsIDYzLCAxMywgMjYsIDI1MCwgMzksIDE4NCwgODgsIDIzMCwgNjMsIDE0MSwgMTIyLCAxMzYsIDcwLCAxMTksIDE2LCAyMzAsIDYzLCAxMDEsIDExMiwgMTQ4LCAxODgsIDU4LCAxOTksIDIyOSwgNjMsIDE0OCwgMjUxLCAyOSwgMTM4LCAyLCAxMjUsIDIyOSwgNjMsIDEzOCwgMjAwLCAxNzYsIDEzOCwgNTUsIDUwLCAyMjksIDYzLCAxODgsIDE3OSwgMTE4LCAyMTksIDEzMywgMjMwLCAyMjgsIDYzLCAxMSwgNzAsIDM3LCAxMTcsIDIsIDE1NCwgMjI4LCA2MywgOTEsIDgsIDExNCwgODAsIDE5NCwgNzYsIDIyOCwgNjMsIDMsIDk2LCA2MCwgMTMxLCAxMzQsIDI1NCwgMjI3LCA2MywgMTE0LCAyNDksIDE1LCAyMzMsIDE4MywgMTc1LCAyMjcsIDYzLCAyOCwgMTc3LCAyMiwgMTU5LCAyLCA5NiwgMjI3LCA2MywgMTQzLCAxNzAsIDM4LCAxMzYsIDE4NiwgMTUsIDIyNywgNjMsIDg4LCA1NywgMTgwLCAyMDAsIDExOCwgMTkwLCAyMjYsIDYzLCAxNzYsIDI3LCAxODIsIDQ1LCAyMDIsIDEwOCwgMjI2LCA2MywgNjcsIDI4LCAyMzUsIDIyNiwgNTQsIDI2LCAyMjYsIDYzLCAxODcsIDIxMywgMTE1LCAyMTAsIDI1MSwgMTk4LCAyMjUsIDYzLCA1MiwgMTkxLCAxNTQsIDMsIDQsIDExNSwgMjI1LCA2MywgMTE2LCAyMzQsIDIwMiwgMTAzLCAxMjEsIDMwLCAyMjUsIDYzLCAxNTQsIDIwNiwgNzgsIDYsIDcxLCAyMDEsIDIyNCwgNjMsIDIyMiwgODksIDE4NywgMjM3LCA2NiwgMTE1LCAyMjQsIDYzLCAyMDUsIDE3NSwgMjMwLCAwLCAxOTMsIDI4LCAyMjQsIDYzLCAxMjMsIDEwNywgOTYsIDE3MSwgNCwgMTM5LCAyMjMsIDYzLCAxNzksIDEyLCAxMTMsIDE3MiwgMTM5LCAyMTksIDIyMiwgNjMsIDEyMywgNDksIDE0OCwgMTksIDIzNywgNDIsIDIyMiwgNjMsIDEyLCAyMDAsIDk0LCAyMzksIDI1NCwgMTIwLCAyMjEsIDYzLCA0NiwgMjI2LCA1OSwgNDksIDIzNSwgMTk3LCAyMjAsIDYzLCAxMTAsIDE2MywgMSwgMTg4LCA1LCAxOCwgMjIwLCA2MywgMjM0LCAxNzgsIDE1MiwgMjE2LCAxMjQsIDkyLCAyMTksIDYzLCAxNywgMTQxLCAyMzgsIDMyLCAxMTgsIDE2NiwgMjE4LCA2MywgNTksIDE5OSwgMTI4LCAyMzYsIDI0NSwgMjM4LCAyMTcsIDYzLCAxODgsIDE1MCwgMTQ0LCAxNSwgMTIyLCA1NCwgMjE3LCA2MywgMjMyLCA0OCwgOTUsIDk0LCAxMjgsIDEyNSwgMjE2LCA2MywgMjMsIDQzLCAxMDYsIDQ4LCAxMywgMTk1LCAyMTUsIDYzLCA0MywgMjIyLCAyMDAsIDYwLCAyNDIsIDcsIDIxNSwgNjMsIDkyLCA1NiwgMTYsIDE0NiwgNSwgNzYsIDIxNCwgNjMsIDMwLCAyMiwgMTA2LCA3NywgMjQzLCAxNDIsIDIxMywgNjMsIDgzLCAyMDgsIDIzNywgMzcsIDE0MSwgMjA5LCAyMTIsIDYzLCAyMywgMTQsIDEzMiwgMTAwLCAxLCAxOSwgMjEyLCA2MywgNTEsIDIyNSwgMTUxLCAyNTAsIDEyMSwgODMsIDIxMSwgNjMsIDI1MCwgMTI2LCAxMDYsIDE4OCwgMTE2LCAxNDcsIDIxMCwgNjMsIDEwOSwgMjMxLCAyNTEsIDE2OSwgMjQxLCAyMTAsIDIwOSwgNjMsIDU0LCAyMjksIDEwLCAyMzksIDExNCwgMTcsIDIwOSwgNjMsIDE3MiwgMTczLCAyMTYsIDk1LCAxMTgsIDc5LCAyMDgsIDYzLCAyNDAsIDIyLCA3MiwgODAsIDI1MiwgMjQsIDIwNywgNjMsIDEzNywgMjEwLCAyMjIsIDIyNCwgMTEsIDE0NywgMjA1LCA2MywgMjA4LCAxODQsIDExMiwgMzIsIDM2LCAxMSwgMjA0LCA2MywgMjI0LCAxNiwgMTcwLCAyMTIsIDIzNiwgMTI5LCAyMDIsIDYzLCAyMTMsIDMzLCA1NSwgMTk1LCAxMywgMjQ4LCAyMDAsIDYzLCAxNDgsIDE2NCwgMTA3LCAzOCwgMjIzLCAxMDgsIDE5OSwgNjMsIDU1LCAyMjQsIDI0MywgMTk1LCA4LCAyMjUsIDE5NywgNjMsIDc3LCAyNDgsIDE2NSwgMTI2LCAyMjIsIDg0LCAxOTYsIDYzLCAxNTgsIDk0LCA0MSwgMjAzLCAxNiwgMTk5LCAxOTQsIDYzLCA5OCwgMTYxLCAyMTQsIDUyLCAyMzksIDU2LCAxOTMsIDYzLCAxMDMsIDE1LCAxODAsIDIsIDY3LCA4NiwgMTkxLCA2MywgNzUsIDIzNCwgNCwgNTIsIDE3LCA1NCwgMTg4LCA2MywgMTU0LCA2LCA2OSwgMjQzLCAwLCAyMiwgMTg1LCA2MywgMTYwLCAxOTUsIDEyNCwgMTIxLCAxLCAyNDYsIDE4MSwgNjMsIDE1OCwgMTAsIDE4NCwgMjMxLCAyNDksIDIxMSwgMTc4LCA2MywgMTY0LCAyMjgsIDIxMywgNTcsIDYsIDEwMCwgMTc1LCA2MywgMjUyLCAxOTksIDY2LCAxMTYsIDgsIDI4LCAxNjksIDYzLCAyNDgsIDg1LCAxODUsIDgwLCAyNDksIDIxNSwgMTYyLCA2MywgMTU5LCAxMTQsIDc2LCAyMiwgMjQ3LCAzMSwgMTUzLCA2MywgMTU5LCAxMTQsIDc2LCAyMiwgMjQ3LCAzMSwgMTM3LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5LCAxMTQsIDc2LCAyMiwgMjQ3LCAzMSwgMTM3LCAxOTEsIDE1OSwgMTE0LCA3NiwgMjIsIDI0NywgMzEsIDE1MywgMTkxLCAyNDgsIDg1LCAxODUsIDgwLCAyNDksIDIxNSwgMTYyLCAxOTEsIDI1MiwgMTk5LCA2NiwgMTE2LCA4LCAyOCwgMTY5LCAxOTEsIDE2NCwgMjI4LCAyMTMsIDU3LCA2LCAxMDAsIDE3NSwgMTkxLCAxNTgsIDEwLCAxODQsIDIzMSwgMjQ5LCAyMTEsIDE3OCwgMTkxLCAxNjAsIDE5NSwgMTI0LCAxMjEsIDEsIDI0NiwgMTgxLCAxOTEsIDE1NCwgNiwgNjksIDI0MywgMCwgMjIsIDE4NSwgMTkxLCA3NSwgMjM0LCA0LCA1MiwgMTcsIDU0LCAxODgsIDE5MSwgMTAzLCAxNSwgMTgwLCAyLCA2NywgODYsIDE5MSwgMTkxLCA5OCwgMTYxLCAyMTQsIDUyLCAyMzksIDU2LCAxOTMsIDE5MSwgMTU4LCA5NCwgNDEsIDIwMywgMTYsIDE5OSwgMTk0LCAxOTEsIDc3LCAyNDgsIDE2NSwgMTI2LCAyMjIsIDg0LCAxOTYsIDE5MSwgNTUsIDIyNCwgMjQzLCAxOTUsIDgsIDIyNSwgMTk3LCAxOTEsIDE0OCwgMTY0LCAxMDcsIDM4LCAyMjMsIDEwOCwgMTk5LCAxOTEsIDIxMywgMzMsIDU1LCAxOTUsIDEzLCAyNDgsIDIwMCwgMTkxLCAyMjQsIDE2LCAxNzAsIDIxMiwgMjM2LCAxMjksIDIwMiwgMTkxLCAyMDgsIDE4NCwgMTEyLCAzMiwgMzYsIDExLCAyMDQsIDE5MSwgMTM3LCAyMTAsIDIyMiwgMjI0LCAxMSwgMTQ3LCAyMDUsIDE5MSwgMjQwLCAyMiwgNzIsIDgwLCAyNTIsIDI0LCAyMDcsIDE5MSwgMTcyLCAxNzMsIDIxNiwgOTUsIDExOCwgNzksIDIwOCwgMTkxLCA1NCwgMjI5LCAxMCwgMjM5LCAxMTQsIDE3LCAyMDksIDE5MSwgMTA5LCAyMzEsIDI1MSwgMTY5LCAyNDEsIDIxMCwgMjA5LCAxOTEsIDI1MCwgMTI2LCAxMDYsIDE4OCwgMTE2LCAxNDcsIDIxMCwgMTkxLCA1MSwgMjI1LCAxNTEsIDI1MCwgMTIxLCA4MywgMjExLCAxOTEsIDIzLCAxNCwgMTMyLCAxMDAsIDEsIDE5LCAyMTIsIDE5MSwgODMsIDIwOCwgMjM3LCAzNywgMTQxLCAyMDksIDIxMiwgMTkxLCAzMCwgMjIsIDEwNiwgNzcsIDI0MywgMTQyLCAyMTMsIDE5MSwgOTIsIDU2LCAxNiwgMTQ2LCA1LCA3NiwgMjE0LCAxOTEsIDQzLCAyMjIsIDIwMCwgNjAsIDI0MiwgNywgMjE1LCAxOTEsIDIzLCA0MywgMTA2LCA0OCwgMTMsIDE5NSwgMjE1LCAxOTEsIDIzMiwgNDgsIDk1LCA5NCwgMTI4LCAxMjUsIDIxNiwgMTkxLCAxODgsIDE1MCwgMTQ0LCAxNSwgMTIyLCA1NCwgMjE3LCAxOTEsIDU5LCAxOTksIDEyOCwgMjM2LCAyNDUsIDIzOCwgMjE3LCAxOTEsIDE3LCAxNDEsIDIzOCwgMzIsIDExOCwgMTY2LCAyMTgsIDE5MSwgMjM0LCAxNzgsIDE1MiwgMjE2LCAxMjQsIDkyLCAyMTksIDE5MSwgMTEwLCAxNjMsIDEsIDE4OCwgNSwgMTgsIDIyMCwgMTkxLCA0NiwgMjI2LCA1OSwgNDksIDIzNSwgMTk3LCAyMjAsIDE5MSwgMTIsIDIwMCwgOTQsIDIzOSwgMjU0LCAxMjAsIDIyMSwgMTkxLCAxMjMsIDQ5LCAxNDgsIDE5LCAyMzcsIDQyLCAyMjIsIDE5MSwgMTc5LCAxMiwgMTEzLCAxNzIsIDEzOSwgMjE5LCAyMjIsIDE5MSwgMTIzLCAxMDcsIDk2LCAxNzEsIDQsIDEzOSwgMjIzLCAxOTEsIDIwNSwgMTc1LCAyMzAsIDAsIDE5MywgMjgsIDIyNCwgMTkxLCAyMjIsIDg5LCAxODcsIDIzNywgNjYsIDExNSwgMjI0LCAxOTEsIDE1NCwgMjA2LCA3OCwgNiwgNzEsIDIwMSwgMjI0LCAxOTEsIDExNiwgMjM0LCAyMDIsIDEwMywgMTIxLCAzMCwgMjI1LCAxOTEsIDUyLCAxOTEsIDE1NCwgMywgNCwgMTE1LCAyMjUsIDE5MSwgMTg3LCAyMTMsIDExNSwgMjEwLCAyNTEsIDE5OCwgMjI1LCAxOTEsIDY3LCAyOCwgMjM1LCAyMjYsIDU0LCAyNiwgMjI2LCAxOTEsIDE3NiwgMjcsIDE4MiwgNDUsIDIwMiwgMTA4LCAyMjYsIDE5MSwgODgsIDU3LCAxODAsIDIwMCwgMTE4LCAxOTAsIDIyNiwgMTkxLCAxNDMsIDE3MCwgMzgsIDEzNiwgMTg2LCAxNSwgMjI3LCAxOTEsIDI4LCAxNzcsIDIyLCAxNTksIDIsIDk2LCAyMjcsIDE5MSwgMTE0LCAyNDksIDE1LCAyMzMsIDE4MywgMTc1LCAyMjcsIDE5MSwgMywgOTYsIDYwLCAxMzEsIDEzNCwgMjU0LCAyMjcsIDE5MSwgOTEsIDgsIDExNCwgODAsIDE5NCwgNzYsIDIyOCwgMTkxLCAxMSwgNzAsIDM3LCAxMTcsIDIsIDE1NCwgMjI4LCAxOTEsIDE4OCwgMTc5LCAxMTgsIDIxOSwgMTMzLCAyMzAsIDIyOCwgMTkxLCAxMzgsIDIwMCwgMTc2LCAxMzgsIDU1LCA1MCwgMjI5LCAxOTEsIDE0OCwgMjUxLCAyOSwgMTM4LCAyLCAxMjUsIDIyOSwgMTkxLCAxMDEsIDExMiwgMTQ4LCAxODgsIDU4LCAxOTksIDIyOSwgMTkxLCAxNDEsIDEyMiwgMTM2LCA3MCwgMTE5LCAxNiwgMjMwLCAxOTEsIDEzLCAyNiwgMjUwLCAzOSwgMTg0LCA4OCwgMjMwLCAxOTEsIDE0MiwgMjMzLCA5LCA3NSwgNjAsIDE2MCwgMjMwLCAxOTEsIDE2LCAyMzMsIDE4MywgMTc1LCAzLCAyMzEsIDIzMCwgMTkxLCA2LCAyNDUsIDQ1LCAxMTUsIDE4NiwgNDQsIDIzMSwgMTkxLCA4MywgMTUwLCAzMywgMTQyLCAxMTcsIDExMywgMjMxLCAxOTEsIDEzMiwgMjQwLCAxMDQsIDIyNywgMTM2LCAxODEsIDIzMSwgMTkxLCA3MCwgMjA2LCAxOTQsIDE1OCwgMTE4LCAyNDgsIDIzMSwgMTkxLCAyMzcsIDEwMCwgMTEyLCAxNDgsIDE4OCwgNTgsIDIzMiwgMTkxLCAyMzUsIDE0NCwgMTU1LCAyMjUsIDYsIDEyNCwgMjMyLCAxOTEsIDkyLCAyMDEsIDE0MiwgMTQxLCA2NCwgMTg4LCAyMzIsIDE5MSwgMzYsIDE1MSwgMjU1LCAxNDQsIDEyNiwgMjUxLCAyMzIsIDE5MSwgNjgsIDI1MCwgMjM3LCAyMzUsIDE5MiwgNTcsIDIzMywgMTkxLCAxMDEsIDE0MSwgMTIyLCAxMzYsIDcwLCAxMTksIDIzMywgMTkxLCA3OSwgMTQ2LCAxNzQsIDE1MywgMTI0LCAxNzksIDIzMywgMTkxLCA1OSwgMTk5LCAxMjgsIDIzNiwgMjQ1LCAyMzgsIDIzMywgMTkxLCAxODMsIDEyNywgMTAxLCAxNjUsIDczLCA0MSwgMjM0LCAxOTEsIDEwOSwgODYsIDEyNSwgMTc0LCAxODIsIDk4LCAyMzQsIDE5MSwgMTgwLCAxNzYsIDE2NywgMjksIDI1NCwgMTU0LCAyMzQsIDE5MSwgMjUxLCA1OCwgMTEyLCAyMDYsIDEzNiwgMjEwLCAyMzQsIDE5MSwgMTMsIDU1LCAyMjQsIDI0MywgMTk1LCA4LCAyMzUsIDE5MSwgMTE3LCAyMDAsIDIwNSwgMTEyLCAzLCA2MiwgMjM1LCAxOTEsIDUzLCAyMzksIDU2LCA2OSwgNzEsIDExNCwgMjM1LCAxOTEsIDE5MCwgMTM1LCA3NSwgMTQyLCA1OSwgMTY1LCAyMzUsIDE5MSwgNDMsIDIxNywgMTc3LCAxNywgMTM2LCAyMTUsIDIzNSwgMTkxLCA5OSwgMTU2LCAxOTEsIDksIDEzMywgOCwgMjM2LCAxOTEsIDcxLCA5MCwgNDIsIDExMSwgNzEsIDU2LCAyMzYsIDE5MSwgNzIsIDE5MSwgMTI1LCAyOSwgNTYsIDEwMywgMjM2LCAxOTEsIDIxOSwgMTY3LCAyMjcsIDQ5LCAzLCAxNDksIDIzNiwgMTkxLCA1NCwgMiwgMjQxLCAxODYsIDEyNiwgMTkzLCAyMzYsIDE5MSwgMTQ3LCAxNDAsIDE1NiwgMTMzLCA2MSwgMjM3LCAyMzYsIDE5MSwgMjQzLCAxMTgsIDEzMiwgMjExLCAxMzAsIDIzLCAyMzcsIDE5MSwgMTk4LCAxMDksIDUyLCAxMjgsIDE4MywgNjQsIDIzNywgMTkxLCAyMTIsIDEzMCwgMjMsIDEyNSwgNSwgMTA1LCAyMzcsIDE5MSwgMTcxLCA5LCAxNjIsIDIzOCwgMywgMTQ0LCAyMzcsIDE5MSwgMjE3LCAzNywgMTcwLCAxODMsIDYsIDE4MiwgMjM3LCAxOTEsIDIwOCwgMTc5LCA4OSwgMjQ1LCAxODUsIDIxOCwgMjM3LCAxOTEsIDg4LCAxOTcsIDI3LCAxNTMsIDcxLCAyNTQsIDIzNywgMTkxLCA4NCwgMjI3LCAxNjUsIDE1NSwgMTk2LCAzMiwgMjM4LCAxOTEsIDI1MiwgMjUxLCAxNDAsIDExLCA3LCA2NiwgMjM4LCAxOTEsIDI0LCAzMywgNjAsIDIxOCwgNTYsIDk4LCAyMzgsIDE5MSwgMjcsIDQ3LCAyMjEsIDM2LCA2LCAxMjksIDIzOCwgMTkxLCA1OSwgMjI4LCAxMDIsIDE4NCwgMSwgMTU5LCAyMzgsIDE5MSwgOTMsIDI0OSwgNDQsIDIwNywgMTMxLCAxODcsIDIzOCwgMTkxLCAyMTUsIDE2MywgMTEyLCA2MSwgMTAsIDIxNSwgMjM4LCAxOTEsIDExMiwgMzcsIDU5LCA1NCwgMiwgMjQxLCAyMzgsIDE5MSwgMTAsIDIxNSwgMTYzLCAxMTIsIDYxLCAxMCwgMjM5LCAxOTEsIDE2NywgMjMyLCA3MiwgNDYsIDI1NSwgMzMsIDIzOSwgMTkxLCAyNDEsIDI0NCwgNzQsIDg5LCAxMzQsIDU2LCAyMzksIDE5MSwgMTc0LCAxMywgMjEsIDIyNywgMjUyLCA3NywgMjM5LCAxOTEsIDI0LCAzMywgNjAsIDIxOCwgNTYsIDk4LCAyMzksIDE5MSwgNDgsIDQ3LCAxOTIsIDYyLCA1OCwgMTE3LCAyMzksIDE5MSwgMjQ0LCA1NSwgMTYxLCAxNiwgMSwgMTM1LCAyMzksIDE5MSwgMTI5LCAxNzgsIDQxLCA4NywgMTIwLCAxNTEsIDIzOSwgMTkxLCA3MywgNzUsIDIyOSwgMjM3LCA4LCAxNjcsIDIzOSwgMTkxLCA3NywgNTAsIDExNCwgMjIsIDI0NiwgMTgwLCAyMzksIDE5MSwgMTM5LCA1NSwgNTAsIDE0MywgMjUyLCAxOTMsIDIzOSwgMTkxLCAxMTgsIDU1LCA3OSwgMTE3LCAyMDAsIDIwNSwgMjM5LCAxOTEsIDQyLCAxNjksIDE5LCAyMDgsIDY4LCAyMTYsIDIzOSwgMTkxLCAxNDAsIDIxLCA1MywgMTUyLCAxMzQsIDIyNSwgMjM5LCAxOTEsIDE4MiwgMjQzLCAyNTMsIDIxMiwgMTIwLCAyMzMsIDIzOSwgMTkxLCAxMTMsIDg1LCAyMTcsIDExOSwgNjksIDI0MCwgMjM5LCAxOTEsIDI0NiwgNDAsIDkyLCAxNDMsIDE5NCwgMjQ1LCAyMzksIDE5MSwgMzksIDI0NywgNTksIDIwLCA1LCAyNTAsIDIzOSwgMTkxLCAyMDQsIDIwOSwgMjI3LCAyNDcsIDU0LCAyNTMsIDIzOSwgMTkxLCA4NywgMTQ5LCAxMjUsIDg3LCA0LCAyNTUsIDIzOSwgMTkxLCA4NiwgMTAxLCAyMjMsIDIxLCAxOTMsIDI1NSwgMjM5LCAxOTEsIDg3LCAxNDksIDEyNSwgODcsIDQsIDI1NSwgMjM5LCAxOTEsIDIwNCwgMjA5LCAyMjcsIDI0NywgNTQsIDI1MywgMjM5LCAxOTEsIDM5LCAyNDcsIDU5LCAyMCwgNSwgMjUwLCAyMzksIDE5MSwgMjQ2LCA0MCwgOTIsIDE0MywgMTk0LCAyNDUsIDIzOSwgMTkxLCAxMTMsIDg1LCAyMTcsIDExOSwgNjksIDI0MCwgMjM5LCAxOTEsIDE4MiwgMjQzLCAyNTMsIDIxMiwgMTIwLCAyMzMsIDIzOSwgMTkxLCAxNDAsIDIxLCA1MywgMTUyLCAxMzQsIDIyNSwgMjM5LCAxOTEsIDQyLCAxNjksIDE5LCAyMDgsIDY4LCAyMTYsIDIzOSwgMTkxLCAxMTgsIDU1LCA3OSwgMTE3LCAyMDAsIDIwNSwgMjM5LCAxOTEsIDEzOSwgNTUsIDUwLCAxNDMsIDI1MiwgMTkzLCAyMzksIDE5MSwgNzcsIDUwLCAxMTQsIDIyLCAyNDYsIDE4MCwgMjM5LCAxOTEsIDczLCA3NSwgMjI5LCAyMzcsIDgsIDE2NywgMjM5LCAxOTEsIDEyOSwgMTc4LCA0MSwgODcsIDEyMCwgMTUxLCAyMzksIDE5MSwgMjQ0LCA1NSwgMTYxLCAxNiwgMSwgMTM1LCAyMzksIDE5MSwgNDgsIDQ3LCAxOTIsIDYyLCA1OCwgMTE3LCAyMzksIDE5MSwgMjQsIDMzLCA2MCwgMjE4LCA1NiwgOTgsIDIzOSwgMTkxLCAxNzQsIDEzLCAyMSwgMjI3LCAyNTIsIDc3LCAyMzksIDE5MSwgMjQxLCAyNDQsIDc0LCA4OSwgMTM0LCA1NiwgMjM5LCAxOTEsIDE2NywgMjMyLCA3MiwgNDYsIDI1NSwgMzMsIDIzOSwgMTkxLCAxMCwgMjE1LCAxNjMsIDExMiwgNjEsIDEwLCAyMzksIDE5MSwgMTEyLCAzNywgNTksIDU0LCAyLCAyNDEsIDIzOCwgMTkxLCAyMTUsIDE2MywgMTEyLCA2MSwgMTAsIDIxNSwgMjM4LCAxOTEsIDkzLCAyNDksIDQ0LCAyMDcsIDEzMSwgMTg3LCAyMzgsIDE5MSwgNTksIDIyOCwgMTAyLCAxODQsIDEsIDE1OSwgMjM4LCAxOTEsIDI3LCA0NywgMjIxLCAzNiwgNiwgMTI5LCAyMzgsIDE5MSwgMjQsIDMzLCA2MCwgMjE4LCA1NiwgOTgsIDIzOCwgMTkxLCAyNTIsIDI1MSwgMTQwLCAxMSwgNywgNjYsIDIzOCwgMTkxLCA4NCwgMjI3LCAxNjUsIDE1NSwgMTk2LCAzMiwgMjM4LCAxOTEsIDg4LCAxOTcsIDI3LCAxNTMsIDcxLCAyNTQsIDIzNywgMTkxLCAyMDgsIDE3OSwgODksIDI0NSwgMTg1LCAyMTgsIDIzNywgMTkxLCAyMTcsIDM3LCAxNzAsIDE4MywgNiwgMTgyLCAyMzcsIDE5MSwgMTcxLCA5LCAxNjIsIDIzOCwgMywgMTQ0LCAyMzcsIDE5MSwgMjEyLCAxMzAsIDIzLCAxMjUsIDUsIDEwNSwgMjM3LCAxOTEsIDE5OCwgMTA5LCA1MiwgMTI4LCAxODMsIDY0LCAyMzcsIDE5MSwgMjQzLCAxMTgsIDEzMiwgMjExLCAxMzAsIDIzLCAyMzcsIDE5MSwgMTQ3LCAxNDAsIDE1NiwgMTMzLCA2MSwgMjM3LCAyMzYsIDE5MSwgNTQsIDIsIDI0MSwgMTg2LCAxMjYsIDE5MywgMjM2LCAxOTEsIDIxOSwgMTY3LCAyMjcsIDQ5LCAzLCAxNDksIDIzNiwgMTkxLCA3MiwgMTkxLCAxMjUsIDI5LCA1NiwgMTAzLCAyMzYsIDE5MSwgNzEsIDkwLCA0MiwgMTExLCA3MSwgNTYsIDIzNiwgMTkxLCA5OSwgMTU2LCAxOTEsIDksIDEzMywgOCwgMjM2LCAxOTEsIDQzLCAyMTcsIDE3NywgMTcsIDEzNiwgMjE1LCAyMzUsIDE5MSwgMTkwLCAxMzUsIDc1LCAxNDIsIDU5LCAxNjUsIDIzNSwgMTkxLCA1MywgMjM5LCA1NiwgNjksIDcxLCAxMTQsIDIzNSwgMTkxLCAxMTcsIDIwMCwgMjA1LCAxMTIsIDMsIDYyLCAyMzUsIDE5MSwgMTMsIDU1LCAyMjQsIDI0MywgMTk1LCA4LCAyMzUsIDE5MSwgMjUxLCA1OCwgMTEyLCAyMDYsIDEzNiwgMjEwLCAyMzQsIDE5MSwgMTgwLCAxNzYsIDE2NywgMjksIDI1NCwgMTU0LCAyMzQsIDE5MSwgMTA5LCA4NiwgMTI1LCAxNzQsIDE4MiwgOTgsIDIzNCwgMTkxLCAxODMsIDEyNywgMTAxLCAxNjUsIDczLCA0MSwgMjM0LCAxOTEsIDU5LCAxOTksIDEyOCwgMjM2LCAyNDUsIDIzOCwgMjMzLCAxOTEsIDc5LCAxNDYsIDE3NCwgMTUzLCAxMjQsIDE3OSwgMjMzLCAxOTEsIDEwMSwgMTQxLCAxMjIsIDEzNiwgNzAsIDExOSwgMjMzLCAxOTEsIDY4LCAyNTAsIDIzNywgMjM1LCAxOTIsIDU3LCAyMzMsIDE5MSwgMzYsIDE1MSwgMjU1LCAxNDQsIDEyNiwgMjUxLCAyMzIsIDE5MSwgOTIsIDIwMSwgMTQyLCAxNDEsIDY0LCAxODgsIDIzMiwgMTkxLCAyMzUsIDE0NCwgMTU1LCAyMjUsIDYsIDEyNCwgMjMyLCAxOTEsIDIzNywgMTAwLCAxMTIsIDE0OCwgMTg4LCA1OCwgMjMyLCAxOTEsIDcwLCAyMDYsIDE5NCwgMTU4LCAxMTgsIDI0OCwgMjMxLCAxOTEsIDEzMiwgMjQwLCAxMDQsIDIyNywgMTM2LCAxODEsIDIzMSwgMTkxLCA4MywgMTUwLCAzMywgMTQyLCAxMTcsIDExMywgMjMxLCAxOTEsIDYsIDI0NSwgNDUsIDExNSwgMTg2LCA0NCwgMjMxLCAxOTEsIDE2LCAyMzMsIDE4MywgMTc1LCAzLCAyMzEsIDIzMCwgMTkxLCAxNDIsIDIzMywgOSwgNzUsIDYwLCAxNjAsIDIzMCwgMTkxLCAxMywgMjYsIDI1MCwgMzksIDE4NCwgODgsIDIzMCwgMTkxLCAxNDEsIDEyMiwgMTM2LCA3MCwgMTE5LCAxNiwgMjMwLCAxOTEsIDEwMSwgMTEyLCAxNDgsIDE4OCwgNTgsIDE5OSwgMjI5LCAxOTEsIDE0OCwgMjUxLCAyOSwgMTM4LCAyLCAxMjUsIDIyOSwgMTkxLCAxMzgsIDIwMCwgMTc2LCAxMzgsIDU1LCA1MCwgMjI5LCAxOTEsIDE4OCwgMTc5LCAxMTgsIDIxOSwgMTMzLCAyMzAsIDIyOCwgMTkxLCAxMSwgNzAsIDM3LCAxMTcsIDIsIDE1NCwgMjI4LCAxOTEsIDkxLCA4LCAxMTQsIDgwLCAxOTQsIDc2LCAyMjgsIDE5MSwgMywgOTYsIDYwLCAxMzEsIDEzNCwgMjU0LCAyMjcsIDE5MSwgMTE0LCAyNDksIDE1LCAyMzMsIDE4MywgMTc1LCAyMjcsIDE5MSwgMjgsIDE3NywgMjIsIDE1OSwgMiwgOTYsIDIyNywgMTkxLCAxNDMsIDE3MCwgMzgsIDEzNiwgMTg2LCAxNSwgMjI3LCAxOTEsIDg4LCA1NywgMTgwLCAyMDAsIDExOCwgMTkwLCAyMjYsIDE5MSwgMTc2LCAyNywgMTgyLCA0NSwgMjAyLCAxMDgsIDIyNiwgMTkxLCA2NywgMjgsIDIzNSwgMjI2LCA1NCwgMjYsIDIyNiwgMTkxLCAxODcsIDIxMywgMTE1LCAyMTAsIDI1MSwgMTk4LCAyMjUsIDE5MSwgNTIsIDE5MSwgMTU0LCAzLCA0LCAxMTUsIDIyNSwgMTkxLCAxMTYsIDIzNCwgMjAyLCAxMDMsIDEyMSwgMzAsIDIyNSwgMTkxLCAxNTQsIDIwNiwgNzgsIDYsIDcxLCAyMDEsIDIyNCwgMTkxLCAyMjIsIDg5LCAxODcsIDIzNywgNjYsIDExNSwgMjI0LCAxOTEsIDIwNSwgMTc1LCAyMzAsIDAsIDE5MywgMjgsIDIyNCwgMTkxLCAxMjMsIDEwNywgOTYsIDE3MSwgNCwgMTM5LCAyMjMsIDE5MSwgMTc5LCAxMiwgMTEzLCAxNzIsIDEzOSwgMjE5LCAyMjIsIDE5MSwgMTIzLCA0OSwgMTQ4LCAxOSwgMjM3LCA0MiwgMjIyLCAxOTEsIDEyLCAyMDAsIDk0LCAyMzksIDI1NCwgMTIwLCAyMjEsIDE5MSwgNDYsIDIyNiwgNTksIDQ5LCAyMzUsIDE5NywgMjIwLCAxOTEsIDExMCwgMTYzLCAxLCAxODgsIDUsIDE4LCAyMjAsIDE5MSwgMjM0LCAxNzgsIDE1MiwgMjE2LCAxMjQsIDkyLCAyMTksIDE5MSwgMTcsIDE0MSwgMjM4LCAzMiwgMTE4LCAxNjYsIDIxOCwgMTkxLCA1OSwgMTk5LCAxMjgsIDIzNiwgMjQ1LCAyMzgsIDIxNywgMTkxLCAxODgsIDE1MCwgMTQ0LCAxNSwgMTIyLCA1NCwgMjE3LCAxOTEsIDIzMiwgNDgsIDk1LCA5NCwgMTI4LCAxMjUsIDIxNiwgMTkxLCAyMywgNDMsIDEwNiwgNDgsIDEzLCAxOTUsIDIxNSwgMTkxLCA0MywgMjIyLCAyMDAsIDYwLCAyNDIsIDcsIDIxNSwgMTkxLCA5MiwgNTYsIDE2LCAxNDYsIDUsIDc2LCAyMTQsIDE5MSwgMzAsIDIyLCAxMDYsIDc3LCAyNDMsIDE0MiwgMjEzLCAxOTEsIDgzLCAyMDgsIDIzNywgMzcsIDE0MSwgMjA5LCAyMTIsIDE5MSwgMjMsIDE0LCAxMzIsIDEwMCwgMSwgMTksIDIxMiwgMTkxLCA1MSwgMjI1LCAxNTEsIDI1MCwgMTIxLCA4MywgMjExLCAxOTEsIDI1MCwgMTI2LCAxMDYsIDE4OCwgMTE2LCAxNDcsIDIxMCwgMTkxLCAxMDksIDIzMSwgMjUxLCAxNjksIDI0MSwgMjEwLCAyMDksIDE5MSwgNTQsIDIyOSwgMTAsIDIzOSwgMTE0LCAxNywgMjA5LCAxOTEsIDE3MiwgMTczLCAyMTYsIDk1LCAxMTgsIDc5LCAyMDgsIDE5MSwgMjQwLCAyMiwgNzIsIDgwLCAyNTIsIDI0LCAyMDcsIDE5MSwgMTM3LCAyMTAsIDIyMiwgMjI0LCAxMSwgMTQ3LCAyMDUsIDE5MSwgMjA4LCAxODQsIDExMiwgMzIsIDM2LCAxMSwgMjA0LCAxOTEsIDIyNCwgMTYsIDE3MCwgMjEyLCAyMzYsIDEyOSwgMjAyLCAxOTEsIDIxMywgMzMsIDU1LCAxOTUsIDEzLCAyNDgsIDIwMCwgMTkxLCAxNDgsIDE2NCwgMTA3LCAzOCwgMjIzLCAxMDgsIDE5OSwgMTkxLCA1NSwgMjI0LCAyNDMsIDE5NSwgOCwgMjI1LCAxOTcsIDE5MSwgNzcsIDI0OCwgMTY1LCAxMjYsIDIyMiwgODQsIDE5NiwgMTkxLCAxNTgsIDk0LCA0MSwgMjAzLCAxNiwgMTk5LCAxOTQsIDE5MSwgOTgsIDE2MSwgMjE0LCA1MiwgMjM5LCA1NiwgMTkzLCAxOTEsIDEwMywgMTUsIDE4MCwgMiwgNjcsIDg2LCAxOTEsIDE5MSwgNzUsIDIzNCwgNCwgNTIsIDE3LCA1NCwgMTg4LCAxOTEsIDE1NCwgNiwgNjksIDI0MywgMCwgMjIsIDE4NSwgMTkxLCAxNjAsIDE5NSwgMTI0LCAxMjEsIDEsIDI0NiwgMTgxLCAxOTEsIDE1OCwgMTAsIDE4NCwgMjMxLCAyNDksIDIxMSwgMTc4LCAxOTEsIDE2NCwgMjI4LCAyMTMsIDU3LCA2LCAxMDAsIDE3NSwgMTkxLCAyNTIsIDE5OSwgNjYsIDExNiwgOCwgMjgsIDE2OSwgMTkxLCAyNDgsIDg1LCAxODUsIDgwLCAyNDksIDIxNSwgMTYyLCAxOTEsIDE1OSwgMTE0LCA3NiwgMjIsIDI0NywgMzEsIDE1MywgMTkxLCAxNTksIDExNCwgNzYsIDIyLCAyNDcsIDMxLCAxMzcsIDE5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5LCAxMTQsIDc2LCAyMiwgMjQ3LCAzMSwgMTM3LCA2MywgNjgsIDIyMCwgMTU2LCA3NCwgNiwgMCwgMjI0LCAxOTEsIDY4LCAyMjAsIDE1NiwgNzQsIDYsIDAsIDIyNCwgMTkxLCAxMSwgMjM4LCA3LCA2MCwgNDgsIDAsIDIyNCwgMTkxLCAxNTMsIDE3LCAyMjIsIDMwLCAxMzIsIDAsIDIyNCwgMTkxLCAxOTIsIDk0LCA5NywgMTkzLCAyNTMsIDAsIDIyNCwgMTkxLCAyMzEsIDE3MSwgMjI4LCA5OSwgMTE5LCAxLCAyMjQsIDE5MSwgMiwgMjQzLCAxNDQsIDQxLCAzMSwgMiwgMjI0LCAxOTEsIDI1MSwgNjMsIDEzNSwgMjQ5LCAyNDIsIDIsIDIyNCwgMTkxLCA3MywgMjE4LCAxNDEsIDYyLCAyMzAsIDMsIDIyNCwgMTkxLCAxMjgsIDEyOCwgMTgxLCAxMDYsIDIxNSwgNCwgMjI0LCAxOTEsIDYsIDI0MSwgMTI5LCAyOSwgMjU1LCA1LCAyMjQsIDE5MSwgODQsIDExNSwgMTg1LCAxOTMsIDgwLCA3LCAyMjQsIDE5MSwgMTc4LCAxMDIsIDEwMCwgMTQ0LCAxODcsIDgsIDIyNCwgMTkxLCAxNiwgOTAsIDE1LCA5NSwgMzgsIDEwLCAyMjQsIDE5MSwgMjM1LCAyNTUsIDI4LCAyMzAsIDIwMywgMTEsIDIyNCwgMTkxLCAxNDEsIDE4MywgMTQ5LCA5NCwgMTU1LCAxMywgMjI0LCAxOTEsIDI1MSwgMywgMjI5LCAxODIsIDEyNSwgMTUsIDIyNCwgMTkxLCAxNTEsIDU2LCAyNDIsIDY0LCAxMDAsIDE3LCAyMjQsIDE5MSwgMTUzLCA0MywgMTMxLCAxMDYsIDEzMSwgMTksIDIyNCwgMTkxLCAxMjEsIDM2LCA5NCwgMTU4LCAyMDYsIDIxLCAyMjQsIDE5MSwgMjQ3LCAyMDEsIDgxLCAxMjgsIDQwLCAyNCwgMjI0LCAxOTEsIDIwOSwgNjMsIDE5MywgMTk3LCAxMzgsIDI2LCAyMjQsIDE5MSwgMjA0LCAxNTEsIDIzLCA5NiwgMzEsIDI5LCAyMjQsIDE5MSwgMCwgMTk4LCA1MSwgMTA0LCAyMzIsIDMxLCAyMjQsIDE5MSwgMTIwLCAyMDgsIDIzNiwgMTg2LCAxODMsIDM0LCAyMjQsIDE5MSwgMTIxLCAxNDcsIDIyMywgMTYyLCAxNDcsIDM3LCAyMjQsIDE5MSwgMTEwLCA4MCwgMjUxLCAxNzMsIDE1NywgNDAsIDIyNCwgMTkxLCAyMDEsIDIwMywgMTU0LCA4OCwgMjI0LCA0MywgMjI0LCAxOTEsIDM2LCA3MSwgNTgsIDMsIDM1LCA0NywgMjI0LCAxOTEsIDk4LCA3NSwgMTQzLCAxNjYsIDEyMiwgNTAsIDIyNCwgMTkxLCA4MCwgMTA5LCAxMTIsIDM0LCAyNTAsIDUzLCAyMjQsIDE5MSwgMTQyLCA4OSwgMjQ2LCAzNiwgMTc2LCA1NywgMjI0LCAxOTEsIDIwNCwgNjksIDEyNCwgMzksIDEwMiwgNjEsIDIyNCwgMTkxLCAyNiwgMTYzLCAxMTcsIDg0LCA1MywgNjUsIDIyNCwgMTkxLCAyNSwgMzAsIDI1MSwgODksIDQ0LCA2OSwgMjI0LCAxOTEsIDM1LCAxMzUsIDEzNiwgMTU1LCA4MywgNzMsIDIyNCwgMTkxLCA0NCwgMjQwLCAyMSwgMjIxLCAxMjIsIDc3LCAyMjQsIDE5MSwgMTE2LCAxNzgsIDIxMiwgMTIyLCAxOTEsIDgxLCAyMjQsIDE5MSwgODYsIDE1OCwgNjQsIDIxNiwgNDEsIDg2LCAyMjQsIDE5MSwgNDMsIDEzMiwgMjEzLCA4OCwgMTk0LCA5MCwgMjI0LCAxOTEsIDIxMiwgMTI5LCAxNzIsIDE2NywgODYsIDk1LCAyMjQsIDE5MSwgMjMyLCAxOTIsIDExNCwgMTMyLCAxMiwgMTAwLCAyMjQsIDE5MSwgMTk1LCAxNywgMTY0LCA4MiwgMjM2LCAxMDQsIDIyNCwgMTkxLCAzMiwgMTUyLCAxNjMsIDE5OSwgMjM5LCAxMDksIDIyNCwgMTkxLCA4MCwgNTQsIDIyOSwgMTAsIDIzOSwgMTE0LCAyMjQsIDE5MSwgNDgsIDI0MiwgMTc4LCAzOCwgMjIsIDEyMCwgMjI0LCAxOTEsIDE5MiwgMjAzLCAxMiwgMjcsIDEwMSwgMTI1LCAyMjQsIDE5MSwgMTY2LCAyNDIsIDExOCwgMTMyLCAyMTEsIDEzMCwgMjI0LCAxOTEsIDcxLCA2MSwgNjgsIDE2MywgNTksIDEzNiwgMjI0LCAxOTEsIDIyMCwgMTI5LCA1OCwgMjI5LCAyMDksIDE0MSwgMjI0LCAxOTEsIDExLCAyNDAsIDIyMSwgMjMwLCAxNDEsIDE0NywgMjI0LCAxOTEsIDc0LCAyMDcsIDI0NCwgMTgsIDk5LCAxNTMsIDIyNCwgMTkxLCA3MCwgMjEwLCAxMTAsIDI0NCwgNDksIDE1OSwgMjI0LCAxOTEsIDk5LCAxODMsIDIwNywgNDIsIDUxLCAxNjUsIDIyNCwgMTkxLCAzLCAyMTAsIDI1NCwgNywgODgsIDE3MSwgMjI0LCAxOTEsIDExMSwgMTI5LCA0LCAxOTcsIDE0MywgMTc3LCAyMjQsIDE5MSwgMTc0LCA3MiwgNzYsIDgwLCAxOTUsIDE4MywgMjI0LCAxOTEsIDM3LCAyMzAsIDg5LCA3MywgNDMsIDE5MCwgMjI0LCAxOTEsIDMxLCAxODUsIDUzLCAyMzMsIDE4MiwgMTk2LCAyMjQsIDE5MSwgMTg1LCA1NiwgNDIsIDU1LCA4MSwgMjAzLCAyMjQsIDE5MSwgNTksIDE5NiwgNjMsIDEwOCwgMjMzLCAyMDksIDIyNCwgMTkxLCAxNzgsIDczLCAxMjYsIDE5NiwgMTc1LCAyMTYsIDIyNCwgMTkxLCAyNDAsIDIyNCwgMzksIDE0LCAxNjAsIDIyMywgMjI0LCAxOTEsIDkxLCA5NiwgMTQzLCAxMzcsIDE0OCwgMjMwLCAyMjQsIDE5MSwgMTAsIDE4OCwgMTQ3LCA3OSwgMTQzLCAyMzcsIDIyNCwgMTkxLCAxMDUsIDUzLCAzNiwgMjM4LCAxNzcsIDI0NCwgMjI0LCAxOTEsIDE2NiwgMTgwLCAyNTQsIDE1MCwgMCwgMjUyLCAyMjQsIDE5MSwgMjI3LCA1MSwgMjE3LCA2MywgNzksIDMsIDIyNSwgMTkxLCAxNDYsIDExOSwgMTQsIDEwMSwgMTY4LCAxMCwgMjI1LCAxOTEsIDE3MywgMjUyLCA1MCwgMjQsIDM1LCAxOCwgMjI1LCAxOTEsIDE4NywgMTIzLCAxMjgsIDIzOCwgMjAzLCAyNSwgMjI1LCAxOTEsIDE1NywgMTgsIDE2LCAxNDcsIDExMiwgMzMsIDIyNSwgMTkxLCA3LCA5OCwgMjE3LCAyMDQsIDMzLCA0MSwgMjI1LCAxOTEsIDIyMCwgMjQyLCAxNDUsIDE0OCwgMjQ0LCA0OCwgMjI1LCAxOTEsIDE0MywgMTM3LCAxNDgsIDEwMiwgMjQzLCA1NiwgMjI1LCAxOTEsIDE4NiwgMTAzLCA5MywgMTYzLCAyMjksIDY0LCAyMjUsIDE5MSwgMjAwLCAyMDYsIDIxOSwgMjE2LCAyMzYsIDcyLCAyMjUsIDE5MSwgNjYsIDExOSwgNzMsIDE1NiwgMjEsIDgxLCAyMjUsIDE5MSwgNjMsIDg1LCAxMzMsIDYsIDk4LCA4OSwgMjI1LCAxOTEsIDE3OSwgMTIyLCAxMzUsIDIxOSwgMTYxLCA5NywgMjI1LCAxOTEsIDU2LCAxNywgMjUzLCAyMTgsIDI1MCwgMTA1LCAyMjUsIDE5MSwgMjUyLCAwLCAxNjQsIDU0LCAxMTMsIDExNCwgMjI1LCAxOTEsIDQzLCA1MCwgNTgsIDMyLCA5LCAxMjMsIDIyNSwgMTkxLCAxNjQsIDE5NCwgMjE2LCA2NiwgMTQ0LCAxMzEsIDIyNSwgMTkxLCA5MiwgMTcyLCAxNjgsIDE5MywgNTIsIDE0MCwgMjI1LCAxOTEsIDgyLCAyMzksIDE2OSwgMTU2LCAyNDYsIDE0OCwgMjI1LCAxOTEsIDExMiwgMTUxLCAyNTMsIDE4NiwgMjExLCAxNTcsIDIyNSwgMTkxLCAyMTYsIDE1OCwgODksIDE4LCAxNjAsIDE2NiwgMjI1LCAxOTEsIDE0OSwgMjQzLCAxOTcsIDIyMiwgMTM5LCAxNzUsIDIyNSwgMTkxLCAxMjEsIDE3MywgMTMyLCAyMzgsIDE0NiwgMTg0LCAyMjUsIDE5MSwgNjUsIDI0MCwgMjQ4LCAyNDYsIDE3NCwgMTkzLCAyMjUsIDE5MSwgODMsIDE0NiwgMTE3LCA1NiwgMTg2LCAyMDIsIDIyNSwgMTkxLCAyMzIsIDEwNSwgMTkyLCAzMiwgMjMzLCAyMTEsIDIyNSwgMTkxLCAxNjQsIDE2NiwgOTMsIDc2LCA1MSwgMjIxLCAyMjUsIDE5MSwgMjEwLCAxNjcsIDg1LCAyNDQsIDEzNSwgMjMwLCAyMjUsIDE5MSwgMTIwLCAyNDAsIDE5LCA3LCAyMDgsIDIzOSwgMjI1LCAxOTEsIDE2MCwgMTEwLCAxNjAsIDE5MiwgNTksIDI0OSwgMjI1LCAxOTEsIDIxNywgOTMsIDE2MCwgMTY0LCAxOTIsIDIsIDIyNiwgMTkxLCA4NiwgNDEsIDYxLCAyMTEsIDc1LCAxMiwgMjI2LCAxOTEsIDk4LCA0OCwgMTI3LCAxMzMsIDIwNCwgMjEsIDIyNiwgMTkxLCAxOTQsIDEzMiwgMjA5LCAxNzIsIDEwOCwgMzEsIDIyNiwgMTkxLCA3NSwgNjIsIDExOCwgMjMsIDQwLCA0MSwgMjI2LCAxOTEsIDIxMSwgMjQ3LCAyNiwgMTMwLCAyMjcsIDUwLCAyMjYsIDE5MSwgMCwgMjI1LCA2NywgMTM3LCAxNTAsIDYwLCAyMjYsIDE5MSwgMTMxLCAyMywgMTI1LCA1LCAxMDUsIDcwLCAyMjYsIDE5MSwgMjIsIDE5MSwgNDEsIDE3MiwgODQsIDgwLCAyMjYsIDE5MSwgMTAxLCAxMzgsIDU3LCA4LCA1OCwgOTAsIDIyNiwgMTkxLCAxNTgsIDk3LCAxMDYsIDc1LCAyOSwgMTAwLCAyMjYsIDE5MSwgMjA4LCAxODEsIDQ3LCAxNjAsIDIzLCAxMTAsIDIyNiwgMTkxLCA2NSwgOTksIDM4LCA4MSwgNDcsIDEyMCwgMjI2LCAxOTEsIDE5LCAxMDAsIDQsIDg0LCA1NiwgMTMwLCAyMjYsIDE5MSwgMjUxLCA4OCwgMTkzLCAxMTEsIDY3LCAxNDAsIDIyNiwgMTkxLCAxOTksIDIxNCwgNTEsIDEzMiwgOTksIDE1MCwgMjI2LCAxOTEsIDIwOSwgMTczLCAyMTUsIDI0NCwgMTYwLCAxNjAsIDIyNiwgMTkxLCAyNDgsIDI1MSwgMTk3LCAxMDgsIDIwMSwgMTcwLCAyMjYsIDE5MSwgNzcsIDUwLCAxMTQsIDIyLCAyNDYsIDE4MCwgMjI2LCAxOTEsIDEzMiwgMjQxLCAyMTEsIDE4NCwgNTUsIDE5MSwgMjI2LCAxOTEsIDIwNSwgMzMsIDE2OSwgMTMzLCAxNDYsIDIwMSwgMjI2LCAxOTEsIDUsIDIyNSwgMTAsIDQwLCAyMTIsIDIxMSwgMjI2LCAxOTEsIDE1MSwgMTEyLCAyMzIsIDQ1LCAzMCwgMjIyLCAyMjYsIDE5MSwgMjQ3LCAxNDgsIDE1NiwgMTksIDEyMywgMjMyLCAyMjYsIDE5MSwgNTcsIDY2LCA2LCAyNDIsIDIzNiwgMjQyLCAyMjYsIDE5MSwgNjIsIDE1MCwgNjIsIDExNiwgNjUsIDI1MywgMjI2LCAxOTEsIDIwMywgMTYyLCAxNzYsIDEzOSwgMTYyLCA3LCAyMjcsIDE5MSwgMTMsIDgwLCAyNiwgMTA2LCAyMCwgMTgsIDIyNywgMTkxLCA2LCAxNTgsIDEyMywgMTUsIDE1MSwgMjgsIDIyNywgMTkxLCAxNDcsIDE3MCwgMjM3LCAzOCwgMjQ4LCAzOCwgMjI3LCAxOTEsIDIxNCwgODcsIDg3LCA1LCAxMDYsIDQ5LCAyMjcsIDE5MSwgMTg0LCAxNzcsIDIxNywgMTQ1LCAyMzQsIDU5LCAyMjcsIDE5MSwgMTEsIDIwOCwgMTgyLCAxNTQsIDExNywgNzAsIDIyNywgMTkxLCAxMCwgMTYxLCAxMzEsIDQ2LCAyMjUsIDgwLCAyMjcsIDE5MSwgMTY4LCAzMCwgMTA1LCAxMTIsIDkxLCA5MSwgMjI3LCAxOTEsIDI1MSwgNjAsIDcwLCAxMjEsIDIzMCwgMTAxLCAyMjcsIDE5MSwgNzksIDkxLCAzNSwgMTMwLCAxMTMsIDExMiwgMjI3LCAxOTEsIDEyMywgMjAsIDE3NCwgNzEsIDIyNSwgMTIyLCAyMjcsIDE5MSwgOTMsIDExMCwgNDgsIDIxMiwgOTcsIDEzMywgMjI3LCAxOTEsIDE3NiwgMTQwLCAxMywgMjIxLCAyMzYsIDE0MywgMjI3LCAxOTEsIDIzNywgMTgyLCAxMSwgMjA1LCAxMTcsIDE1NCwgMjI3LCAxOTEsIDIzNiwgMTM1LCAyMTYsIDk2LCAyMjUsIDE2NCwgMjI3LCAxOTEsIDE2MCwgMjQ5LCAxNTYsIDE4NywgOTMsIDE3NSwgMjI3LCAxOTEsIDIyMSwgMzUsIDE1NSwgMTcxLCAyMzAsIDE4NSwgMjI3LCAxOTEsIDE0NiwgMTQ5LCA5NSwgNiwgOTksIDE5NiwgMjI3LCAxOTEsIDc2LCAxMzgsIDE0MywgNzksIDIwMCwgMjA2LCAyMjcsIDE5MSwgMTY2LCA0MywgMjE2LCA3MCwgNjAsIDIxNywgMjI3LCAxOTEsIDkwLCAxNTcsIDE1NiwgMTYxLCAxODQsIDIyNywgMjI3LCAxOTEsIDg5LCAxMTAsIDEwNSwgNTMsIDM2LCAyMzgsIDIyNywgMTkxLCAxMzksIDE3MCwgOTUsIDIzMywgMTI0LCAyNDgsIDIyNywgMTkxLCAyMywgMTgzLCAyMDksIDAsIDIyMiwgMiwgMjI4LCAxOTEsIDIyLCAxMzYsIDE1OCwgMTQ4LCA3MywgMTMsIDIyOCwgMTkxLCA0LCAyMzIsIDI0NywgMjUzLCAxNTUsIDIzLCAyMjgsIDE5MSwgODIsIDE1NSwgNTYsIDE4NSwgMjIzLCAzMywgMjI4LCAxOTEsIDIyOSwgNDIsIDIyLCAxOTEsIDQxLCA0NCwgMjI4LCAxOTEsIDIzMywgMTI2LCA3OCwgNjUsIDEyNiwgNTQsIDIyOCwgMTkxLCAxNTIsIDEzMywgMTE4LCA3OCwgMTc5LCA2NCwgMjI4LCAxOTEsIDE5MSwgMjExLCAxMDAsIDE5OCwgMjE5LCA3NCwgMjI4LCAxOTEsIDE5LCAxMCwgMTcsIDExMiwgOCwgODUsIDIyOCwgMTkxLCAxOTUsIDE2LCA1NywgMTI1LCA2MSwgOTUsIDIyOCwgMTkxLCAyMTcsIDIzNywgMTc5LCAyMDIsIDc2LCAxMDUsIDIyOCwgMTkxLCAxNDgsIDI1MCwgMTc4LCAxODAsIDgzLCAxMTUsIDIyOCwgMTkxLCAxMjQsIDIzOSwgMTExLCAyMDgsIDk0LCAxMjUsIDIyOCwgMTkxLCAxMjMsIDIxNiwgMTEsIDUsIDEwOCwgMTM1LCAyMjgsIDE5MSwgMjAyLCAxNjMsIDI3LCA5NywgODEsIDE0NSwgMjI4LCAxOTEsIDE5MSwgMTU4LCAxNzUsIDg5LCA0NiwgMTU1LCAyMjgsIDE5MSwgMjI0LCAxMjksIDEsIDEzMiwgMTUsIDE2NSwgMjI4LCAxOTEsIDIsIDEwMSwgODMsIDE3NCwgMjQwLCAxNzQsIDIyOCwgMTkxLCAyNCwgOTAsIDE1NywgMTU2LCAxNjEsIDE4NCwgMjI4LCAxOTEsIDI0LCA5MSwgOCwgMTE0LCA4MCwgMTk0LCAyMjgsIDE5MSwgNDcsIDgwLCA4MiwgOTYsIDEsIDIwNCwgMjI4LCAxOTEsIDI0LCA5MywgMjIyLCAyOCwgMTc0LCAyMTMsIDIyOCwgMTkxLCAyMjMsIDEzNSwgMTMxLCAxMzIsIDQwLCAyMjMsIDIyOCwgMTkxLCAxNDQsIDE5MCwgNzMsIDIxMSwgMTYwLCAyMzIsIDIyOCwgMTkxLCA2NSwgMjQ1LCAxNSwgMzQsIDI1LCAyNDIsIDIyOCwgMTkxLCAxNTAsIDkxLCA5MCwgMTMsIDEzNywgMjUxLCAyMjgsIDE5MSwgMjI1LCAyMTEsIDE1NiwgMTg4LCAyMDAsIDQsIDIyOSwgMTkxLCAyNTQsIDk5LCAzMywgNTgsIDQsIDE0LCAyMjksIDE5MSwgNCwgMCwgMTk5LCAxNTgsIDYxLCAyMywgMjI5LCAxOTEsIDEwNywgMjM5LCA4MywgODUsIDEwNCwgMzIsIDIyOSwgMTkxLCAyNDUsIDIxNiwgMTUwLCAxLCAxMDMsIDQxLCAyMjksIDE5MSwgNTgsIDIzMCwgNjAsIDk5LCA5NSwgNTAsIDIyOSwgMTkxLCA4MiwgMTEsIDM3LCAxNDcsIDgzLCA1OSwgMjI5LCAxOTEsIDEzNSwgMTY3LCA4NywgMjAyLCA1MCwgNjgsIDIyOSwgMTkxLCAxMSwgMzgsIDI1NCwgNDAsIDIzNCwgNzYsIDIyOSwgMTkxLCA1MywgMjEyLCA0MCwgMzYsIDE1MywgODUsIDIyOSwgMTkxLCAyNiwgMTY2LCAxODIsIDIxMiwgNjUsIDk0LCAyMjksIDE5MSwgMjE1LCAxOCwgMjQyLCA2NSwgMjA3LCAxMDIsIDIyOSwgMTkxLCAxOCwgNzQsIDk1LCA4LCA1NywgMTExLCAyMjksIDE5MSwgMjIwLCAxODgsIDExMywgODIsIDE1MiwgMTE5LCAyMjksIDE5MSwgNTEsIDEwNywgNDEsIDMyLCAyMzcsIDEyNywgMjI5LCAxOTEsIDU0LCAyMDQsIDIwOCwgMTIwLCAzNCwgMTM2LCAyMjksIDE5MSwgMjA0LCAyMzUsIDEzNiwgNjcsIDU0LCAxNDQsIDIyOSwgMTkxLCAyNDEsIDcwLCAyMzAsIDE0NSwgNjMsIDE1MiwgMjI5LCAxOTEsIDE2NSwgMjIxLCAyMzIsIDk5LCA2MiwgMTYwLCAyMjksIDE5MSwgMTQ1LCA5OCwgMTI4LCA2OCwgMTksIDE2OCwgMjI5LCAxOTEsIDYzLCAxNDIsIDIzMCwgMjAwLCAyMDIsIDE3NSwgMjI5LCAxOTEsIDEyMywgMjQ1LCAyNDEsIDIwOCwgMTE5LCAxODMsIDIyOSwgMTkxLCAyNCwgMTc2LCAyMjgsIDQyLCAyMiwgMTkxLCAyMjksIDE5MSwgMTkzLCAxMTIsIDE3NCwgOTcsIDEzNCwgMTk4LCAyMjksIDE5MSwgODksIDE5MiwgNCwgMTEwLCAyMjEsIDIwNSwgMjI5LCAxOTEsIDgyLCA5OSwgNjYsIDIwNCwgMzcsIDIxMywgMjI5LCAxOTEsIDE3MSwgODksIDEwMywgMTI0LCA5NSwgMjIwLCAyMjksIDE5MSwgMjA0LCAxMjEsIDE5OCwgMTkwLCAxMDAsIDIyNywgMjI5LCAxOTEsIDI0MywgMjgsIDE0NSwgMjM5LCA4MiwgMjM0LCAyMjksIDE5MSwgMTIzLCAxOSwgNjcsIDExNCwgNTAsIDI0MSwgMjI5LCAxOTEsIDc3LCAxMDUsIDI1MywgNDUsIDEsIDI0OCwgMjI5LCAxOTEsIDE2MiwgMTIsIDg1LCA0OSwgMTQ5LCAyNTQsIDIyOSwgMTkxLCAyNTMsIDUwLCAyNCwgMzUsIDE4LCA1LCAyMzAsIDE5MSwgMjA3LCAxNjAsIDE2MSwgMTI3LCAxMzAsIDExLCAyMzAsIDE5MSwgMjEzLCAxMjEsIDg0LCAyNTIsIDIyMywgMTcsIDIzMCwgMTkxLCAyNiwgMTk2LCA3LCAxMTgsIDI1MiwgMjMsIDIzMCwgMTkxLCAxMjMsIDEzMywgNSwgMjQ3LCAzLCAzMCwgMjMwLCAxOTEsIDYxLCAxNTQsIDIzNCwgMjAxLCAyNTIsIDM1LCAyMzAsIDE5MSwgNTEsIDI2LCAyNDksIDE4OCwgMjI2LCA0MSwgMjMwLCAxOTEsIDU4LCAzNSwgNzQsIDEyMywgMTMxLCA0NywgMjMwLCAxOTEsIDExNiwgMTUxLCAxOTYsIDg5LCAxNywgNTMsIDIzMCwgMTkxLCAyMjYsIDExOCwgMTA0LCA4OCwgMTQwLCA1OCwgMjMwLCAxOTEsIDg1LCAyMTcsIDExOSwgNjksIDI0MCwgNjMsIDIzMCwgMTkxLCA4LCAxNzMsIDEzNSwgNDcsIDE5LCA2OSwgMjMwLCAxOTEsIDIxNSwgMjQ3LCAyMjUsIDMyLCAzMywgNzQsIDIzMCwgMTkxLCAxOTUsIDE4NSwgMTM0LCAyNSwgMjYsIDc5LCAyMzAsIDE5MSwgOTAsIDQ2LCAyNywgMTU3LCAyNDMsIDgzLCAyMzAsIDE5MSwgMTM4LCAyMjgsIDQzLCAxMjksIDE0OCwgODgsIDIzMCwgMTkxLCAxNDcsIDUzLCAyMzQsIDMzLCAyNiwgOTMsIDIzMCwgMTkxLCAxODUsIDI1MywgMjQyLCAyMDEsIDEzOCwgOTcsIDIzMCwgMTkxLCA5MiwgMTQ0LCA0NSwgMjAzLCAyMTUsIDEwMSwgMjMwLCAxOTEsIDE3NiwgODgsIDE5NSwgNjksIDIzOCwgMTA1LCAyMzAsIDE5MSwgMjIwLCAxODcsIDYsIDEyNSwgMjMzLCAxMDksIDIzMCwgMTkxLCAyNDcsIDE3MywgMjE0LCAxMzcsIDIwMywgMTEzLCAyMzAsIDE5MSwgNzYsIDE0MiwgNTksIDE2NSwgMTMxLCAxMTcsIDIzMCwgMTkxLCAxNDksIDEyOCwgMTUyLCAxMzIsIDExLCAxMjEsIDIzMCwgMTkxLCAxNjAsIDI1LCAxOTYsIDcsIDExOCwgMTI0LCAyMzAsIDE5MSwgMTMxLCA3NywgMTU3LCA3MSwgMTk3LCAxMjcsIDIzMCwgMTkxLCA5MiwgMTQ3LCAxMTAsIDc1LCAyMjgsIDEzMCwgMjMwLCAxOTEsIDY0LCAyMjMsIDIyLCA0NCwgMjEzLCAxMzMsIDIzMCwgMTkxLCAyNTIsIDE5NywgMTA4LCAyMDEsIDE3MCwgMTM2LCAyMzAsIDE5MSwgOTksIDk1LCAxNzgsIDI0MSwgOTYsIDEzOSwgMjMwLCAxOTEsIDEyMywgNDYsIDgzLCAxNDcsIDIyNCwgMTQxLCAyMzAsIDE5MSwgMjI3LCAyMjMsIDEwMywgOTIsIDU2LCAxNDQsIDIzMCwgMTkxLCAzNSwgNDQsIDQyLCAyMjYsIDExNiwgMTQ2LCAyMzAsIDE5MSwgMjAyLCA3OCwgNjMsIDE2OCwgMTM5LCAxNDgsIDIzMCwgMTkxLCAyNDUsIDE5MCwgMjQxLCAxODEsIDEwMywgMTUwLCAyMzAsIDE5MSwgMTMzLCA1LCAyNDcsIDMsIDMwLCAxNTIsIDIzMCwgMTkxLCAyMzksIDIzMCwgMTY5LCAxNCwgMTg1LCAxNTMsIDIzMCwgMTkxLCAyMTMsIDE0NiwgMTQyLCAxMTQsIDQ4LCAxNTUsIDIzMCwgMTkxLCAyMjgsIDE4NywgMTQ4LCAxODYsIDEwMCwgMTU2LCAyMzAsIDE5MSwgMTEzLCAxNzUsIDIwNCwgOTEsIDExNywgMTU3LCAyMzAsIDE5MSwgMTkxLCA3MywgMjExLCAxNjAsIDEwNCwgMTU4LCAyMzAsIDE5MSwgMTgzLCAxNTAsIDIwMSwgMTEyLCA2MCwgMTU5LCAyMzAsIDE5MSwgMTI2LCAxNDQsIDEwMSwgMTkzLCAxOTYsIDE1OSwgMjMwLCAxOTEsIDE5MywgODQsIDUxLCAxMDcsIDQxLCAxNjAsIDIzMCwgMTkxLCAyMjEsIDE3OSwgMTc0LCAyMDksIDExNCwgMTYwLCAyMzAsIDE5MSwgMTY0LCAxOTcsIDI1LCAxOTUsIDE1NiwgMTYwLCAyMzAsIDE5MSwgMjIxLCAxNzksIDE3NCwgMjA5LCAxMTQsIDE2MCwgMjMwLCAxOTEsIDE5MywgODQsIDUxLCAxMDcsIDQxLCAxNjAsIDIzMCwgMTkxLCA4MCwgMTY4LCAxNjcsIDE0MywgMTkyLCAxNTksIDIzMCwgMTkxLCAxMTUsIDE4NiwgNDQsIDM4LCA1NCwgMTU5LCAyMzAsIDE5MSwgNzcsIDEzMywgMTIwLCAzNiwgOTQsIDE1OCwgMjMwLCAxOTEsIDE0MSwgMzgsIDIzLCA5OSwgOTYsIDE1NywgMjMwLCAxOTEsIDE0MywgMTEwLCAxMzIsIDY5LCA2OSwgMTU2LCAyMzAsIDE5MSwgMjAyLCAxNjQsIDEzNCwgNTQsIDAsIDE1NSwgMjMwLCAxOTEsIDIzLCAxMDAsIDIwMywgMjQyLCAxMTcsIDE1MywgMjMwLCAxOTEsIDE1NywgMTcsIDE2NSwgMTg5LCAxOTMsIDE1MSwgMjMwLCAxOTEsIDIwNiwgMTEzLCAxMTAsIDE5LCAyMzgsIDE0OSwgMjMwLCAxOTEsIDEwLCAyMTYsIDE0LCA3MCwgMjM2LCAxNDcsIDIzMCwgMTkxLCAxNTYsIDE2MywgMTQyLCAxNDIsIDE3MSwgMTQ1LCAyMzAsIDE5MSwgMzYsIDEyOSwgNiwgMTU1LCA1OCwgMTQzLCAyMzAsIDE5MSwgODYsIDE3LCAxMTAsIDUwLCAxNzAsIDE0MCwgMjMwLCAxOTEsIDEwMiwgMTkxLCAyMzgsIDExNiwgMjMxLCAxMzcsIDIzMCwgMTkxLCAyNDksIDE4NiwgMTIsIDI1NSwgMjMzLCAxMzQsIDIzMCwgMTkxLCAxNTMsIDE4OCwgMSwgMTAyLCAxOTAsIDEzMSwgMjMwLCAxOTEsIDEzNiwgMTYwLCAxMDYsIDI0NCwgMTA2LCAxMjgsIDIzMCwgMTkxLCA4NSwgMTYyLCAyMzYsIDQ1LCAyMjksIDEyNCwgMjMwLCAxOTEsIDE2NiwgMjQxLCAxMSwgMTc1LCAzNiwgMTIxLCAyMzAsIDE5MSwgNDgsIDQ3LCAxOTIsIDYyLCA1OCwgMTE3LCAyMzAsIDE5MSwgMjQzLCA5MCwgOSwgMjIxLCAzNywgMTEzLCAyMzAsIDE5MSwgMzQsIDIyNCwgMTYsIDE3MCwgMjEyLCAxMDgsIDIzMCwgMTkxLCA0OCwgMTMxLCA0OSwgMzQsIDgxLCAxMDQsIDIzMCwgMTkxLCAxNDEsIDgsIDE5OCwgMTkzLCAxNjUsIDk5LCAyMzAsIDE5MSwgMjAxLCAxNzEsIDExNSwgMTIsIDIwMCwgOTQsIDIzMCwgMTkxLCAxMTQsIDE2OCwgMjIzLCAxMzMsIDE3MywgODksIDIzMCwgMTkxLCAyNDgsIDE5NCwgMTAwLCAxNzAsIDk2LCA4NCwgMjMwLCAxOTEsIDIyOSwgMTc5LCA2MCwgMTUsIDIzOCwgNzgsIDIzMCwgMTkxLCAxNzcsIDE5NCwgNDUsIDMxLCA3MywgNzMsIDIzMCwgMTkxLCAxNjUsIDc4LCA2NCwgMTksIDk3LCA2NywgMjMwLCAxOTEsIDE0MSwgMjM2LCA3NCwgMjAzLCA3MiwgNjEsIDIzMCwgMTkxLCAyMjEsIDk2LCAxNjgsIDE5NSwgMTAsIDU1LCAyMzAsIDE5MSwgNTYsIDIxOSwgMjIwLCAxNTIsIDE1OCwgNDgsIDIzMCwgMTkxLCA1MSwgMjYsIDI0OSwgMTg4LCAyMjYsIDQxLCAyMzAsIDE5MSwgMTAzLCA3MSwgMTcwLCAyMzksIDI1MiwgMzQsIDIzMCwgMTkxLCAyLCA3NSwgMTc0LCA5OCwgMjQxLCAyNywgMjMwLCAxOTEsIDE5MSwgNzIsIDEwNCwgMjAzLCAxODUsIDIwLCAyMzAsIDE5MSwgMjE2LCA0NiwgMTA5LCA1NiwgNDQsIDEzLCAyMzAsIDE5MSwgNDIsIDMsIDcsIDE4MCwgMTE2LCA1LCAyMzAsIDE5MSwgMjI2LCAxNzMsIDI0MywgMTExLCAxNTEsIDI1MywgMjI5LCAxOTEsIDIzNSwgNTgsIDg0LCA4MywgMTQ2LCAyNDUsIDIyOSwgMTkxLCAxMSwgMjEyLCA5OCwgMjQwLCA0OCwgMjM3LCAyMjksIDE5MSwgMTIzLCA3OSwgMjI5LCAxODAsIDE2NywgMjI4LCAyMjksIDE5MSwgNTgsIDE3MywgMjE5LCAxNjAsIDI0NiwgMjE5LCAyMjksIDE5MSwgMjksIDUsIDEzNiwgMTMwLCAyNSwgMjExLCAyMjksIDE5MSwgMTM2LCA0NSwgNjEsIDE1NCwgMjM0LCAyMDEsIDIyOSwgMTkxLCAyNTUsIDkxLCAyMDEsIDE0MiwgMTQxLCAxOTIsIDIyOSwgMTkxLCAxNzUsIDEyMCwgMjM0LCAxNDUsIDYsIDE4MywgMjI5LCAxOTEsIDEwNywgMTU1LCAyMjYsIDExMywgODEsIDE3MywgMjI5LCAxOTEsIDExLCA5NSwgOTUsIDIzNSwgODIsIDE2MywgMjI5LCAxOTEsIDkyLCA4OCwgNTUsIDIyMiwgMjksIDE1MywgMjI5LCAxOTEsIDI1MywgNTEsIDEzMSwgMjQ4LCAxOTIsIDE0MiwgMjI5LCAxOTEsIDEwMSwgNTcsIDksIDE2NSwgNDcsIDEzMiwgMjI5LCAxOTEsIDM1LCAxNjQsIDExMCwgMTAzLCA5NSwgMTIxLCAyMjksIDE5MSwgMTAwLCA5MiwgMTEzLCAxMTMsIDg0LCAxMTAsIDIyOSwgMTkxLCAyMjIsIDIsIDksIDEzOCwgMzEsIDk5LCAyMjksIDE5MSwgMjQyLCAyMzQsIDI4LCAzLCAxNzgsIDg3LCAyMjksIDE5MSwgMTM4LCAzMiwgMjA2LCAxOTUsIDksIDc2LCAyMjksIDE5MSwgMjEwLCAxMzksIDIxOCwgMjUzLCA0MiwgNjQsIDIyOSwgMTkxLCAxNSwgOSwgMjIzLCAyNTEsIDI3LCA1MiwgMjI5LCAxOTEsIDIzMSwgMTk5LCA5NSwgOTAsIDIxMiwgMzksIDIyOSwgMTkxLCA2NSwgMjEyLCAxMjUsIDAsIDgyLCAyNywgMjI5LCAxOTEsIDE0NSwgMjQyLCAxNDcsIDEwNiwgMTU5LCAxNCwgMjI5LCAxOTEsIDE0NSwgNzAsIDUsIDc4LCAxODIsIDEsIDIyOSwgMTkxLCAyNTQsIDI0MywgNTIsIDk2LCAxNDQsIDI0NCwgMjI4LCAxOTEsIDI3LCAyMTUsIDE5MSwgMjM1LCA1MSwgMjMxLCAyMjgsIDE5MSwgMTE0LCAxNjgsIDIyMywgMTMzLCAxNzMsIDIxNywgMjI4LCAxOTEsIDUzLCAyMTEsIDE4OSwgNzgsIDIzNCwgMjAzLCAyMjgsIDE5MSwgNTUsIDExMSwgMTU2LCAyMCwgMjMwLCAxODksIDIyOCwgMTkxLCAyMywgNDEsIDE0OCwgMTMzLCAxNzUsIDE3NSwgMjI4LCAxOTEsIDQ5LCAyMDksIDMyLCA1LCA3OSwgMTYxLCAyMjgsIDE5MSwgMjI4LCAxODYsIDQxLCAyMjksIDE4MSwgMTQ2LCAyMjgsIDE5MSwgMTQ3LCA1NywgMTUwLCAxMTksIDIxMywgMTMxLCAyMjgsIDE5MSwgMzEsIDIxNCwgMjcsIDE4MSwgMTk0LCAxMTYsIDIyOCwgMTkxLCAyMjksIDk2LCA1NCwgMSwgMTM0LCAxMDEsIDIyOCwgMTkxLCAxNjAsIDI1MywgNzIsIDE3LCAyNSwgODYsIDIyOCwgMTkxLCAyMjgsIDEwNiwgMTAwLCA4NywgOTAsIDcwLCAyMjgsIDE5MSwgNTEsIDIyMiwgODYsIDEyMiwgMTA5LCA1NCwgMjI4LCAxOTEsIDE4OCwgNjMsIDIyMiwgMTcxLCA4NiwgMzgsIDIyOCwgMTkxLCAxMDMsIDE1NSwgMjcsIDIxMSwgMTksIDIyLCAyMjgsIDE5MSwgODcsIDIzNSwgMTk2LCAyMjksIDEyMCwgNSwgMjI4LCAxOTEsIDEyOCwgNDEsIDMsIDcsIDE4MCwgMjQ0LCAyMjcsIDE5MSwgMjA0LCA5NywgMjQ3LCAyOSwgMTk1LCAyMjcsIDIyNywgMTkxLCA1OCwgMTQ4LCAxNjEsIDQyLCAxNjYsIDIxMCwgMjI3LCAxOTEsIDQsIDE3NSwgMTUwLCA1OSwgNTEsIDE5MywgMjI3LCAxOTEsIDI0MCwgMTk1LCA2NSwgNjYsIDE0OCwgMTc1LCAyMjcsIDE5MSwgMjU0LCAyMTAsIDE2MiwgNjIsIDIwMSwgMTU3LCAyMjcsIDE5MSwgMjUsIDIzMiwgMjE4LCAyMywgMjA4LCAxMzksIDIyNywgMTkxLCAwLCAxNzAsIDE4NCwgMTEzLCAxMzksIDEyMSwgMjI3LCAxOTEsIDE5OCwgMTM3LCAxNzUsIDExOCwgMjAsIDEwMywgMjI3LCAxOTEsIDE3NCwgOTksIDkyLCAxMTMsIDExMywgODQsIDIyNywgMTkxLCAxMzksIDc5LCAxLCA0OCwgMTU4LCA2NSwgMjI3LCAxOTEsIDEyMiwgMTk2LCAyMzIsIDE4NSwgMTMzLCA0NiwgMjI3LCAxOTEsIDI2LCAxMTEsIDQzLCAxODksIDU0LCAyNywgMjI3LCAxOTEsIDI0MiwgNywgMywgMjA3LCAxODksIDcsIDIyNywgMTkxLCAxNDYsIDIwMiwgMjAsIDExNSwgMTYsIDI0NCwgMjI2LCAxOTEsIDE1OSwgMjMwLCAyMjgsIDY5LCAzOCwgMjI0LCAyMjYsIDE5MSwgNzAsIDY4LCA0OSwgMTIxLCAzLCAyMDQsIDIyNiwgMTkxLCAxNSwgMTU2LCA1MSwgMTYyLCAxODAsIDE4MywgMjI2LCAxOTEsIDEzNywgNDEsIDE0NSwgNjgsIDQ3LCAxNjMsIDIyNiwgMTkxLCAxNTYsIDI0OCwgMTA2LCA3MSwgMTEzLCAxNDIsIDIyNiwgMTkxLCAxMjAsIDI0MSwgMTI2LCAyMjAsIDEyNiwgMTIxLCAyMjYsIDE5MSwgNzIsIDI1MiwgMTM4LCA1MywgOTIsIDEwMCwgMjI2LCAxOTEsIDIwMSwgNjAsIDI0MiwgNywgMywgNzksIDIyNiwgMTkxLCAyMjgsIDE5MCwgMjEzLCA1OCwgMTEzLCA1NywgMjI2LCAxOTEsIDMzLCA1OSwgMTExLCA5OSwgMTc5LCAzNSwgMjI2LCAxOTEsIDE1LCAyMzcsIDk5LCA1LCAxOTEsIDEzLCAyMjYsIDE5MSwgMTUyLCAyMjQsIDIxMiwgNywgMTQ2LCAyNDcsIDIyNSwgMTkxLCAyMzEsIDI1MywgMTI3LCAxNTYsIDQ4LCAyMjUsIDIyNSwgMTkxLCAxMzUsIDI1MywgMTU4LCA4OCwgMTY3LCAyMDIsIDIyNSwgMTkxLCAxNjksIDc0LCA5MSwgOTIsIDIyNywgMTc5LCAyMjUsIDE5MSwgNzksIDIyOSwgMTgwLCAxNjcsIDIyOCwgMTU2LCAyMjUsIDE5MSwgMjM0LCAxNDUsIDYsIDE4MywgMTgxLCAxMzMsIDIyNSwgMTkxLCAyMTMsIDMyLCAyMDQsIDIzNywgOTQsIDExMCwgMjI1LCAxOTEsIDE1OSwgMjA1LCAxNzAsIDIwNywgMjEzLCA4NiwgMjI1LCAxOTEsIDEyMSwgMywgMjA0LCAxMjQsIDcsIDYzLCAyMjUsIDE5MSwgMTQxLCAzOSwgMTMwLCA1NiwgMTUsIDM5LCAyMjUsIDE5MSwgMjE4LCA1NywgMjA1LCAyLCAyMzcsIDE0LCAyMjUsIDE5MSwgNzQsIDcwLCAyMDYsIDE5NCwgMTU4LCAyNDYsIDIyNCwgMTkxLCAxNTcsIDI0MywgODMsIDI4LCA3LCAyMjIsIDIyNCwgMTkxLCA0MiwgMTQzLCAxMTAsIDEzMiwgNjksIDE5NywgMjI0LCAxOTEsIDYsIDEzLCAyNTMsIDE5LCA5MiwgMTcyLCAyMjQsIDE5MSwgNTEsIDEwOSwgMjU1LCAyMDIsIDc0LCAxNDcsIDIyNCwgMTkxLCAyMiwgMTM0LCAyMDAsIDIzMywgMjM1LCAxMjEsIDIyNCwgMTkxLCA3MywgMTI5LCA1LCA0OCwgMTAxLCA5NiwgMjI0LCAxOTEsIDIyNywgODIsIDE0OSwgMTgyLCAxODQsIDcwLCAyMjQsIDE5MSwgMTgyLCAxOCwgMTg2LCA3NSwgMjI2LCA0NCwgMjI0LCAxOTEsIDEzMiwgMTAzLCA2NiwgMTQ3LCAxOTYsIDE4LCAyMjQsIDE5MSwgMjEsIDg1LCAxOTEsIDIxMCwgMjQ5LCAyNDAsIDIyMywgMTkxLCAyNDAsIDEzNSwgMTU5LCAyNTUsIDMwLCAxODgsIDIyMywgMTkxLCA2MiwgMTUxLCAxNjksIDczLCAyNDAsIDEzNCwgMjIzLCAxOTEsIDU1LCAxMTMsIDExNCwgMTkxLCA2NywgODEsIDIyMywgMTkxLCA3MSwgODcsIDIzMywgMjM4LCA1OCwgMjcsIDIyMywgMTkxLCAyNDcsIDEsIDcyLCAxMDksIDIyNiwgMjI4LCAyMjIsIDE5MSwgNzEsIDExMywgMTQyLCA1OCwgNTgsIDE3NCwgMjIyLCAxOTEsIDIwNCwgOTksIDIwNSwgMjAwLCAzMiwgMTE5LCAyMjIsIDE5MSwgMTIsIDE0NiwgNjIsIDE3MywgMTYyLCA2MywgMjIyLCAxOTEsIDcxLCA4NSwgMTksIDY4LCAyMjEsIDcsIDIyMiwgMTkxLCAyMDAsIDEyLCA4NCwgMTk4LCAxOTEsIDIwNywgMjIxLCAxOTEsIDQsIDAsIDE5OSwgMTU4LCA2MSwgMTUxLCAyMjEsIDE5MSwgNDMsIDIzLCA0MiwgMjU1LCA5MCwgOTQsIDIyMSwgMTkxLCAzMSwgMjE5LCA1MCwgMjI0LCA0NCwgMzcsIDIyMSwgMTkxLCA0MiwgMTcxLCAyMzMsIDEyMiwgMTYyLCAyMzUsIDIyMCwgMTkxLCA3NywgMTM1LCA3OCwgMjA3LCAxODcsIDE3NywgMjIwLCAxOTEsIDE1LCA0MCwgMTU1LCAxMTQsIDEzMywgMTE5LCAyMjAsIDE5MSwgMjMzLCAyMTIsIDE0OSwgMjA3LCAyNDIsIDYwLCAyMjAsIDE5MSwgOCwgMTE4LCAyNTIsIDIzLCA4LCAyLCAyMjAsIDE5MSwgMTUzLCAyNDMsIDE0MCwgMTI1LCAyMDEsIDE5OCwgMjE5LCAxOTEsIDI0NywgMjksIDE5NSwgOTksIDYzLCAxMzksIDIxOSwgMTkxLCAxMDksIDg0LCAxNjcsIDMsIDg5LCA3OSwgMjE5LCAxOTEsIDQwLCAxMjcsIDI0NywgMTQyLCAyNiwgMTksIDIxOSwgMTkxLCA4NSwgMTM0LCAxMTMsIDU1LCAxMzYsIDIxNCwgMjE4LCAxOTEsIDE3MCwgMTAsIDEzLCAxOTYsIDE3OCwgMTUzLCAyMTgsIDE5MSwgNjksIDEzMSwgMjAsIDYwLCAxMzMsIDkyLCAyMTgsIDE5MSwgMjAxLCAzMSwgMTIsIDYwLCAyNDcsIDMwLCAyMTgsIDE5MSwgMjYsIDEwNSwgMTY5LCAxODgsIDI5LCAyMjUsIDIxNywgMTkxLCAxOTQsIDIzLCAzOCwgODMsIDUsIDE2MywgMjE3LCAxOTEsIDksIDEzOSwgMTM4LCA1NiwgMTU3LCAxMDAsIDIxNywgMTkxLCAxMiwgNTgsIDMzLCAxMTYsIDIwOCwgMzcsIDIxNywgMTkxLCAyMjEsIDE0OSwgOTMsIDQ4LCAxODQsIDIzMCwgMjE2LCAxOTEsIDQ5LCA2MywgNTUsIDUyLCAxMDEsIDE2NywgMjE2LCAxOTEsIDE3NCwgMTAxLCA1MCwgMjgsIDIwNywgMTAzLCAyMTYsIDE5MSwgOTQsIDE1LCAzOCwgMTk3LCAxOTksIDM5LCAyMTYsIDE5MSwgMTAwLCAzMCwgMjQ5LCAxMzEsIDEyOSwgMjMxLCAyMTUsIDE5MSwgMjM4LCAxMjIsIDEwNSwgMTM4LCAwLCAxNjcsIDIxNSwgMTkxLCAyMDUsIDYwLCAxODUsIDE2NiwgNjQsIDEwMiwgMjE1LCAxOTEsIDE0LCAxMDYsIDE5MSwgMTgxLCAxOSwgMzcsIDIxNSwgMTkxLCAxNjQsIDI1MiwgMTY0LCAyMTgsIDE2NywgMjI3LCAyMTQsIDE5MSwgMTkwLCAyMjAsIDM5LCA3MSwgMSwgMTYyLCAyMTQsIDE5MSwgOTEsIDEwLCA3MiwgMjUxLCAzMSwgOTYsIDIxNCwgMTkxLCAxODAsIDExNSwgMTU0LCA1LCAyMTgsIDI5LCAyMTQsIDE5MSwgOTksIDY2LCAyMDQsIDM3LCA4NSwgMjE5LCAyMTMsIDE5MSwgMTUwLCA5NCwgMTU1LCAxNDEsIDE0OSwgMTUyLCAyMTMsIDE5MSwgNzUsIDIwMCwgNywgNjEsIDE1NSwgODUsIDIxMywgMTkxLCAxMTUsIDE0LCAxNTgsIDksIDc3LCAxOCwgMjEzLCAxOTEsIDE5NiwgMjA5LCA4NSwgMTg2LCAxODcsIDIwNiwgMjEyLCAxOTEsIDE1MSwgMjI2LCAxNzAsIDE3OCwgMjM5LCAxMzgsIDIxMiwgMTkxLCAyOCwgNDEsIDkxLCAzNiwgMjM3LCA3MCwgMjEyLCAxOTEsIDEwOSwgMjgsIDE3NywgMjIsIDE1OSwgMiwgMjEyLCAxOTEsIDE4NiwgMTY0LCAxMDYsIDE4NywgOSwgMTkwLCAyMTEsIDE5MSwgMjI4LCA3NCwgNjEsIDExLCA2NiwgMTIxLCAyMTEsIDE5MSwgMTAxLCA4NiwgMjM5LCAxMTIsIDU5LCA1MiwgMjExLCAxOTEsIDEwNCwgMTc1LCA2MiwgMzAsIDI1MCwgMjM4LCAyMTAsIDE5MSwgMTQ4LCAxMzMsIDE3NSwgMTc1LCAxMTcsIDE2OSwgMjEwLCAxOTEsIDExMywgMTQ1LCAxMjMsIDE4NiwgMTg2LCA5OSwgMjEwLCAxOTEsIDIwOSwgMjM0LCAyMjgsIDEyLCAxOTcsIDI5LCAyMTAsIDE5MSwgMTgwLCAxNDUsIDIzNSwgMTY2LCAxNDgsIDIxNSwgMjA5LCAxOTEsIDExNywgODYsIDExLCAyMzYsIDQ5LCAxNDUsIDIwOSwgMTkxLCAxNDEsIDEyOCwgMTAsIDcxLCAxNDQsIDc0LCAyMDksIDE5MSwgODQsIDIyNCwgMTAwLCAyNywgMTg0LCAzLCAyMDksIDE5MSwgMjA1LCAxMTcsIDI2LCAxMDUsIDE2OSwgMTg4LCAyMDgsIDE5MSwgMTI3LCAyNDksIDEwMCwgMTk3LCAxMTIsIDExNywgMjA4LCAxOTEsIDEzNCwgMjI2LCAxNDIsIDU1LCAyNDksIDQ1LCAyMDgsIDE5MSwgMTI2LCAyLCA0MCwgNzAsIDE1MCwgMjA0LCAyMDcsIDE5MSwgNiwgNzYsIDIyNCwgMjE0LCAyMjEsIDYwLCAyMDcsIDE5MSwgMCwgMTE0LCAxOTQsIDEzMiwgMjA5LCAxNzIsIDIwNiwgMTkxLCA5MiwgMywgOTEsIDM3LCA4OCwgMjgsIDIwNiwgMTkxLCAxOTAsIDQ3LCA0NiwgODUsIDEwNSwgMTM5LCAyMDUsIDE5MSwgMjM4LCA4LCAxNjcsIDUsIDQ3LCAyNTAsIDIwNCwgMTkxLCAxNDQsIDE5MCwgNzMsIDIxMSwgMTYwLCAxMDQsIDIwNCwgMTkxLCA3MywgMTI4LCAxNTQsIDkwLCAxODIsIDIxNCwgMjAzLCAxOTEsIDEwMCwgMTczLCAxNjEsIDIxMiwgOTQsIDY4LCAyMDMsIDE5MSwgMjQyLCAxODIsIDIxMCwgMTA3LCAxNzksIDE3NywgMjAyLCAxOTEsIDE2NywgNjEsIDM3LCAyMzEsIDE5NiwgMzAsIDIwMiwgMTkxLCA0MiwgMTEzLCAyOSwgMjI3LCAxMzgsIDEzOSwgMjAxLCAxOTEsIDE3OSwgNjMsIDgwLCAxMTAsIDIxOSwgMjQ3LCAyMDAsIDE5MSwgMTAxLCAxMzksIDE2NCwgMjIxLCAyMzIsIDk5LCAyMDAsIDE5MSwgNjMsIDg0LCAyNiwgNDksIDE3OSwgMjA3LCAxOTksIDE5MSwgNjUsIDE1NCwgMTc3LCAxMDQsIDU4LCA1OSwgMTk5LCAxOTEsIDAsIDI4LCAxMjMsIDI0NiwgOTIsIDE2NiwgMTk4LCAxOTEsIDE0MCwgNzQsIDIzNCwgNCwgNTIsIDE3LCAxOTgsIDE5MSwgMjQ2LCAxNTAsIDExNCwgMTkwLCAyMTYsIDEyMywgMTk3LCAxOTEsIDIyOCwgNDgsIDE1MiwgMTkxLCA2NiwgMjMwLCAxOTYsIDE5MSwgMTQyLCA2LCAyNDAsIDIyLCA3MiwgODAsIDE5NiwgMTkxLCAyMiwgMjUwLCA5NiwgMjUsIDI3LCAxODYsIDE5NSwgMTkxLCAzMywgNTksIDExMSwgOTksIDE3OSwgMzUsIDE5NSwgMTkxLCAxNzYsIDIwMSwgMjYsIDI0NSwgMTYsIDE0MSwgMTk0LCAxOTEsIDEwMywgMjEzLCAyMzEsIDEwNiwgNDMsIDI0NiwgMTkzLCAxOTEsIDcwLCA5NCwgMjE0LCAxOTYsIDIsIDk1LCAxOTMsIDE5MSwgOTQsIDIxMywgODksIDQ1LCAxNzYsIDE5OSwgMTkyLCAxOTEsIDg1LCAxMDYsIDI0NiwgNjQsIDQzLCA0OCwgMTkyLCAxOTEsIDE1OCwgMTUzLCA5NiwgNTYsIDIxNSwgNDgsIDE5MSwgMTkxLCAxNTIsIDI0OSwgMTQsIDEyNiwgMjI2LCAwLCAxOTAsIDE5MSwgMTg3LCAyMTQsIDIyMiwgMTY3LCAxNzAsIDIwOCwgMTg4LCAxOTEsIDIyOCwgNzgsIDIzMywgOTYsIDI1MywgMTU5LCAxODcsIDE5MSwgNTMsIDY4LCAyMSwgMjU0LCAxMiwgMTExLCAxODYsIDE5MSwgMTUxLCA3NSwgMjQ0LCA2NywgMTgyLCA2MSwgMTg1LCAxOTEsIDE5OCwgMjU1LCAxMjAsIDEwLCAyMCwgMTIsIDE4NCwgMTkxLCAxOTUsIDk2LCAxNjMsIDgxLCAzOCwgMjE4LCAxODIsIDE5MSwgMjI1LCA2OCwgMjQ0LCAxMDcsIDIzNSwgMTY3LCAxODEsIDE5MSwgMTI3LCAyNDksIDEwMCwgMTk3LCAxMTIsIDExNywgMTgwLCAxOTEsIDY2LCAxNzQsIDEyMSwgMjUwLCAxNzMsIDY2LCAxNzksIDE5MSwgMTMzLCA1MSwgMTc0LCAxMTAsIDE3MSwgMTUsIDE3OCwgMTkxLCA3NSwgNiwgMTI4LCA0MiwgMTEwLCAyMjAsIDE3NiwgMTkxLCAxNDgsIDE0MiwgMjA1LCAyMzMsIDEzLCA4MiwgMTc1LCAxOTEsIDIzMywgNCwgMjE3LCA4NywgMTk1LCAyMzQsIDE3MiwgMTkxLCA4MywgMTAsIDIxLCAxMTksIDIzLCAxMzEsIDE3MCwgMTkxLCAxMzUsIDYzLCAxMjEsIDE0LCAyNywgMjcsIDE2OCwgMTkxLCAyMjcsIDI0MSwgMjU0LCAxMzcsIDIxOSwgMTc4LCAxNjUsIDE5MSwgMTYsIDIwNiwgMTY3LCAxNDIsIDg1LCA3NCwgMTYzLCAxOTEsIDE3NSwgMTM0LCAxMjIsIDE3NiwgMTIzLCAyMjUsIDE2MCwgMTkxLCAxMDIsIDE3NCwgMTk0LCAyOCwgMjQzLCAyNDAsIDE1NiwgMTkxLCAxMzcsIDIxNiwgMTg3LCAxNTQsIDE1MSwgMzAsIDE1MiwgMTkxLCAyMTIsIDEyNywgMjE0LCAyNTIsIDI0OCwgNzUsIDE0NywgMTkxLCAxMTYsIDk2LCA1NywgNjYsIDYsIDI0MiwgMTQwLCAxOTEsIDIxLCAxMTAsIDE5MSwgMTU3LCAxOTIsIDc1LCAxMzEsIDE5MSwgOTgsIDE0NiwgMjksIDkzLCAxNTcsIDc0LCAxMTUsIDE5MSwgMjA5LCAxMzIsIDI0MiwgMTU4LCAxMTcsIDc2LCAxOTYsIDYyLCAxNzYsIDE4LCAyOCwgNDQsIDIxNCwgNzksIDExNSwgNjMsIDYwLCAxNzQsIDYyLCA1LCA5MywgNzgsIDEzMSwgNjMsIDEzMSwgNDcsIDI0MSwgMjM2LCAxNTEsIDI0NCwgMTQwLCA2MywgOTEsIDEwMywgNTAsIDIxMCwgNjUsIDc3LCAxNDcsIDYzLCA5NywgMjUsIDI3LCAxODYsIDIxNywgMzEsIDE1MiwgNjMsIDc2LCAyMjcsIDIzLCA5NCwgNzMsIDI0MiwgMTU2LCA2MywgMzQsIDMzLCAzNywgMjA5LCAzOCwgMjI2LCAxNjAsIDYzLCAxMjQsIDExMCwgODcsIDE1OCwgMjQ2LCA3NCwgMTYzLCA2MywgMTY3LCAyMjksIDE3MiwgMjQ0LCAxMjcsIDE3OSwgMTY1LCA2MywgMTYyLCAxMzQsIDM3LCAyMTIsIDE5NCwgMjcsIDE2OCwgNjMsIDIzLCAyNTQsIDE5NCwgMjI1LCAxODcsIDEzMSwgMTcwLCA2MywgNSwgNzYsIDEzMywgMjksIDEwNywgMjM1LCAxNzIsIDYzLCAwLCA0NywgMTI1LCAyNDksIDE3NCwgODIsIDE3NSwgNjMsIDEyOSwgMjE0LCA4NywgMTc4LCAxOTAsIDIyMCwgMTc2LCA2MywgMTgsIDg3LCAxMzIsIDgxLCAyNTUsIDE1LCAxNzgsIDYzLCAyMDcsIDIwOSwgNzksIDIyMSwgMSwgNjcsIDE3OSwgNjMsIDE4MSwgMjAxLCA2MCwgNzcsIDE5MywgMTE3LCAxODAsIDYzLCAxMDcsIDIzNSwgNzYsIDcwLCA1OCwgMTY4LCAxODEsIDYzLCA4MCwgMTMyLCAxMjEsIDUyLCAxMjIsIDIxOCwgMTgyLCA2MywgODQsIDM1LCA3OSwgMjM3LCAxMDMsIDEyLCAxODQsIDYzLCAxMjEsIDY5LCA3NSwgMTIxLCA4LCA2MiwgMTg1LCA2MywgMTk1LCAxMDMsIDIzNSwgMjI0LCA5NiwgMTExLCAxODYsIDYzLCAxMTMsIDExNCwgMTkxLCA2NywgODEsIDE2MCwgMTg3LCA2MywgMTQ2LCA4OSwgMTg5LCAxOTUsIDIzNywgMjA4LCAxODgsIDYzLCAzOCwgMjksIDIyOSwgOTYsIDU0LCAxLCAxOTAsIDYzLCA0MywgMTg5LCA1NCwgMjcsIDQzLCA0OSwgMTkxLCA2MywgMjgsIDEyNCwgOTcsIDUwLCA4NSwgNDgsIDE5MiwgNjMsIDM3LCAyMzEsIDE5NiwgMzAsIDIxOCwgMTk5LCAxOTIsIDYzLCAxMywgMTEyLCA2NSwgMTgyLCA0NCwgOTUsIDE5MywgNjMsIDQ2LCAyMzEsIDgyLCA5MiwgODUsIDI0NiwgMTkzLCA2MywgMTE5LCAyMTksIDEzMywgMjMwLCA1OCwgMTQxLCAxOTQsIDYzLCAxNDEsIDEyNCwgOTQsIDI0MSwgMjEyLCAzNSwgMTk1LCA2MywgMjIxLCAxMSwgMjA0LCAxMCwgNjksIDE4NiwgMTk1LCA2MywgODUsIDI0LCA5MSwgOCwgMTE0LCA4MCwgMTk2LCA2MywgODAsIDExNCwgMTM1LCA3NywgMTAwLCAyMzAsIDE5NiwgNjMsIDE4OSwgMTY4LCAyMjEsIDE3NSwgMiwgMTI0LCAxOTcsIDYzLCA4MywgOTIsIDg1LCAyNDYsIDkzLCAxNywgMTk4LCA2MywgMTA4LCA5MywgMTA2LCAxMzIsIDEyNiwgMTY2LCAxOTgsIDYzLCA4LCAxNzIsIDI4LCA5MCwgMTAwLCA1OSwgMTk5LCA2MywgMTcxLCAxNDksIDksIDE5MSwgMjEyLCAyMDcsIDE5OSwgNjMsIDIwOSwgMjA0LCAxNDcsIDEwNywgMTAsIDEwMCwgMjAwLCA2MywgMTIyLCA4MSwgMTg3LCA5NSwgNSwgMjQ4LCAyMDAsIDYzLCAyNDEsIDEzMCwgMTM2LCAyMTIsIDE4MCwgMTM5LCAyMDEsIDYzLCAxOSwgMTI3LCAyMCwgMTE3LCAyMzAsIDMwLCAyMDIsIDYzLCA5MywgMjQ4LCAxOTMsIDI0OSwgMjEyLCAxNzcsIDIwMiwgNjMsIDIwOCwgMjM4LCAxNDQsIDk4LCAxMjgsIDY4LCAyMDMsIDYzLCAxNiwgMTQ2LCA1LCA3NiwgMjI0LCAyMTQsIDIwMywgNjMsIDI1MiwgMjU1LCA1NiwgOTcsIDE5NCwgMTA0LCAyMDQsIDYzLCA5MCwgNzQsIDE1MCwgMTQ3LCA4MCwgMjUwLCAyMDQsIDYzLCAxMzMsIDY1LCAxNTMsIDcwLCAxNDcsIDEzOSwgMjA1LCA2MywgMzUsIDIxLCAxOTgsIDIyLCAxMzAsIDI4LCAyMDYsIDYzLCAxMDgsIDE3OSwgMTc3LCAxOCwgMjQzLCAxNzIsIDIwNiwgNjMsIDExMywgMTQxLCAyMDcsIDEwMCwgMjU1LCA2MCwgMjA3LCA2MywgNjgsIDIwLCAxNDcsIDU1LCAxOTIsIDIwNCwgMjA3LCA2MywgMTA2LCAxMDcsIDY4LCA0OCwgMTQsIDQ2LCAyMDgsIDYzLCA5OCwgMTMwLCAyNiwgMTkwLCAxMzMsIDExNywgMjA4LCA2MywgMTc2LCAyNTQsIDIwNywgOTcsIDE5MCwgMTg4LCAyMDgsIDYzLCA1NiwgMTA1LCAyNiwgMjAsIDIwNSwgMywgMjA5LCA2MywgMTEyLCA5LCAxOTIsIDYzLCAxNjUsIDc0LCAyMDksIDYzLCA0MywgMjQ3LCAyLCAxNzksIDY2LCAxNDUsIDIwOSwgNjMsIDE1MSwgMjYsIDE2MSwgMTU5LCAxNjksIDIxNSwgMjA5LCA2MywgMTM1LCAxMzksIDIyMCwgMjExLCAyMTMsIDI5LCAyMTAsIDYzLCAzOSwgNTAsIDExNSwgMTI5LCAyMDMsIDk5LCAyMTAsIDYzLCA3NCwgMzgsIDE2NywgMTE4LCAxMzQsIDE2OSwgMjEwLCA2MywgMzAsIDgwLCA1NCwgMjI5LCAxMCwgMjM5LCAyMTAsIDYzLCA3MiwgMjIzLCAxNjQsIDEwNSwgODAsIDUyLCAyMTEsIDYzLCAxNTQsIDIzNSwgNTIsIDIxMCwgODIsIDEyMSwgMjExLCA2MywgMTExLCA2OSwgOTgsIDEzMCwgMjYsIDE5MCwgMjExLCA2MywgMzUsIDE4OSwgMTY4LCAyMjEsIDE3NSwgMiwgMjEyLCA2MywgMjA5LCAyMDEsIDgyLCAyMzUsIDI1MywgNzAsIDIxMiwgNjMsIDc3LCAxMzEsIDE2MiwgMTIxLCAwLCAxMzksIDIxMiwgNjMsIDEyMiwgMTE0LCA3NywgMTI5LCAyMDQsIDIwNiwgMjEyLCA2MywgNDEsIDE3NSwgMTQ5LCAyMDgsIDkzLCAxOCwgMjEzLCA2MywgMSwgMTA1LCAyNTUsIDMsIDE3MiwgODUsIDIxMywgNjMsIDc2LCAyNTUsIDE0NiwgODQsIDE2NiwgMTUyLCAyMTMsIDYzLCAyNSwgMjI3LCAxOTUsIDIzNiwgMTAxLCAyMTksIDIxMywgNjMsIDEwNiwgMjAsIDE0NiwgMjA0LCAyMzQsIDI5LCAyMTQsIDYzLCAyMjcsIDE5NCwgMTI5LCAxNDQsIDQ0LCA5NiwgMjE0LCA2MywgMTE2LCAxMjUsIDMxLCAxNCwgMTgsIDE2MiwgMjE0LCA2MywgOTAsIDE1NywgMTU2LCAxNjEsIDE4NCwgMjI3LCAyMTQsIDYzLCAxOTYsIDEwLCAxODMsIDEyNCwgMzYsIDM3LCAyMTUsIDYzLCAxMzEsIDIyMSwgMTc2LCAxMDksIDgxLCAxMDIsIDIxNSwgNjMsIDE2NCwgMjcsIDk3LCA4MSwgMTcsIDE2NywgMjE1LCA2MywgMjYsIDE5MSwgMjQwLCA3NCwgMTQ2LCAyMzEsIDIxNSwgNjMsIDIwLCAxNzYsIDI5LCAxNDAsIDIxNiwgMzksIDIxNiwgNjMsIDEwMCwgNiwgNDIsIDIyNywgMjIzLCAxMDMsIDIxNiwgNjMsIDIzMSwgMjIzLCA0NiwgMjUxLCAxMTcsIDE2NywgMjE2LCA2MywgMTQ3LCA1NCwgODUsIDI0NywgMjAwLCAyMzAsIDIxNiwgNjMsIDE0OSwgMjQyLCA5MCwgOSwgMjIxLCAzNywgMjE3LCA2MywgMTkxLCA0MywgMTMwLCAyNTUsIDE3MywgMTAwLCAyMTcsIDYzLCAxMjAsIDE4NCwgMjksIDI2LCAyMiwgMTYzLCAyMTcsIDYzLCAyMDgsIDksIDE2MSwgMTMxLCA0NiwgMjI1LCAyMTcsIDYzLCA4MSwgMjE2LCA2OSwgMjA5LCAzLCAzMSwgMjE4LCA2MywgMjA1LCA1OSwgNzgsIDIwOSwgMTQ1LCA5MiwgMjE4LCA2MywgNTEsIDE5NSwgNzAsIDg5LCAxOTEsIDE1MywgMjE4LCA2MywgMjIyLCA2MiwgMTcxLCAyMDQsIDE0OCwgMjE0LCAyMTgsIDYzLCAxNzYsIDU1LCA0OSwgMzYsIDM5LCAxOSwgMjE5LCA2MywgMjQ2LCAxMiwgMjI1LCAxNTIsIDEwMSwgNzksIDIxOSwgNjMsIDEyOCwgMjE0LCAyNTIsIDI0OCwgNzUsIDEzOSwgMjE5LCA2MywgMzMsIDE3MiwgMTk4LCAxOCwgMjE0LCAxOTgsIDIxOSwgNjMsIDE0NCwgNDYsIDU0LCAxNzMsIDIwLCAyLCAyMjAsIDYzLCAxMTMsIDE0MSwgMjA3LCAxMDAsIDI1NSwgNjAsIDIyMCwgNjMsIDE1MiwgMjI0LCAyMTIsIDcsIDE0NiwgMTE5LCAyMjAsIDYzLCAyMTMsIDYzLCAxMzYsIDEwMCwgMjAwLCAxNzcsIDIyMCwgNjMsIDE3OCwgOTksIDM1LCAxNiwgMTc1LCAyMzUsIDIyMCwgNjMsIDE2NywgMTQ3LCAxMDgsIDExNywgNTcsIDM3LCAyMjEsIDYzLCAxNzksIDIwNywgOTksIDE0OCwgMTAzLCA5NCwgMjIxLCA2MywgMTQxLCAxODQsIDAsIDUyLCA3NCwgMTUxLCAyMjEsIDYzLCAzNSwgMjIxLCAyMDcsIDQxLCAyMDAsIDIwNywgMjIxLCA2MywgMTYyLCAzNywgMTQzLCAxNjcsIDIyOSwgNywgMjIyLCA2MywgMTQ4LCA3NCwgMTIwLCA2NiwgMTc1LCA2MywgMjIyLCA2MywgODQsIDI4LCA3LCA5NCwgNDUsIDExOSwgMjIyLCA2MywgMTYyLCA2NSwgMTAsIDE1OCwgNjYsIDE3NCwgMjIyLCA2MywgMTI4LCAxODYsIDEyOSwgMiwgMjM5LCAyMjgsIDIyMiwgNjMsIDE2MiwgMzksIDEwMSwgODIsIDY3LCAyNywgMjIzLCA2MywgMTkxLCA0MSwgMTcyLCA4NCwgODAsIDgxLCAyMjMsIDYzLCAxNTMsIDEwMywgMzcsIDE3MywgMjQ4LCAxMzQsIDIyMywgNjMsIDEyMSwgNjQsIDIxNywgMTQ4LCA0MywgMTg4LCAyMjMsIDYzLCAxNTcsIDEzLCAyNDksIDEwMywgNiwgMjQxLCAyMjMsIDYzLCAyMDAsIDY3LCAyMjMsIDIyMSwgMjAyLCAxOCwgMjI0LCA2MywgMjI3LCAyNTAsIDExOSwgMTI1LCAyMzAsIDQ0LCAyMjQsIDYzLCAxNiwgNTksIDgzLCAyMzIsIDE4OCwgNzAsIDIyNCwgNjMsIDExOSwgMTA1LCAxOTUsIDk3LCAxMDUsIDk2LCAyMjQsIDYzLCA2OCwgMTEwLCAxMzQsIDI3LCAyNDAsIDEyMSwgMjI0LCA2MywgOTcsIDg1LCAxODksIDI1MiwgNzgsIDE0NywgMjI0LCA2MywgNTIsIDI0NSwgMTg2LCA2OSwgOTYsIDE3MiwgMjI0LCA2MywgODcsIDExOSwgNDQsIDE4MiwgNzMsIDE5NywgMjI0LCA2MywgMjAzLCAyMTksIDE3LCA3OCwgMTEsIDIyMiwgMjI0LCA2MywgMTE5LCA0NiwgMTQwLCAyNDQsIDE2MiwgMjQ2LCAyMjQsIDYzLCA4LCAzNCwgMTM5LCA1MiwgMjQxLCAxNCwgMjI1LCA2MywgMTg3LCAxNSwgNjQsIDEwNiwgMTksIDM5LCAyMjUsIDYzLCAxNjcsIDIzNSwgMTM3LCAxNzQsIDExLCA2MywgMjI1LCA2MywgMTgxLCAxOTMsIDEzNywgMjMyLCAyMTUsIDg2LCAyMjUsIDYzLCAzLCA5LCAxMzgsIDMxLCA5OSwgMTEwLCAyMjUsIDYzLCAyNCwgMTIyLCAxOTYsIDIzMiwgMTg1LCAxMzMsIDIyNSwgNjMsIDEyNSwgMjA1LCAxMTQsIDIxNywgMjMyLCAxNTYsIDIyNSwgNjMsIDIxNSwgNTAsIDI1LCAxNDIsIDIzMSwgMTc5LCAyMjUsIDYzLCAxNTcsIDI0MSwgMTI1LCAxMTMsIDE2OSwgMjAyLCAyMjUsIDYzLCAyNTQsIDI0MSwgOTQsIDE4MSwgNTAsIDIyNSwgMjI1LCA2MywgMTc0LCAyMTIsIDE3OSwgMzIsIDE0OCwgMjQ3LCAyMjUsIDYzLCAzOCwgMjI1LCA2NiwgMzAsIDE5MywgMTMsIDIyNiwgNjMsIDU2LCA0NywgNzgsIDEyNCwgMTgxLCAzNSwgMjI2LCA2MywgMTcsIDE2NywgMTQ3LCAxMDgsIDExNywgNTcsIDIyNiwgNjMsIDIyNCwgNDgsIDIwOSwgMzIsIDUsIDc5LCAyMjYsIDYzLCAxMTcsIDIyOCwgNzIsIDEwMywgOTYsIDEwMCwgMjI2LCA2MywgMTQyLCAyMjksIDkzLCAyNDUsIDEyOCwgMTIxLCAyMjYsIDYzLCAxNzksIDIzNiwgNzMsIDk2LCAxMTUsIDE0MiwgMjI2LCA2MywgMTU5LCAyOSwgMTEyLCA5MywgNDksIDE2MywgMjI2LCA2MywgMzcsIDE0NCwgMTgsIDE4NywgMTgyLCAxODMsIDIyNiwgNjMsIDkyLCA1NiwgMTYsIDE0NiwgNSwgMjA0LCAyMjYsIDYzLCAxODIsIDIxOCwgMTk1LCA5NCwgNDAsIDIyNCwgMjI2LCA2MywgMTY5LCAxOTAsIDI0MywgMTM5LCAxOCwgMjQ0LCAyMjYsIDYzLCA5LCAyNTIsIDIyNSwgMjMxLCAxOTEsIDcsIDIyNywgNjMsIDQ4LCA5OSwgMTAsIDIxNCwgNTYsIDI3LCAyMjcsIDYzLCAxNDUsIDE4NCwgMTk5LCAyMTAsIDEzNSwgNDYsIDIyNywgNjMsIDEzOSwgNzksIDEsIDQ4LCAxNTgsIDY1LCAyMjcsIDYzLCAxOTcsIDg3LCA1OSwgMTM4LCAxMTUsIDg0LCAyMjcsIDYzLCAxOTgsIDEzNywgMTc1LCAxMTgsIDIwLCAxMDMsIDIyNywgNjMsIDIzLCAxNTgsIDE1MSwgMTM4LCAxNDEsIDEyMSwgMjI3LCA2MywgNDcsIDIyMCwgMTg1LCA0OCwgMjEwLCAxMzksIDIyNywgNjMsIDIxLCAxOTksIDEyOSwgODcsIDIwMywgMTU3LCAyMjcsIDYzLCAyNDAsIDE5NSwgNjUsIDY2LCAxNDgsIDE3NSwgMjI3LCA2MywgMjYsIDE2MywgMTE3LCA4NCwgNTMsIDE5MywgMjI3LCA2MywgNTgsIDE0OCwgMTYxLCA0MiwgMTY2LCAyMTAsIDIyNywgNjMsIDIwNCwgOTcsIDI0NywgMjksIDE5NSwgMjI3LCAyMjcsIDYzLCAxMjgsIDQxLCAzLCA3LCAxODAsIDI0NCwgMjI3LCA2MywgMTEwLCAyMjMsIDE2MywgMjU0LCAxMjIsIDUsIDIyOCwgNjMsIDEyNiwgMTQzLCAyNTAsIDIzNSwgMjEsIDIyLCAyMjgsIDYzLCAyMTEsIDUxLCAxODksIDE5NiwgODgsIDM4LCAyMjgsIDYzLCA3NCwgMjEwLCA1MywgMTQ3LCAxMTEsIDU0LCAyMjgsIDYzLCAyMjgsIDEwNiwgMTAwLCA4NywgOTAsIDcwLCAyMjgsIDYzLCAxNjAsIDI1MywgNzIsIDE3LCAyNSwgODYsIDIyOCwgNjMsIDIyOSwgOTYsIDU0LCAxLCAxMzQsIDEwMSwgMjI4LCA2MywgMzEsIDIxNCwgMjcsIDE4MSwgMTk0LCAxMTYsIDIyOCwgNjMsIDE0NywgNTcsIDE1MCwgMTE5LCAyMTMsIDEzMSwgMjI4LCA2MywgMjI4LCAxODYsIDQxLCAyMjksIDE4MSwgMTQ2LCAyMjgsIDYzLCA0OSwgMjA5LCAzMiwgNSwgNzksIDE2MSwgMjI4LCA2MywgMjMsIDQxLCAxNDgsIDEzMywgMTc1LCAxNzUsIDIyOCwgNjMsIDU1LCAxMTEsIDE1NiwgMjAsIDIzMCwgMTg5LCAyMjgsIDYzLCA1MywgMjExLCAxODksIDc4LCAyMzQsIDIwMywgMjI4LCA2MywgMTE0LCAxNjgsIDIyMywgMTMzLCAxNzMsIDIxNywgMjI4LCA2MywgMjcsIDIxNSwgMTkxLCAyMzUsIDUxLCAyMzEsIDIyOCwgNjMsIDI1NCwgMjQzLCA1MiwgOTYsIDE0NCwgMjQ0LCAyMjgsIDYzLCAxNDUsIDcwLCA1LCA3OCwgMTgyLCAxLCAyMjksIDYzLCAxNDUsIDI0MiwgMTQ3LCAxMDYsIDE1OSwgMTQsIDIyOSwgNjMsIDY1LCAyMTIsIDEyNSwgMCwgODIsIDI3LCAyMjksIDYzLCAyMzEsIDE5OSwgOTUsIDkwLCAyMTIsIDM5LCAyMjksIDYzLCAxNSwgOSwgMjIzLCAyNTEsIDI3LCA1MiwgMjI5LCA2MywgMjEwLCAxMzksIDIxOCwgMjUzLCA0MiwgNjQsIDIyOSwgNjMsIDEzOCwgMzIsIDIwNiwgMTk1LCA5LCA3NiwgMjI5LCA2MywgMjQyLCAyMzQsIDI4LCAzLCAxNzgsIDg3LCAyMjksIDYzLCAyMjIsIDIsIDksIDEzOCwgMzEsIDk5LCAyMjksIDYzLCAxMDAsIDkyLCAxMTMsIDExMywgODQsIDExMCwgMjI5LCA2MywgMzUsIDE2NCwgMTEwLCAxMDMsIDk1LCAxMjEsIDIyOSwgNjMsIDEwMSwgNTcsIDksIDE2NSwgNDcsIDEzMiwgMjI5LCA2MywgMjUzLCA1MSwgMTMxLCAyNDgsIDE5MiwgMTQyLCAyMjksIDYzLCA5MiwgODgsIDU1LCAyMjIsIDI5LCAxNTMsIDIyOSwgNjMsIDExLCA5NSwgOTUsIDIzNSwgODIsIDE2MywgMjI5LCA2MywgMTA3LCAxNTUsIDIyNiwgMTEzLCA4MSwgMTczLCAyMjksIDYzLCAxNzUsIDEyMCwgMjM0LCAxNDUsIDYsIDE4MywgMjI5LCA2MywgMjU1LCA5MSwgMjAxLCAxNDIsIDE0MSwgMTkyLCAyMjksIDYzLCAxMzYsIDQ1LCA2MSwgMTU0LCAyMzQsIDIwMSwgMjI5LCA2MywgMjksIDUsIDEzNiwgMTMwLCAyNSwgMjExLCAyMjksIDYzLCA1OCwgMTczLCAyMTksIDE2MCwgMjQ2LCAyMTksIDIyOSwgNjMsIDEyMywgNzksIDIyOSwgMTgwLCAxNjcsIDIyOCwgMjI5LCA2MywgMTEsIDIxMiwgOTgsIDI0MCwgNDgsIDIzNywgMjI5LCA2MywgMjM1LCA1OCwgODQsIDgzLCAxNDYsIDI0NSwgMjI5LCA2MywgMjI2LCAxNzMsIDI0MywgMTExLCAxNTEsIDI1MywgMjI5LCA2MywgNDIsIDMsIDcsIDE4MCwgMTE2LCA1LCAyMzAsIDYzLCAyMTYsIDQ2LCAxMDksIDU2LCA0NCwgMTMsIDIzMCwgNjMsIDE5MSwgNzIsIDEwNCwgMjAzLCAxODUsIDIwLCAyMzAsIDYzLCAyLCA3NSwgMTc0LCA5OCwgMjQxLCAyNywgMjMwLCA2MywgMTAzLCA3MSwgMTcwLCAyMzksIDI1MiwgMzQsIDIzMCwgNjMsIDUxLCAyNiwgMjQ5LCAxODgsIDIyNiwgNDEsIDIzMCwgNjMsIDU2LCAyMTksIDIyMCwgMTUyLCAxNTgsIDQ4LCAyMzAsIDYzLCAyMjEsIDk2LCAxNjgsIDE5NSwgMTAsIDU1LCAyMzAsIDYzLCAxNDEsIDIzNiwgNzQsIDIwMywgNzIsIDYxLCAyMzAsIDYzLCAxNjUsIDc4LCA2NCwgMTksIDk3LCA2NywgMjMwLCA2MywgMjAwLCAxODIsIDEyLCA1NiwgNzUsIDczLCAyMzAsIDYzLCAyMjksIDE3OSwgNjAsIDE1LCAyMzgsIDc4LCAyMzAsIDYzLCAyNDgsIDE5NCwgMTAwLCAxNzAsIDk2LCA4NCwgMjMwLCA2MywgMTE0LCAxNjgsIDIyMywgMTMzLCAxNzMsIDg5LCAyMzAsIDYzLCAyMDEsIDE3MSwgMTE1LCAxMiwgMjAwLCA5NCwgMjMwLCA2MywgMTQxLCA4LCAxOTgsIDE5MywgMTY1LCA5OSwgMjMwLCA2MywgNDgsIDEzMSwgNDksIDM0LCA4MSwgMTA0LCAyMzAsIDYzLCA1NywgMjEyLCAyMzksIDE5NCwgMjE0LCAxMDgsIDIzMCwgNjMsIDI0MywgOTAsIDksIDIyMSwgMzcsIDExMywgMjMwLCA2MywgNDgsIDQ3LCAxOTIsIDYyLCA1OCwgMTE3LCAyMzAsIDYzLCAxNjYsIDI0MSwgMTEsIDE3NSwgMzYsIDEyMSwgMjMwLCA2MywgODUsIDE2MiwgMjM2LCA0NSwgMjI5LCAxMjQsIDIzMCwgNjMsIDE1OSwgMTQ4LCA3MywgMTMsIDEwOSwgMTI4LCAyMzAsIDYzLCAxNTMsIDE4OCwgMSwgMTAyLCAxOTAsIDEzMSwgMjMwLCA2MywgMjQ5LCAxODYsIDEyLCAyNTUsIDIzMywgMTM0LCAyMzAsIDYzLCAxMDIsIDE5MSwgMjM4LCAxMTYsIDIzMSwgMTM3LCAyMzAsIDYzLCA4NiwgMTcsIDExMCwgNTAsIDE3MCwgMTQwLCAyMzAsIDYzLCAzNiwgMTI5LCA2LCAxNTUsIDU4LCAxNDMsIDIzMCwgNjMsIDE1NiwgMTYzLCAxNDIsIDE0MiwgMTcxLCAxNDUsIDIzMCwgNjMsIDEwLCAyMTYsIDE0LCA3MCwgMjM2LCAxNDcsIDIzMCwgNjMsIDIwNiwgMTEzLCAxMTAsIDE5LCAyMzgsIDE0OSwgMjMwLCA2MywgMTU3LCAxNywgMTY1LCAxODksIDE5MywgMTUxLCAyMzAsIDYzLCAyMywgMTAwLCAyMDMsIDI0MiwgMTE3LCAxNTMsIDIzMCwgNjMsIDIyNSwgMTUyLCAxMDEsIDc5LCAyLCAxNTUsIDIzMCwgNjMsIDE0MywgMTEwLCAxMzIsIDY5LCA2OSwgMTU2LCAyMzAsIDYzLCAxNjQsIDI2LCAyNDYsIDEyMywgOTgsIDE1NywgMjMwLCA2MywgNzcsIDEzMywgMTIwLCAzNiwgOTQsIDE1OCwgMjMwLCA2MywgMTM4LCAxNzQsIDExLCA2MywgNTYsIDE1OSwgMjMwLCA2MywgMTAzLCAxNTYsIDEzNCwgMTY4LCAxOTQsIDE1OSwgMjMwLCA2MywgMTkzLCA4NCwgNTEsIDEwNywgNDEsIDE2MCwgMjMwLCA2MywgMjIxLCAxNzksIDE3NCwgMjA5LCAxMTQsIDE2MCwgMjMwLCA2MywgMTY0LCAxOTcsIDI1LCAxOTUsIDE1NiwgMTYwLCAyMzAsIDYzLCAyMjEsIDE3OSwgMTc0LCAyMDksIDExNCwgMTYwLCAyMzAsIDYzLCAxOTMsIDg0LCA1MSwgMTA3LCA0MSwgMTYwLCAyMzAsIDYzLCAxMjYsIDE0NCwgMTAxLCAxOTMsIDE5NiwgMTU5LCAyMzAsIDYzLCAyMDYsIDEzOCwgMTY4LCAxMzcsIDYyLCAxNTksIDIzMCwgNjMsIDIxMywgNjEsIDE3OCwgMTg1LCAxMDYsIDE1OCwgMjMwLCA2MywgMTEzLCAxNzUsIDIwNCwgOTEsIDExNywgMTU3LCAyMzAsIDYzLCAyNTEsIDE3NSwgMTE1LCAyMTEsIDEwMiwgMTU2LCAyMzAsIDYzLCAyMzYsIDEzNCwgMTA5LCAxMzksIDUwLCAxNTUsIDIzMCwgNjMsIDIzOSwgMjMwLCAxNjksIDE0LCAxODUsIDE1MywgMjMwLCA2MywgMTU2LCAyNDksIDIxMywgMjgsIDMyLCAxNTIsIDIzMCwgNjMsIDExLCAxNzksIDIwOCwgMjA2LCAxMDUsIDE1MCwgMjMwLCA2MywgMjI1LCA2NiwgMzAsIDE5MywgMTQxLCAxNDgsIDIzMCwgNjMsIDM1LCA0NCwgNDIsIDIyNiwgMTE2LCAxNDYsIDIzMCwgNjMsIDIyNywgMjIzLCAxMDMsIDkyLCA1NiwgMTQ0LCAyMzAsIDYzLCAxNDYsIDM0LCA1MCwgMTcyLCAyMjYsIDE0MSwgMjMwLCA2MyBdLCAiaTgiLCBBTExPQ19OT05FLCBSdW50aW1lLkdMT0JBTF9CQVNFKTsKYWxsb2NhdGUoWyAxMjIsIDgzLCAxNDUsIDEwLCA5OSwgMTM5LCAyMzAsIDYzLCAxOSwgMTg2LCA3NSwgMjI2LCAxNzIsIDEzNiwgMjMwLCA2MywgNjQsIDIyMywgMjIsIDQ0LCAyMTMsIDEzMywgMjMwLCA2MywgOTIsIDE0NywgMTEwLCA3NSwgMjI4LCAxMzAsIDIzMCwgNjMsIDEzMSwgNzcsIDE1NywgNzEsIDE5NywgMTI3LCAyMzAsIDYzLCAxODMsIDEzLCAxNjMsIDMyLCAxMjAsIDEyNCwgMjMwLCA2MywgMTQ5LCAxMjgsIDE1MiwgMTMyLCAxMSwgMTIxLCAyMzAsIDYzLCA5OCwgMTMwLCAyNiwgMTkwLCAxMzMsIDExNywgMjMwLCA2MywgMTQsIDE2MiwgMTgxLCAxNjIsIDIwNSwgMTEzLCAyMzAsIDYzLCAyMjAsIDE4NywgNiwgMTI1LCAyMzMsIDEwOSwgMjMwLCA2MywgMTk5LCA3NiwgMTYyLCA5NCwgMjQwLCAxMDUsIDIzMCwgNjMsIDkyLCAxNDQsIDQ1LCAyMDMsIDIxNSwgMTAxLCAyMzAsIDYzLCAyMDgsIDI0MSwgMjA5LCAyMjYsIDE0MCwgOTcsIDIzMCwgNjMsIDE3MCwgNDEsIDIwMSwgNTgsIDI4LCA5MywgMjMwLCA2MywgMTYxLCAyMTYsIDEwLCAxNTQsIDE1MCwgODgsIDIzMCwgNjMsIDExMiwgMzQsIDI1MCwgMTgxLCAyNDUsIDgzLCAyMzAsIDYzLCAxOTUsIDE4NSwgMTM0LCAyNSwgMjYsIDc5LCAyMzAsIDYzLCAyMTUsIDI0NywgMjI1LCAzMiwgMzMsIDc0LCAyMzAsIDYzLCAzMSwgMTYxLCAxMDIsIDcyLCAyMSwgNjksIDIzMCwgNjMsIDg1LCAyMTcsIDExOSwgNjksIDI0MCwgNjMsIDIzMCwgNjMsIDI0OSwgMTA2LCA3MSwgMTEzLCAxNDIsIDU4LCAyMzAsIDYzLCAxMzksIDEzOSwgMTYzLCAxMTQsIDE5LCA1MywgMjMwLCA2MywgODAsIDIzLCA0MSwgMTQ4LCAxMzMsIDQ3LCAyMzAsIDYzLCA1MSwgMjYsIDI0OSwgMTg4LCAyMjYsIDQxLCAyMzAsIDYzLCA4NCwgMTQyLCAyMDEsIDIyNiwgMjU0LCAzNSwgMjMwLCA2MywgMTQ2LCAxMjEsIDIyOCwgMTUsIDYsIDMwLCAyMzAsIDYzLCAyNiwgMTk2LCA3LCAxMTgsIDI1MiwgMjMsIDIzMCwgNjMsIDIzNiwgMTA5LCA1MSwgMjEsIDIyNiwgMTcsIDIzMCwgNjMsIDIwNywgMTYwLCAxNjEsIDEyNywgMTMwLCAxMSwgMjMwLCA2MywgMTksIDM5LCAyNDcsIDU5LCAyMCwgNSwgMjMwLCA2MywgMTYyLCAxMiwgODUsIDQ5LCAxNDksIDI1NCwgMjI5LCA2MywgMTAwLCA5MywgMjIwLCA3MCwgMywgMjQ4LCAyMjksIDYzLCAxMjMsIDE5LCA2NywgMTE0LCA1MCwgMjQxLCAyMjksIDYzLCAyNDMsIDI4LCAxNDUsIDIzOSwgODIsIDIzNCwgMjI5LCA2MywgMjI3LCAxMDksIDE2NSwgMjE1LCAxMDIsIDIyNywgMjI5LCA2MywgMTk0LCA3NywgNzAsIDE0OSwgOTcsIDIyMCwgMjI5LCA2MywgMTA1LCA4NywgMzMsIDIyOSwgMzksIDIxMywgMjI5LCA2MywgODksIDE5MiwgNCwgMTEwLCAyMjEsIDIwNSwgMjI5LCA2MywgMjE2LCAxMDAsIDE0MSwgMTIyLCAxMzYsIDE5OCwgMjI5LCA2MywgNDcsIDE2NCwgMTk1LCA2NywgMjQsIDE5MSwgMjI5LCA2MywgMTQ2LCAyMzMsIDIwOCwgMjMzLCAxMjEsIDE4MywgMjI5LCA2MywgODYsIDEzMCwgMTk3LCAyMjUsIDIwNCwgMTc1LCAyMjksIDYzLCAxNjgsIDg2LCA5NSwgOTMsIDIxLCAxNjgsIDIyOSwgNjMsIDE2NSwgMjIxLCAyMzIsIDk5LCA2MiwgMTYwLCAyMjksIDYzLCA4LCA1OSwgMTk3LCAxNzAsIDY1LCAxNTIsIDIyOSwgNjMsIDIyNywgMjIzLCAxMDMsIDkyLCA1NiwgMTQ0LCAyMjksIDYzLCA3NywgMTkyLCAxNzUsIDE0NSwgMzYsIDEzNiwgMjI5LCA2MywgNzQsIDk1LCA4LCA1NywgMjM5LCAxMjcsIDIyOSwgNjMsIDIyMCwgMTg4LCAxMTMsIDgyLCAxNTIsIDExOSwgMjI5LCA2MywgMTgsIDc0LCA5NSwgOCwgNTcsIDExMSwgMjI5LCA2MywgMjM4LCA2LCAyMDksIDkwLCAyMDksIDEwMiwgMjI5LCA2MywgNDksIDE1NCwgMTQ5LCAyMzcsIDY3LCA5NCwgMjI5LCA2MywgNzUsIDIwMCwgNywgNjEsIDE1NSwgODUsIDIyOSwgNjMsIDM0LCAyNiwgMjIxLCA2NSwgMjM2LCA3NiwgMjI5LCA2MywgMTU3LCAxNTUsIDU0LCAyMjcsIDUyLCA2OCwgMjI5LCA2MywgMTA1LCAyNTUsIDMsIDE3MiwgODUsIDU5LCAyMjksIDYzLCA4MSwgMjE4LCAyNywgMTI0LCA5NywgNTAsIDIyOSwgNjMsIDEyLCAyMDUsIDExNywgMjYsIDEwNSwgNDEsIDIyOSwgNjMsIDEzMCwgMjI3LCA1MCwgMTEwLCAxMDYsIDMyLCAyMjksIDYzLCAyNywgMjQ0LCAxNjUsIDE4MywgNjMsIDIzLCAyMjksIDYzLCAyMSwgODgsIDAsIDgzLCA2LCAxNCwgMjI5LCA2MywgMjI1LCAyMTEsIDE1NiwgMTg4LCAyMDAsIDQsIDIyOSwgNjMsIDE1MCwgOTEsIDkwLCAxMywgMTM3LCAyNTEsIDIyOCwgNjMsIDY1LCAyNDUsIDE1LCAzNCwgMjUsIDI0MiwgMjI4LCA2MywgMTY3LCAxNzgsIDQwLCAyMzYsIDE2MiwgMjMyLCAyMjgsIDYzLCAyMjMsIDEzNSwgMTMxLCAxMzIsIDQwLCAyMjMsIDIyOCwgNjMsIDQ3LCA4MSwgMTg5LCA1MywgMTc2LCAyMTMsIDIyOCwgNjMsIDQ3LCA4MCwgODIsIDk2LCAxLCAyMDQsIDIyOCwgNjMsIDQ3LCA3OSwgMjMxLCAxMzgsIDgyLCAxOTQsIDIyOCwgNjMsIDQ3LCA3OCwgMTI0LCAxODEsIDE2MywgMTg0LCAyMjgsIDYzLCAyNSwgODksIDUwLCAxOTksIDI0MiwgMTc0LCAyMjgsIDYzLCAyMjQsIDEyOSwgMSwgMTMyLCAxNSwgMTY1LCAyMjgsIDYzLCAyMTMsIDE0NiwgMTQyLCAxMTQsIDQ4LCAxNTUsIDIyOCwgNjMsIDIwMiwgMTYzLCAyNywgOTcsIDgxLCAxNDUsIDIyOCwgNjMsIDE0NiwgMjA0LCAyMzQsIDI5LCAxMTAsIDEzNSwgMjI4LCA2MywgMTI0LCAyMzksIDExMSwgMjA4LCA5NCwgMTI1LCAyMjgsIDYzLCAxNzAsIDIzOCwgMTQ1LCAyMDUsIDg1LCAxMTUsIDIyOCwgNjMsIDIzOSwgMjI1LCAxNDYsIDIyNywgNzgsIDEwNSwgMjI4LCA2MywgMTk1LCAxNiwgNTcsIDEyNSwgNjEsIDk1LCAyMjgsIDYzLCA0MiwgMjU0LCAyMzksIDEzNiwgMTAsIDg1LCAyMjgsIDYzLCAyMTQsIDE5OSwgNjcsIDIyMywgMjIxLCA3NCwgMjI4LCA2MywgMTc1LCAxMjEsIDg1LCAxMDMsIDE4MSwgNjQsIDIyOCwgNjMsIDIzMywgMTI2LCA3OCwgNjUsIDEyNiwgNTQsIDIyOCwgNjMsIDI1MSwgMzAsIDI0NSwgMjE1LCA0MywgNDQsIDIyOCwgNjMsIDEwNSwgMTQzLCAyMywgMjEwLCAyMjUsIDMzLCAyMjgsIDYzLCAyNiwgMjIwLCAyMTQsIDIyLCAxNTgsIDIzLCAyMjgsIDYzLCAyMiwgMTM2LCAxNTgsIDE0OCwgNzMsIDEzLCAyMjgsIDYzLCAyMywgMTgzLCAyMDksIDAsIDIyMiwgMiwgMjI4LCA2MywgMTM5LCAxNzAsIDk1LCAyMzMsIDEyNCwgMjQ4LCAyMjcsIDYzLCA4OSwgMTEwLCAxMDUsIDUzLCAzNiwgMjM4LCAyMjcsIDYzLCA5MCwgMTU3LCAxNTYsIDE2MSwgMTg0LCAyMjcsIDIyNywgNjMsIDE2NiwgNDMsIDIxNiwgNzAsIDYwLCAyMTcsIDIyNywgNjMsIDk5LCAxMjYsIDExMCwgMTA0LCAyMDIsIDIwNiwgMjI3LCA2MywgMTY5LCAxMzcsIDYyLCAzMSwgMTAxLCAxOTYsIDIyNywgNjMsIDIyMSwgMzUsIDE1NSwgMTcxLCAyMzAsIDE4NSwgMjI3LCA2MywgMTgzLCAyMzcsIDEyMywgMjEyLCA5NSwgMTc1LCAyMjcsIDYzLCAzLCAxMjQsIDE4MywgMTIxLCAyMjcsIDE2NCwgMjI3LCA2MywgMjM3LCAxODIsIDExLCAyMDUsIDExNywgMTU0LCAyMjcsIDYzLCAxOTksIDEyOCwgMjM2LCAyNDUsIDIzOCwgMTQzLCAyMjcsIDYzLCA5MywgMTEwLCA0OCwgMjEyLCA5NywgMTMzLCAyMjcsIDYzLCAxNDYsIDgsIDE0MSwgOTYsIDIyNywgMTIyLCAyMjcsIDYzLCAxMDIsIDc5LCAyLCAxNTUsIDExNSwgMTEyLCAyMjcsIDYzLCAyNTEsIDYwLCA3MCwgMTIxLCAyMzAsIDEwMSwgMjI3LCA2MywgMTkwLCAxOCwgNzIsIDEzNywgOTMsIDkxLCAyMjcsIDYzLCAxMCwgMTYxLCAxMzEsIDQ2LCAyMjUsIDgwLCAyMjcsIDYzLCAxMSwgMjA4LCAxODIsIDE1NCwgMTE3LCA3MCwgMjI3LCA2MywgMjA2LCAxNjUsIDE4NCwgMTcwLCAyMzYsIDU5LCAyMjcsIDYzLCAyMTQsIDg3LCA4NywgNSwgMTA2LCA0OSwgMjI3LCA2MywgMTcwLCAxNTgsIDIwNCwgNjMsIDI1MCwgMzgsIDIyNywgNjMsIDYsIDE1OCwgMTIzLCAxNSwgMTUxLCAyOCwgMjI3LCA2MywgMTMsIDgwLCAyNiwgMTA2LCAyMCwgMTgsIDIyNywgNjMsIDIwMywgMTYyLCAxNzYsIDEzOSwgMTYyLCA3LCAyMjcsIDYzLCA2MiwgMTUwLCA2MiwgMTE2LCA2NSwgMjUzLCAyMjYsIDYzLCA1NywgNjYsIDYsIDI0MiwgMjM2LCAyNDIsIDIyNiwgNjMsIDEzLCAxMzcsIDEyMywgNDQsIDEyNSwgMjMyLCAyMjYsIDYzLCAxNzQsIDEwMCwgMTk5LCA3MCwgMzIsIDIyMiwgMjI2LCA2MywgMjcsIDIxMywgMjMzLCA2NCwgMjE0LCAyMTEsIDIyNiwgNjMsIDIwNSwgMzMsIDE2OSwgMTMzLCAxNDYsIDIwMSwgMjI2LCA2MywgMTU1LCAyMjksIDE3OCwgMjA5LCA1NywgMTkxLCAyMjYsIDYzLCA5OSwgMzgsIDgxLCA0NywgMjQ4LCAxODAsIDIyNiwgNjMsIDE1LCAyNDAsIDE2NCwgMTMzLCAyMDMsIDE3MCwgMjI2LCA2MywgMjA5LCAxNzMsIDIxNSwgMjQ0LCAxNjAsIDE2MCwgMjI2LCA2MywgMjIyLCAyMDIsIDE4LCAxNTcsIDEwMSwgMTUwLCAyMjYsIDYzLCAxOCwgNzcsIDE2MCwgMTM2LCA2OSwgMTQwLCAyMjYsIDYzLCA0MiwgODgsIDIyNywgMTA4LCA1OCwgMTMwLCAyMjYsIDYzLCA4OCwgODcsIDUsIDEwNiwgNDksIDEyMCwgMjI2LCA2MywgMjA4LCAxODEsIDQ3LCAxNjAsIDIzLCAxMTAsIDIyNiwgNjMsIDE1OCwgOTcsIDEwNiwgNzUsIDI5LCAxMDAsIDIyNiwgNjMsIDEyNCwgMTI2LCAyNCwgMzMsIDYwLCA5MCwgMjI2LCA2MywgNDUsIDE3OSwgOCwgMTk3LCA4NiwgODAsIDIyNiwgNjMsIDEzMSwgMjMsIDEyNSwgNSwgMTA1LCA3MCwgMjI2LCA2MywgMjMsIDIxMywgMzQsIDE2MiwgMTUyLCA2MCwgMjI2LCA2MywgMjM0LCAyMzUsIDI0OSwgMTU0LCAyMjksIDUwLCAyMjYsIDYzLCA5NywgNTAsIDg1LCA0OCwgNDIsIDQxLCAyMjYsIDYzLCAyMTcsIDEyMCwgMTc2LCAxOTcsIDExMCwgMzEsIDIyNiwgNjMsIDk4LCA0OCwgMTI3LCAxMzMsIDIwNCwgMjEsIDIyNiwgNjMsIDEwOSwgMjksIDI4LCAyMzYsIDc3LCAxMiwgMjI2LCA2MywgMjQwLCA4MSwgMTI3LCAxODksIDE5NCwgMiwgMjI2LCA2MywgMTYwLCAxMTAsIDE2MCwgMTkyLCA1OSwgMjQ5LCAyMjUsIDYzLCAxNDMsIDIyOCwgMjQyLCAzMSwgMjEwLCAyMzksIDIyNSwgNjMsIDIzMywgMTU1LCA1MiwgMTMsIDEzOCwgMjMwLCAyMjUsIDYzLCAxNjQsIDE2NiwgOTMsIDc2LCA1MSwgMjIxLCAyMjUsIDYzLCAyNTUsIDkzLCAxNTksIDU3LCAyMzUsIDIxMSwgMjI1LCA2MywgMTA2LCAxMzQsIDg0LCA4MSwgMTg4LCAyMDIsIDIyNSwgNjMsIDY1LCAyNDAsIDI0OCwgMjQ2LCAxNzQsIDE5MywgMjI1LCA2MywgMTQ0LCAxNjEsIDk5LCA3LCAxNDksIDE4NCwgMjI1LCA2MywgMTQ5LCAyNDMsIDE5NywgMjIyLCAxMzksIDE3NSwgMjI1LCA2MywgMjE2LCAxNTgsIDg5LCAxOCwgMTYwLCAxNjYsIDIyNSwgNjMsIDExMiwgMTUxLCAyNTMsIDE4NiwgMjExLCAxNTcsIDIyNSwgNjMsIDgyLCAyMzksIDE2OSwgMTU2LCAyNDYsIDE0OCwgMjI1LCA2MywgOTIsIDE3MiwgMTY4LCAxOTMsIDUyLCAxNDAsIDIyNSwgNjMsIDE2NCwgMTk0LCAyMTYsIDY2LCAxNDQsIDEzMSwgMjI1LCA2MywgNDMsIDUwLCA1OCwgMzIsIDksIDEyMywgMjI1LCA2MywgMjUyLCAwLCAxNjQsIDU0LCAxMTMsIDExNCwgMjI1LCA2MywgNTYsIDE3LCAyNTMsIDIxOCwgMjUwLCAxMDUsIDIyNSwgNjMsIDE3OSwgMTIyLCAxMzUsIDIxOSwgMTYxLCA5NywgMjI1LCA2MywgNjMsIDg1LCAxMzMsIDYsIDk4LCA4OSwgMjI1LCA2MywgNjYsIDExOSwgNzMsIDE1NiwgMjEsIDgxLCAyMjUsIDYzLCAyMjMsIDE5NCwgMTg2LCAyNDEsIDIzOCwgNzIsIDIyNSwgNjMsIDIwOSwgOTEsIDYwLCAxODgsIDIzMSwgNjQsIDIyNSwgNjMsIDE0MywgMTM3LCAxNDgsIDEwMiwgMjQzLCA1NiwgMjI1LCA2MywgMjIwLCAyNDIsIDE0NSwgMTQ4LCAyNDQsIDQ4LCAyMjUsIDYzLCA3LCA5OCwgMjE3LCAyMDQsIDMzLCA0MSwgMjI1LCA2MywgMTU3LCAxOCwgMTYsIDE0NywgMTEyLCAzMywgMjI1LCA2MywgMjEwLCAxMTEsIDk1LCA3LCAyMDYsIDI1LCAyMjUsIDYzLCAxNzMsIDI1MiwgNTAsIDI0LCAzNSwgMTgsIDIyNSwgNjMsIDE0NiwgMTE5LCAxNCwgMTAxLCAxNjgsIDEwLCAyMjUsIDYzLCAyMjcsIDUxLCAyMTcsIDYzLCA3OSwgMywgMjI1LCA2MywgMTY2LCAxODAsIDI1NCwgMTUwLCAwLCAyNTIsIDIyNCwgNjMsIDEwNSwgNTMsIDM2LCAyMzgsIDE3NywgMjQ0LCAyMjQsIDYzLCAxMCwgMTg4LCAxNDcsIDc5LCAxNDMsIDIzNywgMjI0LCA2MywgOTEsIDk2LCAxNDMsIDEzNywgMTQ4LCAyMzAsIDIyNCwgNjMsIDI0MCwgMjI0LCAzOSwgMTQsIDE2MCwgMjIzLCAyMjQsIDYzLCAxNzgsIDczLCAxMjYsIDE5NiwgMTc1LCAyMTYsIDIyNCwgNjMsIDU5LCAxOTYsIDYzLCAxMDgsIDIzMywgMjA5LCAyMjQsIDYzLCAxODUsIDU2LCA0MiwgNTUsIDgxLCAyMDMsIDIyNCwgNjMsIDU0LCAxNzMsIDIwLCAyLCAxODUsIDE5NiwgMjI0LCA2MywgMzcsIDIzMCwgODksIDczLCA0MywgMTkwLCAyMjQsIDYzLCAxNzQsIDcyLCA3NiwgODAsIDE5NSwgMTgzLCAyMjQsIDYzLCAxMTEsIDEyOSwgNCwgMTk3LCAxNDMsIDE3NywgMjI0LCA2MywgMywgMjEwLCAyNTQsIDcsIDg4LCAxNzEsIDIyNCwgNjMsIDk5LCAxODMsIDIwNywgNDIsIDUxLCAxNjUsIDIyNCwgNjMsIDcwLCAyMTAsIDExMCwgMjQ0LCA0OSwgMTU5LCAyMjQsIDYzLCA3NCwgMjA3LCAyNDQsIDE4LCA5OSwgMTUzLCAyMjQsIDYzLCAxMSwgMjQwLCAyMjEsIDIzMCwgMTQxLCAxNDcsIDIyNCwgNjMsIDIyMCwgMTI5LCA1OCwgMjI5LCAyMDksIDE0MSwgMjI0LCA2MywgNzEsIDYxLCA2OCwgMTYzLCA1OSwgMTM2LCAyMjQsIDYzLCAxNjYsIDI0MiwgMTE4LCAxMzIsIDIxMSwgMTMwLCAyMjQsIDYzLCAxOTIsIDIwMywgMTIsIDI3LCAxMDEsIDEyNSwgMjI0LCA2MywgNzEsIDIzMCwgMTQ1LCA2MywgMjQsIDEyMCwgMjI0LCA2MywgODAsIDU0LCAyMjksIDEwLCAyMzksIDExNCwgMjI0LCA2MywgMzIsIDE1MiwgMTYzLCAxOTksIDIzOSwgMTA5LCAyMjQsIDYzLCAxOTUsIDE3LCAxNjQsIDgyLCAyMzYsIDEwNCwgMjI0LCA2MywgMjMyLCAxOTIsIDExNCwgMTMyLCAxMiwgMTAwLCAyMjQsIDYzLCAyMTIsIDEyOSwgMTcyLCAxNjcsIDg2LCA5NSwgMjI0LCA2MywgNDMsIDEzMiwgMjEzLCA4OCwgMTk0LCA5MCwgMjI0LCA2MywgODYsIDE1OCwgNjQsIDIxNiwgNDEsIDg2LCAyMjQsIDYzLCAxMTYsIDE3OCwgMjEyLCAxMjIsIDE5MSwgODEsIDIyNCwgNjMsIDQ0LCAyNDAsIDIxLCAyMjEsIDEyMiwgNzcsIDIyNCwgNjMsIDM1LCAxMzUsIDEzNiwgMTU1LCA4MywgNzMsIDIyNCwgNjMsIDI1LCAzMCwgMjUxLCA4OSwgNDQsIDY5LCAyMjQsIDYzLCAyNiwgMTYzLCAxMTcsIDg0LCA1MywgNjUsIDIyNCwgNjMsIDIwNCwgNjksIDEyNCwgMzksIDEwMiwgNjEsIDIyNCwgNjMsIDE0MiwgODksIDI0NiwgMzYsIDE3NiwgNTcsIDIyNCwgNjMsIDgwLCAxMDksIDExMiwgMzQsIDI1MCwgNTMsIDIyNCwgNjMsIDk4LCA3NSwgMTQzLCAxNjYsIDEyMiwgNTAsIDIyNCwgNjMsIDM2LCA3MSwgNTgsIDMsIDM1LCA0NywgMjI0LCA2MywgMjAxLCAyMDMsIDE1NCwgODgsIDIyNCwgNDMsIDIyNCwgNjMsIDExMCwgODAsIDI1MSwgMTczLCAxNTcsIDQwLCAyMjQsIDYzLCAxMjEsIDE0NywgMjIzLCAxNjIsIDE0NywgMzcsIDIyNCwgNjMsIDk4LCAyMjAsIDEzLCAxNjIsIDE4MSwgMzQsIDIyNCwgNjMsIDAsIDE5OCwgNTEsIDEwNCwgMjMyLCAzMSwgMjI0LCA2MywgMjA0LCAxNTEsIDIzLCA5NiwgMzEsIDI5LCAyMjQsIDYzLCAyMDksIDYzLCAxOTMsIDE5NywgMTM4LCAyNiwgMjI0LCA2MywgMjQ3LCAyMDEsIDgxLCAxMjgsIDQwLCAyNCwgMjI0LCA2MywgMTIxLCAzNiwgOTQsIDE1OCwgMjA2LCAyMSwgMjI0LCA2MywgMTUzLCA0MywgMTMxLCAxMDYsIDEzMSwgMTksIDIyNCwgNjMsIDE1MSwgNTYsIDI0MiwgNjQsIDEwMCwgMTcsIDIyNCwgNjMsIDI1MSwgMywgMjI5LCAxODIsIDEyNSwgMTUsIDIyNCwgNjMsIDE0MSwgMTgzLCAxNDksIDk0LCAxNTUsIDEzLCAyMjQsIDYzLCAyMzUsIDI1NSwgMjgsIDIzMCwgMjAzLCAxMSwgMjI0LCA2MywgMTYsIDkwLCAxNSwgOTUsIDM4LCAxMCwgMjI0LCA2MywgMTc4LCAxMDIsIDEwMCwgMTQ0LCAxODcsIDgsIDIyNCwgNjMsIDg0LCAxMTUsIDE4NSwgMTkzLCA4MCwgNywgMjI0LCA2MywgNiwgMjQxLCAxMjksIDI5LCAyNTUsIDUsIDIyNCwgNjMsIDEyOCwgMTI4LCAxODEsIDEwNiwgMjE1LCA0LCAyMjQsIDYzLCA3MywgMjE4LCAxNDEsIDYyLCAyMzAsIDMsIDIyNCwgNjMsIDI1MSwgNjMsIDEzNSwgMjQ5LCAyNDIsIDIsIDIyNCwgNjMsIDIsIDI0MywgMTQ0LCA0MSwgMzEsIDIsIDIyNCwgNjMsIDIzMSwgMTcxLCAyMjgsIDk5LCAxMTksIDEsIDIyNCwgNjMsIDE5MiwgOTQsIDk3LCAxOTMsIDI1MywgMCwgMjI0LCA2MywgMTUzLCAxNywgMjIyLCAzMCwgMTMyLCAwLCAyMjQsIDYzLCAxMSwgMjM4LCA3LCA2MCwgNDgsIDAsIDIyNCwgNjMsIDY4LCAyMjAsIDE1NiwgNzQsIDYsIDAsIDIyNCwgNjMsIDY4LCAyMjAsIDE1NiwgNzQsIDYsIDAsIDIyNCwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMSwgMTgzLCAzNiwgNywgMjM2LCA4MiwgMzMsIDY0LCAyMTQsIDU0LCAxOTcsIDIyNywgMTYyLCA5MCwgMzQsIDY0LCA4LCAxMTgsIDI1MiwgMjMsIDgsIDExNCwgMzUsIDY0LCAxNTQsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAzNiwgNjQsIDIxOCwgMTEzLCAxOTUsIDIzOSwgMTY2LCAyMTEsIDM3LCA2NCwgNzEsIDExNCwgMjQ5LCAxNSwgMjMzLCAzMSwgMzksIDY0LCAwLCAwLCAwLCAwLCAwLCAxMjgsIDQwLCA2NCwgMjgsIDY0LCAxOTEsIDIzOSwgMjIzLCAyNDQsIDQxLCA2NCwgMCwgMCwgMCwgMCwgMCwgMTI4LCA0MywgNjQsIDE2OSwgNzgsIDcsIDE3OCwgMTU4LCAzNCwgNDUsIDY0LCAwLCAxMzksIDI1MiwgMjUwLCAzMywgMjIyLCA0NiwgNjQsIDEwNiwgNzgsIDk0LCAxMDAsIDIsIDkwLCA0OCwgNjQsIDExMSwgMTgzLCAzNiwgNywgMjM2LCA4MiwgNDksIDY0LCAyMTQsIDU0LCAxOTcsIDIyNywgMTYyLCA5MCwgNTAsIDY0LCA4LCAxMTgsIDI1MiwgMjMsIDgsIDExNCwgNTEsIDY0LCA2NiwgNjQsIDE5MCwgMTMyLCAxMCwgMTU0LCA1MiwgNjQsIDU4LCAxMjIsIDI1MiwgMjIyLCAxNjYsIDIxMSwgNTMsIDY0LCAyMzIsIDEwNSwgMTkyLCAzMiwgMjMzLCAzMSwgNTUsIDY0LCAwLCAwLCAwLCAwLCAwLCAxMjgsIDU2LCA2NCwgMTg5LCA1NSwgMTM0LCAwLCAyMjQsIDI0NCwgNTcsIDY0LCAwLCAwLCAwLCAwLCAwLCAxMjgsIDU5LCA2NCwgNzQsIDcwLCAyMDYsIDE5NCwgMTU4LCAzNCwgNjEsIDY0LCAwLCAxMzksIDI1MiwgMjUwLCAzMywgMjIyLCA2MiwgNjQsIDE1NCwgMjEwLCAyNTAsIDkxLCAyLCA5MCwgNjQsIDY0LCAxNTksIDU5LCAxOTMsIDI1NCwgMjM1LCA4MiwgNjUsIDY0LCAyMTQsIDU0LCAxOTcsIDIyNywgMTYyLCA5MCwgNjYsIDY0LCAyMTYsIDI0MSwgOTUsIDMyLCA4LCAxMTQsIDY3LCA2NCwgMTE0LCAxOTYsIDkwLCAxMjQsIDEwLCAxNTQsIDY4LCA2NCwgNTgsIDEyMiwgMjUyLCAyMjIsIDE2NiwgMjExLCA2OSwgNjQsIDIzMiwgMTA1LCAxOTIsIDMyLCAyMzMsIDMxLCA3MSwgNjQsIDAsIDAsIDAsIDAsIDAsIDEyOCwgNzIsIDY0LCAxODksIDU1LCAxMzQsIDAsIDIyNCwgMjQ0LCA3MywgNjQsIDAsIDAsIDAsIDAsIDAsIDEyOCwgNzUsIDY0LCA3NCwgNzAsIDIwNiwgMTk0LCAxNTgsIDM0LCA3NywgNjQsIDIwOSwgNiwgOTYsIDMsIDM0LCAyMjIsIDc4LCA2NCwgMTMwLCAxNDQsIDQ0LCA5NiwgMiwgOTAsIDgwLCA2NCwgMTU5LCA1OSwgMTkzLCAyNTQsIDIzNSwgODIsIDgxLCA2NCwgMjM4LCAxMjAsIDE0NywgMjIzLCAxNjIsIDkwLCA4MiwgNjQsIDIxNiwgMjQxLCA5NSwgMzIsIDgsIDExNCwgODMsIDY0LCA5MCwgMTMwLCAxNDAsIDEyOCwgMTAsIDE1NCwgODQsIDY0LCA1OCwgMTIyLCAyNTIsIDIyMiwgMTY2LCAyMTEsIDg1LCA2NCwgMjMyLCAxMDUsIDE5MiwgMzIsIDIzMywgMzEsIDg3LCA2NCwgMTE3LCA5MCwgMTgzLCA2NSwgMjM3LCAxMjcsIDg4LCA2NCwgMTg5LCA1NSwgMTM0LCAwLCAyMjQsIDI0NCwgODksIDY0LCAwLCAwLCAwLCAwLCAwLCAxMjgsIDkxLCA2NCwgOTcsIDEzNiwgMTU2LCAxOTAsIDE1OCwgMzQsIDkzLCA2NCwgMjMzLCA3MiwgNDYsIDI1NSwgMzMsIDIyMiwgOTQsIDY0LCAxMzAsIDE0NCwgNDQsIDk2LCAyLCA5MCwgOTYsIDY0LCAxNDcsIDI2LCAyMTgsIDAsIDIzNiwgODIsIDk3LCA2NCwgMjM4LCAxMjAsIDE0NywgMjIzLCAxNjIsIDkwLCA5OCwgNjQsIDIxNiwgMjQxLCA5NSwgMzIsIDgsIDExNCwgOTksIDY0LCA5MCwgMTMwLCAxNDAsIDEyOCwgMTAsIDE1NCwgMTAwLCA2NCwgNTgsIDEyMiwgMjUyLCAyMjIsIDE2NiwgMjExLCAxMDEsIDY0LCAyMzIsIDEwNSwgMTkyLCAzMiwgMjMzLCAzMSwgMTAzLCA2NCwgMTI5LCAxMjMsIDE1OCwgNjMsIDIzNywgMTI3LCAxMDQsIDY0LCAxODksIDU1LCAxMzQsIDAsIDIyNCwgMjQ0LCAxMDUsIDY0LCAwLCAwLCAwLCAwLCAwLCAxMjgsIDEwNywgNjQsIDg1LCAxMDMsIDE4MSwgMTkyLCAxNTgsIDM0LCAxMDksIDY0LCAyMzMsIDcyLCA0NiwgMjU1LCAzMywgMjIyLCAxMTAsIDY0LCAxMzAsIDE0NCwgNDQsIDk2LCAyLCA5MCwgMTEyLCA2NCwgMjUsIDE3MSwgMjA1LCAyNTUsIDIzNSwgODIsIDExMywgNjQsIDIzOCwgMTIwLCAxNDcsIDIyMywgMTYyLCA5MCwgMTE0LCA2NCwgMjE2LCAyNDEsIDk1LCAzMiwgOCwgMTE0LCAxMTUsIDY0LCAyMjQsIDE4LCAxMjgsIDEyNywgMTAsIDE1NCwgMTE2LCA2NCwgMTgwLCAyMzMsIDgsIDIyNCwgMTY2LCAyMTEsIDExNywgNjQsIDExMCwgMjUwLCAxNzksIDMxLCAyMzMsIDMxLCAxMTksIDY0LCAxMjksIDEyMywgMTU4LCA2MywgMjM3LCAxMjcsIDEyMCwgNjQsIDE4OSwgNTUsIDEzNCwgMCwgMjI0LCAyNDQsIDEyMSwgNjQsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMTIzLCA2NCwgMjE5LCAyNDcsIDE2OCwgMTkxLCAxNTgsIDM0LCAxMjUsIDY0LCA5OSwgMTg0LCA1OCwgMCwgMzQsIDIyMiwgMTI2LCA2NCwgMTMwLCAxNDQsIDQ0LCA5NiwgMiwgOTAsIDEyOCwgNjQsIDI1LCAxNzEsIDIwNSwgMjU1LCAyMzUsIDgyLCAxMjksIDY0LCAxNzEsIDE3NiwgMjUsIDIyNCwgMTYyLCA5MCwgMTMwLCA2NCwgMjcsIDE4NiwgMjE3LCAzMSwgOCwgMTE0LCAxMzEsIDY0LCAxNTcsIDc0LCA2LCAxMjgsIDEwLCAxNTQsIDEzMiwgNjQsIDE4MCwgMjMzLCA4LCAyMjQsIDE2NiwgMjExLCAxMzMsIDY0LCA0MywgNTAsIDU4LCAzMiwgMjMzLCAzMSwgMTM1LCA2NCwgNjIsIDE3OSwgMzYsIDY0LCAyMzcsIDEyNywgMTM2LCA2NCwgMCwgMCwgMCwgMCwgMjI0LCAyNDQsIDEzNywgNjQsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMTM5LCA2NCwgMTUyLCA0NywgNDcsIDE5MiwgMTU4LCAzNCwgMTQxLCA2NCwgOTksIDE4NCwgNTgsIDAsIDM0LCAyMjIsIDE0MiwgNjQsIDE2MywgMTE2LCAyMzMsIDk1LCAyLCA5MCwgMTQ0LCA2NCwgMjQ4LCAxOTgsIDE2LCAwLCAyMzYsIDgyLCAxNDUsIDY0LCAxNzEsIDE3NiwgMjUsIDIyNCwgMTYyLCA5MCwgMTQ2LCA2NCwgMjUwLCAyMTMsIDI4LCAzMiwgOCwgMTE0LCAxNDcsIDY0LCAxNTcsIDc0LCA2LCAxMjgsIDEwLCAxNTQsIDE0OCwgNjQsIDE4MCwgMjMzLCA4LCAyMjQsIDE2NiwgMjExLCAxNDksIDY0LCA3NiwgMjIsIDI0NywgMzEsIDIzMywgMzEsIDE1MSwgNjQsIDk1LCAxNTEsIDIyNSwgNjMsIDIzNywgMTI3LCAxNTIsIDY0LCAwLCAwLCAwLCAwLCAyMjQsIDI0NCwgMTUzLCA2NCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxNTUsIDY0LCAxODYsIDE5LCAyMzYsIDE5MSwgMTU4LCAzNCwgMTU3LCA2NCwgMTMyLCAxNTYsIDI0NywgMjU1LCAzMywgMjIyLCAxNTgsIDY0LCAxNDcsIDIsIDExLCA5NiwgMiwgOTAsIDE2MCwgNjQsIDI0OCwgMTk4LCAxNiwgMCwgMjM2LCA4MiwgMTYxLCA2NCwgMTg4LCAzNCwgMjQ4LCAyMjMsIDE2MiwgOTAsIDE2MiwgNjQsIDEwLCA3MiwgMjUxLCAzMSwgOCwgMTE0LCAxNjMsIDY0LCAxNTcsIDc0LCA2LCAxMjgsIDEwLCAxNTQsIDE2NCwgNjQsIDE4MCwgMjMzLCA4LCAyMjQsIDE2NiwgMjExLCAxNjUsIDY0LCA3NiwgMjIsIDI0NywgMzEsIDIzMywgMzEsIDE2NywgNjQsIDc4LCAzNywgMywgNjQsIDIzNywgMTI3LCAxNjgsIDY0LCAwLCAwLCAwLCAwLCAyMjQsIDI0NCwgMTY5LCA2NCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxNzEsIDY0LCAxMzMsIDIzNSwgODEsIDE4NCwgMTU4LCAzNCwgMTczLCA2NCwgMTMyLCAxNTYsIDI0NywgMjU1LCAzMywgMjIyLCAxNzQsIDY0LCAxNTUsIDU5LCAyNTAsIDk1LCAyLCA5MCwgMTc2LCA2NCwgMCwgMCwgMCwgMCwgMjM2LCA4MiwgMTc3LCA2NCwgMTg4LCAzNCwgMjQ4LCAyMjMsIDE2MiwgOTAsIDE3OCwgNjQsIDEwLCA3MiwgMjUxLCAzMSwgOCwgMTE0LCAxNzksIDY0LCAxNTcsIDc0LCA2LCAxMjgsIDEwLCAxNTQsIDE4MCwgNjQsIDE4OCwgMzQsIDI0OCwgMjIzLCAxNjYsIDIxMSwgMTgxLCA2NCwgNjgsIDIyMSwgNywgMzIsIDIzMywgMzEsIDE4MywgNjQsIDc4LCAzNywgMywgNjQsIDIzNywgMTI3LCAxODQsIDY0LCAwLCAwLCAwLCAwLCAyMjQsIDI0NCwgMTg1LCA2NCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxODcsIDY0LCAxNzgsIDIxOCwgMjUyLCAxOTEsIDE1OCwgMzQsIDE4OSwgNjQsIDEzMiwgMTU2LCAyNDcsIDI1NSwgMzMsIDIyMiwgMTkwLCA2NCwgMjMsIDE1OSwgMiwgOTYsIDIsIDkwLCAxOTIsIDY0LCAwLCAwLCAwLCAwLCAyMzYsIDgyLCAxOTMsIDY0LCA1NiwgMTM0LCAwLCAyMjQsIDE2MiwgOTAsIDE5NCwgNjQsIDEzNCwgMTcxLCAzLCAzMiwgOCwgMTE0LCAxOTUsIDY0LCAzMywgMjMxLCAyNTMsIDEyNywgMTAsIDE1NCwgMTk2LCA2NCwgNTYsIDEzNCwgMCwgMjI0LCAxNjYsIDIxMSwgMTk3LCA2NCwgMjAwLCAxMjEsIDI1NSwgMzEsIDIzMywgMzEsIDE5OSwgNjQsIDc4LCAzNywgMywgNjQsIDIzNywgMTI3LCAyMDAsIDY0LCAwLCAwLCAwLCAwLCAyMjQsIDI0NCwgMjAxLCA2NCwgMzYsIDkyLCAwLCAwLCAxNjEsIDEwMSwgMCwgMCwgMTE2LCA5MiwgMCwgMCwgMTE3LCAxMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEwNCwgNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDExNiwgOTIsIDAsIDAsIDgxLCAxMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDExMiwgNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE5OCwgMTAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDUxLCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAyMzUsIDEwMSwgMCwgMCwgMSwgMCwgMCwgMCwgMTM2LCA1MSwgMCwgMCwgMzYsIDkyLCAwLCAwLCA0MCwgMTAyLCAwLCAwLCAxMTYsIDkyLCAwLCAwLCAxMDYsIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMTA0LCA1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2LCA5MiwgMCwgMCwgNzAsIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMjAwLCA1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTUwLCAxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNCwgNTEsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE4NywgMTAyLCAwLCAwLCAxLCAwLCAwLCAwLCAyMjQsIDUxLCAwLCAwLCAxMTYsIDkyLCAwLCAwLCAyMiwgMTAzLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxMDQsIDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTYsIDkyLCAwLCAwLCAyNDIsIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMjQsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA2NiwgMTAzLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNTIsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDEwMywgMTAzLCAwLCAwLCAxLCAwLCAwLCAwLCA0OCwgNTIsIDAsIDAsIDExNiwgOTIsIDAsIDAsIDE3NywgMTAzLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxMDQsIDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTYsIDkyLCAwLCAwLCAxNDEsIDEwMywgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMTA0LCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMjIxLCAxMDMsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOCwgNTIsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDIsIDEwNCwgMCwgMCwgMSwgMCwgMCwgMCwgMTI4LCA1MiwgMCwgMCwgMzYsIDkyLCAwLCAwLCA1NywgMTA0LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA3MSwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAxODQsIDUyLCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA4NiwgMTA0LCAwLCAwLCAxLCAwLCAwLCAwLCAxODQsIDUyLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDEwNiwgMTA0LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxMjEsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0LCA1MiwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTM3LCAxMDQsIDAsIDAsIDEsIDAsIDAsIDAsIDIyNCwgNTIsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTU0LCAxMDQsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE2MywgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCA4LCA1MywgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTczLCAxMDQsIDAsIDAsIDEsIDAsIDAsIDAsIDgsIDUzLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDE4NCwgMTA0LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTMzLCAxMDUsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTY2LCAxMDUsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAyNDgsIDEwNSwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgNywgMTA2LCAwLCAwLCAwLCAwLCAwLCAwLCA4OCwgNTMsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDIzLCAxMDYsIDAsIDAsIDEsIDAsIDAsIDAsIDg4LCA1MywgMCwgMCwgNzYsIDkyLCAwLCAwLCA0MCwgMTA2LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMSwgMTA3LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDM4LCAxMDcsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAxMTAsIDEwNywgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTI2LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OCwgNTMsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE0MywgMTA3LCAwLCAwLCAxLCAwLCAwLCAwLCAxNjgsIDUzLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDE2MSwgMTA3LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTI0LCAxMDgsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTYyLCAxMDgsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAyNDQsIDEwOCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMSwgMTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNDgsIDUzLCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxNSwgMTA5LCAwLCAwLCAxLCAwLCAwLCAwLCAyNDgsIDUzLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDMwLCAxMDksIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAyNDMsIDEwOSwgMCwgMCwgNzYsIDkyLCAwLCAwLCAyMiwgMTEwLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgODYsIDExMCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgOTUsIDExMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIsIDU0LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxMDUsIDExMCwgMCwgMCwgMSwgMCwgMCwgMCwgNzIsIDU0LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDExNiwgMTEwLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNjUsIDExMSwgMCwgMCwgNzYsIDkyLCAwLCAwLCA5NiwgMTExLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTgwLCAxMTEsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE5NiwgMTExLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDU0LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAyMTMsIDExMSwgMCwgMCwgMSwgMCwgMCwgMCwgMTUyLCA1NCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAyMzEsIDExMSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDE5NCwgMTEyLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDIzMiwgMTEyLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNDksIDExMywgMCwgMCwgMTU2LCA5MiwgMCwgMCwgNjIsIDExMywgMCwgMCwgMCwgMCwgMCwgMCwgMjMyLCA1NCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgNzYsIDExMywgMCwgMCwgMSwgMCwgMCwgMCwgMjMyLCA1NCwgMCwgMCwgNzYsIDkyLCAwLCAwLCA5MSwgMTEzLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNDgsIDExNCwgMCwgMCwgNzYsIDkyLCAwLCAwLCA4MywgMTE0LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTQ3LCAxMTQsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE1NiwgMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCA1NiwgNTUsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE2NiwgMTE0LCAwLCAwLCAxLCAwLCAwLCAwLCA1NiwgNTUsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTc3LCAxMTQsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAxMjYsIDExNSwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxNTcsIDExNSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDIzMSwgMTE1LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAyNDAsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCA1NSwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMjUwLCAxMTUsIDAsIDAsIDEsIDAsIDAsIDAsIDEzNiwgNTUsIDAsIDAsIDc2LCA5MiwgMCwgMCwgNSwgMTE2LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjEwLCAxMTYsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMjQxLCAxMTYsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCA2MywgMTE3LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA3MiwgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYsIDU1LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA4MiwgMTE3LCAwLCAwLCAxLCAwLCAwLCAwLCAyMTYsIDU1LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDkzLCAxMTcsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCA0MiwgMTE4LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDczLCAxMTgsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAxNTksIDExOCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTY4LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA1NiwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTc4LCAxMTgsIDAsIDAsIDEsIDAsIDAsIDAsIDQwLCA1NiwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxODksIDExOCwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDEzOCwgMTE5LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDE2OSwgMTE5LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjM0LCAxMTksIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDI1MSwgMTE5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjAsIDU2LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxMywgMTIwLCAwLCAwLCAxLCAwLCAwLCAwLCAxMjAsIDU2LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDMyLCAxMjAsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAyNTMsIDEyMCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAzNiwgMTIxLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTA0LCAxMjEsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDExOCwgMTIxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDAsIDU2LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxMzMsIDEyMSwgMCwgMCwgMSwgMCwgMCwgMCwgMjAwLCA1NiwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxNDksIDEyMSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDEwOCwgMTIyLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDE0NCwgMTIyLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjE4LCAxMjIsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDIzMSwgMTIyLCAwLCAwLCAwLCAwLCAwLCAwLCAyNCwgNTcsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDI0NSwgMTIyLCAwLCAwLCAxLCAwLCAwLCAwLCAyNCwgNTcsIDAsIDAsIDc2LCA5MiwgMCwgMCwgNCwgMTIzLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjE3LCAxMjMsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMjUyLCAxMjMsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCA2MCwgMTI0LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA3NiwgMTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQsIDU3LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA5MywgMTI0LCAwLCAwLCAxLCAwLCAwLCAwLCAxMDQsIDU3LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDExMSwgMTI0LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNzQsIDEyNSwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxMTIsIDEyNSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDE3OSwgMTI1LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxODgsIDEyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTg0LCA1NywgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTk4LCAxMjUsIDAsIDAsIDEsIDAsIDAsIDAsIDE4NCwgNTcsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMjA5LCAxMjUsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAxNTgsIDEyNiwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxODksIDEyNiwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDI1NCwgMTI2LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCA4LCAxMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDgsIDU4LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxOSwgMTI3LCAwLCAwLCAxLCAwLCAwLCAwLCA4LCA1OCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAzMSwgMTI3LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjM4LCAxMjcsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTQsIDEyOCwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDc1LCAxMjgsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDg2LCAxMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDg4LCA1OCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgOTgsIDEyOCwgMCwgMCwgMSwgMCwgMCwgMCwgODgsIDU4LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDExMSwgMTI4LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNjQsIDEyOSwgMCwgMCwgNzYsIDkyLCAwLCAwLCA5NywgMTI5LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTU5LCAxMjksIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDE2OSwgMTI5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjgsIDU4LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxODAsIDEyOSwgMCwgMCwgMSwgMCwgMCwgMCwgMTY4LCA1OCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxOTIsIDEyOSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDE0MywgMTMwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDE3NSwgMTMwLCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjM2LCAxMzAsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDI0NywgMTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDgsIDU4LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAzLCAxMzEsIDAsIDAsIDEsIDAsIDAsIDAsIDI0OCwgNTgsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTYsIDEzMSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDIyNSwgMTMxLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDIsIDEzMiwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDE0OSwgMTM4LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxMzksIDEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIsIDU5LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAxMjgsIDEzOCwgMCwgMCwgMSwgMCwgMCwgMCwgNzIsIDU5LCAwLCAwLCAzNiwgOTIsIDAsIDAsIDk3LCAxMzgsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNzgsIDEzNywgMCwgMCwgMTU2LCA5MiwgMCwgMCwgNjcsIDEzNywgMCwgMCwgMCwgMCwgMCwgMCwgMTIwLCA1OSwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgNTUsIDEzNywgMCwgMCwgMSwgMCwgMCwgMCwgMTIwLCA1OSwgMCwgMCwgMzYsIDkyLCAwLCAwLCAyMywgMTM3LCAwLCAwLCAzNiwgOTIsIDAsIDAsIDI0MywgMTM1LCAwLCAwLCAxNTYsIDkyLCAwLCAwLCAyMTgsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCA1OSwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgMTkyLCAxMzUsIDAsIDAsIDEsIDAsIDAsIDAsIDE2OCwgNTksIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTQ2LCAxMzUsIDAsIDAsIDc2LCA5MiwgMCwgMCwgOTIsIDEzNCwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDMsIDEzNSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDExLCAxMzYsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxNTAsIDEzNiwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDg4LCAxMzcsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAyMjUsIDEzNywgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDkyLCAxNDAsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDY5LCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2LCA2MCwgMCwgMCwgMTU2LCA5MiwgMCwgMCwgNDUsIDE0MCwgMCwgMCwgMSwgMCwgMCwgMCwgNTYsIDYwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDEsIDE0MCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAyMDksIDEzOCwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDExNiwgMTM5LCAwLCAwLCA4MCwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTI4LCAxNDcsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDkxLCAxNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgNjAsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDUzLCAxNDcsIDAsIDAsIDEsIDAsIDAsIDAsIDEzNiwgNjAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjUxLCAxNDYsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTI2LCAxNDUsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDkwLCAxNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NCwgNjAsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDUzLCAxNDUsIDAsIDAsIDEsIDAsIDAsIDAsIDE4NCwgNjAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjUyLCAxNDQsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTI4LCAxNDMsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDkwLCAxNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMiwgNjAsIDAsIDAsIDE1NiwgOTIsIDAsIDAsIDUxLCAxNDMsIDAsIDAsIDEsIDAsIDAsIDAsIDIzMiwgNjAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjQ4LCAxNDIsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTEwLCAxNDEsIDAsIDAsIDQwLCA2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAxMzksIDE0MSwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxNTUsIDE0MSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDkyLCAxNDIsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxNjUsIDE0MywgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDk4LCAxNDQsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzYsIDkyLCAwLCAwLCAxNjEsIDE0NSwgMCwgMCwgODAsIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDk2LCAxNDYsIDAsIDAsIDgwLCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2LCA5MiwgMCwgMCwgMjE3LCAxNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDU2LCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2LCA5MiwgMCwgMCwgMTU0LCAxNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDU2LCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2LCA5MiwgMCwgMCwgNTMsIDE1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgNTYsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDIyLCAxNTIsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjQ3LCAxNTEsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjE2LCAxNTEsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTg1LCAxNTEsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTU0LCAxNTEsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTIzLCAxNTEsIDAsIDAsIDM2LCA5MiwgMCwgMCwgOTIsIDE1MSwgMCwgMCwgMzYsIDkyLCAwLCAwLCA2MSwgMTUxLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDMwLCAxNTEsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjU1LCAxNTAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMjI0LCAxNTAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTkzLCAxNTAsIDAsIDAsIDM2LCA5MiwgMCwgMCwgMTE2LCAxNTIsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMjQsIDE1MywgMCwgMCwgODAsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgOTIsIDAsIDAsIDM3LCAxNTMsIDAsIDAsIDM2LCA5MiwgMCwgMCwgNTAsIDE1MywgMCwgMCwgNzYsIDkyLCAwLCAwLCA2MywgMTUzLCAwLCAwLCA4OCwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDc2LCA5MiwgMCwgMCwgOTYsIDE1MywgMCwgMCwgOTYsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCA3NiwgOTIsIDAsIDAsIDE2NiwgMTUzLCAwLCAwLCA5NiwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMTMwLCAxNTMsIDAsIDAsIDEyOCwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDc2LCA5MiwgMCwgMCwgMjAwLCAxNTMsIDAsIDAsIDk2LCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgOCwgOTIsIDAsIDAsIDI0MCwgMTUzLCAwLCAwLCA4LCA5MiwgMCwgMCwgMjQyLCAxNTMsIDAsIDAsIDgsIDkyLCAwLCAwLCAyNDUsIDE1MywgMCwgMCwgOCwgOTIsIDAsIDAsIDI0NywgMTUzLCAwLCAwLCA4LCA5MiwgMCwgMCwgMjQ5LCAxNTMsIDAsIDAsIDgsIDkyLCAwLCAwLCAyNTEsIDE1MywgMCwgMCwgOCwgOTIsIDAsIDAsIDI1MywgMTUzLCAwLCAwLCA4LCA5MiwgMCwgMCwgMjU1LCAxNTMsIDAsIDAsIDgsIDkyLCAwLCAwLCAxLCAxNTQsIDAsIDAsIDgsIDkyLCAwLCAwLCAzLCAxNTQsIDAsIDAsIDgsIDkyLCAwLCAwLCA1LCAxNTQsIDAsIDAsIDgsIDkyLCAwLCAwLCA3LCAxNTQsIDAsIDAsIDgsIDkyLCAwLCAwLCA5LCAxNTQsIDAsIDAsIDgsIDkyLCAwLCAwLCAxMSwgMTU0LCAwLCAwLCA3NiwgOTIsIDAsIDAsIDEzLCAxNTQsIDAsIDAsIDExMiwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDc2LCA5MiwgMCwgMCwgNTAsIDE1NCwgMCwgMCwgMTEyLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgOTMsIDYxLCAxMjcsIDEwMiwgMTU4LCAxNjAsIDIzMCwgNjMsIDAsIDAsIDAsIDAsIDAsIDEzNiwgNTcsIDYxLCA2OCwgMjMsIDExNywgMjUwLCA4MiwgMTc2LCAyMzAsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYsIDYwLCAyNTQsIDIxNywgMTEsIDExNywgMTgsIDE5MiwgMjMwLCA2MywgMCwgMCwgMCwgMCwgMCwgMTIwLCA0MCwgMTg5LCAxOTEsIDExOCwgMjEyLCAyMjEsIDIyMCwgMjA3LCAyMzAsIDYzLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDMwLCA2MSwgNDEsIDI2LCAxMDEsIDYwLCAxNzgsIDIyMywgMjMwLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjE2LCAxODgsIDIyNywgNTgsIDg5LCAxNTIsIDE0NiwgMjM5LCAyMzAsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxODgsIDE4OCwgMTM0LCAxNDcsIDgxLCAyNDksIDEyNSwgMjU1LCAyMzAsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMTYsIDQ3LCAxODksIDE2MywgNDUsIDI0NCwgMTAyLCAxMTYsIDE1LCAyMzEsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDQ0LCAxODksIDE5NSwgOTUsIDIzNiwgMjMyLCAxMTcsIDMxLCAyMzEsIDYzLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDE5LCA2MSwgNSwgMjA3LCAyMzQsIDEzNCwgMTMwLCA0NywgMjMxLCA2MywgMCwgMCwgMCwgMCwgMCwgNDgsIDU2LCAxODksIDgyLCAxMjksIDE2NSwgNzIsIDE1NCwgNjMsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDE5MiwgMCwgMTg5LCAyNTIsIDIwNCwgMjE1LCA1MywgMTg5LCA3OSwgMjMxLCA2MywgMCwgMCwgMCwgMCwgMCwgMTM2LCA0NywgNjEsIDI0MSwgMTAzLCA2NiwgODYsIDIzNSwgOTUsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgMywgNjEsIDcyLCAxMDksIDE3MSwgMTc3LCAzNiwgMTEyLCAyMzEsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDM5LCAxODksIDU2LCA5MywgMjIyLCA3OSwgMTA1LCAxMjgsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMSwgMTg4LCAwLCAyOSwgMTcyLCA1NiwgMTg1LCAxNDQsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNywgNjAsIDEyMCwgMSwgMjM1LCAxMTUsIDIwLCAxNjEsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNywgMTg4LCA5NiwgMjA4LCAxMTgsIDksIDEyMywgMTc3LCAyMzEsIDYzLCAwLCAwLCAwLCAwLCAwLCA2NCwgMzIsIDYxLCA1MSwgMTkzLCA0OCwgMSwgMjM3LCAxOTMsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MCwgNjAsIDU0LCAxMzQsIDI1NSwgOTgsIDEwNiwgMjEwLCAyMzEsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDM4LCAxODksIDU5LCA3OCwgMjA3LCA1NCwgMjQzLCAyMjYsIDIzMSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgMiwgMTg5LCAyMzIsIDE5NSwgMTQ1LCAxMzIsIDEzNSwgMjQzLCAyMzEsIDYzLCAwLCAwLCAwLCAwLCAwLCA4OCwgMzYsIDE4OSwgNzgsIDI3LCA2MiwgODQsIDM5LCA0LCAyMzIsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgNjEsIDI2LCA3LCAyMDksIDE3MywgMjEwLCAyMCwgMjMyLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMTUsIDYxLCAxMjYsIDIwNSwgNzYsIDE1MywgMTM3LCAzNywgMjMyLCA2MywgMCwgMCwgMCwgMCwgMCwgMTkyLCAzMywgMTg5LCAyMDgsIDY2LCAxODUsIDMwLCA3NiwgNTQsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgNDEsIDYxLCAxODEsIDIwMiwgMzUsIDcwLCAyNiwgNzEsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDE2LCA3MSwgNjEsIDE4OCwgOTEsIDE1OSwgMjMsIDI0NCwgODcsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDk2LCAzNCwgNjEsIDE3NSwgMTQ1LCA2OCwgMTU1LCAyMTcsIDEwNCwgMjMyLCA2MywgMCwgMCwgMCwgMCwgMCwgMTk2LCA1MCwgMTg5LCAxNDksIDE2MywgNDksIDIxNywgMjAyLCAxMjEsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAxODksIDE4NCwgMTAxLCAxMzgsIDIxNywgMTk5LCAxMzgsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDEyOCwgNDIsIDE4OSwgMCwgODgsIDEyMCwgMTY0LCAyMDgsIDE1NSwgMjMyLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAxODgsIDM1LCAxNjIsIDQyLCA2NiwgMjI5LCAxNzIsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDQwLCA1MSwgNjEsIDI1MCwgMjUsIDIxNCwgMTg2LCA1LCAxOTAsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDE4MCwgNjYsIDYxLCAxMzEsIDY3LCAxODEsIDIyLCA1MCwgMjA3LCAyMzIsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDQ2LCAxODksIDc2LCAxMDIsIDgsIDk0LCAxMDYsIDIyNCwgMjMyLCA2MywgMCwgMCwgMCwgMCwgMCwgODAsIDMyLCAxODksIDcsIDEyMCwgMjEsIDE1MywgMTc0LCAyNDEsIDIzMiwgNjMsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNjEsIDE0LCA0NCwgNDAsIDIwOCwgMjU0LCAyLCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNzYsIDI4LCAxODksIDE1MCwgMjU1LCAxNDUsIDExLCA5MSwgMjAsIDIzMywgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgNSwgMTg5LCAyNDksIDQ3LCAxNzAsIDgzLCAxOTUsIDM3LCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCA2NCwgMjQ1LCA2MCwgNzQsIDE5OCwgMjA1LCAxNzYsIDU1LCA1NSwgMjMzLCA2MywgMCwgMCwgMCwgMCwgMCwgMzIsIDIzLCA2MSwgMTc0LCAxNTIsIDk1LCA0MywgMTg0LCA3MiwgMjMzLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMTg5LCAyMDMsIDgyLCAyMDAsIDIwMywgNjgsIDkwLCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMDQsIDM3LCA2MSwgMzMsIDExMSwgMTE4LCAxNTQsIDIyMSwgMTA3LCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDU0LCAxODksIDQyLCA3OCwgMjIyLCAxNTksIDEzMCwgMTI1LCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxODksIDE2MywgMzUsIDEyMiwgMjI4LCA1MSwgMTQzLCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCA0NSwgNjEsIDQsIDYsIDIwMiwgMTEyLCAyNDEsIDE2MCwgMjMzLCA2MywgMCwgMCwgMCwgMCwgMCwgMTY0LCA1NiwgMTg5LCAxMzcsIDI1NSwgODMsIDc3LCAxODcsIDE3OCwgMjMzLCA2MywgMCwgMCwgMCwgMCwgMCwgOTIsIDUzLCA2MSwgOTEsIDI0MSwgMTYzLCAxMzAsIDE0NSwgMTk2LCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAxODQsIDM4LCA2MSwgMTk3LCAxODQsIDc1LCAyNSwgMTE2LCAyMTQsIDIzMywgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNiwgMTg4LCAxNDIsIDM1LCAyMjcsIDI1LCA5OSwgMjMyLCAyMzMsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDIzLCA2MSwgMiwgMjQzLCA3LCAxNDEsIDk0LCAyNTAsIDIzMywgNjMsIDAsIDAsIDAsIDAsIDAsIDY0LCAyMiwgNjEsIDc3LCAyMjksIDkzLCAxMjMsIDEwMiwgMTIsIDIzNCwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NSwgMTg4LCAyNDYsIDE4NCwgMTQyLCAyMzcsIDEyMiwgMzAsIDIzNCwgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgOSwgNjEsIDM5LCA0NiwgNzQsIDIzNiwgMTU1LCA0OCwgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgMjE2LCA0MiwgNjEsIDkzLCAxMCwgNzAsIDEyOCwgMjAxLCA2NiwgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNiwgMTg5LCAxNTUsIDM3LCA2MiwgMTc4LCAzLCA4NSwgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgOTYsIDExLCA2MSwgMTksIDk4LCAyNDQsIDEzOCwgNzQsIDEwMywgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgMTM2LCA1NiwgNjEsIDE2NywgMTc5LCA0OCwgMTksIDE1OCwgMTIxLCAyMzQsIDYzLCAwLCAwLCAwLCAwLCAwLCAzMiwgMTcsIDYxLCAxNDEsIDQ2LCAxOTMsIDgzLCAyNTQsIDEzOSwgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgMTkyLCA2LCA2MSwgMjEwLCAyNTIsIDEyMSwgODUsIDEwNywgMTU4LCAyMzQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxODQsIDQxLCAxODksIDE4NCwgMTExLCA1MywgMzMsIDIyOSwgMTc2LCAyMzQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDQzLCA2MSwgMTI5LCAyNDMsIDIxMSwgMTkxLCAxMDcsIDE5NSwgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjE3LCA2MCwgMTI4LCAzOSwgNjAsIDU4LCAyNTUsIDIxMywgMjM0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjI4LCA2MCwgMTYzLCAyMTAsIDkwLCAxNTMsIDE1OSwgMjMyLCAyMzQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDQ0LCAxODksIDEwMywgMjQzLCAzNCwgMjMwLCA3NiwgMjUxLCAyMzQsIDYzLCAwLCAwLCAwLCAwLCAwLCA4MCwgMjIsIDYxLCAxNDQsIDE4MywgMTQxLCA0MSwgNywgMTQsIDIzNSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIxMiwgNDcsIDYxLCAxNjksIDEzNywgMTU0LCAxMDgsIDIwNiwgMzIsIDIzNSwgNjMsIDAsIDAsIDAsIDAsIDAsIDExMiwgMTgsIDYxLCA3NSwgMjYsIDc5LCAxODQsIDE2MiwgNTEsIDIzNSwgNjMsIDAsIDAsIDAsIDAsIDAsIDcxLCA3NywgNjEsIDIzMSwgNzEsIDE4MywgMjEsIDEzMiwgNzAsIDIzNSwgNjMsIDAsIDAsIDAsIDAsIDAsIDU2LCA1NiwgMTg5LCA1OCwgODksIDIyOSwgMTQxLCAxMTQsIDg5LCAyMzUsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDYwLCAxMDYsIDE5NywgMjQxLCA0MSwgMTEwLCAxMDgsIDIzNSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgMTAsIDYxLCA4MCwgOTQsIDI1MSwgMjQyLCAxMTgsIDEyNywgMjM1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTI4LCAyMjIsIDYwLCAxNzgsIDczLCAzOSwgMjQyLCAxNDAsIDE0NiwgMjM1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTkyLCA0LCAxODksIDMsIDYsIDE2MSwgNDgsIDE3NiwgMTY1LCAyMzUsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDEzLCAxODksIDEwMiwgMTExLCAxNTQsIDE4MywgMjI0LCAxODQsIDIzNSwgNjMsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTMsIDYxLCAyNTUsIDE5MywgNzUsIDE0NCwgMzAsIDIwNCwgMjM1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTYwLCAyLCA2MSwgMTExLCAxNjEsIDI0MywgMTk1LCAxMDUsIDIyMywgMjM1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTIwLCAzMSwgMTg5LCAxODQsIDI5LCAyMTUsIDkxLCAxOTQsIDI0MiwgMjM1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTYwLCAxNiwgMTg5LCAyMzMsIDE3OCwgNjUsIDk3LCA0MCwgNiwgMjM2LCA2MywgMCwgMCwgMCwgMCwgMCwgNjQsIDE3LCAxODksIDIyNCwgODIsIDEzMywgMjIxLCAxNTUsIDI1LCAyMzYsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMjQsIDExLCA2MSwgMjM4LCAxMDAsIDI1MCwgMjE3LCAyOCwgNDUsIDIzNiwgNjMsIDAsIDAsIDAsIDAsIDAsIDY0LCA5LCAxODksIDQ3LCAyMDgsIDI1NSwgOTUsIDE3MSwgNjQsIDIzNiwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgMTQsIDE4OSwgMjEsIDI1MywgMjUwLCAxMjAsIDcxLCA4NCwgMjM2LCA2MywgMCwgMCwgMCwgMCwgMCwgMTAyLCA1NywgNjEsIDIwMywgMjA4LCA4NywgNDYsIDI0MSwgMTAzLCAyMzYsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNiwgMjYsIDE4OSwgMTgyLCAxOTMsIDEzNiwgMTM3LCAxNjgsIDEyMywgMjM2LCA2MywgMCwgMCwgMCwgMCwgMTI4LCA2OSwgODgsIDE4OSwgNTEsIDIzMSwgNiwgMTQ4LCAxMDksIDE0MywgMjM2LCA2MywgMCwgMCwgMCwgMCwgMCwgNzIsIDI2LCAxODksIDIyMywgMTk2LCA4MSwgODcsIDY0LCAxNjMsIDIzNiwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDIwMywgNjAsIDE0OCwgMTQ0LCAyMzksIDIyMCwgMzIsIDE4MywgMjM2LCA2MywgMCwgMCwgMCwgMCwgMCwgNjQsIDEsIDYxLCAxMzcsIDIyLCAxMDksIDQ2LCAxNSwgMjAzLCAyMzYsIDYzLCAwLCAwLCAwLCAwLCAwLCAzMiwgMjQwLCA2MCwgMTgsIDE5NiwgOTMsIDg1LCAxMSwgMjIzLCAyMzYsIDYzLCAwLCAwLCAwLCAwLCAwLCA5NiwgMjQzLCA2MCwgNTksIDE3MSwgOTEsIDkxLCAyMSwgMjQzLCAyMzYsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDYsIDE4OSwgMTg4LCAxMzcsIDcsIDc0LCA0NSwgNywgMjM3LCA2MywgMCwgMCwgMCwgMCwgMCwgMTYwLCA5LCA2MSwgMjUwLCAyMDAsIDgsIDQzLCA4MywgMjcsIDIzNywgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgMjEsIDE4OSwgMTMzLCAxMzgsIDEzLCA4LCAxMzUsIDQ3LCAyMzcsIDYzLCAwLCAwLCAwLCAwLCAwLCA0MCwgMjksIDYxLCAzLCAxNjIsIDIwMiwgMjM0LCAyMDAsIDY3LCAyMzcsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNjAsIDEsIDYxLCAxNDUsIDE2NCwgMjUxLCAyMjAsIDI0LCA4OCwgMjM3LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjIzLCA2MCwgMTYxLCAyMzAsIDk4LCAyMzIsIDExOCwgMTA4LCAyMzcsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNjAsIDMsIDE4OSwgNzgsIDEzMSwgMjAxLCAyMiwgMjI3LCAxMjgsIDIzNywgNjMsIDAsIDAsIDAsIDAsIDAsIDIxNiwgMTIsIDE4OSwgMTQ0LCA5NiwgMjU1LCAxMTMsIDkzLCAxNDksIDIzNywgNjMsIDAsIDAsIDAsIDAsIDAsIDE5MiwgMjQ0LCA2MCwgMTc0LCA1MCwgMjE5LCAzLCAyMzAsIDE2OSwgMjM3LCA2MywgMCwgMCwgMCwgMCwgMCwgMTQ0LCAyNTUsIDYwLCAzNywgMTMxLCA1OCwgMjE0LCAxMjQsIDE5MCwgMjM3LCA2MywgMCwgMCwgMCwgMCwgMCwgMTI4LCAyMzMsIDYwLCA2OSwgMTgwLCAxLCAyNDMsIDMzLCAyMTEsIDIzNywgNjMsIDAsIDAsIDAsIDAsIDAsIDMyLCAyNDUsIDE4OCwgMTkxLCA1LCAyOCwgMTAwLCAyMTMsIDIzMSwgMjM3LCA2MywgMCwgMCwgMCwgMCwgMCwgMTEyLCAyOSwgMTg5LCAyMzYsIDE1NCwgMTIzLCA1MSwgMTUxLCAyNTIsIDIzNywgNjMsIDAsIDAsIDAsIDAsIDAsIDIwLCAyMiwgMTg5LCA5NCwgMTI1LCAyNSwgMTA3LCAxMDMsIDE3LCAyMzgsIDYzLCAwLCAwLCAwLCAwLCAwLCA3MiwgMTEsIDYxLCAyMzEsIDE2MywgMjQ1LCAyMCwgNzAsIDM4LCAyMzgsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDYsIDY0LCA2MSwgOTIsIDIzOCwgMjIsIDU5LCA1MSwgNTksIDIzOCwgNjMsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMTIsIDYxLCAxODAsIDYzLCAxMzksIDIzMSwgNDYsIDgwLCAyMzgsIDYzLCAwLCAwLCAwLCAwLCAwLCA0OCwgOSwgMTg5LCAxMDQsIDEwOSwgMTAzLCAzNiwgNTcsIDEwMSwgMjM4LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjI5LCAxODgsIDY4LCA3NiwgMTk5LCAyNTEsIDgxLCAxMjIsIDIzOCwgNjMsIDAsIDAsIDAsIDAsIDAsIDI0OCwgNywgMTg5LCAzOCwgMTgzLCAyMDUsIDExOSwgMTIxLCAxNDMsIDIzOCwgNjMsIDAsIDAsIDAsIDAsIDAsIDExMiwgMjQzLCAxODgsIDIzMiwgMTQ0LCAxNjQsIDE2MiwgMTc1LCAxNjQsIDIzOCwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgMjI5LCA2MCwgMjI4LCAyMDIsIDEyNCwgMTM0LCAyNDQsIDE4NSwgMjM4LCA2MywgMCwgMCwgMCwgMCwgMCwgMjYsIDIyLCA2MSwgMTMsIDEwNCwgMTQyLCA0NSwgNzIsIDIwNywgMjM4LCA2MywgMCwgMCwgMCwgMCwgMCwgODAsIDI0NSwgNjAsIDIwLCAxMzMsIDI0LCAxNjIsIDE3MCwgMjI4LCAyMzgsIDYzLCAwLCAwLCAwLCAwLCAwLCA2NCwgMTk4LCA2MCwgMTksIDkwLCA5NywgMjM4LCAyNywgMjUwLCAyMzgsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDIzOCwgMTg4LCA2LCA2NSwgMTgyLCAyOCwgMTU2LCAxNSwgMjM5LCA2MywgMCwgMCwgMCwgMCwgMCwgMTM2LCAyNTAsIDE4OCwgOTksIDE4NSwgMTA3LCA1NSwgNDMsIDM3LCAyMzksIDYzLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDQ0LCAxODksIDExNywgMTE0LCAyMjEsIDcyLCAyMDEsIDU4LCAyMzksIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDYwLCAzNiwgNjksIDExMCwgOTEsIDExOCwgODAsIDIzOSwgNjMsIDAsIDAsIDAsIDAsIDAsIDI0MCwgMjQ0LCAxODgsIDI1MywgNjgsIDEzNiwgMTIxLCA1MCwgMTAyLCAyMzksIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDIwMiwgNjAsIDU2LCAxOTAsIDE1NiwgMTczLCAyNTMsIDEyMywgMjM5LCA2MywgMCwgMCwgMCwgMCwgMCwgMTg4LCAyNTAsIDYwLCAxMzAsIDYwLCAzNiwgMiwgMjE2LCAxNDUsIDIzOSwgNjMsIDAsIDAsIDAsIDAsIDAsIDk2LCAyMTIsIDE4OCwgMTQyLCAxNDQsIDE1OCwgMTI5LCAxOTMsIDE2NywgMjM5LCA2MywgMCwgMCwgMCwgMCwgMCwgMTIsIDExLCAxODksIDE3LCAyMTMsIDE0NiwgNTQsIDE4NiwgMTg5LCAyMzksIDYzLCAwLCAwLCAwLCAwLCAwLCAyMjQsIDE5MiwgMTg4LCAxNDgsIDExMywgMTQzLCA0MywgMTk0LCAyMTEsIDIzOSwgNjMsIDAsIDAsIDAsIDAsIDEyOCwgMjIyLCAxNiwgMTg5LCAyMzgsIDM1LCA0MiwgMTA3LCAyMTcsIDIzMywgMjM5LCA2MywgMCwgMCwgMCwgMCwgMCwgNjcsIDIzOCwgNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5MCwgMTg4LCA5MCwgMjUwLCAyNiwgMTEsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDY0LCAxNzksIDE4OCwgMywgNTEsIDI1MSwgMTY5LCA2MSwgMjIsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDIzLCAxOCwgMTg5LCAxMzAsIDIsIDU5LCAyMCwgMTA0LCAzMywgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgNjQsIDE4NiwgNjAsIDEwOCwgMTI4LCAxMTksIDYyLCAxNTQsIDQ0LCAyNDAsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDIzOSwgNjAsIDIwMiwgMTg3LCAxNywgNDYsIDIxMiwgNTUsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDY0LCAxOTksIDE4OCwgMTM3LCAxMjcsIDExMCwgMjMyLCAyMSwgNjcsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDQ4LCAyMTYsIDYwLCAxMDMsIDg0LCAyNDYsIDExNCwgOTUsIDc4LCAyNDAsIDYzLCAwLCAwLCAwLCAwLCAwLCA2MywgMjYsIDE4OSwgOTAsIDEzMywgMjEsIDIxMSwgMTc2LCA4OSwgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMTMyLCAyLCAxODksIDE0OSwgMzEsIDYwLCAxNCwgMTAsIDEwMSwgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgOTYsIDI0MSwgNjAsIDI2LCAyNDcsIDIyMSwgNDEsIDEwNywgMTEyLCAyNDAsIDYzLCAwLCAwLCAwLCAwLCAwLCAzNiwgMjEsIDYxLCA0NSwgMTY4LCAxMTQsIDQzLCAyMTIsIDEyMywgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMTYwLCAyMzMsIDE4OCwgMjA4LCAxNTUsIDExNywgMjQsIDY5LCAxMzUsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDY0LCAyMzAsIDYwLCAyMDAsIDcsIDEwMiwgMjQ2LCAxODksIDE0NiwgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMTIwLCAwLCAxODksIDEzMSwgMjQzLCAxOTgsIDIwMiwgNjIsIDE1OCwgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMTUyLCAxODgsIDQ4LCA1NywgMzEsIDE1NSwgMTk5LCAxNjksIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDE2MCwgMjU1LCA2MCwgMjUyLCAxMzYsIDI0OSwgMTA4LCA4OCwgMTgxLCAyNDAsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDAsIDI1MCwgMTg4LCAxMzgsIDEwOCwgMjI4LCA2OSwgMjQxLCAxOTIsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDE5MiwgMjE3LCA2MCwgMjIsIDcyLCAxMTQsIDQzLCAxNDYsIDIwNCwgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMzIsIDUsIDYxLCAyMTYsIDkzLCA1NywgMzUsIDU5LCAyMTYsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgMjUwLCAxODgsIDI0MywgMjA5LCAyMTEsIDUwLCAyMzYsIDIyNywgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMTcyLCAyNywgNjEsIDE2NiwgMTY5LCAyMjMsIDk1LCAxNjUsIDIzOSwgMjQwLCA2MywgMCwgMCwgMCwgMCwgMCwgMjMyLCA0LCAxODksIDI0MCwgMjEwLCAyNTQsIDE3NSwgMTAyLCAyNTEsIDI0MCwgNjMsIDAsIDAsIDAsIDAsIDAsIDQ4LCAxMywgMTg5LCA3NSwgMzUsIDIxNSwgNDAsIDQ4LCA3LCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCA4MCwgMjQxLCA2MCwgOTEsIDkxLCAxOCwgMjA4LCAxLCAxOSwgMjQxLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjM2LCA2MCwgMjQ5LCA0MiwgOTQsIDE3MSwgMjE5LCAzMCwgMjQxLCA2MywgMCwgMCwgMCwgMCwgMCwgMTg4LCAyMiwgNjEsIDIxMywgNDksIDEwOCwgMTkyLCAxODksIDQyLCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCA2NCwgMjMyLCA2MCwgMTI1LCA0LCAyNDIsIDIwLCAxNjgsIDU0LCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDE0LCAxODksIDIzMywgNDUsIDE2OSwgMTc0LCAxNTQsIDY2LCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMjQsIDIzMiwgNjAsIDU2LCA0OSwgNzksIDE0NywgMTQ5LCA3OCwgMjQxLCA2MywgMCwgMCwgMCwgMCwgMCwgNjQsIDIzNSwgNjAsIDExMywgMTQyLCAxNjUsIDIwMCwgMTUyLCA5MCwgMjQxLCA2MywgMCwgMCwgMCwgMCwgMCwgNDgsIDUsIDYxLCAyMjMsIDE5NSwgMTEzLCA4NCwgMTY0LCAxMDIsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDU2LCAzLCA2MSwgMTcsIDgyLCAxMjUsIDYwLCAxODQsIDExNCwgMjQxLCA2MywgMCwgMCwgMCwgMCwgMCwgMjEyLCA0MCwgNjEsIDE1OSwgMTg3LCAxNDksIDEzNCwgMjEyLCAxMjYsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgNSwgMTg5LCAxNDcsIDE0MSwgMTQwLCA1NiwgMjQ5LCAxMzgsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDEzNiwgMjgsIDE4OSwgMTAyLCA5MywgNTUsIDg4LCAzOCwgMTUxLCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDE3LCA2MSwgMTY3LCAyMDMsIDExMSwgMjM1LCA5MSwgMTYzLCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCA3MiwgMTYsIDYxLCAyMjcsIDEzNSwgMTksIDI0OCwgMTUzLCAxNzUsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDU3LCA3MSwgMTg5LCA4NCwgOTMsIDQsIDEzMiwgMjI0LCAxODcsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIyOCwgMzYsIDYxLCA2NywgMjgsIDQwLCAxNDksIDQ3LCAyMDAsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDMyLCAxMCwgMTg5LCAxNzgsIDE4NSwgMTA0LCA0OSwgMTM1LCAyMTIsIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMjI3LCA2MCwgNDksIDY0LCAxODAsIDk0LCAyMzEsIDIyNCwgMjQxLCA2MywgMCwgMCwgMCwgMCwgMCwgMTkyLCAyMzQsIDYwLCA1NiwgMjE3LCAyNTIsIDM0LCA4MCwgMjM3LCAyNDEsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDEsIDYxLCAyNDcsIDIwNSwgNTYsIDEzMiwgMTkzLCAyNDksIDI0MSwgNjMsIDAsIDAsIDAsIDAsIDAsIDEyMCwgMjcsIDE4OSwgMTQzLCAxNDEsIDk4LCAxMzYsIDU5LCA2LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDQ1LCA2MSwgMzAsIDE2OCwgMTIwLCA1MywgMTkwLCAxOCwgMjQyLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjE2LCA2MCwgNjUsIDIyMSwgMTI1LCAxNDUsIDczLCAzMSwgMjQyLCA2MywgMCwgMCwgMCwgMCwgMCwgNTIsIDQzLCA2MSwgMzUsIDE5LCAxMjEsIDE2MiwgMjIxLCA0MywgMjQyLCA2MywgMCwgMCwgMCwgMCwgMCwgMjQ4LCAyNSwgNjEsIDIzMSwgOTcsIDExNywgMTEwLCAxMjIsIDU2LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDAsIDI1LCAxODksIDM5LCAyMCwgMTMwLCAyNTEsIDMxLCA2OSwgMjQyLCA2MywgMCwgMCwgMCwgMCwgMCwgNDgsIDIsIDYxLCAyLCAxNjYsIDE3OCwgNzksIDIwNiwgODEsIDI0MiwgNjMsIDAsIDAsIDAsIDAsIDAsIDcyLCAxOSwgMTg5LCAxNzYsIDIwNiwgMzAsIDExMywgMTMzLCA5NCwgMjQyLCA2MywgMCwgMCwgMCwgMCwgMCwgMTEyLCAxOCwgNjEsIDIyLCAxMjUsIDIyNiwgMTAxLCA2OSwgMTA3LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDE3LCA2MSwgMTUsIDIyNCwgMjksIDUyLCAxNCwgMTIwLCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMzgsIDQ5LCA2MSwgNjIsIDk5LCAyNDUsIDIyNSwgMjIzLCAxMzIsIDI0MiwgNjMsIDAsIDAsIDAsIDAsIDAsIDE5MiwgMjAsIDE4OSwgNDgsIDE4NywgMTQ1LCAxMTcsIDE4NiwgMTQ1LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMTYsIDE5LCAxODksIDksIDIyMywgMzEsIDI0NSwgMTU3LCAxNTgsIDI0MiwgNjMsIDAsIDAsIDAsIDAsIDAsIDE3NiwgOCwgNjEsIDE1NSwgMTQsIDIwOSwgMTAyLCAxMzgsIDE3MSwgMjQyLCA2MywgMCwgMCwgMCwgMCwgMCwgMTI0LCAzNCwgMTg5LCA1OCwgMjE4LCAyMTgsIDIwOCwgMTI3LCAxODQsIDI0MiwgNjMsIDAsIDAsIDAsIDAsIDAsIDUyLCA0MiwgNjEsIDI0OSwgMjYsIDExOSwgNTcsIDEyNiwgMTk3LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDE2LCAxODksIDIxNywgMiwgMjI4LCAxNjYsIDEzMywgMjEwLCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDE0LCAxODksIDEyMSwgMjEsIDEwMCwgMzEsIDE1MCwgMjIzLCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAzMiwgMjQ0LCAxODgsIDIwNywgNDYsIDYyLCAxNjksIDE3NSwgMjM2LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDM2LCAxODksIDM0LCAxMzYsIDE4OSwgNzQsIDIxMCwgMjQ5LCAyNDIsIDYzLCAwLCAwLCAwLCAwLCAwLCA0OCwgMjIsIDE4OSwgMzcsIDE4MiwgNDksIDEwLCAyNTQsIDYsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDU0LCA1MCwgMTg5LCAxMSwgMTY1LCAyMzgsIDIzNywgNTAsIDIwLCAyNDMsIDYzLCAwLCAwLCAwLCAwLCAxMjgsIDIyMywgMTEyLCAxODksIDE4NCwgMjE1LCA3NiwgMjUyLCAxMTIsIDMzLCAyNDMsIDYzLCAwLCAwLCAwLCAwLCAwLCA3MiwgMzQsIDE4OSwgMTYyLCAyMzMsIDE2OCwgNTksIDE4NCwgNDYsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDE1MiwgMzcsIDE4OSwgMTAyLCAyMywgMTAwLCAxNzgsIDgsIDYwLCAyNDMsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDgsIDMwLCA2MSwgMzksIDI1MCwgMjI3LCAxMDIsIDk4LCA3MywgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjIwLCAxODgsIDE1LCAxNTksIDE0NiwgOTUsIDE5NywgODYsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDIxNiwgNDgsIDE4OSwgMTg1LCAxMzYsIDIyMiwgMTYyLCA0OSwgMTAwLCAyNDMsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMDAsIDM0LCA2MSwgNTcsIDE3MCwgNTgsIDU1LCAxNjcsIDExMywgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgOTYsIDMyLCA2MSwgMjU0LCAxMTYsIDMwLCAzNSwgMzgsIDEyNywgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgOTYsIDIyLCAxODksIDU2LCAyMTYsIDUsIDEwOSwgMTc0LCAxNDAsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgMTAsIDE4OSwgMTk1LCA2MiwgMTEzLCAyNywgNjQsIDE1NCwgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgMTE0LCA2OCwgMTg5LCAzMiwgMTYwLCAyMjksIDUyLCAyMTksIDE2NywgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgMzIsIDgsIDYxLCAxNDksIDExMCwgMjM2LCAxOTEsIDEyNywgMTgxLCAyNDMsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDYyLCA2MSwgMjQyLCAxNjgsIDE5LCAxOTUsIDQ1LCAxOTUsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMjM5LCA2MCwgMzQsIDIyNSwgMjM3LCA2OCwgMjI5LCAyMDgsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDE2MCwgMjMsIDE4OSwgMTg3LCA1MiwgMTgsIDc2LCAxNjYsIDIyMiwgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgNDgsIDM4LCA2MSwgMjA0LCA3OCwgMjgsIDIyMywgMTEyLCAyMzYsIDI0MywgNjMsIDAsIDAsIDAsIDAsIDAsIDE2NiwgNzIsIDE4OSwgMTQwLCAxMjYsIDE3MiwgNCwgNjksIDI1MCwgMjQzLCA2MywgMCwgMCwgMCwgMCwgMCwgMjIwLCA2MCwgMTg5LCAxODcsIDE2MCwgMTAzLCAxOTUsIDM0LCA4LCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxODQsIDM3LCA2MSwgMTQ5LCA0NiwgMjQ3LCAzMywgMTAsIDIyLCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDMwLCA2MSwgNzAsIDcwLCA5LCAzOSwgMjUxLCAzNSwgMjQ0LCA2MywgMCwgMCwgMCwgMCwgMCwgOTYsIDE5LCAxODksIDMyLCAxNjksIDgwLCAyMTcsIDI0NSwgNDksIDI0NCwgNjMsIDAsIDAsIDAsIDAsIDAsIDE1MiwgMzUsIDYxLCAyMzUsIDE4NSwgMTMyLCA2MywgMjUwLCA2MywgMjQ0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjUwLCA2MCwgMjUsIDEzNywgOTcsIDk2LCA4LCA3OCwgMjQ0LCA2MywgMCwgMCwgMCwgMCwgMCwgMTkyLCAyNDYsIDE4OCwgMSwgMjEwLCAxNjcsIDY2LCAzMiwgOTIsIDI0NCwgNjMsIDAsIDAsIDAsIDAsIDAsIDE5MiwgMTEsIDE4OSwgMjIsIDAsIDI5LCAyMzcsIDY1LCAxMDYsIDI0NCwgNjMsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMTgsIDE4OSwgMzgsIDUxLCAxMzksIDEwMiwgMTA5LCAxMjAsIDI0NCwgNjMsIDAsIDAsIDAsIDAsIDAsIDIyNCwgNDgsIDYxLCAwLCA2MCwgMTkzLCAxODEsIDE2MiwgMTM0LCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCA2NCwgNDUsIDE4OSwgNCwgMTc1LCAxNDYsIDIyNSwgMjI1LCAxNDgsIDI0NCwgNjMsIDAsIDAsIDAsIDAsIDAsIDMyLCAxMiwgNjEsIDExNCwgMjExLCAyMTUsIDI0MCwgNDIsIDE2MywgMjQ0LCA2MywgMCwgMCwgMCwgMCwgMCwgODAsIDMwLCAxODksIDEsIDE4NCwgMTA5LCAyMzQsIDEyNSwgMTc3LCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDcsIDYxLCAyMjUsIDQxLCA1NCwgMjEzLCAyMTgsIDE5MSwgMjQ0LCA2MywgMCwgMCwgMCwgMCwgMCwgMTI4LCAxOSwgMTg5LCA1MCwgMTkzLCAyMywgMTg0LCA2NSwgMjA2LCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDAsIDYxLCAyMTksIDIyMSwgMjUzLCAxNTMsIDE3OCwgMjIwLCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDQ0LCA2MSwgMTUwLCAxNzEsIDIxNiwgMTI5LCA0NSwgMjM1LCAyNDQsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMjQsIDI4LCAxODksIDIsIDQ1LCAxNTcsIDExOCwgMTc4LCAyNDksIDI0NCwgNjMsIDAsIDAsIDAsIDAsIDAsIDMyLCAyNSwgNjEsIDE5MywgNDksIDY5LCAxMjcsIDY1LCA4LCAyNDUsIDYzLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDgsIDE4OSwgNDIsIDEwMiwgMjA3LCAxNjIsIDIxOCwgMjIsIDI0NSwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MCwgMTg4LCAyMzQsIDgxLCA2MywgMjMyLCAxMjUsIDM3LCAyNDUsIDYzLCAwLCAwLCAwLCAwLCAwLCA4LCA3NCwgNjEsIDIxOCwgNzgsIDE1NywgODYsIDQzLCA1MiwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgMjE2LCAzOCwgMTg5LCAyNiwgMTcyLCAyNDYsIDI0NCwgMjI2LCA2NiwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgNjgsIDUwLCAxODksIDIxOSwgMTQ4LCA5MywgMjAyLCAxNjQsIDgxLCAyNDUsIDYzLCAwLCAwLCAwLCAwLCAwLCA2MCwgNzIsIDYxLCAxMDcsIDE3LCAyMzMsIDIyMSwgMTEyLCA5NiwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTc2LCAzNiwgNjEsIDIyMiwgNDEsIDE4MSwgNTQsIDcxLCAxMTEsIDI0NSwgNjMsIDAsIDAsIDAsIDAsIDAsIDkwLCA2NSwgNjEsIDE0LCAxOTYsIDIyNiwgMjE5LCAzOSwgMTI2LCAyNDUsIDYzLCAwLCAwLCAwLCAwLCAwLCAyMjQsIDQxLCAxODksIDExMSwgMTk5LCAxNTEsIDIxMiwgMTgsIDE0MSwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgOCwgMzUsIDE4OSwgNzYsIDExLCAyNTUsIDM5LCA4LCAxNTYsIDI0NSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIzNiwgNzcsIDYxLCAzOSwgODQsIDcyLCAyMjEsIDcsIDE3MSwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMTk2LCAxODgsIDI0NCwgMTIyLCAxNjgsIDI1MSwgMTcsIDE4NiwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgOCwgNDgsIDYxLCAxMSwgNzAsIDg5LCAxMzgsIDM4LCAyMDEsIDI0NSwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwMCwgMzgsIDE4OSwgNjMsIDE0MiwgMTUzLCAxNDQsIDY5LCAyMTYsIDI0NSwgNjMsIDAsIDAsIDAsIDAsIDAsIDE1NCwgNzAsIDYxLCAyMjUsIDMyLCAxNzMsIDIxLCAxMTEsIDIzMSwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgNjQsIDI3LCAxODksIDIwMiwgMjM1LCAyMjAsIDMyLCAxNjMsIDI0NiwgMjQ1LCA2MywgMCwgMCwgMCwgMCwgMCwgMTEyLCAyMywgNjEsIDE4NCwgMjIwLCAxMTgsIDE4NSwgMjI1LCA1LCAyNDYsIDYzLCAwLCAwLCAwLCAwLCAwLCAyNDgsIDM4LCA2MSwgMjEsIDI0NywgMjA1LCAyMzAsIDQyLCAyMSwgMjQ2LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMSwgNjEsIDQ5LCA4NSwgNTgsIDE3NiwgMTI2LCAzNiwgMjQ2LCA2MywgMCwgMCwgMCwgMCwgMCwgMjA4LCAyMSwgMTg5LCAxODEsIDQxLCAyNSwgMjksIDIyMSwgNTEsIDI0NiwgNjMsIDAsIDAsIDAsIDAsIDAsIDIwOCwgMTgsIDE4OSwgMTksIDE5NSwgMjA0LCA1MiwgNzAsIDY3LCAyNDYsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDIzNCwgMTg4LCAyNTAsIDE0MiwgMTg4LCAyNTQsIDE4NSwgODIsIDI0NiwgNjMsIDAsIDAsIDAsIDAsIDAsIDk2LCA0MCwgMTg5LCAxNTEsIDUxLCA4NSwgMTMwLCA1NiwgOTgsIDI0NiwgNjMsIDAsIDAsIDAsIDAsIDAsIDI1NCwgMTEzLCA2MSwgMTQyLCA1MCwgOCwgMTk5LCAxOTMsIDExMywgMjQ2LCA2MywgMCwgMCwgMCwgMCwgMCwgMzIsIDU1LCAxODksIDEyNiwgMTY5LCA3NiwgMjEyLCA4NSwgMTI5LCAyNDYsIDYzLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDIzMCwgNjAsIDExMywgMTQ4LCAxNTgsIDE3NywgMjQ0LCAxNDQsIDI0NiwgNjMsIDAsIDAsIDAsIDAsIDAsIDEyMCwgNDEsIDE4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDkyLCAwLCAwLCAxMCwgMTcwLCAwLCAwLCAxMTYsIDkyLCAwLCAwLCAzNSwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCA3MiwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOCwgNjMsIDY4LCAxNzIsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDQsIDAsIDAsIDE2MCwgNTEsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE2MCwgNTEsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE2MCwgNTEsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDE3NiwgNTEsIDAsIDAsIDE5MiwgNTEsIDAsIDAsIDEzNiwgNTEsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDE5MiwgNjIsIDAsIDAsIDEzNiwgNTEsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDI0OCwgNTEsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDI0OCwgNTEsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMjQ4LCA1MSwgMCwgMCwgMjQ4LCA2MiwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNDgsIDYyLCAwLCAwLCA4LCA1MiwgMCwgMCwgMTkyLCA1MSwgMCwgMCwgMjI0LCA1MSwgMCwgMCwgMjQ4LCA2MiwgMCwgMCwgMTkyLCA2MiwgMCwgMCwgMjI0LCA1MSwgMCwgMCwgMjQ4LCA2MiwgMCwgMCwgMjQsIDYzLCAwLCAwLCA3MiwgNTIsIDAsIDAsIDE3NiwgNjIgXSwgImk4IiwgQUxMT0NfTk9ORSwgUnVudGltZS5HTE9CQUxfQkFTRSArIDEwMjQwKTsKYWxsb2NhdGUoWyA3MiwgNTIsIDAsIDAsIDIwMCwgNjIsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDcyLCA1MiwgMCwgMCwgMjQ4LCA2MiwgMCwgMCwgMjAwLCA2MiwgMCwgMCwgMjQ4LCA2MiwgMCwgMCwgODgsIDUyLCAwLCAwLCAxOTIsIDUxLCAwLCAwLCA0OCwgNTIsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDE5MiwgNjIsIDAsIDAsIDQ4LCA1MiwgMCwgMCwgMjQ4LCA2MiwgMCwgMCwgMjAwLCA2MiwgMCwgMCwgMTUyLCA1MiwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTUyLCA1MiwgMCwgMCwgMTYsIDYzLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAxNTIsIDUyLCAwLCAwLCAyNDgsIDYyLCAwLCAwLCAxNiwgNjMsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDE2OCwgNTIsIDAsIDAsIDE5MiwgNTEsIDAsIDAsIDEyOCwgNTIsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDE5MiwgNjIsIDAsIDAsIDEyOCwgNTIsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDE2LCA2MywgMCwgMCwgMTkyLCA1MiwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMjI0LCA1MSwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTI4LCA1MiwgMCwgMCwgMjMyLCA1MiwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDUzLCAwLCAwLCAxLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCA0LCAwLCAwLCAwLCA2NCwgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDcyLCA1MywgMCwgMCwgNSwgMCwgMCwgMCwgNiwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMiwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNiwgNTMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNiwgNTMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTYsIDUzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNiwgNTMsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE2LCA1MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDUzLCAwLCAwLCA5LCAwLCAwLCAwLCAxMCwgMCwgMCwgMCwgMTEsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDEyLCAwLCAwLCAwLCAxNDQsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDUzLCAwLCAwLCA1LCAwLCAwLCAwLCAxMywgMCwgMCwgMCwgMTQsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDE1LCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDk2LCA1MywgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjI0LCA1MSwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgOTYsIDUzLCAwLCAwLCAyNDAsIDYyLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDIwOCwgNTMsIDAsIDAsIDE2LCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDQsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAyMjQsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzIsIDUzLCAwLCAwLCA1LCAwLCAwLCAwLCAyMCwgMCwgMCwgMCwgMjEsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDIyLCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNTMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNTMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNDAsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAzMiwgNTQsIDAsIDAsIDIzLCAwLCAwLCAwLCAyNCwgMCwgMCwgMCwgMjUsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDI2LCAwLCAwLCAwLCA0OCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDU2LCA1NCwgMCwgMCwgNSwgMCwgMCwgMCwgMjcsIDAsIDAsIDAsIDI4LCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAyOSwgMCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgNTQsIDAsIDAsIDMwLCAwLCAwLCAwLCAzMSwgMCwgMCwgMCwgMzIsIDAsIDAsIDAsIDYsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAxMjgsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDU0LCAwLCAwLCA1LCAwLCAwLCAwLCAzNCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDM2LCAwLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCA4MCwgNTQsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjI0LCA1MSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCA4MCwgNTQsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjI0LCA1MSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDgwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyMjQsIDUxLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDU0LCAwLCAwLCAzNywgMCwgMCwgMCwgMzgsIDAsIDAsIDAsIDM5LCAwLCAwLCAwLCA3LCAwLCAwLCAwLCA0MCwgMCwgMCwgMCwgMjA4LCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2LCA1NCwgMCwgMCwgNSwgMCwgMCwgMCwgNDEsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCA0MywgMCwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTYwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE2MCwgNTQsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNzYsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgNTUsIDAsIDAsIDQ0LCAwLCAwLCAwLCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDgsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAzMiwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA1NSwgMCwgMCwgNDgsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCA1MCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgNTEsIDAsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDI0MCwgNTQsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDI0MCwgNTQsIDAsIDAsIDIyNCwgNTEsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDI0MCwgNTQsIDAsIDAsIDIyNCwgNTEsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDE5MiwgNjIsIDAsIDAsIDI0MCwgNTQsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNDAsIDU0LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgOTYsIDU1LCAwLCAwLCA1MiwgMCwgMCwgMCwgNTMsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCA5LCAwLCAwLCAwLCA1NSwgMCwgMCwgMCwgMTEyLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwLCA1NSwgMCwgMCwgNSwgMCwgMCwgMCwgNTYsIDAsIDAsIDAsIDU3LCAwLCAwLCAwLCAyLCAwLCAwLCAwLCA1OCwgMCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzYsIDU1LCAwLCAwLCA1OSwgMCwgMCwgMCwgNjAsIDAsIDAsIDAsIDYxLCAwLCAwLCAwLCAxMCwgMCwgMCwgMCwgNjIsIDAsIDAsIDAsIDE5MiwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDIwMCwgNTUsIDAsIDAsIDUsIDAsIDAsIDAsIDYzLCAwLCAwLCAwLCA2NCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgNjUsIDAsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTQ0LCA1NSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDAsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNDQsIDU1LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNDQsIDU1LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE0NCwgNTUsIDAsIDAsIDI0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYsIDAsIDAsIDY2LCAwLCAwLCAwLCA2NywgMCwgMCwgMCwgNjgsIDAsIDAsIDAsIDExLCAwLCAwLCAwLCA2OSwgMCwgMCwgMCwgMTYsIDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAyNCwgNTYsIDAsIDAsIDUsIDAsIDAsIDAsIDcwLCAwLCAwLCAwLCA3MSwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgNzIsIDAsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjI0LCA1NSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMCwgNjMsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjI0LCA1NSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDAsIDYzLCAwLCAwLCAyNDAsIDYyLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDIyNCwgNTUsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMjI0LCA1NSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgNTYsIDAsIDAsIDczLCAwLCAwLCAwLCA3NCwgMCwgMCwgMCwgNzUsIDAsIDAsIDAsIDEyLCAwLCAwLCAwLCA3NiwgMCwgMCwgMCwgOTYsIDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQsIDU2LCAwLCAwLCA1LCAwLCAwLCAwLCA3NywgMCwgMCwgMCwgNzgsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDc5LCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDQ4LCA1NiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTYwLCA1NiwgMCwgMCwgODAsIDAsIDAsIDAsIDgxLCAwLCAwLCAwLCA4MiwgMCwgMCwgMCwgMTMsIDAsIDAsIDAsIDgzLCAwLCAwLCAwLCAxNzYsIDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAxODQsIDU2LCAwLCAwLCA1LCAwLCAwLCAwLCA4NCwgMCwgMCwgMCwgODUsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDg2LCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDEyOCwgNTYsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxMjgsIDU2LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCA1NiwgMCwgMCwgODcsIDAsIDAsIDAsIDg4LCAwLCAwLCAwLCA4OSwgMCwgMCwgMCwgMTQsIDAsIDAsIDAsIDkwLCAwLCAwLCAwLCAwLCA1NywgMCwgMCwgMCwgMCwgMCwgMCwgOCwgNTcsIDAsIDAsIDUsIDAsIDAsIDAsIDkxLCAwLCAwLCAwLCA5MiwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgOTMsIDAsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjA4LCA1NiwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNDgsIDYyLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCA2NCwgNTcsIDAsIDAsIDk0LCAwLCAwLCAwLCA5NSwgMCwgMCwgMCwgOTYsIDAsIDAsIDAsIDE1LCAwLCAwLCAwLCA5NywgMCwgMCwgMCwgODAsIDU3LCAwLCAwLCAwLCAwLCAwLCAwLCA4OCwgNTcsIDAsIDAsIDUsIDAsIDAsIDAsIDk4LCAwLCAwLCAwLCA5OSwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMTAwLCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDMyLCA1NywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNDgsIDYyLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDU3LCAwLCAwLCAxMDEsIDAsIDAsIDAsIDEwMiwgMCwgMCwgMCwgMTAzLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAxNjAsIDU3LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjgsIDU3LCAwLCAwLCA1LCAwLCAwLCAwLCAxMDUsIDAsIDAsIDAsIDEwNiwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMTA3LCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDExMiwgNTcsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjQsIDU3LCAwLCAwLCAxMDgsIDAsIDAsIDAsIDEwOSwgMCwgMCwgMCwgMTEwLCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgMTExLCAwLCAwLCAwLCAyNDAsIDU3LCAwLCAwLCAwLCAwLCAwLCAwLCAyNDgsIDU3LCAwLCAwLCA1LCAwLCAwLCAwLCAxMTIsIDAsIDAsIDAsIDExMywgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMTE0LCAwLCAwLCAwLCAxODQsIDU3LCAwLCAwLCAxOTIsIDU3LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTkyLCA1NywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA1OCwgMCwgMCwgMTE1LCAwLCAwLCAwLCAxMTYsIDAsIDAsIDAsIDExNywgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDExOCwgMCwgMCwgMCwgNjQsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCA3MiwgNTgsIDAsIDAsIDUsIDAsIDAsIDAsIDExOSwgMCwgMCwgMCwgMTIwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAxMjEsIDAsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTYsIDU4LCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAxNiwgNTgsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTYsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDU4LCAwLCAwLCAxMjIsIDAsIDAsIDAsIDEyMywgMCwgMCwgMCwgMTI0LCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMTI1LCAwLCAwLCAwLCAxNDQsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIsIDU4LCAwLCAwLCA1LCAwLCAwLCAwLCAxMjYsIDAsIDAsIDAsIDEyNywgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMTI4LCAwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDk2LCA1OCwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgOTYsIDU4LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDk2LCA1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA4LCA1OCwgMCwgMCwgMTI5LCAwLCAwLCAwLCAxMzAsIDAsIDAsIDAsIDEzMSwgMCwgMCwgMCwgMjAsIDAsIDAsIDAsIDEzMiwgMCwgMCwgMCwgMjI0LCA1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMyLCA1OCwgMCwgMCwgNSwgMCwgMCwgMCwgMTMzLCAwLCAwLCAwLCAxMzQsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDEzNSwgMCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNzYsIDU4LCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAxNzYsIDU4LCAwLCAwLCAyNCwgNjMsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE3NiwgNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDMyLCA1OSwgMCwgMCwgMTM2LCAwLCAwLCAwLCAxMzcsIDAsIDAsIDAsIDEzOCwgMCwgMCwgMCwgMjEsIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgNDgsIDU5LCAwLCAwLCAwLCAwLCAwLCAwLCA1NiwgNTksIDAsIDAsIDUsIDAsIDAsIDAsIDE0MCwgMCwgMCwgMCwgMTQxLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAxNDIsIDAsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDAsIDU5LCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAwLCA1OSwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAwLCA1OSwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMTkyLCA2MiwgMCwgMCwgMCwgNTksIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgNTksIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDgwLCA1OSwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMTkyLCA2MiwgMCwgMCwgODAsIDU5LCAwLCAwLCAxNiwgNjMsIDAsIDAsIDE2LCA2MywgMCwgMCwgODAsIDU5LCAwLCAwLCAxNiwgNjMsIDAsIDAsIDgwLCA1OSwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMTYwLCA1OSwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTI4LCA1OSwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMTYsIDYzLCAwLCAwLCAxMjgsIDU5LCAwLCAwLCAxMjgsIDUyLCAwLCAwLCAxMjgsIDUyLCAwLCAwLCAyMDgsIDU5LCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAxNzYsIDU5LCAwLCAwLCAxNiwgNjMsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDE3NiwgNTksIDAsIDAsIDEyOCwgNTIsIDAsIDAsIDE2LCA2MywgMCwgMCwgMTkyLCA1OSwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMTkyLCA1OSwgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2LCA1OSwgMCwgMCwgNSwgMCwgMCwgMCwgMTQzLCAwLCAwLCAwLCAxNDQsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMyLCA1OSwgMCwgMCwgMTQ2LCAwLCAwLCAwLCAxNDcsIDAsIDAsIDAsIDE0OCwgMCwgMCwgMCwgMjIsIDAsIDAsIDAsIDE0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ4LCA1OSwgMCwgMCwgMTUwLCAwLCAwLCAwLCAxNTEsIDAsIDAsIDAsIDE1MiwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4LCA2MCwgMCwgMCwgMTU0LCAwLCAwLCAwLCAxNTUsIDAsIDAsIDAsIDE1NiwgMCwgMCwgMCwgMjMsIDAsIDAsIDAsIDE1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDYwLCAwLCAwLCAxNTgsIDAsIDAsIDAsIDE1OSwgMCwgMCwgMCwgMTYwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA2MCwgMCwgMCwgMTYyLCAwLCAwLCAwLCAxNjMsIDAsIDAsIDAsIDE2NCwgMCwgMCwgMCwgMjQsIDAsIDAsIDAsIDE2NSwgMCwgMCwgMCwgOTYsIDYwLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCA2NCwgNjAsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDI0OCwgNjIsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNDgsIDYyLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCA2NCwgNjAsIDAsIDAsIDEyOCwgNTIsIDAsIDAsIDIyNCwgNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNCwgNjAsIDAsIDAsIDE2NiwgMCwgMCwgMCwgMTY3LCAwLCAwLCAwLCAxNjgsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwLCA2MCwgMCwgMCwgMTcwLCAwLCAwLCAwLCAxNzEsIDAsIDAsIDAsIDE3MiwgMCwgMCwgMCwgMjUsIDAsIDAsIDAsIDE3MywgMCwgMCwgMCwgMTc2LCA2MCwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTQ0LCA2MCwgMCwgMCwgMjQwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNDQsIDYwLCAwLCAwLCAxNzYsIDYyLCAwLCAwLCAxNDQsIDYwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMTQ0LCA2MCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNDQsIDYwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjI0LCA2MCwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMTkyLCA2MCwgMCwgMCwgMjQwLCA1NCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxOTIsIDYwLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA2MiwgMCwgMCwgMjQsIDYzLCAwLCAwLCAxNiwgNjEsIDAsIDAsIDE3NiwgNjIsIDAsIDAsIDI0MCwgNjAsIDAsIDAsIDI0MCwgNTQsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQwLCA2MCwgMCwgMCwgMTc2LCA2MiwgMCwgMCwgMjQwLCA2MCwgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0MCwgNjAsIDAsIDAsIDI0LCA2MywgMCwgMCwgMjQsIDYzLCAwLCAwLCAyNCwgNjMsIDAsIDAsIDI0MCwgNjIsIDAsIDAsIDI0LCA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDYxLCAwLCAwLCAxLCAwLCAwLCAwLCAxNzQsIDAsIDAsIDAsIDE3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDYxLCAwLCAwLCAxNzYsIDAsIDAsIDAsIDE3NywgMCwgMCwgMCwgMTc4LCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAxNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0LCA2MSwgMCwgMCwgMTgwLCAwLCAwLCAwLCAxODEsIDAsIDAsIDAsIDE4MiwgMCwgMCwgMCwgMjYsIDAsIDAsIDAsIDE4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDYxLCAwLCAwLCAxODQsIDAsIDAsIDAsIDE4NSwgMCwgMCwgMCwgMTg2LCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAxODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2LCA2MSwgMCwgMCwgMTg4LCAwLCAwLCAwLCAxODksIDAsIDAsIDAsIDE5MCwgMCwgMCwgMCwgMjcsIDAsIDAsIDAsIDE5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyLCA2MSwgMCwgMCwgMTkyLCAwLCAwLCAwLCAxOTMsIDAsIDAsIDAsIDE5NCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMTk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDYxLCAwLCAwLCAxOTYsIDAsIDAsIDAsIDE5NywgMCwgMCwgMCwgMTk4LCAwLCAwLCAwLCAyOCwgMCwgMCwgMCwgMTk5LCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NCwgNjIsIDAsIDAsIDIwMCwgMCwgMCwgMCwgMjAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjAsIDYyLCAwLCAwLCAyMDIsIDAsIDAsIDAsIDIwMywgMCwgMCwgMCwgMjA0LCAwLCAwLCAwLCAyMDUsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgNjIsIDAsIDAsIDIwMiwgMCwgMCwgMCwgMjA2LCAwLCAwLCAwLCAyMDQsIDAsIDAsIDAsIDIwNSwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIsIDYzLCAwLCAwLCAyMDIsIDAsIDAsIDAsIDIwNywgMCwgMCwgMCwgMjA0LCAwLCAwLCAwLCAyMDUsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA2MywgMCwgMCwgMjAyLCAwLCAwLCAwLCAyMDgsIDAsIDAsIDAsIDIwNCwgMCwgMCwgMCwgMjA1LCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDYyLCAwLCAwLCAyMDIsIDAsIDAsIDAsIDIwOSwgMCwgMCwgMCwgMjA0LCAwLCAwLCAwLCAyMDUsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOSwgMTU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDgsIDkyLCAwLCAwLCAxMDQsIDkzLCAwLCAwLCAxMDQsIDkzLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAyNDQsIDE2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDIzNiwgMTYzLCAwLCAwLCAwLCA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNzMsIDExMCwgMTE2LCAwLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNjgsIDExMSwgMTE3LCA5OCwgMTA4LCAxMDEsIDAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA2NywgMTA0LCA5NywgMTE0LCAwLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNzAsIDEwOCwgMTExLCA5NywgMTE2LCAwLCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDg0LCAxMTEsIDExMSwgMTA4LCAxMTUsIDAsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDY4LCA5OCwgMTA4LCAwLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA3MCwgMTA4LCAxMTEsIDk3LCAxMTYsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTAxLCAxMTYsIDExNiwgMTA1LCAxMTAsIDEwMywgMTE1LCAwLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDgyLCA5NywgMTE2LCAxMDEsIDAsIDk5LCAxMDQsIDk3LCAxMTAsIDExMCwgMTAxLCAxMDgsIDExNSwgMCwgOTgsIDExNywgMTAyLCAxMDIsIDEwMSwgMTE0LCA4MywgMTA1LCAxMjIsIDEwMSwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDc5LCAxMTUsIDk5LCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDc5LCAxMTUsIDk5LCA2MiwgMCwgMTE1LCAxMDUsIDExMCwgMTAxLCAxMTksIDk3LCAxMTgsIDEwMSwgMCwgOTksIDExMSwgMTE1LCAxMTksIDk3LCAxMTgsIDEwMSwgMCwgMTEyLCAxMDQsIDk3LCAxMTUsIDExMSwgMTE0LCAwLCAxMTUsIDk3LCAxMTksIDAsIDExNiwgMTE0LCAxMDUsIDk3LCAxMTAsIDEwMywgMTA4LCAxMDEsIDAsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMCwgMTEyLCAxMTcsIDEwOCwgMTE1LCAxMDEsIDAsIDExMCwgMTExLCAxMDUsIDExNSwgMTAxLCAwLCAxMTUsIDEwNSwgMTEwLCAxMDEsIDk4LCAxMTcsIDEwMiwgMCwgMTE1LCAxMDUsIDExMCwgMTAxLCA5OCwgMTE3LCAxMDIsIDUyLCAwLCAxMTUsIDk3LCAxMTksIDExMCwgMCwgMTE0LCAxMDEsIDk5LCAxMTYsIDAsIDExMiwgMTA0LCA5NywgMTE1LCAxMDEsIDgyLCAxMDEsIDExNSwgMTAxLCAxMTYsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OSwgMTEwLCAxMTgsIDEwMSwgMTA4LCAxMTEsIDExMiwgMTAxLCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDY5LCAxMTAsIDExOCwgMTAxLCAxMDgsIDExMSwgMTEyLCAxMDEsIDYyLCAwLCAxMDgsIDEwNSwgMTEwLCAxMDEsIDAsIDExNiwgMTE0LCAxMDUsIDEwMywgMTAzLCAxMDEsIDExNCwgMCwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwNSwgMTE2LCAxMTcsIDEwMCwgMTAxLCAwLCAxMTgsIDk3LCAxMDgsIDEwNSwgMTEwLCAxMDAsIDEwMSwgMTIwLCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwMSwgMTA4LCA5NywgMTIxLCAxMDgsIDEwNSwgMTEwLCAxMDEsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwMSwgMTA4LCA5NywgMTIxLCAxMDgsIDEwNSwgMTEwLCAxMDEsIDYyLCAwLCAxMDAsIDEwOCwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDUsIDEwOCwgMTE2LCAxMDEsIDExNCwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgMTA1LCAxMDgsIDExNiwgMTAxLCAxMTQsIDYyLCAwLCAxMDgsIDExMSwgMTE0LCAxMDEsIDExNSwgMCwgMTA0LCAxMDUsIDExNCwgMTAxLCAxMTUsIDAsIDk4LCA5NywgMTEwLCAxMDAsIDExMiwgOTcsIDExNSwgMTE1LCAwLCAxMDgsIDExMSwgMTEyLCA5NywgMTE1LCAxMTUsIDAsIDEwNCwgMTA1LCAxMTIsIDk3LCAxMTUsIDExNSwgMCwgOTksIDExNywgMTE2LCAxMTEsIDEwMiwgMTAyLCAwLCAxMTQsIDEwMSwgMTE1LCAxMTEsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCAxMDUsIDEyMCwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgMTA1LCAxMjAsIDYyLCAwLCAxMTUsIDExNiwgMTAxLCAxMTQsIDEwMSwgMTExLCAwLCAxMTMsIDExNywgOTcsIDEwMCwgMCwgOTcsIDEwOSwgOTgsIDEwNSwgMTE1LCAxMTEsIDExMCwgMTA1LCA5OSwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDc2LCA5NywgMTAzLCA2OSwgMTIwLCAxMTIsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzYsIDk3LCAxMDMsIDY5LCAxMjAsIDExMiwgNjAsIDEwMCwgMTExLCAxMTcsIDk4LCAxMDgsIDEwMSwgNjIsIDYyLCAwLCAxMDUsIDExMCwgMTA1LCAxMTYsIDAsIDk3LCAxMDAsIDEwMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDAsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDAsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgMCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA4MiwgMTAxLCA5OSwgMTA1LCAxMTIsIDExNCwgMTExLCA5OSwgOTcsIDEwOCwgMCwgMTE4LCA5NywgMTA4LCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDYyLCAwLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTAxLCAxMTAsIDEwMywgMTE2LCAxMDQsIDAsIDEwNSwgMTE1LCA4MiwgMTAxLCA5NywgMTAwLCAxMjEsIDAsIDExMiwgMTA4LCA5NywgMTIxLCA3OSwgMTEwLCA5OSwgMTAxLCAwLCAxMTIsIDEwOCwgOTcsIDEyMSwgNTIsIDAsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCA5NywgMTEyLCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCA5NywgMTEyLCA2MiwgMCwgMTA4LCAxMDUsIDExMCwgMTA4LCAxMDUsIDExMCwgMCwgMTA4LCAxMDUsIDExMCwgMTAxLCAxMjAsIDExMiwgMCwgMTAxLCAxMjAsIDExMiwgMTA4LCAxMDUsIDExMCwgMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEyMSwgMTEwLCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMjEsIDExMCwgNjIsIDAsIDEwMywgOTcsIDExNiwgMTAxLCAwLCA5OSwgMTExLCAxMDksIDExMiwgMTE0LCAxMDEsIDExNSwgMTE1LCAxMTEsIDExNCwgMCwgOTksIDExMSwgMTA5LCAxMTIsIDExNCwgMTAxLCAxMTUsIDExNSwgMCwgMTE1LCAxMDEsIDExNiwgNjUsIDExNiwgMTE2LCA5NywgOTksIDEwNywgMCwgMTE1LCAxMDEsIDExNiwgODIsIDEwMSwgMTA4LCAxMDEsIDk3LCAxMTUsIDEwMSwgMCwgMTE1LCAxMDEsIDExNiwgODQsIDEwNCwgMTE0LCAxMDEsIDExNSwgMTA0LCAxMTEsIDEwOCwgMTAwLCAwLCAxMTUsIDEwMSwgMTE2LCA4MiwgOTcsIDExNiwgMTA1LCAxMTEsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OSwgMTEwLCAxMTgsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCA2MiwgMCwgOTcsIDExNCwgMCwgOTcsIDEwMCwgMTE1LCAxMTQsIDAsIDExNSwgMTAxLCAxMTYsIDY4LCAxMDEsIDk5LCA5NywgMTIxLCAwLCAxMTUsIDEwMSwgMTE2LCA4MywgMTE3LCAxMTUsIDExNiwgOTcsIDEwNSwgMTEwLCAwLCA5OSwgMTExLCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNiwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDk5LCAxMTEsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE2LCA2MiwgMCwgMTA5LCAxMTYsIDExMSwgMTAyLCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwNSwgMTE1LCAxMTYsIDExMSwgMTE0LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwNSwgMTE1LCAxMTYsIDExMSwgMTE0LCAxMTYsIDEwNSwgMTExLCAxMTAsIDYyLCAwLCAxMDIsIDk3LCAxMTUsIDExNiwgNjUsIDExNiwgOTcsIDExMCwgMCwgOTcsIDExNiwgOTcsIDExMCwgNjgsIDEwNSwgMTE1LCAxMTYsIDAsIDEwMiwgOTcsIDExNSwgMTE2LCA2NSwgMTE2LCA5NywgMTEwLCA2OCwgMTA1LCAxMTUsIDExNiwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDgsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTQsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDEwOCwgOTcsIDExMCwgMTAzLCAxMDEsIDExNCwgNjIsIDAsIDEwMiwgMTA4LCA5NywgMTEwLCAxMDMsIDEwMSwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDY3LCAxMDQsIDExMSwgMTE0LCAxMTcsIDExNSwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2NywgMTA0LCAxMTEsIDExNCwgMTE3LCAxMTUsIDYyLCAwLCA5OSwgMTA0LCAxMTEsIDExNCwgMTE3LCAxMTUsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgNjcsIDY2LCAxMDgsIDExMSwgOTksIDEwNywgMTAxLCAxMTQsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDY3LCA2NiwgMTA4LCAxMTEsIDk5LCAxMDcsIDEwMSwgMTE0LCA2MiwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA4NiwgNzAsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDg2LCA3MCwgNjIsIDAsIDExNSwgMTAxLCAxMTYsIDY3LCAxMTcsIDExNiwgMTExLCAxMDIsIDEwMiwgMCwgMTE1LCAxMDEsIDExNiwgODIsIDEwMSwgMTE1LCAxMTEsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDc1LCAxMDUsIDk5LCAxMDcsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzUsIDEwNSwgOTksIDEwNywgNjIsIDAsIDExNSwgMTAxLCAxMTYsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCAxMTAsIDk3LCAxMTQsIDEwMSwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTEwLCA5NywgMTE0LCAxMDEsIDYyLCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzIsIDk3LCAxMTYsIDExNSwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MiwgOTcsIDExNiwgMTE1LCA2MiwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDY3LCAxMDgsIDExMSwgOTksIDEwNywgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2NywgMTA4LCAxMTEsIDk5LCAxMDcsIDYyLCAwLCAxMTYsIDEwNSwgOTksIDEwNywgMTAxLCAxMTQsIDAsIDExNSwgMTAxLCAxMTYsIDg0LCAxMDEsIDEwOSwgMTEyLCAxMTEsIDAsIDExNSwgMTAxLCAxMTYsIDg0LCAxMDUsIDk5LCAxMDcsIDExNSwgODAsIDEwMSwgMTE0LCA2NiwgMTAxLCA5NywgMTE2LCAwLCAxMDUsIDExNSwgODQsIDEwNSwgOTksIDEwNywgMCwgOTksIDExNywgMTE0LCAxMTQsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDExNywgMTEwLCAxMTYsIDAsIDExMiwgMTA4LCA5NywgMTIxLCA3MiwgMTAxLCA5NywgMTAwLCAwLCA5OCwgMTEyLCAxMTUsIDAsIDk4LCAxMTIsIDEwOSwgMCwgMTE2LCAxMDUsIDk5LCAxMDcsIDAsIDExNiwgMTA1LCA5OSwgMTA3LCAxMTUsIDAsIDEwMiwgMTE0LCAxMDEsIDEwMSwgMTA1LCAxMTAsIDEwMywgMzIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA2OCwgOTcsIDExNiwgOTcsIDAsIDExMiwgMTE3LCAxMTUsIDEwNCwgOTUsIDk4LCA5NywgOTksIDEwNywgMCwgMTE0LCAxMDEsIDExNSwgMTA1LCAxMjIsIDEwMSwgMCwgMTE1LCAxMDUsIDEyMiwgMTAxLCAwLCAxMDMsIDEwMSwgMTE2LCAwLCAxMTUsIDEwMSwgMTE2LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDU0LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDczLCAxMDUsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgMTA1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTEsIDk1LCA5NSwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA5NSwgOTgsIDk3LCAxMTUsIDEwMSwgNzMsIDEwNSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCAxMDUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDk1LCA5OCwgOTcsIDExNSwgMTAxLCA5NSwgOTksIDExMSwgMTA5LCAxMDksIDExMSwgMTEwLCA3MywgNzYsIDk4LCA0OSwgNjksIDY5LCA2OSwgMCwgODAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTQsIDExOCwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNzMsIDEwNSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCAxMDUsIDY5LCA2OSwgNjksIDY5LCAwLCA4MCwgNzUsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTQsIDExOCwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNzMsIDEwNSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCAxMDUsIDY5LCA2OSwgNjksIDY5LCAwLCAxMDUsIDEwNSwgMCwgMTE4LCAwLCAxMTgsIDEwNSwgMCwgMTE4LCAxMDUsIDEwNSwgMTA1LCAwLCAxMTgsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMTA1LCAxMDUsIDEwNSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDUxLCAxMTgsIDk3LCAxMDgsIDY5LCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDU0LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDczLCAxMDAsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgMTAwLCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTEsIDk1LCA5NSwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA5NSwgOTgsIDk3LCAxMTUsIDEwMSwgNzMsIDEwMCwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCAxMDAsIDY5LCA2OSwgNjksIDY5LCAwLCA4MCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1NCwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA3MywgMTAwLCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDEwMCwgNjksIDY5LCA2OSwgNjksIDAsIDgwLCA3NSwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1NCwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA3MywgMTAwLCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDEwMCwgNjksIDY5LCA2OSwgNjksIDAsIDExOCwgMTA1LCAxMDUsIDEwMCwgMCwgMTE4LCAxMDUsIDEwNSwgMTA1LCAxMDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTAwLCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDU0LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDczLCA5OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA5OSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDUxLCA5NSwgOTUsIDExOCwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgOTUsIDk4LCA5NywgMTE1LCAxMDEsIDczLCA5OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA5OSwgNjksIDY5LCA2OSwgNjksIDAsIDgwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDU0LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDczLCA5OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA5OSwgNjksIDY5LCA2OSwgNjksIDAsIDgwLCA3NSwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1NCwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA3MywgOTksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgOTksIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDU0LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDczLCAxMDIsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgMTAyLCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTEsIDk1LCA5NSwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA5NSwgOTgsIDk3LCAxMTUsIDEwMSwgNzMsIDEwMiwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCAxMDIsIDY5LCA2OSwgNjksIDY5LCAwLCA4MCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1NCwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA3MywgMTAyLCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDEwMiwgNjksIDY5LCA2OSwgNjksIDAsIDgwLCA3NSwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1NCwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA3MywgMTAyLCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDEwMiwgNjksIDY5LCA2OSwgNjksIDAsIDExOCwgMTA1LCAxMDUsIDEwMiwgMCwgMTE4LCAxMDUsIDEwNSwgMTA1LCAxMDIsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTAyLCAwLCA0OSwgNDksIDExOCwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgODQsIDExMSwgMTExLCAxMDgsIDExNSwgMCwgODAsIDQ5LCA0OSwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA4NCwgMTExLCAxMTEsIDEwOCwgMTE1LCAwLCA4MCwgNzUsIDQ5LCA0OSwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA4NCwgMTExLCAxMTEsIDEwOCwgMTE1LCAwLCAxMTgsIDEwNSwgMTA1LCAwLCA0OSwgNTAsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTAxLCAxMTYsIDExNiwgMTA1LCAxMTAsIDEwMywgMTE1LCAwLCA4MCwgNDksIDUwLCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDEwMSwgMTE2LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDExNSwgMCwgODAsIDc1LCA0OSwgNTAsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTAxLCAxMTYsIDExNiwgMTA1LCAxMTAsIDEwMywgMTE1LCAwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc5LCAxMTUsIDk5LCAwLCA4MCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3OSwgMTE1LCA5OSwgMCwgODAsIDc1LCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc5LCAxMTUsIDk5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzksIDExNSwgOTksIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc5LCAxMTUsIDk5LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3OSwgMTE1LCA5OSwgNjksIDY5LCAwLCAxMDUsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3OSwgMTE1LCA5OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTAwLCAxMDUsIDEwNSwgMTAwLCAwLCAxMDAsIDEwNSwgMTA1LCAxMDAsIDEwMCwgMTAwLCAwLCAxMDAsIDEwNSwgMTA1LCAxMDAsIDEwMCwgMCwgMTAwLCAxMDUsIDEwNSwgMCwgNDksIDUwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCAxMDEsIDEwOCwgMTExLCAxMTIsIDEwMSwgMCwgODAsIDQ5LCA1MCwgMTA5LCA5NywgMTIwLCAxMDUsIDY5LCAxMTAsIDExOCwgMTAxLCAxMDgsIDExMSwgMTEyLCAxMDEsIDAsIDgwLCA3NSwgNDksIDUwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCAxMDEsIDEwOCwgMTExLCAxMTIsIDEwMSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA0OSwgNTAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OSwgMTEwLCAxMTgsIDEwMSwgMTA4LCAxMTEsIDExMiwgMTAxLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDUwLCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCAxMDEsIDEwOCwgMTExLCAxMTIsIDEwMSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1MCwgMTA5LCA5NywgMTIwLCAxMDUsIDY5LCAxMTAsIDExOCwgMTAxLCAxMDgsIDExMSwgMTEyLCAxMDEsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA0OSwgNTAsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OSwgMTEwLCAxMTgsIDEwMSwgMTA4LCAxMTEsIDExMiwgMTAxLCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCAxMDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgNDksIDUxLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwMSwgMTA4LCA5NywgMTIxLCAxMDgsIDEwNSwgMTEwLCAxMDEsIDAsIDgwLCA0OSwgNTEsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTAxLCAxMDgsIDk3LCAxMjEsIDEwOCwgMTA1LCAxMTAsIDEwMSwgMCwgODAsIDc1LCA0OSwgNTEsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTAxLCAxMDgsIDk3LCAxMjEsIDEwOCwgMTA1LCAxMTAsIDEwMSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA0OSwgNTEsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTAxLCAxMDgsIDk3LCAxMjEsIDEwOCwgMTA1LCAxMTAsIDEwMSwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1MSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMDEsIDEwOCwgOTcsIDEyMSwgMTA4LCAxMDUsIDExMCwgMTAxLCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDUxLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwMSwgMTA4LCA5NywgMTIxLCAxMDgsIDEwNSwgMTEwLCAxMDEsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA0OSwgNTEsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTAxLCAxMDgsIDk3LCAxMjEsIDEwOCwgMTA1LCAxMTAsIDEwMSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTAwLCAxMDUsIDEwNSwgMTAwLCAxMDUsIDEwMCwgMCwgMTAwLCAxMDUsIDEwNSwgMTAwLCAxMDUsIDEwMCwgMTA1LCAwLCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgMTA1LCAxMDgsIDExNiwgMTAxLCAxMTQsIDAsIDgwLCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgMTA1LCAxMDgsIDExNiwgMTAxLCAxMTQsIDAsIDgwLCA3NSwgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDEwNSwgMTA4LCAxMTYsIDEwMSwgMTE0LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDUsIDEwOCwgMTE2LCAxMDEsIDExNCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDUsIDEwOCwgMTE2LCAxMDEsIDExNCwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDUsIDEwOCwgMTE2LCAxMDEsIDExNCwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTAxLCAxMDksIDExMiwgMTA4LCA5NywgOTksIDEwMSwgNzMsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDUsIDEwOCwgMTE2LCAxMDEsIDExNCwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgMTA1LCAxMjAsIDAsIDgwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCAxMDUsIDEyMCwgMCwgODAsIDc1LCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCAxMDUsIDEyMCwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCAxMDUsIDEyMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDEwNSwgMTIwLCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgMTA1LCAxMjAsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCAxMDUsIDEyMCwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTE4LCAxMDUsIDEwNSwgMTAwLCAxMDUsIDEwMCwgMCwgMTE4LCAxMDUsIDEwNSwgMTAwLCAxMDUsIDEwMCwgMTAwLCAwLCAxMTgsIDEwNSwgMTA1LCAxMDAsIDEwNSwgMTAwLCAxMDAsIDEwMCwgMCwgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNzYsIDk3LCAxMDMsIDY5LCAxMjAsIDExMiwgNzMsIDEwMCwgNjksIDAsIDgwLCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NiwgOTcsIDEwMywgNjksIDEyMCwgMTEyLCA3MywgMTAwLCA2OSwgMCwgODAsIDc1LCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NiwgOTcsIDEwMywgNjksIDEyMCwgMTEyLCA3MywgMTAwLCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NiwgOTcsIDEwMywgNjksIDEyMCwgMTEyLCA3MywgMTAwLCA2OSwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDUwLCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA1MCwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDc2LCA5NywgMTAzLCA2OSwgMTIwLCAxMTIsIDczLCAxMDAsIDY5LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNzYsIDk3LCAxMDMsIDY5LCAxMjAsIDExMiwgNzMsIDEwMCwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NiwgOTcsIDEwMywgNjksIDEyMCwgMTEyLCA3MywgMTAwLCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNTAsIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTE4LCAxMDUsIDEwNSwgMTAwLCAxMDAsIDAsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAwLCA4MCwgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDAsIDgwLCA3NSwgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDk3LCAxMTIsIDAsIDgwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCA5NywgMTEyLCAwLCA4MCwgNzUsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDk3LCAxMTIsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgOTcsIDExMiwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDk3LCAxMTIsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCA5NywgMTEyLCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgOTcsIDExMiwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTAwLCAxMDUsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAwLCAxMDAsIDEwNSwgMTAwLCAxMDAsIDEwMCwgMCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTIxLCAxMTAsIDAsIDgwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMjEsIDExMCwgMCwgODAsIDc1LCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMjEsIDExMCwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMjEsIDExMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEyMSwgMTEwLCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTIxLCAxMTAsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMjEsIDExMCwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTAwLCAxMDUsIDEwNSwgMTAwLCAxMDAsIDEwNSwgMTAwLCAxMDAsIDAsIDEwMCwgMTA1LCAxMDUsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDY5LCAxMTAsIDExOCwgMCwgODAsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCAwLCA4MCwgNzUsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OSwgMTEwLCAxMTgsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDY5LCAxMTAsIDExOCwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTAxLCAxMDksIDExMiwgMTA4LCA5NywgOTksIDEwMSwgNzMsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNjksIDExMCwgMTE4LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCAxMDAsIDEwNSwgMTA1LCAxMDAsIDEwMCwgMTAwLCAxMDUsIDEwNSwgMCwgMTAwLCAxMDUsIDEwNSwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwNSwgMTA1LCAwLCAxMDAsIDEwNSwgMTA1LCAxMDAsIDEwNSwgMCwgNTUsIDk5LCAxMTEsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE2LCAwLCA4MCwgNTUsIDk5LCAxMTEsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE2LCAwLCA4MCwgNzUsIDU1LCA5OSwgMTExLCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNiwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA1NSwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA1NSwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDEwMCwgMTA1LCAxMDUsIDEwNSwgMCwgNDksIDUyLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwNSwgMTE1LCAxMTYsIDExMSwgMTE0LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsIDgwLCA0OSwgNTIsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTA1LCAxMTUsIDExNiwgMTExLCAxMTQgXSwgImk4IiwgQUxMT0NfTk9ORSwgUnVudGltZS5HTE9CQUxfQkFTRSArIDIwNDgwKTsKYWxsb2NhdGUoWyAxMTYsIDEwNSwgMTExLCAxMTAsIDAsIDgwLCA3NSwgNDksIDUyLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwNSwgMTE1LCAxMTYsIDExMSwgMTE0LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNDksIDUyLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwNSwgMTE1LCAxMTYsIDExMSwgMTE0LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA0OSwgNTIsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgMTA1LCAxMTUsIDExNiwgMTExLCAxMTQsIDExNiwgMTA1LCAxMTEsIDExMCwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1MiwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCAxMDUsIDExNSwgMTE2LCAxMTEsIDExNCwgMTE2LCAxMDUsIDExMSwgMTEwLCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNDksIDUyLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDEwNSwgMTE1LCAxMTYsIDExMSwgMTE0LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDQ5LCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDgsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTQsIDAsIDgwLCA0OSwgNDksIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgMTA4LCA5NywgMTEwLCAxMDMsIDEwMSwgMTE0LCAwLCA4MCwgNzUsIDQ5LCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDgsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTQsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNDksIDQ5LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDEwOCwgOTcsIDExMCwgMTAzLCAxMDEsIDExNCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCAxMDgsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTQsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA0OSwgNDksIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgMTA4LCA5NywgMTEwLCAxMDMsIDEwMSwgMTE0LCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNDksIDQ5LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDEwOCwgOTcsIDExMCwgMTAzLCAxMDEsIDExNCwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgMTAwLCAxMDUsIDEwNSwgMTAwLCAxMDUsIDEwMCwgMTAwLCAxMDAsIDAsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDY3LCAxMDQsIDExMSwgMTE0LCAxMTcsIDExNSwgMCwgODAsIDQ5LCA0OCwgMTA5LCA5NywgMTIwLCAxMDUsIDY3LCAxMDQsIDExMSwgMTE0LCAxMTcsIDExNSwgMCwgODAsIDc1LCA0OSwgNDgsIDEwOSwgOTcsIDEyMCwgMTA1LCA2NywgMTA0LCAxMTEsIDExNCwgMTE3LCAxMTUsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwNCwgMTExLCAxMTQsIDExNywgMTE1LCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwNCwgMTExLCAxMTQsIDExNywgMTE1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwNCwgMTExLCAxMTQsIDExNywgMTE1LCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNDksIDQ4LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwNCwgMTExLCAxMTQsIDExNywgMTE1LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA0OSwgNTEsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgNjcsIDY2LCAxMDgsIDExMSwgOTksIDEwNywgMTAxLCAxMTQsIDAsIDgwLCA0OSwgNTEsIDEwOSwgOTcsIDEyMCwgMTA1LCA2OCwgNjcsIDY2LCAxMDgsIDExMSwgOTksIDEwNywgMTAxLCAxMTQsIDAsIDgwLCA3NSwgNDksIDUxLCAxMDksIDk3LCAxMjAsIDEwNSwgNjgsIDY3LCA2NiwgMTA4LCAxMTEsIDk5LCAxMDcsIDEwMSwgMTE0LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDQ5LCA1MSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCA2NywgNjYsIDEwOCwgMTExLCA5OSwgMTA3LCAxMDEsIDExNCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1MSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCA2NywgNjYsIDEwOCwgMTExLCA5OSwgMTA3LCAxMDEsIDExNCwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1MSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCA2NywgNjYsIDEwOCwgMTExLCA5OSwgMTA3LCAxMDEsIDExNCwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTAxLCAxMDksIDExMiwgMTA4LCA5NywgOTksIDEwMSwgNzMsIDQ5LCA1MSwgMTA5LCA5NywgMTIwLCAxMDUsIDY4LCA2NywgNjYsIDEwOCwgMTExLCA5OSwgMTA3LCAxMDEsIDExNCwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgODYsIDcwLCAwLCA4MCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgODYsIDcwLCAwLCA4MCwgNzUsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDg2LCA3MCwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA4NiwgNzAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA4NiwgNzAsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA4NiwgNzAsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA1NSwgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCA4NiwgNzAsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDEwNSwgMTA1LCAxMDUsIDEwMCwgMCwgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NSwgMTA1LCA5OSwgMTA3LCAwLCA4MCwgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NSwgMTA1LCA5OSwgMTA3LCAwLCA4MCwgNzUsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzUsIDEwNSwgOTksIDEwNywgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA1NiwgMTA5LCA5NywgMTIwLCAxMDUsIDc1LCAxMDUsIDk5LCAxMDcsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NiwgMTA5LCA5NywgMTIwLCAxMDUsIDc1LCAxMDUsIDk5LCAxMDcsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NiwgMTA5LCA5NywgMTIwLCAxMDUsIDc1LCAxMDUsIDk5LCAxMDcsIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA1NiwgMTA5LCA5NywgMTIwLCAxMDUsIDc1LCAxMDUsIDk5LCAxMDcsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDU3LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDExMCwgOTcsIDExNCwgMTAxLCAwLCA4MCwgNTcsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTEwLCA5NywgMTE0LCAxMDEsIDAsIDgwLCA3NSwgNTcsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTEwLCA5NywgMTE0LCAxMDEsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNTcsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTEwLCA5NywgMTE0LCAxMDEsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NywgMTA5LCA5NywgMTIwLCAxMDUsIDgzLCAxMTAsIDk3LCAxMTQsIDEwMSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDU3LCAxMDksIDk3LCAxMjAsIDEwNSwgODMsIDExMCwgOTcsIDExNCwgMTAxLCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNTcsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MywgMTEwLCA5NywgMTE0LCAxMDEsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzIsIDk3LCAxMTYsIDExNSwgMCwgODAsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzIsIDk3LCAxMTYsIDExNSwgMCwgODAsIDc1LCA1NiwgMTA5LCA5NywgMTIwLCAxMDUsIDcyLCA5NywgMTE2LCAxMTUsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MiwgOTcsIDExNiwgMTE1LCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MiwgOTcsIDExNiwgMTE1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MiwgOTcsIDExNiwgMTE1LCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MiwgOTcsIDExNiwgMTE1LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA1NywgMTA5LCA5NywgMTIwLCAxMDUsIDY3LCAxMDgsIDExMSwgOTksIDEwNywgMCwgODAsIDU3LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwOCwgMTExLCA5OSwgMTA3LCAwLCA4MCwgNzUsIDU3LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwOCwgMTExLCA5OSwgMTA3LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDU3LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwOCwgMTExLCA5OSwgMTA3LCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTcsIDEwOSwgOTcsIDEyMCwgMTA1LCA2NywgMTA4LCAxMTEsIDk5LCAxMDcsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NywgMTA5LCA5NywgMTIwLCAxMDUsIDY3LCAxMDgsIDExMSwgOTksIDEwNywgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTAxLCAxMDksIDExMiwgMTA4LCA5NywgOTksIDEwMSwgNzMsIDU3LCAxMDksIDk3LCAxMjAsIDEwNSwgNjcsIDEwOCwgMTExLCA5OSwgMTA3LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCAzNywgMTAwLCAzMiwgMTA1LCAxMTUsIDMyLCAxMTAsIDExMSwgMTE2LCAzMiwgOTcsIDMyLCAxMTIsIDExMSwgMTE5LCAxMDEsIDExNCwgMzIsIDExMSwgMTAyLCAzMiwgMTE2LCAxMTksIDExMSwgMTAsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgNzAsIDg0LCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDYyLCAwLCAxMTgsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgMCwgMTA1LCAxMDUsIDEwNSwgMTAyLCAwLCAxMDksIDk3LCAxMDMsIDExNSwgODQsIDExMSwgNjgsIDY2LCAwLCAxMDIsIDEwNSwgMTA1LCAwLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE2LCAxMTQsIDk3LCAxMDgsIDcwLCAxMDgsIDk3LCAxMTYsIDExMCwgMTAxLCAxMTUsIDExNSwgMCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNiwgMTE0LCA5NywgMTA4LCA2NywgMTAxLCAxMTAsIDExNiwgMTE0LCAxMTEsIDEwNSwgMTAwLCAwLCAxMDMsIDEwMSwgMTE2LCA3NywgOTcsIDEwMywgMTEwLCAxMDUsIDExNiwgMTE3LCAxMDAsIDEwMSwgMCwgMTAyLCAxMDUsIDEwNSwgMTA1LCAwLCAxMDMsIDEwMSwgMTE2LCA3NywgOTcsIDEwMywgMTEwLCAxMDUsIDExNiwgMTE3LCAxMDAsIDEwMSwgNjgsIDY2LCAwLCAxMDMsIDEwMSwgMTE2LCA4MCwgMTA0LCA5NywgMTE1LCAxMDEsIDAsIDExOSwgMTA1LCAxMTAsIDEwMCwgMTExLCAxMTksIDgzLCAxMDUsIDEyMiwgMTAxLCAwLCAxMDQsIDExMSwgMTEyLCA4MywgMTA1LCAxMjIsIDEwMSwgMCwgOTgsIDEwNSwgMTEwLCAxMTUsIDAsIDEwOSwgOTcsIDEwMywgMTEwLCAxMDUsIDExNiwgMTE3LCAxMDAsIDEwMSwgMTE1LCAwLCAxMTIsIDEwNCwgOTcsIDExNSwgMTAxLCAxMTUsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MywgNzAsIDcwLCA4NCwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MywgNzAsIDcwLCA4NCwgNjIsIDAsIDEwMiwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgNzksIDk5LCAxMTYsIDk3LCAxMTgsIDEwMSwgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMjIsIDEwMSwgMTE0LCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTIyLCAxMDEsIDExNCwgNjIsIDAsIDExOCwgMTA1LCAxMDUsIDEwMiwgMTA1LCAxMDUsIDAsIDk5LCA5NywgMTA4LCA5OSwgMTE3LCAxMDgsIDk3LCAxMTYsIDEwMSwgMCwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTA1LCAxMTAsIDEwMywgODIsIDk3LCAxMTYsIDEwMSwgMCwgMTEwLCA4MywgMTEyLCAxMDEsIDk5LCAxMTYsIDExNCwgMTE3LCAxMDksIDAsIDExMCwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgMTE1LCAwLCAxMTAsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDExNSwgODAsIDEwMSwgMTE0LCA3OSwgOTksIDExNiwgOTcsIDExOCwgMTAxLCAwLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE2LCAxMTQsIDExNywgMTA5LCA3MCwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEsIDExMCwgOTksIDEyMSwgODMsIDExMiwgOTcsIDExMCwgMCwgMTAyLCAxMDUsIDExNCwgMTE1LCAxMTYsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTEzLCAxMTcsIDEwMSwgMTEwLCA5OSwgMTIxLCAwLCA5NywgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA3MCwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEsIDExMCwgOTksIDEyMSwgNzMsIDExMCwgOTksIDExNCwgMTAxLCAxMDksIDEwMSwgMTEwLCAxMTYsIDAsIDEwMywgMTAxLCAxMTYsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDAsIDEwMywgMTAxLCAxMTYsIDgwLCAxMDEsIDk3LCAxMDcsIDAsIDEwMywgMTAxLCAxMTYsIDgwLCAxMDEsIDk3LCAxMDcsIDcyLCAxMTEsIDEwOCwgMTAwLCA4NCwgMTA1LCAxMDksIDEwMSwgMCwgMTEyLCAxMDEsIDk3LCAxMDcsIDcyLCAxMTEsIDEwOCwgMTAwLCA4NCwgMTA1LCAxMDksIDEwMSwgMCwgMTEyLCAxMDEsIDk3LCAxMDcsIDY4LCAxMDEsIDk5LCA5NywgMTIxLCA4MiwgOTcsIDExNiwgMTAxLCAwLCAxMDMsIDEwMSwgMTE2LCA4MywgMTEyLCAxMDEsIDUwLCA2NSwgMTE4LCAxMDMsIDAsIDEwOCwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDgxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCAwLCAxMDgsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCA4MSwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgOTksIDEwMSwgMTEyLCAxMTYsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNTAsIDQ5LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgNzksIDk5LCAxMTYsIDk3LCAxMTgsIDEwMSwgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMjIsIDEwMSwgMTE0LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDUwLCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTIyLCAxMDEsIDExNCwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDUwLCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTIyLCAxMDEsIDExNCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDUwLCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTIyLCAxMDEsIDExNCwgNjksIDY5LCAwLCA4MCwgNzUsIDUwLCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTIyLCAxMDEsIDExNCwgMCwgODAsIDUwLCA0OSwgMTA5LCA5NywgMTIwLCAxMDUsIDcwLCA3MCwgODQsIDc5LCA5OSwgMTE2LCA5NywgMTE4LCAxMDEsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTIyLCAxMDEsIDExNCwgMCwgNTAsIDQ5LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgNzksIDk5LCAxMTYsIDk3LCAxMTgsIDEwMSwgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMjIsIDEwMSwgMTE0LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTAxLCAxMDksIDExMiwgMTA4LCA5NywgOTksIDEwMSwgNzMsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzMsIDcwLCA3MCwgODQsIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MywgNzAsIDcwLCA4NCwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzMsIDcwLCA3MCwgODQsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNDksIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA1NiwgMTA5LCA5NywgMTIwLCAxMDUsIDczLCA3MCwgNzAsIDg0LCA2OSwgNjksIDAsIDgwLCA3NSwgNTYsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MywgNzAsIDcwLCA4NCwgMCwgODAsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzMsIDcwLCA3MCwgODQsIDAsIDU2LCAxMDksIDk3LCAxMjAsIDEwNSwgNzMsIDcwLCA3MCwgODQsIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgNzAsIDg0LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDQ5LCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA0OSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgNjksIDY5LCAwLCA4MCwgNzUsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgMCwgODAsIDU1LCAxMDksIDk3LCAxMjAsIDEwNSwgNzAsIDcwLCA4NCwgMCwgNTUsIDEwOSwgOTcsIDEyMCwgMTA1LCA3MCwgNzAsIDg0LCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDcwLCA2NywgNjcsIDAsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDYwLCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDcwLCA2NywgNjcsIDYyLCAwLCAxMTUsIDEwMSwgMTE2LCAxMTcsIDExMiwgMCwgMTE4LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTAwLCAxMDAsIDEwNSwgMCwgMTA5LCAxMDIsIDk5LCA5OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgNzAsIDY3LCA2NywgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMTUsIDEwMSwgMTE0LCA3MywgMTAwLCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNTAsIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgNzAsIDY3LCA2NywgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMTUsIDEwMSwgMTE0LCA3MywgMTAwLCA2OSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDQ5LCA1NCwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCA3MCwgNjcsIDY3LCA2NSwgMTEwLCA5NywgMTA4LCAxMjEsIDExNSwgMTAxLCAxMTQsIDczLCAxMDAsIDY5LCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNTAsIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDUwLCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDU0LCAxMDksIDk3LCAxMjAsIDEwNSwgNzcsIDcwLCA2NywgNjcsIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTE1LCAxMDEsIDExNCwgNzMsIDEwMCwgNjksIDY5LCA2OSwgMCwgODAsIDc1LCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgNzAsIDY3LCA2NywgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMTUsIDEwMSwgMTE0LCA3MywgMTAwLCA2OSwgMCwgODAsIDQ5LCA1NCwgMTA5LCA5NywgMTIwLCAxMDUsIDc3LCA3MCwgNjcsIDY3LCA2NSwgMTEwLCA5NywgMTA4LCAxMjEsIDExNSwgMTAxLCAxMTQsIDczLCAxMDAsIDY5LCAwLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA3NywgNzAsIDY3LCA2NywgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMTUsIDEwMSwgMTE0LCA3MywgMTAwLCA2OSwgMCwgMTA5LCA5NywgMTIwLCAxMDUsIDg0LCAxMDUsIDEwOSwgMTAxLCAxMTUsIDExNiwgMTE0LCAxMDEsIDExNiwgOTksIDEwNCwgMCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNjAsIDEwOSwgOTcsIDEyMCwgMTA1LCA4NCwgMTA1LCAxMDksIDEwMSwgMTE1LCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDYwLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2MiwgMzIsIDYyLCAwLCAxMTUsIDEwMSwgMTE2LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMCwgMTAzLCAxMDEsIDExNiwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTE1LCAxMDEsIDEwMCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgMTAzLCAxMDEsIDExNiwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgMTE1LCAxMDEsIDExNiwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgMTEyLCAxMDgsIDk3LCAxMjEsIDAsIDEwMCwgMTA1LCAxMDUsIDEwMCwgMTAwLCAxMDUsIDEwMCwgMCwgMTEyLCAxMDgsIDk3LCAxMjEsIDUwLCAwLCAxMDAsIDEwNSwgMTA1LCAxMDAsIDEwMCwgMTA1LCAwLCAxMDksIDk3LCAxMjAsIDEwNSwgODAsIDEwNSwgMTE2LCA5OSwgMTA0LCA4MywgMTA0LCAxMDUsIDEwMiwgMTE2LCAwLCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA2MCwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDEwNCwgMTA1LCAxMDIsIDExNiwgNjAsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDYyLCAzMiwgNjIsIDAsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MCwgMTA1LCAxMTYsIDk5LCAxMDQsIDgzLCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDAsIDExNSwgMTAxLCAxMTYsIDc2LCAxMTEsIDExMSwgMTEyLCA4MywgMTE2LCA5NywgMTE0LCAxMTYsIDAsIDExNSwgMTAxLCAxMTYsIDc2LCAxMTEsIDExMSwgMTEyLCA2OSwgMTEwLCAxMDAsIDAsIDEwMCwgMTA1LCAxMDUsIDEwMCwgMTAwLCAxMDAsIDEwNSwgMTAwLCAwLCA1NywgMTA5LCA5NywgMTIwLCAxMDUsIDcxLCAxMTQsIDk3LCAxMDUsIDExMCwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDAsIDQ5LCA1MSwgMTA5LCA5NywgMTIwLCAxMDUsIDcxLCAxMTQsIDk3LCAxMDUsIDExMCwgNjYsIDk3LCAxMTUsIDEwMSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDEwMSwgMTA5LCAxMTIsIDEwOCwgOTcsIDk5LCAxMDEsIDczLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MCwgMTA1LCAxMTYsIDk5LCAxMDQsIDgzLCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA1MSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1NCwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDExNiwgMTE0LCAxMDEsIDExNiwgOTksIDEwNCwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDgsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgNzMsIDgwLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MCwgMTA1LCAxMTYsIDk5LCAxMDQsIDgzLCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDUzLCAxMTUsIDEwOSwgOTcsIDExNCwgMTE2LCA5NSwgMTEyLCAxMTYsIDExNCwgOTUsIDExNiwgMTE0LCA5NywgMTA1LCAxMTYsIDczLCA3OCwgODMsIDk1LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA4MywgNTEsIDk1LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDUxLCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDU0LCAxMDksIDk3LCAxMjAsIDEwNSwgODAsIDEwNSwgMTE2LCA5OSwgMTA0LCA4MywgMTE2LCAxMTQsIDEwMSwgMTE2LCA5OSwgMTA0LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgNjksIDY5LCAwLCA4MCwgNzUsIDQ5LCA1NCwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDExNiwgMTE0LCAxMDEsIDExNiwgOTksIDEwNCwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDAsIDgwLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MCwgMTA1LCAxMTYsIDk5LCAxMDQsIDgzLCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCAwLCA0OSwgNTQsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MCwgMTA1LCAxMTYsIDk5LCAxMDQsIDgzLCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTAxLCAxMDksIDExMiwgMTA4LCA5NywgOTksIDEwMSwgNzMsIDQ5LCA1MiwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDEwNCwgMTA1LCAxMDIsIDExNiwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgODMsIDUxLCA5NSwgNjksIDY5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgNDksIDUyLCAxMDksIDk3LCAxMjAsIDEwNSwgODAsIDEwNSwgMTE2LCA5OSwgMTA0LCA4MywgMTA0LCAxMDUsIDEwMiwgMTE2LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDUwLCA0OCwgOTUsIDk1LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA3MywgODAsIDQ5LCA1MiwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDEwNCwgMTA1LCAxMDIsIDExNiwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNTMsIDExNSwgMTA5LCA5NywgMTE0LCAxMTYsIDk1LCAxMTIsIDExNiwgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgNzMsIDc4LCA4MywgOTUsIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDgzLCA1MSwgOTUsIDY5LCA2OSwgNjksIDQ5LCA0OSwgMTE4LCA5NywgMTA4LCA5NSwgMTAwLCAxMDEsIDEwOCwgMTAxLCAxMTYsIDEwMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNTEsIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA0OSwgNTIsIDEwOSwgOTcsIDEyMCwgMTA1LCA4MCwgMTA1LCAxMTYsIDk5LCAxMDQsIDgzLCAxMDQsIDEwNSwgMTAyLCAxMTYsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCA2OSwgNjksIDAsIDgwLCA3NSwgNDksIDUyLCAxMDksIDk3LCAxMjAsIDEwNSwgODAsIDEwNSwgMTE2LCA5OSwgMTA0LCA4MywgMTA0LCAxMDUsIDEwMiwgMTE2LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgMCwgODAsIDQ5LCA1MiwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDEwNCwgMTA1LCAxMDIsIDExNiwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDAsIDQ5LCA1MiwgMTA5LCA5NywgMTIwLCAxMDUsIDgwLCAxMDUsIDExNiwgOTksIDEwNCwgODMsIDEwNCwgMTA1LCAxMDIsIDExNiwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMDEsIDEwOSwgMTEyLCAxMDgsIDk3LCA5OSwgMTAxLCA3MywgNDksIDUzLCAxMDksIDk3LCAxMjAsIDEwNSwgODQsIDEwNSwgMTA5LCAxMDEsIDExNSwgMTE2LCAxMTQsIDEwMSwgMTE2LCA5OSwgMTA0LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgNzgsIDgzLCA5NSwgNTcsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTExLCAxMTQsIDczLCA4MywgNTEsIDk1LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNDgsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDczLCA0OSwgNTMsIDEwOSwgOTcsIDEyMCwgMTA1LCA4NCwgMTA1LCAxMDksIDEwMSwgMTE1LCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCA2OSwgNjksIDY5LCA0OSwgNDksIDExOCwgOTcsIDEwOCwgOTUsIDEwMCwgMTAxLCAxMDgsIDEwMSwgMTE2LCAxMDEsIDExNCwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDczLCA4MCwgNDksIDUzLCAxMDksIDk3LCAxMjAsIDEwNSwgODQsIDEwNSwgMTA5LCAxMDEsIDExNSwgMTE2LCAxMTQsIDEwMSwgMTE2LCA5OSwgMTA0LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA1MywgMTE1LCAxMDksIDk3LCAxMTQsIDExNiwgOTUsIDExMiwgMTE2LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCA3MywgNzgsIDgzLCA5NSwgNDksIDQ4LCAxMTUsIDEwNCwgOTcsIDExNCwgMTAxLCAxMDAsIDk1LCAxMTIsIDExNiwgMTE0LCA3MywgODMsIDUxLCA5NSwgNjksIDY5LCA2OSwgNDksIDQ5LCAxMTgsIDk3LCAxMDgsIDk1LCAxMDAsIDEwMSwgMTA4LCAxMDEsIDExNiwgMTAxLCAxMTQsIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDgzLCA1MSwgOTUsIDY5LCA2OSwgNjksIDY5LCAwLCA3OCwgODMsIDExNiwgNTEsIDk1LCA5NSwgNDksIDQ5LCA0OCwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgMTEyLCAxMTYsIDExNCwgNzMsIDQ5LCA1MywgMTA5LCA5NywgMTIwLCAxMDUsIDg0LCAxMDUsIDEwOSwgMTAxLCAxMTUsIDExNiwgMTE0LCAxMDEsIDExNiwgOTksIDEwNCwgNzMsIDQ5LCA1MiwgMTA0LCA5NywgMTEwLCAxMTAsIDg3LCAxMDUsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMTEsIDExNCwgNjksIDY5LCA2OSwgMCwgODAsIDc1LCA0OSwgNTMsIDEwOSwgOTcsIDEyMCwgMTA1LCA4NCwgMTA1LCAxMDksIDEwMSwgMTE1LCAxMTYsIDExNCwgMTAxLCAxMTYsIDk5LCAxMDQsIDczLCA0OSwgNTIsIDEwNCwgOTcsIDExMCwgMTEwLCA4NywgMTA1LCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTExLCAxMTQsIDY5LCAwLCA4MCwgNDksIDUzLCAxMDksIDk3LCAxMjAsIDEwNSwgODQsIDEwNSwgMTA5LCAxMDEsIDExNSwgMTE2LCAxMTQsIDEwMSwgMTE2LCA5OSwgMTA0LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgMCwgNDksIDUzLCAxMDksIDk3LCAxMjAsIDEwNSwgODQsIDEwNSwgMTA5LCAxMDEsIDExNSwgMTE2LCAxMTQsIDEwMSwgMTE2LCA5OSwgMTA0LCA3MywgNDksIDUyLCAxMDQsIDk3LCAxMTAsIDExMCwgODcsIDEwNSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDExMSwgMTE0LCA2OSwgMCwgMTE4LCAxMTEsIDEwNSwgMTAwLCAwLCA5OCwgMTExLCAxMTEsIDEwOCwgMCwgOTksIDEwNCwgOTcsIDExNCwgMCwgMTE1LCAxMDUsIDEwMywgMTEwLCAxMDEsIDEwMCwgMzIsIDk5LCAxMDQsIDk3LCAxMTQsIDAsIDExNywgMTEwLCAxMTUsIDEwNSwgMTAzLCAxMTAsIDEwMSwgMTAwLCAzMiwgOTksIDEwNCwgOTcsIDExNCwgMCwgMTE1LCAxMDQsIDExMSwgMTE0LCAxMTYsIDAsIDExNywgMTEwLCAxMTUsIDEwNSwgMTAzLCAxMTAsIDEwMSwgMTAwLCAzMiwgMTE1LCAxMDQsIDExMSwgMTE0LCAxMTYsIDAsIDEwNSwgMTEwLCAxMTYsIDAsIDExNywgMTEwLCAxMTUsIDEwNSwgMTAzLCAxMTAsIDEwMSwgMTAwLCAzMiwgMTA1LCAxMTAsIDExNiwgMCwgMTA4LCAxMTEsIDExMCwgMTAzLCAwLCAxMTcsIDExMCwgMTE1LCAxMDUsIDEwMywgMTEwLCAxMDEsIDEwMCwgMzIsIDEwOCwgMTExLCAxMTAsIDEwMywgMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMCwgMTAwLCAxMTEsIDExNywgOTgsIDEwOCwgMTAxLCAwLCAxMTUsIDExNiwgMTAwLCA1OCwgNTgsIDExNSwgMTE2LCAxMTQsIDEwNSwgMTEwLCAxMDMsIDAsIDExNSwgMTE2LCAxMDAsIDU4LCA1OCwgOTgsIDk3LCAxMTUsIDEwNSwgOTksIDk1LCAxMTUsIDExNiwgMTE0LCAxMDUsIDExMCwgMTAzLCA2MCwgMTE3LCAxMTAsIDExNSwgMTA1LCAxMDMsIDExMCwgMTAxLCAxMDAsIDMyLCA5OSwgMTA0LCA5NywgMTE0LCA2MiwgMCwgMTE1LCAxMTYsIDEwMCwgNTgsIDU4LCAxMTksIDExNSwgMTE2LCAxMTQsIDEwNSwgMTEwLCAxMDMsIDAsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA1OCwgNTgsIDExOCwgOTcsIDEwOCwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDk5LCAxMDQsIDk3LCAxMTQsIDYyLCAwLCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNTgsIDU4LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2MCwgMTE1LCAxMDUsIDEwMywgMTEwLCAxMDEsIDEwMCwgMzIsIDk5LCAxMDQsIDk3LCAxMTQsIDYyLCAwLCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNTgsIDU4LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2MCwgMTE3LCAxMTAsIDExNSwgMTA1LCAxMDMsIDExMCwgMTAxLCAxMDAsIDMyLCA5OSwgMTA0LCA5NywgMTE0LCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDExNSwgMTA0LCAxMTEsIDExNCwgMTE2LCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDExNywgMTEwLCAxMTUsIDEwNSwgMTAzLCAxMTAsIDEwMSwgMTAwLCAzMiwgMTE1LCAxMDQsIDExMSwgMTE0LCAxMTYsIDYyLCAwLCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNTgsIDU4LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2MCwgMTA1LCAxMTAsIDExNiwgNjIsIDAsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA1OCwgNTgsIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDYwLCAxMTcsIDExMCwgMTE1LCAxMDUsIDEwMywgMTEwLCAxMDEsIDEwMCwgMzIsIDEwNSwgMTEwLCAxMTYsIDYyLCAwLCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNTgsIDU4LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2MCwgMTA4LCAxMTEsIDExMCwgMTAzLCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDExNywgMTEwLCAxMTUsIDEwNSwgMTAzLCAxMTAsIDEwMSwgMTAwLCAzMiwgMTA4LCAxMTEsIDExMCwgMTAzLCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDEwNSwgMTEwLCAxMTYsIDU2LCA5NSwgMTE2LCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDExNywgMTA1LCAxMTAsIDExNiwgNTYsIDk1LCAxMTYsIDYyLCAwLCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNTgsIDU4LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2MCwgMTA1LCAxMTAsIDExNiwgNDksIDU0LCA5NSwgMTE2LCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDExNywgMTA1LCAxMTAsIDExNiwgNDksIDU0LCA5NSwgMTE2LCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDEwNSwgMTEwLCAxMTYsIDUxLCA1MCwgOTUsIDExNiwgNjIsIDAsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA1OCwgNTgsIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDYwLCAxMTcsIDEwNSwgMTEwLCAxMTYsIDUxLCA1MCwgOTUsIDExNiwgNjIsIDAsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA1OCwgNTgsIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDYwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCA2MiwgMCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDU4LCA1OCwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNjAsIDEwMCwgMTExLCAxMTcsIDk4LCAxMDgsIDEwMSwgNjIsIDAsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA1OCwgNTgsIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDYwLCAxMDgsIDExMSwgMTEwLCAxMDMsIDMyLCAxMDAsIDExMSwgMTE3LCA5OCwgMTA4LCAxMDEsIDYyLCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDQ5LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3MywgMTAxLCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNDksIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDczLCAxMDAsIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA0OSwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNzMsIDEwMiwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDQ5LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3MywgMTA5LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNDksIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDczLCAxMDgsIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA0OSwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNzMsIDEwNiwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDQ5LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3MywgMTA1LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNDksIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDczLCAxMTYsIDY5LCA2OSwgMCwgNzgsIDQ5LCA0OCwgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ5LCA0OSwgMTA5LCAxMDEsIDEwOSwgMTExLCAxMTQsIDEyMSwgOTUsIDExOCwgMTA1LCAxMDEsIDExOSwgNzMsIDExNSwgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDQ5LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3MywgMTA0LCA2OSwgNjksIDAsIDc4LCA0OSwgNDgsIDEwMSwgMTA5LCAxMTUsIDk5LCAxMTQsIDEwNSwgMTEyLCAxMTYsIDEwMSwgMTEwLCA0OSwgNDksIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDk1LCAxMTgsIDEwNSwgMTAxLCAxMTksIDczLCA5NywgNjksIDY5LCAwLCA3OCwgNDksIDQ4LCAxMDEsIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDksIDQ5LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCA5NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3MywgOTksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTAsIDk4LCA5NywgMTE1LCAxMDUsIDk5LCA5NSwgMTE1LCAxMTYsIDExNCwgMTA1LCAxMTAsIDEwMywgNzMsIDExOSwgNzgsIDgzLCA5NSwgNDksIDQ5LCA5OSwgMTA0LCA5NywgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgMTE1LCA3MywgMTE5LCA2OSwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgMTE5LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA1MCwgNDksIDk1LCA5NSwgOTgsIDk3LCAxMTUsIDEwNSwgOTksIDk1LCAxMTUsIDExNiwgMTE0LCAxMDUsIDExMCwgMTAzLCA5NSwgOTksIDExMSwgMTA5LCAxMDksIDExMSwgMTEwLCA3MywgNzYsIDk4LCA0OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTAsIDk4LCA5NywgMTE1LCAxMDUsIDk5LCA5NSwgMTE1LCAxMTYsIDExNCwgMTA1LCAxMTAsIDEwMywgNzMsIDEwNCwgNzgsIDgzLCA5NSwgNDksIDQ5LCA5OSwgMTA0LCA5NywgMTE0LCA5NSwgMTE2LCAxMTQsIDk3LCAxMDUsIDExNiwgMTE1LCA3MywgMTA0LCA2OSwgNjksIDc4LCA4MywgOTUsIDU3LCA5NywgMTA4LCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDExMSwgMTE0LCA3MywgMTA0LCA2OSwgNjksIDY5LCA2OSwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTAsIDk4LCA5NywgMTE1LCAxMDUsIDk5LCA5NSwgMTE1LCAxMTYsIDExNCwgMTA1LCAxMTAsIDEwMywgNzMsIDk5LCA3OCwgODMsIDk1LCA0OSwgNDksIDk5LCAxMDQsIDk3LCAxMTQsIDk1LCAxMTYsIDExNCwgOTcsIDEwNSwgMTE2LCAxMTUsIDczLCA5OSwgNjksIDY5LCA3OCwgODMsIDk1LCA1NywgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMTEsIDExNCwgNzMsIDk5LCA2OSwgNjksIDY5LCA2OSwgMCwgODMsIDExNiwgNTcsIDk4LCA5NywgMTAwLCA5NSwgOTcsIDEwOCwgMTA4LCAxMTEsIDk5LCAwLCA4MywgMTE2LCA1NywgMTAxLCAxMjAsIDk5LCAxMDEsIDExMiwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCA4MywgMTE2LCA1NywgMTE2LCAxMjEsIDExMiwgMTAxLCA5NSwgMTA1LCAxMTAsIDEwMiwgMTExLCAwLCA3OCwgNDksIDQ4LCA5NSwgOTUsIDk5LCAxMjAsIDEyMCwgOTcsIDk4LCAxMDUsIDExOCwgNDksIDQ5LCA1NCwgOTUsIDk1LCAxMTUsIDEwNCwgMTA1LCAxMDksIDk1LCAxMTYsIDEyMSwgMTEyLCAxMDEsIDk1LCAxMDUsIDExMCwgMTAyLCAxMTEsIDY5LCAwLCA3OCwgNDksIDQ4LCA5NSwgOTUsIDk5LCAxMjAsIDEyMCwgOTcsIDk4LCAxMDUsIDExOCwgNDksIDQ5LCA1NSwgOTUsIDk1LCA5OSwgMTA4LCA5NywgMTE1LCAxMTUsIDk1LCAxMTYsIDEyMSwgMTEyLCAxMDEsIDk1LCAxMDUsIDExMCwgMTAyLCAxMTEsIDY5LCAwLCA3OCwgNDksIDQ4LCA5NSwgOTUsIDk5LCAxMjAsIDEyMCwgOTcsIDk4LCAxMDUsIDExOCwgNDksIDQ5LCA1NywgOTUsIDk1LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDk1LCAxMTYsIDEyMSwgMTEyLCAxMDEsIDk1LCAxMDUsIDExMCwgMTAyLCAxMTEsIDY5LCAwLCA3OCwgNDksIDQ4LCA5NSwgOTUsIDk5LCAxMjAsIDEyMCwgOTcsIDk4LCAxMDUsIDExOCwgNDksIDQ5LCA1NSwgOTUsIDk1LCAxMTIsIDk4LCA5NywgMTE1LCAxMDEsIDk1LCAxMTYsIDEyMSwgMTEyLCAxMDEsIDk1LCAxMDUsIDExMCwgMTAyLCAxMTEsIDY5LCAwLCA3OCwgNDksIDQ4LCA5NSwgOTUsIDk5LCAxMjAsIDEyMCwgOTcsIDk4LCAxMDUsIDExOCwgNDksIDUwLCA1MSwgOTUsIDk1LCAxMDIsIDExNywgMTEwLCAxMDAsIDk3LCAxMDksIDEwMSwgMTEwLCAxMTYsIDk3LCAxMDgsIDk1LCAxMTYsIDEyMSwgMTEyLCAxMDEsIDk1LCAxMDUsIDExMCwgMTAyLCAxMTEsIDY5LCAwLCAxMTgsIDAsIDY4LCAxMTAsIDAsIDk4LCAwLCA5OSwgMCwgMTA0LCAwLCA5NywgMCwgMTE1LCAwLCAxMTYsIDAsIDEwNSwgMCwgMTA2LCAwLCAxMDgsIDAsIDEwOSwgMCwgMTAyLCAwLCAxMDAsIDAsIDc4LCA0OSwgNDgsIDk1LCA5NSwgOTksIDEyMCwgMTIwLCA5NywgOTgsIDEwNSwgMTE4LCA0OSwgNTAsIDQ4LCA5NSwgOTUsIDExNSwgMTA1LCA5NSwgOTksIDEwOCwgOTcsIDExNSwgMTE1LCA5NSwgMTE2LCAxMjEsIDExMiwgMTAxLCA5NSwgMTA1LCAxMTAsIDEwMiwgMTExLCA2OSwgMCwgNzgsIDQ5LCA0OCwgOTUsIDk1LCA5OSwgMTIwLCAxMjAsIDk3LCA5OCwgMTA1LCAxMTgsIDQ5LCA1MCwgNDksIDk1LCA5NSwgMTE4LCAxMDksIDEwNSwgOTUsIDk5LCAxMDgsIDk3LCAxMTUsIDExNSwgOTUsIDExNiwgMTIxLCAxMTIsIDEwMSwgOTUsIDEwNSwgMTEwLCAxMDIsIDExMSwgNjksIDAsIDMzLCAzNCwgMTE4LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCAzMiwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgOTUsIDEwMSwgMTE0LCAxMTQsIDExMSwgMTE0LCAzNCwgMCwgNDcsIDg1LCAxMTUsIDEwMSwgMTE0LCAxMTUsIDQ3LCA2OCwgOTcsIDExMCwgNDcsIDY4LCAxMTEsIDk5LCAxMTcsIDEwOSwgMTAxLCAxMTAsIDExNiwgMTE1LCA0NywgODAsIDExNCwgMTExLCAxMDMsIDExNCwgOTcsIDEwOSwgMTA5LCAxMDUsIDExMCwgMTAzLCA0NywgNjksIDEwOSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMDEsIDExMCwgNDcsIDEwMSwgMTA5LCAxMTUsIDEwMCwgMTA3LCA5NSwgMTEyLCAxMTEsIDExNCwgMTE2LCA5NywgOTgsIDEwOCwgMTAxLCA0NywgMTAxLCAxMDksIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTAxLCAxMTAsIDQ3LCA0OSwgNDYsIDUxLCA1MywgNDYsIDQ4LCA0NywgMTE1LCAxMjEsIDExNSwgMTE2LCAxMDEsIDEwOSwgNDcsIDEwNSwgMTEwLCA5OSwgMTA4LCAxMTcsIDEwMCwgMTAxLCA0NywgMTA4LCAxMDUsIDk4LCA5OSwgMTIwLCAxMjAsIDQ3LCAxMTgsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDAsIDk1LCA5NSwgMTE2LCAxMDQsIDExNCwgMTExLCAxMTksIDk1LCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA5NSwgMTAxLCAxMTQsIDExNCwgMTExLCAxMTQsIDAsIDExMiwgMTE2LCAxMDQsIDExNCwgMTAxLCA5NywgMTAwLCA5NSwgMTExLCAxMTAsIDk5LCAxMDEsIDMyLCAxMDIsIDk3LCAxMDUsIDEwOCwgMTE3LCAxMTQsIDEwMSwgMzIsIDEwNSwgMTEwLCAzMiwgOTUsIDk1LCA5OSwgMTIwLCA5NywgOTUsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDMsIDEwOCwgMTExLCA5OCwgOTcsIDEwOCwgMTE1LCA5NSwgMTAyLCA5NywgMTE1LCAxMTYsIDQwLCA0MSwgMCwgMTE1LCAxMTYsIDEwMCwgNTgsIDU4LCA5OCwgOTcsIDEwMCwgOTUsIDk3LCAxMDgsIDEwOCwgMTExLCA5OSwgMCwgMTE2LCAxMDEsIDExNCwgMTA5LCAxMDUsIDExMCwgOTcsIDExNiwgMTAxLCA5NSwgMTA0LCA5NywgMTEwLCAxMDAsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTcsIDExMCwgMTAxLCAxMjAsIDExMiwgMTAxLCA5OSwgMTE2LCAxMDEsIDEwMCwgMTA4LCAxMjEsIDMyLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAxMDEsIDEwMCwgMCwgMTE2LCAxMDEsIDExNCwgMTA5LCAxMDUsIDExMCwgOTcsIDExNiwgMTAxLCA5NSwgMTA0LCA5NywgMTEwLCAxMDAsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTcsIDExMCwgMTAxLCAxMjAsIDExMiwgMTAxLCA5OSwgMTE2LCAxMDEsIDEwMCwgMTA4LCAxMjEsIDMyLCAxMTYsIDEwNCwgMTE0LCAxMDEsIDExOSwgMzIsIDk3LCAxMTAsIDMyLCAxMDEsIDEyMCwgOTksIDEwMSwgMTEyLCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsIDk5LCA5NywgMTEwLCAxMTAsIDExMSwgMTE2LCAzMiwgOTksIDExNCwgMTAxLCA5NywgMTE2LCAxMDEsIDMyLCAxMTIsIDExNiwgMTA0LCAxMTQsIDEwMSwgOTcsIDEwMCwgMzIsIDEwNywgMTAxLCAxMjEsIDMyLCAxMDIsIDExMSwgMTE0LCAzMiwgOTUsIDk1LCA5OSwgMTIwLCA5NywgOTUsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDMsIDEwOCwgMTExLCA5OCwgOTcsIDEwOCwgMTE1LCA0MCwgNDEsIDAsIDk5LCA5NywgMTEwLCAxMTAsIDExMSwgMTE2LCAzMiwgMTIyLCAxMDEsIDExNCwgMTExLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExNiwgMTA0LCAxMTQsIDEwMSwgOTcsIDEwMCwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDMyLCAxMDIsIDExMSwgMTE0LCAzMiwgOTUsIDk1LCA5OSwgMTIwLCA5NywgOTUsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDMsIDEwOCwgMTExLCA5OCwgOTcsIDEwOCwgMTE1LCA0MCwgNDEsIDAsIDExNiwgMTAxLCAxMTQsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDMyLCAxMTksIDEwNSwgMTE2LCAxMDQsIDMyLCAzNywgMTE1LCAzMiwgMTAxLCAxMjAsIDk5LCAxMDEsIDExMiwgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgMTExLCAxMDIsIDMyLCAxMTYsIDEyMSwgMTEyLCAxMDEsIDMyLCAzNywgMTE1LCA1OCwgMzIsIDM3LCAxMTUsIDAsIDExNiwgMTAxLCAxMTQsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDMyLCAxMTksIDEwNSwgMTE2LCAxMDQsIDMyLCAzNywgMTE1LCAzMiwgMTAxLCAxMjAsIDk5LCAxMDEsIDExMiwgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgMTExLCAxMDIsIDMyLCAxMTYsIDEyMSwgMTEyLCAxMDEsIDMyLCAzNywgMTE1LCAwLCAxMTYsIDEwMSwgMTE0LCAxMDksIDEwNSwgMTEwLCA5NywgMTE2LCAxMDUsIDExMCwgMTAzLCAzMiwgMTE5LCAxMDUsIDExNiwgMTA0LCAzMiwgMzcsIDExNSwgMzIsIDEwMiwgMTExLCAxMTQsIDEwMSwgMTA1LCAxMDMsIDExMCwgMzIsIDEwMSwgMTIwLCA5OSwgMTAxLCAxMTIsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgMTE2LCAxMDEsIDExNCwgMTA5LCAxMDUsIDExMCwgOTcsIDExNiwgMTA1LCAxMTAsIDEwMywgMCwgMTE3LCAxMTAsIDk5LCA5NywgMTE3LCAxMDMsIDEwNCwgMTE2LCAwLCA4NCwgMzMsIDM0LCAyNSwgMTMsIDEsIDIsIDMsIDE3LCA3NSwgMjgsIDEyLCAxNiwgNCwgMTEsIDI5LCAxOCwgMzAsIDM5LCAxMDQsIDExMCwgMTExLCAxMTIsIDExMywgOTgsIDMyLCA1LCA2LCAxNSwgMTksIDIwLCAyMSwgMjYsIDgsIDIyLCA3LCA0MCwgMzYsIDIzLCAyNCwgOSwgMTAsIDE0LCAyNywgMzEsIDM3LCAzNSwgMTMxLCAxMzAsIDEyNSwgMzgsIDQyLCA0MywgNjAsIDYxLCA2MiwgNjMsIDY3LCA3MSwgNzQsIDc3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA1LCAxMDYsIDEwNywgMTA4LCAxMTQsIDExNSwgMTE2LCAxMjEsIDEyMiwgMTIzLCAxMjQsIDAsIDczLCAxMDgsIDEwOCwgMTAxLCAxMDMsIDk3LCAxMDgsIDMyLCA5OCwgMTIxLCAxMTYsIDEwMSwgMzIsIDExNSwgMTAxLCAxMTMsIDExNywgMTAxLCAxMTAsIDk5LCAxMDEsIDAsIDY4LCAxMTEsIDEwOSwgOTcsIDEwNSwgMTEwLCAzMiwgMTAxLCAxMTQsIDExNCwgMTExLCAxMTQsIDAsIDgyLCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCAxMTQsIDEwMSwgMTEyLCAxMTQsIDEwMSwgMTE1LCAxMDEsIDExMCwgMTE2LCA5NywgOTgsIDEwOCwgMTAxLCAwLCA3OCwgMTExLCAxMTYsIDMyLCA5NywgMzIsIDExNiwgMTE2LCAxMjEsIDAsIDgwLCAxMDEsIDExNCwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgMTAwLCAxMDEsIDExMCwgMTA1LCAxMDEsIDEwMCwgMCwgNzksIDExMiwgMTAxLCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCAxMTAsIDExMSwgMTE2LCAzMiwgMTEyLCAxMDEsIDExNCwgMTA5LCAxMDUsIDExNiwgMTE2LCAxMDEsIDEwMCwgMCwgNzgsIDExMSwgMzIsIDExNSwgMTE3LCA5OSwgMTA0LCAzMiwgMTAyLCAxMDUsIDEwOCwgMTAxLCAzMiwgMTExLCAxMTQsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCAxMjEsIDAsIDc4LCAxMTEsIDMyLCAxMTUsIDExNywgOTksIDEwNCwgMzIsIDExMiwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCAwLCA3MCwgMTA1LCAxMDgsIDEwMSwgMzIsIDEwMSwgMTIwLCAxMDUsIDExNSwgMTE2LCAxMTUsIDAsIDg2LCA5NywgMTA4LCAxMTcsIDEwMSwgMzIsIDExNiwgMTExLCAxMTEsIDMyLCAxMDgsIDk3LCAxMTQsIDEwMywgMTAxLCAzMiwgMTAyLCAxMTEsIDExNCwgMzIsIDEwMCwgOTcsIDExNiwgOTcsIDMyLCAxMTYsIDEyMSwgMTEyLCAxMDEsIDAsIDc4LCAxMTEsIDMyLCAxMTUsIDExMiwgOTcsIDk5LCAxMDEsIDMyLCAxMDgsIDEwMSwgMTAyLCAxMTYsIDMyLCAxMTEsIDExMCwgMzIsIDEwMCwgMTAxLCAxMTgsIDEwNSwgOTksIDEwMSwgMCwgNzksIDExNywgMTE2LCAzMiwgMTExLCAxMDIsIDMyLCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCAwLCA4MiwgMTAxLCAxMTUsIDExMSwgMTE3LCAxMTQsIDk5LCAxMDEsIDMyLCA5OCwgMTE3LCAxMTUsIDEyMSwgMCwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE0LCAxMTcsIDExMiwgMTE2LCAxMDEsIDEwMCwgMzIsIDExNSwgMTIxLCAxMTUsIDExNiwgMTAxLCAxMDksIDMyLCA5OSwgOTcsIDEwOCwgMTA4LCAwLCA4MiwgMTAxLCAxMTUsIDExMSwgMTE3LCAxMTQsIDk5LCAxMDEsIDMyLCAxMTYsIDEwMSwgMTA5LCAxMTIsIDExMSwgMTE0LCA5NywgMTE0LCAxMDUsIDEwOCwgMTIxLCAzMiwgMTE3LCAxMTAsIDk3LCAxMTgsIDk3LCAxMDUsIDEwOCwgOTcsIDk4LCAxMDgsIDEwMSwgMCwgNzMsIDExMCwgMTE4LCA5NywgMTA4LCAxMDUsIDEwMCwgMzIsIDExNSwgMTAxLCAxMDEsIDEwNywgMCwgNjcsIDExNCwgMTExLCAxMTUsIDExNSwgNDUsIDEwMCwgMTAxLCAxMTgsIDEwNSwgOTksIDEwMSwgMzIsIDEwOCwgMTA1LCAxMTAsIDEwNywgMCwgODIsIDEwMSwgOTcsIDEwMCwgNDUsIDExMSwgMTEwLCAxMDgsIDEyMSwgMzIsIDEwMiwgMTA1LCAxMDgsIDEwMSwgMzIsIDExNSwgMTIxLCAxMTUsIDExNiwgMTAxLCAxMDksIDAsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgMTIxLCAzMiwgMTEwLCAxMTEsIDExNiwgMzIsIDEwMSwgMTA5LCAxMTIsIDExNiwgMTIxLCAwLCA2NywgMTExLCAxMTAsIDExMCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTAxLCAxMTYsIDMyLCA5OCwgMTIxLCAzMiwgMTEyLCAxMDEsIDEwMSwgMTE0LCAwLCA3OSwgMTEyLCAxMDEsIDExNCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDExNiwgMTA1LCAxMDksIDEwMSwgMTAwLCAzMiwgMTExLCAxMTcsIDExNiwgMCwgNjcsIDExMSwgMTEwLCAxMTAsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDExNywgMTE1LCAxMDEsIDEwMCwgMCwgNzIsIDExMSwgMTE1LCAxMTYsIDMyLCAxMDUsIDExNSwgMzIsIDEwMCwgMTExLCAxMTksIDExMCwgMCwgNzIsIDExMSwgMTE1LCAxMTYsIDMyLCAxMDUsIDExNSwgMzIsIDExNywgMTEwLCAxMTQsIDEwMSwgOTcsIDk5LCAxMDQsIDk3LCA5OCwgMTA4LCAxMDEsIDAsIDY1LCAxMDAsIDEwMCwgMTE0LCAxMDEsIDExNSwgMTE1LCAzMiwgMTA1LCAxMTAsIDMyLCAxMTcsIDExNSwgMTAxLCAwLCA2NiwgMTE0LCAxMTEsIDEwNywgMTAxLCAxMTAsIDMyLCAxMTIsIDEwNSwgMTEyLCAxMDEsIDAsIDczLCA0NywgNzksIDMyLCAxMDEsIDExNCwgMTE0LCAxMTEsIDExNCwgMCwgNzgsIDExMSwgMzIsIDExNSwgMTE3LCA5OSwgMTA0LCAzMiwgMTAwLCAxMDEsIDExOCwgMTA1LCA5OSwgMTAxLCAzMiwgMTExLCAxMTQsIDMyLCA5NywgMTAwLCAxMDAsIDExNCwgMTAxLCAxMTUsIDExNSwgMCwgNjYsIDEwOCwgMTExLCA5OSwgMTA3LCAzMiwgMTAwLCAxMDEsIDExOCwgMTA1LCA5OSwgMTAxLCAzMiwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDUsIDExNCwgMTAxLCAxMDAsIDAsIDc4LCAxMTEsIDMyLCAxMTUsIDExNywgOTksIDEwNCwgMzIsIDEwMCwgMTAxLCAxMTgsIDEwNSwgOTksIDEwMSwgMCwgNzgsIDExMSwgMTE2LCAzMiwgOTcsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCAxMjEsIDAsIDczLCAxMTUsIDMyLCA5NywgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDEyMSwgMCwgODQsIDEwMSwgMTIwLCAxMTYsIDMyLCAxMDIsIDEwNSwgMTA4LCAxMDEsIDMyLCA5OCwgMTE3LCAxMTUsIDEyMSwgMCwgNjksIDEyMCwgMTAxLCA5OSwgMzIsIDEwMiwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgMzIsIDEwMSwgMTE0LCAxMTQsIDExMSwgMTE0LCAwLCA3MywgMTEwLCAxMTgsIDk3LCAxMDgsIDEwNSwgMTAwLCAzMiwgOTcsIDExNCwgMTAzLCAxMTcsIDEwOSwgMTAxLCAxMTAsIDExNiwgMCwgNjUsIDExNCwgMTAzLCAxMTcsIDEwOSwgMTAxLCAxMTAsIDExNiwgMzIsIDEwOCwgMTA1LCAxMTUsIDExNiwgMzIsIDExNiwgMTExLCAxMTEsIDMyLCAxMDgsIDExMSwgMTEwLCAxMDMsIDAsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMDUsIDk5LCAzMiwgMTA4LCAxMDUsIDExMCwgMTA3LCAzMiwgMTA4LCAxMTEsIDExMSwgMTEyLCAwLCA3MCwgMTA1LCAxMDgsIDEwMSwgMTEwLCA5NywgMTA5LCAxMDEsIDMyLCAxMTYsIDExMSwgMTExLCAzMiwgMTA4LCAxMTEsIDExMCwgMTAzLCAwLCA4NCwgMTExLCAxMTEsIDMyLCAxMDksIDk3LCAxMTAsIDEyMSwgMzIsIDExMSwgMTEyLCAxMDEsIDExMCwgMzIsIDEwMiwgMTA1LCAxMDgsIDEwMSwgMTE1LCAzMiwgMTA1LCAxMTAsIDMyLCAxMTUsIDEyMSwgMTE1LCAxMTYsIDEwMSwgMTA5LCAwLCA3OCwgMTExLCAzMiwgMTAyLCAxMDUsIDEwOCwgMTAxLCAzMiwgMTAwLCAxMDEsIDExNSwgOTksIDExNCwgMTA1LCAxMTIsIDExNiwgMTExLCAxMTQsIDExNSwgMzIsIDk3LCAxMTgsIDk3LCAxMDUsIDEwOCwgOTcsIDk4LCAxMDgsIDEwMSwgMCwgNjYsIDk3LCAxMDAsIDMyLCAxMDIsIDEwNSwgMTA4LCAxMDEsIDMyLCAxMDAsIDEwMSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMTEsIDExNCwgMCwgNzgsIDExMSwgMzIsIDk5LCAxMDQsIDEwNSwgMTA4LCAxMDAsIDMyLCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgMCwgNjYsIDk3LCAxMDAgXSwgImk4IiwgQUxMT0NfTk9ORSwgUnVudGltZS5HTE9CQUxfQkFTRSArIDMwNzIwKTsKYWxsb2NhdGUoWyAzMiwgOTcsIDEwMCwgMTAwLCAxMTQsIDEwMSwgMTE1LCAxMTUsIDAsIDcwLCAxMDUsIDEwOCwgMTAxLCAzMiwgMTE2LCAxMTEsIDExMSwgMzIsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDAsIDg0LCAxMTEsIDExMSwgMzIsIDEwOSwgOTcsIDExMCwgMTIxLCAzMiwgMTA4LCAxMDUsIDExMCwgMTA3LCAxMTUsIDAsIDc4LCAxMTEsIDMyLCAxMDgsIDExMSwgOTksIDEwNywgMTE1LCAzMiwgOTcsIDExOCwgOTcsIDEwNSwgMTA4LCA5NywgOTgsIDEwOCwgMTAxLCAwLCA4MiwgMTAxLCAxMTUsIDExMSwgMTE3LCAxMTQsIDk5LCAxMDEsIDMyLCAxMDAsIDEwMSwgOTcsIDEwMCwgMTA4LCAxMTEsIDk5LCAxMDcsIDMyLCAxMTksIDExMSwgMTE3LCAxMDgsIDEwMCwgMzIsIDExMSwgOTksIDk5LCAxMTcsIDExNCwgMCwgODMsIDExNiwgOTcsIDExNiwgMTAxLCAzMiwgMTEwLCAxMTEsIDExNiwgMzIsIDExNCwgMTAxLCA5OSwgMTExLCAxMTgsIDEwMSwgMTE0LCA5NywgOTgsIDEwOCwgMTAxLCAwLCA4MCwgMTE0LCAxMDEsIDExOCwgMTA1LCAxMTEsIDExNywgMTE1LCAzMiwgMTExLCAxMTksIDExMCwgMTAxLCAxMTQsIDMyLCAxMDAsIDEwNSwgMTAxLCAxMDAsIDAsIDc5LCAxMTIsIDEwMSwgMTE0LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgOTksIDk3LCAxMTAsIDk5LCAxMDEsIDEwOCwgMTAxLCAxMDAsIDAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCAxMDUsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTA5LCAxMDEsIDExMCwgMTE2LCAxMDEsIDEwMCwgMCwgNzgsIDExMSwgMzIsIDEwOSwgMTAxLCAxMTUsIDExNSwgOTcsIDEwMywgMTAxLCAzMiwgMTExLCAxMDIsIDMyLCAxMDAsIDEwMSwgMTE1LCAxMDUsIDExNCwgMTAxLCAxMDAsIDMyLCAxMTYsIDEyMSwgMTEyLCAxMDEsIDAsIDczLCAxMDAsIDEwMSwgMTEwLCAxMTYsIDEwNSwgMTAyLCAxMDUsIDEwMSwgMTE0LCAzMiwgMTE0LCAxMDEsIDEwOSwgMTExLCAxMTgsIDEwMSwgMTAwLCAwLCA2OCwgMTAxLCAxMTgsIDEwNSwgOTksIDEwMSwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCA5NywgMzIsIDExNSwgMTE2LCAxMTQsIDEwMSwgOTcsIDEwOSwgMCwgNzgsIDExMSwgMzIsIDEwMCwgOTcsIDExNiwgOTcsIDMyLCA5NywgMTE4LCA5NywgMTA1LCAxMDgsIDk3LCA5OCwgMTA4LCAxMDEsIDAsIDY4LCAxMDEsIDExOCwgMTA1LCA5OSwgMTAxLCAzMiwgMTE2LCAxMDUsIDEwOSwgMTAxLCAxMTEsIDExNywgMTE2LCAwLCA3OSwgMTE3LCAxMTYsIDMyLCAxMTEsIDEwMiwgMzIsIDExNSwgMTE2LCAxMTQsIDEwMSwgOTcsIDEwOSwgMTE1LCAzMiwgMTE0LCAxMDEsIDExNSwgMTExLCAxMTcsIDExNCwgOTksIDEwMSwgMTE1LCAwLCA3NiwgMTA1LCAxMTAsIDEwNywgMzIsIDEwNCwgOTcsIDExNSwgMzIsIDk4LCAxMDEsIDEwMSwgMTEwLCAzMiwgMTE1LCAxMDEsIDExOCwgMTAxLCAxMTQsIDEwMSwgMTAwLCAwLCA4MCwgMTE0LCAxMTEsIDExNiwgMTExLCA5OSwgMTExLCAxMDgsIDMyLCAxMDEsIDExNCwgMTE0LCAxMTEsIDExNCwgMCwgNjYsIDk3LCAxMDAsIDMyLCAxMDksIDEwMSwgMTE1LCAxMTUsIDk3LCAxMDMsIDEwMSwgMCwgNzAsIDEwNSwgMTA4LCAxMDEsIDMyLCAxMDAsIDEwMSwgMTE1LCA5OSwgMTE0LCAxMDUsIDExMiwgMTE2LCAxMTEsIDExNCwgMzIsIDEwNSwgMTEwLCAzMiwgOTgsIDk3LCAxMDAsIDMyLCAxMTUsIDExNiwgOTcsIDExNiwgMTAxLCAwLCA3OCwgMTExLCAxMTYsIDMyLCA5NywgMzIsIDExNSwgMTExLCA5OSwgMTA3LCAxMDEsIDExNiwgMCwgNjgsIDEwMSwgMTE1LCAxMTYsIDEwNSwgMTEwLCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgOTcsIDEwMCwgMTAwLCAxMTQsIDEwMSwgMTE1LCAxMTUsIDMyLCAxMTQsIDEwMSwgMTEzLCAxMTcsIDEwNSwgMTE0LCAxMDEsIDEwMCwgMCwgNzcsIDEwMSwgMTE1LCAxMTUsIDk3LCAxMDMsIDEwMSwgMzIsIDExNiwgMTExLCAxMTEsIDMyLCAxMDgsIDk3LCAxMTQsIDEwMywgMTAxLCAwLCA4MCwgMTE0LCAxMTEsIDExNiwgMTExLCA5OSwgMTExLCAxMDgsIDMyLCAxMTksIDExNCwgMTExLCAxMTAsIDEwMywgMzIsIDExNiwgMTIxLCAxMTIsIDEwMSwgMzIsIDEwMiwgMTExLCAxMTQsIDMyLCAxMTUsIDExMSwgOTksIDEwNywgMTAxLCAxMTYsIDAsIDgwLCAxMTQsIDExMSwgMTE2LCAxMTEsIDk5LCAxMTEsIDEwOCwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCA5NywgMTE4LCA5NywgMTA1LCAxMDgsIDk3LCA5OCwgMTA4LCAxMDEsIDAsIDgwLCAxMTQsIDExMSwgMTE2LCAxMTEsIDk5LCAxMTEsIDEwOCwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCAxMTUsIDExNywgMTEyLCAxMTIsIDExMSwgMTE0LCAxMTYsIDEwMSwgMTAwLCAwLCA4MywgMTExLCA5OSwgMTA3LCAxMDEsIDExNiwgMzIsIDExNiwgMTIxLCAxMTIsIDEwMSwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCAxMTUsIDExNywgMTEyLCAxMTIsIDExMSwgMTE0LCAxMTYsIDEwMSwgMTAwLCAwLCA3OCwgMTExLCAxMTYsIDMyLCAxMTUsIDExNywgMTEyLCAxMTIsIDExMSwgMTE0LCAxMTYsIDEwMSwgMTAwLCAwLCA4MCwgMTE0LCAxMTEsIDExNiwgMTExLCA5OSwgMTExLCAxMDgsIDMyLCAxMDIsIDk3LCAxMDksIDEwNSwgMTA4LCAxMjEsIDMyLCAxMTAsIDExMSwgMTE2LCAzMiwgMTE1LCAxMTcsIDExMiwgMTEyLCAxMTEsIDExNCwgMTE2LCAxMDEsIDEwMCwgMCwgNjUsIDEwMCwgMTAwLCAxMTQsIDEwMSwgMTE1LCAxMTUsIDMyLCAxMDIsIDk3LCAxMDksIDEwNSwgMTA4LCAxMjEsIDMyLCAxMTAsIDExMSwgMTE2LCAzMiwgMTE1LCAxMTcsIDExMiwgMTEyLCAxMTEsIDExNCwgMTE2LCAxMDEsIDEwMCwgMzIsIDk4LCAxMjEsIDMyLCAxMTIsIDExNCwgMTExLCAxMTYsIDExMSwgOTksIDExMSwgMTA4LCAwLCA2NSwgMTAwLCAxMDAsIDExNCwgMTAxLCAxMTUsIDExNSwgMzIsIDExMCwgMTExLCAxMTYsIDMyLCA5NywgMTE4LCA5NywgMTA1LCAxMDgsIDk3LCA5OCwgMTA4LCAxMDEsIDAsIDc4LCAxMDEsIDExNiwgMTE5LCAxMTEsIDExNCwgMTA3LCAzMiwgMTA1LCAxMTUsIDMyLCAxMDAsIDExMSwgMTE5LCAxMTAsIDAsIDc4LCAxMDEsIDExNiwgMTE5LCAxMTEsIDExNCwgMTA3LCAzMiwgMTE3LCAxMTAsIDExNCwgMTAxLCA5NywgOTksIDEwNCwgOTcsIDk4LCAxMDgsIDEwMSwgMCwgNjcsIDExMSwgMTEwLCAxMTAsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDEwMSwgMTE2LCAzMiwgOTgsIDEyMSwgMzIsIDExMCwgMTAxLCAxMTYsIDExOSwgMTExLCAxMTQsIDEwNywgMCwgNjcsIDExMSwgMTEwLCAxMTAsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDk3LCA5OCwgMTExLCAxMTQsIDExNiwgMTAxLCAxMDAsIDAsIDc4LCAxMTEsIDMyLCA5OCwgMTE3LCAxMDIsIDEwMiwgMTAxLCAxMTQsIDMyLCAxMTUsIDExMiwgOTcsIDk5LCAxMDEsIDMyLCA5NywgMTE4LCA5NywgMTA1LCAxMDgsIDk3LCA5OCwgMTA4LCAxMDEsIDAsIDgzLCAxMTEsIDk5LCAxMDcsIDEwMSwgMTE2LCAzMiwgMTA1LCAxMTUsIDMyLCA5OSwgMTExLCAxMTAsIDExMCwgMTAxLCA5OSwgMTE2LCAxMDEsIDEwMCwgMCwgODMsIDExMSwgOTksIDEwNywgMTAxLCAxMTYsIDMyLCAxMTAsIDExMSwgMTE2LCAzMiwgOTksIDExMSwgMTEwLCAxMTAsIDEwMSwgOTksIDExNiwgMTAxLCAxMDAsIDAsIDY3LCA5NywgMTEwLCAxMTAsIDExMSwgMTE2LCAzMiwgMTE1LCAxMDEsIDExMCwgMTAwLCAzMiwgOTcsIDEwMiwgMTE2LCAxMDEsIDExNCwgMzIsIDExNSwgMTExLCA5OSwgMTA3LCAxMDEsIDExNiwgMzIsIDExNSwgMTA0LCAxMTcsIDExNiwgMTAwLCAxMTEsIDExOSwgMTEwLCAwLCA3OSwgMTEyLCAxMDEsIDExNCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDk3LCAxMDgsIDExNCwgMTAxLCA5NywgMTAwLCAxMjEsIDMyLCAxMDUsIDExMCwgMzIsIDExMiwgMTE0LCAxMTEsIDEwMywgMTE0LCAxMDEsIDExNSwgMTE1LCAwLCA3OSwgMTEyLCAxMDEsIDExNCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDEwNSwgMTEwLCAzMiwgMTEyLCAxMTQsIDExMSwgMTAzLCAxMTQsIDEwMSwgMTE1LCAxMTUsIDAsIDgzLCAxMTYsIDk3LCAxMDgsIDEwMSwgMzIsIDEwMiwgMTA1LCAxMDgsIDEwMSwgMzIsIDEwNCwgOTcsIDExMCwgMTAwLCAxMDgsIDEwMSwgMCwgODIsIDEwMSwgMTA5LCAxMTEsIDExNiwgMTAxLCAzMiwgNzMsIDQ3LCA3OSwgMzIsIDEwMSwgMTE0LCAxMTQsIDExMSwgMTE0LCAwLCA4MSwgMTE3LCAxMTEsIDExNiwgOTcsIDMyLCAxMDEsIDEyMCwgOTksIDEwMSwgMTAxLCAxMDAsIDEwMSwgMTAwLCAwLCA3OCwgMTExLCAzMiwgMTA5LCAxMDEsIDEwMCwgMTA1LCAxMTcsIDEwOSwgMzIsIDEwMiwgMTExLCAxMTcsIDExMCwgMTAwLCAwLCA4NywgMTE0LCAxMTEsIDExMCwgMTAzLCAzMiwgMTA5LCAxMDEsIDEwMCwgMTA1LCAxMTcsIDEwOSwgMzIsIDExNiwgMTIxLCAxMTIsIDEwMSwgMCwgNzgsIDExMSwgMzIsIDEwMSwgMTE0LCAxMTQsIDExMSwgMTE0LCAzMiwgMTA1LCAxMTAsIDEwMiwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCBdLCAiaTgiLCBBTExPQ19OT05FLCBSdW50aW1lLkdMT0JBTF9CQVNFICsgNDA5NjApOwphbGxvY2F0ZShbIDE3LCAwLCAxMCwgMCwgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAwLCAxNSwgMTAsIDE3LCAxNywgMTcsIDMsIDEwLCA3LCAwLCAxLCAxOSwgOSwgMTEsIDExLCAwLCAwLCA5LCA2LCAxMSwgMCwgMCwgMTEsIDAsIDYsIDE3LCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDAsIDEwLCAxMCwgMTcsIDE3LCAxNywgMCwgMTAsIDAsIDAsIDIsIDAsIDksIDExLCAwLCAwLCAwLCA5LCAwLCAxMSwgMCwgMCwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMiwgMCwgMCwgMCwgMCwgMTIsIDAsIDAsIDAsIDAsIDksIDEyLCAwLCAwLCAwLCAwLCAwLCAxMiwgMCwgMCwgMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMCwgMCwgMCwgNCwgMTMsIDAsIDAsIDAsIDAsIDksIDE0LCAwLCAwLCAwLCAwLCAwLCAxNCwgMCwgMCwgMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNSwgMCwgMCwgMCwgMCwgMTUsIDAsIDAsIDAsIDAsIDksIDE2LCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMTYsIDAsIDAsIDE4LCAwLCAwLCAwLCAxOCwgMTgsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMTgsIDE4LCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwLCAwLCAwLCAwLCAwLCAxMCwgMCwgMCwgMCwgMCwgOSwgMTEsIDAsIDAsIDAsIDAsIDAsIDExLCAwLCAwLCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyLCAwLCAwLCAwLCAwLCAxMiwgMCwgMCwgMCwgMCwgOSwgMTIsIDAsIDAsIDAsIDAsIDAsIDEyLCAwLCAwLCAxMiwgMCwgMCwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDQ1LCA0MywgMzIsIDMyLCAzMiwgNDgsIDg4LCA0OCwgMTIwLCAwLCA0MCwgMTEwLCAxMTcsIDEwOCwgMTA4LCA0MSwgMCwgNDUsIDQ4LCA4OCwgNDMsIDQ4LCA4OCwgMzIsIDQ4LCA4OCwgNDUsIDQ4LCAxMjAsIDQzLCA0OCwgMTIwLCAzMiwgNDgsIDEyMCwgMCwgMTA1LCAxMTAsIDEwMiwgMCwgNzMsIDc4LCA3MCwgMCwgMTEwLCA5NywgMTEwLCAwLCA3OCwgNjUsIDc4LCAwLCA0NiwgMCwgNzgsIDgzLCAxMTYsIDUxLCA5NSwgOTUsIDQ5LCA0OSwgNTIsIDk1LCA5NSwgMTE1LCAxMDQsIDk3LCAxMTQsIDEwMSwgMTAwLCA5NSwgOTksIDExMSwgMTE3LCAxMTAsIDExNiwgNjksIDAsIDc4LCA4MywgMTE2LCA1MSwgOTUsIDk1LCA0OSwgNDksIDU3LCA5NSwgOTUsIDExNSwgMTA0LCA5NywgMTE0LCAxMDEsIDEwMCwgOTUsIDExOSwgMTAxLCA5NywgMTA3LCA5NSwgOTksIDExMSwgMTE3LCAxMTAsIDExNiwgNjksIDAgXSwgImk4IiwgQUxMT0NfTk9ORSwgUnVudGltZS5HTE9CQUxfQkFTRSArIDQyOTg4KTsKdmFyIHRlbXBEb3VibGVQdHIgPSBSdW50aW1lLmFsaWduTWVtb3J5KGFsbG9jYXRlKDEyLCAiaTgiLCBBTExPQ19TVEFUSUMpLCA4KTsKYXNzZXJ0KHRlbXBEb3VibGVQdHIgJSA4ID09IDApOwpmdW5jdGlvbiBjb3B5VGVtcEZsb2F0KHB0cikgewogSEVBUDhbdGVtcERvdWJsZVB0cl0gPSBIRUFQOFtwdHJdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDFdID0gSEVBUDhbcHRyICsgMV07CiBIRUFQOFt0ZW1wRG91YmxlUHRyICsgMl0gPSBIRUFQOFtwdHIgKyAyXTsKIEhFQVA4W3RlbXBEb3VibGVQdHIgKyAzXSA9IEhFQVA4W3B0ciArIDNdOwp9CmZ1bmN0aW9uIGNvcHlUZW1wRG91YmxlKHB0cikgewogSEVBUDhbdGVtcERvdWJsZVB0cl0gPSBIRUFQOFtwdHJdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDFdID0gSEVBUDhbcHRyICsgMV07CiBIRUFQOFt0ZW1wRG91YmxlUHRyICsgMl0gPSBIRUFQOFtwdHIgKyAyXTsKIEhFQVA4W3RlbXBEb3VibGVQdHIgKyAzXSA9IEhFQVA4W3B0ciArIDNdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDRdID0gSEVBUDhbcHRyICsgNF07CiBIRUFQOFt0ZW1wRG91YmxlUHRyICsgNV0gPSBIRUFQOFtwdHIgKyA1XTsKIEhFQVA4W3RlbXBEb3VibGVQdHIgKyA2XSA9IEhFQVA4W3B0ciArIDZdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDddID0gSEVBUDhbcHRyICsgN107Cn0KdmFyIHJlZ2lzdGVyZWRUeXBlcyA9IHt9OwpmdW5jdGlvbiBfZnJlZSgpIHt9Ck1vZHVsZVsiX2ZyZWUiXSA9IF9mcmVlOwpmdW5jdGlvbiBlbWJpbmRfaW5pdF9jaGFyQ29kZXMoKSB7CiB2YXIgY29kZXMgPSBuZXcgQXJyYXkoMjU2KTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKICBjb2Rlc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiB9CiBlbWJpbmRfY2hhckNvZGVzID0gY29kZXM7Cn0KdmFyIGVtYmluZF9jaGFyQ29kZXMgPSB1bmRlZmluZWQ7CmZ1bmN0aW9uIHJlYWRMYXRpbjFTdHJpbmcocHRyKSB7CiB2YXIgcmV0ID0gIiI7CiB2YXIgYyA9IHB0cjsKIHdoaWxlIChIRUFQVThbY10pIHsKICByZXQgKz0gZW1iaW5kX2NoYXJDb2Rlc1tIRUFQVThbYysrXV07CiB9CiByZXR1cm4gcmV0Owp9CmZ1bmN0aW9uIGdldFR5cGVOYW1lKHR5cGUpIHsKIHZhciBwdHIgPSBfX19nZXRUeXBlTmFtZSh0eXBlKTsKIHZhciBydiA9IHJlYWRMYXRpbjFTdHJpbmcocHRyKTsKIF9mcmVlKHB0cik7CiByZXR1cm4gcnY7Cn0KdmFyIGNoYXJfMCA9IDQ4Owp2YXIgY2hhcl85ID0gNTc7CmZ1bmN0aW9uIG1ha2VMZWdhbEZ1bmN0aW9uTmFtZShuYW1lKSB7CiBpZiAodW5kZWZpbmVkID09PSBuYW1lKSB7CiAgcmV0dXJuICJfdW5rbm93biI7CiB9CiBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICIkIik7CiB2YXIgZiA9IG5hbWUuY2hhckNvZGVBdCgwKTsKIGlmIChmID49IGNoYXJfMCAmJiBmIDw9IGNoYXJfOSkgewogIHJldHVybiAiXyIgKyBuYW1lOwogfSBlbHNlIHsKICByZXR1cm4gbmFtZTsKIH0KfQpmdW5jdGlvbiBjcmVhdGVOYW1lZEZ1bmN0aW9uKG5hbWUsIGJvZHkpIHsKIG5hbWUgPSBtYWtlTGVnYWxGdW5jdGlvbk5hbWUobmFtZSk7CiByZXR1cm4gKG5ldyBGdW5jdGlvbigiYm9keSIsICJyZXR1cm4gZnVuY3Rpb24gIiArIG5hbWUgKyAiKCkge1xuIiArICcgICAgInVzZSBzdHJpY3QiOycgKyAiICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4iICsgIn07XG4iKSkoYm9keSk7Cn0KZnVuY3Rpb24gZXh0ZW5kRXJyb3IoYmFzZUVycm9yVHlwZSwgZXJyb3JOYW1lKSB7CiB2YXIgZXJyb3JDbGFzcyA9IGNyZWF0ZU5hbWVkRnVuY3Rpb24oZXJyb3JOYW1lLCAoZnVuY3Rpb24obWVzc2FnZSkgewogIHRoaXMubmFtZSA9IGVycm9yTmFtZTsKICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIHZhciBzdGFjayA9IChuZXcgRXJyb3IobWVzc2FnZSkpLnN0YWNrOwogIGlmIChzdGFjayAhPT0gdW5kZWZpbmVkKSB7CiAgIHRoaXMuc3RhY2sgPSB0aGlzLnRvU3RyaW5nKCkgKyAiXG4iICsgc3RhY2sucmVwbGFjZSgvXkVycm9yKDpbXlxuXSopP1xuLywgIiIpOwogIH0KIH0pKTsKIGVycm9yQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JUeXBlLnByb3RvdHlwZSk7CiBlcnJvckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGVycm9yQ2xhc3M7CiBlcnJvckNsYXNzLnByb3RvdHlwZS50b1N0cmluZyA9IChmdW5jdGlvbigpIHsKICBpZiAodGhpcy5tZXNzYWdlID09PSB1bmRlZmluZWQpIHsKICAgcmV0dXJuIHRoaXMubmFtZTsKICB9IGVsc2UgewogICByZXR1cm4gdGhpcy5uYW1lICsgIjogIiArIHRoaXMubWVzc2FnZTsKICB9CiB9KTsKIHJldHVybiBlcnJvckNsYXNzOwp9CnZhciBCaW5kaW5nRXJyb3IgPSB1bmRlZmluZWQ7CmZ1bmN0aW9uIHRocm93QmluZGluZ0Vycm9yKG1lc3NhZ2UpIHsKIHRocm93IG5ldyBCaW5kaW5nRXJyb3IobWVzc2FnZSk7Cn0KZnVuY3Rpb24gcmVxdWlyZVJlZ2lzdGVyZWRUeXBlKHJhd1R5cGUsIGh1bWFuTmFtZSkgewogdmFyIGltcGwgPSByZWdpc3RlcmVkVHlwZXNbcmF3VHlwZV07CiBpZiAodW5kZWZpbmVkID09PSBpbXBsKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoaHVtYW5OYW1lICsgIiBoYXMgdW5rbm93biB0eXBlICIgKyBnZXRUeXBlTmFtZShyYXdUeXBlKSk7CiB9CiByZXR1cm4gaW1wbDsKfQpmdW5jdGlvbiBfX2VtdmFsX2xvb2t1cFR5cGVzKGFyZ0NvdW50LCBhcmdUeXBlcywgYXJnV2lyZVR5cGVzKSB7CiB2YXIgYSA9IG5ldyBBcnJheShhcmdDb3VudCk7CiBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpIHsKICBhW2ldID0gcmVxdWlyZVJlZ2lzdGVyZWRUeXBlKEhFQVAzMlsoYXJnVHlwZXMgPj4gMikgKyBpXSwgInBhcmFtZXRlciAiICsgaSk7CiB9CiByZXR1cm4gYTsKfQp2YXIgZW12YWxfZnJlZV9saXN0ID0gW107CnZhciBlbXZhbF9oYW5kbGVfYXJyYXkgPSBbIHt9LCB7CiB2YWx1ZTogdW5kZWZpbmVkCn0sIHsKIHZhbHVlOiBudWxsCn0sIHsKIHZhbHVlOiB0cnVlCn0sIHsKIHZhbHVlOiBmYWxzZQp9IF07CmZ1bmN0aW9uIGNvdW50X2VtdmFsX2hhbmRsZXMoKSB7CiB2YXIgY291bnQgPSAwOwogZm9yICh2YXIgaSA9IDU7IGkgPCBlbXZhbF9oYW5kbGVfYXJyYXkubGVuZ3RoOyArK2kpIHsKICBpZiAoZW12YWxfaGFuZGxlX2FycmF5W2ldICE9PSB1bmRlZmluZWQpIHsKICAgKytjb3VudDsKICB9CiB9CiByZXR1cm4gY291bnQ7Cn0KZnVuY3Rpb24gZ2V0X2ZpcnN0X2VtdmFsKCkgewogZm9yICh2YXIgaSA9IDU7IGkgPCBlbXZhbF9oYW5kbGVfYXJyYXkubGVuZ3RoOyArK2kpIHsKICBpZiAoZW12YWxfaGFuZGxlX2FycmF5W2ldICE9PSB1bmRlZmluZWQpIHsKICAgcmV0dXJuIGVtdmFsX2hhbmRsZV9hcnJheVtpXTsKICB9CiB9CiByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBpbml0X2VtdmFsKCkgewogTW9kdWxlWyJjb3VudF9lbXZhbF9oYW5kbGVzIl0gPSBjb3VudF9lbXZhbF9oYW5kbGVzOwogTW9kdWxlWyJnZXRfZmlyc3RfZW12YWwiXSA9IGdldF9maXJzdF9lbXZhbDsKfQpmdW5jdGlvbiBfX2VtdmFsX3JlZ2lzdGVyKHZhbHVlKSB7CiBzd2l0Y2ggKHZhbHVlKSB7CiBjYXNlIHVuZGVmaW5lZDoKICB7CiAgIHJldHVybiAxOwogIH0KIGNhc2UgbnVsbDoKICB7CiAgIHJldHVybiAyOwogIH0KIGNhc2UgdHJ1ZToKICB7CiAgIHJldHVybiAzOwogIH0KIGNhc2UgZmFsc2U6CiAgewogICByZXR1cm4gNDsKICB9CiBkZWZhdWx0OgogIHsKICAgdmFyIGhhbmRsZSA9IGVtdmFsX2ZyZWVfbGlzdC5sZW5ndGggPyBlbXZhbF9mcmVlX2xpc3QucG9wKCkgOiBlbXZhbF9oYW5kbGVfYXJyYXkubGVuZ3RoOwogICBlbXZhbF9oYW5kbGVfYXJyYXlbaGFuZGxlXSA9IHsKICAgIHJlZmNvdW50OiAxLAogICAgdmFsdWU6IHZhbHVlCiAgIH07CiAgIHJldHVybiBoYW5kbGU7CiAgfQogfQp9CmZ1bmN0aW9uIHJlcXVpcmVIYW5kbGUoaGFuZGxlKSB7CiBpZiAoIWhhbmRsZSkgewogIHRocm93QmluZGluZ0Vycm9yKCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiICsgaGFuZGxlKTsKIH0KIHJldHVybiBlbXZhbF9oYW5kbGVfYXJyYXlbaGFuZGxlXS52YWx1ZTsKfQpmdW5jdGlvbiBfX2VtdmFsX2NhbGwoaGFuZGxlLCBhcmdDb3VudCwgYXJnVHlwZXMsIGFyZ3YpIHsKIGhhbmRsZSA9IHJlcXVpcmVIYW5kbGUoaGFuZGxlKTsKIHZhciB0eXBlcyA9IF9fZW12YWxfbG9va3VwVHlwZXMoYXJnQ291bnQsIGFyZ1R5cGVzKTsKIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ0NvdW50KTsKIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkgewogIHZhciB0eXBlID0gdHlwZXNbaV07CiAgYXJnc1tpXSA9IHR5cGVbInJlYWRWYWx1ZUZyb21Qb2ludGVyIl0oYXJndik7CiAgYXJndiArPSB0eXBlWyJhcmdQYWNrQWR2YW5jZSJdOwogfQogdmFyIHJ2ID0gaGFuZGxlLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7CiByZXR1cm4gX19lbXZhbF9yZWdpc3Rlcihydik7Cn0KTW9kdWxlWyJfaTY0U3VidHJhY3QiXSA9IF9pNjRTdWJ0cmFjdDsKdmFyIF9mYWJzZiA9IE1hdGhfYWJzOwpNb2R1bGVbIl9pNjRBZGQiXSA9IF9pNjRBZGQ7CmZ1bmN0aW9uIF9fWlN0MTh1bmNhdWdodF9leGNlcHRpb252KCkgewogcmV0dXJuICEhX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYudW5jYXVnaHRfZXhjZXB0aW9uOwp9CnZhciBFWENFUFRJT05TID0gewogbGFzdDogMCwKIGNhdWdodDogW10sCiBpbmZvczoge30sCiBkZUFkanVzdDogKGZ1bmN0aW9uKGFkanVzdGVkKSB7CiAgaWYgKCFhZGp1c3RlZCB8fCBFWENFUFRJT05TLmluZm9zW2FkanVzdGVkXSkgcmV0dXJuIGFkanVzdGVkOwogIGZvciAodmFyIHB0ciBpbiBFWENFUFRJT05TLmluZm9zKSB7CiAgIHZhciBpbmZvID0gRVhDRVBUSU9OUy5pbmZvc1twdHJdOwogICBpZiAoaW5mby5hZGp1c3RlZCA9PT0gYWRqdXN0ZWQpIHsKICAgIHJldHVybiBwdHI7CiAgIH0KICB9CiAgcmV0dXJuIGFkanVzdGVkOwogfSksCiBhZGRSZWY6IChmdW5jdGlvbihwdHIpIHsKICBpZiAoIXB0cikgcmV0dXJuOwogIHZhciBpbmZvID0gRVhDRVBUSU9OUy5pbmZvc1twdHJdOwogIGluZm8ucmVmY291bnQrKzsKIH0pLAogZGVjUmVmOiAoZnVuY3Rpb24ocHRyKSB7CiAgaWYgKCFwdHIpIHJldHVybjsKICB2YXIgaW5mbyA9IEVYQ0VQVElPTlMuaW5mb3NbcHRyXTsKICBhc3NlcnQoaW5mby5yZWZjb3VudCA+IDApOwogIGluZm8ucmVmY291bnQtLTsKICBpZiAoaW5mby5yZWZjb3VudCA9PT0gMCkgewogICBpZiAoaW5mby5kZXN0cnVjdG9yKSB7CiAgICBSdW50aW1lLmR5bkNhbGwoInZpIiwgaW5mby5kZXN0cnVjdG9yLCBbIHB0ciBdKTsKICAgfQogICBkZWxldGUgRVhDRVBUSU9OUy5pbmZvc1twdHJdOwogICBfX19jeGFfZnJlZV9leGNlcHRpb24ocHRyKTsKICB9CiB9KSwKIGNsZWFyUmVmOiAoZnVuY3Rpb24ocHRyKSB7CiAgaWYgKCFwdHIpIHJldHVybjsKICB2YXIgaW5mbyA9IEVYQ0VQVElPTlMuaW5mb3NbcHRyXTsKICBpbmZvLnJlZmNvdW50ID0gMDsKIH0pCn07CmZ1bmN0aW9uIF9fX3Jlc3VtZUV4Y2VwdGlvbihwdHIpIHsKIGlmICghRVhDRVBUSU9OUy5sYXN0KSB7CiAgRVhDRVBUSU9OUy5sYXN0ID0gcHRyOwogfQogRVhDRVBUSU9OUy5jbGVhclJlZihFWENFUFRJT05TLmRlQWRqdXN0KHB0cikpOwogdGhyb3cgcHRyOwp9CmZ1bmN0aW9uIF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgewogdmFyIHRocm93biA9IEVYQ0VQVElPTlMubGFzdDsKIGlmICghdGhyb3duKSB7CiAgcmV0dXJuIChhc21bInNldFRlbXBSZXQwIl0oMCksIDApIHwgMDsKIH0KIHZhciBpbmZvID0gRVhDRVBUSU9OUy5pbmZvc1t0aHJvd25dOwogdmFyIHRocm93bnR5cGUgPSBpbmZvLnR5cGU7CiBpZiAoIXRocm93bnR5cGUpIHsKICByZXR1cm4gKGFzbVsic2V0VGVtcFJldDAiXSgwKSwgdGhyb3duKSB8IDA7CiB9CiB2YXIgdHlwZUFycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKIHZhciBwb2ludGVyID0gTW9kdWxlWyJfX19jeGFfaXNfcG9pbnRlcl90eXBlIl0odGhyb3dudHlwZSk7CiBpZiAoIV9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoLmJ1ZmZlcikgX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2guYnVmZmVyID0gX21hbGxvYyg0KTsKIEhFQVAzMltfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaC5idWZmZXIgPj4gMl0gPSB0aHJvd247CiB0aHJvd24gPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaC5idWZmZXI7CiBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVBcnJheS5sZW5ndGg7IGkrKykgewogIGlmICh0eXBlQXJyYXlbaV0gJiYgTW9kdWxlWyJfX19jeGFfY2FuX2NhdGNoIl0odHlwZUFycmF5W2ldLCB0aHJvd250eXBlLCB0aHJvd24pKSB7CiAgIHRocm93biA9IEhFQVAzMlt0aHJvd24gPj4gMl07CiAgIGluZm8uYWRqdXN0ZWQgPSB0aHJvd247CiAgIHJldHVybiAoYXNtWyJzZXRUZW1wUmV0MCJdKHR5cGVBcnJheVtpXSksIHRocm93bikgfCAwOwogIH0KIH0KIHRocm93biA9IEhFQVAzMlt0aHJvd24gPj4gMl07CiByZXR1cm4gKGFzbVsic2V0VGVtcFJldDAiXSh0aHJvd250eXBlKSwgdGhyb3duKSB8IDA7Cn0KZnVuY3Rpb24gX19fY3hhX3Rocm93KHB0ciwgdHlwZSwgZGVzdHJ1Y3RvcikgewogRVhDRVBUSU9OUy5pbmZvc1twdHJdID0gewogIHB0cjogcHRyLAogIGFkanVzdGVkOiBwdHIsCiAgdHlwZTogdHlwZSwKICBkZXN0cnVjdG9yOiBkZXN0cnVjdG9yLAogIHJlZmNvdW50OiAwCiB9OwogRVhDRVBUSU9OUy5sYXN0ID0gcHRyOwogaWYgKCEoInVuY2F1Z2h0X2V4Y2VwdGlvbiIgaW4gX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYpKSB7CiAgX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYudW5jYXVnaHRfZXhjZXB0aW9uID0gMTsKIH0gZWxzZSB7CiAgX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYudW5jYXVnaHRfZXhjZXB0aW9uKys7CiB9CiB0aHJvdyBwdHI7Cn0KdmFyIF9lbXNjcmlwdGVuX3Jlc3VtZSA9IHRydWU7CnZhciBfZW1zY3JpcHRlbl9sYW5kaW5ncGFkID0gdHJ1ZTsKZnVuY3Rpb24gX19fY3hhX2ZyZWVfZXhjZXB0aW9uKHB0cikgewogdHJ5IHsKICByZXR1cm4gX2ZyZWUocHRyKTsKIH0gY2F0Y2ggKGUpIHsKICBNb2R1bGUucHJpbnRFcnIoImV4Y2VwdGlvbiBkdXJpbmcgY3hhX2ZyZWVfZXhjZXB0aW9uOiAiICsgZSk7CiB9Cn0KZnVuY3Rpb24gX19fY3hhX2VuZF9jYXRjaCgpIHsKIGlmIChfX19jeGFfZW5kX2NhdGNoLnJldGhyb3duKSB7CiAgX19fY3hhX2VuZF9jYXRjaC5yZXRocm93biA9IGZhbHNlOwogIHJldHVybjsKIH0KIGFzbVsic2V0VGhyZXciXSgwKTsKIHZhciBwdHIgPSBFWENFUFRJT05TLmNhdWdodC5wb3AoKTsKIGlmIChwdHIpIHsKICBFWENFUFRJT05TLmRlY1JlZihFWENFUFRJT05TLmRlQWRqdXN0KHB0cikpOwogIEVYQ0VQVElPTlMubGFzdCA9IDA7CiB9Cn0KZnVuY3Rpb24gX21hbGxvYyhieXRlcykgewogdmFyIHB0ciA9IFJ1bnRpbWUuZHluYW1pY0FsbG9jKGJ5dGVzICsgOCk7CiByZXR1cm4gcHRyICsgOCAmIDQyOTQ5NjcyODg7Cn0KTW9kdWxlWyJfbWFsbG9jIl0gPSBfbWFsbG9jOwp2YXIgYXdhaXRpbmdEZXBlbmRlbmNpZXMgPSB7fTsKdmFyIHR5cGVEZXBlbmRlbmNpZXMgPSB7fTsKdmFyIEludGVybmFsRXJyb3IgPSB1bmRlZmluZWQ7CmZ1bmN0aW9uIHRocm93SW50ZXJuYWxFcnJvcihtZXNzYWdlKSB7CiB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihtZXNzYWdlKTsKfQpmdW5jdGlvbiB3aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZChteVR5cGVzLCBkZXBlbmRlbnRUeXBlcywgZ2V0VHlwZUNvbnZlcnRlcnMpIHsKIG15VHlwZXMuZm9yRWFjaCgoZnVuY3Rpb24odHlwZSkgewogIHR5cGVEZXBlbmRlbmNpZXNbdHlwZV0gPSBkZXBlbmRlbnRUeXBlczsKIH0pKTsKIGZ1bmN0aW9uIG9uQ29tcGxldGUodHlwZUNvbnZlcnRlcnMpIHsKICB2YXIgbXlUeXBlQ29udmVydGVycyA9IGdldFR5cGVDb252ZXJ0ZXJzKHR5cGVDb252ZXJ0ZXJzKTsKICBpZiAobXlUeXBlQ29udmVydGVycy5sZW5ndGggIT09IG15VHlwZXMubGVuZ3RoKSB7CiAgIHRocm93SW50ZXJuYWxFcnJvcigiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpOwogIH0KICBmb3IgKHZhciBpID0gMDsgaSA8IG15VHlwZXMubGVuZ3RoOyArK2kpIHsKICAgcmVnaXN0ZXJUeXBlKG15VHlwZXNbaV0sIG15VHlwZUNvbnZlcnRlcnNbaV0pOwogIH0KIH0KIHZhciB0eXBlQ29udmVydGVycyA9IG5ldyBBcnJheShkZXBlbmRlbnRUeXBlcy5sZW5ndGgpOwogdmFyIHVucmVnaXN0ZXJlZFR5cGVzID0gW107CiB2YXIgcmVnaXN0ZXJlZCA9IDA7CiBkZXBlbmRlbnRUeXBlcy5mb3JFYWNoKChmdW5jdGlvbihkdCwgaSkgewogIGlmIChyZWdpc3RlcmVkVHlwZXMuaGFzT3duUHJvcGVydHkoZHQpKSB7CiAgIHR5cGVDb252ZXJ0ZXJzW2ldID0gcmVnaXN0ZXJlZFR5cGVzW2R0XTsKICB9IGVsc2UgewogICB1bnJlZ2lzdGVyZWRUeXBlcy5wdXNoKGR0KTsKICAgaWYgKCFhd2FpdGluZ0RlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShkdCkpIHsKICAgIGF3YWl0aW5nRGVwZW5kZW5jaWVzW2R0XSA9IFtdOwogICB9CiAgIGF3YWl0aW5nRGVwZW5kZW5jaWVzW2R0XS5wdXNoKChmdW5jdGlvbigpIHsKICAgIHR5cGVDb252ZXJ0ZXJzW2ldID0gcmVnaXN0ZXJlZFR5cGVzW2R0XTsKICAgICsrcmVnaXN0ZXJlZDsKICAgIGlmIChyZWdpc3RlcmVkID09PSB1bnJlZ2lzdGVyZWRUeXBlcy5sZW5ndGgpIHsKICAgICBvbkNvbXBsZXRlKHR5cGVDb252ZXJ0ZXJzKTsKICAgIH0KICAgfSkpOwogIH0KIH0pKTsKIGlmICgwID09PSB1bnJlZ2lzdGVyZWRUeXBlcy5sZW5ndGgpIHsKICBvbkNvbXBsZXRlKHR5cGVDb252ZXJ0ZXJzKTsKIH0KfQpmdW5jdGlvbiByZWdpc3RlclR5cGUocmF3VHlwZSwgcmVnaXN0ZXJlZEluc3RhbmNlLCBvcHRpb25zKSB7CiBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKIGlmICghKCJhcmdQYWNrQWR2YW5jZSIgaW4gcmVnaXN0ZXJlZEluc3RhbmNlKSkgewogIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTsKIH0KIHZhciBuYW1lID0gcmVnaXN0ZXJlZEluc3RhbmNlLm5hbWU7CiBpZiAoIXJhd1R5cGUpIHsKICB0aHJvd0JpbmRpbmdFcnJvcigndHlwZSAiJyArIG5hbWUgKyAnIiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyJyk7CiB9CiBpZiAocmVnaXN0ZXJlZFR5cGVzLmhhc093blByb3BlcnR5KHJhd1R5cGUpKSB7CiAgaWYgKG9wdGlvbnMuaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucykgewogICByZXR1cm47CiAgfSBlbHNlIHsKICAgdGhyb3dCaW5kaW5nRXJyb3IoIkNhbm5vdCByZWdpc3RlciB0eXBlICciICsgbmFtZSArICInIHR3aWNlIik7CiAgfQogfQogcmVnaXN0ZXJlZFR5cGVzW3Jhd1R5cGVdID0gcmVnaXN0ZXJlZEluc3RhbmNlOwogZGVsZXRlIHR5cGVEZXBlbmRlbmNpZXNbcmF3VHlwZV07CiBpZiAoYXdhaXRpbmdEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocmF3VHlwZSkpIHsKICB2YXIgY2FsbGJhY2tzID0gYXdhaXRpbmdEZXBlbmRlbmNpZXNbcmF3VHlwZV07CiAgZGVsZXRlIGF3YWl0aW5nRGVwZW5kZW5jaWVzW3Jhd1R5cGVdOwogIGNhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbihjYikgewogICBjYigpOwogIH0pKTsKIH0KfQpmdW5jdGlvbiBzaW1wbGVSZWFkVmFsdWVGcm9tUG9pbnRlcihwb2ludGVyKSB7CiByZXR1cm4gdGhpc1siZnJvbVdpcmVUeXBlIl0oSEVBUFUzMltwb2ludGVyID4+IDJdKTsKfQpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZyhyYXdUeXBlLCBjaGFyU2l6ZSwgbmFtZSkgewogbmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobmFtZSk7CiB2YXIgZ2V0SGVhcCwgc2hpZnQ7CiBpZiAoY2hhclNpemUgPT09IDIpIHsKICBnZXRIZWFwID0gKGZ1bmN0aW9uKCkgewogICByZXR1cm4gSEVBUFUxNjsKICB9KTsKICBzaGlmdCA9IDE7CiB9IGVsc2UgaWYgKGNoYXJTaXplID09PSA0KSB7CiAgZ2V0SGVhcCA9IChmdW5jdGlvbigpIHsKICAgcmV0dXJuIEhFQVBVMzI7CiAgfSk7CiAgc2hpZnQgPSAyOwogfQogcmVnaXN0ZXJUeXBlKHJhd1R5cGUsIHsKICBuYW1lOiBuYW1lLAogICJmcm9tV2lyZVR5cGUiOiAoZnVuY3Rpb24odmFsdWUpIHsKICAgdmFyIEhFQVAgPSBnZXRIZWFwKCk7CiAgIHZhciBsZW5ndGggPSBIRUFQVTMyW3ZhbHVlID4+IDJdOwogICB2YXIgYSA9IG5ldyBBcnJheShsZW5ndGgpOwogICB2YXIgc3RhcnQgPSB2YWx1ZSArIDQgPj4gc2hpZnQ7CiAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgIGFbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEhFQVBbc3RhcnQgKyBpXSk7CiAgIH0KICAgX2ZyZWUodmFsdWUpOwogICByZXR1cm4gYS5qb2luKCIiKTsKICB9KSwKICAidG9XaXJlVHlwZSI6IChmdW5jdGlvbihkZXN0cnVjdG9ycywgdmFsdWUpIHsKICAgdmFyIEhFQVAgPSBnZXRIZWFwKCk7CiAgIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7CiAgIHZhciBwdHIgPSBfbWFsbG9jKDQgKyBsZW5ndGggKiBjaGFyU2l6ZSk7CiAgIEhFQVBVMzJbcHRyID4+IDJdID0gbGVuZ3RoOwogICB2YXIgc3RhcnQgPSBwdHIgKyA0ID4+IHNoaWZ0OwogICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICBIRUFQW3N0YXJ0ICsgaV0gPSB2YWx1ZS5jaGFyQ29kZUF0KGkpOwogICB9CiAgIGlmIChkZXN0cnVjdG9ycyAhPT0gbnVsbCkgewogICAgZGVzdHJ1Y3RvcnMucHVzaChfZnJlZSwgcHRyKTsKICAgfQogICByZXR1cm4gcHRyOwogIH0pLAogICJhcmdQYWNrQWR2YW5jZSI6IDgsCiAgInJlYWRWYWx1ZUZyb21Qb2ludGVyIjogc2ltcGxlUmVhZFZhbHVlRnJvbVBvaW50ZXIsCiAgZGVzdHJ1Y3RvckZ1bmN0aW9uOiAoZnVuY3Rpb24ocHRyKSB7CiAgIF9mcmVlKHB0cik7CiAgfSkKIH0pOwp9CnZhciBfc3FydGYgPSBNYXRoX3NxcnQ7CmZ1bmN0aW9uIF9fZW12YWxfZGVjcmVmKGhhbmRsZSkgewogaWYgKGhhbmRsZSA+IDQgJiYgMCA9PT0gLS1lbXZhbF9oYW5kbGVfYXJyYXlbaGFuZGxlXS5yZWZjb3VudCkgewogIGVtdmFsX2hhbmRsZV9hcnJheVtoYW5kbGVdID0gdW5kZWZpbmVkOwogIGVtdmFsX2ZyZWVfbGlzdC5wdXNoKGhhbmRsZSk7CiB9Cn0KdmFyIF9sb2cgPSBNYXRoX2xvZzsKdmFyIF9lbXNjcmlwdGVuX3Bvc3RpbnZva2UgPSB0cnVlOwp2YXIgUFRIUkVBRF9TUEVDSUZJQyA9IHt9Owp2YXIgUFRIUkVBRF9TUEVDSUZJQ19ORVhUX0tFWSA9IDE7CnZhciBFUlJOT19DT0RFUyA9IHsKIEVQRVJNOiAxLAogRU5PRU5UOiAyLAogRVNSQ0g6IDMsCiBFSU5UUjogNCwKIEVJTzogNSwKIEVOWElPOiA2LAogRTJCSUc6IDcsCiBFTk9FWEVDOiA4LAogRUJBREY6IDksCiBFQ0hJTEQ6IDEwLAogRUFHQUlOOiAxMSwKIEVXT1VMREJMT0NLOiAxMSwKIEVOT01FTTogMTIsCiBFQUNDRVM6IDEzLAogRUZBVUxUOiAxNCwKIEVOT1RCTEs6IDE1LAogRUJVU1k6IDE2LAogRUVYSVNUOiAxNywKIEVYREVWOiAxOCwKIEVOT0RFVjogMTksCiBFTk9URElSOiAyMCwKIEVJU0RJUjogMjEsCiBFSU5WQUw6IDIyLAogRU5GSUxFOiAyMywKIEVNRklMRTogMjQsCiBFTk9UVFk6IDI1LAogRVRYVEJTWTogMjYsCiBFRkJJRzogMjcsCiBFTk9TUEM6IDI4LAogRVNQSVBFOiAyOSwKIEVST0ZTOiAzMCwKIEVNTElOSzogMzEsCiBFUElQRTogMzIsCiBFRE9NOiAzMywKIEVSQU5HRTogMzQsCiBFTk9NU0c6IDQyLAogRUlEUk06IDQzLAogRUNIUk5HOiA0NCwKIEVMMk5TWU5DOiA0NSwKIEVMM0hMVDogNDYsCiBFTDNSU1Q6IDQ3LAogRUxOUk5HOiA0OCwKIEVVTkFUQ0g6IDQ5LAogRU5PQ1NJOiA1MCwKIEVMMkhMVDogNTEsCiBFREVBRExLOiAzNSwKIEVOT0xDSzogMzcsCiBFQkFERTogNTIsCiBFQkFEUjogNTMsCiBFWEZVTEw6IDU0LAogRU5PQU5POiA1NSwKIEVCQURSUUM6IDU2LAogRUJBRFNMVDogNTcsCiBFREVBRExPQ0s6IDM1LAogRUJGT05UOiA1OSwKIEVOT1NUUjogNjAsCiBFTk9EQVRBOiA2MSwKIEVUSU1FOiA2MiwKIEVOT1NSOiA2MywKIEVOT05FVDogNjQsCiBFTk9QS0c6IDY1LAogRVJFTU9URTogNjYsCiBFTk9MSU5LOiA2NywKIEVBRFY6IDY4LAogRVNSTU5UOiA2OSwKIEVDT01NOiA3MCwKIEVQUk9UTzogNzEsCiBFTVVMVElIT1A6IDcyLAogRURPVERPVDogNzMsCiBFQkFETVNHOiA3NCwKIEVOT1RVTklROiA3NiwKIEVCQURGRDogNzcsCiBFUkVNQ0hHOiA3OCwKIEVMSUJBQ0M6IDc5LAogRUxJQkJBRDogODAsCiBFTElCU0NOOiA4MSwKIEVMSUJNQVg6IDgyLAogRUxJQkVYRUM6IDgzLAogRU5PU1lTOiAzOCwKIEVOT1RFTVBUWTogMzksCiBFTkFNRVRPT0xPTkc6IDM2LAogRUxPT1A6IDQwLAogRU9QTk9UU1VQUDogOTUsCiBFUEZOT1NVUFBPUlQ6IDk2LAogRUNPTk5SRVNFVDogMTA0LAogRU5PQlVGUzogMTA1LAogRUFGTk9TVVBQT1JUOiA5NywKIEVQUk9UT1RZUEU6IDkxLAogRU5PVFNPQ0s6IDg4LAogRU5PUFJPVE9PUFQ6IDkyLAogRVNIVVRET1dOOiAxMDgsCiBFQ09OTlJFRlVTRUQ6IDExMSwKIEVBRERSSU5VU0U6IDk4LAogRUNPTk5BQk9SVEVEOiAxMDMsCiBFTkVUVU5SRUFDSDogMTAxLAogRU5FVERPV046IDEwMCwKIEVUSU1FRE9VVDogMTEwLAogRUhPU1RET1dOOiAxMTIsCiBFSE9TVFVOUkVBQ0g6IDExMywKIEVJTlBST0dSRVNTOiAxMTUsCiBFQUxSRUFEWTogMTE0LAogRURFU1RBRERSUkVROiA4OSwKIEVNU0dTSVpFOiA5MCwKIEVQUk9UT05PU1VQUE9SVDogOTMsCiBFU09DS1ROT1NVUFBPUlQ6IDk0LAogRUFERFJOT1RBVkFJTDogOTksCiBFTkVUUkVTRVQ6IDEwMiwKIEVJU0NPTk46IDEwNiwKIEVOT1RDT05OOiAxMDcsCiBFVE9PTUFOWVJFRlM6IDEwOSwKIEVVU0VSUzogODcsCiBFRFFVT1Q6IDEyMiwKIEVTVEFMRTogMTE2LAogRU5PVFNVUDogOTUsCiBFTk9NRURJVU06IDEyMywKIEVJTFNFUTogODQsCiBFT1ZFUkZMT1c6IDc1LAogRUNBTkNFTEVEOiAxMjUsCiBFTk9UUkVDT1ZFUkFCTEU6IDEzMSwKIEVPV05FUkRFQUQ6IDEzMCwKIEVTVFJQSVBFOiA4Ngp9OwpmdW5jdGlvbiBfcHRocmVhZF9rZXlfY3JlYXRlKGtleSwgZGVzdHJ1Y3RvcikgewogaWYgKGtleSA9PSAwKSB7CiAgcmV0dXJuIEVSUk5PX0NPREVTLkVJTlZBTDsKIH0KIEhFQVAzMltrZXkgPj4gMl0gPSBQVEhSRUFEX1NQRUNJRklDX05FWFRfS0VZOwogUFRIUkVBRF9TUEVDSUZJQ1tQVEhSRUFEX1NQRUNJRklDX05FWFRfS0VZXSA9IDA7CiBQVEhSRUFEX1NQRUNJRklDX05FWFRfS0VZKys7CiByZXR1cm4gMDsKfQpmdW5jdGlvbiBnZXRTaGlmdEZyb21TaXplKHNpemUpIHsKIHN3aXRjaCAoc2l6ZSkgewogY2FzZSAxOgogIHJldHVybiAwOwogY2FzZSAyOgogIHJldHVybiAxOwogY2FzZSA0OgogIHJldHVybiAyOwogY2FzZSA4OgogIHJldHVybiAzOwogZGVmYXVsdDoKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIHR5cGUgc2l6ZTogIiArIHNpemUpOwogfQp9CmZ1bmN0aW9uIF9fZW1iaW5kX3JlZ2lzdGVyX2Jvb2wocmF3VHlwZSwgbmFtZSwgc2l6ZSwgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlKSB7CiB2YXIgc2hpZnQgPSBnZXRTaGlmdEZyb21TaXplKHNpemUpOwogbmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobmFtZSk7CiByZWdpc3RlclR5cGUocmF3VHlwZSwgewogIG5hbWU6IG5hbWUsCiAgImZyb21XaXJlVHlwZSI6IChmdW5jdGlvbih3dCkgewogICByZXR1cm4gISF3dDsKICB9KSwKICAidG9XaXJlVHlwZSI6IChmdW5jdGlvbihkZXN0cnVjdG9ycywgbykgewogICByZXR1cm4gbyA/IHRydWVWYWx1ZSA6IGZhbHNlVmFsdWU7CiAgfSksCiAgImFyZ1BhY2tBZHZhbmNlIjogOCwKICAicmVhZFZhbHVlRnJvbVBvaW50ZXIiOiAoZnVuY3Rpb24ocG9pbnRlcikgewogICB2YXIgaGVhcDsKICAgaWYgKHNpemUgPT09IDEpIHsKICAgIGhlYXAgPSBIRUFQODsKICAgfSBlbHNlIGlmIChzaXplID09PSAyKSB7CiAgICBoZWFwID0gSEVBUDE2OwogICB9IGVsc2UgaWYgKHNpemUgPT09IDQpIHsKICAgIGhlYXAgPSBIRUFQMzI7CiAgIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGJvb2xlYW4gdHlwZSBzaXplOiAiICsgbmFtZSk7CiAgIH0KICAgcmV0dXJuIHRoaXNbImZyb21XaXJlVHlwZSJdKGhlYXBbcG9pbnRlciA+PiBzaGlmdF0pOwogIH0pLAogIGRlc3RydWN0b3JGdW5jdGlvbjogbnVsbAogfSk7Cn0KZnVuY3Rpb24gX19lbXZhbF90YWtlX3ZhbHVlKHR5cGUsIGFyZ3YpIHsKIHR5cGUgPSByZXF1aXJlUmVnaXN0ZXJlZFR5cGUodHlwZSwgIl9lbXZhbF90YWtlX3ZhbHVlIik7CiB2YXIgdiA9IHR5cGVbInJlYWRWYWx1ZUZyb21Qb2ludGVyIl0oYXJndik7CiByZXR1cm4gX19lbXZhbF9yZWdpc3Rlcih2KTsKfQpmdW5jdGlvbiBfX2V4aXQoc3RhdHVzKSB7CiBNb2R1bGVbImV4aXQiXShzdGF0dXMpOwp9CmZ1bmN0aW9uIF9leGl0KHN0YXR1cykgewogX19leGl0KHN0YXR1cyk7Cn0KdmFyIEVSUk5PX01FU1NBR0VTID0gewogMDogIlN1Y2Nlc3MiLAogMTogIk5vdCBzdXBlci11c2VyIiwKIDI6ICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IiwKIDM6ICJObyBzdWNoIHByb2Nlc3MiLAogNDogIkludGVycnVwdGVkIHN5c3RlbSBjYWxsIiwKIDU6ICJJL08gZXJyb3IiLAogNjogIk5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MiLAogNzogIkFyZyBsaXN0IHRvbyBsb25nIiwKIDg6ICJFeGVjIGZvcm1hdCBlcnJvciIsCiA5OiAiQmFkIGZpbGUgbnVtYmVyIiwKIDEwOiAiTm8gY2hpbGRyZW4iLAogMTE6ICJObyBtb3JlIHByb2Nlc3NlcyIsCiAxMjogIk5vdCBlbm91Z2ggY29yZSIsCiAxMzogIlBlcm1pc3Npb24gZGVuaWVkIiwKIDE0OiAiQmFkIGFkZHJlc3MiLAogMTU6ICJCbG9jayBkZXZpY2UgcmVxdWlyZWQiLAogMTY6ICJNb3VudCBkZXZpY2UgYnVzeSIsCiAxNzogIkZpbGUgZXhpc3RzIiwKIDE4OiAiQ3Jvc3MtZGV2aWNlIGxpbmsiLAogMTk6ICJObyBzdWNoIGRldmljZSIsCiAyMDogIk5vdCBhIGRpcmVjdG9yeSIsCiAyMTogIklzIGEgZGlyZWN0b3J5IiwKIDIyOiAiSW52YWxpZCBhcmd1bWVudCIsCiAyMzogIlRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtIiwKIDI0OiAiVG9vIG1hbnkgb3BlbiBmaWxlcyIsCiAyNTogIk5vdCBhIHR5cGV3cml0ZXIiLAogMjY6ICJUZXh0IGZpbGUgYnVzeSIsCiAyNzogIkZpbGUgdG9vIGxhcmdlIiwKIDI4OiAiTm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UiLAogMjk6ICJJbGxlZ2FsIHNlZWsiLAogMzA6ICJSZWFkIG9ubHkgZmlsZSBzeXN0ZW0iLAogMzE6ICJUb28gbWFueSBsaW5rcyIsCiAzMjogIkJyb2tlbiBwaXBlIiwKIDMzOiAiTWF0aCBhcmcgb3V0IG9mIGRvbWFpbiBvZiBmdW5jIiwKIDM0OiAiTWF0aCByZXN1bHQgbm90IHJlcHJlc2VudGFibGUiLAogMzU6ICJGaWxlIGxvY2tpbmcgZGVhZGxvY2sgZXJyb3IiLAogMzY6ICJGaWxlIG9yIHBhdGggbmFtZSB0b28gbG9uZyIsCiAzNzogIk5vIHJlY29yZCBsb2NrcyBhdmFpbGFibGUiLAogMzg6ICJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQiLAogMzk6ICJEaXJlY3Rvcnkgbm90IGVtcHR5IiwKIDQwOiAiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MiLAogNDI6ICJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSIsCiA0MzogIklkZW50aWZpZXIgcmVtb3ZlZCIsCiA0NDogIkNoYW5uZWwgbnVtYmVyIG91dCBvZiByYW5nZSIsCiA0NTogIkxldmVsIDIgbm90IHN5bmNocm9uaXplZCIsCiA0NjogIkxldmVsIDMgaGFsdGVkIiwKIDQ3OiAiTGV2ZWwgMyByZXNldCIsCiA0ODogIkxpbmsgbnVtYmVyIG91dCBvZiByYW5nZSIsCiA0OTogIlByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQiLAogNTA6ICJObyBDU0kgc3RydWN0dXJlIGF2YWlsYWJsZSIsCiA1MTogIkxldmVsIDIgaGFsdGVkIiwKIDUyOiAiSW52YWxpZCBleGNoYW5nZSIsCiA1MzogIkludmFsaWQgcmVxdWVzdCBkZXNjcmlwdG9yIiwKIDU0OiAiRXhjaGFuZ2UgZnVsbCIsCiA1NTogIk5vIGFub2RlIiwKIDU2OiAiSW52YWxpZCByZXF1ZXN0IGNvZGUiLAogNTc6ICJJbnZhbGlkIHNsb3QiLAogNTk6ICJCYWQgZm9udCBmaWxlIGZtdCIsCiA2MDogIkRldmljZSBub3QgYSBzdHJlYW0iLAogNjE6ICJObyBkYXRhIChmb3Igbm8gZGVsYXkgaW8pIiwKIDYyOiAiVGltZXIgZXhwaXJlZCIsCiA2MzogIk91dCBvZiBzdHJlYW1zIHJlc291cmNlcyIsCiA2NDogIk1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrIiwKIDY1OiAiUGFja2FnZSBub3QgaW5zdGFsbGVkIiwKIDY2OiAiVGhlIG9iamVjdCBpcyByZW1vdGUiLAogNjc6ICJUaGUgbGluayBoYXMgYmVlbiBzZXZlcmVkIiwKIDY4OiAiQWR2ZXJ0aXNlIGVycm9yIiwKIDY5OiAiU3Jtb3VudCBlcnJvciIsCiA3MDogIkNvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZCIsCiA3MTogIlByb3RvY29sIGVycm9yIiwKIDcyOiAiTXVsdGlob3AgYXR0ZW1wdGVkIiwKIDczOiAiQ3Jvc3MgbW91bnQgcG9pbnQgKG5vdCByZWFsbHkgZXJyb3IpIiwKIDc0OiAiVHJ5aW5nIHRvIHJlYWQgdW5yZWFkYWJsZSBtZXNzYWdlIiwKIDc1OiAiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSIsCiA3NjogIkdpdmVuIGxvZy4gbmFtZSBub3QgdW5pcXVlIiwKIDc3OiAiZi5kLiBpbnZhbGlkIGZvciB0aGlzIG9wZXJhdGlvbiIsCiA3ODogIlJlbW90ZSBhZGRyZXNzIGNoYW5nZWQiLAogNzk6ICJDYW4gICBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYiIsCiA4MDogIkFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGliIiwKIDgxOiAiLmxpYiBzZWN0aW9uIGluIGEub3V0IGNvcnJ1cHRlZCIsCiA4MjogIkF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBsaWJzIiwKIDgzOiAiQXR0ZW1wdGluZyB0byBleGVjIGEgc2hhcmVkIGxpYnJhcnkiLAogODQ6ICJJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UiLAogODY6ICJTdHJlYW1zIHBpcGUgZXJyb3IiLAogODc6ICJUb28gbWFueSB1c2VycyIsCiA4ODogIlNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCIsCiA4OTogIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiLAogOTA6ICJNZXNzYWdlIHRvbyBsb25nIiwKIDkxOiAiUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0IiwKIDkyOiAiUHJvdG9jb2wgbm90IGF2YWlsYWJsZSIsCiA5MzogIlVua25vd24gcHJvdG9jb2wiLAogOTQ6ICJTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIiwKIDk1OiAiTm90IHN1cHBvcnRlZCIsCiA5NjogIlByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkIiwKIDk3OiAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCBmYW1pbHkiLAogOTg6ICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIiwKIDk5OiAiQWRkcmVzcyBub3QgYXZhaWxhYmxlIiwKIDEwMDogIk5ldHdvcmsgaW50ZXJmYWNlIGlzIG5vdCBjb25maWd1cmVkIiwKIDEwMTogIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiLAogMTAyOiAiQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrIiwKIDEwMzogIkNvbm5lY3Rpb24gYWJvcnRlZCIsCiAxMDQ6ICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiLAogMTA1OiAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSIsCiAxMDY6ICJTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQiLAogMTA3OiAiU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiLAogMTA4OiAiQ2FuJ3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24iLAogMTA5OiAiVG9vIG1hbnkgcmVmZXJlbmNlcyIsCiAxMTA6ICJDb25uZWN0aW9uIHRpbWVkIG91dCIsCiAxMTE6ICJDb25uZWN0aW9uIHJlZnVzZWQiLAogMTEyOiAiSG9zdCBpcyBkb3duIiwKIDExMzogIkhvc3QgaXMgdW5yZWFjaGFibGUiLAogMTE0OiAiU29ja2V0IGFscmVhZHkgY29ubmVjdGVkIiwKIDExNTogIkNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyIsCiAxMTY6ICJTdGFsZSBmaWxlIGhhbmRsZSIsCiAxMjI6ICJRdW90YSBleGNlZWRlZCIsCiAxMjM6ICJObyBtZWRpdW0gKGluIHRhcGUgZHJpdmUpIiwKIDEyNTogIk9wZXJhdGlvbiBjYW5jZWxlZCIsCiAxMzA6ICJQcmV2aW91cyBvd25lciBkaWVkIiwKIDEzMTogIlN0YXRlIG5vdCByZWNvdmVyYWJsZSIKfTsKZnVuY3Rpb24gX19fc2V0RXJyTm8odmFsdWUpIHsKIGlmIChNb2R1bGVbIl9fX2Vycm5vX2xvY2F0aW9uIl0pIEhFQVAzMltNb2R1bGVbIl9fX2Vycm5vX2xvY2F0aW9uIl0oKSA+PiAyXSA9IHZhbHVlOyBlbHNlIE1vZHVsZS5wcmludEVycigiZmFpbGVkIHRvIHNldCBlcnJubyBmcm9tIEpTIik7CiByZXR1cm4gdmFsdWU7Cn0KdmFyIFBBVEggPSB7CiBzcGxpdFBhdGg6IChmdW5jdGlvbihmaWxlbmFtZSkgewogIHZhciBzcGxpdFBhdGhSZSA9IC9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLzsKICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7CiB9KSwKIG5vcm1hbGl6ZUFycmF5OiAoZnVuY3Rpb24ocGFydHMsIGFsbG93QWJvdmVSb290KSB7CiAgdmFyIHVwID0gMDsKICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgdmFyIGxhc3QgPSBwYXJ0c1tpXTsKICAgaWYgKGxhc3QgPT09ICIuIikgewogICAgcGFydHMuc3BsaWNlKGksIDEpOwogICB9IGVsc2UgaWYgKGxhc3QgPT09ICIuLiIpIHsKICAgIHBhcnRzLnNwbGljZShpLCAxKTsKICAgIHVwKys7CiAgIH0gZWxzZSBpZiAodXApIHsKICAgIHBhcnRzLnNwbGljZShpLCAxKTsKICAgIHVwLS07CiAgIH0KICB9CiAgaWYgKGFsbG93QWJvdmVSb290KSB7CiAgIGZvciAoOyB1cC0tOyB1cCkgewogICAgcGFydHMudW5zaGlmdCgiLi4iKTsKICAgfQogIH0KICByZXR1cm4gcGFydHM7CiB9KSwKIG5vcm1hbGl6ZTogKGZ1bmN0aW9uKHBhdGgpIHsKICB2YXIgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAiLyIsIHRyYWlsaW5nU2xhc2ggPSBwYXRoLnN1YnN0cigtMSkgPT09ICIvIjsKICBwYXRoID0gUEFUSC5ub3JtYWxpemVBcnJheShwYXRoLnNwbGl0KCIvIikuZmlsdGVyKChmdW5jdGlvbihwKSB7CiAgIHJldHVybiAhIXA7CiAgfSkpLCAhaXNBYnNvbHV0ZSkuam9pbigiLyIpOwogIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkgewogICBwYXRoID0gIi4iOwogIH0KICBpZiAocGF0aCAmJiB0cmFpbGluZ1NsYXNoKSB7CiAgIHBhdGggKz0gIi8iOwogIH0KICByZXR1cm4gKGlzQWJzb2x1dGUgPyAiLyIgOiAiIikgKyBwYXRoOwogfSksCiBkaXJuYW1lOiAoZnVuY3Rpb24ocGF0aCkgewogIHZhciByZXN1bHQgPSBQQVRILnNwbGl0UGF0aChwYXRoKSwgcm9vdCA9IHJlc3VsdFswXSwgZGlyID0gcmVzdWx0WzFdOwogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgIHJldHVybiAiLiI7CiAgfQogIGlmIChkaXIpIHsKICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7CiAgfQogIHJldHVybiByb290ICsgZGlyOwogfSksCiBiYXNlbmFtZTogKGZ1bmN0aW9uKHBhdGgpIHsKICBpZiAocGF0aCA9PT0gIi8iKSByZXR1cm4gIi8iOwogIHZhciBsYXN0U2xhc2ggPSBwYXRoLmxhc3RJbmRleE9mKCIvIik7CiAgaWYgKGxhc3RTbGFzaCA9PT0gLTEpIHJldHVybiBwYXRoOwogIHJldHVybiBwYXRoLnN1YnN0cihsYXN0U2xhc2ggKyAxKTsKIH0pLAogZXh0bmFtZTogKGZ1bmN0aW9uKHBhdGgpIHsKICByZXR1cm4gUEFUSC5zcGxpdFBhdGgocGF0aClbM107CiB9KSwKIGpvaW46IChmdW5jdGlvbigpIHsKICB2YXIgcGF0aHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogIHJldHVybiBQQVRILm5vcm1hbGl6ZShwYXRocy5qb2luKCIvIikpOwogfSksCiBqb2luMjogKGZ1bmN0aW9uKGwsIHIpIHsKICByZXR1cm4gUEFUSC5ub3JtYWxpemUobCArICIvIiArIHIpOwogfSksCiByZXNvbHZlOiAoZnVuY3Rpb24oKSB7CiAgdmFyIHJlc29sdmVkUGF0aCA9ICIiLCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7CiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHsKICAgdmFyIHBhdGggPSBpID49IDAgPyBhcmd1bWVudHNbaV0gOiBGUy5jd2QoKTsKICAgaWYgKHR5cGVvZiBwYXRoICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTsKICAgfSBlbHNlIGlmICghcGF0aCkgewogICAgcmV0dXJuICIiOwogICB9CiAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAiLyIgKyByZXNvbHZlZFBhdGg7CiAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gIi8iOwogIH0KICByZXNvbHZlZFBhdGggPSBQQVRILm5vcm1hbGl6ZUFycmF5KHJlc29sdmVkUGF0aC5zcGxpdCgiLyIpLmZpbHRlcigoZnVuY3Rpb24ocCkgewogICByZXR1cm4gISFwOwogIH0pKSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oIi8iKTsKICByZXR1cm4gKHJlc29sdmVkQWJzb2x1dGUgPyAiLyIgOiAiIikgKyByZXNvbHZlZFBhdGggfHwgIi4iOwogfSksCiByZWxhdGl2ZTogKGZ1bmN0aW9uKGZyb20sIHRvKSB7CiAgZnJvbSA9IFBBVEgucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7CiAgdG8gPSBQQVRILnJlc29sdmUodG8pLnN1YnN0cigxKTsKICBmdW5jdGlvbiB0cmltKGFycikgewogICB2YXIgc3RhcnQgPSAwOwogICBmb3IgKDsgc3RhcnQgPCBhcnIubGVuZ3RoOyBzdGFydCsrKSB7CiAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gIiIpIGJyZWFrOwogICB9CiAgIHZhciBlbmQgPSBhcnIubGVuZ3RoIC0gMTsKICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkgewogICAgaWYgKGFycltlbmRdICE9PSAiIikgYnJlYWs7CiAgIH0KICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107CiAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CiAgfQogIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoIi8iKSk7CiAgdmFyIHRvUGFydHMgPSB0cmltKHRvLnNwbGl0KCIvIikpOwogIHZhciBsZW5ndGggPSBNYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLCB0b1BhcnRzLmxlbmd0aCk7CiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHsKICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7CiAgICBicmVhazsKICAgfQogIH0KICB2YXIgb3V0cHV0UGFydHMgPSBbXTsKICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgIG91dHB1dFBhcnRzLnB1c2goIi4uIik7CiAgfQogIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7CiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oIi8iKTsKIH0pCn07CnZhciBUVFkgPSB7CiB0dHlzOiBbXSwKIGluaXQ6IChmdW5jdGlvbigpIHt9KSwKIHNodXRkb3duOiAoZnVuY3Rpb24oKSB7fSksCiByZWdpc3RlcjogKGZ1bmN0aW9uKGRldiwgb3BzKSB7CiAgVFRZLnR0eXNbZGV2XSA9IHsKICAgaW5wdXQ6IFtdLAogICBvdXRwdXQ6IFtdLAogICBvcHM6IG9wcwogIH07CiAgRlMucmVnaXN0ZXJEZXZpY2UoZGV2LCBUVFkuc3RyZWFtX29wcyk7CiB9KSwKIHN0cmVhbV9vcHM6IHsKICBvcGVuOiAoZnVuY3Rpb24oc3RyZWFtKSB7CiAgIHZhciB0dHkgPSBUVFkudHR5c1tzdHJlYW0ubm9kZS5yZGV2XTsKICAgaWYgKCF0dHkpIHsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVik7CiAgIH0KICAgc3RyZWFtLnR0eSA9IHR0eTsKICAgc3RyZWFtLnNlZWthYmxlID0gZmFsc2U7CiAgfSksCiAgY2xvc2U6IChmdW5jdGlvbihzdHJlYW0pIHsKICAgc3RyZWFtLnR0eS5vcHMuZmx1c2goc3RyZWFtLnR0eSk7CiAgfSksCiAgZmx1c2g6IChmdW5jdGlvbihzdHJlYW0pIHsKICAgc3RyZWFtLnR0eS5vcHMuZmx1c2goc3RyZWFtLnR0eSk7CiAgfSksCiAgcmVhZDogKGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zKSB7CiAgIGlmICghc3RyZWFtLnR0eSB8fCAhc3RyZWFtLnR0eS5vcHMuZ2V0X2NoYXIpIHsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOWElPKTsKICAgfQogICB2YXIgYnl0ZXNSZWFkID0gMDsKICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgdmFyIHJlc3VsdDsKICAgIHRyeSB7CiAgICAgcmVzdWx0ID0gc3RyZWFtLnR0eS5vcHMuZ2V0X2NoYXIoc3RyZWFtLnR0eSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKTsKICAgIH0KICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBieXRlc1JlYWQgPT09IDApIHsKICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQUdBSU4pOwogICAgfQogICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkgYnJlYWs7CiAgICBieXRlc1JlYWQrKzsKICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHJlc3VsdDsKICAgfQogICBpZiAoYnl0ZXNSZWFkKSB7CiAgICBzdHJlYW0ubm9kZS50aW1lc3RhbXAgPSBEYXRlLm5vdygpOwogICB9CiAgIHJldHVybiBieXRlc1JlYWQ7CiAgfSksCiAgd3JpdGU6IChmdW5jdGlvbihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvcykgewogICBpZiAoIXN0cmVhbS50dHkgfHwgIXN0cmVhbS50dHkub3BzLnB1dF9jaGFyKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTlhJTyk7CiAgIH0KICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgdHJ5IHsKICAgICBzdHJlYW0udHR5Lm9wcy5wdXRfY2hhcihzdHJlYW0udHR5LCBidWZmZXJbb2Zmc2V0ICsgaV0pOwogICAgfSBjYXRjaCAoZSkgewogICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyk7CiAgICB9CiAgIH0KICAgaWYgKGxlbmd0aCkgewogICAgc3RyZWFtLm5vZGUudGltZXN0YW1wID0gRGF0ZS5ub3coKTsKICAgfQogICByZXR1cm4gaTsKICB9KQogfSwKIGRlZmF1bHRfdHR5X29wczogewogIGdldF9jaGFyOiAoZnVuY3Rpb24odHR5KSB7CiAgIGlmICghdHR5LmlucHV0Lmxlbmd0aCkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICBpZiAoRU5WSVJPTk1FTlRfSVNfTk9ERSkgewogICAgIHZhciBCVUZTSVpFID0gMjU2OwogICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKEJVRlNJWkUpOwogICAgIHZhciBieXRlc1JlYWQgPSAwOwogICAgIHZhciBmZCA9IHByb2Nlc3Muc3RkaW4uZmQ7CiAgICAgdmFyIHVzaW5nRGV2aWNlID0gZmFsc2U7CiAgICAgdHJ5IHsKICAgICAgZmQgPSBmcy5vcGVuU3luYygiL2Rldi9zdGRpbiIsICJyIik7CiAgICAgIHVzaW5nRGV2aWNlID0gdHJ1ZTsKICAgICB9IGNhdGNoIChlKSB7fQogICAgIGJ5dGVzUmVhZCA9IGZzLnJlYWRTeW5jKGZkLCBidWYsIDAsIEJVRlNJWkUsIG51bGwpOwogICAgIGlmICh1c2luZ0RldmljZSkgewogICAgICBmcy5jbG9zZVN5bmMoZmQpOwogICAgIH0KICAgICBpZiAoYnl0ZXNSZWFkID4gMCkgewogICAgICByZXN1bHQgPSBidWYuc2xpY2UoMCwgYnl0ZXNSZWFkKS50b1N0cmluZygidXRmLTgiKTsKICAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBudWxsOwogICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygd2luZG93LnByb21wdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgcmVzdWx0ID0gd2luZG93LnByb21wdCgiSW5wdXQ6ICIpOwogICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHsKICAgICAgcmVzdWx0ICs9ICJcbiI7CiAgICAgfQogICAgfSBlbHNlIGlmICh0eXBlb2YgcmVhZGxpbmUgPT0gImZ1bmN0aW9uIikgewogICAgIHJlc3VsdCA9IHJlYWRsaW5lKCk7CiAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgewogICAgICByZXN1bHQgKz0gIlxuIjsKICAgICB9CiAgICB9CiAgICBpZiAoIXJlc3VsdCkgewogICAgIHJldHVybiBudWxsOwogICAgfQogICAgdHR5LmlucHV0ID0gaW50QXJyYXlGcm9tU3RyaW5nKHJlc3VsdCwgdHJ1ZSk7CiAgIH0KICAgcmV0dXJuIHR0eS5pbnB1dC5zaGlmdCgpOwogIH0pLAogIHB1dF9jaGFyOiAoZnVuY3Rpb24odHR5LCB2YWwpIHsKICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IDEwKSB7CiAgICBNb2R1bGVbInByaW50Il0oVVRGOEFycmF5VG9TdHJpbmcodHR5Lm91dHB1dCwgMCkpOwogICAgdHR5Lm91dHB1dCA9IFtdOwogICB9IGVsc2UgewogICAgaWYgKHZhbCAhPSAwKSB0dHkub3V0cHV0LnB1c2godmFsKTsKICAgfQogIH0pLAogIGZsdXNoOiAoZnVuY3Rpb24odHR5KSB7CiAgIGlmICh0dHkub3V0cHV0ICYmIHR0eS5vdXRwdXQubGVuZ3RoID4gMCkgewogICAgTW9kdWxlWyJwcmludCJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsIDApKTsKICAgIHR0eS5vdXRwdXQgPSBbXTsKICAgfQogIH0pCiB9LAogZGVmYXVsdF90dHkxX29wczogewogIHB1dF9jaGFyOiAoZnVuY3Rpb24odHR5LCB2YWwpIHsKICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IDEwKSB7CiAgICBNb2R1bGVbInByaW50RXJyIl0oVVRGOEFycmF5VG9TdHJpbmcodHR5Lm91dHB1dCwgMCkpOwogICAgdHR5Lm91dHB1dCA9IFtdOwogICB9IGVsc2UgewogICAgaWYgKHZhbCAhPSAwKSB0dHkub3V0cHV0LnB1c2godmFsKTsKICAgfQogIH0pLAogIGZsdXNoOiAoZnVuY3Rpb24odHR5KSB7CiAgIGlmICh0dHkub3V0cHV0ICYmIHR0eS5vdXRwdXQubGVuZ3RoID4gMCkgewogICAgTW9kdWxlWyJwcmludEVyciJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsIDApKTsKICAgIHR0eS5vdXRwdXQgPSBbXTsKICAgfQogIH0pCiB9Cn07CnZhciBNRU1GUyA9IHsKIG9wc190YWJsZTogbnVsbCwKIG1vdW50OiAoZnVuY3Rpb24obW91bnQpIHsKICByZXR1cm4gTUVNRlMuY3JlYXRlTm9kZShudWxsLCAiLyIsIDE2Mzg0IHwgNTExLCAwKTsKIH0pLAogY3JlYXRlTm9kZTogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KSB7CiAgaWYgKEZTLmlzQmxrZGV2KG1vZGUpIHx8IEZTLmlzRklGTyhtb2RlKSkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfQogIGlmICghTUVNRlMub3BzX3RhYmxlKSB7CiAgIE1FTUZTLm9wc190YWJsZSA9IHsKICAgIGRpcjogewogICAgIG5vZGU6IHsKICAgICAgZ2V0YXR0cjogTUVNRlMubm9kZV9vcHMuZ2V0YXR0ciwKICAgICAgc2V0YXR0cjogTUVNRlMubm9kZV9vcHMuc2V0YXR0ciwKICAgICAgbG9va3VwOiBNRU1GUy5ub2RlX29wcy5sb29rdXAsCiAgICAgIG1rbm9kOiBNRU1GUy5ub2RlX29wcy5ta25vZCwKICAgICAgcmVuYW1lOiBNRU1GUy5ub2RlX29wcy5yZW5hbWUsCiAgICAgIHVubGluazogTUVNRlMubm9kZV9vcHMudW5saW5rLAogICAgICBybWRpcjogTUVNRlMubm9kZV9vcHMucm1kaXIsCiAgICAgIHJlYWRkaXI6IE1FTUZTLm5vZGVfb3BzLnJlYWRkaXIsCiAgICAgIHN5bWxpbms6IE1FTUZTLm5vZGVfb3BzLnN5bWxpbmsKICAgICB9LAogICAgIHN0cmVhbTogewogICAgICBsbHNlZWs6IE1FTUZTLnN0cmVhbV9vcHMubGxzZWVrCiAgICAgfQogICAgfSwKICAgIGZpbGU6IHsKICAgICBub2RlOiB7CiAgICAgIGdldGF0dHI6IE1FTUZTLm5vZGVfb3BzLmdldGF0dHIsCiAgICAgIHNldGF0dHI6IE1FTUZTLm5vZGVfb3BzLnNldGF0dHIKICAgICB9LAogICAgIHN0cmVhbTogewogICAgICBsbHNlZWs6IE1FTUZTLnN0cmVhbV9vcHMubGxzZWVrLAogICAgICByZWFkOiBNRU1GUy5zdHJlYW1fb3BzLnJlYWQsCiAgICAgIHdyaXRlOiBNRU1GUy5zdHJlYW1fb3BzLndyaXRlLAogICAgICBhbGxvY2F0ZTogTUVNRlMuc3RyZWFtX29wcy5hbGxvY2F0ZSwKICAgICAgbW1hcDogTUVNRlMuc3RyZWFtX29wcy5tbWFwLAogICAgICBtc3luYzogTUVNRlMuc3RyZWFtX29wcy5tc3luYwogICAgIH0KICAgIH0sCiAgICBsaW5rOiB7CiAgICAgbm9kZTogewogICAgICBnZXRhdHRyOiBNRU1GUy5ub2RlX29wcy5nZXRhdHRyLAogICAgICBzZXRhdHRyOiBNRU1GUy5ub2RlX29wcy5zZXRhdHRyLAogICAgICByZWFkbGluazogTUVNRlMubm9kZV9vcHMucmVhZGxpbmsKICAgICB9LAogICAgIHN0cmVhbToge30KICAgIH0sCiAgICBjaHJkZXY6IHsKICAgICBub2RlOiB7CiAgICAgIGdldGF0dHI6IE1FTUZTLm5vZGVfb3BzLmdldGF0dHIsCiAgICAgIHNldGF0dHI6IE1FTUZTLm5vZGVfb3BzLnNldGF0dHIKICAgICB9LAogICAgIHN0cmVhbTogRlMuY2hyZGV2X3N0cmVhbV9vcHMKICAgIH0KICAgfTsKICB9CiAgdmFyIG5vZGUgPSBGUy5jcmVhdGVOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KTsKICBpZiAoRlMuaXNEaXIobm9kZS5tb2RlKSkgewogICBub2RlLm5vZGVfb3BzID0gTUVNRlMub3BzX3RhYmxlLmRpci5ub2RlOwogICBub2RlLnN0cmVhbV9vcHMgPSBNRU1GUy5vcHNfdGFibGUuZGlyLnN0cmVhbTsKICAgbm9kZS5jb250ZW50cyA9IHt9OwogIH0gZWxzZSBpZiAoRlMuaXNGaWxlKG5vZGUubW9kZSkpIHsKICAgbm9kZS5ub2RlX29wcyA9IE1FTUZTLm9wc190YWJsZS5maWxlLm5vZGU7CiAgIG5vZGUuc3RyZWFtX29wcyA9IE1FTUZTLm9wc190YWJsZS5maWxlLnN0cmVhbTsKICAgbm9kZS51c2VkQnl0ZXMgPSAwOwogICBub2RlLmNvbnRlbnRzID0gbnVsbDsKICB9IGVsc2UgaWYgKEZTLmlzTGluayhub2RlLm1vZGUpKSB7CiAgIG5vZGUubm9kZV9vcHMgPSBNRU1GUy5vcHNfdGFibGUubGluay5ub2RlOwogICBub2RlLnN0cmVhbV9vcHMgPSBNRU1GUy5vcHNfdGFibGUubGluay5zdHJlYW07CiAgfSBlbHNlIGlmIChGUy5pc0NocmRldihub2RlLm1vZGUpKSB7CiAgIG5vZGUubm9kZV9vcHMgPSBNRU1GUy5vcHNfdGFibGUuY2hyZGV2Lm5vZGU7CiAgIG5vZGUuc3RyZWFtX29wcyA9IE1FTUZTLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtOwogIH0KICBub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgaWYgKHBhcmVudCkgewogICBwYXJlbnQuY29udGVudHNbbmFtZV0gPSBub2RlOwogIH0KICByZXR1cm4gbm9kZTsKIH0pLAogZ2V0RmlsZURhdGFBc1JlZ3VsYXJBcnJheTogKGZ1bmN0aW9uKG5vZGUpIHsKICBpZiAobm9kZS5jb250ZW50cyAmJiBub2RlLmNvbnRlbnRzLnN1YmFycmF5KSB7CiAgIHZhciBhcnIgPSBbXTsKICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnVzZWRCeXRlczsgKytpKSBhcnIucHVzaChub2RlLmNvbnRlbnRzW2ldKTsKICAgcmV0dXJuIGFycjsKICB9CiAgcmV0dXJuIG5vZGUuY29udGVudHM7CiB9KSwKIGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OiAoZnVuY3Rpb24obm9kZSkgewogIGlmICghbm9kZS5jb250ZW50cykgcmV0dXJuIG5ldyBVaW50OEFycmF5OwogIGlmIChub2RlLmNvbnRlbnRzLnN1YmFycmF5KSByZXR1cm4gbm9kZS5jb250ZW50cy5zdWJhcnJheSgwLCBub2RlLnVzZWRCeXRlcyk7CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5vZGUuY29udGVudHMpOwogfSksCiBleHBhbmRGaWxlU3RvcmFnZTogKGZ1bmN0aW9uKG5vZGUsIG5ld0NhcGFjaXR5KSB7CiAgaWYgKG5vZGUuY29udGVudHMgJiYgbm9kZS5jb250ZW50cy5zdWJhcnJheSAmJiBuZXdDYXBhY2l0eSA+IG5vZGUuY29udGVudHMubGVuZ3RoKSB7CiAgIG5vZGUuY29udGVudHMgPSBNRU1GUy5nZXRGaWxlRGF0YUFzUmVndWxhckFycmF5KG5vZGUpOwogICBub2RlLnVzZWRCeXRlcyA9IG5vZGUuY29udGVudHMubGVuZ3RoOwogIH0KICBpZiAoIW5vZGUuY29udGVudHMgfHwgbm9kZS5jb250ZW50cy5zdWJhcnJheSkgewogICB2YXIgcHJldkNhcGFjaXR5ID0gbm9kZS5jb250ZW50cyA/IG5vZGUuY29udGVudHMuYnVmZmVyLmJ5dGVMZW5ndGggOiAwOwogICBpZiAocHJldkNhcGFjaXR5ID49IG5ld0NhcGFjaXR5KSByZXR1cm47CiAgIHZhciBDQVBBQ0lUWV9ET1VCTElOR19NQVggPSAxMDI0ICogMTAyNDsKICAgbmV3Q2FwYWNpdHkgPSBNYXRoLm1heChuZXdDYXBhY2l0eSwgcHJldkNhcGFjaXR5ICogKHByZXZDYXBhY2l0eSA8IENBUEFDSVRZX0RPVUJMSU5HX01BWCA/IDIgOiAxLjEyNSkgfCAwKTsKICAgaWYgKHByZXZDYXBhY2l0eSAhPSAwKSBuZXdDYXBhY2l0eSA9IE1hdGgubWF4KG5ld0NhcGFjaXR5LCAyNTYpOwogICB2YXIgb2xkQ29udGVudHMgPSBub2RlLmNvbnRlbnRzOwogICBub2RlLmNvbnRlbnRzID0gbmV3IFVpbnQ4QXJyYXkobmV3Q2FwYWNpdHkpOwogICBpZiAobm9kZS51c2VkQnl0ZXMgPiAwKSBub2RlLmNvbnRlbnRzLnNldChvbGRDb250ZW50cy5zdWJhcnJheSgwLCBub2RlLnVzZWRCeXRlcyksIDApOwogICByZXR1cm47CiAgfQogIGlmICghbm9kZS5jb250ZW50cyAmJiBuZXdDYXBhY2l0eSA+IDApIG5vZGUuY29udGVudHMgPSBbXTsKICB3aGlsZSAobm9kZS5jb250ZW50cy5sZW5ndGggPCBuZXdDYXBhY2l0eSkgbm9kZS5jb250ZW50cy5wdXNoKDApOwogfSksCiByZXNpemVGaWxlU3RvcmFnZTogKGZ1bmN0aW9uKG5vZGUsIG5ld1NpemUpIHsKICBpZiAobm9kZS51c2VkQnl0ZXMgPT0gbmV3U2l6ZSkgcmV0dXJuOwogIGlmIChuZXdTaXplID09IDApIHsKICAgbm9kZS5jb250ZW50cyA9IG51bGw7CiAgIG5vZGUudXNlZEJ5dGVzID0gMDsKICAgcmV0dXJuOwogIH0KICBpZiAoIW5vZGUuY29udGVudHMgfHwgbm9kZS5jb250ZW50cy5zdWJhcnJheSkgewogICB2YXIgb2xkQ29udGVudHMgPSBub2RlLmNvbnRlbnRzOwogICBub2RlLmNvbnRlbnRzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKG5ld1NpemUpKTsKICAgaWYgKG9sZENvbnRlbnRzKSB7CiAgICBub2RlLmNvbnRlbnRzLnNldChvbGRDb250ZW50cy5zdWJhcnJheSgwLCBNYXRoLm1pbihuZXdTaXplLCBub2RlLnVzZWRCeXRlcykpKTsKICAgfQogICBub2RlLnVzZWRCeXRlcyA9IG5ld1NpemU7CiAgIHJldHVybjsKICB9CiAgaWYgKCFub2RlLmNvbnRlbnRzKSBub2RlLmNvbnRlbnRzID0gW107CiAgaWYgKG5vZGUuY29udGVudHMubGVuZ3RoID4gbmV3U2l6ZSkgbm9kZS5jb250ZW50cy5sZW5ndGggPSBuZXdTaXplOyBlbHNlIHdoaWxlIChub2RlLmNvbnRlbnRzLmxlbmd0aCA8IG5ld1NpemUpIG5vZGUuY29udGVudHMucHVzaCgwKTsKICBub2RlLnVzZWRCeXRlcyA9IG5ld1NpemU7CiB9KSwKIG5vZGVfb3BzOiB7CiAgZ2V0YXR0cjogKGZ1bmN0aW9uKG5vZGUpIHsKICAgdmFyIGF0dHIgPSB7fTsKICAgYXR0ci5kZXYgPSBGUy5pc0NocmRldihub2RlLm1vZGUpID8gbm9kZS5pZCA6IDE7CiAgIGF0dHIuaW5vID0gbm9kZS5pZDsKICAgYXR0ci5tb2RlID0gbm9kZS5tb2RlOwogICBhdHRyLm5saW5rID0gMTsKICAgYXR0ci51aWQgPSAwOwogICBhdHRyLmdpZCA9IDA7CiAgIGF0dHIucmRldiA9IG5vZGUucmRldjsKICAgaWYgKEZTLmlzRGlyKG5vZGUubW9kZSkpIHsKICAgIGF0dHIuc2l6ZSA9IDQwOTY7CiAgIH0gZWxzZSBpZiAoRlMuaXNGaWxlKG5vZGUubW9kZSkpIHsKICAgIGF0dHIuc2l6ZSA9IG5vZGUudXNlZEJ5dGVzOwogICB9IGVsc2UgaWYgKEZTLmlzTGluayhub2RlLm1vZGUpKSB7CiAgICBhdHRyLnNpemUgPSBub2RlLmxpbmsubGVuZ3RoOwogICB9IGVsc2UgewogICAgYXR0ci5zaXplID0gMDsKICAgfQogICBhdHRyLmF0aW1lID0gbmV3IERhdGUobm9kZS50aW1lc3RhbXApOwogICBhdHRyLm10aW1lID0gbmV3IERhdGUobm9kZS50aW1lc3RhbXApOwogICBhdHRyLmN0aW1lID0gbmV3IERhdGUobm9kZS50aW1lc3RhbXApOwogICBhdHRyLmJsa3NpemUgPSA0MDk2OwogICBhdHRyLmJsb2NrcyA9IE1hdGguY2VpbChhdHRyLnNpemUgLyBhdHRyLmJsa3NpemUpOwogICByZXR1cm4gYXR0cjsKICB9KSwKICBzZXRhdHRyOiAoZnVuY3Rpb24obm9kZSwgYXR0cikgewogICBpZiAoYXR0ci5tb2RlICE9PSB1bmRlZmluZWQpIHsKICAgIG5vZGUubW9kZSA9IGF0dHIubW9kZTsKICAgfQogICBpZiAoYXR0ci50aW1lc3RhbXAgIT09IHVuZGVmaW5lZCkgewogICAgbm9kZS50aW1lc3RhbXAgPSBhdHRyLnRpbWVzdGFtcDsKICAgfQogICBpZiAoYXR0ci5zaXplICE9PSB1bmRlZmluZWQpIHsKICAgIE1FTUZTLnJlc2l6ZUZpbGVTdG9yYWdlKG5vZGUsIGF0dHIuc2l6ZSk7CiAgIH0KICB9KSwKICBsb29rdXA6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHsKICAgdGhyb3cgRlMuZ2VuZXJpY0Vycm9yc1tFUlJOT19DT0RFUy5FTk9FTlRdOwogIH0pLAogIG1rbm9kOiAoZnVuY3Rpb24ocGFyZW50LCBuYW1lLCBtb2RlLCBkZXYpIHsKICAgcmV0dXJuIE1FTUZTLmNyZWF0ZU5vZGUocGFyZW50LCBuYW1lLCBtb2RlLCBkZXYpOwogIH0pLAogIHJlbmFtZTogKGZ1bmN0aW9uKG9sZF9ub2RlLCBuZXdfZGlyLCBuZXdfbmFtZSkgewogICBpZiAoRlMuaXNEaXIob2xkX25vZGUubW9kZSkpIHsKICAgIHZhciBuZXdfbm9kZTsKICAgIHRyeSB7CiAgICAgbmV3X25vZGUgPSBGUy5sb29rdXBOb2RlKG5ld19kaXIsIG5ld19uYW1lKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAobmV3X25vZGUpIHsKICAgICBmb3IgKHZhciBpIGluIG5ld19ub2RlLmNvbnRlbnRzKSB7CiAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RFTVBUWSk7CiAgICAgfQogICAgfQogICB9CiAgIGRlbGV0ZSBvbGRfbm9kZS5wYXJlbnQuY29udGVudHNbb2xkX25vZGUubmFtZV07CiAgIG9sZF9ub2RlLm5hbWUgPSBuZXdfbmFtZTsKICAgbmV3X2Rpci5jb250ZW50c1tuZXdfbmFtZV0gPSBvbGRfbm9kZTsKICAgb2xkX25vZGUucGFyZW50ID0gbmV3X2RpcjsKICB9KSwKICB1bmxpbms6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHsKICAgZGVsZXRlIHBhcmVudC5jb250ZW50c1tuYW1lXTsKICB9KSwKICBybWRpcjogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkgewogICB2YXIgbm9kZSA9IEZTLmxvb2t1cE5vZGUocGFyZW50LCBuYW1lKTsKICAgZm9yICh2YXIgaSBpbiBub2RlLmNvbnRlbnRzKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9URU1QVFkpOwogICB9CiAgIGRlbGV0ZSBwYXJlbnQuY29udGVudHNbbmFtZV07CiAgfSksCiAgcmVhZGRpcjogKGZ1bmN0aW9uKG5vZGUpIHsKICAgdmFyIGVudHJpZXMgPSBbICIuIiwgIi4uIiBdOwogICBmb3IgKHZhciBrZXkgaW4gbm9kZS5jb250ZW50cykgewogICAgaWYgKCFub2RlLmNvbnRlbnRzLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICBjb250aW51ZTsKICAgIH0KICAgIGVudHJpZXMucHVzaChrZXkpOwogICB9CiAgIHJldHVybiBlbnRyaWVzOwogIH0pLAogIHN5bWxpbms6IChmdW5jdGlvbihwYXJlbnQsIG5ld25hbWUsIG9sZHBhdGgpIHsKICAgdmFyIG5vZGUgPSBNRU1GUy5jcmVhdGVOb2RlKHBhcmVudCwgbmV3bmFtZSwgNTExIHwgNDA5NjAsIDApOwogICBub2RlLmxpbmsgPSBvbGRwYXRoOwogICByZXR1cm4gbm9kZTsKICB9KSwKICByZWFkbGluazogKGZ1bmN0aW9uKG5vZGUpIHsKICAgaWYgKCFGUy5pc0xpbmsobm9kZS5tb2RlKSkgewogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAgfQogICByZXR1cm4gbm9kZS5saW5rOwogIH0pCiB9LAogc3RyZWFtX29wczogewogIHJlYWQ6IChmdW5jdGlvbihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7CiAgIHZhciBjb250ZW50cyA9IHN0cmVhbS5ub2RlLmNvbnRlbnRzOwogICBpZiAocG9zaXRpb24gPj0gc3RyZWFtLm5vZGUudXNlZEJ5dGVzKSByZXR1cm4gMDsKICAgdmFyIHNpemUgPSBNYXRoLm1pbihzdHJlYW0ubm9kZS51c2VkQnl0ZXMgLSBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgYXNzZXJ0KHNpemUgPj0gMCk7CiAgIGlmIChzaXplID4gOCAmJiBjb250ZW50cy5zdWJhcnJheSkgewogICAgYnVmZmVyLnNldChjb250ZW50cy5zdWJhcnJheShwb3NpdGlvbiwgcG9zaXRpb24gKyBzaXplKSwgb2Zmc2V0KTsKICAgfSBlbHNlIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSBidWZmZXJbb2Zmc2V0ICsgaV0gPSBjb250ZW50c1twb3NpdGlvbiArIGldOwogICB9CiAgIHJldHVybiBzaXplOwogIH0pLAogIHdyaXRlOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FuT3duKSB7CiAgIGlmICghbGVuZ3RoKSByZXR1cm4gMDsKICAgdmFyIG5vZGUgPSBzdHJlYW0ubm9kZTsKICAgbm9kZS50aW1lc3RhbXAgPSBEYXRlLm5vdygpOwogICBpZiAoYnVmZmVyLnN1YmFycmF5ICYmICghbm9kZS5jb250ZW50cyB8fCBub2RlLmNvbnRlbnRzLnN1YmFycmF5KSkgewogICAgaWYgKGNhbk93bikgewogICAgIGFzc2VydChwb3NpdGlvbiA9PT0gMCwgImNhbk93biBtdXN0IGltcGx5IG5vIHdlaXJkIHBvc2l0aW9uIGluc2lkZSB0aGUgZmlsZSIpOwogICAgIG5vZGUuY29udGVudHMgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwogICAgIG5vZGUudXNlZEJ5dGVzID0gbGVuZ3RoOwogICAgIHJldHVybiBsZW5ndGg7CiAgICB9IGVsc2UgaWYgKG5vZGUudXNlZEJ5dGVzID09PSAwICYmIHBvc2l0aW9uID09PSAwKSB7CiAgICAgbm9kZS5jb250ZW50cyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCkpOwogICAgIG5vZGUudXNlZEJ5dGVzID0gbGVuZ3RoOwogICAgIHJldHVybiBsZW5ndGg7CiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uICsgbGVuZ3RoIDw9IG5vZGUudXNlZEJ5dGVzKSB7CiAgICAgbm9kZS5jb250ZW50cy5zZXQoYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSwgcG9zaXRpb24pOwogICAgIHJldHVybiBsZW5ndGg7CiAgICB9CiAgIH0KICAgTUVNRlMuZXhwYW5kRmlsZVN0b3JhZ2Uobm9kZSwgcG9zaXRpb24gKyBsZW5ndGgpOwogICBpZiAobm9kZS5jb250ZW50cy5zdWJhcnJheSAmJiBidWZmZXIuc3ViYXJyYXkpIG5vZGUuY29udGVudHMuc2V0KGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCksIHBvc2l0aW9uKTsgZWxzZSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgbm9kZS5jb250ZW50c1twb3NpdGlvbiArIGldID0gYnVmZmVyW29mZnNldCArIGldOwogICAgfQogICB9CiAgIG5vZGUudXNlZEJ5dGVzID0gTWF0aC5tYXgobm9kZS51c2VkQnl0ZXMsIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgcmV0dXJuIGxlbmd0aDsKICB9KSwKICBsbHNlZWs6IChmdW5jdGlvbihzdHJlYW0sIG9mZnNldCwgd2hlbmNlKSB7CiAgIHZhciBwb3NpdGlvbiA9IG9mZnNldDsKICAgaWYgKHdoZW5jZSA9PT0gMSkgewogICAgcG9zaXRpb24gKz0gc3RyZWFtLnBvc2l0aW9uOwogICB9IGVsc2UgaWYgKHdoZW5jZSA9PT0gMikgewogICAgaWYgKEZTLmlzRmlsZShzdHJlYW0ubm9kZS5tb2RlKSkgewogICAgIHBvc2l0aW9uICs9IHN0cmVhbS5ub2RlLnVzZWRCeXRlczsKICAgIH0KICAgfQogICBpZiAocG9zaXRpb24gPCAwKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogICB9CiAgIHJldHVybiBwb3NpdGlvbjsKICB9KSwKICBhbGxvY2F0ZTogKGZ1bmN0aW9uKHN0cmVhbSwgb2Zmc2V0LCBsZW5ndGgpIHsKICAgTUVNRlMuZXhwYW5kRmlsZVN0b3JhZ2Uoc3RyZWFtLm5vZGUsIG9mZnNldCArIGxlbmd0aCk7CiAgIHN0cmVhbS5ub2RlLnVzZWRCeXRlcyA9IE1hdGgubWF4KHN0cmVhbS5ub2RlLnVzZWRCeXRlcywgb2Zmc2V0ICsgbGVuZ3RoKTsKICB9KSwKICBtbWFwOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgcHJvdCwgZmxhZ3MpIHsKICAgaWYgKCFGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpIHsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVik7CiAgIH0KICAgdmFyIHB0cjsKICAgdmFyIGFsbG9jYXRlZDsKICAgdmFyIGNvbnRlbnRzID0gc3RyZWFtLm5vZGUuY29udGVudHM7CiAgIGlmICghKGZsYWdzICYgMikgJiYgKGNvbnRlbnRzLmJ1ZmZlciA9PT0gYnVmZmVyIHx8IGNvbnRlbnRzLmJ1ZmZlciA9PT0gYnVmZmVyLmJ1ZmZlcikpIHsKICAgIGFsbG9jYXRlZCA9IGZhbHNlOwogICAgcHRyID0gY29udGVudHMuYnl0ZU9mZnNldDsKICAgfSBlbHNlIHsKICAgIGlmIChwb3NpdGlvbiA+IDAgfHwgcG9zaXRpb24gKyBsZW5ndGggPCBzdHJlYW0ubm9kZS51c2VkQnl0ZXMpIHsKICAgICBpZiAoY29udGVudHMuc3ViYXJyYXkpIHsKICAgICAgY29udGVudHMgPSBjb250ZW50cy5zdWJhcnJheShwb3NpdGlvbiwgcG9zaXRpb24gKyBsZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgIGNvbnRlbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY29udGVudHMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIGxlbmd0aCk7CiAgICAgfQogICAgfQogICAgYWxsb2NhdGVkID0gdHJ1ZTsKICAgIHB0ciA9IF9tYWxsb2MobGVuZ3RoKTsKICAgIGlmICghcHRyKSB7CiAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PTUVNKTsKICAgIH0KICAgIGJ1ZmZlci5zZXQoY29udGVudHMsIHB0cik7CiAgIH0KICAgcmV0dXJuIHsKICAgIHB0cjogcHRyLAogICAgYWxsb2NhdGVkOiBhbGxvY2F0ZWQKICAgfTsKICB9KSwKICBtc3luYzogKGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgbW1hcEZsYWdzKSB7CiAgIGlmICghRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9ERVYpOwogICB9CiAgIGlmIChtbWFwRmxhZ3MgJiAyKSB7CiAgICByZXR1cm4gMDsKICAgfQogICB2YXIgYnl0ZXNXcml0dGVuID0gTUVNRlMuc3RyZWFtX29wcy53cml0ZShzdHJlYW0sIGJ1ZmZlciwgMCwgbGVuZ3RoLCBvZmZzZXQsIGZhbHNlKTsKICAgcmV0dXJuIDA7CiAgfSkKIH0KfTsKdmFyIElEQkZTID0gewogZGJzOiB7fSwKIGluZGV4ZWREQjogKGZ1bmN0aW9uKCkgewogIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIGluZGV4ZWREQjsKICB2YXIgcmV0ID0gbnVsbDsKICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpIHJldCA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tc0luZGV4ZWREQjsKICBhc3NlcnQocmV0LCAiSURCRlMgdXNlZCwgYnV0IGluZGV4ZWREQiBub3Qgc3VwcG9ydGVkIik7CiAgcmV0dXJuIHJldDsKIH0pLAogREJfVkVSU0lPTjogMjEsCiBEQl9TVE9SRV9OQU1FOiAiRklMRV9EQVRBIiwKIG1vdW50OiAoZnVuY3Rpb24obW91bnQpIHsKICByZXR1cm4gTUVNRlMubW91bnQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKIH0pLAogc3luY2ZzOiAoZnVuY3Rpb24obW91bnQsIHBvcHVsYXRlLCBjYWxsYmFjaykgewogIElEQkZTLmdldExvY2FsU2V0KG1vdW50LCAoZnVuY3Rpb24oZXJyLCBsb2NhbCkgewogICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTsKICAgSURCRlMuZ2V0UmVtb3RlU2V0KG1vdW50LCAoZnVuY3Rpb24oZXJyLCByZW1vdGUpIHsKICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpOwogICAgdmFyIHNyYyA9IHBvcHVsYXRlID8gcmVtb3RlIDogbG9jYWw7CiAgICB2YXIgZHN0ID0gcG9wdWxhdGUgPyBsb2NhbCA6IHJlbW90ZTsKICAgIElEQkZTLnJlY29uY2lsZShzcmMsIGRzdCwgY2FsbGJhY2spOwogICB9KSk7CiAgfSkpOwogfSksCiBnZXREQjogKGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7CiAgdmFyIGRiID0gSURCRlMuZGJzW25hbWVdOwogIGlmIChkYikgewogICByZXR1cm4gY2FsbGJhY2sobnVsbCwgZGIpOwogIH0KICB2YXIgcmVxOwogIHRyeSB7CiAgIHJlcSA9IElEQkZTLmluZGV4ZWREQigpLm9wZW4obmFtZSwgSURCRlMuREJfVkVSU0lPTik7CiAgfSBjYXRjaCAoZSkgewogICByZXR1cm4gY2FsbGJhY2soZSk7CiAgfQogIHJlcS5vbnVwZ3JhZGVuZWVkZWQgPSAoZnVuY3Rpb24oZSkgewogICB2YXIgZGIgPSBlLnRhcmdldC5yZXN1bHQ7CiAgIHZhciB0cmFuc2FjdGlvbiA9IGUudGFyZ2V0LnRyYW5zYWN0aW9uOwogICB2YXIgZmlsZVN0b3JlOwogICBpZiAoZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhJREJGUy5EQl9TVE9SRV9OQU1FKSkgewogICAgZmlsZVN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSk7CiAgIH0gZWxzZSB7CiAgICBmaWxlU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShJREJGUy5EQl9TVE9SRV9OQU1FKTsKICAgfQogICBpZiAoIWZpbGVTdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCJ0aW1lc3RhbXAiKSkgewogICAgZmlsZVN0b3JlLmNyZWF0ZUluZGV4KCJ0aW1lc3RhbXAiLCAidGltZXN0YW1wIiwgewogICAgIHVuaXF1ZTogZmFsc2UKICAgIH0pOwogICB9CiAgfSk7CiAgcmVxLm9uc3VjY2VzcyA9IChmdW5jdGlvbigpIHsKICAgZGIgPSByZXEucmVzdWx0OwogICBJREJGUy5kYnNbbmFtZV0gPSBkYjsKICAgY2FsbGJhY2sobnVsbCwgZGIpOwogIH0pOwogIHJlcS5vbmVycm9yID0gKGZ1bmN0aW9uKGUpIHsKICAgY2FsbGJhY2sodGhpcy5lcnJvcik7CiAgIGUucHJldmVudERlZmF1bHQoKTsKICB9KTsKIH0pLAogZ2V0TG9jYWxTZXQ6IChmdW5jdGlvbihtb3VudCwgY2FsbGJhY2spIHsKICB2YXIgZW50cmllcyA9IHt9OwogIGZ1bmN0aW9uIGlzUmVhbERpcihwKSB7CiAgIHJldHVybiBwICE9PSAiLiIgJiYgcCAhPT0gIi4uIjsKICB9CiAgZnVuY3Rpb24gdG9BYnNvbHV0ZShyb290KSB7CiAgIHJldHVybiAoZnVuY3Rpb24ocCkgewogICAgcmV0dXJuIFBBVEguam9pbjIocm9vdCwgcCk7CiAgIH0pOwogIH0KICB2YXIgY2hlY2sgPSBGUy5yZWFkZGlyKG1vdW50Lm1vdW50cG9pbnQpLmZpbHRlcihpc1JlYWxEaXIpLm1hcCh0b0Fic29sdXRlKG1vdW50Lm1vdW50cG9pbnQpKTsKICB3aGlsZSAoY2hlY2subGVuZ3RoKSB7CiAgIHZhciBwYXRoID0gY2hlY2sucG9wKCk7CiAgIHZhciBzdGF0OwogICB0cnkgewogICAgc3RhdCA9IEZTLnN0YXQocGF0aCk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIHJldHVybiBjYWxsYmFjayhlKTsKICAgfQogICBpZiAoRlMuaXNEaXIoc3RhdC5tb2RlKSkgewogICAgY2hlY2sucHVzaC5hcHBseShjaGVjaywgRlMucmVhZGRpcihwYXRoKS5maWx0ZXIoaXNSZWFsRGlyKS5tYXAodG9BYnNvbHV0ZShwYXRoKSkpOwogICB9CiAgIGVudHJpZXNbcGF0aF0gPSB7CiAgICB0aW1lc3RhbXA6IHN0YXQubXRpbWUKICAgfTsKICB9CiAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHsKICAgdHlwZTogImxvY2FsIiwKICAgZW50cmllczogZW50cmllcwogIH0pOwogfSksCiBnZXRSZW1vdGVTZXQ6IChmdW5jdGlvbihtb3VudCwgY2FsbGJhY2spIHsKICB2YXIgZW50cmllcyA9IHt9OwogIElEQkZTLmdldERCKG1vdW50Lm1vdW50cG9pbnQsIChmdW5jdGlvbihlcnIsIGRiKSB7CiAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpOwogICB2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbIElEQkZTLkRCX1NUT1JFX05BTUUgXSwgInJlYWRvbmx5Iik7CiAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSAoZnVuY3Rpb24oZSkgewogICAgY2FsbGJhY2sodGhpcy5lcnJvcik7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgIH0pOwogICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShJREJGUy5EQl9TVE9SRV9OQU1FKTsKICAgdmFyIGluZGV4ID0gc3RvcmUuaW5kZXgoInRpbWVzdGFtcCIpOwogICBpbmRleC5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzID0gKGZ1bmN0aW9uKGV2ZW50KSB7CiAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKICAgIGlmICghY3Vyc29yKSB7CiAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHsKICAgICAgdHlwZTogInJlbW90ZSIsCiAgICAgIGRiOiBkYiwKICAgICAgZW50cmllczogZW50cmllcwogICAgIH0pOwogICAgfQogICAgZW50cmllc1tjdXJzb3IucHJpbWFyeUtleV0gPSB7CiAgICAgdGltZXN0YW1wOiBjdXJzb3Iua2V5CiAgICB9OwogICAgY3Vyc29yLmNvbnRpbnVlKCk7CiAgIH0pOwogIH0pKTsKIH0pLAogbG9hZExvY2FsRW50cnk6IChmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykgewogIHZhciBzdGF0LCBub2RlOwogIHRyeSB7CiAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgpOwogICBub2RlID0gbG9va3VwLm5vZGU7CiAgIHN0YXQgPSBGUy5zdGF0KHBhdGgpOwogIH0gY2F0Y2ggKGUpIHsKICAgcmV0dXJuIGNhbGxiYWNrKGUpOwogIH0KICBpZiAoRlMuaXNEaXIoc3RhdC5tb2RlKSkgewogICByZXR1cm4gY2FsbGJhY2sobnVsbCwgewogICAgdGltZXN0YW1wOiBzdGF0Lm10aW1lLAogICAgbW9kZTogc3RhdC5tb2RlCiAgIH0pOwogIH0gZWxzZSBpZiAoRlMuaXNGaWxlKHN0YXQubW9kZSkpIHsKICAgbm9kZS5jb250ZW50cyA9IE1FTUZTLmdldEZpbGVEYXRhQXNUeXBlZEFycmF5KG5vZGUpOwogICByZXR1cm4gY2FsbGJhY2sobnVsbCwgewogICAgdGltZXN0YW1wOiBzdGF0Lm10aW1lLAogICAgbW9kZTogc3RhdC5tb2RlLAogICAgY29udGVudHM6IG5vZGUuY29udGVudHMKICAgfSk7CiAgfSBlbHNlIHsKICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcigibm9kZSB0eXBlIG5vdCBzdXBwb3J0ZWQiKSk7CiAgfQogfSksCiBzdG9yZUxvY2FsRW50cnk6IChmdW5jdGlvbihwYXRoLCBlbnRyeSwgY2FsbGJhY2spIHsKICB0cnkgewogICBpZiAoRlMuaXNEaXIoZW50cnkubW9kZSkpIHsKICAgIEZTLm1rZGlyKHBhdGgsIGVudHJ5Lm1vZGUpOwogICB9IGVsc2UgaWYgKEZTLmlzRmlsZShlbnRyeS5tb2RlKSkgewogICAgRlMud3JpdGVGaWxlKHBhdGgsIGVudHJ5LmNvbnRlbnRzLCB7CiAgICAgZW5jb2Rpbmc6ICJiaW5hcnkiLAogICAgIGNhbk93bjogdHJ1ZQogICAgfSk7CiAgIH0gZWxzZSB7CiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCJub2RlIHR5cGUgbm90IHN1cHBvcnRlZCIpKTsKICAgfQogICBGUy5jaG1vZChwYXRoLCBlbnRyeS5tb2RlKTsKICAgRlMudXRpbWUocGF0aCwgZW50cnkudGltZXN0YW1wLCBlbnRyeS50aW1lc3RhbXApOwogIH0gY2F0Y2ggKGUpIHsKICAgcmV0dXJuIGNhbGxiYWNrKGUpOwogIH0KICBjYWxsYmFjayhudWxsKTsKIH0pLAogcmVtb3ZlTG9jYWxFbnRyeTogKGZ1bmN0aW9uKHBhdGgsIGNhbGxiYWNrKSB7CiAgdHJ5IHsKICAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCk7CiAgIHZhciBzdGF0ID0gRlMuc3RhdChwYXRoKTsKICAgaWYgKEZTLmlzRGlyKHN0YXQubW9kZSkpIHsKICAgIEZTLnJtZGlyKHBhdGgpOwogICB9IGVsc2UgaWYgKEZTLmlzRmlsZShzdGF0Lm1vZGUpKSB7CiAgICBGUy51bmxpbmsocGF0aCk7CiAgIH0KICB9IGNhdGNoIChlKSB7CiAgIHJldHVybiBjYWxsYmFjayhlKTsKICB9CiAgY2FsbGJhY2sobnVsbCk7CiB9KSwKIGxvYWRSZW1vdGVFbnRyeTogKGZ1bmN0aW9uKHN0b3JlLCBwYXRoLCBjYWxsYmFjaykgewogIHZhciByZXEgPSBzdG9yZS5nZXQocGF0aCk7CiAgcmVxLm9uc3VjY2VzcyA9IChmdW5jdGlvbihldmVudCkgewogICBjYWxsYmFjayhudWxsLCBldmVudC50YXJnZXQucmVzdWx0KTsKICB9KTsKICByZXEub25lcnJvciA9IChmdW5jdGlvbihlKSB7CiAgIGNhbGxiYWNrKHRoaXMuZXJyb3IpOwogICBlLnByZXZlbnREZWZhdWx0KCk7CiAgfSk7CiB9KSwKIHN0b3JlUmVtb3RlRW50cnk6IChmdW5jdGlvbihzdG9yZSwgcGF0aCwgZW50cnksIGNhbGxiYWNrKSB7CiAgdmFyIHJlcSA9IHN0b3JlLnB1dChlbnRyeSwgcGF0aCk7CiAgcmVxLm9uc3VjY2VzcyA9IChmdW5jdGlvbigpIHsKICAgY2FsbGJhY2sobnVsbCk7CiAgfSk7CiAgcmVxLm9uZXJyb3IgPSAoZnVuY3Rpb24oZSkgewogICBjYWxsYmFjayh0aGlzLmVycm9yKTsKICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogIH0pOwogfSksCiByZW1vdmVSZW1vdGVFbnRyeTogKGZ1bmN0aW9uKHN0b3JlLCBwYXRoLCBjYWxsYmFjaykgewogIHZhciByZXEgPSBzdG9yZS5kZWxldGUocGF0aCk7CiAgcmVxLm9uc3VjY2VzcyA9IChmdW5jdGlvbigpIHsKICAgY2FsbGJhY2sobnVsbCk7CiAgfSk7CiAgcmVxLm9uZXJyb3IgPSAoZnVuY3Rpb24oZSkgewogICBjYWxsYmFjayh0aGlzLmVycm9yKTsKICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogIH0pOwogfSksCiByZWNvbmNpbGU6IChmdW5jdGlvbihzcmMsIGRzdCwgY2FsbGJhY2spIHsKICB2YXIgdG90YWwgPSAwOwogIHZhciBjcmVhdGUgPSBbXTsKICBPYmplY3Qua2V5cyhzcmMuZW50cmllcykuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KSB7CiAgIHZhciBlID0gc3JjLmVudHJpZXNba2V5XTsKICAgdmFyIGUyID0gZHN0LmVudHJpZXNba2V5XTsKICAgaWYgKCFlMiB8fCBlLnRpbWVzdGFtcCA+IGUyLnRpbWVzdGFtcCkgewogICAgY3JlYXRlLnB1c2goa2V5KTsKICAgIHRvdGFsKys7CiAgIH0KICB9KSk7CiAgdmFyIHJlbW92ZSA9IFtdOwogIE9iamVjdC5rZXlzKGRzdC5lbnRyaWVzKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpIHsKICAgdmFyIGUgPSBkc3QuZW50cmllc1trZXldOwogICB2YXIgZTIgPSBzcmMuZW50cmllc1trZXldOwogICBpZiAoIWUyKSB7CiAgICByZW1vdmUucHVzaChrZXkpOwogICAgdG90YWwrKzsKICAgfQogIH0pKTsKICBpZiAoIXRvdGFsKSB7CiAgIHJldHVybiBjYWxsYmFjayhudWxsKTsKICB9CiAgdmFyIGVycm9yZWQgPSBmYWxzZTsKICB2YXIgY29tcGxldGVkID0gMDsKICB2YXIgZGIgPSBzcmMudHlwZSA9PT0gInJlbW90ZSIgPyBzcmMuZGIgOiBkc3QuZGI7CiAgdmFyIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWyBJREJGUy5EQl9TVE9SRV9OQU1FIF0sICJyZWFkd3JpdGUiKTsKICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShJREJGUy5EQl9TVE9SRV9OQU1FKTsKICBmdW5jdGlvbiBkb25lKGVycikgewogICBpZiAoZXJyKSB7CiAgICBpZiAoIWRvbmUuZXJyb3JlZCkgewogICAgIGRvbmUuZXJyb3JlZCA9IHRydWU7CiAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7CiAgICB9CiAgICByZXR1cm47CiAgIH0KICAgaWYgKCsrY29tcGxldGVkID49IHRvdGFsKSB7CiAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7CiAgIH0KICB9CiAgdHJhbnNhY3Rpb24ub25lcnJvciA9IChmdW5jdGlvbihlKSB7CiAgIGRvbmUodGhpcy5lcnJvcik7CiAgIGUucHJldmVudERlZmF1bHQoKTsKICB9KTsKICBjcmVhdGUuc29ydCgpLmZvckVhY2goKGZ1bmN0aW9uKHBhdGgpIHsKICAgaWYgKGRzdC50eXBlID09PSAibG9jYWwiKSB7CiAgICBJREJGUy5sb2FkUmVtb3RlRW50cnkoc3RvcmUsIHBhdGgsIChmdW5jdGlvbihlcnIsIGVudHJ5KSB7CiAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTsKICAgICBJREJGUy5zdG9yZUxvY2FsRW50cnkocGF0aCwgZW50cnksIGRvbmUpOwogICAgfSkpOwogICB9IGVsc2UgewogICAgSURCRlMubG9hZExvY2FsRW50cnkocGF0aCwgKGZ1bmN0aW9uKGVyciwgZW50cnkpIHsKICAgICBpZiAoZXJyKSByZXR1cm4gZG9uZShlcnIpOwogICAgIElEQkZTLnN0b3JlUmVtb3RlRW50cnkoc3RvcmUsIHBhdGgsIGVudHJ5LCBkb25lKTsKICAgIH0pKTsKICAgfQogIH0pKTsKICByZW1vdmUuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihwYXRoKSB7CiAgIGlmIChkc3QudHlwZSA9PT0gImxvY2FsIikgewogICAgSURCRlMucmVtb3ZlTG9jYWxFbnRyeShwYXRoLCBkb25lKTsKICAgfSBlbHNlIHsKICAgIElEQkZTLnJlbW92ZVJlbW90ZUVudHJ5KHN0b3JlLCBwYXRoLCBkb25lKTsKICAgfQogIH0pKTsKIH0pCn07CnZhciBOT0RFRlMgPSB7CiBpc1dpbmRvd3M6IGZhbHNlLAogc3RhdGljSW5pdDogKGZ1bmN0aW9uKCkgewogIE5PREVGUy5pc1dpbmRvd3MgPSAhIXByb2Nlc3MucGxhdGZvcm0ubWF0Y2goL153aW4vKTsKIH0pLAogbW91bnQ6IChmdW5jdGlvbihtb3VudCkgewogIGFzc2VydChFTlZJUk9OTUVOVF9JU19OT0RFKTsKICByZXR1cm4gTk9ERUZTLmNyZWF0ZU5vZGUobnVsbCwgIi8iLCBOT0RFRlMuZ2V0TW9kZShtb3VudC5vcHRzLnJvb3QpLCAwKTsKIH0pLAogY3JlYXRlTm9kZTogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KSB7CiAgaWYgKCFGUy5pc0Rpcihtb2RlKSAmJiAhRlMuaXNGaWxlKG1vZGUpICYmICFGUy5pc0xpbmsobW9kZSkpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICB9CiAgdmFyIG5vZGUgPSBGUy5jcmVhdGVOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSk7CiAgbm9kZS5ub2RlX29wcyA9IE5PREVGUy5ub2RlX29wczsKICBub2RlLnN0cmVhbV9vcHMgPSBOT0RFRlMuc3RyZWFtX29wczsKICByZXR1cm4gbm9kZTsKIH0pLAogZ2V0TW9kZTogKGZ1bmN0aW9uKHBhdGgpIHsKICB2YXIgc3RhdDsKICB0cnkgewogICBzdGF0ID0gZnMubHN0YXRTeW5jKHBhdGgpOwogICBpZiAoTk9ERUZTLmlzV2luZG93cykgewogICAgc3RhdC5tb2RlID0gc3RhdC5tb2RlIHwgKHN0YXQubW9kZSAmIDE0NikgPj4gMTsKICAgfQogIH0gY2F0Y2ggKGUpIHsKICAgaWYgKCFlLmNvZGUpIHRocm93IGU7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pOwogIH0KICByZXR1cm4gc3RhdC5tb2RlOwogfSksCiByZWFsUGF0aDogKGZ1bmN0aW9uKG5vZGUpIHsKICB2YXIgcGFydHMgPSBbXTsKICB3aGlsZSAobm9kZS5wYXJlbnQgIT09IG5vZGUpIHsKICAgcGFydHMucHVzaChub2RlLm5hbWUpOwogICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgfQogIHBhcnRzLnB1c2gobm9kZS5tb3VudC5vcHRzLnJvb3QpOwogIHBhcnRzLnJldmVyc2UoKTsKICByZXR1cm4gUEFUSC5qb2luLmFwcGx5KG51bGwsIHBhcnRzKTsKIH0pLAogZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmdNYXA6IHsKICAwOiAiciIsCiAgMTogInIrIiwKICAyOiAicisiLAogIDY0OiAiciIsCiAgNjU6ICJyKyIsCiAgNjY6ICJyKyIsCiAgMTI5OiAicngrIiwKICAxOTM6ICJyeCsiLAogIDUxNDogIncrIiwKICA1Nzc6ICJ3IiwKICA1Nzg6ICJ3KyIsCiAgNzA1OiAid3giLAogIDcwNjogInd4KyIsCiAgMTAyNDogImEiLAogIDEwMjU6ICJhIiwKICAxMDI2OiAiYSsiLAogIDEwODk6ICJhIiwKICAxMDkwOiAiYSsiLAogIDExNTM6ICJheCIsCiAgMTE1NDogImF4KyIsCiAgMTIxNzogImF4IiwKICAxMjE4OiAiYXgrIiwKICA0MDk2OiAicnMiLAogIDQwOTg6ICJycysiCiB9LAogZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6IChmdW5jdGlvbihmbGFncykgewogIGZsYWdzICY9IH4zMjc2ODsKICBpZiAoZmxhZ3MgaW4gTk9ERUZTLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nTWFwKSB7CiAgIHJldHVybiBOT0RFRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmdNYXBbZmxhZ3NdOwogIH0gZWxzZSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgfQogfSksCiBub2RlX29wczogewogIGdldGF0dHI6IChmdW5jdGlvbihub2RlKSB7CiAgIHZhciBwYXRoID0gTk9ERUZTLnJlYWxQYXRoKG5vZGUpOwogICB2YXIgc3RhdDsKICAgdHJ5IHsKICAgIHN0YXQgPSBmcy5sc3RhdFN5bmMocGF0aCk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIGlmICghZS5jb2RlKSB0aHJvdyBlOwogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSk7CiAgIH0KICAgaWYgKE5PREVGUy5pc1dpbmRvd3MgJiYgIXN0YXQuYmxrc2l6ZSkgewogICAgc3RhdC5ibGtzaXplID0gNDA5NjsKICAgfQogICBpZiAoTk9ERUZTLmlzV2luZG93cyAmJiAhc3RhdC5ibG9ja3MpIHsKICAgIHN0YXQuYmxvY2tzID0gKHN0YXQuc2l6ZSArIHN0YXQuYmxrc2l6ZSAtIDEpIC8gc3RhdC5ibGtzaXplIHwgMDsKICAgfQogICByZXR1cm4gewogICAgZGV2OiBzdGF0LmRldiwKICAgIGlubzogc3RhdC5pbm8sCiAgICBtb2RlOiBzdGF0Lm1vZGUsCiAgICBubGluazogc3RhdC5ubGluaywKICAgIHVpZDogc3RhdC51aWQsCiAgICBnaWQ6IHN0YXQuZ2lkLAogICAgcmRldjogc3RhdC5yZGV2LAogICAgc2l6ZTogc3RhdC5zaXplLAogICAgYXRpbWU6IHN0YXQuYXRpbWUsCiAgICBtdGltZTogc3RhdC5tdGltZSwKICAgIGN0aW1lOiBzdGF0LmN0aW1lLAogICAgYmxrc2l6ZTogc3RhdC5ibGtzaXplLAogICAgYmxvY2tzOiBzdGF0LmJsb2NrcwogICB9OwogIH0pLAogIHNldGF0dHI6IChmdW5jdGlvbihub2RlLCBhdHRyKSB7CiAgIHZhciBwYXRoID0gTk9ERUZTLnJlYWxQYXRoKG5vZGUpOwogICB0cnkgewogICAgaWYgKGF0dHIubW9kZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgZnMuY2htb2RTeW5jKHBhdGgsIGF0dHIubW9kZSk7CiAgICAgbm9kZS5tb2RlID0gYXR0ci5tb2RlOwogICAgfQogICAgaWYgKGF0dHIudGltZXN0YW1wICE9PSB1bmRlZmluZWQpIHsKICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGF0dHIudGltZXN0YW1wKTsKICAgICBmcy51dGltZXNTeW5jKHBhdGgsIGRhdGUsIGRhdGUpOwogICAgfQogICAgaWYgKGF0dHIuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgZnMudHJ1bmNhdGVTeW5jKHBhdGgsIGF0dHIuc2l6ZSk7CiAgICB9CiAgIH0gY2F0Y2ggKGUpIHsKICAgIGlmICghZS5jb2RlKSB0aHJvdyBlOwogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSk7CiAgIH0KICB9KSwKICBsb29rdXA6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHsKICAgdmFyIHBhdGggPSBQQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChwYXJlbnQpLCBuYW1lKTsKICAgdmFyIG1vZGUgPSBOT0RFRlMuZ2V0TW9kZShwYXRoKTsKICAgcmV0dXJuIE5PREVGUy5jcmVhdGVOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSk7CiAgfSksCiAgbWtub2Q6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUsIG1vZGUsIGRldikgewogICB2YXIgbm9kZSA9IE5PREVGUy5jcmVhdGVOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KTsKICAgdmFyIHBhdGggPSBOT0RFRlMucmVhbFBhdGgobm9kZSk7CiAgIHRyeSB7CiAgICBpZiAoRlMuaXNEaXIobm9kZS5tb2RlKSkgewogICAgIGZzLm1rZGlyU3luYyhwYXRoLCBub2RlLm1vZGUpOwogICAgfSBlbHNlIHsKICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGgsICIiLCB7CiAgICAgIG1vZGU6IG5vZGUubW9kZQogICAgIH0pOwogICAgfQogICB9IGNhdGNoIChlKSB7CiAgICBpZiAoIWUuY29kZSkgdGhyb3cgZTsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pOwogICB9CiAgIHJldHVybiBub2RlOwogIH0pLAogIHJlbmFtZTogKGZ1bmN0aW9uKG9sZE5vZGUsIG5ld0RpciwgbmV3TmFtZSkgewogICB2YXIgb2xkUGF0aCA9IE5PREVGUy5yZWFsUGF0aChvbGROb2RlKTsKICAgdmFyIG5ld1BhdGggPSBQQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChuZXdEaXIpLCBuZXdOYW1lKTsKICAgdHJ5IHsKICAgIGZzLnJlbmFtZVN5bmMob2xkUGF0aCwgbmV3UGF0aCk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIGlmICghZS5jb2RlKSB0aHJvdyBlOwogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSk7CiAgIH0KICB9KSwKICB1bmxpbms6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHsKICAgdmFyIHBhdGggPSBQQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChwYXJlbnQpLCBuYW1lKTsKICAgdHJ5IHsKICAgIGZzLnVubGlua1N5bmMocGF0aCk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIGlmICghZS5jb2RlKSB0aHJvdyBlOwogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSk7CiAgIH0KICB9KSwKICBybWRpcjogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkgewogICB2YXIgcGF0aCA9IFBBVEguam9pbjIoTk9ERUZTLnJlYWxQYXRoKHBhcmVudCksIG5hbWUpOwogICB0cnkgewogICAgZnMucm1kaXJTeW5jKHBhdGgpOwogICB9IGNhdGNoIChlKSB7CiAgICBpZiAoIWUuY29kZSkgdGhyb3cgZTsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pOwogICB9CiAgfSksCiAgcmVhZGRpcjogKGZ1bmN0aW9uKG5vZGUpIHsKICAgdmFyIHBhdGggPSBOT0RFRlMucmVhbFBhdGgobm9kZSk7CiAgIHRyeSB7CiAgICByZXR1cm4gZnMucmVhZGRpclN5bmMocGF0aCk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIGlmICghZS5jb2RlKSB0aHJvdyBlOwogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSk7CiAgIH0KICB9KSwKICBzeW1saW5rOiAoZnVuY3Rpb24ocGFyZW50LCBuZXdOYW1lLCBvbGRQYXRoKSB7CiAgIHZhciBuZXdQYXRoID0gUEFUSC5qb2luMihOT0RFRlMucmVhbFBhdGgocGFyZW50KSwgbmV3TmFtZSk7CiAgIHRyeSB7CiAgICBmcy5zeW1saW5rU3luYyhvbGRQYXRoLCBuZXdQYXRoKTsKICAgfSBjYXRjaCAoZSkgewogICAgaWYgKCFlLmNvZGUpIHRocm93IGU7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKTsKICAgfQogIH0pLAogIHJlYWRsaW5rOiAoZnVuY3Rpb24obm9kZSkgewogICB2YXIgcGF0aCA9IE5PREVGUy5yZWFsUGF0aChub2RlKTsKICAgdHJ5IHsKICAgIHBhdGggPSBmcy5yZWFkbGlua1N5bmMocGF0aCk7CiAgICBwYXRoID0gTk9ERUpTX1BBVEgucmVsYXRpdmUoTk9ERUpTX1BBVEgucmVzb2x2ZShub2RlLm1vdW50Lm9wdHMucm9vdCksIHBhdGgpOwogICAgcmV0dXJuIHBhdGg7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIGlmICghZS5jb2RlKSB0aHJvdyBlOwogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSk7CiAgIH0KICB9KQogfSwKIHN0cmVhbV9vcHM6IHsKICBvcGVuOiAoZnVuY3Rpb24oc3RyZWFtKSB7CiAgIHZhciBwYXRoID0gTk9ERUZTLnJlYWxQYXRoKHN0cmVhbS5ub2RlKTsKICAgdHJ5IHsKICAgIGlmIChGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpIHsKICAgICBzdHJlYW0ubmZkID0gZnMub3BlblN5bmMocGF0aCwgTk9ERUZTLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHN0cmVhbS5mbGFncykpOwogICAgfQogICB9IGNhdGNoIChlKSB7CiAgICBpZiAoIWUuY29kZSkgdGhyb3cgZTsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pOwogICB9CiAgfSksCiAgY2xvc2U6IChmdW5jdGlvbihzdHJlYW0pIHsKICAgdHJ5IHsKICAgIGlmIChGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkgJiYgc3RyZWFtLm5mZCkgewogICAgIGZzLmNsb3NlU3luYyhzdHJlYW0ubmZkKTsKICAgIH0KICAgfSBjYXRjaCAoZSkgewogICAgaWYgKCFlLmNvZGUpIHRocm93IGU7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKTsKICAgfQogIH0pLAogIHJlYWQ6IChmdW5jdGlvbihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7CiAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAwOwogICB2YXIgbmJ1ZmZlciA9IG5ldyBCdWZmZXIobGVuZ3RoKTsKICAgdmFyIHJlczsKICAgdHJ5IHsKICAgIHJlcyA9IGZzLnJlYWRTeW5jKHN0cmVhbS5uZmQsIG5idWZmZXIsIDAsIGxlbmd0aCwgcG9zaXRpb24pOwogICB9IGNhdGNoIChlKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKTsKICAgfQogICBpZiAocmVzID4gMCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXM7IGkrKykgewogICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG5idWZmZXJbaV07CiAgICB9CiAgIH0KICAgcmV0dXJuIHJlczsKICB9KSwKICB3cml0ZTogKGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHsKICAgdmFyIG5idWZmZXIgPSBuZXcgQnVmZmVyKGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCkpOwogICB2YXIgcmVzOwogICB0cnkgewogICAgcmVzID0gZnMud3JpdGVTeW5jKHN0cmVhbS5uZmQsIG5idWZmZXIsIDAsIGxlbmd0aCwgcG9zaXRpb24pOwogICB9IGNhdGNoIChlKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKTsKICAgfQogICByZXR1cm4gcmVzOwogIH0pLAogIGxsc2VlazogKGZ1bmN0aW9uKHN0cmVhbSwgb2Zmc2V0LCB3aGVuY2UpIHsKICAgdmFyIHBvc2l0aW9uID0gb2Zmc2V0OwogICBpZiAod2hlbmNlID09PSAxKSB7CiAgICBwb3NpdGlvbiArPSBzdHJlYW0ucG9zaXRpb247CiAgIH0gZWxzZSBpZiAod2hlbmNlID09PSAyKSB7CiAgICBpZiAoRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKSB7CiAgICAgdHJ5IHsKICAgICAgdmFyIHN0YXQgPSBmcy5mc3RhdFN5bmMoc3RyZWFtLm5mZCk7CiAgICAgIHBvc2l0aW9uICs9IHN0YXQuc2l6ZTsKICAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pOwogICAgIH0KICAgIH0KICAgfQogICBpZiAocG9zaXRpb24gPCAwKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogICB9CiAgIHJldHVybiBwb3NpdGlvbjsKICB9KQogfQp9Owp2YXIgV09SS0VSRlMgPSB7CiBESVJfTU9ERTogMTY4OTUsCiBGSUxFX01PREU6IDMzMjc5LAogcmVhZGVyOiBudWxsLAogbW91bnQ6IChmdW5jdGlvbihtb3VudCkgewogIGFzc2VydChFTlZJUk9OTUVOVF9JU19XT1JLRVIpOwogIGlmICghV09SS0VSRlMucmVhZGVyKSBXT1JLRVJGUy5yZWFkZXIgPSBuZXcgRmlsZVJlYWRlclN5bmM7CiAgdmFyIHJvb3QgPSBXT1JLRVJGUy5jcmVhdGVOb2RlKG51bGwsICIvIiwgV09SS0VSRlMuRElSX01PREUsIDApOwogIHZhciBjcmVhdGVkUGFyZW50cyA9IHt9OwogIGZ1bmN0aW9uIGVuc3VyZVBhcmVudChwYXRoKSB7CiAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoIi8iKTsKICAgdmFyIHBhcmVudCA9IHJvb3Q7CiAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICB2YXIgY3VyciA9IHBhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCIvIik7CiAgICBpZiAoIWNyZWF0ZWRQYXJlbnRzW2N1cnJdKSB7CiAgICAgY3JlYXRlZFBhcmVudHNbY3Vycl0gPSBXT1JLRVJGUy5jcmVhdGVOb2RlKHBhcmVudCwgY3VyciwgV09SS0VSRlMuRElSX01PREUsIDApOwogICAgfQogICAgcGFyZW50ID0gY3JlYXRlZFBhcmVudHNbY3Vycl07CiAgIH0KICAgcmV0dXJuIHBhcmVudDsKICB9CiAgZnVuY3Rpb24gYmFzZShwYXRoKSB7CiAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoIi8iKTsKICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOwogIH0KICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG1vdW50Lm9wdHNbImZpbGVzIl0gfHwgW10sIChmdW5jdGlvbihmaWxlKSB7CiAgIFdPUktFUkZTLmNyZWF0ZU5vZGUoZW5zdXJlUGFyZW50KGZpbGUubmFtZSksIGJhc2UoZmlsZS5uYW1lKSwgV09SS0VSRlMuRklMRV9NT0RFLCAwLCBmaWxlLCBmaWxlLmxhc3RNb2RpZmllZERhdGUpOwogIH0pKTsKICAobW91bnQub3B0c1siYmxvYnMiXSB8fCBbXSkuZm9yRWFjaCgoZnVuY3Rpb24ob2JqKSB7CiAgIFdPUktFUkZTLmNyZWF0ZU5vZGUoZW5zdXJlUGFyZW50KG9ialsibmFtZSJdKSwgYmFzZShvYmpbIm5hbWUiXSksIFdPUktFUkZTLkZJTEVfTU9ERSwgMCwgb2JqWyJkYXRhIl0pOwogIH0pKTsKICAobW91bnQub3B0c1sicGFja2FnZXMiXSB8fCBbXSkuZm9yRWFjaCgoZnVuY3Rpb24ocGFjaykgewogICBwYWNrWyJtZXRhZGF0YSJdLmZpbGVzLmZvckVhY2goKGZ1bmN0aW9uKGZpbGUpIHsKICAgIHZhciBuYW1lID0gZmlsZS5maWxlbmFtZS5zdWJzdHIoMSk7CiAgICBXT1JLRVJGUy5jcmVhdGVOb2RlKGVuc3VyZVBhcmVudChuYW1lKSwgYmFzZShuYW1lKSwgV09SS0VSRlMuRklMRV9NT0RFLCAwLCBwYWNrWyJibG9iIl0uc2xpY2UoZmlsZS5zdGFydCwgZmlsZS5lbmQpKTsKICAgfSkpOwogIH0pKTsKICByZXR1cm4gcm9vdDsKIH0pLAogY3JlYXRlTm9kZTogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2LCBjb250ZW50cywgbXRpbWUpIHsKICB2YXIgbm9kZSA9IEZTLmNyZWF0ZU5vZGUocGFyZW50LCBuYW1lLCBtb2RlKTsKICBub2RlLm1vZGUgPSBtb2RlOwogIG5vZGUubm9kZV9vcHMgPSBXT1JLRVJGUy5ub2RlX29wczsKICBub2RlLnN0cmVhbV9vcHMgPSBXT1JLRVJGUy5zdHJlYW1fb3BzOwogIG5vZGUudGltZXN0YW1wID0gKG10aW1lIHx8IG5ldyBEYXRlKS5nZXRUaW1lKCk7CiAgYXNzZXJ0KFdPUktFUkZTLkZJTEVfTU9ERSAhPT0gV09SS0VSRlMuRElSX01PREUpOwogIGlmIChtb2RlID09PSBXT1JLRVJGUy5GSUxFX01PREUpIHsKICAgbm9kZS5zaXplID0gY29udGVudHMuc2l6ZTsKICAgbm9kZS5jb250ZW50cyA9IGNvbnRlbnRzOwogIH0gZWxzZSB7CiAgIG5vZGUuc2l6ZSA9IDQwOTY7CiAgIG5vZGUuY29udGVudHMgPSB7fTsKICB9CiAgaWYgKHBhcmVudCkgewogICBwYXJlbnQuY29udGVudHNbbmFtZV0gPSBub2RlOwogIH0KICByZXR1cm4gbm9kZTsKIH0pLAogbm9kZV9vcHM6IHsKICBnZXRhdHRyOiAoZnVuY3Rpb24obm9kZSkgewogICByZXR1cm4gewogICAgZGV2OiAxLAogICAgaW5vOiB1bmRlZmluZWQsCiAgICBtb2RlOiBub2RlLm1vZGUsCiAgICBubGluazogMSwKICAgIHVpZDogMCwKICAgIGdpZDogMCwKICAgIHJkZXY6IHVuZGVmaW5lZCwKICAgIHNpemU6IG5vZGUuc2l6ZSwKICAgIGF0aW1lOiBuZXcgRGF0ZShub2RlLnRpbWVzdGFtcCksCiAgICBtdGltZTogbmV3IERhdGUobm9kZS50aW1lc3RhbXApLAogICAgY3RpbWU6IG5ldyBEYXRlKG5vZGUudGltZXN0YW1wKSwKICAgIGJsa3NpemU6IDQwOTYsCiAgICBibG9ja3M6IE1hdGguY2VpbChub2RlLnNpemUgLyA0MDk2KQogICB9OwogIH0pLAogIHNldGF0dHI6IChmdW5jdGlvbihub2RlLCBhdHRyKSB7CiAgIGlmIChhdHRyLm1vZGUgIT09IHVuZGVmaW5lZCkgewogICAgbm9kZS5tb2RlID0gYXR0ci5tb2RlOwogICB9CiAgIGlmIChhdHRyLnRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkKSB7CiAgICBub2RlLnRpbWVzdGFtcCA9IGF0dHIudGltZXN0YW1wOwogICB9CiAgfSksCiAgbG9va3VwOiAoZnVuY3Rpb24ocGFyZW50LCBuYW1lKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0VOVCk7CiAgfSksCiAgbWtub2Q6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUsIG1vZGUsIGRldikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfSksCiAgcmVuYW1lOiAoZnVuY3Rpb24ob2xkTm9kZSwgbmV3RGlyLCBuZXdOYW1lKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICB9KSwKICB1bmxpbms6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pOwogIH0pLAogIHJtZGlyOiAoZnVuY3Rpb24ocGFyZW50LCBuYW1lKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICB9KSwKICByZWFkZGlyOiAoZnVuY3Rpb24obm9kZSkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfSksCiAgc3ltbGluazogKGZ1bmN0aW9uKHBhcmVudCwgbmV3TmFtZSwgb2xkUGF0aCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfSksCiAgcmVhZGxpbms6IChmdW5jdGlvbihub2RlKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICB9KQogfSwKIHN0cmVhbV9vcHM6IHsKICByZWFkOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikgewogICBpZiAocG9zaXRpb24gPj0gc3RyZWFtLm5vZGUuc2l6ZSkgcmV0dXJuIDA7CiAgIHZhciBjaHVuayA9IHN0cmVhbS5ub2RlLmNvbnRlbnRzLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIGxlbmd0aCk7CiAgIHZhciBhYiA9IFdPUktFUkZTLnJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihjaHVuayk7CiAgIGJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoYWIpLCBvZmZzZXQpOwogICByZXR1cm4gY2h1bmsuc2l6ZTsKICB9KSwKICB3cml0ZTogKGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKTsKICB9KSwKICBsbHNlZWs6IChmdW5jdGlvbihzdHJlYW0sIG9mZnNldCwgd2hlbmNlKSB7CiAgIHZhciBwb3NpdGlvbiA9IG9mZnNldDsKICAgaWYgKHdoZW5jZSA9PT0gMSkgewogICAgcG9zaXRpb24gKz0gc3RyZWFtLnBvc2l0aW9uOwogICB9IGVsc2UgaWYgKHdoZW5jZSA9PT0gMikgewogICAgaWYgKEZTLmlzRmlsZShzdHJlYW0ubm9kZS5tb2RlKSkgewogICAgIHBvc2l0aW9uICs9IHN0cmVhbS5ub2RlLnNpemU7CiAgICB9CiAgIH0KICAgaWYgKHBvc2l0aW9uIDwgMCkgewogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAgfQogICByZXR1cm4gcG9zaXRpb247CiAgfSkKIH0KfTsKdmFyIF9zdGRpbiA9IGFsbG9jYXRlKDEsICJpMzIqIiwgQUxMT0NfU1RBVElDKTsKdmFyIF9zdGRvdXQgPSBhbGxvY2F0ZSgxLCAiaTMyKiIsIEFMTE9DX1NUQVRJQyk7CnZhciBfc3RkZXJyID0gYWxsb2NhdGUoMSwgImkzMioiLCBBTExPQ19TVEFUSUMpOwp2YXIgRlMgPSB7CiByb290OiBudWxsLAogbW91bnRzOiBbXSwKIGRldmljZXM6IFsgbnVsbCBdLAogc3RyZWFtczogW10sCiBuZXh0SW5vZGU6IDEsCiBuYW1lVGFibGU6IG51bGwsCiBjdXJyZW50UGF0aDogIi8iLAogaW5pdGlhbGl6ZWQ6IGZhbHNlLAogaWdub3JlUGVybWlzc2lvbnM6IHRydWUsCiB0cmFja2luZ0RlbGVnYXRlOiB7fSwKIHRyYWNraW5nOiB7CiAgb3BlbkZsYWdzOiB7CiAgIFJFQUQ6IDEsCiAgIFdSSVRFOiAyCiAgfQogfSwKIEVycm5vRXJyb3I6IG51bGwsCiBnZW5lcmljRXJyb3JzOiB7fSwKIGZpbGVzeXN0ZW1zOiBudWxsLAogaGFuZGxlRlNFcnJvcjogKGZ1bmN0aW9uKGUpIHsKICBpZiAoIShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpIHRocm93IGUgKyAiIDogIiArIHN0YWNrVHJhY2UoKTsKICByZXR1cm4gX19fc2V0RXJyTm8oZS5lcnJubyk7CiB9KSwKIGxvb2t1cFBhdGg6IChmdW5jdGlvbihwYXRoLCBvcHRzKSB7CiAgcGF0aCA9IFBBVEgucmVzb2x2ZShGUy5jd2QoKSwgcGF0aCk7CiAgb3B0cyA9IG9wdHMgfHwge307CiAgaWYgKCFwYXRoKSByZXR1cm4gewogICBwYXRoOiAiIiwKICAgbm9kZTogbnVsbAogIH07CiAgdmFyIGRlZmF1bHRzID0gewogICBmb2xsb3dfbW91bnQ6IHRydWUsCiAgIHJlY3Vyc2VfY291bnQ6IDAKICB9OwogIGZvciAodmFyIGtleSBpbiBkZWZhdWx0cykgewogICBpZiAob3B0c1trZXldID09PSB1bmRlZmluZWQpIHsKICAgIG9wdHNba2V5XSA9IGRlZmF1bHRzW2tleV07CiAgIH0KICB9CiAgaWYgKG9wdHMucmVjdXJzZV9jb3VudCA+IDgpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUxPT1ApOwogIH0KICB2YXIgcGFydHMgPSBQQVRILm5vcm1hbGl6ZUFycmF5KHBhdGguc3BsaXQoIi8iKS5maWx0ZXIoKGZ1bmN0aW9uKHApIHsKICAgcmV0dXJuICEhcDsKICB9KSksIGZhbHNlKTsKICB2YXIgY3VycmVudCA9IEZTLnJvb3Q7CiAgdmFyIGN1cnJlbnRfcGF0aCA9ICIvIjsKICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgIHZhciBpc2xhc3QgPSBpID09PSBwYXJ0cy5sZW5ndGggLSAxOwogICBpZiAoaXNsYXN0ICYmIG9wdHMucGFyZW50KSB7CiAgICBicmVhazsKICAgfQogICBjdXJyZW50ID0gRlMubG9va3VwTm9kZShjdXJyZW50LCBwYXJ0c1tpXSk7CiAgIGN1cnJlbnRfcGF0aCA9IFBBVEguam9pbjIoY3VycmVudF9wYXRoLCBwYXJ0c1tpXSk7CiAgIGlmIChGUy5pc01vdW50cG9pbnQoY3VycmVudCkpIHsKICAgIGlmICghaXNsYXN0IHx8IGlzbGFzdCAmJiBvcHRzLmZvbGxvd19tb3VudCkgewogICAgIGN1cnJlbnQgPSBjdXJyZW50Lm1vdW50ZWQucm9vdDsKICAgIH0KICAgfQogICBpZiAoIWlzbGFzdCB8fCBvcHRzLmZvbGxvdykgewogICAgdmFyIGNvdW50ID0gMDsKICAgIHdoaWxlIChGUy5pc0xpbmsoY3VycmVudC5tb2RlKSkgewogICAgIHZhciBsaW5rID0gRlMucmVhZGxpbmsoY3VycmVudF9wYXRoKTsKICAgICBjdXJyZW50X3BhdGggPSBQQVRILnJlc29sdmUoUEFUSC5kaXJuYW1lKGN1cnJlbnRfcGF0aCksIGxpbmspOwogICAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKGN1cnJlbnRfcGF0aCwgewogICAgICByZWN1cnNlX2NvdW50OiBvcHRzLnJlY3Vyc2VfY291bnQKICAgICB9KTsKICAgICBjdXJyZW50ID0gbG9va3VwLm5vZGU7CiAgICAgaWYgKGNvdW50KysgPiA0MCkgewogICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTE9PUCk7CiAgICAgfQogICAgfQogICB9CiAgfQogIHJldHVybiB7CiAgIHBhdGg6IGN1cnJlbnRfcGF0aCwKICAgbm9kZTogY3VycmVudAogIH07CiB9KSwKIGdldFBhdGg6IChmdW5jdGlvbihub2RlKSB7CiAgdmFyIHBhdGg7CiAgd2hpbGUgKHRydWUpIHsKICAgaWYgKEZTLmlzUm9vdChub2RlKSkgewogICAgdmFyIG1vdW50ID0gbm9kZS5tb3VudC5tb3VudHBvaW50OwogICAgaWYgKCFwYXRoKSByZXR1cm4gbW91bnQ7CiAgICByZXR1cm4gbW91bnRbbW91bnQubGVuZ3RoIC0gMV0gIT09ICIvIiA/IG1vdW50ICsgIi8iICsgcGF0aCA6IG1vdW50ICsgcGF0aDsKICAgfQogICBwYXRoID0gcGF0aCA/IG5vZGUubmFtZSArICIvIiArIHBhdGggOiBub2RlLm5hbWU7CiAgIG5vZGUgPSBub2RlLnBhcmVudDsKICB9CiB9KSwKIGhhc2hOYW1lOiAoZnVuY3Rpb24ocGFyZW50aWQsIG5hbWUpIHsKICB2YXIgaGFzaCA9IDA7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7CiAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBuYW1lLmNoYXJDb2RlQXQoaSkgfCAwOwogIH0KICByZXR1cm4gKHBhcmVudGlkICsgaGFzaCA+Pj4gMCkgJSBGUy5uYW1lVGFibGUubGVuZ3RoOwogfSksCiBoYXNoQWRkTm9kZTogKGZ1bmN0aW9uKG5vZGUpIHsKICB2YXIgaGFzaCA9IEZTLmhhc2hOYW1lKG5vZGUucGFyZW50LmlkLCBub2RlLm5hbWUpOwogIG5vZGUubmFtZV9uZXh0ID0gRlMubmFtZVRhYmxlW2hhc2hdOwogIEZTLm5hbWVUYWJsZVtoYXNoXSA9IG5vZGU7CiB9KSwKIGhhc2hSZW1vdmVOb2RlOiAoZnVuY3Rpb24obm9kZSkgewogIHZhciBoYXNoID0gRlMuaGFzaE5hbWUobm9kZS5wYXJlbnQuaWQsIG5vZGUubmFtZSk7CiAgaWYgKEZTLm5hbWVUYWJsZVtoYXNoXSA9PT0gbm9kZSkgewogICBGUy5uYW1lVGFibGVbaGFzaF0gPSBub2RlLm5hbWVfbmV4dDsKICB9IGVsc2UgewogICB2YXIgY3VycmVudCA9IEZTLm5hbWVUYWJsZVtoYXNoXTsKICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgIGlmIChjdXJyZW50Lm5hbWVfbmV4dCA9PT0gbm9kZSkgewogICAgIGN1cnJlbnQubmFtZV9uZXh0ID0gbm9kZS5uYW1lX25leHQ7CiAgICAgYnJlYWs7CiAgICB9CiAgICBjdXJyZW50ID0gY3VycmVudC5uYW1lX25leHQ7CiAgIH0KICB9CiB9KSwKIGxvb2t1cE5vZGU6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHsKICB2YXIgZXJyID0gRlMubWF5TG9va3VwKHBhcmVudCk7CiAgaWYgKGVycikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIsIHBhcmVudCk7CiAgfQogIHZhciBoYXNoID0gRlMuaGFzaE5hbWUocGFyZW50LmlkLCBuYW1lKTsKICBmb3IgKHZhciBub2RlID0gRlMubmFtZVRhYmxlW2hhc2hdOyBub2RlOyBub2RlID0gbm9kZS5uYW1lX25leHQpIHsKICAgdmFyIG5vZGVOYW1lID0gbm9kZS5uYW1lOwogICBpZiAobm9kZS5wYXJlbnQuaWQgPT09IHBhcmVudC5pZCAmJiBub2RlTmFtZSA9PT0gbmFtZSkgewogICAgcmV0dXJuIG5vZGU7CiAgIH0KICB9CiAgcmV0dXJuIEZTLmxvb2t1cChwYXJlbnQsIG5hbWUpOwogfSksCiBjcmVhdGVOb2RlOiAoZnVuY3Rpb24ocGFyZW50LCBuYW1lLCBtb2RlLCByZGV2KSB7CiAgaWYgKCFGUy5GU05vZGUpIHsKICAgRlMuRlNOb2RlID0gKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgbW9kZSwgcmRldikgewogICAgaWYgKCFwYXJlbnQpIHsKICAgICBwYXJlbnQgPSB0aGlzOwogICAgfQogICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CiAgICB0aGlzLm1vdW50ID0gcGFyZW50Lm1vdW50OwogICAgdGhpcy5tb3VudGVkID0gbnVsbDsKICAgIHRoaXMuaWQgPSBGUy5uZXh0SW5vZGUrKzsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICB0aGlzLm1vZGUgPSBtb2RlOwogICAgdGhpcy5ub2RlX29wcyA9IHt9OwogICAgdGhpcy5zdHJlYW1fb3BzID0ge307CiAgICB0aGlzLnJkZXYgPSByZGV2OwogICB9KTsKICAgRlMuRlNOb2RlLnByb3RvdHlwZSA9IHt9OwogICB2YXIgcmVhZE1vZGUgPSAyOTIgfCA3MzsKICAgdmFyIHdyaXRlTW9kZSA9IDE0NjsKICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRlMuRlNOb2RlLnByb3RvdHlwZSwgewogICAgcmVhZDogewogICAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKHRoaXMubW9kZSAmIHJlYWRNb2RlKSA9PT0gcmVhZE1vZGU7CiAgICAgfSksCiAgICAgc2V0OiAoZnVuY3Rpb24odmFsKSB7CiAgICAgIHZhbCA/IHRoaXMubW9kZSB8PSByZWFkTW9kZSA6IHRoaXMubW9kZSAmPSB+cmVhZE1vZGU7CiAgICAgfSkKICAgIH0sCiAgICB3cml0ZTogewogICAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKHRoaXMubW9kZSAmIHdyaXRlTW9kZSkgPT09IHdyaXRlTW9kZTsKICAgICB9KSwKICAgICBzZXQ6IChmdW5jdGlvbih2YWwpIHsKICAgICAgdmFsID8gdGhpcy5tb2RlIHw9IHdyaXRlTW9kZSA6IHRoaXMubW9kZSAmPSB+d3JpdGVNb2RlOwogICAgIH0pCiAgICB9LAogICAgaXNGb2xkZXI6IHsKICAgICBnZXQ6IChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIEZTLmlzRGlyKHRoaXMubW9kZSk7CiAgICAgfSkKICAgIH0sCiAgICBpc0RldmljZTogewogICAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gRlMuaXNDaHJkZXYodGhpcy5tb2RlKTsKICAgICB9KQogICAgfQogICB9KTsKICB9CiAgdmFyIG5vZGUgPSBuZXcgRlMuRlNOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSwgcmRldik7CiAgRlMuaGFzaEFkZE5vZGUobm9kZSk7CiAgcmV0dXJuIG5vZGU7CiB9KSwKIGRlc3Ryb3lOb2RlOiAoZnVuY3Rpb24obm9kZSkgewogIEZTLmhhc2hSZW1vdmVOb2RlKG5vZGUpOwogfSksCiBpc1Jvb3Q6IChmdW5jdGlvbihub2RlKSB7CiAgcmV0dXJuIG5vZGUgPT09IG5vZGUucGFyZW50OwogfSksCiBpc01vdW50cG9pbnQ6IChmdW5jdGlvbihub2RlKSB7CiAgcmV0dXJuICEhbm9kZS5tb3VudGVkOwogfSksCiBpc0ZpbGU6IChmdW5jdGlvbihtb2RlKSB7CiAgcmV0dXJuIChtb2RlICYgNjE0NDApID09PSAzMjc2ODsKIH0pLAogaXNEaXI6IChmdW5jdGlvbihtb2RlKSB7CiAgcmV0dXJuIChtb2RlICYgNjE0NDApID09PSAxNjM4NDsKIH0pLAogaXNMaW5rOiAoZnVuY3Rpb24obW9kZSkgewogIHJldHVybiAobW9kZSAmIDYxNDQwKSA9PT0gNDA5NjA7CiB9KSwKIGlzQ2hyZGV2OiAoZnVuY3Rpb24obW9kZSkgewogIHJldHVybiAobW9kZSAmIDYxNDQwKSA9PT0gODE5MjsKIH0pLAogaXNCbGtkZXY6IChmdW5jdGlvbihtb2RlKSB7CiAgcmV0dXJuIChtb2RlICYgNjE0NDApID09PSAyNDU3NjsKIH0pLAogaXNGSUZPOiAoZnVuY3Rpb24obW9kZSkgewogIHJldHVybiAobW9kZSAmIDYxNDQwKSA9PT0gNDA5NjsKIH0pLAogaXNTb2NrZXQ6IChmdW5jdGlvbihtb2RlKSB7CiAgcmV0dXJuIChtb2RlICYgNDkxNTIpID09PSA0OTE1MjsKIH0pLAogZmxhZ01vZGVzOiB7CiAgInIiOiAwLAogICJycyI6IDEwNTI2NzIsCiAgInIrIjogMiwKICAidyI6IDU3NywKICAid3giOiA3MDUsCiAgInh3IjogNzA1LAogICJ3KyI6IDU3OCwKICAid3grIjogNzA2LAogICJ4dysiOiA3MDYsCiAgImEiOiAxMDg5LAogICJheCI6IDEyMTcsCiAgInhhIjogMTIxNywKICAiYSsiOiAxMDkwLAogICJheCsiOiAxMjE4LAogICJ4YSsiOiAxMjE4CiB9LAogbW9kZVN0cmluZ1RvRmxhZ3M6IChmdW5jdGlvbihzdHIpIHsKICB2YXIgZmxhZ3MgPSBGUy5mbGFnTW9kZXNbc3RyXTsKICBpZiAodHlwZW9mIGZsYWdzID09PSAidW5kZWZpbmVkIikgewogICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZmlsZSBvcGVuIG1vZGU6ICIgKyBzdHIpOwogIH0KICByZXR1cm4gZmxhZ3M7CiB9KSwKIGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOiAoZnVuY3Rpb24oZmxhZykgewogIHZhciBwZXJtcyA9IFsgInIiLCAidyIsICJydyIgXVtmbGFnICYgM107CiAgaWYgKGZsYWcgJiA1MTIpIHsKICAgcGVybXMgKz0gInciOwogIH0KICByZXR1cm4gcGVybXM7CiB9KSwKIG5vZGVQZXJtaXNzaW9uczogKGZ1bmN0aW9uKG5vZGUsIHBlcm1zKSB7CiAgaWYgKEZTLmlnbm9yZVBlcm1pc3Npb25zKSB7CiAgIHJldHVybiAwOwogIH0KICBpZiAocGVybXMuaW5kZXhPZigiciIpICE9PSAtMSAmJiAhKG5vZGUubW9kZSAmIDI5MikpIHsKICAgcmV0dXJuIEVSUk5PX0NPREVTLkVBQ0NFUzsKICB9IGVsc2UgaWYgKHBlcm1zLmluZGV4T2YoInciKSAhPT0gLTEgJiYgIShub2RlLm1vZGUgJiAxNDYpKSB7CiAgIHJldHVybiBFUlJOT19DT0RFUy5FQUNDRVM7CiAgfSBlbHNlIGlmIChwZXJtcy5pbmRleE9mKCJ4IikgIT09IC0xICYmICEobm9kZS5tb2RlICYgNzMpKSB7CiAgIHJldHVybiBFUlJOT19DT0RFUy5FQUNDRVM7CiAgfQogIHJldHVybiAwOwogfSksCiBtYXlMb29rdXA6IChmdW5jdGlvbihkaXIpIHsKICB2YXIgZXJyID0gRlMubm9kZVBlcm1pc3Npb25zKGRpciwgIngiKTsKICBpZiAoZXJyKSByZXR1cm4gZXJyOwogIGlmICghZGlyLm5vZGVfb3BzLmxvb2t1cCkgcmV0dXJuIEVSUk5PX0NPREVTLkVBQ0NFUzsKICByZXR1cm4gMDsKIH0pLAogbWF5Q3JlYXRlOiAoZnVuY3Rpb24oZGlyLCBuYW1lKSB7CiAgdHJ5IHsKICAgdmFyIG5vZGUgPSBGUy5sb29rdXBOb2RlKGRpciwgbmFtZSk7CiAgIHJldHVybiBFUlJOT19DT0RFUy5FRVhJU1Q7CiAgfSBjYXRjaCAoZSkge30KICByZXR1cm4gRlMubm9kZVBlcm1pc3Npb25zKGRpciwgInd4Iik7CiB9KSwKIG1heURlbGV0ZTogKGZ1bmN0aW9uKGRpciwgbmFtZSwgaXNkaXIpIHsKICB2YXIgbm9kZTsKICB0cnkgewogICBub2RlID0gRlMubG9va3VwTm9kZShkaXIsIG5hbWUpOwogIH0gY2F0Y2ggKGUpIHsKICAgcmV0dXJuIGUuZXJybm87CiAgfQogIHZhciBlcnIgPSBGUy5ub2RlUGVybWlzc2lvbnMoZGlyLCAid3giKTsKICBpZiAoZXJyKSB7CiAgIHJldHVybiBlcnI7CiAgfQogIGlmIChpc2RpcikgewogICBpZiAoIUZTLmlzRGlyKG5vZGUubW9kZSkpIHsKICAgIHJldHVybiBFUlJOT19DT0RFUy5FTk9URElSOwogICB9CiAgIGlmIChGUy5pc1Jvb3Qobm9kZSkgfHwgRlMuZ2V0UGF0aChub2RlKSA9PT0gRlMuY3dkKCkpIHsKICAgIHJldHVybiBFUlJOT19DT0RFUy5FQlVTWTsKICAgfQogIH0gZWxzZSB7CiAgIGlmIChGUy5pc0Rpcihub2RlLm1vZGUpKSB7CiAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUlTRElSOwogICB9CiAgfQogIHJldHVybiAwOwogfSksCiBtYXlPcGVuOiAoZnVuY3Rpb24obm9kZSwgZmxhZ3MpIHsKICBpZiAoIW5vZGUpIHsKICAgcmV0dXJuIEVSUk5PX0NPREVTLkVOT0VOVDsKICB9CiAgaWYgKEZTLmlzTGluayhub2RlLm1vZGUpKSB7CiAgIHJldHVybiBFUlJOT19DT0RFUy5FTE9PUDsKICB9IGVsc2UgaWYgKEZTLmlzRGlyKG5vZGUubW9kZSkpIHsKICAgaWYgKChmbGFncyAmIDIwOTcxNTUpICE9PSAwIHx8IGZsYWdzICYgNTEyKSB7CiAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUlTRElSOwogICB9CiAgfQogIHJldHVybiBGUy5ub2RlUGVybWlzc2lvbnMobm9kZSwgRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZmxhZ3MpKTsKIH0pLAogTUFYX09QRU5fRkRTOiA0MDk2LAogbmV4dGZkOiAoZnVuY3Rpb24oZmRfc3RhcnQsIGZkX2VuZCkgewogIGZkX3N0YXJ0ID0gZmRfc3RhcnQgfHwgMDsKICBmZF9lbmQgPSBmZF9lbmQgfHwgRlMuTUFYX09QRU5fRkRTOwogIGZvciAodmFyIGZkID0gZmRfc3RhcnQ7IGZkIDw9IGZkX2VuZDsgZmQrKykgewogICBpZiAoIUZTLnN0cmVhbXNbZmRdKSB7CiAgICByZXR1cm4gZmQ7CiAgIH0KICB9CiAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU1GSUxFKTsKIH0pLAogZ2V0U3RyZWFtOiAoZnVuY3Rpb24oZmQpIHsKICByZXR1cm4gRlMuc3RyZWFtc1tmZF07CiB9KSwKIGNyZWF0ZVN0cmVhbTogKGZ1bmN0aW9uKHN0cmVhbSwgZmRfc3RhcnQsIGZkX2VuZCkgewogIGlmICghRlMuRlNTdHJlYW0pIHsKICAgRlMuRlNTdHJlYW0gPSAoZnVuY3Rpb24oKSB7fSk7CiAgIEZTLkZTU3RyZWFtLnByb3RvdHlwZSA9IHt9OwogICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGUy5GU1N0cmVhbS5wcm90b3R5cGUsIHsKICAgIG9iamVjdDogewogICAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5ub2RlOwogICAgIH0pLAogICAgIHNldDogKGZ1bmN0aW9uKHZhbCkgewogICAgICB0aGlzLm5vZGUgPSB2YWw7CiAgICAgfSkKICAgIH0sCiAgICBpc1JlYWQ6IHsKICAgICBnZXQ6IChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgMjA5NzE1NSkgIT09IDE7CiAgICAgfSkKICAgIH0sCiAgICBpc1dyaXRlOiB7CiAgICAgZ2V0OiAoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAodGhpcy5mbGFncyAmIDIwOTcxNTUpICE9PSAwOwogICAgIH0pCiAgICB9LAogICAgaXNBcHBlbmQ6IHsKICAgICBnZXQ6IChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuZmxhZ3MgJiAxMDI0OwogICAgIH0pCiAgICB9CiAgIH0pOwogIH0KICB2YXIgbmV3U3RyZWFtID0gbmV3IEZTLkZTU3RyZWFtOwogIGZvciAodmFyIHAgaW4gc3RyZWFtKSB7CiAgIG5ld1N0cmVhbVtwXSA9IHN0cmVhbVtwXTsKICB9CiAgc3RyZWFtID0gbmV3U3RyZWFtOwogIHZhciBmZCA9IEZTLm5leHRmZChmZF9zdGFydCwgZmRfZW5kKTsKICBzdHJlYW0uZmQgPSBmZDsKICBGUy5zdHJlYW1zW2ZkXSA9IHN0cmVhbTsKICByZXR1cm4gc3RyZWFtOwogfSksCiBjbG9zZVN0cmVhbTogKGZ1bmN0aW9uKGZkKSB7CiAgRlMuc3RyZWFtc1tmZF0gPSBudWxsOwogfSksCiBjaHJkZXZfc3RyZWFtX29wczogewogIG9wZW46IChmdW5jdGlvbihzdHJlYW0pIHsKICAgdmFyIGRldmljZSA9IEZTLmdldERldmljZShzdHJlYW0ubm9kZS5yZGV2KTsKICAgc3RyZWFtLnN0cmVhbV9vcHMgPSBkZXZpY2Uuc3RyZWFtX29wczsKICAgaWYgKHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4pIHsKICAgIHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4oc3RyZWFtKTsKICAgfQogIH0pLAogIGxsc2VlazogKGZ1bmN0aW9uKCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FU1BJUEUpOwogIH0pCiB9LAogbWFqb3I6IChmdW5jdGlvbihkZXYpIHsKICByZXR1cm4gZGV2ID4+IDg7CiB9KSwKIG1pbm9yOiAoZnVuY3Rpb24oZGV2KSB7CiAgcmV0dXJuIGRldiAmIDI1NTsKIH0pLAogbWFrZWRldjogKGZ1bmN0aW9uKG1hLCBtaSkgewogIHJldHVybiBtYSA8PCA4IHwgbWk7CiB9KSwKIHJlZ2lzdGVyRGV2aWNlOiAoZnVuY3Rpb24oZGV2LCBvcHMpIHsKICBGUy5kZXZpY2VzW2Rldl0gPSB7CiAgIHN0cmVhbV9vcHM6IG9wcwogIH07CiB9KSwKIGdldERldmljZTogKGZ1bmN0aW9uKGRldikgewogIHJldHVybiBGUy5kZXZpY2VzW2Rldl07CiB9KSwKIGdldE1vdW50czogKGZ1bmN0aW9uKG1vdW50KSB7CiAgdmFyIG1vdW50cyA9IFtdOwogIHZhciBjaGVjayA9IFsgbW91bnQgXTsKICB3aGlsZSAoY2hlY2subGVuZ3RoKSB7CiAgIHZhciBtID0gY2hlY2sucG9wKCk7CiAgIG1vdW50cy5wdXNoKG0pOwogICBjaGVjay5wdXNoLmFwcGx5KGNoZWNrLCBtLm1vdW50cyk7CiAgfQogIHJldHVybiBtb3VudHM7CiB9KSwKIHN5bmNmczogKGZ1bmN0aW9uKHBvcHVsYXRlLCBjYWxsYmFjaykgewogIGlmICh0eXBlb2YgcG9wdWxhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgY2FsbGJhY2sgPSBwb3B1bGF0ZTsKICAgcG9wdWxhdGUgPSBmYWxzZTsKICB9CiAgdmFyIG1vdW50cyA9IEZTLmdldE1vdW50cyhGUy5yb290Lm1vdW50KTsKICB2YXIgY29tcGxldGVkID0gMDsKICBmdW5jdGlvbiBkb25lKGVycikgewogICBpZiAoZXJyKSB7CiAgICBpZiAoIWRvbmUuZXJyb3JlZCkgewogICAgIGRvbmUuZXJyb3JlZCA9IHRydWU7CiAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7CiAgICB9CiAgICByZXR1cm47CiAgIH0KICAgaWYgKCsrY29tcGxldGVkID49IG1vdW50cy5sZW5ndGgpIHsKICAgIGNhbGxiYWNrKG51bGwpOwogICB9CiAgfQogIG1vdW50cy5mb3JFYWNoKChmdW5jdGlvbihtb3VudCkgewogICBpZiAoIW1vdW50LnR5cGUuc3luY2ZzKSB7CiAgICByZXR1cm4gZG9uZShudWxsKTsKICAgfQogICBtb3VudC50eXBlLnN5bmNmcyhtb3VudCwgcG9wdWxhdGUsIGRvbmUpOwogIH0pKTsKIH0pLAogbW91bnQ6IChmdW5jdGlvbih0eXBlLCBvcHRzLCBtb3VudHBvaW50KSB7CiAgdmFyIHJvb3QgPSBtb3VudHBvaW50ID09PSAiLyI7CiAgdmFyIHBzZXVkbyA9ICFtb3VudHBvaW50OwogIHZhciBub2RlOwogIGlmIChyb290ICYmIEZTLnJvb3QpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpOwogIH0gZWxzZSBpZiAoIXJvb3QgJiYgIXBzZXVkbykgewogICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChtb3VudHBvaW50LCB7CiAgICBmb2xsb3dfbW91bnQ6IGZhbHNlCiAgIH0pOwogICBtb3VudHBvaW50ID0gbG9va3VwLnBhdGg7CiAgIG5vZGUgPSBsb29rdXAubm9kZTsKICAgaWYgKEZTLmlzTW91bnRwb2ludChub2RlKSkgewogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpOwogICB9CiAgIGlmICghRlMuaXNEaXIobm9kZS5tb2RlKSkgewogICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVERJUik7CiAgIH0KICB9CiAgdmFyIG1vdW50ID0gewogICB0eXBlOiB0eXBlLAogICBvcHRzOiBvcHRzLAogICBtb3VudHBvaW50OiBtb3VudHBvaW50LAogICBtb3VudHM6IFtdCiAgfTsKICB2YXIgbW91bnRSb290ID0gdHlwZS5tb3VudChtb3VudCk7CiAgbW91bnRSb290Lm1vdW50ID0gbW91bnQ7CiAgbW91bnQucm9vdCA9IG1vdW50Um9vdDsKICBpZiAocm9vdCkgewogICBGUy5yb290ID0gbW91bnRSb290OwogIH0gZWxzZSBpZiAobm9kZSkgewogICBub2RlLm1vdW50ZWQgPSBtb3VudDsKICAgaWYgKG5vZGUubW91bnQpIHsKICAgIG5vZGUubW91bnQubW91bnRzLnB1c2gobW91bnQpOwogICB9CiAgfQogIHJldHVybiBtb3VudFJvb3Q7CiB9KSwKIHVubW91bnQ6IChmdW5jdGlvbihtb3VudHBvaW50KSB7CiAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgobW91bnRwb2ludCwgewogICBmb2xsb3dfbW91bnQ6IGZhbHNlCiAgfSk7CiAgaWYgKCFGUy5pc01vdW50cG9pbnQobG9va3VwLm5vZGUpKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgfQogIHZhciBub2RlID0gbG9va3VwLm5vZGU7CiAgdmFyIG1vdW50ID0gbm9kZS5tb3VudGVkOwogIHZhciBtb3VudHMgPSBGUy5nZXRNb3VudHMobW91bnQpOwogIE9iamVjdC5rZXlzKEZTLm5hbWVUYWJsZSkuZm9yRWFjaCgoZnVuY3Rpb24oaGFzaCkgewogICB2YXIgY3VycmVudCA9IEZTLm5hbWVUYWJsZVtoYXNoXTsKICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgIHZhciBuZXh0ID0gY3VycmVudC5uYW1lX25leHQ7CiAgICBpZiAobW91bnRzLmluZGV4T2YoY3VycmVudC5tb3VudCkgIT09IC0xKSB7CiAgICAgRlMuZGVzdHJveU5vZGUoY3VycmVudCk7CiAgICB9CiAgICBjdXJyZW50ID0gbmV4dDsKICAgfQogIH0pKTsKICBub2RlLm1vdW50ZWQgPSBudWxsOwogIHZhciBpZHggPSBub2RlLm1vdW50Lm1vdW50cy5pbmRleE9mKG1vdW50KTsKICBhc3NlcnQoaWR4ICE9PSAtMSk7CiAgbm9kZS5tb3VudC5tb3VudHMuc3BsaWNlKGlkeCwgMSk7CiB9KSwKIGxvb2t1cDogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkgewogIHJldHVybiBwYXJlbnQubm9kZV9vcHMubG9va3VwKHBhcmVudCwgbmFtZSk7CiB9KSwKIG1rbm9kOiAoZnVuY3Rpb24ocGF0aCwgbW9kZSwgZGV2KSB7CiAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgewogICBwYXJlbnQ6IHRydWUKICB9KTsKICB2YXIgcGFyZW50ID0gbG9va3VwLm5vZGU7CiAgdmFyIG5hbWUgPSBQQVRILmJhc2VuYW1lKHBhdGgpOwogIGlmICghbmFtZSB8fCBuYW1lID09PSAiLiIgfHwgbmFtZSA9PT0gIi4uIikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICB2YXIgZXJyID0gRlMubWF5Q3JlYXRlKHBhcmVudCwgbmFtZSk7CiAgaWYgKGVycikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpOwogIH0KICBpZiAoIXBhcmVudC5ub2RlX29wcy5ta25vZCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfQogIHJldHVybiBwYXJlbnQubm9kZV9vcHMubWtub2QocGFyZW50LCBuYW1lLCBtb2RlLCBkZXYpOwogfSksCiBjcmVhdGU6IChmdW5jdGlvbihwYXRoLCBtb2RlKSB7CiAgbW9kZSA9IG1vZGUgIT09IHVuZGVmaW5lZCA/IG1vZGUgOiA0Mzg7CiAgbW9kZSAmPSA0MDk1OwogIG1vZGUgfD0gMzI3Njg7CiAgcmV0dXJuIEZTLm1rbm9kKHBhdGgsIG1vZGUsIDApOwogfSksCiBta2RpcjogKGZ1bmN0aW9uKHBhdGgsIG1vZGUpIHsKICBtb2RlID0gbW9kZSAhPT0gdW5kZWZpbmVkID8gbW9kZSA6IDUxMTsKICBtb2RlICY9IDUxMSB8IDUxMjsKICBtb2RlIHw9IDE2Mzg0OwogIHJldHVybiBGUy5ta25vZChwYXRoLCBtb2RlLCAwKTsKIH0pLAogbWtkZXY6IChmdW5jdGlvbihwYXRoLCBtb2RlLCBkZXYpIHsKICBpZiAodHlwZW9mIGRldiA9PT0gInVuZGVmaW5lZCIpIHsKICAgZGV2ID0gbW9kZTsKICAgbW9kZSA9IDQzODsKICB9CiAgbW9kZSB8PSA4MTkyOwogIHJldHVybiBGUy5ta25vZChwYXRoLCBtb2RlLCBkZXYpOwogfSksCiBzeW1saW5rOiAoZnVuY3Rpb24ob2xkcGF0aCwgbmV3cGF0aCkgewogIGlmICghUEFUSC5yZXNvbHZlKG9sZHBhdGgpKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0VOVCk7CiAgfQogIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKG5ld3BhdGgsIHsKICAgcGFyZW50OiB0cnVlCiAgfSk7CiAgdmFyIHBhcmVudCA9IGxvb2t1cC5ub2RlOwogIGlmICghcGFyZW50KSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0VOVCk7CiAgfQogIHZhciBuZXduYW1lID0gUEFUSC5iYXNlbmFtZShuZXdwYXRoKTsKICB2YXIgZXJyID0gRlMubWF5Q3JlYXRlKHBhcmVudCwgbmV3bmFtZSk7CiAgaWYgKGVycikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpOwogIH0KICBpZiAoIXBhcmVudC5ub2RlX29wcy5zeW1saW5rKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICB9CiAgcmV0dXJuIHBhcmVudC5ub2RlX29wcy5zeW1saW5rKHBhcmVudCwgbmV3bmFtZSwgb2xkcGF0aCk7CiB9KSwKIHJlbmFtZTogKGZ1bmN0aW9uKG9sZF9wYXRoLCBuZXdfcGF0aCkgewogIHZhciBvbGRfZGlybmFtZSA9IFBBVEguZGlybmFtZShvbGRfcGF0aCk7CiAgdmFyIG5ld19kaXJuYW1lID0gUEFUSC5kaXJuYW1lKG5ld19wYXRoKTsKICB2YXIgb2xkX25hbWUgPSBQQVRILmJhc2VuYW1lKG9sZF9wYXRoKTsKICB2YXIgbmV3X25hbWUgPSBQQVRILmJhc2VuYW1lKG5ld19wYXRoKTsKICB2YXIgbG9va3VwLCBvbGRfZGlyLCBuZXdfZGlyOwogIHRyeSB7CiAgIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgob2xkX3BhdGgsIHsKICAgIHBhcmVudDogdHJ1ZQogICB9KTsKICAgb2xkX2RpciA9IGxvb2t1cC5ub2RlOwogICBsb29rdXAgPSBGUy5sb29rdXBQYXRoKG5ld19wYXRoLCB7CiAgICBwYXJlbnQ6IHRydWUKICAgfSk7CiAgIG5ld19kaXIgPSBsb29rdXAubm9kZTsKICB9IGNhdGNoIChlKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKTsKICB9CiAgaWYgKCFvbGRfZGlyIHx8ICFuZXdfZGlyKSB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQpOwogIGlmIChvbGRfZGlyLm1vdW50ICE9PSBuZXdfZGlyLm1vdW50KSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVYREVWKTsKICB9CiAgdmFyIG9sZF9ub2RlID0gRlMubG9va3VwTm9kZShvbGRfZGlyLCBvbGRfbmFtZSk7CiAgdmFyIHJlbGF0aXZlID0gUEFUSC5yZWxhdGl2ZShvbGRfcGF0aCwgbmV3X2Rpcm5hbWUpOwogIGlmIChyZWxhdGl2ZS5jaGFyQXQoMCkgIT09ICIuIikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICByZWxhdGl2ZSA9IFBBVEgucmVsYXRpdmUobmV3X3BhdGgsIG9sZF9kaXJuYW1lKTsKICBpZiAocmVsYXRpdmUuY2hhckF0KDApICE9PSAiLiIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVEVNUFRZKTsKICB9CiAgdmFyIG5ld19ub2RlOwogIHRyeSB7CiAgIG5ld19ub2RlID0gRlMubG9va3VwTm9kZShuZXdfZGlyLCBuZXdfbmFtZSk7CiAgfSBjYXRjaCAoZSkge30KICBpZiAob2xkX25vZGUgPT09IG5ld19ub2RlKSB7CiAgIHJldHVybjsKICB9CiAgdmFyIGlzZGlyID0gRlMuaXNEaXIob2xkX25vZGUubW9kZSk7CiAgdmFyIGVyciA9IEZTLm1heURlbGV0ZShvbGRfZGlyLCBvbGRfbmFtZSwgaXNkaXIpOwogIGlmIChlcnIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTsKICB9CiAgZXJyID0gbmV3X25vZGUgPyBGUy5tYXlEZWxldGUobmV3X2RpciwgbmV3X25hbWUsIGlzZGlyKSA6IEZTLm1heUNyZWF0ZShuZXdfZGlyLCBuZXdfbmFtZSk7CiAgaWYgKGVycikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpOwogIH0KICBpZiAoIW9sZF9kaXIubm9kZV9vcHMucmVuYW1lKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICB9CiAgaWYgKEZTLmlzTW91bnRwb2ludChvbGRfbm9kZSkgfHwgbmV3X25vZGUgJiYgRlMuaXNNb3VudHBvaW50KG5ld19ub2RlKSkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQlVTWSk7CiAgfQogIGlmIChuZXdfZGlyICE9PSBvbGRfZGlyKSB7CiAgIGVyciA9IEZTLm5vZGVQZXJtaXNzaW9ucyhvbGRfZGlyLCAidyIpOwogICBpZiAoZXJyKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpOwogICB9CiAgfQogIHRyeSB7CiAgIGlmIChGUy50cmFja2luZ0RlbGVnYXRlWyJ3aWxsTW92ZVBhdGgiXSkgewogICAgRlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbE1vdmVQYXRoIl0ob2xkX3BhdGgsIG5ld19wYXRoKTsKICAgfQogIH0gY2F0Y2ggKGUpIHsKICAgY29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ3dpbGxNb3ZlUGF0aCddKCciICsgb2xkX3BhdGggKyAiJywgJyIgKyBuZXdfcGF0aCArICInKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBlLm1lc3NhZ2UpOwogIH0KICBGUy5oYXNoUmVtb3ZlTm9kZShvbGRfbm9kZSk7CiAgdHJ5IHsKICAgb2xkX2Rpci5ub2RlX29wcy5yZW5hbWUob2xkX25vZGUsIG5ld19kaXIsIG5ld19uYW1lKTsKICB9IGNhdGNoIChlKSB7CiAgIHRocm93IGU7CiAgfSBmaW5hbGx5IHsKICAgRlMuaGFzaEFkZE5vZGUob2xkX25vZGUpOwogIH0KICB0cnkgewogICBpZiAoRlMudHJhY2tpbmdEZWxlZ2F0ZVsib25Nb3ZlUGF0aCJdKSBGUy50cmFja2luZ0RlbGVnYXRlWyJvbk1vdmVQYXRoIl0ob2xkX3BhdGgsIG5ld19wYXRoKTsKICB9IGNhdGNoIChlKSB7CiAgIGNvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWydvbk1vdmVQYXRoJ10oJyIgKyBvbGRfcGF0aCArICInLCAnIiArIG5ld19wYXRoICsgIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIGUubWVzc2FnZSk7CiAgfQogfSksCiBybWRpcjogKGZ1bmN0aW9uKHBhdGgpIHsKICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7CiAgIHBhcmVudDogdHJ1ZQogIH0pOwogIHZhciBwYXJlbnQgPSBsb29rdXAubm9kZTsKICB2YXIgbmFtZSA9IFBBVEguYmFzZW5hbWUocGF0aCk7CiAgdmFyIG5vZGUgPSBGUy5sb29rdXBOb2RlKHBhcmVudCwgbmFtZSk7CiAgdmFyIGVyciA9IEZTLm1heURlbGV0ZShwYXJlbnQsIG5hbWUsIHRydWUpOwogIGlmIChlcnIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTsKICB9CiAgaWYgKCFwYXJlbnQubm9kZV9vcHMucm1kaXIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pOwogIH0KICBpZiAoRlMuaXNNb3VudHBvaW50KG5vZGUpKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKTsKICB9CiAgdHJ5IHsKICAgaWYgKEZTLnRyYWNraW5nRGVsZWdhdGVbIndpbGxEZWxldGVQYXRoIl0pIHsKICAgIEZTLnRyYWNraW5nRGVsZWdhdGVbIndpbGxEZWxldGVQYXRoIl0ocGF0aCk7CiAgIH0KICB9IGNhdGNoIChlKSB7CiAgIGNvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsRGVsZXRlUGF0aCddKCciICsgcGF0aCArICInKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBlLm1lc3NhZ2UpOwogIH0KICBwYXJlbnQubm9kZV9vcHMucm1kaXIocGFyZW50LCBuYW1lKTsKICBGUy5kZXN0cm95Tm9kZShub2RlKTsKICB0cnkgewogICBpZiAoRlMudHJhY2tpbmdEZWxlZ2F0ZVsib25EZWxldGVQYXRoIl0pIEZTLnRyYWNraW5nRGVsZWdhdGVbIm9uRGVsZXRlUGF0aCJdKHBhdGgpOwogIH0gY2F0Y2ggKGUpIHsKICAgY29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uRGVsZXRlUGF0aCddKCciICsgcGF0aCArICInKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBlLm1lc3NhZ2UpOwogIH0KIH0pLAogcmVhZGRpcjogKGZ1bmN0aW9uKHBhdGgpIHsKICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7CiAgIGZvbGxvdzogdHJ1ZQogIH0pOwogIHZhciBub2RlID0gbG9va3VwLm5vZGU7CiAgaWYgKCFub2RlLm5vZGVfb3BzLnJlYWRkaXIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVERJUik7CiAgfQogIHJldHVybiBub2RlLm5vZGVfb3BzLnJlYWRkaXIobm9kZSk7CiB9KSwKIHVubGluazogKGZ1bmN0aW9uKHBhdGgpIHsKICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7CiAgIHBhcmVudDogdHJ1ZQogIH0pOwogIHZhciBwYXJlbnQgPSBsb29rdXAubm9kZTsKICB2YXIgbmFtZSA9IFBBVEguYmFzZW5hbWUocGF0aCk7CiAgdmFyIG5vZGUgPSBGUy5sb29rdXBOb2RlKHBhcmVudCwgbmFtZSk7CiAgdmFyIGVyciA9IEZTLm1heURlbGV0ZShwYXJlbnQsIG5hbWUsIGZhbHNlKTsKICBpZiAoZXJyKSB7CiAgIGlmIChlcnIgPT09IEVSUk5PX0NPREVTLkVJU0RJUikgZXJyID0gRVJSTk9fQ09ERVMuRVBFUk07CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7CiAgfQogIGlmICghcGFyZW50Lm5vZGVfb3BzLnVubGluaykgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfQogIGlmIChGUy5pc01vdW50cG9pbnQobm9kZSkpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpOwogIH0KICB0cnkgewogICBpZiAoRlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbERlbGV0ZVBhdGgiXSkgewogICAgRlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbERlbGV0ZVBhdGgiXShwYXRoKTsKICAgfQogIH0gY2F0Y2ggKGUpIHsKICAgY29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ3dpbGxEZWxldGVQYXRoJ10oJyIgKyBwYXRoICsgIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIGUubWVzc2FnZSk7CiAgfQogIHBhcmVudC5ub2RlX29wcy51bmxpbmsocGFyZW50LCBuYW1lKTsKICBGUy5kZXN0cm95Tm9kZShub2RlKTsKICB0cnkgewogICBpZiAoRlMudHJhY2tpbmdEZWxlZ2F0ZVsib25EZWxldGVQYXRoIl0pIEZTLnRyYWNraW5nRGVsZWdhdGVbIm9uRGVsZXRlUGF0aCJdKHBhdGgpOwogIH0gY2F0Y2ggKGUpIHsKICAgY29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uRGVsZXRlUGF0aCddKCciICsgcGF0aCArICInKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBlLm1lc3NhZ2UpOwogIH0KIH0pLAogcmVhZGxpbms6IChmdW5jdGlvbihwYXRoKSB7CiAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCk7CiAgdmFyIGxpbmsgPSBsb29rdXAubm9kZTsKICBpZiAoIWxpbmspIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKTsKICB9CiAgaWYgKCFsaW5rLm5vZGVfb3BzLnJlYWRsaW5rKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgfQogIHJldHVybiBQQVRILnJlc29sdmUoRlMuZ2V0UGF0aChsaW5rLnBhcmVudCksIGxpbmsubm9kZV9vcHMucmVhZGxpbmsobGluaykpOwogfSksCiBzdGF0OiAoZnVuY3Rpb24ocGF0aCwgZG9udEZvbGxvdykgewogIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsKICAgZm9sbG93OiAhZG9udEZvbGxvdwogIH0pOwogIHZhciBub2RlID0gbG9va3VwLm5vZGU7CiAgaWYgKCFub2RlKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0VOVCk7CiAgfQogIGlmICghbm9kZS5ub2RlX29wcy5nZXRhdHRyKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICB9CiAgcmV0dXJuIG5vZGUubm9kZV9vcHMuZ2V0YXR0cihub2RlKTsKIH0pLAogbHN0YXQ6IChmdW5jdGlvbihwYXRoKSB7CiAgcmV0dXJuIEZTLnN0YXQocGF0aCwgdHJ1ZSk7CiB9KSwKIGNobW9kOiAoZnVuY3Rpb24ocGF0aCwgbW9kZSwgZG9udEZvbGxvdykgewogIHZhciBub2RlOwogIGlmICh0eXBlb2YgcGF0aCA9PT0gInN0cmluZyIpIHsKICAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgewogICAgZm9sbG93OiAhZG9udEZvbGxvdwogICB9KTsKICAgbm9kZSA9IGxvb2t1cC5ub2RlOwogIH0gZWxzZSB7CiAgIG5vZGUgPSBwYXRoOwogIH0KICBpZiAoIW5vZGUubm9kZV9vcHMuc2V0YXR0cikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfQogIG5vZGUubm9kZV9vcHMuc2V0YXR0cihub2RlLCB7CiAgIG1vZGU6IG1vZGUgJiA0MDk1IHwgbm9kZS5tb2RlICYgfjQwOTUsCiAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKQogIH0pOwogfSksCiBsY2htb2Q6IChmdW5jdGlvbihwYXRoLCBtb2RlKSB7CiAgRlMuY2htb2QocGF0aCwgbW9kZSwgdHJ1ZSk7CiB9KSwKIGZjaG1vZDogKGZ1bmN0aW9uKGZkLCBtb2RlKSB7CiAgdmFyIHN0cmVhbSA9IEZTLmdldFN0cmVhbShmZCk7CiAgaWYgKCFzdHJlYW0pIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogIH0KICBGUy5jaG1vZChzdHJlYW0ubm9kZSwgbW9kZSk7CiB9KSwKIGNob3duOiAoZnVuY3Rpb24ocGF0aCwgdWlkLCBnaWQsIGRvbnRGb2xsb3cpIHsKICB2YXIgbm9kZTsKICBpZiAodHlwZW9mIHBhdGggPT09ICJzdHJpbmciKSB7CiAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsKICAgIGZvbGxvdzogIWRvbnRGb2xsb3cKICAgfSk7CiAgIG5vZGUgPSBsb29rdXAubm9kZTsKICB9IGVsc2UgewogICBub2RlID0gcGF0aDsKICB9CiAgaWYgKCFub2RlLm5vZGVfb3BzLnNldGF0dHIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pOwogIH0KICBub2RlLm5vZGVfb3BzLnNldGF0dHIobm9kZSwgewogICB0aW1lc3RhbXA6IERhdGUubm93KCkKICB9KTsKIH0pLAogbGNob3duOiAoZnVuY3Rpb24ocGF0aCwgdWlkLCBnaWQpIHsKICBGUy5jaG93bihwYXRoLCB1aWQsIGdpZCwgdHJ1ZSk7CiB9KSwKIGZjaG93bjogKGZ1bmN0aW9uKGZkLCB1aWQsIGdpZCkgewogIHZhciBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmQpOwogIGlmICghc3RyZWFtKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTsKICB9CiAgRlMuY2hvd24oc3RyZWFtLm5vZGUsIHVpZCwgZ2lkKTsKIH0pLAogdHJ1bmNhdGU6IChmdW5jdGlvbihwYXRoLCBsZW4pIHsKICBpZiAobGVuIDwgMCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICB2YXIgbm9kZTsKICBpZiAodHlwZW9mIHBhdGggPT09ICJzdHJpbmciKSB7CiAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsKICAgIGZvbGxvdzogdHJ1ZQogICB9KTsKICAgbm9kZSA9IGxvb2t1cC5ub2RlOwogIH0gZWxzZSB7CiAgIG5vZGUgPSBwYXRoOwogIH0KICBpZiAoIW5vZGUubm9kZV9vcHMuc2V0YXR0cikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgfQogIGlmIChGUy5pc0Rpcihub2RlLm1vZGUpKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJU0RJUik7CiAgfQogIGlmICghRlMuaXNGaWxlKG5vZGUubW9kZSkpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICB9CiAgdmFyIGVyciA9IEZTLm5vZGVQZXJtaXNzaW9ucyhub2RlLCAidyIpOwogIGlmIChlcnIpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTsKICB9CiAgbm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUsIHsKICAgc2l6ZTogbGVuLAogICB0aW1lc3RhbXA6IERhdGUubm93KCkKICB9KTsKIH0pLAogZnRydW5jYXRlOiAoZnVuY3Rpb24oZmQsIGxlbikgewogIHZhciBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmQpOwogIGlmICghc3RyZWFtKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTsKICB9CiAgaWYgKChzdHJlYW0uZmxhZ3MgJiAyMDk3MTU1KSA9PT0gMCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICBGUy50cnVuY2F0ZShzdHJlYW0ubm9kZSwgbGVuKTsKIH0pLAogdXRpbWU6IChmdW5jdGlvbihwYXRoLCBhdGltZSwgbXRpbWUpIHsKICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7CiAgIGZvbGxvdzogdHJ1ZQogIH0pOwogIHZhciBub2RlID0gbG9va3VwLm5vZGU7CiAgbm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUsIHsKICAgdGltZXN0YW1wOiBNYXRoLm1heChhdGltZSwgbXRpbWUpCiAgfSk7CiB9KSwKIG9wZW46IChmdW5jdGlvbihwYXRoLCBmbGFncywgbW9kZSwgZmRfc3RhcnQsIGZkX2VuZCkgewogIGlmIChwYXRoID09PSAiIikgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQpOwogIH0KICBmbGFncyA9IHR5cGVvZiBmbGFncyA9PT0gInN0cmluZyIgPyBGUy5tb2RlU3RyaW5nVG9GbGFncyhmbGFncykgOiBmbGFnczsKICBtb2RlID0gdHlwZW9mIG1vZGUgPT09ICJ1bmRlZmluZWQiID8gNDM4IDogbW9kZTsKICBpZiAoZmxhZ3MgJiA2NCkgewogICBtb2RlID0gbW9kZSAmIDQwOTUgfCAzMjc2ODsKICB9IGVsc2UgewogICBtb2RlID0gMDsKICB9CiAgdmFyIG5vZGU7CiAgaWYgKHR5cGVvZiBwYXRoID09PSAib2JqZWN0IikgewogICBub2RlID0gcGF0aDsKICB9IGVsc2UgewogICBwYXRoID0gUEFUSC5ub3JtYWxpemUocGF0aCk7CiAgIHRyeSB7CiAgICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7CiAgICAgZm9sbG93OiAhKGZsYWdzICYgMTMxMDcyKQogICAgfSk7CiAgICBub2RlID0gbG9va3VwLm5vZGU7CiAgIH0gY2F0Y2ggKGUpIHt9CiAgfQogIHZhciBjcmVhdGVkID0gZmFsc2U7CiAgaWYgKGZsYWdzICYgNjQpIHsKICAgaWYgKG5vZGUpIHsKICAgIGlmIChmbGFncyAmIDEyOCkgewogICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVFWElTVCk7CiAgICB9CiAgIH0gZWxzZSB7CiAgICBub2RlID0gRlMubWtub2QocGF0aCwgbW9kZSwgMCk7CiAgICBjcmVhdGVkID0gdHJ1ZTsKICAgfQogIH0KICBpZiAoIW5vZGUpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKTsKICB9CiAgaWYgKEZTLmlzQ2hyZGV2KG5vZGUubW9kZSkpIHsKICAgZmxhZ3MgJj0gfjUxMjsKICB9CiAgaWYgKGZsYWdzICYgNjU1MzYgJiYgIUZTLmlzRGlyKG5vZGUubW9kZSkpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVERJUik7CiAgfQogIGlmICghY3JlYXRlZCkgewogICB2YXIgZXJyID0gRlMubWF5T3Blbihub2RlLCBmbGFncyk7CiAgIGlmIChlcnIpIHsKICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7CiAgIH0KICB9CiAgaWYgKGZsYWdzICYgNTEyKSB7CiAgIEZTLnRydW5jYXRlKG5vZGUsIDApOwogIH0KICBmbGFncyAmPSB+KDEyOCB8IDUxMik7CiAgdmFyIHN0cmVhbSA9IEZTLmNyZWF0ZVN0cmVhbSh7CiAgIG5vZGU6IG5vZGUsCiAgIHBhdGg6IEZTLmdldFBhdGgobm9kZSksCiAgIGZsYWdzOiBmbGFncywKICAgc2Vla2FibGU6IHRydWUsCiAgIHBvc2l0aW9uOiAwLAogICBzdHJlYW1fb3BzOiBub2RlLnN0cmVhbV9vcHMsCiAgIHVuZ290dGVuOiBbXSwKICAgZXJyb3I6IGZhbHNlCiAgfSwgZmRfc3RhcnQsIGZkX2VuZCk7CiAgaWYgKHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4pIHsKICAgc3RyZWFtLnN0cmVhbV9vcHMub3BlbihzdHJlYW0pOwogIH0KICBpZiAoTW9kdWxlWyJsb2dSZWFkRmlsZXMiXSAmJiAhKGZsYWdzICYgMSkpIHsKICAgaWYgKCFGUy5yZWFkRmlsZXMpIEZTLnJlYWRGaWxlcyA9IHt9OwogICBpZiAoIShwYXRoIGluIEZTLnJlYWRGaWxlcykpIHsKICAgIEZTLnJlYWRGaWxlc1twYXRoXSA9IDE7CiAgICBNb2R1bGVbInByaW50RXJyIl0oInJlYWQgZmlsZTogIiArIHBhdGgpOwogICB9CiAgfQogIHRyeSB7CiAgIGlmIChGUy50cmFja2luZ0RlbGVnYXRlWyJvbk9wZW5GaWxlIl0pIHsKICAgIHZhciB0cmFja2luZ0ZsYWdzID0gMDsKICAgIGlmICgoZmxhZ3MgJiAyMDk3MTU1KSAhPT0gMSkgewogICAgIHRyYWNraW5nRmxhZ3MgfD0gRlMudHJhY2tpbmcub3BlbkZsYWdzLlJFQUQ7CiAgICB9CiAgICBpZiAoKGZsYWdzICYgMjA5NzE1NSkgIT09IDApIHsKICAgICB0cmFja2luZ0ZsYWdzIHw9IEZTLnRyYWNraW5nLm9wZW5GbGFncy5XUklURTsKICAgIH0KICAgIEZTLnRyYWNraW5nRGVsZWdhdGVbIm9uT3BlbkZpbGUiXShwYXRoLCB0cmFja2luZ0ZsYWdzKTsKICAgfQogIH0gY2F0Y2ggKGUpIHsKICAgY29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uT3BlbkZpbGUnXSgnIiArIHBhdGggKyAiJywgZmxhZ3MpIHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIGUubWVzc2FnZSk7CiAgfQogIHJldHVybiBzdHJlYW07CiB9KSwKIGNsb3NlOiAoZnVuY3Rpb24oc3RyZWFtKSB7CiAgaWYgKHN0cmVhbS5nZXRkZW50cykgc3RyZWFtLmdldGRlbnRzID0gbnVsbDsKICB0cnkgewogICBpZiAoc3RyZWFtLnN0cmVhbV9vcHMuY2xvc2UpIHsKICAgIHN0cmVhbS5zdHJlYW1fb3BzLmNsb3NlKHN0cmVhbSk7CiAgIH0KICB9IGNhdGNoIChlKSB7CiAgIHRocm93IGU7CiAgfSBmaW5hbGx5IHsKICAgRlMuY2xvc2VTdHJlYW0oc3RyZWFtLmZkKTsKICB9CiB9KSwKIGxsc2VlazogKGZ1bmN0aW9uKHN0cmVhbSwgb2Zmc2V0LCB3aGVuY2UpIHsKICBpZiAoIXN0cmVhbS5zZWVrYWJsZSB8fCAhc3RyZWFtLnN0cmVhbV9vcHMubGxzZWVrKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7CiAgfQogIHN0cmVhbS5wb3NpdGlvbiA9IHN0cmVhbS5zdHJlYW1fb3BzLmxsc2VlayhzdHJlYW0sIG9mZnNldCwgd2hlbmNlKTsKICBzdHJlYW0udW5nb3R0ZW4gPSBbXTsKICByZXR1cm4gc3RyZWFtLnBvc2l0aW9uOwogfSksCiByZWFkOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikgewogIGlmIChsZW5ndGggPCAwIHx8IHBvc2l0aW9uIDwgMCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICBpZiAoKHN0cmVhbS5mbGFncyAmIDIwOTcxNTUpID09PSAxKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTsKICB9CiAgaWYgKEZTLmlzRGlyKHN0cmVhbS5ub2RlLm1vZGUpKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJU0RJUik7CiAgfQogIGlmICghc3RyZWFtLnN0cmVhbV9vcHMucmVhZCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICB2YXIgc2Vla2luZyA9IHRydWU7CiAgaWYgKHR5cGVvZiBwb3NpdGlvbiA9PT0gInVuZGVmaW5lZCIpIHsKICAgcG9zaXRpb24gPSBzdHJlYW0ucG9zaXRpb247CiAgIHNlZWtpbmcgPSBmYWxzZTsKICB9IGVsc2UgaWYgKCFzdHJlYW0uc2Vla2FibGUpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVNQSVBFKTsKICB9CiAgdmFyIGJ5dGVzUmVhZCA9IHN0cmVhbS5zdHJlYW1fb3BzLnJlYWQoc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbik7CiAgaWYgKCFzZWVraW5nKSBzdHJlYW0ucG9zaXRpb24gKz0gYnl0ZXNSZWFkOwogIHJldHVybiBieXRlc1JlYWQ7CiB9KSwKIHdyaXRlOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FuT3duKSB7CiAgaWYgKGxlbmd0aCA8IDAgfHwgcG9zaXRpb24gPCAwKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgfQogIGlmICgoc3RyZWFtLmZsYWdzICYgMjA5NzE1NSkgPT09IDApIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogIH0KICBpZiAoRlMuaXNEaXIoc3RyZWFtLm5vZGUubW9kZSkpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlTRElSKTsKICB9CiAgaWYgKCFzdHJlYW0uc3RyZWFtX29wcy53cml0ZSkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogIH0KICBpZiAoc3RyZWFtLmZsYWdzICYgMTAyNCkgewogICBGUy5sbHNlZWsoc3RyZWFtLCAwLCAyKTsKICB9CiAgdmFyIHNlZWtpbmcgPSB0cnVlOwogIGlmICh0eXBlb2YgcG9zaXRpb24gPT09ICJ1bmRlZmluZWQiKSB7CiAgIHBvc2l0aW9uID0gc3RyZWFtLnBvc2l0aW9uOwogICBzZWVraW5nID0gZmFsc2U7CiAgfSBlbHNlIGlmICghc3RyZWFtLnNlZWthYmxlKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7CiAgfQogIHZhciBieXRlc1dyaXR0ZW4gPSBzdHJlYW0uc3RyZWFtX29wcy53cml0ZShzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYW5Pd24pOwogIGlmICghc2Vla2luZykgc3RyZWFtLnBvc2l0aW9uICs9IGJ5dGVzV3JpdHRlbjsKICB0cnkgewogICBpZiAoc3RyZWFtLnBhdGggJiYgRlMudHJhY2tpbmdEZWxlZ2F0ZVsib25Xcml0ZVRvRmlsZSJdKSBGUy50cmFja2luZ0RlbGVnYXRlWyJvbldyaXRlVG9GaWxlIl0oc3RyZWFtLnBhdGgpOwogIH0gY2F0Y2ggKGUpIHsKICAgY29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uV3JpdGVUb0ZpbGUnXSgnIiArIHBhdGggKyAiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZS5tZXNzYWdlKTsKICB9CiAgcmV0dXJuIGJ5dGVzV3JpdHRlbjsKIH0pLAogYWxsb2NhdGU6IChmdW5jdGlvbihzdHJlYW0sIG9mZnNldCwgbGVuZ3RoKSB7CiAgaWYgKG9mZnNldCA8IDAgfHwgbGVuZ3RoIDw9IDApIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICB9CiAgaWYgKChzdHJlYW0uZmxhZ3MgJiAyMDk3MTU1KSA9PT0gMCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQkFERik7CiAgfQogIGlmICghRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpICYmICFGUy5pc0Rpcihub2RlLm1vZGUpKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVik7CiAgfQogIGlmICghc3RyZWFtLnN0cmVhbV9vcHMuYWxsb2NhdGUpIHsKICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU9QTk9UU1VQUCk7CiAgfQogIHN0cmVhbS5zdHJlYW1fb3BzLmFsbG9jYXRlKHN0cmVhbSwgb2Zmc2V0LCBsZW5ndGgpOwogfSksCiBtbWFwOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgcHJvdCwgZmxhZ3MpIHsKICBpZiAoKHN0cmVhbS5mbGFncyAmIDIwOTcxNTUpID09PSAxKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBQ0NFUyk7CiAgfQogIGlmICghc3RyZWFtLnN0cmVhbV9vcHMubW1hcCkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9ERVYpOwogIH0KICByZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMubW1hcChzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBwcm90LCBmbGFncyk7CiB9KSwKIG1zeW5jOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBtbWFwRmxhZ3MpIHsKICBpZiAoIXN0cmVhbSB8fCAhc3RyZWFtLnN0cmVhbV9vcHMubXN5bmMpIHsKICAgcmV0dXJuIDA7CiAgfQogIHJldHVybiBzdHJlYW0uc3RyZWFtX29wcy5tc3luYyhzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIG1tYXBGbGFncyk7CiB9KSwKIG11bm1hcDogKGZ1bmN0aW9uKHN0cmVhbSkgewogIHJldHVybiAwOwogfSksCiBpb2N0bDogKGZ1bmN0aW9uKHN0cmVhbSwgY21kLCBhcmcpIHsKICBpZiAoIXN0cmVhbS5zdHJlYW1fb3BzLmlvY3RsKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RUWSk7CiAgfQogIHJldHVybiBzdHJlYW0uc3RyZWFtX29wcy5pb2N0bChzdHJlYW0sIGNtZCwgYXJnKTsKIH0pLAogcmVhZEZpbGU6IChmdW5jdGlvbihwYXRoLCBvcHRzKSB7CiAgb3B0cyA9IG9wdHMgfHwge307CiAgb3B0cy5mbGFncyA9IG9wdHMuZmxhZ3MgfHwgInIiOwogIG9wdHMuZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8ICJiaW5hcnkiOwogIGlmIChvcHRzLmVuY29kaW5nICE9PSAidXRmOCIgJiYgb3B0cy5lbmNvZGluZyAhPT0gImJpbmFyeSIpIHsKICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVuY29kaW5nIHR5cGUgIicgKyBvcHRzLmVuY29kaW5nICsgJyInKTsKICB9CiAgdmFyIHJldDsKICB2YXIgc3RyZWFtID0gRlMub3BlbihwYXRoLCBvcHRzLmZsYWdzKTsKICB2YXIgc3RhdCA9IEZTLnN0YXQocGF0aCk7CiAgdmFyIGxlbmd0aCA9IHN0YXQuc2l6ZTsKICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTsKICBGUy5yZWFkKHN0cmVhbSwgYnVmLCAwLCBsZW5ndGgsIDApOwogIGlmIChvcHRzLmVuY29kaW5nID09PSAidXRmOCIpIHsKICAgcmV0ID0gVVRGOEFycmF5VG9TdHJpbmcoYnVmLCAwKTsKICB9IGVsc2UgaWYgKG9wdHMuZW5jb2RpbmcgPT09ICJiaW5hcnkiKSB7CiAgIHJldCA9IGJ1ZjsKICB9CiAgRlMuY2xvc2Uoc3RyZWFtKTsKICByZXR1cm4gcmV0OwogfSksCiB3cml0ZUZpbGU6IChmdW5jdGlvbihwYXRoLCBkYXRhLCBvcHRzKSB7CiAgb3B0cyA9IG9wdHMgfHwge307CiAgb3B0cy5mbGFncyA9IG9wdHMuZmxhZ3MgfHwgInciOwogIG9wdHMuZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8ICJ1dGY4IjsKICBpZiAob3B0cy5lbmNvZGluZyAhPT0gInV0ZjgiICYmIG9wdHMuZW5jb2RpbmcgIT09ICJiaW5hcnkiKSB7CiAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmNvZGluZyB0eXBlICInICsgb3B0cy5lbmNvZGluZyArICciJyk7CiAgfQogIHZhciBzdHJlYW0gPSBGUy5vcGVuKHBhdGgsIG9wdHMuZmxhZ3MsIG9wdHMubW9kZSk7CiAgaWYgKG9wdHMuZW5jb2RpbmcgPT09ICJ1dGY4IikgewogICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoQnl0ZXNVVEY4KGRhdGEpICsgMSk7CiAgIHZhciBhY3R1YWxOdW1CeXRlcyA9IHN0cmluZ1RvVVRGOEFycmF5KGRhdGEsIGJ1ZiwgMCwgYnVmLmxlbmd0aCk7CiAgIEZTLndyaXRlKHN0cmVhbSwgYnVmLCAwLCBhY3R1YWxOdW1CeXRlcywgMCwgb3B0cy5jYW5Pd24pOwogIH0gZWxzZSBpZiAob3B0cy5lbmNvZGluZyA9PT0gImJpbmFyeSIpIHsKICAgRlMud3JpdGUoc3RyZWFtLCBkYXRhLCAwLCBkYXRhLmxlbmd0aCwgMCwgb3B0cy5jYW5Pd24pOwogIH0KICBGUy5jbG9zZShzdHJlYW0pOwogfSksCiBjd2Q6IChmdW5jdGlvbigpIHsKICByZXR1cm4gRlMuY3VycmVudFBhdGg7CiB9KSwKIGNoZGlyOiAoZnVuY3Rpb24ocGF0aCkgewogIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsKICAgZm9sbG93OiB0cnVlCiAgfSk7CiAgaWYgKCFGUy5pc0Rpcihsb29rdXAubm9kZS5tb2RlKSkgewogICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9URElSKTsKICB9CiAgdmFyIGVyciA9IEZTLm5vZGVQZXJtaXNzaW9ucyhsb29rdXAubm9kZSwgIngiKTsKICBpZiAoZXJyKSB7CiAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7CiAgfQogIEZTLmN1cnJlbnRQYXRoID0gbG9va3VwLnBhdGg7CiB9KSwKIGNyZWF0ZURlZmF1bHREaXJlY3RvcmllczogKGZ1bmN0aW9uKCkgewogIEZTLm1rZGlyKCIvdG1wIik7CiAgRlMubWtkaXIoIi9ob21lIik7CiAgRlMubWtkaXIoIi9ob21lL3dlYl91c2VyIik7CiB9KSwKIGNyZWF0ZURlZmF1bHREZXZpY2VzOiAoZnVuY3Rpb24oKSB7CiAgRlMubWtkaXIoIi9kZXYiKTsKICBGUy5yZWdpc3RlckRldmljZShGUy5tYWtlZGV2KDEsIDMpLCB7CiAgIHJlYWQ6IChmdW5jdGlvbigpIHsKICAgIHJldHVybiAwOwogICB9KSwKICAgd3JpdGU6IChmdW5jdGlvbihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvcykgewogICAgcmV0dXJuIGxlbmd0aDsKICAgfSkKICB9KTsKICBGUy5ta2RldigiL2Rldi9udWxsIiwgRlMubWFrZWRldigxLCAzKSk7CiAgVFRZLnJlZ2lzdGVyKEZTLm1ha2VkZXYoNSwgMCksIFRUWS5kZWZhdWx0X3R0eV9vcHMpOwogIFRUWS5yZWdpc3RlcihGUy5tYWtlZGV2KDYsIDApLCBUVFkuZGVmYXVsdF90dHkxX29wcyk7CiAgRlMubWtkZXYoIi9kZXYvdHR5IiwgRlMubWFrZWRldig1LCAwKSk7CiAgRlMubWtkZXYoIi9kZXYvdHR5MSIsIEZTLm1ha2VkZXYoNiwgMCkpOwogIHZhciByYW5kb21fZGV2aWNlOwogIGlmICh0eXBlb2YgY3J5cHRvICE9PSAidW5kZWZpbmVkIikgewogICB2YXIgcmFuZG9tQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgIHJhbmRvbV9kZXZpY2UgPSAoZnVuY3Rpb24oKSB7CiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhbmRvbUJ1ZmZlcik7CiAgICByZXR1cm4gcmFuZG9tQnVmZmVyWzBdOwogICB9KTsKICB9IGVsc2UgaWYgKEVOVklST05NRU5UX0lTX05PREUpIHsKICAgcmFuZG9tX2RldmljZSA9IChmdW5jdGlvbigpIHsKICAgIHJldHVybiByZXF1aXJlKCJjcnlwdG8iKS5yYW5kb21CeXRlcygxKVswXTsKICAgfSk7CiAgfSBlbHNlIHsKICAgcmFuZG9tX2RldmljZSA9IChmdW5jdGlvbigpIHsKICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogMjU2IHwgMDsKICAgfSk7CiAgfQogIEZTLmNyZWF0ZURldmljZSgiL2RldiIsICJyYW5kb20iLCByYW5kb21fZGV2aWNlKTsKICBGUy5jcmVhdGVEZXZpY2UoIi9kZXYiLCAidXJhbmRvbSIsIHJhbmRvbV9kZXZpY2UpOwogIEZTLm1rZGlyKCIvZGV2L3NobSIpOwogIEZTLm1rZGlyKCIvZGV2L3NobS90bXAiKTsKIH0pLAogY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzOiAoZnVuY3Rpb24oKSB7CiAgRlMubWtkaXIoIi9wcm9jIik7CiAgRlMubWtkaXIoIi9wcm9jL3NlbGYiKTsKICBGUy5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpOwogIEZTLm1vdW50KHsKICAgbW91bnQ6IChmdW5jdGlvbigpIHsKICAgIHZhciBub2RlID0gRlMuY3JlYXRlTm9kZSgiL3Byb2Mvc2VsZiIsICJmZCIsIDE2Mzg0IHwgNTExLCA3Myk7CiAgICBub2RlLm5vZGVfb3BzID0gewogICAgIGxvb2t1cDogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkgewogICAgICB2YXIgZmQgPSArbmFtZTsKICAgICAgdmFyIHN0cmVhbSA9IEZTLmdldFN0cmVhbShmZCk7CiAgICAgIGlmICghc3RyZWFtKSB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQkFERik7CiAgICAgIHZhciByZXQgPSB7CiAgICAgICBwYXJlbnQ6IG51bGwsCiAgICAgICBtb3VudDogewogICAgICAgIG1vdW50cG9pbnQ6ICJmYWtlIgogICAgICAgfSwKICAgICAgIG5vZGVfb3BzOiB7CiAgICAgICAgcmVhZGxpbms6IChmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHN0cmVhbS5wYXRoOwogICAgICAgIH0pCiAgICAgICB9CiAgICAgIH07CiAgICAgIHJldC5wYXJlbnQgPSByZXQ7CiAgICAgIHJldHVybiByZXQ7CiAgICAgfSkKICAgIH07CiAgICByZXR1cm4gbm9kZTsKICAgfSkKICB9LCB7fSwgIi9wcm9jL3NlbGYvZmQiKTsKIH0pLAogY3JlYXRlU3RhbmRhcmRTdHJlYW1zOiAoZnVuY3Rpb24oKSB7CiAgaWYgKE1vZHVsZVsic3RkaW4iXSkgewogICBGUy5jcmVhdGVEZXZpY2UoIi9kZXYiLCAic3RkaW4iLCBNb2R1bGVbInN0ZGluIl0pOwogIH0gZWxzZSB7CiAgIEZTLnN5bWxpbmsoIi9kZXYvdHR5IiwgIi9kZXYvc3RkaW4iKTsKICB9CiAgaWYgKE1vZHVsZVsic3Rkb3V0Il0pIHsKICAgRlMuY3JlYXRlRGV2aWNlKCIvZGV2IiwgInN0ZG91dCIsIG51bGwsIE1vZHVsZVsic3Rkb3V0Il0pOwogIH0gZWxzZSB7CiAgIEZTLnN5bWxpbmsoIi9kZXYvdHR5IiwgIi9kZXYvc3Rkb3V0Iik7CiAgfQogIGlmIChNb2R1bGVbInN0ZGVyciJdKSB7CiAgIEZTLmNyZWF0ZURldmljZSgiL2RldiIsICJzdGRlcnIiLCBudWxsLCBNb2R1bGVbInN0ZGVyciJdKTsKICB9IGVsc2UgewogICBGUy5zeW1saW5rKCIvZGV2L3R0eTEiLCAiL2Rldi9zdGRlcnIiKTsKICB9CiAgdmFyIHN0ZGluID0gRlMub3BlbigiL2Rldi9zdGRpbiIsICJyIik7CiAgYXNzZXJ0KHN0ZGluLmZkID09PSAwLCAiaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGluICgiICsgc3RkaW4uZmQgKyAiKSIpOwogIHZhciBzdGRvdXQgPSBGUy5vcGVuKCIvZGV2L3N0ZG91dCIsICJ3Iik7CiAgYXNzZXJ0KHN0ZG91dC5mZCA9PT0gMSwgImludmFsaWQgaGFuZGxlIGZvciBzdGRvdXQgKCIgKyBzdGRvdXQuZmQgKyAiKSIpOwogIHZhciBzdGRlcnIgPSBGUy5vcGVuKCIvZGV2L3N0ZGVyciIsICJ3Iik7CiAgYXNzZXJ0KHN0ZGVyci5mZCA9PT0gMiwgImludmFsaWQgaGFuZGxlIGZvciBzdGRlcnIgKCIgKyBzdGRlcnIuZmQgKyAiKSIpOwogfSksCiBlbnN1cmVFcnJub0Vycm9yOiAoZnVuY3Rpb24oKSB7CiAgaWYgKEZTLkVycm5vRXJyb3IpIHJldHVybjsKICBGUy5FcnJub0Vycm9yID0gZnVuY3Rpb24gRXJybm9FcnJvcihlcnJubywgbm9kZSkgewogICB0aGlzLm5vZGUgPSBub2RlOwogICB0aGlzLnNldEVycm5vID0gKGZ1bmN0aW9uKGVycm5vKSB7CiAgICB0aGlzLmVycm5vID0gZXJybm87CiAgICBmb3IgKHZhciBrZXkgaW4gRVJSTk9fQ09ERVMpIHsKICAgICBpZiAoRVJSTk9fQ09ERVNba2V5XSA9PT0gZXJybm8pIHsKICAgICAgdGhpcy5jb2RlID0ga2V5OwogICAgICBicmVhazsKICAgICB9CiAgICB9CiAgIH0pOwogICB0aGlzLnNldEVycm5vKGVycm5vKTsKICAgdGhpcy5tZXNzYWdlID0gRVJSTk9fTUVTU0FHRVNbZXJybm9dOwogICBpZiAodGhpcy5zdGFjaykgdGhpcy5zdGFjayA9IGRlbWFuZ2xlQWxsKHRoaXMuc3RhY2spOwogIH07CiAgRlMuRXJybm9FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7CiAgRlMuRXJybm9FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGUy5FcnJub0Vycm9yOwogIFsgRVJSTk9fQ09ERVMuRU5PRU5UIF0uZm9yRWFjaCgoZnVuY3Rpb24oY29kZSkgewogICBGUy5nZW5lcmljRXJyb3JzW2NvZGVdID0gbmV3IEZTLkVycm5vRXJyb3IoY29kZSk7CiAgIEZTLmdlbmVyaWNFcnJvcnNbY29kZV0uc3RhY2sgPSAiPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiI7CiAgfSkpOwogfSksCiBzdGF0aWNJbml0OiAoZnVuY3Rpb24oKSB7CiAgRlMuZW5zdXJlRXJybm9FcnJvcigpOwogIEZTLm5hbWVUYWJsZSA9IG5ldyBBcnJheSg0MDk2KTsKICBGUy5tb3VudChNRU1GUywge30sICIvIik7CiAgRlMuY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCk7CiAgRlMuY3JlYXRlRGVmYXVsdERldmljZXMoKTsKICBGUy5jcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKTsKICBGUy5maWxlc3lzdGVtcyA9IHsKICAgIk1FTUZTIjogTUVNRlMsCiAgICJJREJGUyI6IElEQkZTLAogICAiTk9ERUZTIjogTk9ERUZTLAogICAiV09SS0VSRlMiOiBXT1JLRVJGUwogIH07CiB9KSwKIGluaXQ6IChmdW5jdGlvbihpbnB1dCwgb3V0cHV0LCBlcnJvcikgewogIGFzc2VydCghRlMuaW5pdC5pbml0aWFsaXplZCwgIkZTLmluaXQgd2FzIHByZXZpb3VzbHkgY2FsbGVkLiBJZiB5b3Ugd2FudCB0byBpbml0aWFsaXplIGxhdGVyIHdpdGggY3VzdG9tIHBhcmFtZXRlcnMsIHJlbW92ZSBhbnkgZWFybGllciBjYWxscyAobm90ZSB0aGF0IG9uZSBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSkiKTsKICBGUy5pbml0LmluaXRpYWxpemVkID0gdHJ1ZTsKICBGUy5lbnN1cmVFcnJub0Vycm9yKCk7CiAgTW9kdWxlWyJzdGRpbiJdID0gaW5wdXQgfHwgTW9kdWxlWyJzdGRpbiJdOwogIE1vZHVsZVsic3Rkb3V0Il0gPSBvdXRwdXQgfHwgTW9kdWxlWyJzdGRvdXQiXTsKICBNb2R1bGVbInN0ZGVyciJdID0gZXJyb3IgfHwgTW9kdWxlWyJzdGRlcnIiXTsKICBGUy5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKTsKIH0pLAogcXVpdDogKGZ1bmN0aW9uKCkgewogIEZTLmluaXQuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICB2YXIgZmZsdXNoID0gTW9kdWxlWyJfZmZsdXNoIl07CiAgaWYgKGZmbHVzaCkgZmZsdXNoKDApOwogIGZvciAodmFyIGkgPSAwOyBpIDwgRlMuc3RyZWFtcy5sZW5ndGg7IGkrKykgewogICB2YXIgc3RyZWFtID0gRlMuc3RyZWFtc1tpXTsKICAgaWYgKCFzdHJlYW0pIHsKICAgIGNvbnRpbnVlOwogICB9CiAgIEZTLmNsb3NlKHN0cmVhbSk7CiAgfQogfSksCiBnZXRNb2RlOiAoZnVuY3Rpb24oY2FuUmVhZCwgY2FuV3JpdGUpIHsKICB2YXIgbW9kZSA9IDA7CiAgaWYgKGNhblJlYWQpIG1vZGUgfD0gMjkyIHwgNzM7CiAgaWYgKGNhbldyaXRlKSBtb2RlIHw9IDE0NjsKICByZXR1cm4gbW9kZTsKIH0pLAogam9pblBhdGg6IChmdW5jdGlvbihwYXJ0cywgZm9yY2VSZWxhdGl2ZSkgewogIHZhciBwYXRoID0gUEFUSC5qb2luLmFwcGx5KG51bGwsIHBhcnRzKTsKICBpZiAoZm9yY2VSZWxhdGl2ZSAmJiBwYXRoWzBdID09ICIvIikgcGF0aCA9IHBhdGguc3Vic3RyKDEpOwogIHJldHVybiBwYXRoOwogfSksCiBhYnNvbHV0ZVBhdGg6IChmdW5jdGlvbihyZWxhdGl2ZSwgYmFzZSkgewogIHJldHVybiBQQVRILnJlc29sdmUoYmFzZSwgcmVsYXRpdmUpOwogfSksCiBzdGFuZGFyZGl6ZVBhdGg6IChmdW5jdGlvbihwYXRoKSB7CiAgcmV0dXJuIFBBVEgubm9ybWFsaXplKHBhdGgpOwogfSksCiBmaW5kT2JqZWN0OiAoZnVuY3Rpb24ocGF0aCwgZG9udFJlc29sdmVMYXN0TGluaykgewogIHZhciByZXQgPSBGUy5hbmFseXplUGF0aChwYXRoLCBkb250UmVzb2x2ZUxhc3RMaW5rKTsKICBpZiAocmV0LmV4aXN0cykgewogICByZXR1cm4gcmV0Lm9iamVjdDsKICB9IGVsc2UgewogICBfX19zZXRFcnJObyhyZXQuZXJyb3IpOwogICByZXR1cm4gbnVsbDsKICB9CiB9KSwKIGFuYWx5emVQYXRoOiAoZnVuY3Rpb24ocGF0aCwgZG9udFJlc29sdmVMYXN0TGluaykgewogIHRyeSB7CiAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsKICAgIGZvbGxvdzogIWRvbnRSZXNvbHZlTGFzdExpbmsKICAgfSk7CiAgIHBhdGggPSBsb29rdXAucGF0aDsKICB9IGNhdGNoIChlKSB7fQogIHZhciByZXQgPSB7CiAgIGlzUm9vdDogZmFsc2UsCiAgIGV4aXN0czogZmFsc2UsCiAgIGVycm9yOiAwLAogICBuYW1lOiBudWxsLAogICBwYXRoOiBudWxsLAogICBvYmplY3Q6IG51bGwsCiAgIHBhcmVudEV4aXN0czogZmFsc2UsCiAgIHBhcmVudFBhdGg6IG51bGwsCiAgIHBhcmVudE9iamVjdDogbnVsbAogIH07CiAgdHJ5IHsKICAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgewogICAgcGFyZW50OiB0cnVlCiAgIH0pOwogICByZXQucGFyZW50RXhpc3RzID0gdHJ1ZTsKICAgcmV0LnBhcmVudFBhdGggPSBsb29rdXAucGF0aDsKICAgcmV0LnBhcmVudE9iamVjdCA9IGxvb2t1cC5ub2RlOwogICByZXQubmFtZSA9IFBBVEguYmFzZW5hbWUocGF0aCk7CiAgIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgewogICAgZm9sbG93OiAhZG9udFJlc29sdmVMYXN0TGluawogICB9KTsKICAgcmV0LmV4aXN0cyA9IHRydWU7CiAgIHJldC5wYXRoID0gbG9va3VwLnBhdGg7CiAgIHJldC5vYmplY3QgPSBsb29rdXAubm9kZTsKICAgcmV0Lm5hbWUgPSBsb29rdXAubm9kZS5uYW1lOwogICByZXQuaXNSb290ID0gbG9va3VwLnBhdGggPT09ICIvIjsKICB9IGNhdGNoIChlKSB7CiAgIHJldC5lcnJvciA9IGUuZXJybm87CiAgfQogIHJldHVybiByZXQ7CiB9KSwKIGNyZWF0ZUZvbGRlcjogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgY2FuUmVhZCwgY2FuV3JpdGUpIHsKICB2YXIgcGF0aCA9IFBBVEguam9pbjIodHlwZW9mIHBhcmVudCA9PT0gInN0cmluZyIgPyBwYXJlbnQgOiBGUy5nZXRQYXRoKHBhcmVudCksIG5hbWUpOwogIHZhciBtb2RlID0gRlMuZ2V0TW9kZShjYW5SZWFkLCBjYW5Xcml0ZSk7CiAgcmV0dXJuIEZTLm1rZGlyKHBhdGgsIG1vZGUpOwogfSksCiBjcmVhdGVQYXRoOiAoZnVuY3Rpb24ocGFyZW50LCBwYXRoLCBjYW5SZWFkLCBjYW5Xcml0ZSkgewogIHBhcmVudCA9IHR5cGVvZiBwYXJlbnQgPT09ICJzdHJpbmciID8gcGFyZW50IDogRlMuZ2V0UGF0aChwYXJlbnQpOwogIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoIi8iKS5yZXZlcnNlKCk7CiAgd2hpbGUgKHBhcnRzLmxlbmd0aCkgewogICB2YXIgcGFydCA9IHBhcnRzLnBvcCgpOwogICBpZiAoIXBhcnQpIGNvbnRpbnVlOwogICB2YXIgY3VycmVudCA9IFBBVEguam9pbjIocGFyZW50LCBwYXJ0KTsKICAgdHJ5IHsKICAgIEZTLm1rZGlyKGN1cnJlbnQpOwogICB9IGNhdGNoIChlKSB7fQogICBwYXJlbnQgPSBjdXJyZW50OwogIH0KICByZXR1cm4gY3VycmVudDsKIH0pLAogY3JlYXRlRmlsZTogKGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgcHJvcGVydGllcywgY2FuUmVhZCwgY2FuV3JpdGUpIHsKICB2YXIgcGF0aCA9IFBBVEguam9pbjIodHlwZW9mIHBhcmVudCA9PT0gInN0cmluZyIgPyBwYXJlbnQgOiBGUy5nZXRQYXRoKHBhcmVudCksIG5hbWUpOwogIHZhciBtb2RlID0gRlMuZ2V0TW9kZShjYW5SZWFkLCBjYW5Xcml0ZSk7CiAgcmV0dXJuIEZTLmNyZWF0ZShwYXRoLCBtb2RlKTsKIH0pLAogY3JlYXRlRGF0YUZpbGU6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUsIGRhdGEsIGNhblJlYWQsIGNhbldyaXRlLCBjYW5Pd24pIHsKICB2YXIgcGF0aCA9IG5hbWUgPyBQQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQgPT09ICJzdHJpbmciID8gcGFyZW50IDogRlMuZ2V0UGF0aChwYXJlbnQpLCBuYW1lKSA6IHBhcmVudDsKICB2YXIgbW9kZSA9IEZTLmdldE1vZGUoY2FuUmVhZCwgY2FuV3JpdGUpOwogIHZhciBub2RlID0gRlMuY3JlYXRlKHBhdGgsIG1vZGUpOwogIGlmIChkYXRhKSB7CiAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgIHZhciBhcnIgPSBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyArK2kpIGFycltpXSA9IGRhdGEuY2hhckNvZGVBdChpKTsKICAgIGRhdGEgPSBhcnI7CiAgIH0KICAgRlMuY2htb2Qobm9kZSwgbW9kZSB8IDE0Nik7CiAgIHZhciBzdHJlYW0gPSBGUy5vcGVuKG5vZGUsICJ3Iik7CiAgIEZTLndyaXRlKHN0cmVhbSwgZGF0YSwgMCwgZGF0YS5sZW5ndGgsIDAsIGNhbk93bik7CiAgIEZTLmNsb3NlKHN0cmVhbSk7CiAgIEZTLmNobW9kKG5vZGUsIG1vZGUpOwogIH0KICByZXR1cm4gbm9kZTsKIH0pLAogY3JlYXRlRGV2aWNlOiAoZnVuY3Rpb24ocGFyZW50LCBuYW1lLCBpbnB1dCwgb3V0cHV0KSB7CiAgdmFyIHBhdGggPSBQQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQgPT09ICJzdHJpbmciID8gcGFyZW50IDogRlMuZ2V0UGF0aChwYXJlbnQpLCBuYW1lKTsKICB2YXIgbW9kZSA9IEZTLmdldE1vZGUoISFpbnB1dCwgISFvdXRwdXQpOwogIGlmICghRlMuY3JlYXRlRGV2aWNlLm1ham9yKSBGUy5jcmVhdGVEZXZpY2UubWFqb3IgPSA2NDsKICB2YXIgZGV2ID0gRlMubWFrZWRldihGUy5jcmVhdGVEZXZpY2UubWFqb3IrKywgMCk7CiAgRlMucmVnaXN0ZXJEZXZpY2UoZGV2LCB7CiAgIG9wZW46IChmdW5jdGlvbihzdHJlYW0pIHsKICAgIHN0cmVhbS5zZWVrYWJsZSA9IGZhbHNlOwogICB9KSwKICAgY2xvc2U6IChmdW5jdGlvbihzdHJlYW0pIHsKICAgIGlmIChvdXRwdXQgJiYgb3V0cHV0LmJ1ZmZlciAmJiBvdXRwdXQuYnVmZmVyLmxlbmd0aCkgewogICAgIG91dHB1dCgxMCk7CiAgICB9CiAgIH0pLAogICByZWFkOiAoZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3MpIHsKICAgIHZhciBieXRlc1JlYWQgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgIHZhciByZXN1bHQ7CiAgICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gaW5wdXQoKTsKICAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyk7CiAgICAgfQogICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBieXRlc1JlYWQgPT09IDApIHsKICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFHQUlOKTsKICAgICB9CiAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkgYnJlYWs7CiAgICAgYnl0ZXNSZWFkKys7CiAgICAgYnVmZmVyW29mZnNldCArIGldID0gcmVzdWx0OwogICAgfQogICAgaWYgKGJ5dGVzUmVhZCkgewogICAgIHN0cmVhbS5ub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICB9CiAgICByZXR1cm4gYnl0ZXNSZWFkOwogICB9KSwKICAgd3JpdGU6IChmdW5jdGlvbihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvcykgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgIHRyeSB7CiAgICAgIG91dHB1dChidWZmZXJbb2Zmc2V0ICsgaV0pOwogICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKTsKICAgICB9CiAgICB9CiAgICBpZiAobGVuZ3RoKSB7CiAgICAgc3RyZWFtLm5vZGUudGltZXN0YW1wID0gRGF0ZS5ub3coKTsKICAgIH0KICAgIHJldHVybiBpOwogICB9KQogIH0pOwogIHJldHVybiBGUy5ta2RldihwYXRoLCBtb2RlLCBkZXYpOwogfSksCiBjcmVhdGVMaW5rOiAoZnVuY3Rpb24ocGFyZW50LCBuYW1lLCB0YXJnZXQsIGNhblJlYWQsIGNhbldyaXRlKSB7CiAgdmFyIHBhdGggPSBQQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQgPT09ICJzdHJpbmciID8gcGFyZW50IDogRlMuZ2V0UGF0aChwYXJlbnQpLCBuYW1lKTsKICByZXR1cm4gRlMuc3ltbGluayh0YXJnZXQsIHBhdGgpOwogfSksCiBmb3JjZUxvYWRGaWxlOiAoZnVuY3Rpb24ob2JqKSB7CiAgaWYgKG9iai5pc0RldmljZSB8fCBvYmouaXNGb2xkZXIgfHwgb2JqLmxpbmsgfHwgb2JqLmNvbnRlbnRzKSByZXR1cm4gdHJ1ZTsKICB2YXIgc3VjY2VzcyA9IHRydWU7CiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKICAgdGhyb3cgbmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTsKICB9IGVsc2UgaWYgKE1vZHVsZVsicmVhZCJdKSB7CiAgIHRyeSB7CiAgICBvYmouY29udGVudHMgPSBpbnRBcnJheUZyb21TdHJpbmcoTW9kdWxlWyJyZWFkIl0ob2JqLnVybCksIHRydWUpOwogICAgb2JqLnVzZWRCeXRlcyA9IG9iai5jb250ZW50cy5sZW5ndGg7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgfQogIH0gZWxzZSB7CiAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgd2l0aG91dCByZWFkKCkgb3IgWE1MSHR0cFJlcXVlc3QuIik7CiAgfQogIGlmICghc3VjY2VzcykgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUlPKTsKICByZXR1cm4gc3VjY2VzczsKIH0pLAogY3JlYXRlTGF6eUZpbGU6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUsIHVybCwgY2FuUmVhZCwgY2FuV3JpdGUpIHsKICBmdW5jdGlvbiBMYXp5VWludDhBcnJheSgpIHsKICAgdGhpcy5sZW5ndGhLbm93biA9IGZhbHNlOwogICB0aGlzLmNodW5rcyA9IFtdOwogIH0KICBMYXp5VWludDhBcnJheS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gTGF6eVVpbnQ4QXJyYXlfZ2V0KGlkeCkgewogICBpZiAoaWR4ID4gdGhpcy5sZW5ndGggLSAxIHx8IGlkeCA8IDApIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgIH0KICAgdmFyIGNodW5rT2Zmc2V0ID0gaWR4ICUgdGhpcy5jaHVua1NpemU7CiAgIHZhciBjaHVua051bSA9IGlkeCAvIHRoaXMuY2h1bmtTaXplIHwgMDsKICAgcmV0dXJuIHRoaXMuZ2V0dGVyKGNodW5rTnVtKVtjaHVua09mZnNldF07CiAgfTsKICBMYXp5VWludDhBcnJheS5wcm90b3R5cGUuc2V0RGF0YUdldHRlciA9IGZ1bmN0aW9uIExhenlVaW50OEFycmF5X3NldERhdGFHZXR0ZXIoZ2V0dGVyKSB7CiAgIHRoaXMuZ2V0dGVyID0gZ2V0dGVyOwogIH07CiAgTGF6eVVpbnQ4QXJyYXkucHJvdG90eXBlLmNhY2hlTGVuZ3RoID0gZnVuY3Rpb24gTGF6eVVpbnQ4QXJyYXlfY2FjaGVMZW5ndGgoKSB7CiAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CiAgIHhoci5vcGVuKCJIRUFEIiwgdXJsLCBmYWxzZSk7CiAgIHhoci5zZW5kKG51bGwpOwogICBpZiAoISh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwIHx8IHhoci5zdGF0dXMgPT09IDMwNCkpIHRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiICsgdXJsICsgIi4gU3RhdHVzOiAiICsgeGhyLnN0YXR1cyk7CiAgIHZhciBkYXRhbGVuZ3RoID0gTnVtYmVyKHhoci5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSk7CiAgIHZhciBoZWFkZXI7CiAgIHZhciBoYXNCeXRlU2VydmluZyA9IChoZWFkZXIgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkgJiYgaGVhZGVyID09PSAiYnl0ZXMiOwogICB2YXIgY2h1bmtTaXplID0gMTAyNCAqIDEwMjQ7CiAgIGlmICghaGFzQnl0ZVNlcnZpbmcpIGNodW5rU2l6ZSA9IGRhdGFsZW5ndGg7CiAgIHZhciBkb1hIUiA9IChmdW5jdGlvbihmcm9tLCB0bykgewogICAgaWYgKGZyb20gPiB0bykgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiICsgZnJvbSArICIsICIgKyB0byArICIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCEiKTsKICAgIGlmICh0byA+IGRhdGFsZW5ndGggLSAxKSB0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIiArIGRhdGFsZW5ndGggKyAiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTsKICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CiAgICB4aHIub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgICBpZiAoZGF0YWxlbmd0aCAhPT0gY2h1bmtTaXplKSB4aHIuc2V0UmVxdWVzdEhlYWRlcigiUmFuZ2UiLCAiYnl0ZXM9IiArIGZyb20gKyAiLSIgKyB0byk7CiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkgIT0gInVuZGVmaW5lZCIpIHhoci5yZXNwb25zZVR5cGUgPSAiYXJyYXlidWZmZXIiOwogICAgaWYgKHhoci5vdmVycmlkZU1pbWVUeXBlKSB7CiAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQiKTsKICAgIH0KICAgIHhoci5zZW5kKG51bGwpOwogICAgaWYgKCEoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCB8fCB4aHIuc3RhdHVzID09PSAzMDQpKSB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIiArIHVybCArICIuIFN0YXR1czogIiArIHhoci5zdGF0dXMpOwogICAgaWYgKHhoci5yZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZSB8fCBbXSk7CiAgICB9IGVsc2UgewogICAgIHJldHVybiBpbnRBcnJheUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCB8fCAiIiwgdHJ1ZSk7CiAgICB9CiAgIH0pOwogICB2YXIgbGF6eUFycmF5ID0gdGhpczsKICAgbGF6eUFycmF5LnNldERhdGFHZXR0ZXIoKGZ1bmN0aW9uKGNodW5rTnVtKSB7CiAgICB2YXIgc3RhcnQgPSBjaHVua051bSAqIGNodW5rU2l6ZTsKICAgIHZhciBlbmQgPSAoY2h1bmtOdW0gKyAxKSAqIGNodW5rU2l6ZSAtIDE7CiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIGRhdGFsZW5ndGggLSAxKTsKICAgIGlmICh0eXBlb2YgbGF6eUFycmF5LmNodW5rc1tjaHVua051bV0gPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgbGF6eUFycmF5LmNodW5rc1tjaHVua051bV0gPSBkb1hIUihzdGFydCwgZW5kKTsKICAgIH0KICAgIGlmICh0eXBlb2YgbGF6eUFycmF5LmNodW5rc1tjaHVua051bV0gPT09ICJ1bmRlZmluZWQiKSB0aHJvdyBuZXcgRXJyb3IoImRvWEhSIGZhaWxlZCEiKTsKICAgIHJldHVybiBsYXp5QXJyYXkuY2h1bmtzW2NodW5rTnVtXTsKICAgfSkpOwogICB0aGlzLl9sZW5ndGggPSBkYXRhbGVuZ3RoOwogICB0aGlzLl9jaHVua1NpemUgPSBjaHVua1NpemU7CiAgIHRoaXMubGVuZ3RoS25vd24gPSB0cnVlOwogIH07CiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKICAgaWYgKCFFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHRocm93ICJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjsKICAgdmFyIGxhenlBcnJheSA9IG5ldyBMYXp5VWludDhBcnJheTsKICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlBcnJheSwgImxlbmd0aCIsIHsKICAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgIGlmICghdGhpcy5sZW5ndGhLbm93bikgewogICAgICB0aGlzLmNhY2hlTGVuZ3RoKCk7CiAgICAgfQogICAgIHJldHVybiB0aGlzLl9sZW5ndGg7CiAgICB9KQogICB9KTsKICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlBcnJheSwgImNodW5rU2l6ZSIsIHsKICAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgIGlmICghdGhpcy5sZW5ndGhLbm93bikgewogICAgICB0aGlzLmNhY2hlTGVuZ3RoKCk7CiAgICAgfQogICAgIHJldHVybiB0aGlzLl9jaHVua1NpemU7CiAgICB9KQogICB9KTsKICAgdmFyIHByb3BlcnRpZXMgPSB7CiAgICBpc0RldmljZTogZmFsc2UsCiAgICBjb250ZW50czogbGF6eUFycmF5CiAgIH07CiAgfSBlbHNlIHsKICAgdmFyIHByb3BlcnRpZXMgPSB7CiAgICBpc0RldmljZTogZmFsc2UsCiAgICB1cmw6IHVybAogICB9OwogIH0KICB2YXIgbm9kZSA9IEZTLmNyZWF0ZUZpbGUocGFyZW50LCBuYW1lLCBwcm9wZXJ0aWVzLCBjYW5SZWFkLCBjYW5Xcml0ZSk7CiAgaWYgKHByb3BlcnRpZXMuY29udGVudHMpIHsKICAgbm9kZS5jb250ZW50cyA9IHByb3BlcnRpZXMuY29udGVudHM7CiAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLnVybCkgewogICBub2RlLmNvbnRlbnRzID0gbnVsbDsKICAgbm9kZS51cmwgPSBwcm9wZXJ0aWVzLnVybDsKICB9CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsICJ1c2VkQnl0ZXMiLCB7CiAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RoOwogICB9KQogIH0pOwogIHZhciBzdHJlYW1fb3BzID0ge307CiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhub2RlLnN0cmVhbV9vcHMpOwogIGtleXMuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KSB7CiAgIHZhciBmbiA9IG5vZGUuc3RyZWFtX29wc1trZXldOwogICBzdHJlYW1fb3BzW2tleV0gPSBmdW5jdGlvbiBmb3JjZUxvYWRMYXp5RmlsZSgpIHsKICAgIGlmICghRlMuZm9yY2VMb2FkRmlsZShub2RlKSkgewogICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyk7CiAgICB9CiAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgfTsKICB9KSk7CiAgc3RyZWFtX29wcy5yZWFkID0gZnVuY3Rpb24gc3RyZWFtX29wc19yZWFkKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHsKICAgaWYgKCFGUy5mb3JjZUxvYWRGaWxlKG5vZGUpKSB7CiAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU8pOwogICB9CiAgIHZhciBjb250ZW50cyA9IHN0cmVhbS5ub2RlLmNvbnRlbnRzOwogICBpZiAocG9zaXRpb24gPj0gY29udGVudHMubGVuZ3RoKSByZXR1cm4gMDsKICAgdmFyIHNpemUgPSBNYXRoLm1pbihjb250ZW50cy5sZW5ndGggLSBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgYXNzZXJ0KHNpemUgPj0gMCk7CiAgIGlmIChjb250ZW50cy5zbGljZSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBjb250ZW50c1twb3NpdGlvbiArIGldOwogICAgfQogICB9IGVsc2UgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBjb250ZW50cy5nZXQocG9zaXRpb24gKyBpKTsKICAgIH0KICAgfQogICByZXR1cm4gc2l6ZTsKICB9OwogIG5vZGUuc3RyZWFtX29wcyA9IHN0cmVhbV9vcHM7CiAgcmV0dXJuIG5vZGU7CiB9KSwKIGNyZWF0ZVByZWxvYWRlZEZpbGU6IChmdW5jdGlvbihwYXJlbnQsIG5hbWUsIHVybCwgY2FuUmVhZCwgY2FuV3JpdGUsIG9ubG9hZCwgb25lcnJvciwgZG9udENyZWF0ZUZpbGUsIGNhbk93biwgcHJlRmluaXNoKSB7CiAgQnJvd3Nlci5pbml0KCk7CiAgdmFyIGZ1bGxuYW1lID0gbmFtZSA/IFBBVEgucmVzb2x2ZShQQVRILmpvaW4yKHBhcmVudCwgbmFtZSkpIDogcGFyZW50OwogIHZhciBkZXAgPSBnZXRVbmlxdWVSdW5EZXBlbmRlbmN5KCJjcCAiICsgZnVsbG5hbWUpOwogIGZ1bmN0aW9uIHByb2Nlc3NEYXRhKGJ5dGVBcnJheSkgewogICBmdW5jdGlvbiBmaW5pc2goYnl0ZUFycmF5KSB7CiAgICBpZiAocHJlRmluaXNoKSBwcmVGaW5pc2goKTsKICAgIGlmICghZG9udENyZWF0ZUZpbGUpIHsKICAgICBGUy5jcmVhdGVEYXRhRmlsZShwYXJlbnQsIG5hbWUsIGJ5dGVBcnJheSwgY2FuUmVhZCwgY2FuV3JpdGUsIGNhbk93bik7CiAgICB9CiAgICBpZiAob25sb2FkKSBvbmxvYWQoKTsKICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koZGVwKTsKICAgfQogICB2YXIgaGFuZGxlZCA9IGZhbHNlOwogICBNb2R1bGVbInByZWxvYWRQbHVnaW5zIl0uZm9yRWFjaCgoZnVuY3Rpb24ocGx1Z2luKSB7CiAgICBpZiAoaGFuZGxlZCkgcmV0dXJuOwogICAgaWYgKHBsdWdpblsiY2FuSGFuZGxlIl0oZnVsbG5hbWUpKSB7CiAgICAgcGx1Z2luWyJoYW5kbGUiXShieXRlQXJyYXksIGZ1bGxuYW1lLCBmaW5pc2gsIChmdW5jdGlvbigpIHsKICAgICAgaWYgKG9uZXJyb3IpIG9uZXJyb3IoKTsKICAgICAgcmVtb3ZlUnVuRGVwZW5kZW5jeShkZXApOwogICAgIH0pKTsKICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgIH0KICAgfSkpOwogICBpZiAoIWhhbmRsZWQpIGZpbmlzaChieXRlQXJyYXkpOwogIH0KICBhZGRSdW5EZXBlbmRlbmN5KGRlcCk7CiAgaWYgKHR5cGVvZiB1cmwgPT0gInN0cmluZyIpIHsKICAgQnJvd3Nlci5hc3luY0xvYWQodXJsLCAoZnVuY3Rpb24oYnl0ZUFycmF5KSB7CiAgICBwcm9jZXNzRGF0YShieXRlQXJyYXkpOwogICB9KSwgb25lcnJvcik7CiAgfSBlbHNlIHsKICAgcHJvY2Vzc0RhdGEodXJsKTsKICB9CiB9KSwKIGluZGV4ZWREQjogKGZ1bmN0aW9uKCkgewogIHJldHVybiB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubXNJbmRleGVkREI7CiB9KSwKIERCX05BTUU6IChmdW5jdGlvbigpIHsKICByZXR1cm4gIkVNX0ZTXyIgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiB9KSwKIERCX1ZFUlNJT046IDIwLAogREJfU1RPUkVfTkFNRTogIkZJTEVfREFUQSIsCiBzYXZlRmlsZXNUb0RCOiAoZnVuY3Rpb24ocGF0aHMsIG9ubG9hZCwgb25lcnJvcikgewogIG9ubG9hZCA9IG9ubG9hZCB8fCAoZnVuY3Rpb24oKSB7fSk7CiAgb25lcnJvciA9IG9uZXJyb3IgfHwgKGZ1bmN0aW9uKCkge30pOwogIHZhciBpbmRleGVkREIgPSBGUy5pbmRleGVkREIoKTsKICB0cnkgewogICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihGUy5EQl9OQU1FKCksIEZTLkRCX1ZFUlNJT04pOwogIH0gY2F0Y2ggKGUpIHsKICAgcmV0dXJuIG9uZXJyb3IoZSk7CiAgfQogIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIG9wZW5SZXF1ZXN0X29udXBncmFkZW5lZWRlZCgpIHsKICAgY29uc29sZS5sb2coImNyZWF0aW5nIGRiIik7CiAgIHZhciBkYiA9IG9wZW5SZXF1ZXN0LnJlc3VsdDsKICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoRlMuREJfU1RPUkVfTkFNRSk7CiAgfTsKICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiBvcGVuUmVxdWVzdF9vbnN1Y2Nlc3MoKSB7CiAgIHZhciBkYiA9IG9wZW5SZXF1ZXN0LnJlc3VsdDsKICAgdmFyIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWyBGUy5EQl9TVE9SRV9OQU1FIF0sICJyZWFkd3JpdGUiKTsKICAgdmFyIGZpbGVzID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoRlMuREJfU1RPUkVfTkFNRSk7CiAgIHZhciBvayA9IDAsIGZhaWwgPSAwLCB0b3RhbCA9IHBhdGhzLmxlbmd0aDsKICAgZnVuY3Rpb24gZmluaXNoKCkgewogICAgaWYgKGZhaWwgPT0gMCkgb25sb2FkKCk7IGVsc2Ugb25lcnJvcigpOwogICB9CiAgIHBhdGhzLmZvckVhY2goKGZ1bmN0aW9uKHBhdGgpIHsKICAgIHZhciBwdXRSZXF1ZXN0ID0gZmlsZXMucHV0KEZTLmFuYWx5emVQYXRoKHBhdGgpLm9iamVjdC5jb250ZW50cywgcGF0aCk7CiAgICBwdXRSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIHB1dFJlcXVlc3Rfb25zdWNjZXNzKCkgewogICAgIG9rKys7CiAgICAgaWYgKG9rICsgZmFpbCA9PSB0b3RhbCkgZmluaXNoKCk7CiAgICB9OwogICAgcHV0UmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gcHV0UmVxdWVzdF9vbmVycm9yKCkgewogICAgIGZhaWwrKzsKICAgICBpZiAob2sgKyBmYWlsID09IHRvdGFsKSBmaW5pc2goKTsKICAgIH07CiAgIH0pKTsKICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IG9uZXJyb3I7CiAgfTsKICBvcGVuUmVxdWVzdC5vbmVycm9yID0gb25lcnJvcjsKIH0pLAogbG9hZEZpbGVzRnJvbURCOiAoZnVuY3Rpb24ocGF0aHMsIG9ubG9hZCwgb25lcnJvcikgewogIG9ubG9hZCA9IG9ubG9hZCB8fCAoZnVuY3Rpb24oKSB7fSk7CiAgb25lcnJvciA9IG9uZXJyb3IgfHwgKGZ1bmN0aW9uKCkge30pOwogIHZhciBpbmRleGVkREIgPSBGUy5pbmRleGVkREIoKTsKICB0cnkgewogICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihGUy5EQl9OQU1FKCksIEZTLkRCX1ZFUlNJT04pOwogIH0gY2F0Y2ggKGUpIHsKICAgcmV0dXJuIG9uZXJyb3IoZSk7CiAgfQogIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IG9uZXJyb3I7CiAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gb3BlblJlcXVlc3Rfb25zdWNjZXNzKCkgewogICB2YXIgZGIgPSBvcGVuUmVxdWVzdC5yZXN1bHQ7CiAgIHRyeSB7CiAgICB2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbIEZTLkRCX1NUT1JFX05BTUUgXSwgInJlYWRvbmx5Iik7CiAgIH0gY2F0Y2ggKGUpIHsKICAgIG9uZXJyb3IoZSk7CiAgICByZXR1cm47CiAgIH0KICAgdmFyIGZpbGVzID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoRlMuREJfU1RPUkVfTkFNRSk7CiAgIHZhciBvayA9IDAsIGZhaWwgPSAwLCB0b3RhbCA9IHBhdGhzLmxlbmd0aDsKICAgZnVuY3Rpb24gZmluaXNoKCkgewogICAgaWYgKGZhaWwgPT0gMCkgb25sb2FkKCk7IGVsc2Ugb25lcnJvcigpOwogICB9CiAgIHBhdGhzLmZvckVhY2goKGZ1bmN0aW9uKHBhdGgpIHsKICAgIHZhciBnZXRSZXF1ZXN0ID0gZmlsZXMuZ2V0KHBhdGgpOwogICAgZ2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiBnZXRSZXF1ZXN0X29uc3VjY2VzcygpIHsKICAgICBpZiAoRlMuYW5hbHl6ZVBhdGgocGF0aCkuZXhpc3RzKSB7CiAgICAgIEZTLnVubGluayhwYXRoKTsKICAgICB9CiAgICAgRlMuY3JlYXRlRGF0YUZpbGUoUEFUSC5kaXJuYW1lKHBhdGgpLCBQQVRILmJhc2VuYW1lKHBhdGgpLCBnZXRSZXF1ZXN0LnJlc3VsdCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgb2srKzsKICAgICBpZiAob2sgKyBmYWlsID09IHRvdGFsKSBmaW5pc2goKTsKICAgIH07CiAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBnZXRSZXF1ZXN0X29uZXJyb3IoKSB7CiAgICAgZmFpbCsrOwogICAgIGlmIChvayArIGZhaWwgPT0gdG90YWwpIGZpbmlzaCgpOwogICAgfTsKICAgfSkpOwogICB0cmFuc2FjdGlvbi5vbmVycm9yID0gb25lcnJvcjsKICB9OwogIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBvbmVycm9yOwogfSkKfTsKdmFyIFNZU0NBTExTID0gewogREVGQVVMVF9QT0xMTUFTSzogNSwKIG1hcHBpbmdzOiB7fSwKIHVtYXNrOiA1MTEsCiBjYWxjdWxhdGVBdDogKGZ1bmN0aW9uKGRpcmZkLCBwYXRoKSB7CiAgaWYgKHBhdGhbMF0gIT09ICIvIikgewogICB2YXIgZGlyOwogICBpZiAoZGlyZmQgPT09IC0xMDApIHsKICAgIGRpciA9IEZTLmN3ZCgpOwogICB9IGVsc2UgewogICAgdmFyIGRpcnN0cmVhbSA9IEZTLmdldFN0cmVhbShkaXJmZCk7CiAgICBpZiAoIWRpcnN0cmVhbSkgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogICAgZGlyID0gZGlyc3RyZWFtLnBhdGg7CiAgIH0KICAgcGF0aCA9IFBBVEguam9pbjIoZGlyLCBwYXRoKTsKICB9CiAgcmV0dXJuIHBhdGg7CiB9KSwKIGRvU3RhdDogKGZ1bmN0aW9uKGZ1bmMsIHBhdGgsIGJ1ZikgewogIHRyeSB7CiAgIHZhciBzdGF0ID0gZnVuYyhwYXRoKTsKICB9IGNhdGNoIChlKSB7CiAgIGlmIChlICYmIGUubm9kZSAmJiBQQVRILm5vcm1hbGl6ZShwYXRoKSAhPT0gUEFUSC5ub3JtYWxpemUoRlMuZ2V0UGF0aChlLm5vZGUpKSkgewogICAgcmV0dXJuIC1FUlJOT19DT0RFUy5FTk9URElSOwogICB9CiAgIHRocm93IGU7CiAgfQogIEhFQVAzMltidWYgPj4gMl0gPSBzdGF0LmRldjsKICBIRUFQMzJbYnVmICsgNCA+PiAyXSA9IDA7CiAgSEVBUDMyW2J1ZiArIDggPj4gMl0gPSBzdGF0LmlubzsKICBIRUFQMzJbYnVmICsgMTIgPj4gMl0gPSBzdGF0Lm1vZGU7CiAgSEVBUDMyW2J1ZiArIDE2ID4+IDJdID0gc3RhdC5ubGluazsKICBIRUFQMzJbYnVmICsgMjAgPj4gMl0gPSBzdGF0LnVpZDsKICBIRUFQMzJbYnVmICsgMjQgPj4gMl0gPSBzdGF0LmdpZDsKICBIRUFQMzJbYnVmICsgMjggPj4gMl0gPSBzdGF0LnJkZXY7CiAgSEVBUDMyW2J1ZiArIDMyID4+IDJdID0gMDsKICBIRUFQMzJbYnVmICsgMzYgPj4gMl0gPSBzdGF0LnNpemU7CiAgSEVBUDMyW2J1ZiArIDQwID4+IDJdID0gNDA5NjsKICBIRUFQMzJbYnVmICsgNDQgPj4gMl0gPSBzdGF0LmJsb2NrczsKICBIRUFQMzJbYnVmICsgNDggPj4gMl0gPSBzdGF0LmF0aW1lLmdldFRpbWUoKSAvIDFlMyB8IDA7CiAgSEVBUDMyW2J1ZiArIDUyID4+IDJdID0gMDsKICBIRUFQMzJbYnVmICsgNTYgPj4gMl0gPSBzdGF0Lm10aW1lLmdldFRpbWUoKSAvIDFlMyB8IDA7CiAgSEVBUDMyW2J1ZiArIDYwID4+IDJdID0gMDsKICBIRUFQMzJbYnVmICsgNjQgPj4gMl0gPSBzdGF0LmN0aW1lLmdldFRpbWUoKSAvIDFlMyB8IDA7CiAgSEVBUDMyW2J1ZiArIDY4ID4+IDJdID0gMDsKICBIRUFQMzJbYnVmICsgNzIgPj4gMl0gPSBzdGF0LmlubzsKICByZXR1cm4gMDsKIH0pLAogZG9Nc3luYzogKGZ1bmN0aW9uKGFkZHIsIHN0cmVhbSwgbGVuLCBmbGFncykgewogIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheShIRUFQVTguc3ViYXJyYXkoYWRkciwgYWRkciArIGxlbikpOwogIEZTLm1zeW5jKHN0cmVhbSwgYnVmZmVyLCAwLCBsZW4sIGZsYWdzKTsKIH0pLAogZG9Na2RpcjogKGZ1bmN0aW9uKHBhdGgsIG1vZGUpIHsKICBwYXRoID0gUEFUSC5ub3JtYWxpemUocGF0aCk7CiAgaWYgKHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gIi8iKSBwYXRoID0gcGF0aC5zdWJzdHIoMCwgcGF0aC5sZW5ndGggLSAxKTsKICBGUy5ta2RpcihwYXRoLCBtb2RlLCAwKTsKICByZXR1cm4gMDsKIH0pLAogZG9Na25vZDogKGZ1bmN0aW9uKHBhdGgsIG1vZGUsIGRldikgewogIHN3aXRjaCAobW9kZSAmIDYxNDQwKSB7CiAgY2FzZSAzMjc2ODoKICBjYXNlIDgxOTI6CiAgY2FzZSAyNDU3NjoKICBjYXNlIDQwOTY6CiAgY2FzZSA0OTE1MjoKICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgcmV0dXJuIC1FUlJOT19DT0RFUy5FSU5WQUw7CiAgfQogIEZTLm1rbm9kKHBhdGgsIG1vZGUsIGRldik7CiAgcmV0dXJuIDA7CiB9KSwKIGRvUmVhZGxpbms6IChmdW5jdGlvbihwYXRoLCBidWYsIGJ1ZnNpemUpIHsKICBpZiAoYnVmc2l6ZSA8PSAwKSByZXR1cm4gLUVSUk5PX0NPREVTLkVJTlZBTDsKICB2YXIgcmV0ID0gRlMucmVhZGxpbmsocGF0aCk7CiAgcmV0ID0gcmV0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGJ1ZnNpemUpKTsKICB3cml0ZVN0cmluZ1RvTWVtb3J5KHJldCwgYnVmLCB0cnVlKTsKICByZXR1cm4gcmV0Lmxlbmd0aDsKIH0pLAogZG9BY2Nlc3M6IChmdW5jdGlvbihwYXRoLCBhbW9kZSkgewogIGlmIChhbW9kZSAmIH43KSB7CiAgIHJldHVybiAtRVJSTk9fQ09ERVMuRUlOVkFMOwogIH0KICB2YXIgbm9kZTsKICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7CiAgIGZvbGxvdzogdHJ1ZQogIH0pOwogIG5vZGUgPSBsb29rdXAubm9kZTsKICB2YXIgcGVybXMgPSAiIjsKICBpZiAoYW1vZGUgJiA0KSBwZXJtcyArPSAiciI7CiAgaWYgKGFtb2RlICYgMikgcGVybXMgKz0gInciOwogIGlmIChhbW9kZSAmIDEpIHBlcm1zICs9ICJ4IjsKICBpZiAocGVybXMgJiYgRlMubm9kZVBlcm1pc3Npb25zKG5vZGUsIHBlcm1zKSkgewogICByZXR1cm4gLUVSUk5PX0NPREVTLkVBQ0NFUzsKICB9CiAgcmV0dXJuIDA7CiB9KSwKIGRvRHVwOiAoZnVuY3Rpb24ocGF0aCwgZmxhZ3MsIHN1Z2dlc3RGRCkgewogIHZhciBzdWdnZXN0ID0gRlMuZ2V0U3RyZWFtKHN1Z2dlc3RGRCk7CiAgaWYgKHN1Z2dlc3QpIEZTLmNsb3NlKHN1Z2dlc3QpOwogIHJldHVybiBGUy5vcGVuKHBhdGgsIGZsYWdzLCAwLCBzdWdnZXN0RkQsIHN1Z2dlc3RGRCkuZmQ7CiB9KSwKIGRvUmVhZHY6IChmdW5jdGlvbihzdHJlYW0sIGlvdiwgaW92Y250LCBvZmZzZXQpIHsKICB2YXIgcmV0ID0gMDsKICBmb3IgKHZhciBpID0gMDsgaSA8IGlvdmNudDsgaSsrKSB7CiAgIHZhciBwdHIgPSBIRUFQMzJbaW92ICsgaSAqIDggPj4gMl07CiAgIHZhciBsZW4gPSBIRUFQMzJbaW92ICsgKGkgKiA4ICsgNCkgPj4gMl07CiAgIHZhciBjdXJyID0gRlMucmVhZChzdHJlYW0sIEhFQVA4LCBwdHIsIGxlbiwgb2Zmc2V0KTsKICAgaWYgKGN1cnIgPCAwKSByZXR1cm4gLTE7CiAgIHJldCArPSBjdXJyOwogICBpZiAoY3VyciA8IGxlbikgYnJlYWs7CiAgfQogIHJldHVybiByZXQ7CiB9KSwKIGRvV3JpdGV2OiAoZnVuY3Rpb24oc3RyZWFtLCBpb3YsIGlvdmNudCwgb2Zmc2V0KSB7CiAgdmFyIHJldCA9IDA7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpb3ZjbnQ7IGkrKykgewogICB2YXIgcHRyID0gSEVBUDMyW2lvdiArIGkgKiA4ID4+IDJdOwogICB2YXIgbGVuID0gSEVBUDMyW2lvdiArIChpICogOCArIDQpID4+IDJdOwogICB2YXIgY3VyciA9IEZTLndyaXRlKHN0cmVhbSwgSEVBUDgsIHB0ciwgbGVuLCBvZmZzZXQpOwogICBpZiAoY3VyciA8IDApIHJldHVybiAtMTsKICAgcmV0ICs9IGN1cnI7CiAgfQogIHJldHVybiByZXQ7CiB9KSwKIHZhcmFyZ3M6IDAsCiBnZXQ6IChmdW5jdGlvbih2YXJhcmdzKSB7CiAgU1lTQ0FMTFMudmFyYXJncyArPSA0OwogIHZhciByZXQgPSBIRUFQMzJbU1lTQ0FMTFMudmFyYXJncyAtIDQgPj4gMl07CiAgcmV0dXJuIHJldDsKIH0pLAogZ2V0U3RyOiAoZnVuY3Rpb24oKSB7CiAgdmFyIHJldCA9IFBvaW50ZXJfc3RyaW5naWZ5KFNZU0NBTExTLmdldCgpKTsKICByZXR1cm4gcmV0OwogfSksCiBnZXRTdHJlYW1Gcm9tRkQ6IChmdW5jdGlvbigpIHsKICB2YXIgc3RyZWFtID0gRlMuZ2V0U3RyZWFtKFNZU0NBTExTLmdldCgpKTsKICBpZiAoIXN0cmVhbSkgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogIHJldHVybiBzdHJlYW07CiB9KSwKIGdldFNvY2tldEZyb21GRDogKGZ1bmN0aW9uKCkgewogIHZhciBzb2NrZXQgPSBTT0NLRlMuZ2V0U29ja2V0KFNZU0NBTExTLmdldCgpKTsKICBpZiAoIXNvY2tldCkgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogIHJldHVybiBzb2NrZXQ7CiB9KSwKIGdldFNvY2tldEFkZHJlc3M6IChmdW5jdGlvbihhbGxvd051bGwpIHsKICB2YXIgYWRkcnAgPSBTWVNDQUxMUy5nZXQoKSwgYWRkcmxlbiA9IFNZU0NBTExTLmdldCgpOwogIGlmIChhbGxvd051bGwgJiYgYWRkcnAgPT09IDApIHJldHVybiBudWxsOwogIHZhciBpbmZvID0gX19yZWFkX3NvY2thZGRyKGFkZHJwLCBhZGRybGVuKTsKICBpZiAoaW5mby5lcnJubykgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoaW5mby5lcnJubyk7CiAgaW5mby5hZGRyID0gRE5TLmxvb2t1cF9hZGRyKGluZm8uYWRkcikgfHwgaW5mby5hZGRyOwogIHJldHVybiBpbmZvOwogfSksCiBnZXQ2NDogKGZ1bmN0aW9uKCkgewogIHZhciBsb3cgPSBTWVNDQUxMUy5nZXQoKSwgaGlnaCA9IFNZU0NBTExTLmdldCgpOwogIGlmIChsb3cgPj0gMCkgYXNzZXJ0KGhpZ2ggPT09IDApOyBlbHNlIGFzc2VydChoaWdoID09PSAtMSk7CiAgcmV0dXJuIGxvdzsKIH0pLAogZ2V0WmVybzogKGZ1bmN0aW9uKCkgewogIGFzc2VydChTWVNDQUxMUy5nZXQoKSA9PT0gMCk7CiB9KQp9OwpmdW5jdGlvbiBfX19zeXNjYWxsNTQod2hpY2gsIHZhcmFyZ3MpIHsKIFNZU0NBTExTLnZhcmFyZ3MgPSB2YXJhcmdzOwogdHJ5IHsKICB2YXIgc3RyZWFtID0gU1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKCksIG9wID0gU1lTQ0FMTFMuZ2V0KCk7CiAgc3dpdGNoIChvcCkgewogIGNhc2UgMjE1MDU6CiAgIHsKICAgIGlmICghc3RyZWFtLnR0eSkgcmV0dXJuIC1FUlJOT19DT0RFUy5FTk9UVFk7CiAgICByZXR1cm4gMDsKICAgfQogIGNhc2UgMjE1MDY6CiAgIHsKICAgIGlmICghc3RyZWFtLnR0eSkgcmV0dXJuIC1FUlJOT19DT0RFUy5FTk9UVFk7CiAgICByZXR1cm4gMDsKICAgfQogIGNhc2UgMjE1MTk6CiAgIHsKICAgIGlmICghc3RyZWFtLnR0eSkgcmV0dXJuIC1FUlJOT19DT0RFUy5FTk9UVFk7CiAgICB2YXIgYXJncCA9IFNZU0NBTExTLmdldCgpOwogICAgSEVBUDMyW2FyZ3AgPj4gMl0gPSAwOwogICAgcmV0dXJuIDA7CiAgIH0KICBjYXNlIDIxNTIwOgogICB7CiAgICBpZiAoIXN0cmVhbS50dHkpIHJldHVybiAtRVJSTk9fQ09ERVMuRU5PVFRZOwogICAgcmV0dXJuIC1FUlJOT19DT0RFUy5FSU5WQUw7CiAgIH0KICBjYXNlIDIxNTMxOgogICB7CiAgICB2YXIgYXJncCA9IFNZU0NBTExTLmdldCgpOwogICAgcmV0dXJuIEZTLmlvY3RsKHN0cmVhbSwgb3AsIGFyZ3ApOwogICB9CiAgZGVmYXVsdDoKICAgYWJvcnQoImJhZCBpb2N0bCBzeXNjYWxsICIgKyBvcCk7CiAgfQogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgRlMgPT09ICJ1bmRlZmluZWQiIHx8ICEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKSBhYm9ydChlKTsKICByZXR1cm4gLWUuZXJybm87CiB9Cn0KZnVuY3Rpb24gX3N5c2NvbmYobmFtZSkgewogc3dpdGNoIChuYW1lKSB7CiBjYXNlIDMwOgogIHJldHVybiBQQUdFX1NJWkU7CiBjYXNlIDg1OgogIHJldHVybiB0b3RhbE1lbW9yeSAvIFBBR0VfU0laRTsKIGNhc2UgMTMyOgogY2FzZSAxMzM6CiBjYXNlIDEyOgogY2FzZSAxMzc6CiBjYXNlIDEzODoKIGNhc2UgMTU6CiBjYXNlIDIzNToKIGNhc2UgMTY6CiBjYXNlIDE3OgogY2FzZSAxODoKIGNhc2UgMTk6CiBjYXNlIDIwOgogY2FzZSAxNDk6CiBjYXNlIDEzOgogY2FzZSAxMDoKIGNhc2UgMjM2OgogY2FzZSAxNTM6CiBjYXNlIDk6CiBjYXNlIDIxOgogY2FzZSAyMjoKIGNhc2UgMTU5OgogY2FzZSAxNTQ6CiBjYXNlIDE0OgogY2FzZSA3NzoKIGNhc2UgNzg6CiBjYXNlIDEzOToKIGNhc2UgODA6CiBjYXNlIDgxOgogY2FzZSA4MjoKIGNhc2UgNjg6CiBjYXNlIDY3OgogY2FzZSAxNjQ6CiBjYXNlIDExOgogY2FzZSAyOToKIGNhc2UgNDc6CiBjYXNlIDQ4OgogY2FzZSA5NToKIGNhc2UgNTI6CiBjYXNlIDUxOgogY2FzZSA0NjoKICByZXR1cm4gMjAwODA5OwogY2FzZSA3OToKICByZXR1cm4gMDsKIGNhc2UgMjc6CiBjYXNlIDI0NjoKIGNhc2UgMTI3OgogY2FzZSAxMjg6CiBjYXNlIDIzOgogY2FzZSAyNDoKIGNhc2UgMTYwOgogY2FzZSAxNjE6CiBjYXNlIDE4MToKIGNhc2UgMTgyOgogY2FzZSAyNDI6CiBjYXNlIDE4MzoKIGNhc2UgMTg0OgogY2FzZSAyNDM6CiBjYXNlIDI0NDoKIGNhc2UgMjQ1OgogY2FzZSAxNjU6CiBjYXNlIDE3ODoKIGNhc2UgMTc5OgogY2FzZSA0OToKIGNhc2UgNTA6CiBjYXNlIDE2ODoKIGNhc2UgMTY5OgogY2FzZSAxNzU6CiBjYXNlIDE3MDoKIGNhc2UgMTcxOgogY2FzZSAxNzI6CiBjYXNlIDk3OgogY2FzZSA3NjoKIGNhc2UgMzI6CiBjYXNlIDE3MzoKIGNhc2UgMzU6CiAgcmV0dXJuIC0xOwogY2FzZSAxNzY6CiBjYXNlIDE3NzoKIGNhc2UgNzoKIGNhc2UgMTU1OgogY2FzZSA4OgogY2FzZSAxNTc6CiBjYXNlIDEyNToKIGNhc2UgMTI2OgogY2FzZSA5MjoKIGNhc2UgOTM6CiBjYXNlIDEyOToKIGNhc2UgMTMwOgogY2FzZSAxMzE6CiBjYXNlIDk0OgogY2FzZSA5MToKICByZXR1cm4gMTsKIGNhc2UgNzQ6CiBjYXNlIDYwOgogY2FzZSA2OToKIGNhc2UgNzA6CiBjYXNlIDQ6CiAgcmV0dXJuIDEwMjQ7CiBjYXNlIDMxOgogY2FzZSA0MjoKIGNhc2UgNzI6CiAgcmV0dXJuIDMyOwogY2FzZSA4NzoKIGNhc2UgMjY6CiBjYXNlIDMzOgogIHJldHVybiAyMTQ3NDgzNjQ3OwogY2FzZSAzNDoKIGNhc2UgMToKICByZXR1cm4gNDc4Mzk7CiBjYXNlIDM4OgogY2FzZSAzNjoKICByZXR1cm4gOTk7CiBjYXNlIDQzOgogY2FzZSAzNzoKICByZXR1cm4gMjA0ODsKIGNhc2UgMDoKICByZXR1cm4gMjA5NzE1MjsKIGNhc2UgMzoKICByZXR1cm4gNjU1MzY7CiBjYXNlIDI4OgogIHJldHVybiAzMjc2ODsKIGNhc2UgNDQ6CiAgcmV0dXJuIDMyNzY3OwogY2FzZSA3NToKICByZXR1cm4gMTYzODQ7CiBjYXNlIDM5OgogIHJldHVybiAxZTM7CiBjYXNlIDg5OgogIHJldHVybiA3MDA7CiBjYXNlIDcxOgogIHJldHVybiAyNTY7CiBjYXNlIDQwOgogIHJldHVybiAyNTU7CiBjYXNlIDI6CiAgcmV0dXJuIDEwMDsKIGNhc2UgMTgwOgogIHJldHVybiA2NDsKIGNhc2UgMjU6CiAgcmV0dXJuIDIwOwogY2FzZSA1OgogIHJldHVybiAxNjsKIGNhc2UgNjoKICByZXR1cm4gNjsKIGNhc2UgNzM6CiAgcmV0dXJuIDQ7CiBjYXNlIDg0OgogIHsKICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICJvYmplY3QiKSByZXR1cm4gbmF2aWdhdG9yWyJoYXJkd2FyZUNvbmN1cnJlbmN5Il0gfHwgMTsKICAgcmV0dXJuIDE7CiAgfQogfQogX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUlOVkFMKTsKIHJldHVybiAtMTsKfQpNb2R1bGVbIl9iaXRzaGlmdDY0THNociJdID0gX2JpdHNoaWZ0NjRMc2hyOwpmdW5jdGlvbiB1cGNhc3RQb2ludGVyKHB0ciwgcHRyQ2xhc3MsIGRlc2lyZWRDbGFzcykgewogd2hpbGUgKHB0ckNsYXNzICE9PSBkZXNpcmVkQ2xhc3MpIHsKICBpZiAoIXB0ckNsYXNzLnVwY2FzdCkgewogICB0aHJvd0JpbmRpbmdFcnJvcigiRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAiICsgZGVzaXJlZENsYXNzLm5hbWUgKyAiLCBnb3QgYW4gaW5zdGFuY2Ugb2YgIiArIHB0ckNsYXNzLm5hbWUpOwogIH0KICBwdHIgPSBwdHJDbGFzcy51cGNhc3QocHRyKTsKICBwdHJDbGFzcyA9IHB0ckNsYXNzLmJhc2VDbGFzczsKIH0KIHJldHVybiBwdHI7Cn0KZnVuY3Rpb24gY29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGUoZGVzdHJ1Y3RvcnMsIGhhbmRsZSkgewogaWYgKGhhbmRsZSA9PT0gbnVsbCkgewogIGlmICh0aGlzLmlzUmVmZXJlbmNlKSB7CiAgIHRocm93QmluZGluZ0Vycm9yKCJudWxsIGlzIG5vdCBhIHZhbGlkICIgKyB0aGlzLm5hbWUpOwogIH0KICByZXR1cm4gMDsKIH0KIGlmICghaGFuZGxlLiQkKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoJ0Nhbm5vdCBwYXNzICInICsgX2VtYmluZF9yZXByKGhhbmRsZSkgKyAnIiBhcyBhICcgKyB0aGlzLm5hbWUpOwogfQogaWYgKCFoYW5kbGUuJCQucHRyKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIgKyB0aGlzLm5hbWUpOwogfQogdmFyIGhhbmRsZUNsYXNzID0gaGFuZGxlLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzOwogdmFyIHB0ciA9IHVwY2FzdFBvaW50ZXIoaGFuZGxlLiQkLnB0ciwgaGFuZGxlQ2xhc3MsIHRoaXMucmVnaXN0ZXJlZENsYXNzKTsKIHJldHVybiBwdHI7Cn0KZnVuY3Rpb24gZ2VuZXJpY1BvaW50ZXJUb1dpcmVUeXBlKGRlc3RydWN0b3JzLCBoYW5kbGUpIHsKIGlmIChoYW5kbGUgPT09IG51bGwpIHsKICBpZiAodGhpcy5pc1JlZmVyZW5jZSkgewogICB0aHJvd0JpbmRpbmdFcnJvcigibnVsbCBpcyBub3QgYSB2YWxpZCAiICsgdGhpcy5uYW1lKTsKICB9CiAgaWYgKHRoaXMuaXNTbWFydFBvaW50ZXIpIHsKICAgdmFyIHB0ciA9IHRoaXMucmF3Q29uc3RydWN0b3IoKTsKICAgaWYgKGRlc3RydWN0b3JzICE9PSBudWxsKSB7CiAgICBkZXN0cnVjdG9ycy5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvciwgcHRyKTsKICAgfQogICByZXR1cm4gcHRyOwogIH0gZWxzZSB7CiAgIHJldHVybiAwOwogIH0KIH0KIGlmICghaGFuZGxlLiQkKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoJ0Nhbm5vdCBwYXNzICInICsgX2VtYmluZF9yZXByKGhhbmRsZSkgKyAnIiBhcyBhICcgKyB0aGlzLm5hbWUpOwogfQogaWYgKCFoYW5kbGUuJCQucHRyKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIgKyB0aGlzLm5hbWUpOwogfQogaWYgKCF0aGlzLmlzQ29uc3QgJiYgaGFuZGxlLiQkLnB0clR5cGUuaXNDb25zdCkgewogIHRocm93QmluZGluZ0Vycm9yKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIgKyAoaGFuZGxlLiQkLnNtYXJ0UHRyVHlwZSA/IGhhbmRsZS4kJC5zbWFydFB0clR5cGUubmFtZSA6IGhhbmRsZS4kJC5wdHJUeXBlLm5hbWUpICsgIiB0byBwYXJhbWV0ZXIgdHlwZSAiICsgdGhpcy5uYW1lKTsKIH0KIHZhciBoYW5kbGVDbGFzcyA9IGhhbmRsZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzczsKIHZhciBwdHIgPSB1cGNhc3RQb2ludGVyKGhhbmRsZS4kJC5wdHIsIGhhbmRsZUNsYXNzLCB0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7CiBpZiAodGhpcy5pc1NtYXJ0UG9pbnRlcikgewogIGlmICh1bmRlZmluZWQgPT09IGhhbmRsZS4kJC5zbWFydFB0cikgewogICB0aHJvd0JpbmRpbmdFcnJvcigiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKTsKICB9CiAgc3dpdGNoICh0aGlzLnNoYXJpbmdQb2xpY3kpIHsKICBjYXNlIDA6CiAgIGlmIChoYW5kbGUuJCQuc21hcnRQdHJUeXBlID09PSB0aGlzKSB7CiAgICBwdHIgPSBoYW5kbGUuJCQuc21hcnRQdHI7CiAgIH0gZWxzZSB7CiAgICB0aHJvd0JpbmRpbmdFcnJvcigiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiICsgKGhhbmRsZS4kJC5zbWFydFB0clR5cGUgPyBoYW5kbGUuJCQuc21hcnRQdHJUeXBlLm5hbWUgOiBoYW5kbGUuJCQucHRyVHlwZS5uYW1lKSArICIgdG8gcGFyYW1ldGVyIHR5cGUgIiArIHRoaXMubmFtZSk7CiAgIH0KICAgYnJlYWs7CiAgY2FzZSAxOgogICBwdHIgPSBoYW5kbGUuJCQuc21hcnRQdHI7CiAgIGJyZWFrOwogIGNhc2UgMjoKICAgaWYgKGhhbmRsZS4kJC5zbWFydFB0clR5cGUgPT09IHRoaXMpIHsKICAgIHB0ciA9IGhhbmRsZS4kJC5zbWFydFB0cjsKICAgfSBlbHNlIHsKICAgIHZhciBjbG9uZWRIYW5kbGUgPSBoYW5kbGVbImNsb25lIl0oKTsKICAgIHB0ciA9IHRoaXMucmF3U2hhcmUocHRyLCBfX2VtdmFsX3JlZ2lzdGVyKChmdW5jdGlvbigpIHsKICAgICBjbG9uZWRIYW5kbGVbImRlbGV0ZSJdKCk7CiAgICB9KSkpOwogICAgaWYgKGRlc3RydWN0b3JzICE9PSBudWxsKSB7CiAgICAgZGVzdHJ1Y3RvcnMucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3IsIHB0cik7CiAgICB9CiAgIH0KICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgdGhyb3dCaW5kaW5nRXJyb3IoIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpOwogIH0KIH0KIHJldHVybiBwdHI7Cn0KZnVuY3Rpb24gbm9uQ29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGUoZGVzdHJ1Y3RvcnMsIGhhbmRsZSkgewogaWYgKGhhbmRsZSA9PT0gbnVsbCkgewogIGlmICh0aGlzLmlzUmVmZXJlbmNlKSB7CiAgIHRocm93QmluZGluZ0Vycm9yKCJudWxsIGlzIG5vdCBhIHZhbGlkICIgKyB0aGlzLm5hbWUpOwogIH0KICByZXR1cm4gMDsKIH0KIGlmICghaGFuZGxlLiQkKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoJ0Nhbm5vdCBwYXNzICInICsgX2VtYmluZF9yZXByKGhhbmRsZSkgKyAnIiBhcyBhICcgKyB0aGlzLm5hbWUpOwogfQogaWYgKCFoYW5kbGUuJCQucHRyKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIgKyB0aGlzLm5hbWUpOwogfQogaWYgKGhhbmRsZS4kJC5wdHJUeXBlLmlzQ29uc3QpIHsKICB0aHJvd0JpbmRpbmdFcnJvcigiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiICsgaGFuZGxlLiQkLnB0clR5cGUubmFtZSArICIgdG8gcGFyYW1ldGVyIHR5cGUgIiArIHRoaXMubmFtZSk7CiB9CiB2YXIgaGFuZGxlQ2xhc3MgPSBoYW5kbGUuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7CiB2YXIgcHRyID0gdXBjYXN0UG9pbnRlcihoYW5kbGUuJCQucHRyLCBoYW5kbGVDbGFzcywgdGhpcy5yZWdpc3RlcmVkQ2xhc3MpOwogcmV0dXJuIHB0cjsKfQpmdW5jdGlvbiBSZWdpc3RlcmVkUG9pbnRlcl9nZXRQb2ludGVlKHB0cikgewogaWYgKHRoaXMucmF3R2V0UG9pbnRlZSkgewogIHB0ciA9IHRoaXMucmF3R2V0UG9pbnRlZShwdHIpOwogfQogcmV0dXJuIHB0cjsKfQpmdW5jdGlvbiBSZWdpc3RlcmVkUG9pbnRlcl9kZXN0cnVjdG9yKHB0cikgewogaWYgKHRoaXMucmF3RGVzdHJ1Y3RvcikgewogIHRoaXMucmF3RGVzdHJ1Y3RvcihwdHIpOwogfQp9CmZ1bmN0aW9uIFJlZ2lzdGVyZWRQb2ludGVyX2RlbGV0ZU9iamVjdChoYW5kbGUpIHsKIGlmIChoYW5kbGUgIT09IG51bGwpIHsKICBoYW5kbGVbImRlbGV0ZSJdKCk7CiB9Cn0KZnVuY3Rpb24gZG93bmNhc3RQb2ludGVyKHB0ciwgcHRyQ2xhc3MsIGRlc2lyZWRDbGFzcykgewogaWYgKHB0ckNsYXNzID09PSBkZXNpcmVkQ2xhc3MpIHsKICByZXR1cm4gcHRyOwogfQogaWYgKHVuZGVmaW5lZCA9PT0gZGVzaXJlZENsYXNzLmJhc2VDbGFzcykgewogIHJldHVybiBudWxsOwogfQogdmFyIHJ2ID0gZG93bmNhc3RQb2ludGVyKHB0ciwgcHRyQ2xhc3MsIGRlc2lyZWRDbGFzcy5iYXNlQ2xhc3MpOwogaWYgKHJ2ID09PSBudWxsKSB7CiAgcmV0dXJuIG51bGw7CiB9CiByZXR1cm4gZGVzaXJlZENsYXNzLmRvd25jYXN0KHJ2KTsKfQp2YXIgcmVnaXN0ZXJlZFBvaW50ZXJzID0ge307CmZ1bmN0aW9uIGdldEluaGVyaXRlZEluc3RhbmNlQ291bnQoKSB7CiByZXR1cm4gT2JqZWN0LmtleXMocmVnaXN0ZXJlZEluc3RhbmNlcykubGVuZ3RoOwp9CmZ1bmN0aW9uIGdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXMoKSB7CiB2YXIgcnYgPSBbXTsKIGZvciAodmFyIGsgaW4gcmVnaXN0ZXJlZEluc3RhbmNlcykgewogIGlmIChyZWdpc3RlcmVkSW5zdGFuY2VzLmhhc093blByb3BlcnR5KGspKSB7CiAgIHJ2LnB1c2gocmVnaXN0ZXJlZEluc3RhbmNlc1trXSk7CiAgfQogfQogcmV0dXJuIHJ2Owp9CnZhciBkZWxldGlvblF1ZXVlID0gW107CmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0RlbGV0ZXMoKSB7CiB3aGlsZSAoZGVsZXRpb25RdWV1ZS5sZW5ndGgpIHsKICB2YXIgb2JqID0gZGVsZXRpb25RdWV1ZS5wb3AoKTsKICBvYmouJCQuZGVsZXRlU2NoZWR1bGVkID0gZmFsc2U7CiAgb2JqWyJkZWxldGUiXSgpOwogfQp9CnZhciBkZWxheUZ1bmN0aW9uID0gdW5kZWZpbmVkOwpmdW5jdGlvbiBzZXREZWxheUZ1bmN0aW9uKGZuKSB7CiBkZWxheUZ1bmN0aW9uID0gZm47CiBpZiAoZGVsZXRpb25RdWV1ZS5sZW5ndGggJiYgZGVsYXlGdW5jdGlvbikgewogIGRlbGF5RnVuY3Rpb24oZmx1c2hQZW5kaW5nRGVsZXRlcyk7CiB9Cn0KZnVuY3Rpb24gaW5pdF9lbWJpbmQoKSB7CiBNb2R1bGVbImdldEluaGVyaXRlZEluc3RhbmNlQ291bnQiXSA9IGdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ7CiBNb2R1bGVbImdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXMiXSA9IGdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM7CiBNb2R1bGVbImZsdXNoUGVuZGluZ0RlbGV0ZXMiXSA9IGZsdXNoUGVuZGluZ0RlbGV0ZXM7CiBNb2R1bGVbInNldERlbGF5RnVuY3Rpb24iXSA9IHNldERlbGF5RnVuY3Rpb247Cn0KdmFyIHJlZ2lzdGVyZWRJbnN0YW5jZXMgPSB7fTsKZnVuY3Rpb24gZ2V0QmFzZXN0UG9pbnRlcihjbGFzc18sIHB0cikgewogaWYgKHB0ciA9PT0gdW5kZWZpbmVkKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoInB0ciBzaG91bGQgbm90IGJlIHVuZGVmaW5lZCIpOwogfQogd2hpbGUgKGNsYXNzXy5iYXNlQ2xhc3MpIHsKICBwdHIgPSBjbGFzc18udXBjYXN0KHB0cik7CiAgY2xhc3NfID0gY2xhc3NfLmJhc2VDbGFzczsKIH0KIHJldHVybiBwdHI7Cn0KZnVuY3Rpb24gZ2V0SW5oZXJpdGVkSW5zdGFuY2UoY2xhc3NfLCBwdHIpIHsKIHB0ciA9IGdldEJhc2VzdFBvaW50ZXIoY2xhc3NfLCBwdHIpOwogcmV0dXJuIHJlZ2lzdGVyZWRJbnN0YW5jZXNbcHRyXTsKfQp2YXIgX3Rocm93SW50ZXJuYWxFcnJvciA9IHVuZGVmaW5lZDsKZnVuY3Rpb24gbWFrZUNsYXNzSGFuZGxlKHByb3RvdHlwZSwgcmVjb3JkKSB7CiBpZiAoIXJlY29yZC5wdHJUeXBlIHx8ICFyZWNvcmQucHRyKSB7CiAgdGhyb3dJbnRlcm5hbEVycm9yKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7CiB9CiB2YXIgaGFzU21hcnRQdHJUeXBlID0gISFyZWNvcmQuc21hcnRQdHJUeXBlOwogdmFyIGhhc1NtYXJ0UHRyID0gISFyZWNvcmQuc21hcnRQdHI7CiBpZiAoaGFzU21hcnRQdHJUeXBlICE9PSBoYXNTbWFydFB0cikgewogIHRocm93SW50ZXJuYWxFcnJvcigiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIik7CiB9CiByZWNvcmQuY291bnQgPSB7CiAgdmFsdWU6IDEKIH07CiByZXR1cm4gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUsIHsKICAkJDogewogICB2YWx1ZTogcmVjb3JkCiAgfQogfSk7Cn0KZnVuY3Rpb24gUmVnaXN0ZXJlZFBvaW50ZXJfZnJvbVdpcmVUeXBlKHB0cikgewogdmFyIHJhd1BvaW50ZXIgPSB0aGlzLmdldFBvaW50ZWUocHRyKTsKIGlmICghcmF3UG9pbnRlcikgewogIHRoaXMuZGVzdHJ1Y3RvcihwdHIpOwogIHJldHVybiBudWxsOwogfQogdmFyIHJlZ2lzdGVyZWRJbnN0YW5jZSA9IGdldEluaGVyaXRlZEluc3RhbmNlKHRoaXMucmVnaXN0ZXJlZENsYXNzLCByYXdQb2ludGVyKTsKIGlmICh1bmRlZmluZWQgIT09IHJlZ2lzdGVyZWRJbnN0YW5jZSkgewogIGlmICgwID09PSByZWdpc3RlcmVkSW5zdGFuY2UuJCQuY291bnQudmFsdWUpIHsKICAgcmVnaXN0ZXJlZEluc3RhbmNlLiQkLnB0ciA9IHJhd1BvaW50ZXI7CiAgIHJlZ2lzdGVyZWRJbnN0YW5jZS4kJC5zbWFydFB0ciA9IHB0cjsKICAgcmV0dXJuIHJlZ2lzdGVyZWRJbnN0YW5jZVsiY2xvbmUiXSgpOwogIH0gZWxzZSB7CiAgIHZhciBydiA9IHJlZ2lzdGVyZWRJbnN0YW5jZVsiY2xvbmUiXSgpOwogICB0aGlzLmRlc3RydWN0b3IocHRyKTsKICAgcmV0dXJuIHJ2OwogIH0KIH0KIGZ1bmN0aW9uIG1ha2VEZWZhdWx0SGFuZGxlKCkgewogIGlmICh0aGlzLmlzU21hcnRQb2ludGVyKSB7CiAgIHJldHVybiBtYWtlQ2xhc3NIYW5kbGUodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsIHsKICAgIHB0clR5cGU6IHRoaXMucG9pbnRlZVR5cGUsCiAgICBwdHI6IHJhd1BvaW50ZXIsCiAgICBzbWFydFB0clR5cGU6IHRoaXMsCiAgICBzbWFydFB0cjogcHRyCiAgIH0pOwogIH0gZWxzZSB7CiAgIHJldHVybiBtYWtlQ2xhc3NIYW5kbGUodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsIHsKICAgIHB0clR5cGU6IHRoaXMsCiAgICBwdHI6IHB0cgogICB9KTsKICB9CiB9CiB2YXIgYWN0dWFsVHlwZSA9IHRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUocmF3UG9pbnRlcik7CiB2YXIgcmVnaXN0ZXJlZFBvaW50ZXJSZWNvcmQgPSByZWdpc3RlcmVkUG9pbnRlcnNbYWN0dWFsVHlwZV07CiBpZiAoIXJlZ2lzdGVyZWRQb2ludGVyUmVjb3JkKSB7CiAgcmV0dXJuIG1ha2VEZWZhdWx0SGFuZGxlLmNhbGwodGhpcyk7CiB9CiB2YXIgdG9UeXBlOwogaWYgKHRoaXMuaXNDb25zdCkgewogIHRvVHlwZSA9IHJlZ2lzdGVyZWRQb2ludGVyUmVjb3JkLmNvbnN0UG9pbnRlclR5cGU7CiB9IGVsc2UgewogIHRvVHlwZSA9IHJlZ2lzdGVyZWRQb2ludGVyUmVjb3JkLnBvaW50ZXJUeXBlOwogfQogdmFyIGRwID0gZG93bmNhc3RQb2ludGVyKHJhd1BvaW50ZXIsIHRoaXMucmVnaXN0ZXJlZENsYXNzLCB0b1R5cGUucmVnaXN0ZXJlZENsYXNzKTsKIGlmIChkcCA9PT0gbnVsbCkgewogIHJldHVybiBtYWtlRGVmYXVsdEhhbmRsZS5jYWxsKHRoaXMpOwogfQogaWYgKHRoaXMuaXNTbWFydFBvaW50ZXIpIHsKICByZXR1cm4gbWFrZUNsYXNzSGFuZGxlKHRvVHlwZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsIHsKICAgcHRyVHlwZTogdG9UeXBlLAogICBwdHI6IGRwLAogICBzbWFydFB0clR5cGU6IHRoaXMsCiAgIHNtYXJ0UHRyOiBwdHIKICB9KTsKIH0gZWxzZSB7CiAgcmV0dXJuIG1ha2VDbGFzc0hhbmRsZSh0b1R5cGUucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLCB7CiAgIHB0clR5cGU6IHRvVHlwZSwKICAgcHRyOiBkcAogIH0pOwogfQp9CmZ1bmN0aW9uIGluaXRfUmVnaXN0ZXJlZFBvaW50ZXIoKSB7CiBSZWdpc3RlcmVkUG9pbnRlci5wcm90b3R5cGUuZ2V0UG9pbnRlZSA9IFJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWU7CiBSZWdpc3RlcmVkUG9pbnRlci5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IFJlZ2lzdGVyZWRQb2ludGVyX2Rlc3RydWN0b3I7CiBSZWdpc3RlcmVkUG9pbnRlci5wcm90b3R5cGVbImFyZ1BhY2tBZHZhbmNlIl0gPSA4OwogUmVnaXN0ZXJlZFBvaW50ZXIucHJvdG90eXBlWyJyZWFkVmFsdWVGcm9tUG9pbnRlciJdID0gc2ltcGxlUmVhZFZhbHVlRnJvbVBvaW50ZXI7CiBSZWdpc3RlcmVkUG9pbnRlci5wcm90b3R5cGVbImRlbGV0ZU9iamVjdCJdID0gUmVnaXN0ZXJlZFBvaW50ZXJfZGVsZXRlT2JqZWN0OwogUmVnaXN0ZXJlZFBvaW50ZXIucHJvdG90eXBlWyJmcm9tV2lyZVR5cGUiXSA9IFJlZ2lzdGVyZWRQb2ludGVyX2Zyb21XaXJlVHlwZTsKfQpmdW5jdGlvbiBSZWdpc3RlcmVkUG9pbnRlcihuYW1lLCByZWdpc3RlcmVkQ2xhc3MsIGlzUmVmZXJlbmNlLCBpc0NvbnN0LCBpc1NtYXJ0UG9pbnRlciwgcG9pbnRlZVR5cGUsIHNoYXJpbmdQb2xpY3ksIHJhd0dldFBvaW50ZWUsIHJhd0NvbnN0cnVjdG9yLCByYXdTaGFyZSwgcmF3RGVzdHJ1Y3RvcikgewogdGhpcy5uYW1lID0gbmFtZTsKIHRoaXMucmVnaXN0ZXJlZENsYXNzID0gcmVnaXN0ZXJlZENsYXNzOwogdGhpcy5pc1JlZmVyZW5jZSA9IGlzUmVmZXJlbmNlOwogdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKIHRoaXMuaXNTbWFydFBvaW50ZXIgPSBpc1NtYXJ0UG9pbnRlcjsKIHRoaXMucG9pbnRlZVR5cGUgPSBwb2ludGVlVHlwZTsKIHRoaXMuc2hhcmluZ1BvbGljeSA9IHNoYXJpbmdQb2xpY3k7CiB0aGlzLnJhd0dldFBvaW50ZWUgPSByYXdHZXRQb2ludGVlOwogdGhpcy5yYXdDb25zdHJ1Y3RvciA9IHJhd0NvbnN0cnVjdG9yOwogdGhpcy5yYXdTaGFyZSA9IHJhd1NoYXJlOwogdGhpcy5yYXdEZXN0cnVjdG9yID0gcmF3RGVzdHJ1Y3RvcjsKIGlmICghaXNTbWFydFBvaW50ZXIgJiYgcmVnaXN0ZXJlZENsYXNzLmJhc2VDbGFzcyA9PT0gdW5kZWZpbmVkKSB7CiAgaWYgKGlzQ29uc3QpIHsKICAgdGhpc1sidG9XaXJlVHlwZSJdID0gY29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGU7CiAgIHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uID0gbnVsbDsKICB9IGVsc2UgewogICB0aGlzWyJ0b1dpcmVUeXBlIl0gPSBub25Db25zdE5vU21hcnRQdHJSYXdQb2ludGVyVG9XaXJlVHlwZTsKICAgdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb24gPSBudWxsOwogIH0KIH0gZWxzZSB7CiAgdGhpc1sidG9XaXJlVHlwZSJdID0gZ2VuZXJpY1BvaW50ZXJUb1dpcmVUeXBlOwogfQp9CmZ1bmN0aW9uIHJlcXVpcmVGdW5jdGlvbihzaWduYXR1cmUsIHJhd0Z1bmN0aW9uKSB7CiBzaWduYXR1cmUgPSByZWFkTGF0aW4xU3RyaW5nKHNpZ25hdHVyZSk7CiBmdW5jdGlvbiBtYWtlRHluQ2FsbGVyKGR5bkNhbGwpIHsKICB2YXIgYXJncyA9IFtdOwogIGZvciAodmFyIGkgPSAxOyBpIDwgc2lnbmF0dXJlLmxlbmd0aDsgKytpKSB7CiAgIGFyZ3MucHVzaCgiYSIgKyBpKTsKICB9CiAgdmFyIG5hbWUgPSAiZHluQ2FsbF8iICsgc2lnbmF0dXJlICsgIl8iICsgcmF3RnVuY3Rpb247CiAgdmFyIGJvZHkgPSAicmV0dXJuIGZ1bmN0aW9uICIgKyBuYW1lICsgIigiICsgYXJncy5qb2luKCIsICIpICsgIikge1xuIjsKICBib2R5ICs9ICIgICAgcmV0dXJuIGR5bkNhbGwocmF3RnVuY3Rpb24iICsgKGFyZ3MubGVuZ3RoID8gIiwgIiA6ICIiKSArIGFyZ3Muam9pbigiLCAiKSArICIpO1xuIjsKICBib2R5ICs9ICJ9O1xuIjsKICByZXR1cm4gKG5ldyBGdW5jdGlvbigiZHluQ2FsbCIsICJyYXdGdW5jdGlvbiIsIGJvZHkpKShkeW5DYWxsLCByYXdGdW5jdGlvbik7CiB9CiB2YXIgZnA7CiBpZiAoTW9kdWxlWyJGVU5DVElPTl9UQUJMRV8iICsgc2lnbmF0dXJlXSAhPT0gdW5kZWZpbmVkKSB7CiAgZnAgPSBNb2R1bGVbIkZVTkNUSU9OX1RBQkxFXyIgKyBzaWduYXR1cmVdW3Jhd0Z1bmN0aW9uXTsKIH0gZWxzZSBpZiAodHlwZW9mIEZVTkNUSU9OX1RBQkxFICE9PSAidW5kZWZpbmVkIikgewogIGZwID0gRlVOQ1RJT05fVEFCTEVbcmF3RnVuY3Rpb25dOwogfSBlbHNlIHsKICB2YXIgZGMgPSBhc21bImR5bkNhbGxfIiArIHNpZ25hdHVyZV07CiAgaWYgKGRjID09PSB1bmRlZmluZWQpIHsKICAgZGMgPSBhc21bImR5bkNhbGxfIiArIHNpZ25hdHVyZS5yZXBsYWNlKC9mL2csICJkIildOwogICBpZiAoZGMgPT09IHVuZGVmaW5lZCkgewogICAgdGhyb3dCaW5kaW5nRXJyb3IoIk5vIGR5bkNhbGwgaW52b2tlciBmb3Igc2lnbmF0dXJlOiAiICsgc2lnbmF0dXJlKTsKICAgfQogIH0KICBmcCA9IG1ha2VEeW5DYWxsZXIoZGMpOwogfQogaWYgKHR5cGVvZiBmcCAhPT0gImZ1bmN0aW9uIikgewogIHRocm93QmluZGluZ0Vycm9yKCJ1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgIiArIHNpZ25hdHVyZSArICI6ICIgKyByYXdGdW5jdGlvbik7CiB9CiByZXR1cm4gZnA7Cn0KZnVuY3Rpb24gX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKHJhd1R5cGUsIHJhd1BvaW50ZWVUeXBlLCBuYW1lLCBzaGFyaW5nUG9saWN5LCBnZXRQb2ludGVlU2lnbmF0dXJlLCByYXdHZXRQb2ludGVlLCBjb25zdHJ1Y3RvclNpZ25hdHVyZSwgcmF3Q29uc3RydWN0b3IsIHNoYXJlU2lnbmF0dXJlLCByYXdTaGFyZSwgZGVzdHJ1Y3RvclNpZ25hdHVyZSwgcmF3RGVzdHJ1Y3RvcikgewogbmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobmFtZSk7CiByYXdHZXRQb2ludGVlID0gcmVxdWlyZUZ1bmN0aW9uKGdldFBvaW50ZWVTaWduYXR1cmUsIHJhd0dldFBvaW50ZWUpOwogcmF3Q29uc3RydWN0b3IgPSByZXF1aXJlRnVuY3Rpb24oY29uc3RydWN0b3JTaWduYXR1cmUsIHJhd0NvbnN0cnVjdG9yKTsKIHJhd1NoYXJlID0gcmVxdWlyZUZ1bmN0aW9uKHNoYXJlU2lnbmF0dXJlLCByYXdTaGFyZSk7CiByYXdEZXN0cnVjdG9yID0gcmVxdWlyZUZ1bmN0aW9uKGRlc3RydWN0b3JTaWduYXR1cmUsIHJhd0Rlc3RydWN0b3IpOwogd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQoWyByYXdUeXBlIF0sIFsgcmF3UG9pbnRlZVR5cGUgXSwgKGZ1bmN0aW9uKHBvaW50ZWVUeXBlKSB7CiAgcG9pbnRlZVR5cGUgPSBwb2ludGVlVHlwZVswXTsKICB2YXIgcmVnaXN0ZXJlZFBvaW50ZXIgPSBuZXcgUmVnaXN0ZXJlZFBvaW50ZXIobmFtZSwgcG9pbnRlZVR5cGUucmVnaXN0ZXJlZENsYXNzLCBmYWxzZSwgZmFsc2UsIHRydWUsIHBvaW50ZWVUeXBlLCBzaGFyaW5nUG9saWN5LCByYXdHZXRQb2ludGVlLCByYXdDb25zdHJ1Y3RvciwgcmF3U2hhcmUsIHJhd0Rlc3RydWN0b3IpOwogIHJldHVybiBbIHJlZ2lzdGVyZWRQb2ludGVyIF07CiB9KSk7Cn0KdmFyIF9CRHRvSUhpZ2ggPSB0cnVlOwpmdW5jdGlvbiBfcHRocmVhZF9jbGVhbnVwX3B1c2gocm91dGluZSwgYXJnKSB7CiBfX0FURVhJVF9fLnB1c2goKGZ1bmN0aW9uKCkgewogIFJ1bnRpbWUuZHluQ2FsbCgidmkiLCByb3V0aW5lLCBbIGFyZyBdKTsKIH0pKTsKIF9wdGhyZWFkX2NsZWFudXBfcHVzaC5sZXZlbCA9IF9fQVRFWElUX18ubGVuZ3RoOwp9CmZ1bmN0aW9uIG5ld18oY29uc3RydWN0b3IsIGFyZ3VtZW50TGlzdCkgewogaWYgKCEoY29uc3RydWN0b3IgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHsKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJuZXdfIGNhbGxlZCB3aXRoIGNvbnN0cnVjdG9yIHR5cGUgIiArIHR5cGVvZiBjb25zdHJ1Y3RvciArICIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTsKIH0KIHZhciBkdW1teSA9IGNyZWF0ZU5hbWVkRnVuY3Rpb24oY29uc3RydWN0b3IubmFtZSB8fCAidW5rbm93bkZ1bmN0aW9uTmFtZSIsIChmdW5jdGlvbigpIHt9KSk7CiBkdW1teS5wcm90b3R5cGUgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiB2YXIgb2JqID0gbmV3IGR1bW15OwogdmFyIHIgPSBjb25zdHJ1Y3Rvci5hcHBseShvYmosIGFyZ3VtZW50TGlzdCk7CiByZXR1cm4gciBpbnN0YW5jZW9mIE9iamVjdCA/IHIgOiBvYmo7Cn0KZnVuY3Rpb24gcnVuRGVzdHJ1Y3RvcnMoZGVzdHJ1Y3RvcnMpIHsKIHdoaWxlIChkZXN0cnVjdG9ycy5sZW5ndGgpIHsKICB2YXIgcHRyID0gZGVzdHJ1Y3RvcnMucG9wKCk7CiAgdmFyIGRlbCA9IGRlc3RydWN0b3JzLnBvcCgpOwogIGRlbChwdHIpOwogfQp9CmZ1bmN0aW9uIGNyYWZ0SW52b2tlckZ1bmN0aW9uKGh1bWFuTmFtZSwgYXJnVHlwZXMsIGNsYXNzVHlwZSwgY3BwSW52b2tlckZ1bmMsIGNwcFRhcmdldEZ1bmMpIHsKIHZhciBhcmdDb3VudCA9IGFyZ1R5cGVzLmxlbmd0aDsKIGlmIChhcmdDb3VudCA8IDIpIHsKICB0aHJvd0JpbmRpbmdFcnJvcigiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIik7CiB9CiB2YXIgaXNDbGFzc01ldGhvZEZ1bmMgPSBhcmdUeXBlc1sxXSAhPT0gbnVsbCAmJiBjbGFzc1R5cGUgIT09IG51bGw7CiB2YXIgYXJnc0xpc3QgPSAiIjsKIHZhciBhcmdzTGlzdFdpcmVkID0gIiI7CiBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50IC0gMjsgKytpKSB7CiAgYXJnc0xpc3QgKz0gKGkgIT09IDAgPyAiLCAiIDogIiIpICsgImFyZyIgKyBpOwogIGFyZ3NMaXN0V2lyZWQgKz0gKGkgIT09IDAgPyAiLCAiIDogIiIpICsgImFyZyIgKyBpICsgIldpcmVkIjsKIH0KIHZhciBpbnZva2VyRm5Cb2R5ID0gInJldHVybiBmdW5jdGlvbiAiICsgbWFrZUxlZ2FsRnVuY3Rpb25OYW1lKGh1bWFuTmFtZSkgKyAiKCIgKyBhcmdzTGlzdCArICIpIHtcbiIgKyAiaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09ICIgKyAoYXJnQ291bnQgLSAyKSArICIpIHtcbiIgKyAidGhyb3dCaW5kaW5nRXJyb3IoJ2Z1bmN0aW9uICIgKyBodW1hbk5hbWUgKyAiIGNhbGxlZCB3aXRoICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMsIGV4cGVjdGVkICIgKyAoYXJnQ291bnQgLSAyKSArICIgYXJncyEnKTtcbiIgKyAifVxuIjsKIHZhciBuZWVkc0Rlc3RydWN0b3JTdGFjayA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdUeXBlcy5sZW5ndGg7ICsraSkgewogIGlmIChhcmdUeXBlc1tpXSAhPT0gbnVsbCAmJiBhcmdUeXBlc1tpXS5kZXN0cnVjdG9yRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkgewogICBuZWVkc0Rlc3RydWN0b3JTdGFjayA9IHRydWU7CiAgIGJyZWFrOwogIH0KIH0KIGlmIChuZWVkc0Rlc3RydWN0b3JTdGFjaykgewogIGludm9rZXJGbkJvZHkgKz0gInZhciBkZXN0cnVjdG9ycyA9IFtdO1xuIjsKIH0KIHZhciBkdG9yU3RhY2sgPSBuZWVkc0Rlc3RydWN0b3JTdGFjayA/ICJkZXN0cnVjdG9ycyIgOiAibnVsbCI7CiB2YXIgYXJnczEgPSBbICJ0aHJvd0JpbmRpbmdFcnJvciIsICJpbnZva2VyIiwgImZuIiwgInJ1bkRlc3RydWN0b3JzIiwgInJldFR5cGUiLCAiY2xhc3NQYXJhbSIgXTsKIHZhciBhcmdzMiA9IFsgdGhyb3dCaW5kaW5nRXJyb3IsIGNwcEludm9rZXJGdW5jLCBjcHBUYXJnZXRGdW5jLCBydW5EZXN0cnVjdG9ycywgYXJnVHlwZXNbMF0sIGFyZ1R5cGVzWzFdIF07CiBpZiAoaXNDbGFzc01ldGhvZEZ1bmMpIHsKICBpbnZva2VyRm5Cb2R5ICs9ICJ2YXIgdGhpc1dpcmVkID0gY2xhc3NQYXJhbS50b1dpcmVUeXBlKCIgKyBkdG9yU3RhY2sgKyAiLCB0aGlzKTtcbiI7CiB9CiBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50IC0gMjsgKytpKSB7CiAgaW52b2tlckZuQm9keSArPSAidmFyIGFyZyIgKyBpICsgIldpcmVkID0gYXJnVHlwZSIgKyBpICsgIi50b1dpcmVUeXBlKCIgKyBkdG9yU3RhY2sgKyAiLCBhcmciICsgaSArICIpOyAvLyAiICsgYXJnVHlwZXNbaSArIDJdLm5hbWUgKyAiXG4iOwogIGFyZ3MxLnB1c2goImFyZ1R5cGUiICsgaSk7CiAgYXJnczIucHVzaChhcmdUeXBlc1tpICsgMl0pOwogfQogaWYgKGlzQ2xhc3NNZXRob2RGdW5jKSB7CiAgYXJnc0xpc3RXaXJlZCA9ICJ0aGlzV2lyZWQiICsgKGFyZ3NMaXN0V2lyZWQubGVuZ3RoID4gMCA/ICIsICIgOiAiIikgKyBhcmdzTGlzdFdpcmVkOwogfQogdmFyIHJldHVybnMgPSBhcmdUeXBlc1swXS5uYW1lICE9PSAidm9pZCI7CiBpbnZva2VyRm5Cb2R5ICs9IChyZXR1cm5zID8gInZhciBydiA9ICIgOiAiIikgKyAiaW52b2tlcihmbiIgKyAoYXJnc0xpc3RXaXJlZC5sZW5ndGggPiAwID8gIiwgIiA6ICIiKSArIGFyZ3NMaXN0V2lyZWQgKyAiKTtcbiI7CiBpZiAobmVlZHNEZXN0cnVjdG9yU3RhY2spIHsKICBpbnZva2VyRm5Cb2R5ICs9ICJydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7XG4iOwogfSBlbHNlIHsKICBmb3IgKHZhciBpID0gaXNDbGFzc01ldGhvZEZ1bmMgPyAxIDogMjsgaSA8IGFyZ1R5cGVzLmxlbmd0aDsgKytpKSB7CiAgIHZhciBwYXJhbU5hbWUgPSBpID09PSAxID8gInRoaXNXaXJlZCIgOiAiYXJnIiArIChpIC0gMikgKyAiV2lyZWQiOwogICBpZiAoYXJnVHlwZXNbaV0uZGVzdHJ1Y3RvckZ1bmN0aW9uICE9PSBudWxsKSB7CiAgICBpbnZva2VyRm5Cb2R5ICs9IHBhcmFtTmFtZSArICJfZHRvcigiICsgcGFyYW1OYW1lICsgIik7IC8vICIgKyBhcmdUeXBlc1tpXS5uYW1lICsgIlxuIjsKICAgIGFyZ3MxLnB1c2gocGFyYW1OYW1lICsgIl9kdG9yIik7CiAgICBhcmdzMi5wdXNoKGFyZ1R5cGVzW2ldLmRlc3RydWN0b3JGdW5jdGlvbik7CiAgIH0KICB9CiB9CiBpZiAocmV0dXJucykgewogIGludm9rZXJGbkJvZHkgKz0gInZhciByZXQgPSByZXRUeXBlLmZyb21XaXJlVHlwZShydik7XG4iICsgInJldHVybiByZXQ7XG4iOwogfSBlbHNlIHt9CiBpbnZva2VyRm5Cb2R5ICs9ICJ9XG4iOwogYXJnczEucHVzaChpbnZva2VyRm5Cb2R5KTsKIHZhciBpbnZva2VyRnVuY3Rpb24gPSBuZXdfKEZ1bmN0aW9uLCBhcmdzMSkuYXBwbHkobnVsbCwgYXJnczIpOwogcmV0dXJuIGludm9rZXJGdW5jdGlvbjsKfQpmdW5jdGlvbiBlbnN1cmVPdmVybG9hZFRhYmxlKHByb3RvLCBtZXRob2ROYW1lLCBodW1hbk5hbWUpIHsKIGlmICh1bmRlZmluZWQgPT09IHByb3RvW21ldGhvZE5hbWVdLm92ZXJsb2FkVGFibGUpIHsKICB2YXIgcHJldkZ1bmMgPSBwcm90b1ttZXRob2ROYW1lXTsKICBwcm90b1ttZXRob2ROYW1lXSA9IChmdW5jdGlvbigpIHsKICAgaWYgKCFwcm90b1ttZXRob2ROYW1lXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KGFyZ3VtZW50cy5sZW5ndGgpKSB7CiAgICB0aHJvd0JpbmRpbmdFcnJvcigiRnVuY3Rpb24gJyIgKyBodW1hbk5hbWUgKyAiJyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCIgKyBhcmd1bWVudHMubGVuZ3RoICsgIikgLSBleHBlY3RzIG9uZSBvZiAoIiArIHByb3RvW21ldGhvZE5hbWVdLm92ZXJsb2FkVGFibGUgKyAiKSEiKTsKICAgfQogICByZXR1cm4gcHJvdG9bbWV0aG9kTmFtZV0ub3ZlcmxvYWRUYWJsZVthcmd1bWVudHMubGVuZ3RoXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogIH0pOwogIHByb3RvW21ldGhvZE5hbWVdLm92ZXJsb2FkVGFibGUgPSBbXTsKICBwcm90b1ttZXRob2ROYW1lXS5vdmVybG9hZFRhYmxlW3ByZXZGdW5jLmFyZ0NvdW50XSA9IHByZXZGdW5jOwogfQp9CmZ1bmN0aW9uIGhlYXAzMlZlY3RvclRvQXJyYXkoY291bnQsIGZpcnN0RWxlbWVudCkgewogdmFyIGFycmF5ID0gW107CiBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICBhcnJheS5wdXNoKEhFQVAzMlsoZmlyc3RFbGVtZW50ID4+IDIpICsgaV0pOwogfQogcmV0dXJuIGFycmF5Owp9CnZhciBVbmJvdW5kVHlwZUVycm9yID0gdW5kZWZpbmVkOwpmdW5jdGlvbiB0aHJvd1VuYm91bmRUeXBlRXJyb3IobWVzc2FnZSwgdHlwZXMpIHsKIHZhciB1bmJvdW5kVHlwZXMgPSBbXTsKIHZhciBzZWVuID0ge307CiBmdW5jdGlvbiB2aXNpdCh0eXBlKSB7CiAgaWYgKHNlZW5bdHlwZV0pIHsKICAgcmV0dXJuOwogIH0KICBpZiAocmVnaXN0ZXJlZFR5cGVzW3R5cGVdKSB7CiAgIHJldHVybjsKICB9CiAgaWYgKHR5cGVEZXBlbmRlbmNpZXNbdHlwZV0pIHsKICAgdHlwZURlcGVuZGVuY2llc1t0eXBlXS5mb3JFYWNoKHZpc2l0KTsKICAgcmV0dXJuOwogIH0KICB1bmJvdW5kVHlwZXMucHVzaCh0eXBlKTsKICBzZWVuW3R5cGVdID0gdHJ1ZTsKIH0KIHR5cGVzLmZvckVhY2godmlzaXQpOwogdGhyb3cgbmV3IFVuYm91bmRUeXBlRXJyb3IobWVzc2FnZSArICI6ICIgKyB1bmJvdW5kVHlwZXMubWFwKGdldFR5cGVOYW1lKS5qb2luKFsgIiwgIiBdKSk7Cn0KZnVuY3Rpb24gX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY2xhc3NfZnVuY3Rpb24ocmF3Q2xhc3NUeXBlLCBtZXRob2ROYW1lLCBhcmdDb3VudCwgcmF3QXJnVHlwZXNBZGRyLCBpbnZva2VyU2lnbmF0dXJlLCByYXdJbnZva2VyLCBmbikgewogdmFyIHJhd0FyZ1R5cGVzID0gaGVhcDMyVmVjdG9yVG9BcnJheShhcmdDb3VudCwgcmF3QXJnVHlwZXNBZGRyKTsKIG1ldGhvZE5hbWUgPSByZWFkTGF0aW4xU3RyaW5nKG1ldGhvZE5hbWUpOwogcmF3SW52b2tlciA9IHJlcXVpcmVGdW5jdGlvbihpbnZva2VyU2lnbmF0dXJlLCByYXdJbnZva2VyKTsKIHdoZW5EZXBlbmRlbnRUeXBlc0FyZVJlc29sdmVkKFtdLCBbIHJhd0NsYXNzVHlwZSBdLCAoZnVuY3Rpb24oY2xhc3NUeXBlKSB7CiAgY2xhc3NUeXBlID0gY2xhc3NUeXBlWzBdOwogIHZhciBodW1hbk5hbWUgPSBjbGFzc1R5cGUubmFtZSArICIuIiArIG1ldGhvZE5hbWU7CiAgZnVuY3Rpb24gdW5ib3VuZFR5cGVzSGFuZGxlcigpIHsKICAgdGhyb3dVbmJvdW5kVHlwZUVycm9yKCJDYW5ub3QgY2FsbCAiICsgaHVtYW5OYW1lICsgIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsIHJhd0FyZ1R5cGVzKTsKICB9CiAgdmFyIHByb3RvID0gY2xhc3NUeXBlLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3RvcjsKICBpZiAodW5kZWZpbmVkID09PSBwcm90b1ttZXRob2ROYW1lXSkgewogICB1bmJvdW5kVHlwZXNIYW5kbGVyLmFyZ0NvdW50ID0gYXJnQ291bnQgLSAxOwogICBwcm90b1ttZXRob2ROYW1lXSA9IHVuYm91bmRUeXBlc0hhbmRsZXI7CiAgfSBlbHNlIHsKICAgZW5zdXJlT3ZlcmxvYWRUYWJsZShwcm90bywgbWV0aG9kTmFtZSwgaHVtYW5OYW1lKTsKICAgcHJvdG9bbWV0aG9kTmFtZV0ub3ZlcmxvYWRUYWJsZVthcmdDb3VudCAtIDFdID0gdW5ib3VuZFR5cGVzSGFuZGxlcjsKICB9CiAgd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQoW10sIHJhd0FyZ1R5cGVzLCAoZnVuY3Rpb24oYXJnVHlwZXMpIHsKICAgdmFyIGludm9rZXJBcmdzQXJyYXkgPSBbIGFyZ1R5cGVzWzBdLCBudWxsIF0uY29uY2F0KGFyZ1R5cGVzLnNsaWNlKDEpKTsKICAgdmFyIGZ1bmMgPSBjcmFmdEludm9rZXJGdW5jdGlvbihodW1hbk5hbWUsIGludm9rZXJBcmdzQXJyYXksIG51bGwsIHJhd0ludm9rZXIsIGZuKTsKICAgaWYgKHVuZGVmaW5lZCA9PT0gcHJvdG9bbWV0aG9kTmFtZV0ub3ZlcmxvYWRUYWJsZSkgewogICAgcHJvdG9bbWV0aG9kTmFtZV0gPSBmdW5jOwogICB9IGVsc2UgewogICAgcHJvdG9bbWV0aG9kTmFtZV0ub3ZlcmxvYWRUYWJsZVthcmdDb3VudCAtIDFdID0gZnVuYzsKICAgfQogICByZXR1cm4gW107CiAgfSkpOwogIHJldHVybiBbXTsKIH0pKTsKfQpmdW5jdGlvbiBfcHRocmVhZF9jbGVhbnVwX3BvcCgpIHsKIGFzc2VydChfcHRocmVhZF9jbGVhbnVwX3B1c2gubGV2ZWwgPT0gX19BVEVYSVRfXy5sZW5ndGgsICJjYW5ub3QgcG9wIGlmIHNvbWV0aGluZyBlbHNlIGFkZGVkIG1lYW53aGlsZSEiKTsKIF9fQVRFWElUX18ucG9wKCk7CiBfcHRocmVhZF9jbGVhbnVwX3B1c2gubGV2ZWwgPSBfX0FURVhJVF9fLmxlbmd0aDsKfQpmdW5jdGlvbiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnKGRlc3QsIHNyYywgbnVtKSB7CiBIRUFQVTguc2V0KEhFQVBVOC5zdWJhcnJheShzcmMsIHNyYyArIG51bSksIGRlc3QpOwogcmV0dXJuIGRlc3Q7Cn0KTW9kdWxlWyJfbWVtY3B5Il0gPSBfbWVtY3B5Owp2YXIgX2xsdm1fcG93X2Y2NCA9IE1hdGhfcG93OwpmdW5jdGlvbiBfc2JyayhieXRlcykgewogdmFyIHNlbGYgPSBfc2JyazsKIGlmICghc2VsZi5jYWxsZWQpIHsKICBEWU5BTUlDVE9QID0gYWxpZ25NZW1vcnlQYWdlKERZTkFNSUNUT1ApOwogIHNlbGYuY2FsbGVkID0gdHJ1ZTsKICBhc3NlcnQoUnVudGltZS5keW5hbWljQWxsb2MpOwogIHNlbGYuYWxsb2MgPSBSdW50aW1lLmR5bmFtaWNBbGxvYzsKICBSdW50aW1lLmR5bmFtaWNBbGxvYyA9IChmdW5jdGlvbigpIHsKICAgYWJvcnQoImNhbm5vdCBkeW5hbWljYWxseSBhbGxvY2F0ZSwgc2JyayBub3cgaGFzIGNvbnRyb2wiKTsKICB9KTsKIH0KIHZhciByZXQgPSBEWU5BTUlDVE9QOwogaWYgKGJ5dGVzICE9IDApIHsKICB2YXIgc3VjY2VzcyA9IHNlbGYuYWxsb2MoYnl0ZXMpOwogIGlmICghc3VjY2VzcykgcmV0dXJuIC0xID4+PiAwOwogfQogcmV0dXJuIHJldDsKfQpNb2R1bGVbIl9tZW1tb3ZlIl0gPSBfbWVtbW92ZTsKdmFyIF9lbXNjcmlwdGVuX3ByZWludm9rZSA9IHRydWU7CnZhciBfQkl0b0QgPSB0cnVlOwpmdW5jdGlvbiBfX19jeGFfcmV0aHJvdygpIHsKIF9fX2N4YV9lbmRfY2F0Y2gucmV0aHJvd24gPSB0cnVlOwogdmFyIHB0ciA9IEVYQ0VQVElPTlMuY2F1Z2h0LnBvcCgpOwogRVhDRVBUSU9OUy5sYXN0ID0gcHRyOwogdGhyb3cgcHRyOwp9CmZ1bmN0aW9uIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KHJhd1R5cGUsIGRhdGFUeXBlSW5kZXgsIG5hbWUpIHsKIHZhciB0eXBlTWFwcGluZyA9IFsgSW50OEFycmF5LCBVaW50OEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5IF07CiB2YXIgVEEgPSB0eXBlTWFwcGluZ1tkYXRhVHlwZUluZGV4XTsKIGZ1bmN0aW9uIGRlY29kZU1lbW9yeVZpZXcoaGFuZGxlKSB7CiAgaGFuZGxlID0gaGFuZGxlID4+IDI7CiAgdmFyIGhlYXAgPSBIRUFQVTMyOwogIHZhciBzaXplID0gaGVhcFtoYW5kbGVdOwogIHZhciBkYXRhID0gaGVhcFtoYW5kbGUgKyAxXTsKICByZXR1cm4gbmV3IFRBKGhlYXBbImJ1ZmZlciJdLCBkYXRhLCBzaXplKTsKIH0KIG5hbWUgPSByZWFkTGF0aW4xU3RyaW5nKG5hbWUpOwogcmVnaXN0ZXJUeXBlKHJhd1R5cGUsIHsKICBuYW1lOiBuYW1lLAogICJmcm9tV2lyZVR5cGUiOiBkZWNvZGVNZW1vcnlWaWV3LAogICJhcmdQYWNrQWR2YW5jZSI6IDgsCiAgInJlYWRWYWx1ZUZyb21Qb2ludGVyIjogZGVjb2RlTWVtb3J5VmlldwogfSwgewogIGlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnM6IHRydWUKIH0pOwp9CnZhciBfZXhwZiA9IE1hdGhfZXhwOwpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl9zdGRfc3RyaW5nKHJhd1R5cGUsIG5hbWUpIHsKIG5hbWUgPSByZWFkTGF0aW4xU3RyaW5nKG5hbWUpOwogcmVnaXN0ZXJUeXBlKHJhd1R5cGUsIHsKICBuYW1lOiBuYW1lLAogICJmcm9tV2lyZVR5cGUiOiAoZnVuY3Rpb24odmFsdWUpIHsKICAgdmFyIGxlbmd0aCA9IEhFQVBVMzJbdmFsdWUgPj4gMl07CiAgIHZhciBhID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgIGFbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEhFQVBVOFt2YWx1ZSArIDQgKyBpXSk7CiAgIH0KICAgX2ZyZWUodmFsdWUpOwogICByZXR1cm4gYS5qb2luKCIiKTsKICB9KSwKICAidG9XaXJlVHlwZSI6IChmdW5jdGlvbihkZXN0cnVjdG9ycywgdmFsdWUpIHsKICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKICAgIHZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpOwogICB9CiAgIGZ1bmN0aW9uIGdldFRBRWxlbWVudCh0YSwgaW5kZXgpIHsKICAgIHJldHVybiB0YVtpbmRleF07CiAgIH0KICAgZnVuY3Rpb24gZ2V0U3RyaW5nRWxlbWVudChzdHJpbmcsIGluZGV4KSB7CiAgICByZXR1cm4gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpOwogICB9CiAgIHZhciBnZXRFbGVtZW50OwogICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICBnZXRFbGVtZW50ID0gZ2V0VEFFbGVtZW50OwogICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50OEFycmF5KSB7CiAgICBnZXRFbGVtZW50ID0gZ2V0VEFFbGVtZW50OwogICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKICAgIGdldEVsZW1lbnQgPSBnZXRTdHJpbmdFbGVtZW50OwogICB9IGVsc2UgewogICAgdGhyb3dCaW5kaW5nRXJyb3IoIkNhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gc3RkOjpzdHJpbmciKTsKICAgfQogICB2YXIgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOwogICB2YXIgcHRyID0gX21hbGxvYyg0ICsgbGVuZ3RoKTsKICAgSEVBUFUzMltwdHIgPj4gMl0gPSBsZW5ndGg7CiAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgIHZhciBjaGFyQ29kZSA9IGdldEVsZW1lbnQodmFsdWUsIGkpOwogICAgaWYgKGNoYXJDb2RlID4gMjU1KSB7CiAgICAgX2ZyZWUocHRyKTsKICAgICB0aHJvd0JpbmRpbmdFcnJvcigiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzIik7CiAgICB9CiAgICBIRUFQVThbcHRyICsgNCArIGldID0gY2hhckNvZGU7CiAgIH0KICAgaWYgKGRlc3RydWN0b3JzICE9PSBudWxsKSB7CiAgICBkZXN0cnVjdG9ycy5wdXNoKF9mcmVlLCBwdHIpOwogICB9CiAgIHJldHVybiBwdHI7CiAgfSksCiAgImFyZ1BhY2tBZHZhbmNlIjogOCwKICAicmVhZFZhbHVlRnJvbVBvaW50ZXIiOiBzaW1wbGVSZWFkVmFsdWVGcm9tUG9pbnRlciwKICBkZXN0cnVjdG9yRnVuY3Rpb246IChmdW5jdGlvbihwdHIpIHsKICAgX2ZyZWUocHRyKTsKICB9KQogfSk7Cn0KZnVuY3Rpb24gX19fYXNzZXJ0X2ZhaWwoY29uZGl0aW9uLCBmaWxlbmFtZSwgbGluZSwgZnVuYykgewogQUJPUlQgPSB0cnVlOwogdGhyb3cgIkFzc2VydGlvbiBmYWlsZWQ6ICIgKyBQb2ludGVyX3N0cmluZ2lmeShjb25kaXRpb24pICsgIiwgYXQ6ICIgKyBbIGZpbGVuYW1lID8gUG9pbnRlcl9zdHJpbmdpZnkoZmlsZW5hbWUpIDogInVua25vd24gZmlsZW5hbWUiLCBsaW5lLCBmdW5jID8gUG9pbnRlcl9zdHJpbmdpZnkoZnVuYykgOiAidW5rbm93biBmdW5jdGlvbiIgXSArICIgYXQgIiArIHN0YWNrVHJhY2UoKTsKfQpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl92b2lkKHJhd1R5cGUsIG5hbWUpIHsKIG5hbWUgPSByZWFkTGF0aW4xU3RyaW5nKG5hbWUpOwogcmVnaXN0ZXJUeXBlKHJhd1R5cGUsIHsKICBpc1ZvaWQ6IHRydWUsCiAgbmFtZTogbmFtZSwKICAiYXJnUGFja0FkdmFuY2UiOiAwLAogICJmcm9tV2lyZVR5cGUiOiAoZnVuY3Rpb24oKSB7CiAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSksCiAgInRvV2lyZVR5cGUiOiAoZnVuY3Rpb24oZGVzdHJ1Y3RvcnMsIG8pIHsKICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9KQogfSk7Cn0KTW9kdWxlWyJfbWVtc2V0Il0gPSBfbWVtc2V0Owp2YXIgX0JEdG9JTG93ID0gdHJ1ZTsKZnVuY3Rpb24gX19fZ3h4X3BlcnNvbmFsaXR5X3YwKCkge30KdmFyIF9sb2dmID0gTWF0aF9sb2c7Ck1vZHVsZVsiX2JpdHNoaWZ0NjRTaGwiXSA9IF9iaXRzaGlmdDY0U2hsOwpmdW5jdGlvbiBfYWJvcnQoKSB7CiBNb2R1bGVbImFib3J0Il0oKTsKfQpmdW5jdGlvbiB2YWxpZGF0ZVRoaXModGhpc18sIGNsYXNzVHlwZSwgaHVtYW5OYW1lKSB7CiBpZiAoISh0aGlzXyBpbnN0YW5jZW9mIE9iamVjdCkpIHsKICB0aHJvd0JpbmRpbmdFcnJvcihodW1hbk5hbWUgKyAnIHdpdGggaW52YWxpZCAidGhpcyI6ICcgKyB0aGlzXyk7CiB9CiBpZiAoISh0aGlzXyBpbnN0YW5jZW9mIGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3IpKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoaHVtYW5OYW1lICsgJyBpbmNvbXBhdGlibGUgd2l0aCAidGhpcyIgb2YgdHlwZSAnICsgdGhpc18uY29uc3RydWN0b3IubmFtZSk7CiB9CiBpZiAoIXRoaXNfLiQkLnB0cikgewogIHRocm93QmluZGluZ0Vycm9yKCJjYW5ub3QgY2FsbCBlbXNjcmlwdGVuIGJpbmRpbmcgbWV0aG9kICIgKyBodW1hbk5hbWUgKyAiIG9uIGRlbGV0ZWQgb2JqZWN0Iik7CiB9CiByZXR1cm4gdXBjYXN0UG9pbnRlcih0aGlzXy4kJC5wdHIsIHRoaXNfLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLCBjbGFzc1R5cGUucmVnaXN0ZXJlZENsYXNzKTsKfQpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eShjbGFzc1R5cGUsIGZpZWxkTmFtZSwgZ2V0dGVyUmV0dXJuVHlwZSwgZ2V0dGVyU2lnbmF0dXJlLCBnZXR0ZXIsIGdldHRlckNvbnRleHQsIHNldHRlckFyZ3VtZW50VHlwZSwgc2V0dGVyU2lnbmF0dXJlLCBzZXR0ZXIsIHNldHRlckNvbnRleHQpIHsKIGZpZWxkTmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcoZmllbGROYW1lKTsKIGdldHRlciA9IHJlcXVpcmVGdW5jdGlvbihnZXR0ZXJTaWduYXR1cmUsIGdldHRlcik7CiB3aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZChbXSwgWyBjbGFzc1R5cGUgXSwgKGZ1bmN0aW9uKGNsYXNzVHlwZSkgewogIGNsYXNzVHlwZSA9IGNsYXNzVHlwZVswXTsKICB2YXIgaHVtYW5OYW1lID0gY2xhc3NUeXBlLm5hbWUgKyAiLiIgKyBmaWVsZE5hbWU7CiAgdmFyIGRlc2MgPSB7CiAgIGdldDogKGZ1bmN0aW9uKCkgewogICAgdGhyb3dVbmJvdW5kVHlwZUVycm9yKCJDYW5ub3QgYWNjZXNzICIgKyBodW1hbk5hbWUgKyAiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIiwgWyBnZXR0ZXJSZXR1cm5UeXBlLCBzZXR0ZXJBcmd1bWVudFR5cGUgXSk7CiAgIH0pLAogICBlbnVtZXJhYmxlOiB0cnVlLAogICBjb25maWd1cmFibGU6IHRydWUKICB9OwogIGlmIChzZXR0ZXIpIHsKICAgZGVzYy5zZXQgPSAoZnVuY3Rpb24oKSB7CiAgICB0aHJvd1VuYm91bmRUeXBlRXJyb3IoIkNhbm5vdCBhY2Nlc3MgIiArIGh1bWFuTmFtZSArICIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLCBbIGdldHRlclJldHVyblR5cGUsIHNldHRlckFyZ3VtZW50VHlwZSBdKTsKICAgfSk7CiAgfSBlbHNlIHsKICAgZGVzYy5zZXQgPSAoZnVuY3Rpb24odikgewogICAgdGhyb3dCaW5kaW5nRXJyb3IoaHVtYW5OYW1lICsgIiBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eSIpOwogICB9KTsKICB9CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsIGZpZWxkTmFtZSwgZGVzYyk7CiAgd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQoW10sIHNldHRlciA/IFsgZ2V0dGVyUmV0dXJuVHlwZSwgc2V0dGVyQXJndW1lbnRUeXBlIF0gOiBbIGdldHRlclJldHVyblR5cGUgXSwgKGZ1bmN0aW9uKHR5cGVzKSB7CiAgIHZhciBnZXR0ZXJSZXR1cm5UeXBlID0gdHlwZXNbMF07CiAgIHZhciBkZXNjID0gewogICAgZ2V0OiAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHB0ciA9IHZhbGlkYXRlVGhpcyh0aGlzLCBjbGFzc1R5cGUsIGh1bWFuTmFtZSArICIgZ2V0dGVyIik7CiAgICAgcmV0dXJuIGdldHRlclJldHVyblR5cGVbImZyb21XaXJlVHlwZSJdKGdldHRlcihnZXR0ZXJDb250ZXh0LCBwdHIpKTsKICAgIH0pLAogICAgZW51bWVyYWJsZTogdHJ1ZQogICB9OwogICBpZiAoc2V0dGVyKSB7CiAgICBzZXR0ZXIgPSByZXF1aXJlRnVuY3Rpb24oc2V0dGVyU2lnbmF0dXJlLCBzZXR0ZXIpOwogICAgdmFyIHNldHRlckFyZ3VtZW50VHlwZSA9IHR5cGVzWzFdOwogICAgZGVzYy5zZXQgPSAoZnVuY3Rpb24odikgewogICAgIHZhciBwdHIgPSB2YWxpZGF0ZVRoaXModGhpcywgY2xhc3NUeXBlLCBodW1hbk5hbWUgKyAiIHNldHRlciIpOwogICAgIHZhciBkZXN0cnVjdG9ycyA9IFtdOwogICAgIHNldHRlcihzZXR0ZXJDb250ZXh0LCBwdHIsIHNldHRlckFyZ3VtZW50VHlwZVsidG9XaXJlVHlwZSJdKGRlc3RydWN0b3JzLCB2KSk7CiAgICAgcnVuRGVzdHJ1Y3RvcnMoZGVzdHJ1Y3RvcnMpOwogICAgfSk7CiAgIH0KICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsIGZpZWxkTmFtZSwgZGVzYyk7CiAgIHJldHVybiBbXTsKICB9KSk7CiAgcmV0dXJuIFtdOwogfSkpOwp9CmZ1bmN0aW9uIF9wdGhyZWFkX29uY2UocHRyLCBmdW5jKSB7CiBpZiAoIV9wdGhyZWFkX29uY2Uuc2VlbikgX3B0aHJlYWRfb25jZS5zZWVuID0ge307CiBpZiAocHRyIGluIF9wdGhyZWFkX29uY2Uuc2VlbikgcmV0dXJuOwogUnVudGltZS5keW5DYWxsKCJ2IiwgZnVuYyk7CiBfcHRocmVhZF9vbmNlLnNlZW5bcHRyXSA9IDE7Cn0KdmFyIF90YW4gPSBNYXRoX3RhbjsKZnVuY3Rpb24gQ2xhc3NIYW5kbGVfaXNBbGlhc09mKG90aGVyKSB7CiBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xhc3NIYW5kbGUpKSB7CiAgcmV0dXJuIGZhbHNlOwogfQogaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBDbGFzc0hhbmRsZSkpIHsKICByZXR1cm4gZmFsc2U7CiB9CiB2YXIgbGVmdENsYXNzID0gdGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzczsKIHZhciBsZWZ0ID0gdGhpcy4kJC5wdHI7CiB2YXIgcmlnaHRDbGFzcyA9IG90aGVyLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzOwogdmFyIHJpZ2h0ID0gb3RoZXIuJCQucHRyOwogd2hpbGUgKGxlZnRDbGFzcy5iYXNlQ2xhc3MpIHsKICBsZWZ0ID0gbGVmdENsYXNzLnVwY2FzdChsZWZ0KTsKICBsZWZ0Q2xhc3MgPSBsZWZ0Q2xhc3MuYmFzZUNsYXNzOwogfQogd2hpbGUgKHJpZ2h0Q2xhc3MuYmFzZUNsYXNzKSB7CiAgcmlnaHQgPSByaWdodENsYXNzLnVwY2FzdChyaWdodCk7CiAgcmlnaHRDbGFzcyA9IHJpZ2h0Q2xhc3MuYmFzZUNsYXNzOwogfQogcmV0dXJuIGxlZnRDbGFzcyA9PT0gcmlnaHRDbGFzcyAmJiBsZWZ0ID09PSByaWdodDsKfQpmdW5jdGlvbiBzaGFsbG93Q29weUludGVybmFsUG9pbnRlcihvKSB7CiByZXR1cm4gewogIGNvdW50OiBvLmNvdW50LAogIGRlbGV0ZVNjaGVkdWxlZDogby5kZWxldGVTY2hlZHVsZWQsCiAgcHJlc2VydmVQb2ludGVyT25EZWxldGU6IG8ucHJlc2VydmVQb2ludGVyT25EZWxldGUsCiAgcHRyOiBvLnB0ciwKICBwdHJUeXBlOiBvLnB0clR5cGUsCiAgc21hcnRQdHI6IG8uc21hcnRQdHIsCiAgc21hcnRQdHJUeXBlOiBvLnNtYXJ0UHRyVHlwZQogfTsKfQpmdW5jdGlvbiB0aHJvd0luc3RhbmNlQWxyZWFkeURlbGV0ZWQob2JqKSB7CiBmdW5jdGlvbiBnZXRJbnN0YW5jZVR5cGVOYW1lKGhhbmRsZSkgewogIHJldHVybiBoYW5kbGUuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZTsKIH0KIHRocm93QmluZGluZ0Vycm9yKGdldEluc3RhbmNlVHlwZU5hbWUob2JqKSArICIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkIik7Cn0KZnVuY3Rpb24gQ2xhc3NIYW5kbGVfY2xvbmUoKSB7CiBpZiAoIXRoaXMuJCQucHRyKSB7CiAgdGhyb3dJbnN0YW5jZUFscmVhZHlEZWxldGVkKHRoaXMpOwogfQogaWYgKHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpIHsKICB0aGlzLiQkLmNvdW50LnZhbHVlICs9IDE7CiAgcmV0dXJuIHRoaXM7CiB9IGVsc2UgewogIHZhciBjbG9uZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7CiAgICQkOiB7CiAgICB2YWx1ZTogc2hhbGxvd0NvcHlJbnRlcm5hbFBvaW50ZXIodGhpcy4kJCkKICAgfQogIH0pOwogIGNsb25lLiQkLmNvdW50LnZhbHVlICs9IDE7CiAgY2xvbmUuJCQuZGVsZXRlU2NoZWR1bGVkID0gZmFsc2U7CiAgcmV0dXJuIGNsb25lOwogfQp9CmZ1bmN0aW9uIHJ1bkRlc3RydWN0b3IoaGFuZGxlKSB7CiB2YXIgJCQgPSBoYW5kbGUuJCQ7CiBpZiAoJCQuc21hcnRQdHIpIHsKICAkJC5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcigkJC5zbWFydFB0cik7CiB9IGVsc2UgewogICQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoJCQucHRyKTsKIH0KfQpmdW5jdGlvbiBDbGFzc0hhbmRsZV9kZWxldGUoKSB7CiBpZiAoIXRoaXMuJCQucHRyKSB7CiAgdGhyb3dJbnN0YW5jZUFscmVhZHlEZWxldGVkKHRoaXMpOwogfQogaWYgKHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkICYmICF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlKSB7CiAgdGhyb3dCaW5kaW5nRXJyb3IoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKTsKIH0KIHRoaXMuJCQuY291bnQudmFsdWUgLT0gMTsKIHZhciB0b0RlbGV0ZSA9IDAgPT09IHRoaXMuJCQuY291bnQudmFsdWU7CiBpZiAodG9EZWxldGUpIHsKICBydW5EZXN0cnVjdG9yKHRoaXMpOwogfQogaWYgKCF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlKSB7CiAgdGhpcy4kJC5zbWFydFB0ciA9IHVuZGVmaW5lZDsKICB0aGlzLiQkLnB0ciA9IHVuZGVmaW5lZDsKIH0KfQpmdW5jdGlvbiBDbGFzc0hhbmRsZV9pc0RlbGV0ZWQoKSB7CiByZXR1cm4gIXRoaXMuJCQucHRyOwp9CmZ1bmN0aW9uIENsYXNzSGFuZGxlX2RlbGV0ZUxhdGVyKCkgewogaWYgKCF0aGlzLiQkLnB0cikgewogIHRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZCh0aGlzKTsKIH0KIGlmICh0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCAmJiAhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSkgewogIHRocm93QmluZGluZ0Vycm9yKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiB9CiBkZWxldGlvblF1ZXVlLnB1c2godGhpcyk7CiBpZiAoZGVsZXRpb25RdWV1ZS5sZW5ndGggPT09IDEgJiYgZGVsYXlGdW5jdGlvbikgewogIGRlbGF5RnVuY3Rpb24oZmx1c2hQZW5kaW5nRGVsZXRlcyk7CiB9CiB0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCA9IHRydWU7CiByZXR1cm4gdGhpczsKfQpmdW5jdGlvbiBpbml0X0NsYXNzSGFuZGxlKCkgewogQ2xhc3NIYW5kbGUucHJvdG90eXBlWyJpc0FsaWFzT2YiXSA9IENsYXNzSGFuZGxlX2lzQWxpYXNPZjsKIENsYXNzSGFuZGxlLnByb3RvdHlwZVsiY2xvbmUiXSA9IENsYXNzSGFuZGxlX2Nsb25lOwogQ2xhc3NIYW5kbGUucHJvdG90eXBlWyJkZWxldGUiXSA9IENsYXNzSGFuZGxlX2RlbGV0ZTsKIENsYXNzSGFuZGxlLnByb3RvdHlwZVsiaXNEZWxldGVkIl0gPSBDbGFzc0hhbmRsZV9pc0RlbGV0ZWQ7CiBDbGFzc0hhbmRsZS5wcm90b3R5cGVbImRlbGV0ZUxhdGVyIl0gPSBDbGFzc0hhbmRsZV9kZWxldGVMYXRlcjsKfQpmdW5jdGlvbiBDbGFzc0hhbmRsZSgpIHt9CmZ1bmN0aW9uIGV4cG9zZVB1YmxpY1N5bWJvbChuYW1lLCB2YWx1ZSwgbnVtQXJndW1lbnRzKSB7CiBpZiAoTW9kdWxlLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgaWYgKHVuZGVmaW5lZCA9PT0gbnVtQXJndW1lbnRzIHx8IHVuZGVmaW5lZCAhPT0gTW9kdWxlW25hbWVdLm92ZXJsb2FkVGFibGUgJiYgdW5kZWZpbmVkICE9PSBNb2R1bGVbbmFtZV0ub3ZlcmxvYWRUYWJsZVtudW1Bcmd1bWVudHNdKSB7CiAgIHRocm93QmluZGluZ0Vycm9yKCJDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyIgKyBuYW1lICsgIicgdHdpY2UiKTsKICB9CiAgZW5zdXJlT3ZlcmxvYWRUYWJsZShNb2R1bGUsIG5hbWUsIG5hbWUpOwogIGlmIChNb2R1bGUuaGFzT3duUHJvcGVydHkobnVtQXJndW1lbnRzKSkgewogICB0aHJvd0JpbmRpbmdFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIiArIG51bUFyZ3VtZW50cyArICIpISIpOwogIH0KICBNb2R1bGVbbmFtZV0ub3ZlcmxvYWRUYWJsZVtudW1Bcmd1bWVudHNdID0gdmFsdWU7CiB9IGVsc2UgewogIE1vZHVsZVtuYW1lXSA9IHZhbHVlOwogIGlmICh1bmRlZmluZWQgIT09IG51bUFyZ3VtZW50cykgewogICBNb2R1bGVbbmFtZV0ubnVtQXJndW1lbnRzID0gbnVtQXJndW1lbnRzOwogIH0KIH0KfQpmdW5jdGlvbiBSZWdpc3RlcmVkQ2xhc3MobmFtZSwgY29uc3RydWN0b3IsIGluc3RhbmNlUHJvdG90eXBlLCByYXdEZXN0cnVjdG9yLCBiYXNlQ2xhc3MsIGdldEFjdHVhbFR5cGUsIHVwY2FzdCwgZG93bmNhc3QpIHsKIHRoaXMubmFtZSA9IG5hbWU7CiB0aGlzLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7CiB0aGlzLmluc3RhbmNlUHJvdG90eXBlID0gaW5zdGFuY2VQcm90b3R5cGU7CiB0aGlzLnJhd0Rlc3RydWN0b3IgPSByYXdEZXN0cnVjdG9yOwogdGhpcy5iYXNlQ2xhc3MgPSBiYXNlQ2xhc3M7CiB0aGlzLmdldEFjdHVhbFR5cGUgPSBnZXRBY3R1YWxUeXBlOwogdGhpcy51cGNhc3QgPSB1cGNhc3Q7CiB0aGlzLmRvd25jYXN0ID0gZG93bmNhc3Q7CiB0aGlzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zID0gW107Cn0KZnVuY3Rpb24gcmVwbGFjZVB1YmxpY1N5bWJvbChuYW1lLCB2YWx1ZSwgbnVtQXJndW1lbnRzKSB7CiBpZiAoIU1vZHVsZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogIHRocm93SW50ZXJuYWxFcnJvcigiUmVwbGFjaW5nIG5vbmV4aXN0YW50IHB1YmxpYyBzeW1ib2wiKTsKIH0KIGlmICh1bmRlZmluZWQgIT09IE1vZHVsZVtuYW1lXS5vdmVybG9hZFRhYmxlICYmIHVuZGVmaW5lZCAhPT0gbnVtQXJndW1lbnRzKSB7CiAgTW9kdWxlW25hbWVdLm92ZXJsb2FkVGFibGVbbnVtQXJndW1lbnRzXSA9IHZhbHVlOwogfSBlbHNlIHsKICBNb2R1bGVbbmFtZV0gPSB2YWx1ZTsKIH0KfQpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcyhyYXdUeXBlLCByYXdQb2ludGVyVHlwZSwgcmF3Q29uc3RQb2ludGVyVHlwZSwgYmFzZUNsYXNzUmF3VHlwZSwgZ2V0QWN0dWFsVHlwZVNpZ25hdHVyZSwgZ2V0QWN0dWFsVHlwZSwgdXBjYXN0U2lnbmF0dXJlLCB1cGNhc3QsIGRvd25jYXN0U2lnbmF0dXJlLCBkb3duY2FzdCwgbmFtZSwgZGVzdHJ1Y3RvclNpZ25hdHVyZSwgcmF3RGVzdHJ1Y3RvcikgewogbmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobmFtZSk7CiBnZXRBY3R1YWxUeXBlID0gcmVxdWlyZUZ1bmN0aW9uKGdldEFjdHVhbFR5cGVTaWduYXR1cmUsIGdldEFjdHVhbFR5cGUpOwogaWYgKHVwY2FzdCkgewogIHVwY2FzdCA9IHJlcXVpcmVGdW5jdGlvbih1cGNhc3RTaWduYXR1cmUsIHVwY2FzdCk7CiB9CiBpZiAoZG93bmNhc3QpIHsKICBkb3duY2FzdCA9IHJlcXVpcmVGdW5jdGlvbihkb3duY2FzdFNpZ25hdHVyZSwgZG93bmNhc3QpOwogfQogcmF3RGVzdHJ1Y3RvciA9IHJlcXVpcmVGdW5jdGlvbihkZXN0cnVjdG9yU2lnbmF0dXJlLCByYXdEZXN0cnVjdG9yKTsKIHZhciBsZWdhbEZ1bmN0aW9uTmFtZSA9IG1ha2VMZWdhbEZ1bmN0aW9uTmFtZShuYW1lKTsKIGV4cG9zZVB1YmxpY1N5bWJvbChsZWdhbEZ1bmN0aW9uTmFtZSwgKGZ1bmN0aW9uKCkgewogIHRocm93VW5ib3VuZFR5cGVFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCAiICsgbmFtZSArICIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLCBbIGJhc2VDbGFzc1Jhd1R5cGUgXSk7CiB9KSk7CiB3aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZChbIHJhd1R5cGUsIHJhd1BvaW50ZXJUeXBlLCByYXdDb25zdFBvaW50ZXJUeXBlIF0sIGJhc2VDbGFzc1Jhd1R5cGUgPyBbIGJhc2VDbGFzc1Jhd1R5cGUgXSA6IFtdLCAoZnVuY3Rpb24oYmFzZSkgewogIGJhc2UgPSBiYXNlWzBdOwogIHZhciBiYXNlQ2xhc3M7CiAgdmFyIGJhc2VQcm90b3R5cGU7CiAgaWYgKGJhc2VDbGFzc1Jhd1R5cGUpIHsKICAgYmFzZUNsYXNzID0gYmFzZS5yZWdpc3RlcmVkQ2xhc3M7CiAgIGJhc2VQcm90b3R5cGUgPSBiYXNlQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGU7CiAgfSBlbHNlIHsKICAgYmFzZVByb3RvdHlwZSA9IENsYXNzSGFuZGxlLnByb3RvdHlwZTsKICB9CiAgdmFyIGNvbnN0cnVjdG9yID0gY3JlYXRlTmFtZWRGdW5jdGlvbihsZWdhbEZ1bmN0aW9uTmFtZSwgKGZ1bmN0aW9uKCkgewogICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBpbnN0YW5jZVByb3RvdHlwZSkgewogICAgdGhyb3cgbmV3IEJpbmRpbmdFcnJvcigiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiICsgbmFtZSk7CiAgIH0KICAgaWYgKHVuZGVmaW5lZCA9PT0gcmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHkpIHsKICAgIHRocm93IG5ldyBCaW5kaW5nRXJyb3IobmFtZSArICIgaGFzIG5vIGFjY2Vzc2libGUgY29uc3RydWN0b3IiKTsKICAgfQogICB2YXIgYm9keSA9IHJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ3VtZW50cy5sZW5ndGhdOwogICBpZiAodW5kZWZpbmVkID09PSBib2R5KSB7CiAgICB0aHJvdyBuZXcgQmluZGluZ0Vycm9yKCJUcmllZCB0byBpbnZva2UgY3RvciBvZiAiICsgbmFtZSArICIgd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgiICsgYXJndW1lbnRzLmxlbmd0aCArICIpIC0gZXhwZWN0ZWQgKCIgKyBPYmplY3Qua2V5cyhyZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keSkudG9TdHJpbmcoKSArICIpIHBhcmFtZXRlcnMgaW5zdGVhZCEiKTsKICAgfQogICByZXR1cm4gYm9keS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogIH0pKTsKICB2YXIgaW5zdGFuY2VQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQcm90b3R5cGUsIHsKICAgY29uc3RydWN0b3I6IHsKICAgIHZhbHVlOiBjb25zdHJ1Y3RvcgogICB9CiAgfSk7CiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gaW5zdGFuY2VQcm90b3R5cGU7CiAgdmFyIHJlZ2lzdGVyZWRDbGFzcyA9IG5ldyBSZWdpc3RlcmVkQ2xhc3MobmFtZSwgY29uc3RydWN0b3IsIGluc3RhbmNlUHJvdG90eXBlLCByYXdEZXN0cnVjdG9yLCBiYXNlQ2xhc3MsIGdldEFjdHVhbFR5cGUsIHVwY2FzdCwgZG93bmNhc3QpOwogIHZhciByZWZlcmVuY2VDb252ZXJ0ZXIgPSBuZXcgUmVnaXN0ZXJlZFBvaW50ZXIobmFtZSwgcmVnaXN0ZXJlZENsYXNzLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwogIHZhciBwb2ludGVyQ29udmVydGVyID0gbmV3IFJlZ2lzdGVyZWRQb2ludGVyKG5hbWUgKyAiKiIsIHJlZ2lzdGVyZWRDbGFzcywgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgdmFyIGNvbnN0UG9pbnRlckNvbnZlcnRlciA9IG5ldyBSZWdpc3RlcmVkUG9pbnRlcihuYW1lICsgIiBjb25zdCoiLCByZWdpc3RlcmVkQ2xhc3MsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CiAgcmVnaXN0ZXJlZFBvaW50ZXJzW3Jhd1R5cGVdID0gewogICBwb2ludGVyVHlwZTogcG9pbnRlckNvbnZlcnRlciwKICAgY29uc3RQb2ludGVyVHlwZTogY29uc3RQb2ludGVyQ29udmVydGVyCiAgfTsKICByZXBsYWNlUHVibGljU3ltYm9sKGxlZ2FsRnVuY3Rpb25OYW1lLCBjb25zdHJ1Y3Rvcik7CiAgcmV0dXJuIFsgcmVmZXJlbmNlQ29udmVydGVyLCBwb2ludGVyQ29udmVydGVyLCBjb25zdFBvaW50ZXJDb252ZXJ0ZXIgXTsKIH0pKTsKfQpmdW5jdGlvbiBfX19sb2NrKCkge30KZnVuY3Rpb24gX19fdW5sb2NrKCkge30KZnVuY3Rpb24gX3B0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSB7CiByZXR1cm4gUFRIUkVBRF9TUEVDSUZJQ1trZXldIHx8IDA7Cn0KdmFyIF9mYWJzID0gTWF0aF9hYnM7CnZhciBfZmxvb3IgPSBNYXRoX2Zsb29yOwp2YXIgX3NxcnQgPSBNYXRoX3NxcnQ7CmZ1bmN0aW9uIF9lbWJpbmRfcmVwcih2KSB7CiBpZiAodiA9PT0gbnVsbCkgewogIHJldHVybiAibnVsbCI7CiB9CiB2YXIgdCA9IHR5cGVvZiB2OwogaWYgKHQgPT09ICJvYmplY3QiIHx8IHQgPT09ICJhcnJheSIgfHwgdCA9PT0gImZ1bmN0aW9uIikgewogIHJldHVybiB2LnRvU3RyaW5nKCk7CiB9IGVsc2UgewogIHJldHVybiAiIiArIHY7CiB9Cn0KZnVuY3Rpb24gaW50ZWdlclJlYWRWYWx1ZUZyb21Qb2ludGVyKG5hbWUsIHNoaWZ0LCBzaWduZWQpIHsKIHN3aXRjaCAoc2hpZnQpIHsKIGNhc2UgMDoKICByZXR1cm4gc2lnbmVkID8gZnVuY3Rpb24gcmVhZFM4RnJvbVBvaW50ZXIocG9pbnRlcikgewogICByZXR1cm4gSEVBUDhbcG9pbnRlcl07CiAgfSA6IGZ1bmN0aW9uIHJlYWRVOEZyb21Qb2ludGVyKHBvaW50ZXIpIHsKICAgcmV0dXJuIEhFQVBVOFtwb2ludGVyXTsKICB9OwogY2FzZSAxOgogIHJldHVybiBzaWduZWQgPyBmdW5jdGlvbiByZWFkUzE2RnJvbVBvaW50ZXIocG9pbnRlcikgewogICByZXR1cm4gSEVBUDE2W3BvaW50ZXIgPj4gMV07CiAgfSA6IGZ1bmN0aW9uIHJlYWRVMTZGcm9tUG9pbnRlcihwb2ludGVyKSB7CiAgIHJldHVybiBIRUFQVTE2W3BvaW50ZXIgPj4gMV07CiAgfTsKIGNhc2UgMjoKICByZXR1cm4gc2lnbmVkID8gZnVuY3Rpb24gcmVhZFMzMkZyb21Qb2ludGVyKHBvaW50ZXIpIHsKICAgcmV0dXJuIEhFQVAzMltwb2ludGVyID4+IDJdOwogIH0gOiBmdW5jdGlvbiByZWFkVTMyRnJvbVBvaW50ZXIocG9pbnRlcikgewogICByZXR1cm4gSEVBUFUzMltwb2ludGVyID4+IDJdOwogIH07CiBkZWZhdWx0OgogIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gaW50ZWdlciB0eXBlOiAiICsgbmFtZSk7CiB9Cn0KZnVuY3Rpb24gX19lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcihwcmltaXRpdmVUeXBlLCBuYW1lLCBzaXplLCBtaW5SYW5nZSwgbWF4UmFuZ2UpIHsKIG5hbWUgPSByZWFkTGF0aW4xU3RyaW5nKG5hbWUpOwogaWYgKG1heFJhbmdlID09PSAtMSkgewogIG1heFJhbmdlID0gNDI5NDk2NzI5NTsKIH0KIHZhciBzaGlmdCA9IGdldFNoaWZ0RnJvbVNpemUoc2l6ZSk7CiB2YXIgZnJvbVdpcmVUeXBlID0gKGZ1bmN0aW9uKHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlOwogfSk7CiBpZiAobWluUmFuZ2UgPT09IDApIHsKICB2YXIgYml0c2hpZnQgPSAzMiAtIDggKiBzaXplOwogIGZyb21XaXJlVHlwZSA9IChmdW5jdGlvbih2YWx1ZSkgewogICByZXR1cm4gdmFsdWUgPDwgYml0c2hpZnQgPj4+IGJpdHNoaWZ0OwogIH0pOwogfQogcmVnaXN0ZXJUeXBlKHByaW1pdGl2ZVR5cGUsIHsKICBuYW1lOiBuYW1lLAogICJmcm9tV2lyZVR5cGUiOiBmcm9tV2lyZVR5cGUsCiAgInRvV2lyZVR5cGUiOiAoZnVuY3Rpb24oZGVzdHJ1Y3RvcnMsIHZhbHVlKSB7CiAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJudW1iZXIiICYmIHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAiJyArIF9lbWJpbmRfcmVwcih2YWx1ZSkgKyAnIiB0byAnICsgdGhpcy5uYW1lKTsKICAgfQogICBpZiAodmFsdWUgPCBtaW5SYW5nZSB8fCB2YWx1ZSA+IG1heFJhbmdlKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXNzaW5nIGEgbnVtYmVyICInICsgX2VtYmluZF9yZXByKHZhbHVlKSArICciIGZyb20gSlMgc2lkZSB0byBDL0MrKyBzaWRlIHRvIGFuIGFyZ3VtZW50IG9mIHR5cGUgIicgKyBuYW1lICsgJyIsIHdoaWNoIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIFsnICsgbWluUmFuZ2UgKyAiLCAiICsgbWF4UmFuZ2UgKyAiXSEiKTsKICAgfQogICByZXR1cm4gdmFsdWUgfCAwOwogIH0pLAogICJhcmdQYWNrQWR2YW5jZSI6IDgsCiAgInJlYWRWYWx1ZUZyb21Qb2ludGVyIjogaW50ZWdlclJlYWRWYWx1ZUZyb21Qb2ludGVyKG5hbWUsIHNoaWZ0LCBtaW5SYW5nZSAhPT0gMCksCiAgZGVzdHJ1Y3RvckZ1bmN0aW9uOiBudWxsCiB9KTsKfQpmdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfbWFpbl9sb29wX3RpbWluZyhtb2RlLCB2YWx1ZSkgewogQnJvd3Nlci5tYWluTG9vcC50aW1pbmdNb2RlID0gbW9kZTsKIEJyb3dzZXIubWFpbkxvb3AudGltaW5nVmFsdWUgPSB2YWx1ZTsKIGlmICghQnJvd3Nlci5tYWluTG9vcC5mdW5jKSB7CiAgY29uc29sZS5lcnJvcigiZW1zY3JpcHRlbl9zZXRfbWFpbl9sb29wX3RpbWluZzogQ2Fubm90IHNldCB0aW1pbmcgbW9kZSBmb3IgbWFpbiBsb29wIHNpbmNlIGEgbWFpbiBsb29wIGRvZXMgbm90IGV4aXN0ISBDYWxsIGVtc2NyaXB0ZW5fc2V0X21haW5fbG9vcCBmaXJzdCB0byBzZXQgb25lIHVwLiIpOwogIHJldHVybiAxOwogfQogaWYgKG1vZGUgPT0gMCkgewogIEJyb3dzZXIubWFpbkxvb3Auc2NoZWR1bGVyID0gZnVuY3Rpb24gQnJvd3Nlcl9tYWluTG9vcF9zY2hlZHVsZXJfc2V0VGltZW91dCgpIHsKICAgc2V0VGltZW91dChCcm93c2VyLm1haW5Mb29wLnJ1bm5lciwgdmFsdWUpOwogIH07CiAgQnJvd3Nlci5tYWluTG9vcC5tZXRob2QgPSAidGltZW91dCI7CiB9IGVsc2UgaWYgKG1vZGUgPT0gMSkgewogIEJyb3dzZXIubWFpbkxvb3Auc2NoZWR1bGVyID0gZnVuY3Rpb24gQnJvd3Nlcl9tYWluTG9vcF9zY2hlZHVsZXJfckFGKCkgewogICBCcm93c2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZShCcm93c2VyLm1haW5Mb29wLnJ1bm5lcik7CiAgfTsKICBCcm93c2VyLm1haW5Mb29wLm1ldGhvZCA9ICJyQUYiOwogfSBlbHNlIGlmIChtb2RlID09IDIpIHsKICBpZiAoIXdpbmRvd1sic2V0SW1tZWRpYXRlIl0pIHsKICAgdmFyIHNldEltbWVkaWF0ZXMgPSBbXTsKICAgdmFyIGVtc2NyaXB0ZW5NYWluTG9vcE1lc3NhZ2VJZCA9ICJfX2VtY2MiOwogICBmdW5jdGlvbiBCcm93c2VyX3NldEltbWVkaWF0ZV9tZXNzYWdlSGFuZGxlcihldmVudCkgewogICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gd2luZG93ICYmIGV2ZW50LmRhdGEgPT09IGVtc2NyaXB0ZW5NYWluTG9vcE1lc3NhZ2VJZCkgewogICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgIHNldEltbWVkaWF0ZXMuc2hpZnQoKSgpOwogICAgfQogICB9CiAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgQnJvd3Nlcl9zZXRJbW1lZGlhdGVfbWVzc2FnZUhhbmRsZXIsIHRydWUpOwogICB3aW5kb3dbInNldEltbWVkaWF0ZSJdID0gZnVuY3Rpb24gQnJvd3Nlcl9lbXVsYXRlZF9zZXRJbW1lZGlhdGUoZnVuYykgewogICAgc2V0SW1tZWRpYXRlcy5wdXNoKGZ1bmMpOwogICAgd2luZG93LnBvc3RNZXNzYWdlKGVtc2NyaXB0ZW5NYWluTG9vcE1lc3NhZ2VJZCwgIioiKTsKICAgfTsKICB9CiAgQnJvd3Nlci5tYWluTG9vcC5zY2hlZHVsZXIgPSBmdW5jdGlvbiBCcm93c2VyX21haW5Mb29wX3NjaGVkdWxlcl9zZXRJbW1lZGlhdGUoKSB7CiAgIHdpbmRvd1sic2V0SW1tZWRpYXRlIl0oQnJvd3Nlci5tYWluTG9vcC5ydW5uZXIpOwogIH07CiAgQnJvd3Nlci5tYWluTG9vcC5tZXRob2QgPSAiaW1tZWRpYXRlIjsKIH0KIHJldHVybiAwOwp9CmZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3AoZnVuYywgZnBzLCBzaW11bGF0ZUluZmluaXRlTG9vcCwgYXJnLCBub1NldFRpbWluZykgewogTW9kdWxlWyJub0V4aXRSdW50aW1lIl0gPSB0cnVlOwogYXNzZXJ0KCFCcm93c2VyLm1haW5Mb29wLmZ1bmMsICJlbXNjcmlwdGVuX3NldF9tYWluX2xvb3A6IHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBtYWluIGxvb3AgZnVuY3Rpb24gYXQgb25jZTogY2FsbCBlbXNjcmlwdGVuX2NhbmNlbF9tYWluX2xvb3AgdG8gY2FuY2VsIHRoZSBwcmV2aW91cyBvbmUgYmVmb3JlIHNldHRpbmcgYSBuZXcgb25lIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMuIik7CiBCcm93c2VyLm1haW5Mb29wLmZ1bmMgPSBmdW5jOwogQnJvd3Nlci5tYWluTG9vcC5hcmcgPSBhcmc7CiB2YXIgdGhpc01haW5Mb29wSWQgPSBCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcDsKIEJyb3dzZXIubWFpbkxvb3AucnVubmVyID0gZnVuY3Rpb24gQnJvd3Nlcl9tYWluTG9vcF9ydW5uZXIoKSB7CiAgaWYgKEFCT1JUKSByZXR1cm47CiAgaWYgKEJyb3dzZXIubWFpbkxvb3AucXVldWUubGVuZ3RoID4gMCkgewogICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpOwogICB2YXIgYmxvY2tlciA9IEJyb3dzZXIubWFpbkxvb3AucXVldWUuc2hpZnQoKTsKICAgYmxvY2tlci5mdW5jKGJsb2NrZXIuYXJnKTsKICAgaWYgKEJyb3dzZXIubWFpbkxvb3AucmVtYWluaW5nQmxvY2tlcnMpIHsKICAgIHZhciByZW1haW5pbmcgPSBCcm93c2VyLm1haW5Mb29wLnJlbWFpbmluZ0Jsb2NrZXJzOwogICAgdmFyIG5leHQgPSByZW1haW5pbmcgJSAxID09IDAgPyByZW1haW5pbmcgLSAxIDogTWF0aC5mbG9vcihyZW1haW5pbmcpOwogICAgaWYgKGJsb2NrZXIuY291bnRlZCkgewogICAgIEJyb3dzZXIubWFpbkxvb3AucmVtYWluaW5nQmxvY2tlcnMgPSBuZXh0OwogICAgfSBlbHNlIHsKICAgICBuZXh0ID0gbmV4dCArIC41OwogICAgIEJyb3dzZXIubWFpbkxvb3AucmVtYWluaW5nQmxvY2tlcnMgPSAoOCAqIHJlbWFpbmluZyArIG5leHQpIC8gOTsKICAgIH0KICAgfQogICBjb25zb2xlLmxvZygnbWFpbiBsb29wIGJsb2NrZXIgIicgKyBibG9ja2VyLm5hbWUgKyAnIiB0b29rICcgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0KSArICIgbXMiKTsKICAgQnJvd3Nlci5tYWluTG9vcC51cGRhdGVTdGF0dXMoKTsKICAgc2V0VGltZW91dChCcm93c2VyLm1haW5Mb29wLnJ1bm5lciwgMCk7CiAgIHJldHVybjsKICB9CiAgaWYgKHRoaXNNYWluTG9vcElkIDwgQnJvd3Nlci5tYWluTG9vcC5jdXJyZW50bHlSdW5uaW5nTWFpbmxvb3ApIHJldHVybjsKICBCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRGcmFtZU51bWJlciA9IEJyb3dzZXIubWFpbkxvb3AuY3VycmVudEZyYW1lTnVtYmVyICsgMSB8IDA7CiAgaWYgKEJyb3dzZXIubWFpbkxvb3AudGltaW5nTW9kZSA9PSAxICYmIEJyb3dzZXIubWFpbkxvb3AudGltaW5nVmFsdWUgPiAxICYmIEJyb3dzZXIubWFpbkxvb3AuY3VycmVudEZyYW1lTnVtYmVyICUgQnJvd3Nlci5tYWluTG9vcC50aW1pbmdWYWx1ZSAhPSAwKSB7CiAgIEJyb3dzZXIubWFpbkxvb3Auc2NoZWR1bGVyKCk7CiAgIHJldHVybjsKICB9CiAgaWYgKEJyb3dzZXIubWFpbkxvb3AubWV0aG9kID09PSAidGltZW91dCIgJiYgTW9kdWxlLmN0eCkgewogICBNb2R1bGUucHJpbnRFcnIoIkxvb2tzIGxpa2UgeW91IGFyZSByZW5kZXJpbmcgd2l0aG91dCB1c2luZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZm9yIHRoZSBtYWluIGxvb3AuIFlvdSBzaG91bGQgdXNlIDAgZm9yIHRoZSBmcmFtZSByYXRlIGluIGVtc2NyaXB0ZW5fc2V0X21haW5fbG9vcCBpbiBvcmRlciB0byB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBhcyB0aGF0IGNhbiBncmVhdGx5IGltcHJvdmUgeW91ciBmcmFtZSByYXRlcyEiKTsKICAgQnJvd3Nlci5tYWluTG9vcC5tZXRob2QgPSAiIjsKICB9CiAgQnJvd3Nlci5tYWluTG9vcC5ydW5JdGVyKChmdW5jdGlvbigpIHsKICAgaWYgKHR5cGVvZiBhcmcgIT09ICJ1bmRlZmluZWQiKSB7CiAgICBSdW50aW1lLmR5bkNhbGwoInZpIiwgZnVuYywgWyBhcmcgXSk7CiAgIH0gZWxzZSB7CiAgICBSdW50aW1lLmR5bkNhbGwoInYiLCBmdW5jKTsKICAgfQogIH0pKTsKICBpZiAodGhpc01haW5Mb29wSWQgPCBCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcCkgcmV0dXJuOwogIGlmICh0eXBlb2YgU0RMID09PSAib2JqZWN0IiAmJiBTREwuYXVkaW8gJiYgU0RMLmF1ZGlvLnF1ZXVlTmV3QXVkaW9EYXRhKSBTREwuYXVkaW8ucXVldWVOZXdBdWRpb0RhdGEoKTsKICBCcm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcigpOwogfTsKIGlmICghbm9TZXRUaW1pbmcpIHsKICBpZiAoZnBzICYmIGZwcyA+IDApIF9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3BfdGltaW5nKDAsIDFlMyAvIGZwcyk7IGVsc2UgX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcF90aW1pbmcoMSwgMSk7CiAgQnJvd3Nlci5tYWluTG9vcC5zY2hlZHVsZXIoKTsKIH0KIGlmIChzaW11bGF0ZUluZmluaXRlTG9vcCkgewogIHRocm93ICJTaW11bGF0ZUluZmluaXRlTG9vcCI7CiB9Cn0KdmFyIEJyb3dzZXIgPSB7CiBtYWluTG9vcDogewogIHNjaGVkdWxlcjogbnVsbCwKICBtZXRob2Q6ICIiLAogIGN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcDogMCwKICBmdW5jOiBudWxsLAogIGFyZzogMCwKICB0aW1pbmdNb2RlOiAwLAogIHRpbWluZ1ZhbHVlOiAwLAogIGN1cnJlbnRGcmFtZU51bWJlcjogMCwKICBxdWV1ZTogW10sCiAgcGF1c2U6IChmdW5jdGlvbigpIHsKICAgQnJvd3Nlci5tYWluTG9vcC5zY2hlZHVsZXIgPSBudWxsOwogICBCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcCsrOwogIH0pLAogIHJlc3VtZTogKGZ1bmN0aW9uKCkgewogICBCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcCsrOwogICB2YXIgdGltaW5nTW9kZSA9IEJyb3dzZXIubWFpbkxvb3AudGltaW5nTW9kZTsKICAgdmFyIHRpbWluZ1ZhbHVlID0gQnJvd3Nlci5tYWluTG9vcC50aW1pbmdWYWx1ZTsKICAgdmFyIGZ1bmMgPSBCcm93c2VyLm1haW5Mb29wLmZ1bmM7CiAgIEJyb3dzZXIubWFpbkxvb3AuZnVuYyA9IG51bGw7CiAgIF9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3AoZnVuYywgMCwgZmFsc2UsIEJyb3dzZXIubWFpbkxvb3AuYXJnLCB0cnVlKTsKICAgX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcF90aW1pbmcodGltaW5nTW9kZSwgdGltaW5nVmFsdWUpOwogICBCcm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcigpOwogIH0pLAogIHVwZGF0ZVN0YXR1czogKGZ1bmN0aW9uKCkgewogICBpZiAoTW9kdWxlWyJzZXRTdGF0dXMiXSkgewogICAgdmFyIG1lc3NhZ2UgPSBNb2R1bGVbInN0YXR1c01lc3NhZ2UiXSB8fCAiUGxlYXNlIHdhaXQuLi4iOwogICAgdmFyIHJlbWFpbmluZyA9IEJyb3dzZXIubWFpbkxvb3AucmVtYWluaW5nQmxvY2tlcnM7CiAgICB2YXIgZXhwZWN0ZWQgPSBCcm93c2VyLm1haW5Mb29wLmV4cGVjdGVkQmxvY2tlcnM7CiAgICBpZiAocmVtYWluaW5nKSB7CiAgICAgaWYgKHJlbWFpbmluZyA8IGV4cGVjdGVkKSB7CiAgICAgIE1vZHVsZVsic2V0U3RhdHVzIl0obWVzc2FnZSArICIgKCIgKyAoZXhwZWN0ZWQgLSByZW1haW5pbmcpICsgIi8iICsgZXhwZWN0ZWQgKyAiKSIpOwogICAgIH0gZWxzZSB7CiAgICAgIE1vZHVsZVsic2V0U3RhdHVzIl0obWVzc2FnZSk7CiAgICAgfQogICAgfSBlbHNlIHsKICAgICBNb2R1bGVbInNldFN0YXR1cyJdKCIiKTsKICAgIH0KICAgfQogIH0pLAogIHJ1bkl0ZXI6IChmdW5jdGlvbihmdW5jKSB7CiAgIGlmIChBQk9SVCkgcmV0dXJuOwogICBpZiAoTW9kdWxlWyJwcmVNYWluTG9vcCJdKSB7CiAgICB2YXIgcHJlUmV0ID0gTW9kdWxlWyJwcmVNYWluTG9vcCJdKCk7CiAgICBpZiAocHJlUmV0ID09PSBmYWxzZSkgewogICAgIHJldHVybjsKICAgIH0KICAgfQogICB0cnkgewogICAgZnVuYygpOwogICB9IGNhdGNoIChlKSB7CiAgICBpZiAoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXMpIHsKICAgICByZXR1cm47CiAgICB9IGVsc2UgewogICAgIGlmIChlICYmIHR5cGVvZiBlID09PSAib2JqZWN0IiAmJiBlLnN0YWNrKSBNb2R1bGUucHJpbnRFcnIoImV4Y2VwdGlvbiB0aHJvd246ICIgKyBbIGUsIGUuc3RhY2sgXSk7CiAgICAgdGhyb3cgZTsKICAgIH0KICAgfQogICBpZiAoTW9kdWxlWyJwb3N0TWFpbkxvb3AiXSkgTW9kdWxlWyJwb3N0TWFpbkxvb3AiXSgpOwogIH0pCiB9LAogaXNGdWxsU2NyZWVuOiBmYWxzZSwKIHBvaW50ZXJMb2NrOiBmYWxzZSwKIG1vZHVsZUNvbnRleHRDcmVhdGVkQ2FsbGJhY2tzOiBbXSwKIHdvcmtlcnM6IFtdLAogaW5pdDogKGZ1bmN0aW9uKCkgewogIGlmICghTW9kdWxlWyJwcmVsb2FkUGx1Z2lucyJdKSBNb2R1bGVbInByZWxvYWRQbHVnaW5zIl0gPSBbXTsKICBpZiAoQnJvd3Nlci5pbml0dGVkKSByZXR1cm47CiAgQnJvd3Nlci5pbml0dGVkID0gdHJ1ZTsKICB0cnkgewogICBuZXcgQmxvYjsKICAgQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3IgPSB0cnVlOwogIH0gY2F0Y2ggKGUpIHsKICAgQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3IgPSBmYWxzZTsKICAgY29uc29sZS5sb2coIndhcm5pbmc6IG5vIGJsb2IgY29uc3RydWN0b3IsIGNhbm5vdCBjcmVhdGUgYmxvYnMgd2l0aCBtaW1ldHlwZXMiKTsKICB9CiAgQnJvd3Nlci5CbG9iQnVpbGRlciA9IHR5cGVvZiBNb3pCbG9iQnVpbGRlciAhPSAidW5kZWZpbmVkIiA/IE1vekJsb2JCdWlsZGVyIDogdHlwZW9mIFdlYktpdEJsb2JCdWlsZGVyICE9ICJ1bmRlZmluZWQiID8gV2ViS2l0QmxvYkJ1aWxkZXIgOiAhQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3IgPyBjb25zb2xlLmxvZygid2FybmluZzogbm8gQmxvYkJ1aWxkZXIiKSA6IG51bGw7CiAgQnJvd3Nlci5VUkxPYmplY3QgPSB0eXBlb2Ygd2luZG93ICE9ICJ1bmRlZmluZWQiID8gd2luZG93LlVSTCA/IHdpbmRvdy5VUkwgOiB3aW5kb3cud2Via2l0VVJMIDogdW5kZWZpbmVkOwogIGlmICghTW9kdWxlLm5vSW1hZ2VEZWNvZGluZyAmJiB0eXBlb2YgQnJvd3Nlci5VUkxPYmplY3QgPT09ICJ1bmRlZmluZWQiKSB7CiAgIGNvbnNvbGUubG9nKCJ3YXJuaW5nOiBCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgY3JlYXRpbmcgb2JqZWN0IFVSTHMuIEJ1aWx0LWluIGJyb3dzZXIgaW1hZ2UgZGVjb2Rpbmcgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiIpOwogICBNb2R1bGUubm9JbWFnZURlY29kaW5nID0gdHJ1ZTsKICB9CiAgdmFyIGltYWdlUGx1Z2luID0ge307CiAgaW1hZ2VQbHVnaW5bImNhbkhhbmRsZSJdID0gZnVuY3Rpb24gaW1hZ2VQbHVnaW5fY2FuSGFuZGxlKG5hbWUpIHsKICAgcmV0dXJuICFNb2R1bGUubm9JbWFnZURlY29kaW5nICYmIC9cLihqcGd8anBlZ3xwbmd8Ym1wKSQvaS50ZXN0KG5hbWUpOwogIH07CiAgaW1hZ2VQbHVnaW5bImhhbmRsZSJdID0gZnVuY3Rpb24gaW1hZ2VQbHVnaW5faGFuZGxlKGJ5dGVBcnJheSwgbmFtZSwgb25sb2FkLCBvbmVycm9yKSB7CiAgIHZhciBiID0gbnVsbDsKICAgaWYgKEJyb3dzZXIuaGFzQmxvYkNvbnN0cnVjdG9yKSB7CiAgICB0cnkgewogICAgIGIgPSBuZXcgQmxvYihbIGJ5dGVBcnJheSBdLCB7CiAgICAgIHR5cGU6IEJyb3dzZXIuZ2V0TWltZXR5cGUobmFtZSkKICAgICB9KTsKICAgICBpZiAoYi5zaXplICE9PSBieXRlQXJyYXkubGVuZ3RoKSB7CiAgICAgIGIgPSBuZXcgQmxvYihbIChuZXcgVWludDhBcnJheShieXRlQXJyYXkpKS5idWZmZXIgXSwgewogICAgICAgdHlwZTogQnJvd3Nlci5nZXRNaW1ldHlwZShuYW1lKQogICAgICB9KTsKICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgUnVudGltZS53YXJuT25jZSgiQmxvYiBjb25zdHJ1Y3RvciBwcmVzZW50IGJ1dCBmYWlsczogIiArIGUgKyAiOyBmYWxsaW5nIGJhY2sgdG8gYmxvYiBidWlsZGVyIik7CiAgICB9CiAgIH0KICAgaWYgKCFiKSB7CiAgICB2YXIgYmIgPSBuZXcgQnJvd3Nlci5CbG9iQnVpbGRlcjsKICAgIGJiLmFwcGVuZCgobmV3IFVpbnQ4QXJyYXkoYnl0ZUFycmF5KSkuYnVmZmVyKTsKICAgIGIgPSBiYi5nZXRCbG9iKCk7CiAgIH0KICAgdmFyIHVybCA9IEJyb3dzZXIuVVJMT2JqZWN0LmNyZWF0ZU9iamVjdFVSTChiKTsKICAgYXNzZXJ0KHR5cGVvZiB1cmwgPT0gInN0cmluZyIsICJjcmVhdGVPYmplY3RVUkwgbXVzdCByZXR1cm4gYSB1cmwgYXMgYSBzdHJpbmciKTsKICAgdmFyIGltZyA9IG5ldyBJbWFnZTsKICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uIGltZ19vbmxvYWQoKSB7CiAgICBhc3NlcnQoaW1nLmNvbXBsZXRlLCAiSW1hZ2UgIiArIG5hbWUgKyAiIGNvdWxkIG5vdCBiZSBkZWNvZGVkIik7CiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7CiAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDsKICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKICAgIE1vZHVsZVsicHJlbG9hZGVkSW1hZ2VzIl1bbmFtZV0gPSBjYW52YXM7CiAgICBCcm93c2VyLlVSTE9iamVjdC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgIGlmIChvbmxvYWQpIG9ubG9hZChieXRlQXJyYXkpOwogICB9OwogICBpbWcub25lcnJvciA9IGZ1bmN0aW9uIGltZ19vbmVycm9yKGV2ZW50KSB7CiAgICBjb25zb2xlLmxvZygiSW1hZ2UgIiArIHVybCArICIgY291bGQgbm90IGJlIGRlY29kZWQiKTsKICAgIGlmIChvbmVycm9yKSBvbmVycm9yKCk7CiAgIH07CiAgIGltZy5zcmMgPSB1cmw7CiAgfTsKICBNb2R1bGVbInByZWxvYWRQbHVnaW5zIl0ucHVzaChpbWFnZVBsdWdpbik7CiAgdmFyIGF1ZGlvUGx1Z2luID0ge307CiAgYXVkaW9QbHVnaW5bImNhbkhhbmRsZSJdID0gZnVuY3Rpb24gYXVkaW9QbHVnaW5fY2FuSGFuZGxlKG5hbWUpIHsKICAgcmV0dXJuICFNb2R1bGUubm9BdWRpb0RlY29kaW5nICYmIG5hbWUuc3Vic3RyKC00KSBpbiB7CiAgICAiLm9nZyI6IDEsCiAgICAiLndhdiI6IDEsCiAgICAiLm1wMyI6IDEKICAgfTsKICB9OwogIGF1ZGlvUGx1Z2luWyJoYW5kbGUiXSA9IGZ1bmN0aW9uIGF1ZGlvUGx1Z2luX2hhbmRsZShieXRlQXJyYXksIG5hbWUsIG9ubG9hZCwgb25lcnJvcikgewogICB2YXIgZG9uZSA9IGZhbHNlOwogICBmdW5jdGlvbiBmaW5pc2goYXVkaW8pIHsKICAgIGlmIChkb25lKSByZXR1cm47CiAgICBkb25lID0gdHJ1ZTsKICAgIE1vZHVsZVsicHJlbG9hZGVkQXVkaW9zIl1bbmFtZV0gPSBhdWRpbzsKICAgIGlmIChvbmxvYWQpIG9ubG9hZChieXRlQXJyYXkpOwogICB9CiAgIGZ1bmN0aW9uIGZhaWwoKSB7CiAgICBpZiAoZG9uZSkgcmV0dXJuOwogICAgZG9uZSA9IHRydWU7CiAgICBNb2R1bGVbInByZWxvYWRlZEF1ZGlvcyJdW25hbWVdID0gbmV3IEF1ZGlvOwogICAgaWYgKG9uZXJyb3IpIG9uZXJyb3IoKTsKICAgfQogICBpZiAoQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3IpIHsKICAgIHRyeSB7CiAgICAgdmFyIGIgPSBuZXcgQmxvYihbIGJ5dGVBcnJheSBdLCB7CiAgICAgIHR5cGU6IEJyb3dzZXIuZ2V0TWltZXR5cGUobmFtZSkKICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICByZXR1cm4gZmFpbCgpOwogICAgfQogICAgdmFyIHVybCA9IEJyb3dzZXIuVVJMT2JqZWN0LmNyZWF0ZU9iamVjdFVSTChiKTsKICAgIGFzc2VydCh0eXBlb2YgdXJsID09ICJzdHJpbmciLCAiY3JlYXRlT2JqZWN0VVJMIG11c3QgcmV0dXJuIGEgdXJsIGFzIGEgc3RyaW5nIik7CiAgICB2YXIgYXVkaW8gPSBuZXcgQXVkaW87CiAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCJjYW5wbGF5dGhyb3VnaCIsIChmdW5jdGlvbigpIHsKICAgICBmaW5pc2goYXVkaW8pOwogICAgfSksIGZhbHNlKTsKICAgIGF1ZGlvLm9uZXJyb3IgPSBmdW5jdGlvbiBhdWRpb19vbmVycm9yKGV2ZW50KSB7CiAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICBjb25zb2xlLmxvZygid2FybmluZzogYnJvd3NlciBjb3VsZCBub3QgZnVsbHkgZGVjb2RlIGF1ZGlvICIgKyBuYW1lICsgIiwgdHJ5aW5nIHNsb3dlciBiYXNlNjQgYXBwcm9hY2giKTsKICAgICBmdW5jdGlvbiBlbmNvZGU2NChkYXRhKSB7CiAgICAgIHZhciBCQVNFID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwogICAgICB2YXIgUEFEID0gIj0iOwogICAgICB2YXIgcmV0ID0gIiI7CiAgICAgIHZhciBsZWZ0Y2hhciA9IDA7CiAgICAgIHZhciBsZWZ0Yml0cyA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgbGVmdGNoYXIgPSBsZWZ0Y2hhciA8PCA4IHwgZGF0YVtpXTsKICAgICAgIGxlZnRiaXRzICs9IDg7CiAgICAgICB3aGlsZSAobGVmdGJpdHMgPj0gNikgewogICAgICAgIHZhciBjdXJyID0gbGVmdGNoYXIgPj4gbGVmdGJpdHMgLSA2ICYgNjM7CiAgICAgICAgbGVmdGJpdHMgLT0gNjsKICAgICAgICByZXQgKz0gQkFTRVtjdXJyXTsKICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGVmdGJpdHMgPT0gMikgewogICAgICAgcmV0ICs9IEJBU0VbKGxlZnRjaGFyICYgMykgPDwgNF07CiAgICAgICByZXQgKz0gUEFEICsgUEFEOwogICAgICB9IGVsc2UgaWYgKGxlZnRiaXRzID09IDQpIHsKICAgICAgIHJldCArPSBCQVNFWyhsZWZ0Y2hhciAmIDE1KSA8PCAyXTsKICAgICAgIHJldCArPSBQQUQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAgICAgYXVkaW8uc3JjID0gImRhdGE6YXVkaW8veC0iICsgbmFtZS5zdWJzdHIoLTMpICsgIjtiYXNlNjQsIiArIGVuY29kZTY0KGJ5dGVBcnJheSk7CiAgICAgZmluaXNoKGF1ZGlvKTsKICAgIH07CiAgICBhdWRpby5zcmMgPSB1cmw7CiAgICBCcm93c2VyLnNhZmVTZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICBmaW5pc2goYXVkaW8pOwogICAgfSksIDFlNCk7CiAgIH0gZWxzZSB7CiAgICByZXR1cm4gZmFpbCgpOwogICB9CiAgfTsKICBNb2R1bGVbInByZWxvYWRQbHVnaW5zIl0ucHVzaChhdWRpb1BsdWdpbik7CiAgdmFyIGNhbnZhcyA9IE1vZHVsZVsiY2FudmFzIl07CiAgZnVuY3Rpb24gcG9pbnRlckxvY2tDaGFuZ2UoKSB7CiAgIEJyb3dzZXIucG9pbnRlckxvY2sgPSBkb2N1bWVudFsicG9pbnRlckxvY2tFbGVtZW50Il0gPT09IGNhbnZhcyB8fCBkb2N1bWVudFsibW96UG9pbnRlckxvY2tFbGVtZW50Il0gPT09IGNhbnZhcyB8fCBkb2N1bWVudFsid2Via2l0UG9pbnRlckxvY2tFbGVtZW50Il0gPT09IGNhbnZhcyB8fCBkb2N1bWVudFsibXNQb2ludGVyTG9ja0VsZW1lbnQiXSA9PT0gY2FudmFzOwogIH0KICBpZiAoY2FudmFzKSB7CiAgIGNhbnZhcy5yZXF1ZXN0UG9pbnRlckxvY2sgPSBjYW52YXNbInJlcXVlc3RQb2ludGVyTG9jayJdIHx8IGNhbnZhc1sibW96UmVxdWVzdFBvaW50ZXJMb2NrIl0gfHwgY2FudmFzWyJ3ZWJraXRSZXF1ZXN0UG9pbnRlckxvY2siXSB8fCBjYW52YXNbIm1zUmVxdWVzdFBvaW50ZXJMb2NrIl0gfHwgKGZ1bmN0aW9uKCkge30pOwogICBjYW52YXMuZXhpdFBvaW50ZXJMb2NrID0gZG9jdW1lbnRbImV4aXRQb2ludGVyTG9jayJdIHx8IGRvY3VtZW50WyJtb3pFeGl0UG9pbnRlckxvY2siXSB8fCBkb2N1bWVudFsid2Via2l0RXhpdFBvaW50ZXJMb2NrIl0gfHwgZG9jdW1lbnRbIm1zRXhpdFBvaW50ZXJMb2NrIl0gfHwgKGZ1bmN0aW9uKCkge30pOwogICBjYW52YXMuZXhpdFBvaW50ZXJMb2NrID0gY2FudmFzLmV4aXRQb2ludGVyTG9jay5iaW5kKGRvY3VtZW50KTsKICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxvY2tjaGFuZ2UiLCBwb2ludGVyTG9ja0NoYW5nZSwgZmFsc2UpOwogICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIHBvaW50ZXJMb2NrQ2hhbmdlLCBmYWxzZSk7CiAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdHBvaW50ZXJsb2NrY2hhbmdlIiwgcG9pbnRlckxvY2tDaGFuZ2UsIGZhbHNlKTsKICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibXNwb2ludGVybG9ja2NoYW5nZSIsIHBvaW50ZXJMb2NrQ2hhbmdlLCBmYWxzZSk7CiAgIGlmIChNb2R1bGVbImVsZW1lbnRQb2ludGVyTG9jayJdKSB7CiAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZnVuY3Rpb24oZXYpIHsKICAgICBpZiAoIUJyb3dzZXIucG9pbnRlckxvY2sgJiYgY2FudmFzLnJlcXVlc3RQb2ludGVyTG9jaykgewogICAgICBjYW52YXMucmVxdWVzdFBvaW50ZXJMb2NrKCk7CiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfQogICAgfSksIGZhbHNlKTsKICAgfQogIH0KIH0pLAogY3JlYXRlQ29udGV4dDogKGZ1bmN0aW9uKGNhbnZhcywgdXNlV2ViR0wsIHNldEluTW9kdWxlLCB3ZWJHTENvbnRleHRBdHRyaWJ1dGVzKSB7CiAgaWYgKHVzZVdlYkdMICYmIE1vZHVsZS5jdHggJiYgY2FudmFzID09IE1vZHVsZS5jYW52YXMpIHJldHVybiBNb2R1bGUuY3R4OwogIHZhciBjdHg7CiAgdmFyIGNvbnRleHRIYW5kbGU7CiAgaWYgKHVzZVdlYkdMKSB7CiAgIHZhciBjb250ZXh0QXR0cmlidXRlcyA9IHsKICAgIGFudGlhbGlhczogZmFsc2UsCiAgICBhbHBoYTogZmFsc2UKICAgfTsKICAgaWYgKHdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpIHsKICAgIGZvciAodmFyIGF0dHJpYnV0ZSBpbiB3ZWJHTENvbnRleHRBdHRyaWJ1dGVzKSB7CiAgICAgY29udGV4dEF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IHdlYkdMQ29udGV4dEF0dHJpYnV0ZXNbYXR0cmlidXRlXTsKICAgIH0KICAgfQogICBjb250ZXh0SGFuZGxlID0gR0wuY3JlYXRlQ29udGV4dChjYW52YXMsIGNvbnRleHRBdHRyaWJ1dGVzKTsKICAgaWYgKGNvbnRleHRIYW5kbGUpIHsKICAgIGN0eCA9IEdMLmdldENvbnRleHQoY29udGV4dEhhbmRsZSkuR0xjdHg7CiAgIH0KICAgY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJibGFjayI7CiAgfSBlbHNlIHsKICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgfQogIGlmICghY3R4KSByZXR1cm4gbnVsbDsKICBpZiAoc2V0SW5Nb2R1bGUpIHsKICAgaWYgKCF1c2VXZWJHTCkgYXNzZXJ0KHR5cGVvZiBHTGN0eCA9PT0gInVuZGVmaW5lZCIsICJjYW5ub3Qgc2V0IGluIG1vZHVsZSBpZiBHTGN0eCBpcyB1c2VkLCBidXQgd2UgYXJlIGEgbm9uLUdMIGNvbnRleHQgdGhhdCB3b3VsZCByZXBsYWNlIGl0Iik7CiAgIE1vZHVsZS5jdHggPSBjdHg7CiAgIGlmICh1c2VXZWJHTCkgR0wubWFrZUNvbnRleHRDdXJyZW50KGNvbnRleHRIYW5kbGUpOwogICBNb2R1bGUudXNlV2ViR0wgPSB1c2VXZWJHTDsKICAgQnJvd3Nlci5tb2R1bGVDb250ZXh0Q3JlYXRlZENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbihjYWxsYmFjaykgewogICAgY2FsbGJhY2soKTsKICAgfSkpOwogICBCcm93c2VyLmluaXQoKTsKICB9CiAgcmV0dXJuIGN0eDsKIH0pLAogZGVzdHJveUNvbnRleHQ6IChmdW5jdGlvbihjYW52YXMsIHVzZVdlYkdMLCBzZXRJbk1vZHVsZSkge30pLAogZnVsbFNjcmVlbkhhbmRsZXJzSW5zdGFsbGVkOiBmYWxzZSwKIGxvY2tQb2ludGVyOiB1bmRlZmluZWQsCiByZXNpemVDYW52YXM6IHVuZGVmaW5lZCwKIHJlcXVlc3RGdWxsU2NyZWVuOiAoZnVuY3Rpb24obG9ja1BvaW50ZXIsIHJlc2l6ZUNhbnZhcywgdnJEZXZpY2UpIHsKICBCcm93c2VyLmxvY2tQb2ludGVyID0gbG9ja1BvaW50ZXI7CiAgQnJvd3Nlci5yZXNpemVDYW52YXMgPSByZXNpemVDYW52YXM7CiAgQnJvd3Nlci52ckRldmljZSA9IHZyRGV2aWNlOwogIGlmICh0eXBlb2YgQnJvd3Nlci5sb2NrUG9pbnRlciA9PT0gInVuZGVmaW5lZCIpIEJyb3dzZXIubG9ja1BvaW50ZXIgPSB0cnVlOwogIGlmICh0eXBlb2YgQnJvd3Nlci5yZXNpemVDYW52YXMgPT09ICJ1bmRlZmluZWQiKSBCcm93c2VyLnJlc2l6ZUNhbnZhcyA9IGZhbHNlOwogIGlmICh0eXBlb2YgQnJvd3Nlci52ckRldmljZSA9PT0gInVuZGVmaW5lZCIpIEJyb3dzZXIudnJEZXZpY2UgPSBudWxsOwogIHZhciBjYW52YXMgPSBNb2R1bGVbImNhbnZhcyJdOwogIGZ1bmN0aW9uIGZ1bGxTY3JlZW5DaGFuZ2UoKSB7CiAgIEJyb3dzZXIuaXNGdWxsU2NyZWVuID0gZmFsc2U7CiAgIHZhciBjYW52YXNDb250YWluZXIgPSBjYW52YXMucGFyZW50Tm9kZTsKICAgaWYgKChkb2N1bWVudFsid2Via2l0RnVsbFNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsibW96RnVsbFNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsibW96RnVsbHNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsiZnVsbFNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsiZnVsbHNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsibXNGdWxsU2NyZWVuRWxlbWVudCJdIHx8IGRvY3VtZW50WyJtc0Z1bGxzY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbIndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCJdKSA9PT0gY2FudmFzQ29udGFpbmVyKSB7CiAgICBjYW52YXMuY2FuY2VsRnVsbFNjcmVlbiA9IGRvY3VtZW50WyJjYW5jZWxGdWxsU2NyZWVuIl0gfHwgZG9jdW1lbnRbIm1vekNhbmNlbEZ1bGxTY3JlZW4iXSB8fCBkb2N1bWVudFsid2Via2l0Q2FuY2VsRnVsbFNjcmVlbiJdIHx8IGRvY3VtZW50WyJtc0V4aXRGdWxsc2NyZWVuIl0gfHwgZG9jdW1lbnRbImV4aXRGdWxsc2NyZWVuIl0gfHwgKGZ1bmN0aW9uKCkge30pOwogICAgY2FudmFzLmNhbmNlbEZ1bGxTY3JlZW4gPSBjYW52YXMuY2FuY2VsRnVsbFNjcmVlbi5iaW5kKGRvY3VtZW50KTsKICAgIGlmIChCcm93c2VyLmxvY2tQb2ludGVyKSBjYW52YXMucmVxdWVzdFBvaW50ZXJMb2NrKCk7CiAgICBCcm93c2VyLmlzRnVsbFNjcmVlbiA9IHRydWU7CiAgICBpZiAoQnJvd3Nlci5yZXNpemVDYW52YXMpIEJyb3dzZXIuc2V0RnVsbFNjcmVlbkNhbnZhc1NpemUoKTsKICAgfSBlbHNlIHsKICAgIGNhbnZhc0NvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjYW52YXMsIGNhbnZhc0NvbnRhaW5lcik7CiAgICBjYW52YXNDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYW52YXNDb250YWluZXIpOwogICAgaWYgKEJyb3dzZXIucmVzaXplQ2FudmFzKSBCcm93c2VyLnNldFdpbmRvd2VkQ2FudmFzU2l6ZSgpOwogICB9CiAgIGlmIChNb2R1bGVbIm9uRnVsbFNjcmVlbiJdKSBNb2R1bGVbIm9uRnVsbFNjcmVlbiJdKEJyb3dzZXIuaXNGdWxsU2NyZWVuKTsKICAgQnJvd3Nlci51cGRhdGVDYW52YXNEaW1lbnNpb25zKGNhbnZhcyk7CiAgfQogIGlmICghQnJvd3Nlci5mdWxsU2NyZWVuSGFuZGxlcnNJbnN0YWxsZWQpIHsKICAgQnJvd3Nlci5mdWxsU2NyZWVuSGFuZGxlcnNJbnN0YWxsZWQgPSB0cnVlOwogICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmdWxsc2NyZWVuY2hhbmdlIiwgZnVsbFNjcmVlbkNoYW5nZSwgZmFsc2UpOwogICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwgZnVsbFNjcmVlbkNoYW5nZSwgZmFsc2UpOwogICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwgZnVsbFNjcmVlbkNoYW5nZSwgZmFsc2UpOwogICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJNU0Z1bGxzY3JlZW5DaGFuZ2UiLCBmdWxsU2NyZWVuQ2hhbmdlLCBmYWxzZSk7CiAgfQogIHZhciBjYW52YXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBjYW52YXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2FudmFzQ29udGFpbmVyLCBjYW52YXMpOwogIGNhbnZhc0NvbnRhaW5lci5hcHBlbmRDaGlsZChjYW52YXMpOwogIGNhbnZhc0NvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbiA9IGNhbnZhc0NvbnRhaW5lclsicmVxdWVzdEZ1bGxTY3JlZW4iXSB8fCBjYW52YXNDb250YWluZXJbIm1velJlcXVlc3RGdWxsU2NyZWVuIl0gfHwgY2FudmFzQ29udGFpbmVyWyJtc1JlcXVlc3RGdWxsc2NyZWVuIl0gfHwgKGNhbnZhc0NvbnRhaW5lclsid2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4iXSA/IChmdW5jdGlvbigpIHsKICAgY2FudmFzQ29udGFpbmVyWyJ3ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbiJdKEVsZW1lbnRbIkFMTE9XX0tFWUJPQVJEX0lOUFVUIl0pOwogIH0pIDogbnVsbCk7CiAgaWYgKHZyRGV2aWNlKSB7CiAgIGNhbnZhc0NvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbih7CiAgICB2ckRpc3BsYXk6IHZyRGV2aWNlCiAgIH0pOwogIH0gZWxzZSB7CiAgIGNhbnZhc0NvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpOwogIH0KIH0pLAogbmV4dFJBRjogMCwKIGZha2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IChmdW5jdGlvbihmdW5jKSB7CiAgdmFyIG5vdyA9IERhdGUubm93KCk7CiAgaWYgKEJyb3dzZXIubmV4dFJBRiA9PT0gMCkgewogICBCcm93c2VyLm5leHRSQUYgPSBub3cgKyAxZTMgLyA2MDsKICB9IGVsc2UgewogICB3aGlsZSAobm93ICsgMiA+PSBCcm93c2VyLm5leHRSQUYpIHsKICAgIEJyb3dzZXIubmV4dFJBRiArPSAxZTMgLyA2MDsKICAgfQogIH0KICB2YXIgZGVsYXkgPSBNYXRoLm1heChCcm93c2VyLm5leHRSQUYgLSBub3csIDApOwogIHNldFRpbWVvdXQoZnVuYywgZGVsYXkpOwogfSksCiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKSB7CiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSB7CiAgIEJyb3dzZXIuZmFrZVJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTsKICB9IGVsc2UgewogICBpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHsKICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3dbInJlcXVlc3RBbmltYXRpb25GcmFtZSJdIHx8IHdpbmRvd1sibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIl0gfHwgd2luZG93WyJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXSB8fCB3aW5kb3dbIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl0gfHwgd2luZG93WyJvUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl0gfHwgQnJvd3Nlci5mYWtlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogICB9CiAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7CiAgfQogfSwKIHNhZmVDYWxsYmFjazogKGZ1bmN0aW9uKGZ1bmMpIHsKICByZXR1cm4gKGZ1bmN0aW9uKCkgewogICBpZiAoIUFCT1JUKSByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogIH0pOwogfSksCiBhbGxvd0FzeW5jQ2FsbGJhY2tzOiB0cnVlLAogcXVldWVkQXN5bmNDYWxsYmFja3M6IFtdLAogcGF1c2VBc3luY0NhbGxiYWNrczogKGZ1bmN0aW9uKCkgewogIEJyb3dzZXIuYWxsb3dBc3luY0NhbGxiYWNrcyA9IGZhbHNlOwogfSksCiByZXN1bWVBc3luY0NhbGxiYWNrczogKGZ1bmN0aW9uKCkgewogIEJyb3dzZXIuYWxsb3dBc3luY0NhbGxiYWNrcyA9IHRydWU7CiAgaWYgKEJyb3dzZXIucXVldWVkQXN5bmNDYWxsYmFja3MubGVuZ3RoID4gMCkgewogICB2YXIgY2FsbGJhY2tzID0gQnJvd3Nlci5xdWV1ZWRBc3luY0NhbGxiYWNrczsKICAgQnJvd3Nlci5xdWV1ZWRBc3luY0NhbGxiYWNrcyA9IFtdOwogICBjYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24oZnVuYykgewogICAgZnVuYygpOwogICB9KSk7CiAgfQogfSksCiBzYWZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAoZnVuY3Rpb24oZnVuYykgewogIHJldHVybiBCcm93c2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKSB7CiAgIGlmIChBQk9SVCkgcmV0dXJuOwogICBpZiAoQnJvd3Nlci5hbGxvd0FzeW5jQ2FsbGJhY2tzKSB7CiAgICBmdW5jKCk7CiAgIH0gZWxzZSB7CiAgICBCcm93c2VyLnF1ZXVlZEFzeW5jQ2FsbGJhY2tzLnB1c2goZnVuYyk7CiAgIH0KICB9KSk7CiB9KSwKIHNhZmVTZXRUaW1lb3V0OiAoZnVuY3Rpb24oZnVuYywgdGltZW91dCkgewogIE1vZHVsZVsibm9FeGl0UnVudGltZSJdID0gdHJ1ZTsKICByZXR1cm4gc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgIGlmIChBQk9SVCkgcmV0dXJuOwogICBpZiAoQnJvd3Nlci5hbGxvd0FzeW5jQ2FsbGJhY2tzKSB7CiAgICBmdW5jKCk7CiAgIH0gZWxzZSB7CiAgICBCcm93c2VyLnF1ZXVlZEFzeW5jQ2FsbGJhY2tzLnB1c2goZnVuYyk7CiAgIH0KICB9KSwgdGltZW91dCk7CiB9KSwKIHNhZmVTZXRJbnRlcnZhbDogKGZ1bmN0aW9uKGZ1bmMsIHRpbWVvdXQpIHsKICBNb2R1bGVbIm5vRXhpdFJ1bnRpbWUiXSA9IHRydWU7CiAgcmV0dXJuIHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgaWYgKEFCT1JUKSByZXR1cm47CiAgIGlmIChCcm93c2VyLmFsbG93QXN5bmNDYWxsYmFja3MpIHsKICAgIGZ1bmMoKTsKICAgfQogIH0pLCB0aW1lb3V0KTsKIH0pLAogZ2V0TWltZXR5cGU6IChmdW5jdGlvbihuYW1lKSB7CiAgcmV0dXJuIHsKICAgImpwZyI6ICJpbWFnZS9qcGVnIiwKICAgImpwZWciOiAiaW1hZ2UvanBlZyIsCiAgICJwbmciOiAiaW1hZ2UvcG5nIiwKICAgImJtcCI6ICJpbWFnZS9ibXAiLAogICAib2dnIjogImF1ZGlvL29nZyIsCiAgICJ3YXYiOiAiYXVkaW8vd2F2IiwKICAgIm1wMyI6ICJhdWRpby9tcGVnIgogIH1bbmFtZS5zdWJzdHIobmFtZS5sYXN0SW5kZXhPZigiLiIpICsgMSldOwogfSksCiBnZXRVc2VyTWVkaWE6IChmdW5jdGlvbihmdW5jKSB7CiAgaWYgKCF3aW5kb3cuZ2V0VXNlck1lZGlhKSB7CiAgIHdpbmRvdy5nZXRVc2VyTWVkaWEgPSBuYXZpZ2F0b3JbImdldFVzZXJNZWRpYSJdIHx8IG5hdmlnYXRvclsibW96R2V0VXNlck1lZGlhIl07CiAgfQogIHdpbmRvdy5nZXRVc2VyTWVkaWEoZnVuYyk7CiB9KSwKIGdldE1vdmVtZW50WDogKGZ1bmN0aW9uKGV2ZW50KSB7CiAgcmV0dXJuIGV2ZW50WyJtb3ZlbWVudFgiXSB8fCBldmVudFsibW96TW92ZW1lbnRYIl0gfHwgZXZlbnRbIndlYmtpdE1vdmVtZW50WCJdIHx8IDA7CiB9KSwKIGdldE1vdmVtZW50WTogKGZ1bmN0aW9uKGV2ZW50KSB7CiAgcmV0dXJuIGV2ZW50WyJtb3ZlbWVudFkiXSB8fCBldmVudFsibW96TW92ZW1lbnRZIl0gfHwgZXZlbnRbIndlYmtpdE1vdmVtZW50WSJdIHx8IDA7CiB9KSwKIGdldE1vdXNlV2hlZWxEZWx0YTogKGZ1bmN0aW9uKGV2ZW50KSB7CiAgdmFyIGRlbHRhID0gMDsKICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKICBjYXNlICJET01Nb3VzZVNjcm9sbCI6CiAgIGRlbHRhID0gZXZlbnQuZGV0YWlsOwogICBicmVhazsKICBjYXNlICJtb3VzZXdoZWVsIjoKICAgZGVsdGEgPSBldmVudC53aGVlbERlbHRhOwogICBicmVhazsKICBjYXNlICJ3aGVlbCI6CiAgIGRlbHRhID0gZXZlbnRbImRlbHRhWSJdOwogICBicmVhazsKICBkZWZhdWx0OgogICB0aHJvdyAidW5yZWNvZ25pemVkIG1vdXNlIHdoZWVsIGV2ZW50OiAiICsgZXZlbnQudHlwZTsKICB9CiAgcmV0dXJuIGRlbHRhOwogfSksCiBtb3VzZVg6IDAsCiBtb3VzZVk6IDAsCiBtb3VzZU1vdmVtZW50WDogMCwKIG1vdXNlTW92ZW1lbnRZOiAwLAogdG91Y2hlczoge30sCiBsYXN0VG91Y2hlczoge30sCiBjYWxjdWxhdGVNb3VzZUV2ZW50OiAoZnVuY3Rpb24oZXZlbnQpIHsKICBpZiAoQnJvd3Nlci5wb2ludGVyTG9jaykgewogICBpZiAoZXZlbnQudHlwZSAhPSAibW91c2Vtb3ZlIiAmJiAibW96TW92ZW1lbnRYIiBpbiBldmVudCkgewogICAgQnJvd3Nlci5tb3VzZU1vdmVtZW50WCA9IEJyb3dzZXIubW91c2VNb3ZlbWVudFkgPSAwOwogICB9IGVsc2UgewogICAgQnJvd3Nlci5tb3VzZU1vdmVtZW50WCA9IEJyb3dzZXIuZ2V0TW92ZW1lbnRYKGV2ZW50KTsKICAgIEJyb3dzZXIubW91c2VNb3ZlbWVudFkgPSBCcm93c2VyLmdldE1vdmVtZW50WShldmVudCk7CiAgIH0KICAgaWYgKHR5cGVvZiBTREwgIT0gInVuZGVmaW5lZCIpIHsKICAgIEJyb3dzZXIubW91c2VYID0gU0RMLm1vdXNlWCArIEJyb3dzZXIubW91c2VNb3ZlbWVudFg7CiAgICBCcm93c2VyLm1vdXNlWSA9IFNETC5tb3VzZVkgKyBCcm93c2VyLm1vdXNlTW92ZW1lbnRZOwogICB9IGVsc2UgewogICAgQnJvd3Nlci5tb3VzZVggKz0gQnJvd3Nlci5tb3VzZU1vdmVtZW50WDsKICAgIEJyb3dzZXIubW91c2VZICs9IEJyb3dzZXIubW91c2VNb3ZlbWVudFk7CiAgIH0KICB9IGVsc2UgewogICB2YXIgcmVjdCA9IE1vZHVsZVsiY2FudmFzIl0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgIHZhciBjdyA9IE1vZHVsZVsiY2FudmFzIl0ud2lkdGg7CiAgIHZhciBjaCA9IE1vZHVsZVsiY2FudmFzIl0uaGVpZ2h0OwogICB2YXIgc2Nyb2xsWCA9IHR5cGVvZiB3aW5kb3cuc2Nyb2xsWCAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuc2Nyb2xsWCA6IHdpbmRvdy5wYWdlWE9mZnNldDsKICAgdmFyIHNjcm9sbFkgPSB0eXBlb2Ygd2luZG93LnNjcm9sbFkgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LnNjcm9sbFkgOiB3aW5kb3cucGFnZVlPZmZzZXQ7CiAgIGFzc2VydCh0eXBlb2Ygc2Nyb2xsWCAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHNjcm9sbFkgIT09ICJ1bmRlZmluZWQiLCAiVW5hYmxlIHRvIHJldHJpZXZlIHNjcm9sbCBwb3NpdGlvbiwgbW91c2UgcG9zaXRpb25zIGxpa2VseSBicm9rZW4uIik7CiAgIGlmIChldmVudC50eXBlID09PSAidG91Y2hzdGFydCIgfHwgZXZlbnQudHlwZSA9PT0gInRvdWNoZW5kIiB8fCBldmVudC50eXBlID09PSAidG91Y2htb3ZlIikgewogICAgdmFyIHRvdWNoID0gZXZlbnQudG91Y2g7CiAgICBpZiAodG91Y2ggPT09IHVuZGVmaW5lZCkgewogICAgIHJldHVybjsKICAgIH0KICAgIHZhciBhZGp1c3RlZFggPSB0b3VjaC5wYWdlWCAtIChzY3JvbGxYICsgcmVjdC5sZWZ0KTsKICAgIHZhciBhZGp1c3RlZFkgPSB0b3VjaC5wYWdlWSAtIChzY3JvbGxZICsgcmVjdC50b3ApOwogICAgYWRqdXN0ZWRYID0gYWRqdXN0ZWRYICogKGN3IC8gcmVjdC53aWR0aCk7CiAgICBhZGp1c3RlZFkgPSBhZGp1c3RlZFkgKiAoY2ggLyByZWN0LmhlaWdodCk7CiAgICB2YXIgY29vcmRzID0gewogICAgIHg6IGFkanVzdGVkWCwKICAgICB5OiBhZGp1c3RlZFkKICAgIH07CiAgICBpZiAoZXZlbnQudHlwZSA9PT0gInRvdWNoc3RhcnQiKSB7CiAgICAgQnJvd3Nlci5sYXN0VG91Y2hlc1t0b3VjaC5pZGVudGlmaWVyXSA9IGNvb3JkczsKICAgICBCcm93c2VyLnRvdWNoZXNbdG91Y2guaWRlbnRpZmllcl0gPSBjb29yZHM7CiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICJ0b3VjaGVuZCIgfHwgZXZlbnQudHlwZSA9PT0gInRvdWNobW92ZSIpIHsKICAgICB2YXIgbGFzdCA9IEJyb3dzZXIudG91Y2hlc1t0b3VjaC5pZGVudGlmaWVyXTsKICAgICBpZiAoIWxhc3QpIGxhc3QgPSBjb29yZHM7CiAgICAgQnJvd3Nlci5sYXN0VG91Y2hlc1t0b3VjaC5pZGVudGlmaWVyXSA9IGxhc3Q7CiAgICAgQnJvd3Nlci50b3VjaGVzW3RvdWNoLmlkZW50aWZpZXJdID0gY29vcmRzOwogICAgfQogICAgcmV0dXJuOwogICB9CiAgIHZhciB4ID0gZXZlbnQucGFnZVggLSAoc2Nyb2xsWCArIHJlY3QubGVmdCk7CiAgIHZhciB5ID0gZXZlbnQucGFnZVkgLSAoc2Nyb2xsWSArIHJlY3QudG9wKTsKICAgeCA9IHggKiAoY3cgLyByZWN0LndpZHRoKTsKICAgeSA9IHkgKiAoY2ggLyByZWN0LmhlaWdodCk7CiAgIEJyb3dzZXIubW91c2VNb3ZlbWVudFggPSB4IC0gQnJvd3Nlci5tb3VzZVg7CiAgIEJyb3dzZXIubW91c2VNb3ZlbWVudFkgPSB5IC0gQnJvd3Nlci5tb3VzZVk7CiAgIEJyb3dzZXIubW91c2VYID0geDsKICAgQnJvd3Nlci5tb3VzZVkgPSB5OwogIH0KIH0pLAogeGhyTG9hZDogKGZ1bmN0aW9uKHVybCwgb25sb2FkLCBvbmVycm9yKSB7CiAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKICB4aHIub3BlbigiR0VUIiwgdXJsLCB0cnVlKTsKICB4aHIucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIjsKICB4aHIub25sb2FkID0gZnVuY3Rpb24geGhyX29ubG9hZCgpIHsKICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8IHhoci5zdGF0dXMgPT0gMCAmJiB4aHIucmVzcG9uc2UpIHsKICAgIG9ubG9hZCh4aHIucmVzcG9uc2UpOwogICB9IGVsc2UgewogICAgb25lcnJvcigpOwogICB9CiAgfTsKICB4aHIub25lcnJvciA9IG9uZXJyb3I7CiAgeGhyLnNlbmQobnVsbCk7CiB9KSwKIGFzeW5jTG9hZDogKGZ1bmN0aW9uKHVybCwgb25sb2FkLCBvbmVycm9yLCBub1J1bkRlcCkgewogIEJyb3dzZXIueGhyTG9hZCh1cmwsIChmdW5jdGlvbihhcnJheUJ1ZmZlcikgewogICBhc3NlcnQoYXJyYXlCdWZmZXIsICdMb2FkaW5nIGRhdGEgZmlsZSAiJyArIHVybCArICciIGZhaWxlZCAobm8gYXJyYXlCdWZmZXIpLicpOwogICBvbmxvYWQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTsKICAgaWYgKCFub1J1bkRlcCkgcmVtb3ZlUnVuRGVwZW5kZW5jeSgiYWwgIiArIHVybCk7CiAgfSksIChmdW5jdGlvbihldmVudCkgewogICBpZiAob25lcnJvcikgewogICAgb25lcnJvcigpOwogICB9IGVsc2UgewogICAgdGhyb3cgJ0xvYWRpbmcgZGF0YSBmaWxlICInICsgdXJsICsgJyIgZmFpbGVkLic7CiAgIH0KICB9KSk7CiAgaWYgKCFub1J1bkRlcCkgYWRkUnVuRGVwZW5kZW5jeSgiYWwgIiArIHVybCk7CiB9KSwKIHJlc2l6ZUxpc3RlbmVyczogW10sCiB1cGRhdGVSZXNpemVMaXN0ZW5lcnM6IChmdW5jdGlvbigpIHsKICB2YXIgY2FudmFzID0gTW9kdWxlWyJjYW52YXMiXTsKICBCcm93c2VyLnJlc2l6ZUxpc3RlbmVycy5mb3JFYWNoKChmdW5jdGlvbihsaXN0ZW5lcikgewogICBsaXN0ZW5lcihjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogIH0pKTsKIH0pLAogc2V0Q2FudmFzU2l6ZTogKGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIG5vVXBkYXRlcykgewogIHZhciBjYW52YXMgPSBNb2R1bGVbImNhbnZhcyJdOwogIEJyb3dzZXIudXBkYXRlQ2FudmFzRGltZW5zaW9ucyhjYW52YXMsIHdpZHRoLCBoZWlnaHQpOwogIGlmICghbm9VcGRhdGVzKSBCcm93c2VyLnVwZGF0ZVJlc2l6ZUxpc3RlbmVycygpOwogfSksCiB3aW5kb3dlZFdpZHRoOiAwLAogd2luZG93ZWRIZWlnaHQ6IDAsCiBzZXRGdWxsU2NyZWVuQ2FudmFzU2l6ZTogKGZ1bmN0aW9uKCkgewogIGlmICh0eXBlb2YgU0RMICE9ICJ1bmRlZmluZWQiKSB7CiAgIHZhciBmbGFncyA9IEhFQVBVMzJbU0RMLnNjcmVlbiArIFJ1bnRpbWUuUVVBTlRVTV9TSVpFICogMCA+PiAyXTsKICAgZmxhZ3MgPSBmbGFncyB8IDgzODg2MDg7CiAgIEhFQVAzMltTREwuc2NyZWVuICsgUnVudGltZS5RVUFOVFVNX1NJWkUgKiAwID4+IDJdID0gZmxhZ3M7CiAgfQogIEJyb3dzZXIudXBkYXRlUmVzaXplTGlzdGVuZXJzKCk7CiB9KSwKIHNldFdpbmRvd2VkQ2FudmFzU2l6ZTogKGZ1bmN0aW9uKCkgewogIGlmICh0eXBlb2YgU0RMICE9ICJ1bmRlZmluZWQiKSB7CiAgIHZhciBmbGFncyA9IEhFQVBVMzJbU0RMLnNjcmVlbiArIFJ1bnRpbWUuUVVBTlRVTV9TSVpFICogMCA+PiAyXTsKICAgZmxhZ3MgPSBmbGFncyAmIH44Mzg4NjA4OwogICBIRUFQMzJbU0RMLnNjcmVlbiArIFJ1bnRpbWUuUVVBTlRVTV9TSVpFICogMCA+PiAyXSA9IGZsYWdzOwogIH0KICBCcm93c2VyLnVwZGF0ZVJlc2l6ZUxpc3RlbmVycygpOwogfSksCiB1cGRhdGVDYW52YXNEaW1lbnNpb25zOiAoZnVuY3Rpb24oY2FudmFzLCB3TmF0aXZlLCBoTmF0aXZlKSB7CiAgaWYgKHdOYXRpdmUgJiYgaE5hdGl2ZSkgewogICBjYW52YXMud2lkdGhOYXRpdmUgPSB3TmF0aXZlOwogICBjYW52YXMuaGVpZ2h0TmF0aXZlID0gaE5hdGl2ZTsKICB9IGVsc2UgewogICB3TmF0aXZlID0gY2FudmFzLndpZHRoTmF0aXZlOwogICBoTmF0aXZlID0gY2FudmFzLmhlaWdodE5hdGl2ZTsKICB9CiAgdmFyIHcgPSB3TmF0aXZlOwogIHZhciBoID0gaE5hdGl2ZTsKICBpZiAoTW9kdWxlWyJmb3JjZWRBc3BlY3RSYXRpbyJdICYmIE1vZHVsZVsiZm9yY2VkQXNwZWN0UmF0aW8iXSA+IDApIHsKICAgaWYgKHcgLyBoIDwgTW9kdWxlWyJmb3JjZWRBc3BlY3RSYXRpbyJdKSB7CiAgICB3ID0gTWF0aC5yb3VuZChoICogTW9kdWxlWyJmb3JjZWRBc3BlY3RSYXRpbyJdKTsKICAgfSBlbHNlIHsKICAgIGggPSBNYXRoLnJvdW5kKHcgLyBNb2R1bGVbImZvcmNlZEFzcGVjdFJhdGlvIl0pOwogICB9CiAgfQogIGlmICgoZG9jdW1lbnRbIndlYmtpdEZ1bGxTY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbIm1vekZ1bGxTY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbIm1vekZ1bGxzY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbImZ1bGxTY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbImZ1bGxzY3JlZW5FbGVtZW50Il0gfHwgZG9jdW1lbnRbIm1zRnVsbFNjcmVlbkVsZW1lbnQiXSB8fCBkb2N1bWVudFsibXNGdWxsc2NyZWVuRWxlbWVudCJdIHx8IGRvY3VtZW50WyJ3ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQiXSkgPT09IGNhbnZhcy5wYXJlbnROb2RlICYmIHR5cGVvZiBzY3JlZW4gIT0gInVuZGVmaW5lZCIpIHsKICAgdmFyIGZhY3RvciA9IE1hdGgubWluKHNjcmVlbi53aWR0aCAvIHcsIHNjcmVlbi5oZWlnaHQgLyBoKTsKICAgdyA9IE1hdGgucm91bmQodyAqIGZhY3Rvcik7CiAgIGggPSBNYXRoLnJvdW5kKGggKiBmYWN0b3IpOwogIH0KICBpZiAoQnJvd3Nlci5yZXNpemVDYW52YXMpIHsKICAgaWYgKGNhbnZhcy53aWR0aCAhPSB3KSBjYW52YXMud2lkdGggPSB3OwogICBpZiAoY2FudmFzLmhlaWdodCAhPSBoKSBjYW52YXMuaGVpZ2h0ID0gaDsKICAgaWYgKHR5cGVvZiBjYW52YXMuc3R5bGUgIT0gInVuZGVmaW5lZCIpIHsKICAgIGNhbnZhcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgid2lkdGgiKTsKICAgIGNhbnZhcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiaGVpZ2h0Iik7CiAgIH0KICB9IGVsc2UgewogICBpZiAoY2FudmFzLndpZHRoICE9IHdOYXRpdmUpIGNhbnZhcy53aWR0aCA9IHdOYXRpdmU7CiAgIGlmIChjYW52YXMuaGVpZ2h0ICE9IGhOYXRpdmUpIGNhbnZhcy5oZWlnaHQgPSBoTmF0aXZlOwogICBpZiAodHlwZW9mIGNhbnZhcy5zdHlsZSAhPSAidW5kZWZpbmVkIikgewogICAgaWYgKHcgIT0gd05hdGl2ZSB8fCBoICE9IGhOYXRpdmUpIHsKICAgICBjYW52YXMuc3R5bGUuc2V0UHJvcGVydHkoIndpZHRoIiwgdyArICJweCIsICJpbXBvcnRhbnQiKTsKICAgICBjYW52YXMuc3R5bGUuc2V0UHJvcGVydHkoImhlaWdodCIsIGggKyAicHgiLCAiaW1wb3J0YW50Iik7CiAgICB9IGVsc2UgewogICAgIGNhbnZhcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgid2lkdGgiKTsKICAgICBjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoImhlaWdodCIpOwogICAgfQogICB9CiAgfQogfSksCiB3Z2V0UmVxdWVzdHM6IHt9LAogbmV4dFdnZXRSZXF1ZXN0SGFuZGxlOiAwLAogZ2V0TmV4dFdnZXRSZXF1ZXN0SGFuZGxlOiAoZnVuY3Rpb24oKSB7CiAgdmFyIGhhbmRsZSA9IEJyb3dzZXIubmV4dFdnZXRSZXF1ZXN0SGFuZGxlOwogIEJyb3dzZXIubmV4dFdnZXRSZXF1ZXN0SGFuZGxlKys7CiAgcmV0dXJuIGhhbmRsZTsKIH0pCn07CmZ1bmN0aW9uIF9wdGhyZWFkX3NldHNwZWNpZmljKGtleSwgdmFsdWUpIHsKIGlmICghKGtleSBpbiBQVEhSRUFEX1NQRUNJRklDKSkgewogIHJldHVybiBFUlJOT19DT0RFUy5FSU5WQUw7CiB9CiBQVEhSRUFEX1NQRUNJRklDW2tleV0gPSB2YWx1ZTsKIHJldHVybiAwOwp9CmZ1bmN0aW9uIF9fX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24oc2l6ZSkgewogcmV0dXJuIF9tYWxsb2Moc2l6ZSk7Cn0KdmFyIF9zaW4gPSBNYXRoX3NpbjsKZnVuY3Rpb24gX19lbWJpbmRfcmVnaXN0ZXJfZW12YWwocmF3VHlwZSwgbmFtZSkgewogbmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobmFtZSk7CiByZWdpc3RlclR5cGUocmF3VHlwZSwgewogIG5hbWU6IG5hbWUsCiAgImZyb21XaXJlVHlwZSI6IChmdW5jdGlvbihoYW5kbGUpIHsKICAgdmFyIHJ2ID0gZW12YWxfaGFuZGxlX2FycmF5W2hhbmRsZV0udmFsdWU7CiAgIF9fZW12YWxfZGVjcmVmKGhhbmRsZSk7CiAgIHJldHVybiBydjsKICB9KSwKICAidG9XaXJlVHlwZSI6IChmdW5jdGlvbihkZXN0cnVjdG9ycywgdmFsdWUpIHsKICAgcmV0dXJuIF9fZW12YWxfcmVnaXN0ZXIodmFsdWUpOwogIH0pLAogICJhcmdQYWNrQWR2YW5jZSI6IDgsCiAgInJlYWRWYWx1ZUZyb21Qb2ludGVyIjogc2ltcGxlUmVhZFZhbHVlRnJvbVBvaW50ZXIsCiAgZGVzdHJ1Y3RvckZ1bmN0aW9uOiBudWxsCiB9KTsKfQp2YXIgX2F0YW4gPSBNYXRoX2F0YW47CmZ1bmN0aW9uIGZsb2F0UmVhZFZhbHVlRnJvbVBvaW50ZXIobmFtZSwgc2hpZnQpIHsKIHN3aXRjaCAoc2hpZnQpIHsKIGNhc2UgMjoKICByZXR1cm4gKGZ1bmN0aW9uKHBvaW50ZXIpIHsKICAgcmV0dXJuIHRoaXNbImZyb21XaXJlVHlwZSJdKEhFQVBGMzJbcG9pbnRlciA+PiAyXSk7CiAgfSk7CiBjYXNlIDM6CiAgcmV0dXJuIChmdW5jdGlvbihwb2ludGVyKSB7CiAgIHJldHVybiB0aGlzWyJmcm9tV2lyZVR5cGUiXShIRUFQRjY0W3BvaW50ZXIgPj4gM10pOwogIH0pOwogZGVmYXVsdDoKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGZsb2F0IHR5cGU6ICIgKyBuYW1lKTsKIH0KfQpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl9mbG9hdChyYXdUeXBlLCBuYW1lLCBzaXplKSB7CiB2YXIgc2hpZnQgPSBnZXRTaGlmdEZyb21TaXplKHNpemUpOwogbmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobmFtZSk7CiByZWdpc3RlclR5cGUocmF3VHlwZSwgewogIG5hbWU6IG5hbWUsCiAgImZyb21XaXJlVHlwZSI6IChmdW5jdGlvbih2YWx1ZSkgewogICByZXR1cm4gdmFsdWU7CiAgfSksCiAgInRvV2lyZVR5cGUiOiAoZnVuY3Rpb24oZGVzdHJ1Y3RvcnMsIHZhbHVlKSB7CiAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJudW1iZXIiICYmIHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAiJyArIF9lbWJpbmRfcmVwcih2YWx1ZSkgKyAnIiB0byAnICsgdGhpcy5uYW1lKTsKICAgfQogICByZXR1cm4gdmFsdWU7CiAgfSksCiAgImFyZ1BhY2tBZHZhbmNlIjogOCwKICAicmVhZFZhbHVlRnJvbVBvaW50ZXIiOiBmbG9hdFJlYWRWYWx1ZUZyb21Qb2ludGVyKG5hbWUsIHNoaWZ0KSwKICBkZXN0cnVjdG9yRnVuY3Rpb246IG51bGwKIH0pOwp9CmZ1bmN0aW9uIF9fX2N4YV9iZWdpbl9jYXRjaChwdHIpIHsKIF9fWlN0MTh1bmNhdWdodF9leGNlcHRpb252LnVuY2F1Z2h0X2V4Y2VwdGlvbi0tOwogRVhDRVBUSU9OUy5jYXVnaHQucHVzaChwdHIpOwogRVhDRVBUSU9OUy5hZGRSZWYoRVhDRVBUSU9OUy5kZUFkanVzdChwdHIpKTsKIHJldHVybiBwdHI7Cn0KZnVuY3Rpb24gX19fc3lzY2FsbDYod2hpY2gsIHZhcmFyZ3MpIHsKIFNZU0NBTExTLnZhcmFyZ3MgPSB2YXJhcmdzOwogdHJ5IHsKICB2YXIgc3RyZWFtID0gU1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKCk7CiAgRlMuY2xvc2Uoc3RyZWFtKTsKICByZXR1cm4gMDsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIEZTID09PSAidW5kZWZpbmVkIiB8fCAhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSkgYWJvcnQoZSk7CiAgcmV0dXJuIC1lLmVycm5vOwogfQp9CnZhciBfY29zID0gTWF0aF9jb3M7CnZhciBfYXRhbjIgPSBNYXRoX2F0YW4yOwpmdW5jdGlvbiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcihyYXdDbGFzc1R5cGUsIGFyZ0NvdW50LCByYXdBcmdUeXBlc0FkZHIsIGludm9rZXJTaWduYXR1cmUsIGludm9rZXIsIHJhd0NvbnN0cnVjdG9yKSB7CiB2YXIgcmF3QXJnVHlwZXMgPSBoZWFwMzJWZWN0b3JUb0FycmF5KGFyZ0NvdW50LCByYXdBcmdUeXBlc0FkZHIpOwogaW52b2tlciA9IHJlcXVpcmVGdW5jdGlvbihpbnZva2VyU2lnbmF0dXJlLCBpbnZva2VyKTsKIHdoZW5EZXBlbmRlbnRUeXBlc0FyZVJlc29sdmVkKFtdLCBbIHJhd0NsYXNzVHlwZSBdLCAoZnVuY3Rpb24oY2xhc3NUeXBlKSB7CiAgY2xhc3NUeXBlID0gY2xhc3NUeXBlWzBdOwogIHZhciBodW1hbk5hbWUgPSAiY29uc3RydWN0b3IgIiArIGNsYXNzVHlwZS5uYW1lOwogIGlmICh1bmRlZmluZWQgPT09IGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keSkgewogICBjbGFzc1R5cGUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHkgPSBbXTsKICB9CiAgaWYgKHVuZGVmaW5lZCAhPT0gY2xhc3NUeXBlLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ0NvdW50IC0gMV0pIHsKICAgdGhyb3cgbmV3IEJpbmRpbmdFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIGNvbnN0cnVjdG9ycyB3aXRoIGlkZW50aWNhbCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIiArIChhcmdDb3VudCAtIDEpICsgIikgZm9yIGNsYXNzICciICsgY2xhc3NUeXBlLm5hbWUgKyAiJyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hIik7CiAgfQogIGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVthcmdDb3VudCAtIDFdID0gZnVuY3Rpb24gdW5ib3VuZFR5cGVIYW5kbGVyKCkgewogICB0aHJvd1VuYm91bmRUeXBlRXJyb3IoIkNhbm5vdCBjb25zdHJ1Y3QgIiArIGNsYXNzVHlwZS5uYW1lICsgIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsIHJhd0FyZ1R5cGVzKTsKICB9OwogIHdoZW5EZXBlbmRlbnRUeXBlc0FyZVJlc29sdmVkKFtdLCByYXdBcmdUeXBlcywgKGZ1bmN0aW9uKGFyZ1R5cGVzKSB7CiAgIGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVthcmdDb3VudCAtIDFdID0gZnVuY3Rpb24gY29uc3RydWN0b3JfYm9keSgpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSBhcmdDb3VudCAtIDEpIHsKICAgICB0aHJvd0JpbmRpbmdFcnJvcihodW1hbk5hbWUgKyAiIGNhbGxlZCB3aXRoICIgKyBhcmd1bWVudHMubGVuZ3RoICsgIiBhcmd1bWVudHMsIGV4cGVjdGVkICIgKyAoYXJnQ291bnQgLSAxKSk7CiAgICB9CiAgICB2YXIgZGVzdHJ1Y3RvcnMgPSBbXTsKICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ0NvdW50KTsKICAgIGFyZ3NbMF0gPSByYXdDb25zdHJ1Y3RvcjsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJnQ291bnQ7ICsraSkgewogICAgIGFyZ3NbaV0gPSBhcmdUeXBlc1tpXVsidG9XaXJlVHlwZSJdKGRlc3RydWN0b3JzLCBhcmd1bWVudHNbaSAtIDFdKTsKICAgIH0KICAgIHZhciBwdHIgPSBpbnZva2VyLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgcnVuRGVzdHJ1Y3RvcnMoZGVzdHJ1Y3RvcnMpOwogICAgcmV0dXJuIGFyZ1R5cGVzWzBdWyJmcm9tV2lyZVR5cGUiXShwdHIpOwogICB9OwogICByZXR1cm4gW107CiAgfSkpOwogIHJldHVybiBbXTsKIH0pKTsKfQpmdW5jdGlvbiBfdGltZShwdHIpIHsKIHZhciByZXQgPSBEYXRlLm5vdygpIC8gMWUzIHwgMDsKIGlmIChwdHIpIHsKICBIRUFQMzJbcHRyID4+IDJdID0gcmV0OwogfQogcmV0dXJuIHJldDsKfQpmdW5jdGlvbiBfcHRocmVhZF9zZWxmKCkgewogcmV0dXJuIDA7Cn0KZnVuY3Rpb24gX19fc3lzY2FsbDE0MCh3aGljaCwgdmFyYXJncykgewogU1lTQ0FMTFMudmFyYXJncyA9IHZhcmFyZ3M7CiB0cnkgewogIHZhciBzdHJlYW0gPSBTWVNDQUxMUy5nZXRTdHJlYW1Gcm9tRkQoKSwgb2Zmc2V0X2hpZ2ggPSBTWVNDQUxMUy5nZXQoKSwgb2Zmc2V0X2xvdyA9IFNZU0NBTExTLmdldCgpLCByZXN1bHQgPSBTWVNDQUxMUy5nZXQoKSwgd2hlbmNlID0gU1lTQ0FMTFMuZ2V0KCk7CiAgdmFyIG9mZnNldCA9IG9mZnNldF9sb3c7CiAgYXNzZXJ0KG9mZnNldF9oaWdoID09PSAwKTsKICBGUy5sbHNlZWsoc3RyZWFtLCBvZmZzZXQsIHdoZW5jZSk7CiAgSEVBUDMyW3Jlc3VsdCA+PiAyXSA9IHN0cmVhbS5wb3NpdGlvbjsKICBpZiAoc3RyZWFtLmdldGRlbnRzICYmIG9mZnNldCA9PT0gMCAmJiB3aGVuY2UgPT09IDApIHN0cmVhbS5nZXRkZW50cyA9IG51bGw7CiAgcmV0dXJuIDA7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBGUyA9PT0gInVuZGVmaW5lZCIgfHwgIShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpIGFib3J0KGUpOwogIHJldHVybiAtZS5lcnJubzsKIH0KfQpmdW5jdGlvbiBfX2VtdmFsX2luY3JlZihoYW5kbGUpIHsKIGlmIChoYW5kbGUgPiA0KSB7CiAgZW12YWxfaGFuZGxlX2FycmF5W2hhbmRsZV0ucmVmY291bnQgKz0gMTsKIH0KfQpmdW5jdGlvbiBfX19zeXNjYWxsMTQ2KHdoaWNoLCB2YXJhcmdzKSB7CiBTWVNDQUxMUy52YXJhcmdzID0gdmFyYXJnczsKIHRyeSB7CiAgdmFyIHN0cmVhbSA9IFNZU0NBTExTLmdldFN0cmVhbUZyb21GRCgpLCBpb3YgPSBTWVNDQUxMUy5nZXQoKSwgaW92Y250ID0gU1lTQ0FMTFMuZ2V0KCk7CiAgcmV0dXJuIFNZU0NBTExTLmRvV3JpdGV2KHN0cmVhbSwgaW92LCBpb3ZjbnQpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgRlMgPT09ICJ1bmRlZmluZWQiIHx8ICEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKSBhYm9ydChlKTsKICByZXR1cm4gLWUuZXJybm87CiB9Cn0KZnVuY3Rpb24gX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24ocmF3Q2xhc3NUeXBlLCBtZXRob2ROYW1lLCBhcmdDb3VudCwgcmF3QXJnVHlwZXNBZGRyLCBpbnZva2VyU2lnbmF0dXJlLCByYXdJbnZva2VyLCBjb250ZXh0LCBpc1B1cmVWaXJ0dWFsKSB7CiB2YXIgcmF3QXJnVHlwZXMgPSBoZWFwMzJWZWN0b3JUb0FycmF5KGFyZ0NvdW50LCByYXdBcmdUeXBlc0FkZHIpOwogbWV0aG9kTmFtZSA9IHJlYWRMYXRpbjFTdHJpbmcobWV0aG9kTmFtZSk7CiByYXdJbnZva2VyID0gcmVxdWlyZUZ1bmN0aW9uKGludm9rZXJTaWduYXR1cmUsIHJhd0ludm9rZXIpOwogd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQoW10sIFsgcmF3Q2xhc3NUeXBlIF0sIChmdW5jdGlvbihjbGFzc1R5cGUpIHsKICBjbGFzc1R5cGUgPSBjbGFzc1R5cGVbMF07CiAgdmFyIGh1bWFuTmFtZSA9IGNsYXNzVHlwZS5uYW1lICsgIi4iICsgbWV0aG9kTmFtZTsKICBpZiAoaXNQdXJlVmlydHVhbCkgewogICBjbGFzc1R5cGUucmVnaXN0ZXJlZENsYXNzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zLnB1c2gobWV0aG9kTmFtZSk7CiAgfQogIGZ1bmN0aW9uIHVuYm91bmRUeXBlc0hhbmRsZXIoKSB7CiAgIHRocm93VW5ib3VuZFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgIiArIGh1bWFuTmFtZSArICIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLCByYXdBcmdUeXBlcyk7CiAgfQogIHZhciBwcm90byA9IGNsYXNzVHlwZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGU7CiAgdmFyIG1ldGhvZCA9IHByb3RvW21ldGhvZE5hbWVdOwogIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCB8fCB1bmRlZmluZWQgPT09IG1ldGhvZC5vdmVybG9hZFRhYmxlICYmIG1ldGhvZC5jbGFzc05hbWUgIT09IGNsYXNzVHlwZS5uYW1lICYmIG1ldGhvZC5hcmdDb3VudCA9PT0gYXJnQ291bnQgLSAyKSB7CiAgIHVuYm91bmRUeXBlc0hhbmRsZXIuYXJnQ291bnQgPSBhcmdDb3VudCAtIDI7CiAgIHVuYm91bmRUeXBlc0hhbmRsZXIuY2xhc3NOYW1lID0gY2xhc3NUeXBlLm5hbWU7CiAgIHByb3RvW21ldGhvZE5hbWVdID0gdW5ib3VuZFR5cGVzSGFuZGxlcjsKICB9IGVsc2UgewogICBlbnN1cmVPdmVybG9hZFRhYmxlKHByb3RvLCBtZXRob2ROYW1lLCBodW1hbk5hbWUpOwogICBwcm90b1ttZXRob2ROYW1lXS5vdmVybG9hZFRhYmxlW2FyZ0NvdW50IC0gMl0gPSB1bmJvdW5kVHlwZXNIYW5kbGVyOwogIH0KICB3aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZChbXSwgcmF3QXJnVHlwZXMsIChmdW5jdGlvbihhcmdUeXBlcykgewogICB2YXIgbWVtYmVyRnVuY3Rpb24gPSBjcmFmdEludm9rZXJGdW5jdGlvbihodW1hbk5hbWUsIGFyZ1R5cGVzLCBjbGFzc1R5cGUsIHJhd0ludm9rZXIsIGNvbnRleHQpOwogICBpZiAodW5kZWZpbmVkID09PSBwcm90b1ttZXRob2ROYW1lXS5vdmVybG9hZFRhYmxlKSB7CiAgICBwcm90b1ttZXRob2ROYW1lXSA9IG1lbWJlckZ1bmN0aW9uOwogICB9IGVsc2UgewogICAgcHJvdG9bbWV0aG9kTmFtZV0ub3ZlcmxvYWRUYWJsZVthcmdDb3VudCAtIDJdID0gbWVtYmVyRnVuY3Rpb247CiAgIH0KICAgcmV0dXJuIFtdOwogIH0pKTsKICByZXR1cm4gW107CiB9KSk7Cn0KZW1iaW5kX2luaXRfY2hhckNvZGVzKCk7CkJpbmRpbmdFcnJvciA9IE1vZHVsZVsiQmluZGluZ0Vycm9yIl0gPSBleHRlbmRFcnJvcihFcnJvciwgIkJpbmRpbmdFcnJvciIpOwppbml0X2VtdmFsKCk7CkludGVybmFsRXJyb3IgPSBNb2R1bGVbIkludGVybmFsRXJyb3IiXSA9IGV4dGVuZEVycm9yKEVycm9yLCAiSW50ZXJuYWxFcnJvciIpOwpGUy5zdGF0aWNJbml0KCk7Cl9fQVRJTklUX18udW5zaGlmdCgoZnVuY3Rpb24oKSB7CiBpZiAoIU1vZHVsZVsibm9GU0luaXQiXSAmJiAhRlMuaW5pdC5pbml0aWFsaXplZCkgRlMuaW5pdCgpOwp9KSk7Cl9fQVRNQUlOX18ucHVzaCgoZnVuY3Rpb24oKSB7CiBGUy5pZ25vcmVQZXJtaXNzaW9ucyA9IGZhbHNlOwp9KSk7Cl9fQVRFWElUX18ucHVzaCgoZnVuY3Rpb24oKSB7CiBGUy5xdWl0KCk7Cn0pKTsKTW9kdWxlWyJGU19jcmVhdGVGb2xkZXIiXSA9IEZTLmNyZWF0ZUZvbGRlcjsKTW9kdWxlWyJGU19jcmVhdGVQYXRoIl0gPSBGUy5jcmVhdGVQYXRoOwpNb2R1bGVbIkZTX2NyZWF0ZURhdGFGaWxlIl0gPSBGUy5jcmVhdGVEYXRhRmlsZTsKTW9kdWxlWyJGU19jcmVhdGVQcmVsb2FkZWRGaWxlIl0gPSBGUy5jcmVhdGVQcmVsb2FkZWRGaWxlOwpNb2R1bGVbIkZTX2NyZWF0ZUxhenlGaWxlIl0gPSBGUy5jcmVhdGVMYXp5RmlsZTsKTW9kdWxlWyJGU19jcmVhdGVMaW5rIl0gPSBGUy5jcmVhdGVMaW5rOwpNb2R1bGVbIkZTX2NyZWF0ZURldmljZSJdID0gRlMuY3JlYXRlRGV2aWNlOwpNb2R1bGVbIkZTX3VubGluayJdID0gRlMudW5saW5rOwpfX0FUSU5JVF9fLnVuc2hpZnQoKGZ1bmN0aW9uKCkgewogVFRZLmluaXQoKTsKfSkpOwpfX0FURVhJVF9fLnB1c2goKGZ1bmN0aW9uKCkgewogVFRZLnNodXRkb3duKCk7Cn0pKTsKaWYgKEVOVklST05NRU5UX0lTX05PREUpIHsKIHZhciBmcyA9IHJlcXVpcmUoImZzIik7CiB2YXIgTk9ERUpTX1BBVEggPSByZXF1aXJlKCJwYXRoIik7CiBOT0RFRlMuc3RhdGljSW5pdCgpOwp9CmluaXRfUmVnaXN0ZXJlZFBvaW50ZXIoKTsKaW5pdF9lbWJpbmQoKTsKVW5ib3VuZFR5cGVFcnJvciA9IE1vZHVsZVsiVW5ib3VuZFR5cGVFcnJvciJdID0gZXh0ZW5kRXJyb3IoRXJyb3IsICJVbmJvdW5kVHlwZUVycm9yIik7CmluaXRfQ2xhc3NIYW5kbGUoKTsKTW9kdWxlWyJyZXF1ZXN0RnVsbFNjcmVlbiJdID0gZnVuY3Rpb24gTW9kdWxlX3JlcXVlc3RGdWxsU2NyZWVuKGxvY2tQb2ludGVyLCByZXNpemVDYW52YXMsIHZyRGV2aWNlKSB7CiBCcm93c2VyLnJlcXVlc3RGdWxsU2NyZWVuKGxvY2tQb2ludGVyLCByZXNpemVDYW52YXMsIHZyRGV2aWNlKTsKfTsKTW9kdWxlWyJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXSA9IGZ1bmN0aW9uIE1vZHVsZV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYykgewogQnJvd3Nlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7Cn07Ck1vZHVsZVsic2V0Q2FudmFzU2l6ZSJdID0gZnVuY3Rpb24gTW9kdWxlX3NldENhbnZhc1NpemUod2lkdGgsIGhlaWdodCwgbm9VcGRhdGVzKSB7CiBCcm93c2VyLnNldENhbnZhc1NpemUod2lkdGgsIGhlaWdodCwgbm9VcGRhdGVzKTsKfTsKTW9kdWxlWyJwYXVzZU1haW5Mb29wIl0gPSBmdW5jdGlvbiBNb2R1bGVfcGF1c2VNYWluTG9vcCgpIHsKIEJyb3dzZXIubWFpbkxvb3AucGF1c2UoKTsKfTsKTW9kdWxlWyJyZXN1bWVNYWluTG9vcCJdID0gZnVuY3Rpb24gTW9kdWxlX3Jlc3VtZU1haW5Mb29wKCkgewogQnJvd3Nlci5tYWluTG9vcC5yZXN1bWUoKTsKfTsKTW9kdWxlWyJnZXRVc2VyTWVkaWEiXSA9IGZ1bmN0aW9uIE1vZHVsZV9nZXRVc2VyTWVkaWEoKSB7CiBCcm93c2VyLmdldFVzZXJNZWRpYSgpOwp9OwpNb2R1bGVbImNyZWF0ZUNvbnRleHQiXSA9IGZ1bmN0aW9uIE1vZHVsZV9jcmVhdGVDb250ZXh0KGNhbnZhcywgdXNlV2ViR0wsIHNldEluTW9kdWxlLCB3ZWJHTENvbnRleHRBdHRyaWJ1dGVzKSB7CiByZXR1cm4gQnJvd3Nlci5jcmVhdGVDb250ZXh0KGNhbnZhcywgdXNlV2ViR0wsIHNldEluTW9kdWxlLCB3ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKfTsKU1RBQ0tfQkFTRSA9IFNUQUNLVE9QID0gUnVudGltZS5hbGlnbk1lbW9yeShTVEFUSUNUT1ApOwpzdGF0aWNTZWFsZWQgPSB0cnVlOwpTVEFDS19NQVggPSBTVEFDS19CQVNFICsgVE9UQUxfU1RBQ0s7CkRZTkFNSUNfQkFTRSA9IERZTkFNSUNUT1AgPSBSdW50aW1lLmFsaWduTWVtb3J5KFNUQUNLX01BWCk7CmFzc2VydChEWU5BTUlDX0JBU0UgPCBUT1RBTF9NRU1PUlksICJUT1RBTF9NRU1PUlkgbm90IGJpZyBlbm91Z2ggZm9yIHN0YWNrIik7CnZhciBjdHR6X2k4ID0gYWxsb2NhdGUoWyA4LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA2LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA3LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA2LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwIF0sICJpOCIsIEFMTE9DX0RZTkFNSUMpOwpmdW5jdGlvbiBudWxsRnVuY19kaWRkaWRkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlkZGlkZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZGRpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlkZGknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWlpaWlkZGkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWlpaWlkZGknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kaWlkaWRpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlpZGlkaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kaWlkaWRkZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpaWRpZGRkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlkZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWRkZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpaWlpZGRpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmlpaWlkZGknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19paSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2lpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfdmlkaWRkZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3ZpZGlkZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWRpZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3ZpZGlkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfdmlpZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWlkZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZGRkZGRpaSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpZGRkZGRpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpaWlpaSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3ZpaWlpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpZGlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmlkaWknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWRpZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWRpZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19paWlpaSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2lpaWlpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGRpZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlkZGlkZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZGRkZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWRkZGRkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfdmlkZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3ZpZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19paWlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnaWlpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpaWRkaWQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlkZGlkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlkaWRkZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpZGlkZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kZGRkZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkZGRkZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWlpaWlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmlpaWlpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpaWlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlpaWknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmlpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWlkaWkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWlkaWknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kaWlkZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlkZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19paWQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdpaWQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kaWlkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpaWRkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlpZGQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kZGRkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGRkZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZGlkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlkaWQnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWlkaWRkZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3ZpaWRpZGRkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfaWlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnaWlpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGRpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlpZGRpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGRkZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlkZGRkZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpaWkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGRkaWkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlkZGRpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWRkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGRkZGRpaSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpaWRkZGRkaWknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kaWRkZGlkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlkZGRpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpaSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2koeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlkaSh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpZGknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY19kaWlkZGRpZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ2RpaWRkZGlkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWlkaScuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2lpaWQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdpaWlkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlkZGlkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlkZGlkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlpZGlkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlpZGlkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfdmlpaWQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWlpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpaWRpZCh4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3ZpaWRpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX2RpZGRkaWkoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdkaWRkZGlpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfdih4KSB7CiBNb2R1bGVbInByaW50RXJyIl0oIkludmFsaWQgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgd2l0aCBzaWduYXR1cmUgJ3YnLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBudWxsRnVuY192aWlkKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmlpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpaWRpZGQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICd2aWlkaWRkJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfZGlkaWRpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAnZGlkaWRpJy4gUGVyaGFwcyB0aGlzIGlzIGFuIGludmFsaWQgdmFsdWUgKGUuZy4gY2F1c2VkIGJ5IGNhbGxpbmcgYSB2aXJ0dWFsIG1ldGhvZCBvbiBhIE5VTEwgcG9pbnRlcik/IE9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGFuIGluY29ycmVjdCB0eXBlLCB3aGljaCB3aWxsIGZhaWw/IChpdCBpcyB3b3J0aCBidWlsZGluZyB5b3VyIHNvdXJjZSBmaWxlcyB3aXRoIC1XZXJyb3IgKHdhcm5pbmdzIGFyZSBlcnJvcnMpLCBhcyB3YXJuaW5ncyBjYW4gaW5kaWNhdGUgdW5kZWZpbmVkIGJlaGF2aW9yIHdoaWNoIGNhbiBjYXVzZSB0aGlzKSIpOwogTW9kdWxlWyJwcmludEVyciJdKCJCdWlsZCB3aXRoIEFTU0VSVElPTlM9MiBmb3IgbW9yZSBpbmZvLiIpOwogYWJvcnQoeCk7Cn0KZnVuY3Rpb24gbnVsbEZ1bmNfaWlpaWQoeCkgewogTW9kdWxlWyJwcmludEVyciJdKCJJbnZhbGlkIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIHdpdGggc2lnbmF0dXJlICdpaWlpZCcuIFBlcmhhcHMgdGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIChlLmcuIGNhdXNlZCBieSBjYWxsaW5nIGEgdmlydHVhbCBtZXRob2Qgb24gYSBOVUxMIHBvaW50ZXIpPyBPciBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBpbmNvcnJlY3QgdHlwZSwgd2hpY2ggd2lsbCBmYWlsPyAoaXQgaXMgd29ydGggYnVpbGRpbmcgeW91ciBzb3VyY2UgZmlsZXMgd2l0aCAtV2Vycm9yICh3YXJuaW5ncyBhcmUgZXJyb3JzKSwgYXMgd2FybmluZ3MgY2FuIGluZGljYXRlIHVuZGVmaW5lZCBiZWhhdmlvciB3aGljaCBjYW4gY2F1c2UgdGhpcykiKTsKIE1vZHVsZVsicHJpbnRFcnIiXSgiQnVpbGQgd2l0aCBBU1NFUlRJT05TPTIgZm9yIG1vcmUgaW5mby4iKTsKIGFib3J0KHgpOwp9CmZ1bmN0aW9uIG51bGxGdW5jX3ZpaWlpKHgpIHsKIE1vZHVsZVsicHJpbnRFcnIiXSgiSW52YWxpZCBmdW5jdGlvbiBwb2ludGVyIGNhbGxlZCB3aXRoIHNpZ25hdHVyZSAndmlpaWknLiBQZXJoYXBzIHRoaXMgaXMgYW4gaW52YWxpZCB2YWx1ZSAoZS5nLiBjYXVzZWQgYnkgY2FsbGluZyBhIHZpcnR1YWwgbWV0aG9kIG9uIGEgTlVMTCBwb2ludGVyKT8gT3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5jb3JyZWN0IHR5cGUsIHdoaWNoIHdpbGwgZmFpbD8gKGl0IGlzIHdvcnRoIGJ1aWxkaW5nIHlvdXIgc291cmNlIGZpbGVzIHdpdGggLVdlcnJvciAod2FybmluZ3MgYXJlIGVycm9ycyksIGFzIHdhcm5pbmdzIGNhbiBpbmRpY2F0ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggY2FuIGNhdXNlIHRoaXMpIik7CiBNb2R1bGVbInByaW50RXJyIl0oIkJ1aWxkIHdpdGggQVNTRVJUSU9OUz0yIGZvciBtb3JlIGluZm8uIik7CiBhYm9ydCh4KTsKfQpmdW5jdGlvbiBpbnZva2VfZGlkZGlkZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpZGRpZGQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWRkaShpbmRleCwgYTEsIGEyLCBhMywgYTQpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWRkaSJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWlpaWlkZGkoaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlpaWlpZGRpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWQoaW5kZXgsIGExLCBhMikgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlkIl0oaW5kZXgsIGExLCBhMik7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWlkaWRpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpZGlkaSJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpKGluZGV4LCBhMSkgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmkiXShpbmRleCwgYTEpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfdmlpKGluZGV4LCBhMSwgYTIpIHsKIHRyeSB7CiAgTW9kdWxlWyJkeW5DYWxsX3ZpaSJdKGluZGV4LCBhMSwgYTIpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlpZGlkZGQoaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpZGlkZGQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlkZGQoaW5kZXgsIGExLCBhMiwgYTMsIGE0KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlkZGQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfdmlpaWlkZGkoaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWlpaWRkaSJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9paShpbmRleCwgYTEpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9paSJdKGluZGV4LCBhMSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWRpZGRkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWRpZGRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfdmlkaWQoaW5kZXgsIGExLCBhMiwgYTMsIGE0KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWRpZCJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWlkZChpbmRleCwgYTEsIGEyLCBhMywgYTQpIHsKIHRyeSB7CiAgTW9kdWxlWyJkeW5DYWxsX3ZpaWRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpZGRkZGRpaShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlkZGRkZGlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWlpaWkoaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSkgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlpaWlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWRpaShpbmRleCwgYTEsIGEyLCBhMywgYTQpIHsKIHRyeSB7CiAgTW9kdWxlWyJkeW5DYWxsX3ZpZGlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpZGlkZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWRpZGQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2lpaWlpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2lpaWlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRkaWRkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWRkaWRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpZGRkZGQoaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWRkZGRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfdmlkZChpbmRleCwgYTEsIGEyLCBhMykgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlkZCJdKGluZGV4LCBhMSwgYTIsIGEzKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2lpaWkoaW5kZXgsIGExLCBhMiwgYTMpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9paWlpIl0oaW5kZXgsIGExLCBhMiwgYTMpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlpZGRpZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWRkaWQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWRpZGRkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlkaWRkZCJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RkZGRkZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGRkZGRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWlpaWlpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWlpaWlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlpaWkoaW5kZXgsIGExLCBhMiwgYTMsIGE0KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpaWkiXShpbmRleCwgYTEsIGEyLCBhMywgYTQpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfdmlpaShpbmRleCwgYTEsIGEyLCBhMykgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlpaSJdKGluZGV4LCBhMSwgYTIsIGEzKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpKGluZGV4LCBhMSkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpIl0oaW5kZXgsIGExKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpaWRpaShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWlkaWkiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRkZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpZGRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9paWQoaW5kZXgsIGExLCBhMikgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2lpZCJdKGluZGV4LCBhMSwgYTIpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlpZChpbmRleCwgYTEsIGEyLCBhMykgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWQiXShpbmRleCwgYTEsIGEyLCBhMyk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWlkZChpbmRleCwgYTEsIGEyLCBhMywgYTQpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWlkZCJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kZGRkKGluZGV4LCBhMSwgYTIsIGEzKSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGRkZCJdKGluZGV4LCBhMSwgYTIsIGEzKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpZGlkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpZGlkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpaWRpZGRkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlpZGlkZGQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfaWlpKGluZGV4LCBhMSwgYTIpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9paWkiXShpbmRleCwgYTEsIGEyKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRkaShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpZGRpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWlkZGRkZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWlkZGRkZCJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWlpKGluZGV4LCBhMSwgYTIsIGEzKSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpaSJdKGluZGV4LCBhMSwgYTIsIGEzKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRkZGlpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWRkZGlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpZGQoaW5kZXgsIGExLCBhMiwgYTMpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWRkIl0oaW5kZXgsIGExLCBhMiwgYTMpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlpZGRkZGRpaShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWRkZGRkaWkiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWRkZGlkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlkZGRpZCJdKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaShpbmRleCwgYTEsIGEyKSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpIl0oaW5kZXgsIGExLCBhMik7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWQoaW5kZXgsIGExLCBhMikgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpZCJdKGluZGV4LCBhMSwgYTIpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfaShpbmRleCkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2kiXShpbmRleCk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV9kaWRpKGluZGV4LCBhMSwgYTIsIGEzKSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlkaSJdKGluZGV4LCBhMSwgYTIsIGEzKTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRkZGlkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWRkZGlkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2RpaWRpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2lpaWQoaW5kZXgsIGExLCBhMiwgYTMpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9paWlkIl0oaW5kZXgsIGExLCBhMiwgYTMpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlkZGlkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWRkaWQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpaWRpZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIHJldHVybiBNb2R1bGVbImR5bkNhbGxfZGlpZGlkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWlpZChpbmRleCwgYTEsIGEyLCBhMywgYTQpIHsKIHRyeSB7CiAgTW9kdWxlWyJkeW5DYWxsX3ZpaWlkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpaWRpZChpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWlkaWQiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2RpZGRkaWkoaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWRkZGlpIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfdihpbmRleCkgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdiJdKGluZGV4KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpaWQoaW5kZXgsIGExLCBhMiwgYTMpIHsKIHRyeSB7CiAgTW9kdWxlWyJkeW5DYWxsX3ZpaWQiXShpbmRleCwgYTEsIGEyLCBhMyk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKHR5cGVvZiBlICE9PSAibnVtYmVyIiAmJiBlICE9PSAibG9uZ2ptcCIpIHRocm93IGU7CiAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogfQp9CmZ1bmN0aW9uIGludm9rZV92aWlkaWRkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7CiB0cnkgewogIE1vZHVsZVsiZHluQ2FsbF92aWlkaWRkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpmdW5jdGlvbiBpbnZva2VfZGlkaWRpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHsKIHRyeSB7CiAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9kaWRpZGkiXShpbmRleCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX2lpaWlkKGluZGV4LCBhMSwgYTIsIGEzLCBhNCkgewogdHJ5IHsKICByZXR1cm4gTW9kdWxlWyJkeW5DYWxsX2lpaWlkIl0oaW5kZXgsIGExLCBhMiwgYTMsIGE0KTsKIH0gY2F0Y2ggKGUpIHsKICBpZiAodHlwZW9mIGUgIT09ICJudW1iZXIiICYmIGUgIT09ICJsb25nam1wIikgdGhyb3cgZTsKICBhc21bInNldFRocmV3Il0oMSwgMCk7CiB9Cn0KZnVuY3Rpb24gaW52b2tlX3ZpaWlpKGluZGV4LCBhMSwgYTIsIGEzLCBhNCkgewogdHJ5IHsKICBNb2R1bGVbImR5bkNhbGxfdmlpaWkiXShpbmRleCwgYTEsIGEyLCBhMywgYTQpOwogfSBjYXRjaCAoZSkgewogIGlmICh0eXBlb2YgZSAhPT0gIm51bWJlciIgJiYgZSAhPT0gImxvbmdqbXAiKSB0aHJvdyBlOwogIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKIH0KfQpNb2R1bGUuYXNtR2xvYmFsQXJnID0gewogIk1hdGgiOiBNYXRoLAogIkludDhBcnJheSI6IEludDhBcnJheSwKICJJbnQxNkFycmF5IjogSW50MTZBcnJheSwKICJJbnQzMkFycmF5IjogSW50MzJBcnJheSwKICJVaW50OEFycmF5IjogVWludDhBcnJheSwKICJVaW50MTZBcnJheSI6IFVpbnQxNkFycmF5LAogIlVpbnQzMkFycmF5IjogVWludDMyQXJyYXksCiAiRmxvYXQzMkFycmF5IjogRmxvYXQzMkFycmF5LAogIkZsb2F0NjRBcnJheSI6IEZsb2F0NjRBcnJheSwKICJOYU4iOiBOYU4sCiAiSW5maW5pdHkiOiBJbmZpbml0eSwKICJieXRlTGVuZ3RoIjogYnl0ZUxlbmd0aAp9OwpNb2R1bGUuYXNtTGlicmFyeUFyZyA9IHsKICJhYm9ydCI6IGFib3J0LAogImFzc2VydCI6IGFzc2VydCwKICJudWxsRnVuY19kaWRkaWRkIjogbnVsbEZ1bmNfZGlkZGlkZCwKICJudWxsRnVuY19kaWRkaSI6IG51bGxGdW5jX2RpZGRpLAogIm51bGxGdW5jX3ZpaWlpaWRkaSI6IG51bGxGdW5jX3ZpaWlpaWRkaSwKICJudWxsRnVuY192aWQiOiBudWxsRnVuY192aWQsCiAibnVsbEZ1bmNfZGlpZGlkaSI6IG51bGxGdW5jX2RpaWRpZGksCiAibnVsbEZ1bmNfdmkiOiBudWxsRnVuY192aSwKICJudWxsRnVuY192aWkiOiBudWxsRnVuY192aWksCiAibnVsbEZ1bmNfZGlpZGlkZGQiOiBudWxsRnVuY19kaWlkaWRkZCwKICJudWxsRnVuY19kaWRkZCI6IG51bGxGdW5jX2RpZGRkLAogIm51bGxGdW5jX3ZpaWlpZGRpIjogbnVsbEZ1bmNfdmlpaWlkZGksCiAibnVsbEZ1bmNfaWkiOiBudWxsRnVuY19paSwKICJudWxsRnVuY192aWRpZGRkIjogbnVsbEZ1bmNfdmlkaWRkZCwKICJudWxsRnVuY192aWRpZCI6IG51bGxGdW5jX3ZpZGlkLAogIm51bGxGdW5jX3ZpaWRkIjogbnVsbEZ1bmNfdmlpZGQsCiAibnVsbEZ1bmNfZGlkZGRkZGlpIjogbnVsbEZ1bmNfZGlkZGRkZGlpLAogIm51bGxGdW5jX3ZpaWlpaSI6IG51bGxGdW5jX3ZpaWlpaSwKICJudWxsRnVuY192aWRpaSI6IG51bGxGdW5jX3ZpZGlpLAogIm51bGxGdW5jX3ZpZGlkZCI6IG51bGxGdW5jX3ZpZGlkZCwKICJudWxsRnVuY19paWlpaSI6IG51bGxGdW5jX2lpaWlpLAogIm51bGxGdW5jX2RpaWRkaWRkIjogbnVsbEZ1bmNfZGlpZGRpZGQsCiAibnVsbEZ1bmNfZGlkZGRkZCI6IG51bGxGdW5jX2RpZGRkZGQsCiAibnVsbEZ1bmNfdmlkZCI6IG51bGxGdW5jX3ZpZGQsCiAibnVsbEZ1bmNfaWlpaSI6IG51bGxGdW5jX2lpaWksCiAibnVsbEZ1bmNfZGlpZGRpZCI6IG51bGxGdW5jX2RpaWRkaWQsCiAibnVsbEZ1bmNfZGlkaWRkZCI6IG51bGxGdW5jX2RpZGlkZGQsCiAibnVsbEZ1bmNfZGRkZGRkIjogbnVsbEZ1bmNfZGRkZGRkLAogIm51bGxGdW5jX3ZpaWlpaWkiOiBudWxsRnVuY192aWlpaWlpLAogIm51bGxGdW5jX2RpaWlpIjogbnVsbEZ1bmNfZGlpaWksCiAibnVsbEZ1bmNfdmlpaSI6IG51bGxGdW5jX3ZpaWksCiAibnVsbEZ1bmNfZGkiOiBudWxsRnVuY19kaSwKICJudWxsRnVuY192aWlkaWkiOiBudWxsRnVuY192aWlkaWksCiAibnVsbEZ1bmNfZGlpZGRkIjogbnVsbEZ1bmNfZGlpZGRkLAogIm51bGxGdW5jX2lpZCI6IG51bGxGdW5jX2lpZCwKICJudWxsRnVuY19kaWlkIjogbnVsbEZ1bmNfZGlpZCwKICJudWxsRnVuY19kaWlkZCI6IG51bGxGdW5jX2RpaWRkLAogIm51bGxGdW5jX2RkZGQiOiBudWxsRnVuY19kZGRkLAogIm51bGxGdW5jX2RpZGlkIjogbnVsbEZ1bmNfZGlkaWQsCiAibnVsbEZ1bmNfdmlpZGlkZGQiOiBudWxsRnVuY192aWlkaWRkZCwKICJudWxsRnVuY19paWkiOiBudWxsRnVuY19paWksCiAibnVsbEZ1bmNfZGlpZGRpIjogbnVsbEZ1bmNfZGlpZGRpLAogIm51bGxGdW5jX2RpaWRkZGRkIjogbnVsbEZ1bmNfZGlpZGRkZGQsCiAibnVsbEZ1bmNfZGlpaSI6IG51bGxGdW5jX2RpaWksCiAibnVsbEZ1bmNfZGlpZGRkaWkiOiBudWxsRnVuY19kaWlkZGRpaSwKICJudWxsRnVuY19kaWRkIjogbnVsbEZ1bmNfZGlkZCwKICJudWxsRnVuY19kaWlkZGRkZGlpIjogbnVsbEZ1bmNfZGlpZGRkZGRpaSwKICJudWxsRnVuY19kaWRkZGlkIjogbnVsbEZ1bmNfZGlkZGRpZCwKICJudWxsRnVuY19kaWkiOiBudWxsRnVuY19kaWksCiAibnVsbEZ1bmNfZGlkIjogbnVsbEZ1bmNfZGlkLAogIm51bGxGdW5jX2kiOiBudWxsRnVuY19pLAogIm51bGxGdW5jX2RpZGkiOiBudWxsRnVuY19kaWRpLAogIm51bGxGdW5jX2RpaWRkZGlkIjogbnVsbEZ1bmNfZGlpZGRkaWQsCiAibnVsbEZ1bmNfZGlpZGkiOiBudWxsRnVuY19kaWlkaSwKICJudWxsRnVuY19paWlkIjogbnVsbEZ1bmNfaWlpZCwKICJudWxsRnVuY19kaWRkaWQiOiBudWxsRnVuY19kaWRkaWQsCiAibnVsbEZ1bmNfZGlpZGlkIjogbnVsbEZ1bmNfZGlpZGlkLAogIm51bGxGdW5jX3ZpaWlkIjogbnVsbEZ1bmNfdmlpaWQsCiAibnVsbEZ1bmNfdmlpZGlkIjogbnVsbEZ1bmNfdmlpZGlkLAogIm51bGxGdW5jX2RpZGRkaWkiOiBudWxsRnVuY19kaWRkZGlpLAogIm51bGxGdW5jX3YiOiBudWxsRnVuY192LAogIm51bGxGdW5jX3ZpaWQiOiBudWxsRnVuY192aWlkLAogIm51bGxGdW5jX3ZpaWRpZGQiOiBudWxsRnVuY192aWlkaWRkLAogIm51bGxGdW5jX2RpZGlkaSI6IG51bGxGdW5jX2RpZGlkaSwKICJudWxsRnVuY19paWlpZCI6IG51bGxGdW5jX2lpaWlkLAogIm51bGxGdW5jX3ZpaWlpIjogbnVsbEZ1bmNfdmlpaWksCiAiaW52b2tlX2RpZGRpZGQiOiBpbnZva2VfZGlkZGlkZCwKICJpbnZva2VfZGlkZGkiOiBpbnZva2VfZGlkZGksCiAiaW52b2tlX3ZpaWlpaWRkaSI6IGludm9rZV92aWlpaWlkZGksCiAiaW52b2tlX3ZpZCI6IGludm9rZV92aWQsCiAiaW52b2tlX2RpaWRpZGkiOiBpbnZva2VfZGlpZGlkaSwKICJpbnZva2VfdmkiOiBpbnZva2VfdmksCiAiaW52b2tlX3ZpaSI6IGludm9rZV92aWksCiAiaW52b2tlX2RpaWRpZGRkIjogaW52b2tlX2RpaWRpZGRkLAogImludm9rZV9kaWRkZCI6IGludm9rZV9kaWRkZCwKICJpbnZva2VfdmlpaWlkZGkiOiBpbnZva2VfdmlpaWlkZGksCiAiaW52b2tlX2lpIjogaW52b2tlX2lpLAogImludm9rZV92aWRpZGRkIjogaW52b2tlX3ZpZGlkZGQsCiAiaW52b2tlX3ZpZGlkIjogaW52b2tlX3ZpZGlkLAogImludm9rZV92aWlkZCI6IGludm9rZV92aWlkZCwKICJpbnZva2VfZGlkZGRkZGlpIjogaW52b2tlX2RpZGRkZGRpaSwKICJpbnZva2VfdmlpaWlpIjogaW52b2tlX3ZpaWlpaSwKICJpbnZva2VfdmlkaWkiOiBpbnZva2VfdmlkaWksCiAiaW52b2tlX3ZpZGlkZCI6IGludm9rZV92aWRpZGQsCiAiaW52b2tlX2lpaWlpIjogaW52b2tlX2lpaWlpLAogImludm9rZV9kaWlkZGlkZCI6IGludm9rZV9kaWlkZGlkZCwKICJpbnZva2VfZGlkZGRkZCI6IGludm9rZV9kaWRkZGRkLAogImludm9rZV92aWRkIjogaW52b2tlX3ZpZGQsCiAiaW52b2tlX2lpaWkiOiBpbnZva2VfaWlpaSwKICJpbnZva2VfZGlpZGRpZCI6IGludm9rZV9kaWlkZGlkLAogImludm9rZV9kaWRpZGRkIjogaW52b2tlX2RpZGlkZGQsCiAiaW52b2tlX2RkZGRkZCI6IGludm9rZV9kZGRkZGQsCiAiaW52b2tlX3ZpaWlpaWkiOiBpbnZva2VfdmlpaWlpaSwKICJpbnZva2VfZGlpaWkiOiBpbnZva2VfZGlpaWksCiAiaW52b2tlX3ZpaWkiOiBpbnZva2VfdmlpaSwKICJpbnZva2VfZGkiOiBpbnZva2VfZGksCiAiaW52b2tlX3ZpaWRpaSI6IGludm9rZV92aWlkaWksCiAiaW52b2tlX2RpaWRkZCI6IGludm9rZV9kaWlkZGQsCiAiaW52b2tlX2lpZCI6IGludm9rZV9paWQsCiAiaW52b2tlX2RpaWQiOiBpbnZva2VfZGlpZCwKICJpbnZva2VfZGlpZGQiOiBpbnZva2VfZGlpZGQsCiAiaW52b2tlX2RkZGQiOiBpbnZva2VfZGRkZCwKICJpbnZva2VfZGlkaWQiOiBpbnZva2VfZGlkaWQsCiAiaW52b2tlX3ZpaWRpZGRkIjogaW52b2tlX3ZpaWRpZGRkLAogImludm9rZV9paWkiOiBpbnZva2VfaWlpLAogImludm9rZV9kaWlkZGkiOiBpbnZva2VfZGlpZGRpLAogImludm9rZV9kaWlkZGRkZCI6IGludm9rZV9kaWlkZGRkZCwKICJpbnZva2VfZGlpaSI6IGludm9rZV9kaWlpLAogImludm9rZV9kaWlkZGRpaSI6IGludm9rZV9kaWlkZGRpaSwKICJpbnZva2VfZGlkZCI6IGludm9rZV9kaWRkLAogImludm9rZV9kaWlkZGRkZGlpIjogaW52b2tlX2RpaWRkZGRkaWksCiAiaW52b2tlX2RpZGRkaWQiOiBpbnZva2VfZGlkZGRpZCwKICJpbnZva2VfZGlpIjogaW52b2tlX2RpaSwKICJpbnZva2VfZGlkIjogaW52b2tlX2RpZCwKICJpbnZva2VfaSI6IGludm9rZV9pLAogImludm9rZV9kaWRpIjogaW52b2tlX2RpZGksCiAiaW52b2tlX2RpaWRkZGlkIjogaW52b2tlX2RpaWRkZGlkLAogImludm9rZV9kaWlkaSI6IGludm9rZV9kaWlkaSwKICJpbnZva2VfaWlpZCI6IGludm9rZV9paWlkLAogImludm9rZV9kaWRkaWQiOiBpbnZva2VfZGlkZGlkLAogImludm9rZV9kaWlkaWQiOiBpbnZva2VfZGlpZGlkLAogImludm9rZV92aWlpZCI6IGludm9rZV92aWlpZCwKICJpbnZva2VfdmlpZGlkIjogaW52b2tlX3ZpaWRpZCwKICJpbnZva2VfZGlkZGRpaSI6IGludm9rZV9kaWRkZGlpLAogImludm9rZV92IjogaW52b2tlX3YsCiAiaW52b2tlX3ZpaWQiOiBpbnZva2VfdmlpZCwKICJpbnZva2VfdmlpZGlkZCI6IGludm9rZV92aWlkaWRkLAogImludm9rZV9kaWRpZGkiOiBpbnZva2VfZGlkaWRpLAogImludm9rZV9paWlpZCI6IGludm9rZV9paWlpZCwKICJpbnZva2VfdmlpaWkiOiBpbnZva2VfdmlpaWksCiAiX2ZhYnMiOiBfZmFicywKICJmbG9hdFJlYWRWYWx1ZUZyb21Qb2ludGVyIjogZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlciwKICJzaW1wbGVSZWFkVmFsdWVGcm9tUG9pbnRlciI6IHNpbXBsZVJlYWRWYWx1ZUZyb21Qb2ludGVyLAogIl9zcXJ0ZiI6IF9zcXJ0ZiwKICJ0aHJvd0ludGVybmFsRXJyb3IiOiB0aHJvd0ludGVybmFsRXJyb3IsCiAiZ2V0X2ZpcnN0X2VtdmFsIjogZ2V0X2ZpcnN0X2VtdmFsLAogImdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXMiOiBnZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzLAogIl9fX2Fzc2VydF9mYWlsIjogX19fYXNzZXJ0X2ZhaWwsCiAiX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYiOiBfX1pTdDE4dW5jYXVnaHRfZXhjZXB0aW9udiwKICJDbGFzc0hhbmRsZSI6IENsYXNzSGFuZGxlLAogImdldFNoaWZ0RnJvbVNpemUiOiBnZXRTaGlmdEZyb21TaXplLAogIl9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3BfdGltaW5nIjogX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcF90aW1pbmcsCiAiX3NicmsiOiBfc2JyaywKICJfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jbGFzc19mdW5jdGlvbiI6IF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NsYXNzX2Z1bmN0aW9uLAogIl9fX2N4YV9iZWdpbl9jYXRjaCI6IF9fX2N4YV9iZWdpbl9jYXRjaCwKICJfZW1zY3JpcHRlbl9tZW1jcHlfYmlnIjogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZywKICJydW5EZXN0cnVjdG9yIjogcnVuRGVzdHJ1Y3RvciwKICJfc3lzY29uZiI6IF9zeXNjb25mLAogInRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZCI6IHRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZCwKICJSZWdpc3RlcmVkUG9pbnRlcl9mcm9tV2lyZVR5cGUiOiBSZWdpc3RlcmVkUG9pbnRlcl9mcm9tV2lyZVR5cGUsCiAiaW5pdF9SZWdpc3RlcmVkUG9pbnRlciI6IGluaXRfUmVnaXN0ZXJlZFBvaW50ZXIsCiAiX19fbG9jayI6IF9fX2xvY2ssCiAiX2NvcyI6IF9jb3MsCiAiQ2xhc3NIYW5kbGVfaXNBbGlhc09mIjogQ2xhc3NIYW5kbGVfaXNBbGlhc09mLAogImZsdXNoUGVuZGluZ0RlbGV0ZXMiOiBmbHVzaFBlbmRpbmdEZWxldGVzLAogIm1ha2VDbGFzc0hhbmRsZSI6IG1ha2VDbGFzc0hhbmRsZSwKICJ3aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZCI6IHdoZW5EZXBlbmRlbnRUeXBlc0FyZVJlc29sdmVkLAogIl9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yIjogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IsCiAiX2V4cGYiOiBfZXhwZiwKICJfX19jeGFfcmV0aHJvdyI6IF9fX2N4YV9yZXRocm93LAogImluaXRfQ2xhc3NIYW5kbGUiOiBpbml0X0NsYXNzSGFuZGxlLAogIl9wdGhyZWFkX2NsZWFudXBfcHVzaCI6IF9wdGhyZWFkX2NsZWFudXBfcHVzaCwKICJfX19zeXNjYWxsMTQwIjogX19fc3lzY2FsbDE0MCwKICJDbGFzc0hhbmRsZV9jbG9uZSI6IENsYXNzSGFuZGxlX2Nsb25lLAogIl9fX3N5c2NhbGwxNDYiOiBfX19zeXNjYWxsMTQ2LAogIl9wdGhyZWFkX2NsZWFudXBfcG9wIjogX3B0aHJlYWRfY2xlYW51cF9wb3AsCiAiX2F0YW4yIjogX2F0YW4yLAogInRocm93QmluZGluZ0Vycm9yIjogdGhyb3dCaW5kaW5nRXJyb3IsCiAiUmVnaXN0ZXJlZENsYXNzIjogUmVnaXN0ZXJlZENsYXNzLAogIl9fX2N4YV9mcmVlX2V4Y2VwdGlvbiI6IF9fX2N4YV9mcmVlX2V4Y2VwdGlvbiwKICJfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCI6IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoLAogImVtYmluZF9pbml0X2NoYXJDb2RlcyI6IGVtYmluZF9pbml0X2NoYXJDb2RlcywKICJfX19zZXRFcnJObyI6IF9fX3NldEVyck5vLAogInJlYWRMYXRpbjFTdHJpbmciOiByZWFkTGF0aW4xU3RyaW5nLAogIl9fZW1iaW5kX3JlZ2lzdGVyX2Jvb2wiOiBfX2VtYmluZF9yZWdpc3Rlcl9ib29sLAogIl9fX3Jlc3VtZUV4Y2VwdGlvbiI6IF9fX3Jlc3VtZUV4Y2VwdGlvbiwKICJjcmVhdGVOYW1lZEZ1bmN0aW9uIjogY3JlYXRlTmFtZWRGdW5jdGlvbiwKICJfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSI6IF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5LAogIl9fZW1iaW5kX3JlZ2lzdGVyX2VtdmFsIjogX19lbWJpbmRfcmVnaXN0ZXJfZW12YWwsCiAiX19lbXZhbF90YWtlX3ZhbHVlIjogX19lbXZhbF90YWtlX3ZhbHVlLAogIl9fZW12YWxfZGVjcmVmIjogX19lbXZhbF9kZWNyZWYsCiAiX3B0aHJlYWRfb25jZSI6IF9wdGhyZWFkX29uY2UsCiAiX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MiOiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcywKICJjb25zdE5vU21hcnRQdHJSYXdQb2ludGVyVG9XaXJlVHlwZSI6IGNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlLAogImhlYXAzMlZlY3RvclRvQXJyYXkiOiBoZWFwMzJWZWN0b3JUb0FycmF5LAogIl9fZW12YWxfbG9va3VwVHlwZXMiOiBfX2VtdmFsX2xvb2t1cFR5cGVzLAogIkNsYXNzSGFuZGxlX2RlbGV0ZSI6IENsYXNzSGFuZGxlX2RlbGV0ZSwKICJSZWdpc3RlcmVkUG9pbnRlcl9kZXN0cnVjdG9yIjogUmVnaXN0ZXJlZFBvaW50ZXJfZGVzdHJ1Y3RvciwKICJfX19zeXNjYWxsNiI6IF9fX3N5c2NhbGw2LAogImVuc3VyZU92ZXJsb2FkVGFibGUiOiBlbnN1cmVPdmVybG9hZFRhYmxlLAogIl90aW1lIjogX3RpbWUsCiAibmV3XyI6IG5ld18sCiAiZG93bmNhc3RQb2ludGVyIjogZG93bmNhc3RQb2ludGVyLAogIl9leGl0IjogX2V4aXQsCiAicmVwbGFjZVB1YmxpY1N5bWJvbCI6IHJlcGxhY2VQdWJsaWNTeW1ib2wsCiAiaW5pdF9lbWJpbmQiOiBpbml0X2VtYmluZCwKICJfbGx2bV9wb3dfZjY0IjogX2xsdm1fcG93X2Y2NCwKICJDbGFzc0hhbmRsZV9kZWxldGVMYXRlciI6IENsYXNzSGFuZGxlX2RlbGV0ZUxhdGVyLAogIl9fX3N5c2NhbGw1NCI6IF9fX3N5c2NhbGw1NCwKICJSZWdpc3RlcmVkUG9pbnRlcl9kZWxldGVPYmplY3QiOiBSZWdpc3RlcmVkUG9pbnRlcl9kZWxldGVPYmplY3QsCiAiQ2xhc3NIYW5kbGVfaXNEZWxldGVkIjogQ2xhc3NIYW5kbGVfaXNEZWxldGVkLAogIl9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIiOiBfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyLAogIl9sb2dmIjogX2xvZ2YsCiAiX19fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbiI6IF9fX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24sCiAiX2Zsb29yIjogX2Zsb29yLAogIl9mYWJzZiI6IF9mYWJzZiwKICJfX19jeGFfZW5kX2NhdGNoIjogX19fY3hhX2VuZF9jYXRjaCwKICJnZXRUeXBlTmFtZSI6IGdldFR5cGVOYW1lLAogIl9fZW12YWxfY2FsbCI6IF9fZW12YWxfY2FsbCwKICJ0aHJvd1VuYm91bmRUeXBlRXJyb3IiOiB0aHJvd1VuYm91bmRUeXBlRXJyb3IsCiAiY3JhZnRJbnZva2VyRnVuY3Rpb24iOiBjcmFmdEludm9rZXJGdW5jdGlvbiwKICJydW5EZXN0cnVjdG9ycyI6IHJ1bkRlc3RydWN0b3JzLAogInJlcXVpcmVSZWdpc3RlcmVkVHlwZSI6IHJlcXVpcmVSZWdpc3RlcmVkVHlwZSwKICJtYWtlTGVnYWxGdW5jdGlvbk5hbWUiOiBtYWtlTGVnYWxGdW5jdGlvbk5hbWUsCiAiX2xvZyI6IF9sb2csCiAidXBjYXN0UG9pbnRlciI6IHVwY2FzdFBvaW50ZXIsCiAiaW5pdF9lbXZhbCI6IGluaXRfZW12YWwsCiAic2hhbGxvd0NvcHlJbnRlcm5hbFBvaW50ZXIiOiBzaGFsbG93Q29weUludGVybmFsUG9pbnRlciwKICJub25Db25zdE5vU21hcnRQdHJSYXdQb2ludGVyVG9XaXJlVHlwZSI6IG5vbkNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlLAogIl90YW4iOiBfdGFuLAogIl9hYm9ydCI6IF9hYm9ydCwKICJyZXF1aXJlSGFuZGxlIjogcmVxdWlyZUhhbmRsZSwKICJfZW1iaW5kX3JlcHIiOiBfZW1iaW5kX3JlcHIsCiAidmFsaWRhdGVUaGlzIjogdmFsaWRhdGVUaGlzLAogImV4cG9zZVB1YmxpY1N5bWJvbCI6IGV4cG9zZVB1YmxpY1N5bWJvbCwKICJfX2VtYmluZF9yZWdpc3Rlcl9zdGRfc3RyaW5nIjogX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZywKICJfcHRocmVhZF9nZXRzcGVjaWZpYyI6IF9wdGhyZWFkX2dldHNwZWNpZmljLAogIl9zaW4iOiBfc2luLAogIl9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3IjogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcsCiAiZ2V0SW5oZXJpdGVkSW5zdGFuY2UiOiBnZXRJbmhlcml0ZWRJbnN0YW5jZSwKICJfcHRocmVhZF9rZXlfY3JlYXRlIjogX3B0aHJlYWRfa2V5X2NyZWF0ZSwKICJzZXREZWxheUZ1bmN0aW9uIjogc2V0RGVsYXlGdW5jdGlvbiwKICJfX19neHhfcGVyc29uYWxpdHlfdjAiOiBfX19neHhfcGVyc29uYWxpdHlfdjAsCiAiZXh0ZW5kRXJyb3IiOiBleHRlbmRFcnJvciwKICJfX2VtYmluZF9yZWdpc3Rlcl92b2lkIjogX19lbWJpbmRfcmVnaXN0ZXJfdm9pZCwKICJfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIiOiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIsCiAiUmVnaXN0ZXJlZFBvaW50ZXJfZ2V0UG9pbnRlZSI6IFJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWUsCiAiX19lbXZhbF9yZWdpc3RlciI6IF9fZW12YWxfcmVnaXN0ZXIsCiAiX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3dzdHJpbmciOiBfX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZywKICJfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbiI6IF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uLAogIl9fZXhpdCI6IF9fZXhpdCwKICJSZWdpc3RlcmVkUG9pbnRlciI6IFJlZ2lzdGVyZWRQb2ludGVyLAogIl9fZW12YWxfaW5jcmVmIjogX19lbXZhbF9pbmNyZWYsCiAiX2F0YW4iOiBfYXRhbiwKICJfcHRocmVhZF9zZWxmIjogX3B0aHJlYWRfc2VsZiwKICJnZXRCYXNlc3RQb2ludGVyIjogZ2V0QmFzZXN0UG9pbnRlciwKICJnZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50IjogZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudCwKICJfX2VtYmluZF9yZWdpc3Rlcl9mbG9hdCI6IF9fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0LAogImludGVnZXJSZWFkVmFsdWVGcm9tUG9pbnRlciI6IGludGVnZXJSZWFkVmFsdWVGcm9tUG9pbnRlciwKICJfX191bmxvY2siOiBfX191bmxvY2ssCiAiX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcCI6IF9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3AsCiAiX3B0aHJlYWRfc2V0c3BlY2lmaWMiOiBfcHRocmVhZF9zZXRzcGVjaWZpYywKICJnZW5lcmljUG9pbnRlclRvV2lyZVR5cGUiOiBnZW5lcmljUG9pbnRlclRvV2lyZVR5cGUsCiAicmVnaXN0ZXJUeXBlIjogcmVnaXN0ZXJUeXBlLAogIl9fX2N4YV90aHJvdyI6IF9fX2N4YV90aHJvdywKICJjb3VudF9lbXZhbF9oYW5kbGVzIjogY291bnRfZW12YWxfaGFuZGxlcywKICJyZXF1aXJlRnVuY3Rpb24iOiByZXF1aXJlRnVuY3Rpb24sCiAiX3NxcnQiOiBfc3FydCwKICJTVEFDS1RPUCI6IFNUQUNLVE9QLAogIlNUQUNLX01BWCI6IFNUQUNLX01BWCwKICJ0ZW1wRG91YmxlUHRyIjogdGVtcERvdWJsZVB0ciwKICJBQk9SVCI6IEFCT1JULAogImN0dHpfaTgiOiBjdHR6X2k4Cn07Ci8vIEVNU0NSSVBURU5fU1RBUlRfQVNNCgp2YXIgYXNtID0gKGZ1bmN0aW9uKGdsb2JhbCxlbnYsYnVmZmVyKSB7CgogICd1c2UgYXNtJzsKICAKICAKICB2YXIgSW50OFZpZXcgPSBnbG9iYWwuSW50OEFycmF5OwogIHZhciBJbnQxNlZpZXcgPSBnbG9iYWwuSW50MTZBcnJheTsKICB2YXIgSW50MzJWaWV3ID0gZ2xvYmFsLkludDMyQXJyYXk7CiAgdmFyIFVpbnQ4VmlldyA9IGdsb2JhbC5VaW50OEFycmF5OwogIHZhciBVaW50MTZWaWV3ID0gZ2xvYmFsLlVpbnQxNkFycmF5OwogIHZhciBVaW50MzJWaWV3ID0gZ2xvYmFsLlVpbnQzMkFycmF5OwogIHZhciBGbG9hdDMyVmlldyA9IGdsb2JhbC5GbG9hdDMyQXJyYXk7CiAgdmFyIEZsb2F0NjRWaWV3ID0gZ2xvYmFsLkZsb2F0NjRBcnJheTsKICB2YXIgSEVBUDggPSBuZXcgSW50OFZpZXcoYnVmZmVyKTsKICB2YXIgSEVBUDE2ID0gbmV3IEludDE2VmlldyhidWZmZXIpOwogIHZhciBIRUFQMzIgPSBuZXcgSW50MzJWaWV3KGJ1ZmZlcik7CiAgdmFyIEhFQVBVOCA9IG5ldyBVaW50OFZpZXcoYnVmZmVyKTsKICB2YXIgSEVBUFUxNiA9IG5ldyBVaW50MTZWaWV3KGJ1ZmZlcik7CiAgdmFyIEhFQVBVMzIgPSBuZXcgVWludDMyVmlldyhidWZmZXIpOwogIHZhciBIRUFQRjMyID0gbmV3IEZsb2F0MzJWaWV3KGJ1ZmZlcik7CiAgdmFyIEhFQVBGNjQgPSBuZXcgRmxvYXQ2NFZpZXcoYnVmZmVyKTsKICB2YXIgYnl0ZUxlbmd0aCA9IGdsb2JhbC5ieXRlTGVuZ3RoOwoKCiAgdmFyIFNUQUNLVE9QPWVudi5TVEFDS1RPUHwwOwogIHZhciBTVEFDS19NQVg9ZW52LlNUQUNLX01BWHwwOwogIHZhciB0ZW1wRG91YmxlUHRyPWVudi50ZW1wRG91YmxlUHRyfDA7CiAgdmFyIEFCT1JUPWVudi5BQk9SVHwwOwogIHZhciBjdHR6X2k4PWVudi5jdHR6X2k4fDA7CgogIHZhciBfX1RIUkVXX18gPSAwOwogIHZhciB0aHJld1ZhbHVlID0gMDsKICB2YXIgc2V0am1wSWQgPSAwOwogIHZhciB1bmRlZiA9IDA7CiAgdmFyIG5hbiA9IGdsb2JhbC5OYU4sIGluZiA9IGdsb2JhbC5JbmZpbml0eTsKICB2YXIgdGVtcEludCA9IDAsIHRlbXBCaWdJbnQgPSAwLCB0ZW1wQmlnSW50UCA9IDAsIHRlbXBCaWdJbnRTID0gMCwgdGVtcEJpZ0ludFIgPSAwLjAsIHRlbXBCaWdJbnRJID0gMCwgdGVtcEJpZ0ludEQgPSAwLCB0ZW1wVmFsdWUgPSAwLCB0ZW1wRG91YmxlID0gMC4wOwoKICB2YXIgdGVtcFJldDAgPSAwOwogIHZhciB0ZW1wUmV0MSA9IDA7CiAgdmFyIHRlbXBSZXQyID0gMDsKICB2YXIgdGVtcFJldDMgPSAwOwogIHZhciB0ZW1wUmV0NCA9IDA7CiAgdmFyIHRlbXBSZXQ1ID0gMDsKICB2YXIgdGVtcFJldDYgPSAwOwogIHZhciB0ZW1wUmV0NyA9IDA7CiAgdmFyIHRlbXBSZXQ4ID0gMDsKICB2YXIgdGVtcFJldDkgPSAwOwogIHZhciBNYXRoX2Zsb29yPWdsb2JhbC5NYXRoLmZsb29yOwogIHZhciBNYXRoX2Ficz1nbG9iYWwuTWF0aC5hYnM7CiAgdmFyIE1hdGhfc3FydD1nbG9iYWwuTWF0aC5zcXJ0OwogIHZhciBNYXRoX3Bvdz1nbG9iYWwuTWF0aC5wb3c7CiAgdmFyIE1hdGhfY29zPWdsb2JhbC5NYXRoLmNvczsKICB2YXIgTWF0aF9zaW49Z2xvYmFsLk1hdGguc2luOwogIHZhciBNYXRoX3Rhbj1nbG9iYWwuTWF0aC50YW47CiAgdmFyIE1hdGhfYWNvcz1nbG9iYWwuTWF0aC5hY29zOwogIHZhciBNYXRoX2FzaW49Z2xvYmFsLk1hdGguYXNpbjsKICB2YXIgTWF0aF9hdGFuPWdsb2JhbC5NYXRoLmF0YW47CiAgdmFyIE1hdGhfYXRhbjI9Z2xvYmFsLk1hdGguYXRhbjI7CiAgdmFyIE1hdGhfZXhwPWdsb2JhbC5NYXRoLmV4cDsKICB2YXIgTWF0aF9sb2c9Z2xvYmFsLk1hdGgubG9nOwogIHZhciBNYXRoX2NlaWw9Z2xvYmFsLk1hdGguY2VpbDsKICB2YXIgTWF0aF9pbXVsPWdsb2JhbC5NYXRoLmltdWw7CiAgdmFyIE1hdGhfbWluPWdsb2JhbC5NYXRoLm1pbjsKICB2YXIgTWF0aF9jbHozMj1nbG9iYWwuTWF0aC5jbHozMjsKICB2YXIgYWJvcnQ9ZW52LmFib3J0OwogIHZhciBhc3NlcnQ9ZW52LmFzc2VydDsKICB2YXIgbnVsbEZ1bmNfZGlkZGlkZD1lbnYubnVsbEZ1bmNfZGlkZGlkZDsKICB2YXIgbnVsbEZ1bmNfZGlkZGk9ZW52Lm51bGxGdW5jX2RpZGRpOwogIHZhciBudWxsRnVuY192aWlpaWlkZGk9ZW52Lm51bGxGdW5jX3ZpaWlpaWRkaTsKICB2YXIgbnVsbEZ1bmNfdmlkPWVudi5udWxsRnVuY192aWQ7CiAgdmFyIG51bGxGdW5jX2RpaWRpZGk9ZW52Lm51bGxGdW5jX2RpaWRpZGk7CiAgdmFyIG51bGxGdW5jX3ZpPWVudi5udWxsRnVuY192aTsKICB2YXIgbnVsbEZ1bmNfdmlpPWVudi5udWxsRnVuY192aWk7CiAgdmFyIG51bGxGdW5jX2RpaWRpZGRkPWVudi5udWxsRnVuY19kaWlkaWRkZDsKICB2YXIgbnVsbEZ1bmNfZGlkZGQ9ZW52Lm51bGxGdW5jX2RpZGRkOwogIHZhciBudWxsRnVuY192aWlpaWRkaT1lbnYubnVsbEZ1bmNfdmlpaWlkZGk7CiAgdmFyIG51bGxGdW5jX2lpPWVudi5udWxsRnVuY19paTsKICB2YXIgbnVsbEZ1bmNfdmlkaWRkZD1lbnYubnVsbEZ1bmNfdmlkaWRkZDsKICB2YXIgbnVsbEZ1bmNfdmlkaWQ9ZW52Lm51bGxGdW5jX3ZpZGlkOwogIHZhciBudWxsRnVuY192aWlkZD1lbnYubnVsbEZ1bmNfdmlpZGQ7CiAgdmFyIG51bGxGdW5jX2RpZGRkZGRpaT1lbnYubnVsbEZ1bmNfZGlkZGRkZGlpOwogIHZhciBudWxsRnVuY192aWlpaWk9ZW52Lm51bGxGdW5jX3ZpaWlpaTsKICB2YXIgbnVsbEZ1bmNfdmlkaWk9ZW52Lm51bGxGdW5jX3ZpZGlpOwogIHZhciBudWxsRnVuY192aWRpZGQ9ZW52Lm51bGxGdW5jX3ZpZGlkZDsKICB2YXIgbnVsbEZ1bmNfaWlpaWk9ZW52Lm51bGxGdW5jX2lpaWlpOwogIHZhciBudWxsRnVuY19kaWlkZGlkZD1lbnYubnVsbEZ1bmNfZGlpZGRpZGQ7CiAgdmFyIG51bGxGdW5jX2RpZGRkZGQ9ZW52Lm51bGxGdW5jX2RpZGRkZGQ7CiAgdmFyIG51bGxGdW5jX3ZpZGQ9ZW52Lm51bGxGdW5jX3ZpZGQ7CiAgdmFyIG51bGxGdW5jX2lpaWk9ZW52Lm51bGxGdW5jX2lpaWk7CiAgdmFyIG51bGxGdW5jX2RpaWRkaWQ9ZW52Lm51bGxGdW5jX2RpaWRkaWQ7CiAgdmFyIG51bGxGdW5jX2RpZGlkZGQ9ZW52Lm51bGxGdW5jX2RpZGlkZGQ7CiAgdmFyIG51bGxGdW5jX2RkZGRkZD1lbnYubnVsbEZ1bmNfZGRkZGRkOwogIHZhciBudWxsRnVuY192aWlpaWlpPWVudi5udWxsRnVuY192aWlpaWlpOwogIHZhciBudWxsRnVuY19kaWlpaT1lbnYubnVsbEZ1bmNfZGlpaWk7CiAgdmFyIG51bGxGdW5jX3ZpaWk9ZW52Lm51bGxGdW5jX3ZpaWk7CiAgdmFyIG51bGxGdW5jX2RpPWVudi5udWxsRnVuY19kaTsKICB2YXIgbnVsbEZ1bmNfdmlpZGlpPWVudi5udWxsRnVuY192aWlkaWk7CiAgdmFyIG51bGxGdW5jX2RpaWRkZD1lbnYubnVsbEZ1bmNfZGlpZGRkOwogIHZhciBudWxsRnVuY19paWQ9ZW52Lm51bGxGdW5jX2lpZDsKICB2YXIgbnVsbEZ1bmNfZGlpZD1lbnYubnVsbEZ1bmNfZGlpZDsKICB2YXIgbnVsbEZ1bmNfZGlpZGQ9ZW52Lm51bGxGdW5jX2RpaWRkOwogIHZhciBudWxsRnVuY19kZGRkPWVudi5udWxsRnVuY19kZGRkOwogIHZhciBudWxsRnVuY19kaWRpZD1lbnYubnVsbEZ1bmNfZGlkaWQ7CiAgdmFyIG51bGxGdW5jX3ZpaWRpZGRkPWVudi5udWxsRnVuY192aWlkaWRkZDsKICB2YXIgbnVsbEZ1bmNfaWlpPWVudi5udWxsRnVuY19paWk7CiAgdmFyIG51bGxGdW5jX2RpaWRkaT1lbnYubnVsbEZ1bmNfZGlpZGRpOwogIHZhciBudWxsRnVuY19kaWlkZGRkZD1lbnYubnVsbEZ1bmNfZGlpZGRkZGQ7CiAgdmFyIG51bGxGdW5jX2RpaWk9ZW52Lm51bGxGdW5jX2RpaWk7CiAgdmFyIG51bGxGdW5jX2RpaWRkZGlpPWVudi5udWxsRnVuY19kaWlkZGRpaTsKICB2YXIgbnVsbEZ1bmNfZGlkZD1lbnYubnVsbEZ1bmNfZGlkZDsKICB2YXIgbnVsbEZ1bmNfZGlpZGRkZGRpaT1lbnYubnVsbEZ1bmNfZGlpZGRkZGRpaTsKICB2YXIgbnVsbEZ1bmNfZGlkZGRpZD1lbnYubnVsbEZ1bmNfZGlkZGRpZDsKICB2YXIgbnVsbEZ1bmNfZGlpPWVudi5udWxsRnVuY19kaWk7CiAgdmFyIG51bGxGdW5jX2RpZD1lbnYubnVsbEZ1bmNfZGlkOwogIHZhciBudWxsRnVuY19pPWVudi5udWxsRnVuY19pOwogIHZhciBudWxsRnVuY19kaWRpPWVudi5udWxsRnVuY19kaWRpOwogIHZhciBudWxsRnVuY19kaWlkZGRpZD1lbnYubnVsbEZ1bmNfZGlpZGRkaWQ7CiAgdmFyIG51bGxGdW5jX2RpaWRpPWVudi5udWxsRnVuY19kaWlkaTsKICB2YXIgbnVsbEZ1bmNfaWlpZD1lbnYubnVsbEZ1bmNfaWlpZDsKICB2YXIgbnVsbEZ1bmNfZGlkZGlkPWVudi5udWxsRnVuY19kaWRkaWQ7CiAgdmFyIG51bGxGdW5jX2RpaWRpZD1lbnYubnVsbEZ1bmNfZGlpZGlkOwogIHZhciBudWxsRnVuY192aWlpZD1lbnYubnVsbEZ1bmNfdmlpaWQ7CiAgdmFyIG51bGxGdW5jX3ZpaWRpZD1lbnYubnVsbEZ1bmNfdmlpZGlkOwogIHZhciBudWxsRnVuY19kaWRkZGlpPWVudi5udWxsRnVuY19kaWRkZGlpOwogIHZhciBudWxsRnVuY192PWVudi5udWxsRnVuY192OwogIHZhciBudWxsRnVuY192aWlkPWVudi5udWxsRnVuY192aWlkOwogIHZhciBudWxsRnVuY192aWlkaWRkPWVudi5udWxsRnVuY192aWlkaWRkOwogIHZhciBudWxsRnVuY19kaWRpZGk9ZW52Lm51bGxGdW5jX2RpZGlkaTsKICB2YXIgbnVsbEZ1bmNfaWlpaWQ9ZW52Lm51bGxGdW5jX2lpaWlkOwogIHZhciBudWxsRnVuY192aWlpaT1lbnYubnVsbEZ1bmNfdmlpaWk7CiAgdmFyIGludm9rZV9kaWRkaWRkPWVudi5pbnZva2VfZGlkZGlkZDsKICB2YXIgaW52b2tlX2RpZGRpPWVudi5pbnZva2VfZGlkZGk7CiAgdmFyIGludm9rZV92aWlpaWlkZGk9ZW52Lmludm9rZV92aWlpaWlkZGk7CiAgdmFyIGludm9rZV92aWQ9ZW52Lmludm9rZV92aWQ7CiAgdmFyIGludm9rZV9kaWlkaWRpPWVudi5pbnZva2VfZGlpZGlkaTsKICB2YXIgaW52b2tlX3ZpPWVudi5pbnZva2Vfdmk7CiAgdmFyIGludm9rZV92aWk9ZW52Lmludm9rZV92aWk7CiAgdmFyIGludm9rZV9kaWlkaWRkZD1lbnYuaW52b2tlX2RpaWRpZGRkOwogIHZhciBpbnZva2VfZGlkZGQ9ZW52Lmludm9rZV9kaWRkZDsKICB2YXIgaW52b2tlX3ZpaWlpZGRpPWVudi5pbnZva2VfdmlpaWlkZGk7CiAgdmFyIGludm9rZV9paT1lbnYuaW52b2tlX2lpOwogIHZhciBpbnZva2VfdmlkaWRkZD1lbnYuaW52b2tlX3ZpZGlkZGQ7CiAgdmFyIGludm9rZV92aWRpZD1lbnYuaW52b2tlX3ZpZGlkOwogIHZhciBpbnZva2VfdmlpZGQ9ZW52Lmludm9rZV92aWlkZDsKICB2YXIgaW52b2tlX2RpZGRkZGRpaT1lbnYuaW52b2tlX2RpZGRkZGRpaTsKICB2YXIgaW52b2tlX3ZpaWlpaT1lbnYuaW52b2tlX3ZpaWlpaTsKICB2YXIgaW52b2tlX3ZpZGlpPWVudi5pbnZva2VfdmlkaWk7CiAgdmFyIGludm9rZV92aWRpZGQ9ZW52Lmludm9rZV92aWRpZGQ7CiAgdmFyIGludm9rZV9paWlpaT1lbnYuaW52b2tlX2lpaWlpOwogIHZhciBpbnZva2VfZGlpZGRpZGQ9ZW52Lmludm9rZV9kaWlkZGlkZDsKICB2YXIgaW52b2tlX2RpZGRkZGQ9ZW52Lmludm9rZV9kaWRkZGRkOwogIHZhciBpbnZva2VfdmlkZD1lbnYuaW52b2tlX3ZpZGQ7CiAgdmFyIGludm9rZV9paWlpPWVudi5pbnZva2VfaWlpaTsKICB2YXIgaW52b2tlX2RpaWRkaWQ9ZW52Lmludm9rZV9kaWlkZGlkOwogIHZhciBpbnZva2VfZGlkaWRkZD1lbnYuaW52b2tlX2RpZGlkZGQ7CiAgdmFyIGludm9rZV9kZGRkZGQ9ZW52Lmludm9rZV9kZGRkZGQ7CiAgdmFyIGludm9rZV92aWlpaWlpPWVudi5pbnZva2VfdmlpaWlpaTsKICB2YXIgaW52b2tlX2RpaWlpPWVudi5pbnZva2VfZGlpaWk7CiAgdmFyIGludm9rZV92aWlpPWVudi5pbnZva2VfdmlpaTsKICB2YXIgaW52b2tlX2RpPWVudi5pbnZva2VfZGk7CiAgdmFyIGludm9rZV92aWlkaWk9ZW52Lmludm9rZV92aWlkaWk7CiAgdmFyIGludm9rZV9kaWlkZGQ9ZW52Lmludm9rZV9kaWlkZGQ7CiAgdmFyIGludm9rZV9paWQ9ZW52Lmludm9rZV9paWQ7CiAgdmFyIGludm9rZV9kaWlkPWVudi5pbnZva2VfZGlpZDsKICB2YXIgaW52b2tlX2RpaWRkPWVudi5pbnZva2VfZGlpZGQ7CiAgdmFyIGludm9rZV9kZGRkPWVudi5pbnZva2VfZGRkZDsKICB2YXIgaW52b2tlX2RpZGlkPWVudi5pbnZva2VfZGlkaWQ7CiAgdmFyIGludm9rZV92aWlkaWRkZD1lbnYuaW52b2tlX3ZpaWRpZGRkOwogIHZhciBpbnZva2VfaWlpPWVudi5pbnZva2VfaWlpOwogIHZhciBpbnZva2VfZGlpZGRpPWVudi5pbnZva2VfZGlpZGRpOwogIHZhciBpbnZva2VfZGlpZGRkZGQ9ZW52Lmludm9rZV9kaWlkZGRkZDsKICB2YXIgaW52b2tlX2RpaWk9ZW52Lmludm9rZV9kaWlpOwogIHZhciBpbnZva2VfZGlpZGRkaWk9ZW52Lmludm9rZV9kaWlkZGRpaTsKICB2YXIgaW52b2tlX2RpZGQ9ZW52Lmludm9rZV9kaWRkOwogIHZhciBpbnZva2VfZGlpZGRkZGRpaT1lbnYuaW52b2tlX2RpaWRkZGRkaWk7CiAgdmFyIGludm9rZV9kaWRkZGlkPWVudi5pbnZva2VfZGlkZGRpZDsKICB2YXIgaW52b2tlX2RpaT1lbnYuaW52b2tlX2RpaTsKICB2YXIgaW52b2tlX2RpZD1lbnYuaW52b2tlX2RpZDsKICB2YXIgaW52b2tlX2k9ZW52Lmludm9rZV9pOwogIHZhciBpbnZva2VfZGlkaT1lbnYuaW52b2tlX2RpZGk7CiAgdmFyIGludm9rZV9kaWlkZGRpZD1lbnYuaW52b2tlX2RpaWRkZGlkOwogIHZhciBpbnZva2VfZGlpZGk9ZW52Lmludm9rZV9kaWlkaTsKICB2YXIgaW52b2tlX2lpaWQ9ZW52Lmludm9rZV9paWlkOwogIHZhciBpbnZva2VfZGlkZGlkPWVudi5pbnZva2VfZGlkZGlkOwogIHZhciBpbnZva2VfZGlpZGlkPWVudi5pbnZva2VfZGlpZGlkOwogIHZhciBpbnZva2VfdmlpaWQ9ZW52Lmludm9rZV92aWlpZDsKICB2YXIgaW52b2tlX3ZpaWRpZD1lbnYuaW52b2tlX3ZpaWRpZDsKICB2YXIgaW52b2tlX2RpZGRkaWk9ZW52Lmludm9rZV9kaWRkZGlpOwogIHZhciBpbnZva2Vfdj1lbnYuaW52b2tlX3Y7CiAgdmFyIGludm9rZV92aWlkPWVudi5pbnZva2VfdmlpZDsKICB2YXIgaW52b2tlX3ZpaWRpZGQ9ZW52Lmludm9rZV92aWlkaWRkOwogIHZhciBpbnZva2VfZGlkaWRpPWVudi5pbnZva2VfZGlkaWRpOwogIHZhciBpbnZva2VfaWlpaWQ9ZW52Lmludm9rZV9paWlpZDsKICB2YXIgaW52b2tlX3ZpaWlpPWVudi5pbnZva2VfdmlpaWk7CiAgdmFyIF9mYWJzPWVudi5fZmFiczsKICB2YXIgZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlcj1lbnYuZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlcjsKICB2YXIgc2ltcGxlUmVhZFZhbHVlRnJvbVBvaW50ZXI9ZW52LnNpbXBsZVJlYWRWYWx1ZUZyb21Qb2ludGVyOwogIHZhciBfc3FydGY9ZW52Ll9zcXJ0ZjsKICB2YXIgdGhyb3dJbnRlcm5hbEVycm9yPWVudi50aHJvd0ludGVybmFsRXJyb3I7CiAgdmFyIGdldF9maXJzdF9lbXZhbD1lbnYuZ2V0X2ZpcnN0X2VtdmFsOwogIHZhciBnZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzPWVudi5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzOwogIHZhciBfX19hc3NlcnRfZmFpbD1lbnYuX19fYXNzZXJ0X2ZhaWw7CiAgdmFyIF9fWlN0MTh1bmNhdWdodF9leGNlcHRpb252PWVudi5fX1pTdDE4dW5jYXVnaHRfZXhjZXB0aW9udjsKICB2YXIgQ2xhc3NIYW5kbGU9ZW52LkNsYXNzSGFuZGxlOwogIHZhciBnZXRTaGlmdEZyb21TaXplPWVudi5nZXRTaGlmdEZyb21TaXplOwogIHZhciBfZW1zY3JpcHRlbl9zZXRfbWFpbl9sb29wX3RpbWluZz1lbnYuX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcF90aW1pbmc7CiAgdmFyIF9zYnJrPWVudi5fc2JyazsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY2xhc3NfZnVuY3Rpb249ZW52Ll9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NsYXNzX2Z1bmN0aW9uOwogIHZhciBfX19jeGFfYmVnaW5fY2F0Y2g9ZW52Ll9fX2N4YV9iZWdpbl9jYXRjaDsKICB2YXIgX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZz1lbnYuX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZzsKICB2YXIgcnVuRGVzdHJ1Y3Rvcj1lbnYucnVuRGVzdHJ1Y3RvcjsKICB2YXIgX3N5c2NvbmY9ZW52Ll9zeXNjb25mOwogIHZhciB0aHJvd0luc3RhbmNlQWxyZWFkeURlbGV0ZWQ9ZW52LnRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZDsKICB2YXIgUmVnaXN0ZXJlZFBvaW50ZXJfZnJvbVdpcmVUeXBlPWVudi5SZWdpc3RlcmVkUG9pbnRlcl9mcm9tV2lyZVR5cGU7CiAgdmFyIGluaXRfUmVnaXN0ZXJlZFBvaW50ZXI9ZW52LmluaXRfUmVnaXN0ZXJlZFBvaW50ZXI7CiAgdmFyIF9fX2xvY2s9ZW52Ll9fX2xvY2s7CiAgdmFyIF9jb3M9ZW52Ll9jb3M7CiAgdmFyIENsYXNzSGFuZGxlX2lzQWxpYXNPZj1lbnYuQ2xhc3NIYW5kbGVfaXNBbGlhc09mOwogIHZhciBmbHVzaFBlbmRpbmdEZWxldGVzPWVudi5mbHVzaFBlbmRpbmdEZWxldGVzOwogIHZhciBtYWtlQ2xhc3NIYW5kbGU9ZW52Lm1ha2VDbGFzc0hhbmRsZTsKICB2YXIgd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQ9ZW52LndoZW5EZXBlbmRlbnRUeXBlc0FyZVJlc29sdmVkOwogIHZhciBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3Rvcj1lbnYuX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3I7CiAgdmFyIF9leHBmPWVudi5fZXhwZjsKICB2YXIgX19fY3hhX3JldGhyb3c9ZW52Ll9fX2N4YV9yZXRocm93OwogIHZhciBpbml0X0NsYXNzSGFuZGxlPWVudi5pbml0X0NsYXNzSGFuZGxlOwogIHZhciBfcHRocmVhZF9jbGVhbnVwX3B1c2g9ZW52Ll9wdGhyZWFkX2NsZWFudXBfcHVzaDsKICB2YXIgX19fc3lzY2FsbDE0MD1lbnYuX19fc3lzY2FsbDE0MDsKICB2YXIgQ2xhc3NIYW5kbGVfY2xvbmU9ZW52LkNsYXNzSGFuZGxlX2Nsb25lOwogIHZhciBfX19zeXNjYWxsMTQ2PWVudi5fX19zeXNjYWxsMTQ2OwogIHZhciBfcHRocmVhZF9jbGVhbnVwX3BvcD1lbnYuX3B0aHJlYWRfY2xlYW51cF9wb3A7CiAgdmFyIF9hdGFuMj1lbnYuX2F0YW4yOwogIHZhciB0aHJvd0JpbmRpbmdFcnJvcj1lbnYudGhyb3dCaW5kaW5nRXJyb3I7CiAgdmFyIFJlZ2lzdGVyZWRDbGFzcz1lbnYuUmVnaXN0ZXJlZENsYXNzOwogIHZhciBfX19jeGFfZnJlZV9leGNlcHRpb249ZW52Ll9fX2N4YV9mcmVlX2V4Y2VwdGlvbjsKICB2YXIgX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2g9ZW52Ll9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoOwogIHZhciBlbWJpbmRfaW5pdF9jaGFyQ29kZXM9ZW52LmVtYmluZF9pbml0X2NoYXJDb2RlczsKICB2YXIgX19fc2V0RXJyTm89ZW52Ll9fX3NldEVyck5vOwogIHZhciByZWFkTGF0aW4xU3RyaW5nPWVudi5yZWFkTGF0aW4xU3RyaW5nOwogIHZhciBfX2VtYmluZF9yZWdpc3Rlcl9ib29sPWVudi5fX2VtYmluZF9yZWdpc3Rlcl9ib29sOwogIHZhciBfX19yZXN1bWVFeGNlcHRpb249ZW52Ll9fX3Jlc3VtZUV4Y2VwdGlvbjsKICB2YXIgY3JlYXRlTmFtZWRGdW5jdGlvbj1lbnYuY3JlYXRlTmFtZWRGdW5jdGlvbjsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfcHJvcGVydHk9ZW52Ll9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5OwogIHZhciBfX2VtYmluZF9yZWdpc3Rlcl9lbXZhbD1lbnYuX19lbWJpbmRfcmVnaXN0ZXJfZW12YWw7CiAgdmFyIF9fZW12YWxfdGFrZV92YWx1ZT1lbnYuX19lbXZhbF90YWtlX3ZhbHVlOwogIHZhciBfX2VtdmFsX2RlY3JlZj1lbnYuX19lbXZhbF9kZWNyZWY7CiAgdmFyIF9wdGhyZWFkX29uY2U9ZW52Ll9wdGhyZWFkX29uY2U7CiAgdmFyIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzPWVudi5fX2VtYmluZF9yZWdpc3Rlcl9jbGFzczsKICB2YXIgY29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGU9ZW52LmNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlOwogIHZhciBoZWFwMzJWZWN0b3JUb0FycmF5PWVudi5oZWFwMzJWZWN0b3JUb0FycmF5OwogIHZhciBfX2VtdmFsX2xvb2t1cFR5cGVzPWVudi5fX2VtdmFsX2xvb2t1cFR5cGVzOwogIHZhciBDbGFzc0hhbmRsZV9kZWxldGU9ZW52LkNsYXNzSGFuZGxlX2RlbGV0ZTsKICB2YXIgUmVnaXN0ZXJlZFBvaW50ZXJfZGVzdHJ1Y3Rvcj1lbnYuUmVnaXN0ZXJlZFBvaW50ZXJfZGVzdHJ1Y3RvcjsKICB2YXIgX19fc3lzY2FsbDY9ZW52Ll9fX3N5c2NhbGw2OwogIHZhciBlbnN1cmVPdmVybG9hZFRhYmxlPWVudi5lbnN1cmVPdmVybG9hZFRhYmxlOwogIHZhciBfdGltZT1lbnYuX3RpbWU7CiAgdmFyIG5ld189ZW52Lm5ld187CiAgdmFyIGRvd25jYXN0UG9pbnRlcj1lbnYuZG93bmNhc3RQb2ludGVyOwogIHZhciBfZXhpdD1lbnYuX2V4aXQ7CiAgdmFyIHJlcGxhY2VQdWJsaWNTeW1ib2w9ZW52LnJlcGxhY2VQdWJsaWNTeW1ib2w7CiAgdmFyIGluaXRfZW1iaW5kPWVudi5pbml0X2VtYmluZDsKICB2YXIgX2xsdm1fcG93X2Y2ND1lbnYuX2xsdm1fcG93X2Y2NDsKICB2YXIgQ2xhc3NIYW5kbGVfZGVsZXRlTGF0ZXI9ZW52LkNsYXNzSGFuZGxlX2RlbGV0ZUxhdGVyOwogIHZhciBfX19zeXNjYWxsNTQ9ZW52Ll9fX3N5c2NhbGw1NDsKICB2YXIgUmVnaXN0ZXJlZFBvaW50ZXJfZGVsZXRlT2JqZWN0PWVudi5SZWdpc3RlcmVkUG9pbnRlcl9kZWxldGVPYmplY3Q7CiAgdmFyIENsYXNzSGFuZGxlX2lzRGVsZXRlZD1lbnYuQ2xhc3NIYW5kbGVfaXNEZWxldGVkOwogIHZhciBfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyPWVudi5fX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyOwogIHZhciBfbG9nZj1lbnYuX2xvZ2Y7CiAgdmFyIF9fX2N4YV9hbGxvY2F0ZV9leGNlcHRpb249ZW52Ll9fX2N4YV9hbGxvY2F0ZV9leGNlcHRpb247CiAgdmFyIF9mbG9vcj1lbnYuX2Zsb29yOwogIHZhciBfZmFic2Y9ZW52Ll9mYWJzZjsKICB2YXIgX19fY3hhX2VuZF9jYXRjaD1lbnYuX19fY3hhX2VuZF9jYXRjaDsKICB2YXIgZ2V0VHlwZU5hbWU9ZW52LmdldFR5cGVOYW1lOwogIHZhciBfX2VtdmFsX2NhbGw9ZW52Ll9fZW12YWxfY2FsbDsKICB2YXIgdGhyb3dVbmJvdW5kVHlwZUVycm9yPWVudi50aHJvd1VuYm91bmRUeXBlRXJyb3I7CiAgdmFyIGNyYWZ0SW52b2tlckZ1bmN0aW9uPWVudi5jcmFmdEludm9rZXJGdW5jdGlvbjsKICB2YXIgcnVuRGVzdHJ1Y3RvcnM9ZW52LnJ1bkRlc3RydWN0b3JzOwogIHZhciByZXF1aXJlUmVnaXN0ZXJlZFR5cGU9ZW52LnJlcXVpcmVSZWdpc3RlcmVkVHlwZTsKICB2YXIgbWFrZUxlZ2FsRnVuY3Rpb25OYW1lPWVudi5tYWtlTGVnYWxGdW5jdGlvbk5hbWU7CiAgdmFyIF9sb2c9ZW52Ll9sb2c7CiAgdmFyIHVwY2FzdFBvaW50ZXI9ZW52LnVwY2FzdFBvaW50ZXI7CiAgdmFyIGluaXRfZW12YWw9ZW52LmluaXRfZW12YWw7CiAgdmFyIHNoYWxsb3dDb3B5SW50ZXJuYWxQb2ludGVyPWVudi5zaGFsbG93Q29weUludGVybmFsUG9pbnRlcjsKICB2YXIgbm9uQ29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGU9ZW52Lm5vbkNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlOwogIHZhciBfdGFuPWVudi5fdGFuOwogIHZhciBfYWJvcnQ9ZW52Ll9hYm9ydDsKICB2YXIgcmVxdWlyZUhhbmRsZT1lbnYucmVxdWlyZUhhbmRsZTsKICB2YXIgX2VtYmluZF9yZXByPWVudi5fZW1iaW5kX3JlcHI7CiAgdmFyIHZhbGlkYXRlVGhpcz1lbnYudmFsaWRhdGVUaGlzOwogIHZhciBleHBvc2VQdWJsaWNTeW1ib2w9ZW52LmV4cG9zZVB1YmxpY1N5bWJvbDsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZz1lbnYuX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZzsKICB2YXIgX3B0aHJlYWRfZ2V0c3BlY2lmaWM9ZW52Ll9wdGhyZWFkX2dldHNwZWNpZmljOwogIHZhciBfc2luPWVudi5fc2luOwogIHZhciBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldz1lbnYuX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXc7CiAgdmFyIGdldEluaGVyaXRlZEluc3RhbmNlPWVudi5nZXRJbmhlcml0ZWRJbnN0YW5jZTsKICB2YXIgX3B0aHJlYWRfa2V5X2NyZWF0ZT1lbnYuX3B0aHJlYWRfa2V5X2NyZWF0ZTsKICB2YXIgc2V0RGVsYXlGdW5jdGlvbj1lbnYuc2V0RGVsYXlGdW5jdGlvbjsKICB2YXIgX19fZ3h4X3BlcnNvbmFsaXR5X3YwPWVudi5fX19neHhfcGVyc29uYWxpdHlfdjA7CiAgdmFyIGV4dGVuZEVycm9yPWVudi5leHRlbmRFcnJvcjsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfdm9pZD1lbnYuX19lbWJpbmRfcmVnaXN0ZXJfdm9pZDsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyPWVudi5fX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHI7CiAgdmFyIFJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWU9ZW52LlJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWU7CiAgdmFyIF9fZW12YWxfcmVnaXN0ZXI9ZW52Ll9fZW12YWxfcmVnaXN0ZXI7CiAgdmFyIF9fZW1iaW5kX3JlZ2lzdGVyX3N0ZF93c3RyaW5nPWVudi5fX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZzsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb249ZW52Ll9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uOwogIHZhciBfX2V4aXQ9ZW52Ll9fZXhpdDsKICB2YXIgUmVnaXN0ZXJlZFBvaW50ZXI9ZW52LlJlZ2lzdGVyZWRQb2ludGVyOwogIHZhciBfX2VtdmFsX2luY3JlZj1lbnYuX19lbXZhbF9pbmNyZWY7CiAgdmFyIF9hdGFuPWVudi5fYXRhbjsKICB2YXIgX3B0aHJlYWRfc2VsZj1lbnYuX3B0aHJlYWRfc2VsZjsKICB2YXIgZ2V0QmFzZXN0UG9pbnRlcj1lbnYuZ2V0QmFzZXN0UG9pbnRlcjsKICB2YXIgZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1lbnYuZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudDsKICB2YXIgX19lbWJpbmRfcmVnaXN0ZXJfZmxvYXQ9ZW52Ll9fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0OwogIHZhciBpbnRlZ2VyUmVhZFZhbHVlRnJvbVBvaW50ZXI9ZW52LmludGVnZXJSZWFkVmFsdWVGcm9tUG9pbnRlcjsKICB2YXIgX19fdW5sb2NrPWVudi5fX191bmxvY2s7CiAgdmFyIF9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3A9ZW52Ll9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3A7CiAgdmFyIF9wdGhyZWFkX3NldHNwZWNpZmljPWVudi5fcHRocmVhZF9zZXRzcGVjaWZpYzsKICB2YXIgZ2VuZXJpY1BvaW50ZXJUb1dpcmVUeXBlPWVudi5nZW5lcmljUG9pbnRlclRvV2lyZVR5cGU7CiAgdmFyIHJlZ2lzdGVyVHlwZT1lbnYucmVnaXN0ZXJUeXBlOwogIHZhciBfX19jeGFfdGhyb3c9ZW52Ll9fX2N4YV90aHJvdzsKICB2YXIgY291bnRfZW12YWxfaGFuZGxlcz1lbnYuY291bnRfZW12YWxfaGFuZGxlczsKICB2YXIgcmVxdWlyZUZ1bmN0aW9uPWVudi5yZXF1aXJlRnVuY3Rpb247CiAgdmFyIF9zcXJ0PWVudi5fc3FydDsKICB2YXIgdGVtcEZsb2F0ID0gMC4wOwoKZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnkobmV3QnVmZmVyKSB7CiAgaWYgKChieXRlTGVuZ3RoKG5ld0J1ZmZlcikgJiAweGZmZmZmZiB8fCBieXRlTGVuZ3RoKG5ld0J1ZmZlcikgPD0gMHhmZmZmZmYpIHx8IGJ5dGVMZW5ndGgobmV3QnVmZmVyKSA+IDB4ODAwMDAwMDApIHJldHVybiBmYWxzZTsKICBIRUFQOCA9IG5ldyBJbnQ4VmlldyhuZXdCdWZmZXIpOwogIEhFQVAxNiA9IG5ldyBJbnQxNlZpZXcobmV3QnVmZmVyKTsKICBIRUFQMzIgPSBuZXcgSW50MzJWaWV3KG5ld0J1ZmZlcik7CiAgSEVBUFU4ID0gbmV3IFVpbnQ4VmlldyhuZXdCdWZmZXIpOwogIEhFQVBVMTYgPSBuZXcgVWludDE2VmlldyhuZXdCdWZmZXIpOwogIEhFQVBVMzIgPSBuZXcgVWludDMyVmlldyhuZXdCdWZmZXIpOwogIEhFQVBGMzIgPSBuZXcgRmxvYXQzMlZpZXcobmV3QnVmZmVyKTsKICBIRUFQRjY0ID0gbmV3IEZsb2F0NjRWaWV3KG5ld0J1ZmZlcik7CiAgYnVmZmVyID0gbmV3QnVmZmVyOwogIHJldHVybiB0cnVlOwp9CgovLyBFTVNDUklQVEVOX1NUQVJUX0ZVTkNTCmZ1bmN0aW9uIF9tYWxsb2MoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTIgPSAwLCBpMTMgPSAwLCBpMTQgPSAwLCBpMTUgPSAwLCBpMTYgPSAwLCBpMTcgPSAwLCBpMTggPSAwLCBpMTkgPSAwLCBpMjAgPSAwLCBpMjEgPSAwLCBpMjIgPSAwLCBpMjMgPSAwLCBpMjQgPSAwLCBpMjUgPSAwLCBpMjYgPSAwLCBpMjcgPSAwLCBpMjggPSAwLCBpMjkgPSAwLCBpMzAgPSAwLCBpMzEgPSAwLCBpMzIgPSAwLCBpMzMgPSAwLCBpMzQgPSAwLCBpMzUgPSAwLCBpMzYgPSAwLCBpMzcgPSAwLCBpMzggPSAwOwogZG8gaWYgKGkyID4+PiAwIDwgMjQ1KSB7CiAgaTE0ID0gaTIgPj4+IDAgPCAxMSA/IDE2IDogaTIgKyAxMSAmIC04OwogIGkyID0gaTE0ID4+PiAzOwogIGk4ID0gSEVBUDMyWzYwMDZdIHwgMDsKICBpMyA9IGk4ID4+PiBpMjsKICBpZiAoaTMgJiAzKSB7CiAgIGkyID0gKGkzICYgMSBeIDEpICsgaTIgfCAwOwogICBpNCA9IGkyIDw8IDE7CiAgIGkzID0gMjQwNjQgKyAoaTQgPDwgMikgfCAwOwogICBpNCA9IDI0MDY0ICsgKGk0ICsgMiA8PCAyKSB8IDA7CiAgIGk1ID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgaTYgPSBpNSArIDggfCAwOwogICBpNyA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiAgIGRvIGlmICgoaTMgfCAwKSAhPSAoaTcgfCAwKSkgewogICAgaWYgKGk3ID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsKICAgIGkxID0gaTcgKyAxMiB8IDA7CiAgICBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApID09IChpNSB8IDApKSB7CiAgICAgSEVBUDMyW2kxID4+IDJdID0gaTM7CiAgICAgSEVBUDMyW2k0ID4+IDJdID0gaTc7CiAgICAgYnJlYWs7CiAgICB9IGVsc2UgX2Fib3J0KCk7CiAgIH0gZWxzZSBIRUFQMzJbNjAwNl0gPSBpOCAmIH4oMSA8PCBpMik7IHdoaWxlICgwKTsKICAgaTM4ID0gaTIgPDwgMzsKICAgSEVBUDMyW2k1ICsgNCA+PiAyXSA9IGkzOCB8IDM7CiAgIGkzOCA9IGk1ICsgKGkzOCB8IDQpIHwgMDsKICAgSEVBUDMyW2kzOCA+PiAyXSA9IEhFQVAzMltpMzggPj4gMl0gfCAxOwogICBpMzggPSBpNjsKICAgcmV0dXJuIGkzOCB8IDA7CiAgfQogIGk3ID0gSEVBUDMyWzYwMDhdIHwgMDsKICBpZiAoaTE0ID4+PiAwID4gaTcgPj4+IDApIHsKICAgaWYgKGkzKSB7CiAgICBpNCA9IDIgPDwgaTI7CiAgICBpNCA9IGkzIDw8IGkyICYgKGk0IHwgMCAtIGk0KTsKICAgIGk0ID0gKGk0ICYgMCAtIGk0KSArIC0xIHwgMDsKICAgIGk5ID0gaTQgPj4+IDEyICYgMTY7CiAgICBpNCA9IGk0ID4+PiBpOTsKICAgIGk1ID0gaTQgPj4+IDUgJiA4OwogICAgaTQgPSBpNCA+Pj4gaTU7CiAgICBpNiA9IGk0ID4+PiAyICYgNDsKICAgIGk0ID0gaTQgPj4+IGk2OwogICAgaTMgPSBpNCA+Pj4gMSAmIDI7CiAgICBpNCA9IGk0ID4+PiBpMzsKICAgIGkyID0gaTQgPj4+IDEgJiAxOwogICAgaTIgPSAoaTUgfCBpOSB8IGk2IHwgaTMgfCBpMikgKyAoaTQgPj4+IGkyKSB8IDA7CiAgICBpNCA9IGkyIDw8IDE7CiAgICBpMyA9IDI0MDY0ICsgKGk0IDw8IDIpIHwgMDsKICAgIGk0ID0gMjQwNjQgKyAoaTQgKyAyIDw8IDIpIHwgMDsKICAgIGk2ID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgIGk5ID0gaTYgKyA4IHwgMDsKICAgIGk1ID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsKICAgIGRvIGlmICgoaTMgfCAwKSAhPSAoaTUgfCAwKSkgewogICAgIGlmIChpNSA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgaTEgPSBpNSArIDEyIHwgMDsKICAgICBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApID09IChpNiB8IDApKSB7CiAgICAgIEhFQVAzMltpMSA+PiAyXSA9IGkzOwogICAgICBIRUFQMzJbaTQgPj4gMl0gPSBpNTsKICAgICAgaTEwID0gSEVBUDMyWzYwMDhdIHwgMDsKICAgICAgYnJlYWs7CiAgICAgfSBlbHNlIF9hYm9ydCgpOwogICAgfSBlbHNlIHsKICAgICBIRUFQMzJbNjAwNl0gPSBpOCAmIH4oMSA8PCBpMik7CiAgICAgaTEwID0gaTc7CiAgICB9IHdoaWxlICgwKTsKICAgIGkzOCA9IGkyIDw8IDM7CiAgICBpNyA9IGkzOCAtIGkxNCB8IDA7CiAgICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE0IHwgMzsKICAgIGk4ID0gaTYgKyBpMTQgfCAwOwogICAgSEVBUDMyW2k2ICsgKGkxNCB8IDQpID4+IDJdID0gaTcgfCAxOwogICAgSEVBUDMyW2k2ICsgaTM4ID4+IDJdID0gaTc7CiAgICBpZiAoaTEwKSB7CiAgICAgaTUgPSBIRUFQMzJbNjAxMV0gfCAwOwogICAgIGkzID0gaTEwID4+PiAzOwogICAgIGkxID0gaTMgPDwgMTsKICAgICBpNCA9IDI0MDY0ICsgKGkxIDw8IDIpIHwgMDsKICAgICBpMiA9IEhFQVAzMls2MDA2XSB8IDA7CiAgICAgaTMgPSAxIDw8IGkzOwogICAgIGlmIChpMiAmIGkzKSB7CiAgICAgIGkyID0gMjQwNjQgKyAoaTEgKyAyIDw8IDIpIHwgMDsKICAgICAgaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogICAgICBpZiAoaTEgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgIGkxMSA9IGkyOwogICAgICAgaTEyID0gaTE7CiAgICAgIH0KICAgICB9IGVsc2UgewogICAgICBIRUFQMzJbNjAwNl0gPSBpMiB8IGkzOwogICAgICBpMTEgPSAyNDA2NCArIChpMSArIDIgPDwgMikgfCAwOwogICAgICBpMTIgPSBpNDsKICAgICB9CiAgICAgSEVBUDMyW2kxMSA+PiAyXSA9IGk1OwogICAgIEhFQVAzMltpMTIgKyAxMiA+PiAyXSA9IGk1OwogICAgIEhFQVAzMltpNSArIDggPj4gMl0gPSBpMTI7CiAgICAgSEVBUDMyW2k1ICsgMTIgPj4gMl0gPSBpNDsKICAgIH0KICAgIEhFQVAzMls2MDA4XSA9IGk3OwogICAgSEVBUDMyWzYwMTFdID0gaTg7CiAgICBpMzggPSBpOTsKICAgIHJldHVybiBpMzggfCAwOwogICB9CiAgIGkyID0gSEVBUDMyWzYwMDddIHwgMDsKICAgaWYgKGkyKSB7CiAgICBpMyA9IChpMiAmIDAgLSBpMikgKyAtMSB8IDA7CiAgICBpMzcgPSBpMyA+Pj4gMTIgJiAxNjsKICAgIGkzID0gaTMgPj4+IGkzNzsKICAgIGkzNiA9IGkzID4+PiA1ICYgODsKICAgIGkzID0gaTMgPj4+IGkzNjsKICAgIGkzOCA9IGkzID4+PiAyICYgNDsKICAgIGkzID0gaTMgPj4+IGkzODsKICAgIGkyID0gaTMgPj4+IDEgJiAyOwogICAgaTMgPSBpMyA+Pj4gaTI7CiAgICBpNCA9IGkzID4+PiAxICYgMTsKICAgIGk0ID0gSEVBUDMyWzI0MzI4ICsgKChpMzYgfCBpMzcgfCBpMzggfCBpMiB8IGk0KSArIChpMyA+Pj4gaTQpIDw8IDIpID4+IDJdIHwgMDsKICAgIGkzID0gKEhFQVAzMltpNCArIDQgPj4gMl0gJiAtOCkgLSBpMTQgfCAwOwogICAgaTIgPSBpNDsKICAgIHdoaWxlICgxKSB7CiAgICAgaTEgPSBIRUFQMzJbaTIgKyAxNiA+PiAyXSB8IDA7CiAgICAgaWYgKCFpMSkgewogICAgICBpMSA9IEhFQVAzMltpMiArIDIwID4+IDJdIHwgMDsKICAgICAgaWYgKCFpMSkgewogICAgICAgaTkgPSBpMzsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgfQogICAgIGkyID0gKEhFQVAzMltpMSArIDQgPj4gMl0gJiAtOCkgLSBpMTQgfCAwOwogICAgIGkzOCA9IGkyID4+PiAwIDwgaTMgPj4+IDA7CiAgICAgaTMgPSBpMzggPyBpMiA6IGkzOwogICAgIGkyID0gaTE7CiAgICAgaTQgPSBpMzggPyBpMSA6IGk0OwogICAgfQogICAgaTYgPSBIRUFQMzJbNjAxMF0gfCAwOwogICAgaWYgKGk0ID4+PiAwIDwgaTYgPj4+IDApIF9hYm9ydCgpOwogICAgaTggPSBpNCArIGkxNCB8IDA7CiAgICBpZiAoaTQgPj4+IDAgPj0gaTggPj4+IDApIF9hYm9ydCgpOwogICAgaTcgPSBIRUFQMzJbaTQgKyAyNCA+PiAyXSB8IDA7CiAgICBpMyA9IEhFQVAzMltpNCArIDEyID4+IDJdIHwgMDsKICAgIGRvIGlmICgoaTMgfCAwKSA9PSAoaTQgfCAwKSkgewogICAgIGkyID0gaTQgKyAyMCB8IDA7CiAgICAgaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogICAgIGlmICghaTEpIHsKICAgICAgaTIgPSBpNCArIDE2IHwgMDsKICAgICAgaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogICAgICBpZiAoIWkxKSB7CiAgICAgICBpMTMgPSAwOwogICAgICAgYnJlYWs7CiAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaTMgPSBpMSArIDIwIHwgMDsKICAgICAgaTUgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogICAgICBpZiAoaTUpIHsKICAgICAgIGkxID0gaTU7CiAgICAgICBpMiA9IGkzOwogICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaTMgPSBpMSArIDE2IHwgMDsKICAgICAgaTUgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogICAgICBpZiAoIWk1KSBicmVhazsgZWxzZSB7CiAgICAgICBpMSA9IGk1OwogICAgICAgaTIgPSBpMzsKICAgICAgfQogICAgIH0KICAgICBpZiAoaTIgPj4+IDAgPCBpNiA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgICBIRUFQMzJbaTIgPj4gMl0gPSAwOwogICAgICBpMTMgPSBpMTsKICAgICAgYnJlYWs7CiAgICAgfQogICAgfSBlbHNlIHsKICAgICBpNSA9IEhFQVAzMltpNCArIDggPj4gMl0gfCAwOwogICAgIGlmIChpNSA+Pj4gMCA8IGk2ID4+PiAwKSBfYWJvcnQoKTsKICAgICBpMSA9IGk1ICsgMTIgfCAwOwogICAgIGlmICgoSEVBUDMyW2kxID4+IDJdIHwgMCkgIT0gKGk0IHwgMCkpIF9hYm9ydCgpOwogICAgIGkyID0gaTMgKyA4IHwgMDsKICAgICBpZiAoKEhFQVAzMltpMiA+PiAyXSB8IDApID09IChpNCB8IDApKSB7CiAgICAgIEhFQVAzMltpMSA+PiAyXSA9IGkzOwogICAgICBIRUFQMzJbaTIgPj4gMl0gPSBpNTsKICAgICAgaTEzID0gaTM7CiAgICAgIGJyZWFrOwogICAgIH0gZWxzZSBfYWJvcnQoKTsKICAgIH0gd2hpbGUgKDApOwogICAgZG8gaWYgKGk3KSB7CiAgICAgaTEgPSBIRUFQMzJbaTQgKyAyOCA+PiAyXSB8IDA7CiAgICAgaTIgPSAyNDMyOCArIChpMSA8PCAyKSB8IDA7CiAgICAgaWYgKChpNCB8IDApID09IChIRUFQMzJbaTIgPj4gMl0gfCAwKSkgewogICAgICBIRUFQMzJbaTIgPj4gMl0gPSBpMTM7CiAgICAgIGlmICghaTEzKSB7CiAgICAgICBIRUFQMzJbNjAwN10gPSBIRUFQMzJbNjAwN10gJiB+KDEgPDwgaTEpOwogICAgICAgYnJlYWs7CiAgICAgIH0KICAgICB9IGVsc2UgewogICAgICBpZiAoaTcgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOwogICAgICBpMSA9IGk3ICsgMTYgfCAwOwogICAgICBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApID09IChpNCB8IDApKSBIRUFQMzJbaTEgPj4gMl0gPSBpMTM7IGVsc2UgSEVBUDMyW2k3ICsgMjAgPj4gMl0gPSBpMTM7CiAgICAgIGlmICghaTEzKSBicmVhazsKICAgICB9CiAgICAgaTIgPSBIRUFQMzJbNjAxMF0gfCAwOwogICAgIGlmIChpMTMgPj4+IDAgPCBpMiA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgSEVBUDMyW2kxMyArIDI0ID4+IDJdID0gaTc7CiAgICAgaTEgPSBIRUFQMzJbaTQgKyAxNiA+PiAyXSB8IDA7CiAgICAgZG8gaWYgKGkxKSBpZiAoaTEgPj4+IDAgPCBpMiA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgICBIRUFQMzJbaTEzICsgMTYgPj4gMl0gPSBpMTsKICAgICAgSEVBUDMyW2kxICsgMjQgPj4gMl0gPSBpMTM7CiAgICAgIGJyZWFrOwogICAgIH0gd2hpbGUgKDApOwogICAgIGkxID0gSEVBUDMyW2k0ICsgMjAgPj4gMl0gfCAwOwogICAgIGlmIChpMSkgaWYgKGkxID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICAgIEhFQVAzMltpMTMgKyAyMCA+PiAyXSA9IGkxOwogICAgICBIRUFQMzJbaTEgKyAyNCA+PiAyXSA9IGkxMzsKICAgICAgYnJlYWs7CiAgICAgfQogICAgfSB3aGlsZSAoMCk7CiAgICBpZiAoaTkgPj4+IDAgPCAxNikgewogICAgIGkzOCA9IGk5ICsgaTE0IHwgMDsKICAgICBIRUFQMzJbaTQgKyA0ID4+IDJdID0gaTM4IHwgMzsKICAgICBpMzggPSBpNCArIChpMzggKyA0KSB8IDA7CiAgICAgSEVBUDMyW2kzOCA+PiAyXSA9IEhFQVAzMltpMzggPj4gMl0gfCAxOwogICAgfSBlbHNlIHsKICAgICBIRUFQMzJbaTQgKyA0ID4+IDJdID0gaTE0IHwgMzsKICAgICBIRUFQMzJbaTQgKyAoaTE0IHwgNCkgPj4gMl0gPSBpOSB8IDE7CiAgICAgSEVBUDMyW2k0ICsgKGk5ICsgaTE0KSA+PiAyXSA9IGk5OwogICAgIGkxID0gSEVBUDMyWzYwMDhdIHwgMDsKICAgICBpZiAoaTEpIHsKICAgICAgaTYgPSBIRUFQMzJbNjAxMV0gfCAwOwogICAgICBpMyA9IGkxID4+PiAzOwogICAgICBpMSA9IGkzIDw8IDE7CiAgICAgIGk1ID0gMjQwNjQgKyAoaTEgPDwgMikgfCAwOwogICAgICBpMiA9IEhFQVAzMls2MDA2XSB8IDA7CiAgICAgIGkzID0gMSA8PCBpMzsKICAgICAgaWYgKGkyICYgaTMpIHsKICAgICAgIGkxID0gMjQwNjQgKyAoaTEgKyAyIDw8IDIpIHwgMDsKICAgICAgIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgICAgIGlmIChpMiA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgICAgIGkxNSA9IGkxOwogICAgICAgIGkxNiA9IGkyOwogICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgSEVBUDMyWzYwMDZdID0gaTIgfCBpMzsKICAgICAgIGkxNSA9IDI0MDY0ICsgKGkxICsgMiA8PCAyKSB8IDA7CiAgICAgICBpMTYgPSBpNTsKICAgICAgfQogICAgICBIRUFQMzJbaTE1ID4+IDJdID0gaTY7CiAgICAgIEhFQVAzMltpMTYgKyAxMiA+PiAyXSA9IGk2OwogICAgICBIRUFQMzJbaTYgKyA4ID4+IDJdID0gaTE2OwogICAgICBIRUFQMzJbaTYgKyAxMiA+PiAyXSA9IGk1OwogICAgIH0KICAgICBIRUFQMzJbNjAwOF0gPSBpOTsKICAgICBIRUFQMzJbNjAxMV0gPSBpODsKICAgIH0KICAgIGkzOCA9IGk0ICsgOCB8IDA7CiAgICByZXR1cm4gaTM4IHwgMDsKICAgfSBlbHNlIGkxNiA9IGkxNDsKICB9IGVsc2UgaTE2ID0gaTE0OwogfSBlbHNlIGlmIChpMiA+Pj4gMCA8PSA0Mjk0OTY3MjMxKSB7CiAgaTIgPSBpMiArIDExIHwgMDsKICBpMTIgPSBpMiAmIC04OwogIGkxMSA9IEhFQVAzMls2MDA3XSB8IDA7CiAgaWYgKGkxMSkgewogICBpMyA9IDAgLSBpMTIgfCAwOwogICBpMiA9IGkyID4+PiA4OwogICBpZiAoaTIpIGlmIChpMTIgPj4+IDAgPiAxNjc3NzIxNSkgaTEwID0gMzE7IGVsc2UgewogICAgaTE2ID0gKGkyICsgMTA0ODMyMCB8IDApID4+PiAxNiAmIDg7CiAgICBpMjEgPSBpMiA8PCBpMTY7CiAgICBpMTUgPSAoaTIxICsgNTIwMTkyIHwgMCkgPj4+IDE2ICYgNDsKICAgIGkyMSA9IGkyMSA8PCBpMTU7CiAgICBpMTAgPSAoaTIxICsgMjQ1NzYwIHwgMCkgPj4+IDE2ICYgMjsKICAgIGkxMCA9IDE0IC0gKGkxNSB8IGkxNiB8IGkxMCkgKyAoaTIxIDw8IGkxMCA+Pj4gMTUpIHwgMDsKICAgIGkxMCA9IGkxMiA+Pj4gKGkxMCArIDcgfCAwKSAmIDEgfCBpMTAgPDwgMTsKICAgfSBlbHNlIGkxMCA9IDA7CiAgIGkyID0gSEVBUDMyWzI0MzI4ICsgKGkxMCA8PCAyKSA+PiAyXSB8IDA7CiAgIEwxMjMgOiBkbyBpZiAoIWkyKSB7CiAgICBpNSA9IDA7CiAgICBpMiA9IDA7CiAgICBpMjEgPSA4NjsKICAgfSBlbHNlIHsKICAgIGk3ID0gaTM7CiAgICBpNSA9IDA7CiAgICBpOCA9IGkxMiA8PCAoKGkxMCB8IDApID09IDMxID8gMCA6IDI1IC0gKGkxMCA+Pj4gMSkgfCAwKTsKICAgIGk5ID0gaTI7CiAgICBpMiA9IDA7CiAgICB3aGlsZSAoMSkgewogICAgIGk2ID0gSEVBUDMyW2k5ICsgNCA+PiAyXSAmIC04OwogICAgIGkzID0gaTYgLSBpMTIgfCAwOwogICAgIGlmIChpMyA+Pj4gMCA8IGk3ID4+PiAwKSBpZiAoKGk2IHwgMCkgPT0gKGkxMiB8IDApKSB7CiAgICAgIGk2ID0gaTk7CiAgICAgIGkyID0gaTk7CiAgICAgIGkyMSA9IDkwOwogICAgICBicmVhayBMMTIzOwogICAgIH0gZWxzZSBpMiA9IGk5OyBlbHNlIGkzID0gaTc7CiAgICAgaTIxID0gSEVBUDMyW2k5ICsgMjAgPj4gMl0gfCAwOwogICAgIGk5ID0gSEVBUDMyW2k5ICsgMTYgKyAoaTggPj4+IDMxIDw8IDIpID4+IDJdIHwgMDsKICAgICBpNSA9IChpMjEgfCAwKSA9PSAwIHwgKGkyMSB8IDApID09IChpOSB8IDApID8gaTUgOiBpMjE7CiAgICAgaWYgKCFpOSkgewogICAgICBpMjEgPSA4NjsKICAgICAgYnJlYWs7CiAgICAgfSBlbHNlIHsKICAgICAgaTcgPSBpMzsKICAgICAgaTggPSBpOCA8PCAxOwogICAgIH0KICAgIH0KICAgfSB3aGlsZSAoMCk7CiAgIGlmICgoaTIxIHwgMCkgPT0gODYpIHsKICAgIGlmICgoaTUgfCAwKSA9PSAwICYgKGkyIHwgMCkgPT0gMCkgewogICAgIGkyID0gMiA8PCBpMTA7CiAgICAgaTIgPSBpMTEgJiAoaTIgfCAwIC0gaTIpOwogICAgIGlmICghaTIpIHsKICAgICAgaTE2ID0gaTEyOwogICAgICBicmVhazsKICAgICB9CiAgICAgaTIgPSAoaTIgJiAwIC0gaTIpICsgLTEgfCAwOwogICAgIGkxMyA9IGkyID4+PiAxMiAmIDE2OwogICAgIGkyID0gaTIgPj4+IGkxMzsKICAgICBpMTEgPSBpMiA+Pj4gNSAmIDg7CiAgICAgaTIgPSBpMiA+Pj4gaTExOwogICAgIGkxNSA9IGkyID4+PiAyICYgNDsKICAgICBpMiA9IGkyID4+PiBpMTU7CiAgICAgaTE2ID0gaTIgPj4+IDEgJiAyOwogICAgIGkyID0gaTIgPj4+IGkxNjsKICAgICBpNSA9IGkyID4+PiAxICYgMTsKICAgICBpNSA9IEhFQVAzMlsyNDMyOCArICgoaTExIHwgaTEzIHwgaTE1IHwgaTE2IHwgaTUpICsgKGkyID4+PiBpNSkgPDwgMikgPj4gMl0gfCAwOwogICAgIGkyID0gMDsKICAgIH0KICAgIGlmICghaTUpIHsKICAgICBpOCA9IGkzOwogICAgIGk5ID0gaTI7CiAgICB9IGVsc2UgewogICAgIGk2ID0gaTU7CiAgICAgaTIxID0gOTA7CiAgICB9CiAgIH0KICAgaWYgKChpMjEgfCAwKSA9PSA5MCkgd2hpbGUgKDEpIHsKICAgIGkyMSA9IDA7CiAgICBpMTYgPSAoSEVBUDMyW2k2ICsgNCA+PiAyXSAmIC04KSAtIGkxMiB8IDA7CiAgICBpNSA9IGkxNiA+Pj4gMCA8IGkzID4+PiAwOwogICAgaTMgPSBpNSA/IGkxNiA6IGkzOwogICAgaTIgPSBpNSA/IGk2IDogaTI7CiAgICBpNSA9IEhFQVAzMltpNiArIDE2ID4+IDJdIHwgMDsKICAgIGlmIChpNSkgewogICAgIGk2ID0gaTU7CiAgICAgaTIxID0gOTA7CiAgICAgY29udGludWU7CiAgICB9CiAgICBpNiA9IEhFQVAzMltpNiArIDIwID4+IDJdIHwgMDsKICAgIGlmICghaTYpIHsKICAgICBpOCA9IGkzOwogICAgIGk5ID0gaTI7CiAgICAgYnJlYWs7CiAgICB9IGVsc2UgaTIxID0gOTA7CiAgIH0KICAgaWYgKChpOSB8IDApICE9IDAgPyBpOCA+Pj4gMCA8ICgoSEVBUDMyWzYwMDhdIHwgMCkgLSBpMTIgfCAwKSA+Pj4gMCA6IDApIHsKICAgIGk1ID0gSEVBUDMyWzYwMTBdIHwgMDsKICAgIGlmIChpOSA+Pj4gMCA8IGk1ID4+PiAwKSBfYWJvcnQoKTsKICAgIGk3ID0gaTkgKyBpMTIgfCAwOwogICAgaWYgKGk5ID4+PiAwID49IGk3ID4+PiAwKSBfYWJvcnQoKTsKICAgIGk2ID0gSEVBUDMyW2k5ICsgMjQgPj4gMl0gfCAwOwogICAgaTMgPSBIRUFQMzJbaTkgKyAxMiA+PiAyXSB8IDA7CiAgICBkbyBpZiAoKGkzIHwgMCkgPT0gKGk5IHwgMCkpIHsKICAgICBpMiA9IGk5ICsgMjAgfCAwOwogICAgIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgICBpZiAoIWkxKSB7CiAgICAgIGkyID0gaTkgKyAxNiB8IDA7CiAgICAgIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgICAgaWYgKCFpMSkgewogICAgICAgaTE0ID0gMDsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgfQogICAgIHdoaWxlICgxKSB7CiAgICAgIGkzID0gaTEgKyAyMCB8IDA7CiAgICAgIGk0ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICAgICAgaWYgKGk0KSB7CiAgICAgICBpMSA9IGk0OwogICAgICAgaTIgPSBpMzsKICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGkzID0gaTEgKyAxNiB8IDA7CiAgICAgIGk0ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICAgICAgaWYgKCFpNCkgYnJlYWs7IGVsc2UgewogICAgICAgaTEgPSBpNDsKICAgICAgIGkyID0gaTM7CiAgICAgIH0KICAgICB9CiAgICAgaWYgKGkyID4+PiAwIDwgaTUgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgSEVBUDMyW2kyID4+IDJdID0gMDsKICAgICAgaTE0ID0gaTE7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIH0gZWxzZSB7CiAgICAgaTQgPSBIRUFQMzJbaTkgKyA4ID4+IDJdIHwgMDsKICAgICBpZiAoaTQgPj4+IDAgPCBpNSA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgaTEgPSBpNCArIDEyIHwgMDsKICAgICBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApICE9IChpOSB8IDApKSBfYWJvcnQoKTsKICAgICBpMiA9IGkzICsgOCB8IDA7CiAgICAgaWYgKChIRUFQMzJbaTIgPj4gMl0gfCAwKSA9PSAoaTkgfCAwKSkgewogICAgICBIRUFQMzJbaTEgPj4gMl0gPSBpMzsKICAgICAgSEVBUDMyW2kyID4+IDJdID0gaTQ7CiAgICAgIGkxNCA9IGkzOwogICAgICBicmVhazsKICAgICB9IGVsc2UgX2Fib3J0KCk7CiAgICB9IHdoaWxlICgwKTsKICAgIGRvIGlmIChpNikgewogICAgIGkxID0gSEVBUDMyW2k5ICsgMjggPj4gMl0gfCAwOwogICAgIGkyID0gMjQzMjggKyAoaTEgPDwgMikgfCAwOwogICAgIGlmICgoaTkgfCAwKSA9PSAoSEVBUDMyW2kyID4+IDJdIHwgMCkpIHsKICAgICAgSEVBUDMyW2kyID4+IDJdID0gaTE0OwogICAgICBpZiAoIWkxNCkgewogICAgICAgSEVBUDMyWzYwMDddID0gSEVBUDMyWzYwMDddICYgfigxIDw8IGkxKTsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgaWYgKGk2ID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsKICAgICAgaTEgPSBpNiArIDE2IHwgMDsKICAgICAgaWYgKChIRUFQMzJbaTEgPj4gMl0gfCAwKSA9PSAoaTkgfCAwKSkgSEVBUDMyW2kxID4+IDJdID0gaTE0OyBlbHNlIEhFQVAzMltpNiArIDIwID4+IDJdID0gaTE0OwogICAgICBpZiAoIWkxNCkgYnJlYWs7CiAgICAgfQogICAgIGkyID0gSEVBUDMyWzYwMTBdIHwgMDsKICAgICBpZiAoaTE0ID4+PiAwIDwgaTIgPj4+IDApIF9hYm9ydCgpOwogICAgIEhFQVAzMltpMTQgKyAyNCA+PiAyXSA9IGk2OwogICAgIGkxID0gSEVBUDMyW2k5ICsgMTYgPj4gMl0gfCAwOwogICAgIGRvIGlmIChpMSkgaWYgKGkxID4+PiAwIDwgaTIgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgSEVBUDMyW2kxNCArIDE2ID4+IDJdID0gaTE7CiAgICAgIEhFQVAzMltpMSArIDI0ID4+IDJdID0gaTE0OwogICAgICBicmVhazsKICAgICB9IHdoaWxlICgwKTsKICAgICBpMSA9IEhFQVAzMltpOSArIDIwID4+IDJdIHwgMDsKICAgICBpZiAoaTEpIGlmIChpMSA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgICBIRUFQMzJbaTE0ICsgMjAgPj4gMl0gPSBpMTsKICAgICAgSEVBUDMyW2kxICsgMjQgPj4gMl0gPSBpMTQ7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIH0gd2hpbGUgKDApOwogICAgTDE5OSA6IGRvIGlmIChpOCA+Pj4gMCA+PSAxNikgewogICAgIEhFQVAzMltpOSArIDQgPj4gMl0gPSBpMTIgfCAzOwogICAgIEhFQVAzMltpOSArIChpMTIgfCA0KSA+PiAyXSA9IGk4IHwgMTsKICAgICBIRUFQMzJbaTkgKyAoaTggKyBpMTIpID4+IDJdID0gaTg7CiAgICAgaTEgPSBpOCA+Pj4gMzsKICAgICBpZiAoaTggPj4+IDAgPCAyNTYpIHsKICAgICAgaTIgPSBpMSA8PCAxOwogICAgICBpNCA9IDI0MDY0ICsgKGkyIDw8IDIpIHwgMDsKICAgICAgaTMgPSBIRUFQMzJbNjAwNl0gfCAwOwogICAgICBpMSA9IDEgPDwgaTE7CiAgICAgIGlmIChpMyAmIGkxKSB7CiAgICAgICBpMSA9IDI0MDY0ICsgKGkyICsgMiA8PCAyKSB8IDA7CiAgICAgICBpMiA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiAgICAgICBpZiAoaTIgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgICBpMTggPSBpMTsKICAgICAgICBpMTkgPSBpMjsKICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgIEhFQVAzMls2MDA2XSA9IGkzIHwgaTE7CiAgICAgICBpMTggPSAyNDA2NCArIChpMiArIDIgPDwgMikgfCAwOwogICAgICAgaTE5ID0gaTQ7CiAgICAgIH0KICAgICAgSEVBUDMyW2kxOCA+PiAyXSA9IGk3OwogICAgICBIRUFQMzJbaTE5ICsgMTIgPj4gMl0gPSBpNzsKICAgICAgSEVBUDMyW2k5ICsgKGkxMiArIDgpID4+IDJdID0gaTE5OwogICAgICBIRUFQMzJbaTkgKyAoaTEyICsgMTIpID4+IDJdID0gaTQ7CiAgICAgIGJyZWFrOwogICAgIH0KICAgICBpMSA9IGk4ID4+PiA4OwogICAgIGlmIChpMSkgaWYgKGk4ID4+PiAwID4gMTY3NzcyMTUpIGk0ID0gMzE7IGVsc2UgewogICAgICBpMzcgPSAoaTEgKyAxMDQ4MzIwIHwgMCkgPj4+IDE2ICYgODsKICAgICAgaTM4ID0gaTEgPDwgaTM3OwogICAgICBpMzYgPSAoaTM4ICsgNTIwMTkyIHwgMCkgPj4+IDE2ICYgNDsKICAgICAgaTM4ID0gaTM4IDw8IGkzNjsKICAgICAgaTQgPSAoaTM4ICsgMjQ1NzYwIHwgMCkgPj4+IDE2ICYgMjsKICAgICAgaTQgPSAxNCAtIChpMzYgfCBpMzcgfCBpNCkgKyAoaTM4IDw8IGk0ID4+PiAxNSkgfCAwOwogICAgICBpNCA9IGk4ID4+PiAoaTQgKyA3IHwgMCkgJiAxIHwgaTQgPDwgMTsKICAgICB9IGVsc2UgaTQgPSAwOwogICAgIGkxID0gMjQzMjggKyAoaTQgPDwgMikgfCAwOwogICAgIEhFQVAzMltpOSArIChpMTIgKyAyOCkgPj4gMl0gPSBpNDsKICAgICBIRUFQMzJbaTkgKyAoaTEyICsgMjApID4+IDJdID0gMDsKICAgICBIRUFQMzJbaTkgKyAoaTEyICsgMTYpID4+IDJdID0gMDsKICAgICBpMiA9IEhFQVAzMls2MDA3XSB8IDA7CiAgICAgaTMgPSAxIDw8IGk0OwogICAgIGlmICghKGkyICYgaTMpKSB7CiAgICAgIEhFQVAzMls2MDA3XSA9IGkyIHwgaTM7CiAgICAgIEhFQVAzMltpMSA+PiAyXSA9IGk3OwogICAgICBIRUFQMzJbaTkgKyAoaTEyICsgMjQpID4+IDJdID0gaTE7CiAgICAgIEhFQVAzMltpOSArIChpMTIgKyAxMikgPj4gMl0gPSBpNzsKICAgICAgSEVBUDMyW2k5ICsgKGkxMiArIDgpID4+IDJdID0gaTc7CiAgICAgIGJyZWFrOwogICAgIH0KICAgICBpMSA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiAgICAgTDIxNyA6IGRvIGlmICgoSEVBUDMyW2kxICsgNCA+PiAyXSAmIC04IHwgMCkgIT0gKGk4IHwgMCkpIHsKICAgICAgaTQgPSBpOCA8PCAoKGk0IHwgMCkgPT0gMzEgPyAwIDogMjUgLSAoaTQgPj4+IDEpIHwgMCk7CiAgICAgIHdoaWxlICgxKSB7CiAgICAgICBpMiA9IGkxICsgMTYgKyAoaTQgPj4+IDMxIDw8IDIpIHwgMDsKICAgICAgIGkzID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgICAgIGlmICghaTMpIGJyZWFrOwogICAgICAgaWYgKChIRUFQMzJbaTMgKyA0ID4+IDJdICYgLTggfCAwKSA9PSAoaTggfCAwKSkgewogICAgICAgIGkyNCA9IGkzOwogICAgICAgIGJyZWFrIEwyMTc7CiAgICAgICB9IGVsc2UgewogICAgICAgIGk0ID0gaTQgPDwgMTsKICAgICAgICBpMSA9IGkzOwogICAgICAgfQogICAgICB9CiAgICAgIGlmIChpMiA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgICAgSEVBUDMyW2kyID4+IDJdID0gaTc7CiAgICAgICBIRUFQMzJbaTkgKyAoaTEyICsgMjQpID4+IDJdID0gaTE7CiAgICAgICBIRUFQMzJbaTkgKyAoaTEyICsgMTIpID4+IDJdID0gaTc7CiAgICAgICBIRUFQMzJbaTkgKyAoaTEyICsgOCkgPj4gMl0gPSBpNzsKICAgICAgIGJyZWFrIEwxOTk7CiAgICAgIH0KICAgICB9IGVsc2UgaTI0ID0gaTE7IHdoaWxlICgwKTsKICAgICBpMSA9IGkyNCArIDggfCAwOwogICAgIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgICBpMzggPSBIRUFQMzJbNjAxMF0gfCAwOwogICAgIGlmIChpMiA+Pj4gMCA+PSBpMzggPj4+IDAgJiBpMjQgPj4+IDAgPj0gaTM4ID4+PiAwKSB7CiAgICAgIEhFQVAzMltpMiArIDEyID4+IDJdID0gaTc7CiAgICAgIEhFQVAzMltpMSA+PiAyXSA9IGk3OwogICAgICBIRUFQMzJbaTkgKyAoaTEyICsgOCkgPj4gMl0gPSBpMjsKICAgICAgSEVBUDMyW2k5ICsgKGkxMiArIDEyKSA+PiAyXSA9IGkyNDsKICAgICAgSEVBUDMyW2k5ICsgKGkxMiArIDI0KSA+PiAyXSA9IDA7CiAgICAgIGJyZWFrOwogICAgIH0gZWxzZSBfYWJvcnQoKTsKICAgIH0gZWxzZSB7CiAgICAgaTM4ID0gaTggKyBpMTIgfCAwOwogICAgIEhFQVAzMltpOSArIDQgPj4gMl0gPSBpMzggfCAzOwogICAgIGkzOCA9IGk5ICsgKGkzOCArIDQpIHwgMDsKICAgICBIRUFQMzJbaTM4ID4+IDJdID0gSEVBUDMyW2kzOCA+PiAyXSB8IDE7CiAgICB9IHdoaWxlICgwKTsKICAgIGkzOCA9IGk5ICsgOCB8IDA7CiAgICByZXR1cm4gaTM4IHwgMDsKICAgfSBlbHNlIGkxNiA9IGkxMjsKICB9IGVsc2UgaTE2ID0gaTEyOwogfSBlbHNlIGkxNiA9IC0xOyB3aGlsZSAoMCk7CiBpMyA9IEhFQVAzMls2MDA4XSB8IDA7CiBpZiAoaTMgPj4+IDAgPj0gaTE2ID4+PiAwKSB7CiAgaTEgPSBpMyAtIGkxNiB8IDA7CiAgaTIgPSBIRUFQMzJbNjAxMV0gfCAwOwogIGlmIChpMSA+Pj4gMCA+IDE1KSB7CiAgIEhFQVAzMls2MDExXSA9IGkyICsgaTE2OwogICBIRUFQMzJbNjAwOF0gPSBpMTsKICAgSEVBUDMyW2kyICsgKGkxNiArIDQpID4+IDJdID0gaTEgfCAxOwogICBIRUFQMzJbaTIgKyBpMyA+PiAyXSA9IGkxOwogICBIRUFQMzJbaTIgKyA0ID4+IDJdID0gaTE2IHwgMzsKICB9IGVsc2UgewogICBIRUFQMzJbNjAwOF0gPSAwOwogICBIRUFQMzJbNjAxMV0gPSAwOwogICBIRUFQMzJbaTIgKyA0ID4+IDJdID0gaTMgfCAzOwogICBpMzggPSBpMiArIChpMyArIDQpIHwgMDsKICAgSEVBUDMyW2kzOCA+PiAyXSA9IEhFQVAzMltpMzggPj4gMl0gfCAxOwogIH0KICBpMzggPSBpMiArIDggfCAwOwogIHJldHVybiBpMzggfCAwOwogfQogaTIgPSBIRUFQMzJbNjAwOV0gfCAwOwogaWYgKGkyID4+PiAwID4gaTE2ID4+PiAwKSB7CiAgaTM3ID0gaTIgLSBpMTYgfCAwOwogIEhFQVAzMls2MDA5XSA9IGkzNzsKICBpMzggPSBIRUFQMzJbNjAxMl0gfCAwOwogIEhFQVAzMls2MDEyXSA9IGkzOCArIGkxNjsKICBIRUFQMzJbaTM4ICsgKGkxNiArIDQpID4+IDJdID0gaTM3IHwgMTsKICBIRUFQMzJbaTM4ICsgNCA+PiAyXSA9IGkxNiB8IDM7CiAgaTM4ID0gaTM4ICsgOCB8IDA7CiAgcmV0dXJuIGkzOCB8IDA7CiB9CiBkbyBpZiAoIShIRUFQMzJbNjEyNF0gfCAwKSkgewogIGkyID0gX3N5c2NvbmYoMzApIHwgMDsKICBpZiAoIShpMiArIC0xICYgaTIpKSB7CiAgIEhFQVAzMls2MTI2XSA9IGkyOwogICBIRUFQMzJbNjEyNV0gPSBpMjsKICAgSEVBUDMyWzYxMjddID0gLTE7CiAgIEhFQVAzMls2MTI4XSA9IC0xOwogICBIRUFQMzJbNjEyOV0gPSAwOwogICBIRUFQMzJbNjExN10gPSAwOwogICBpMjQgPSAoX3RpbWUoMCkgfCAwKSAmIC0xNiBeIDE0MzE2NTU3Njg7CiAgIEhFQVAzMls2MTI0XSA9IGkyNDsKICAgYnJlYWs7CiAgfSBlbHNlIF9hYm9ydCgpOwogfSB3aGlsZSAoMCk7CiBpOSA9IGkxNiArIDQ4IHwgMDsKIGk4ID0gSEVBUDMyWzYxMjZdIHwgMDsKIGkxMCA9IGkxNiArIDQ3IHwgMDsKIGk3ID0gaTggKyBpMTAgfCAwOwogaTggPSAwIC0gaTggfCAwOwogaTExID0gaTcgJiBpODsKIGlmIChpMTEgPj4+IDAgPD0gaTE2ID4+PiAwKSB7CiAgaTM4ID0gMDsKICByZXR1cm4gaTM4IHwgMDsKIH0KIGkyID0gSEVBUDMyWzYxMTZdIHwgMDsKIGlmICgoaTIgfCAwKSAhPSAwID8gKGkxOSA9IEhFQVAzMls2MTE0XSB8IDAsIGkyNCA9IGkxOSArIGkxMSB8IDAsIGkyNCA+Pj4gMCA8PSBpMTkgPj4+IDAgfCBpMjQgPj4+IDAgPiBpMiA+Pj4gMCkgOiAwKSB7CiAgaTM4ID0gMDsKICByZXR1cm4gaTM4IHwgMDsKIH0KIEwyNTggOiBkbyBpZiAoIShIRUFQMzJbNjExN10gJiA0KSkgewogIGkyID0gSEVBUDMyWzYwMTJdIHwgMDsKICBMMjYwIDogZG8gaWYgKGkyKSB7CiAgIGk1ID0gMjQ0NzI7CiAgIHdoaWxlICgxKSB7CiAgICBpMyA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgICBpZiAoaTMgPj4+IDAgPD0gaTIgPj4+IDAgPyAoaTE3ID0gaTUgKyA0IHwgMCwgKGkzICsgKEhFQVAzMltpMTcgPj4gMl0gfCAwKSB8IDApID4+PiAwID4gaTIgPj4+IDApIDogMCkgewogICAgIGk2ID0gaTU7CiAgICAgaTIgPSBpMTc7CiAgICAgYnJlYWs7CiAgICB9CiAgICBpNSA9IEhFQVAzMltpNSArIDggPj4gMl0gfCAwOwogICAgaWYgKCFpNSkgewogICAgIGkyMSA9IDE3NDsKICAgICBicmVhayBMMjYwOwogICAgfQogICB9CiAgIGkzID0gaTcgLSAoSEVBUDMyWzYwMDldIHwgMCkgJiBpODsKICAgaWYgKGkzID4+PiAwIDwgMjE0NzQ4MzY0NykgewogICAgaTUgPSBfc2JyayhpMyB8IDApIHwgMDsKICAgIGkyNCA9IChpNSB8IDApID09ICgoSEVBUDMyW2k2ID4+IDJdIHwgMCkgKyAoSEVBUDMyW2kyID4+IDJdIHwgMCkgfCAwKTsKICAgIGkyID0gaTI0ID8gaTMgOiAwOwogICAgaWYgKGkyNCkgewogICAgIGlmICgoaTUgfCAwKSAhPSAoLTEgfCAwKSkgewogICAgICBpMjIgPSBpNTsKICAgICAgaTE1ID0gaTI7CiAgICAgIGkyMSA9IDE5NDsKICAgICAgYnJlYWsgTDI1ODsKICAgICB9CiAgICB9IGVsc2UgaTIxID0gMTg0OwogICB9IGVsc2UgaTIgPSAwOwogIH0gZWxzZSBpMjEgPSAxNzQ7IHdoaWxlICgwKTsKICBkbyBpZiAoKGkyMSB8IDApID09IDE3NCkgewogICBpNiA9IF9zYnJrKDApIHwgMDsKICAgaWYgKChpNiB8IDApICE9ICgtMSB8IDApKSB7CiAgICBpMiA9IGk2OwogICAgaTMgPSBIRUFQMzJbNjEyNV0gfCAwOwogICAgaTUgPSBpMyArIC0xIHwgMDsKICAgIGlmICghKGk1ICYgaTIpKSBpMyA9IGkxMTsgZWxzZSBpMyA9IGkxMSAtIGkyICsgKGk1ICsgaTIgJiAwIC0gaTMpIHwgMDsKICAgIGkyID0gSEVBUDMyWzYxMTRdIHwgMDsKICAgIGk1ID0gaTIgKyBpMyB8IDA7CiAgICBpZiAoaTMgPj4+IDAgPiBpMTYgPj4+IDAgJiBpMyA+Pj4gMCA8IDIxNDc0ODM2NDcpIHsKICAgICBpMjQgPSBIRUFQMzJbNjExNl0gfCAwOwogICAgIGlmICgoaTI0IHwgMCkgIT0gMCA/IGk1ID4+PiAwIDw9IGkyID4+PiAwIHwgaTUgPj4+IDAgPiBpMjQgPj4+IDAgOiAwKSB7CiAgICAgIGkyID0gMDsKICAgICAgYnJlYWs7CiAgICAgfQogICAgIGk1ID0gX3NicmsoaTMgfCAwKSB8IDA7CiAgICAgaTI0ID0gKGk1IHwgMCkgPT0gKGk2IHwgMCk7CiAgICAgaTIgPSBpMjQgPyBpMyA6IDA7CiAgICAgaWYgKGkyNCkgewogICAgICBpMjIgPSBpNjsKICAgICAgaTE1ID0gaTI7CiAgICAgIGkyMSA9IDE5NDsKICAgICAgYnJlYWsgTDI1ODsKICAgICB9IGVsc2UgaTIxID0gMTg0OwogICAgfSBlbHNlIGkyID0gMDsKICAgfSBlbHNlIGkyID0gMDsKICB9IHdoaWxlICgwKTsKICBMMjgwIDogZG8gaWYgKChpMjEgfCAwKSA9PSAxODQpIHsKICAgaTYgPSAwIC0gaTMgfCAwOwogICBkbyBpZiAoaTkgPj4+IDAgPiBpMyA+Pj4gMCAmIChpMyA+Pj4gMCA8IDIxNDc0ODM2NDcgJiAoaTUgfCAwKSAhPSAoLTEgfCAwKSkgPyAoaTIwID0gSEVBUDMyWzYxMjZdIHwgMCwgaTIwID0gaTEwIC0gaTMgKyBpMjAgJiAwIC0gaTIwLCBpMjAgPj4+IDAgPCAyMTQ3NDgzNjQ3KSA6IDApIGlmICgoX3NicmsoaTIwIHwgMCkgfCAwKSA9PSAoLTEgfCAwKSkgewogICAgX3NicmsoaTYgfCAwKSB8IDA7CiAgICBicmVhayBMMjgwOwogICB9IGVsc2UgewogICAgaTMgPSBpMjAgKyBpMyB8IDA7CiAgICBicmVhazsKICAgfSB3aGlsZSAoMCk7CiAgIGlmICgoaTUgfCAwKSAhPSAoLTEgfCAwKSkgewogICAgaTIyID0gaTU7CiAgICBpMTUgPSBpMzsKICAgIGkyMSA9IDE5NDsKICAgIGJyZWFrIEwyNTg7CiAgIH0KICB9IHdoaWxlICgwKTsKICBIRUFQMzJbNjExN10gPSBIRUFQMzJbNjExN10gfCA0OwogIGkyMSA9IDE5MTsKIH0gZWxzZSB7CiAgaTIgPSAwOwogIGkyMSA9IDE5MTsKIH0gd2hpbGUgKDApOwogaWYgKCgoKGkyMSB8IDApID09IDE5MSA/IGkxMSA+Pj4gMCA8IDIxNDc0ODM2NDcgOiAwKSA/IChpMjIgPSBfc2JyayhpMTEgfCAwKSB8IDAsIGkyMyA9IF9zYnJrKDApIHwgMCwgaTIyID4+PiAwIDwgaTIzID4+PiAwICYgKChpMjIgfCAwKSAhPSAoLTEgfCAwKSAmIChpMjMgfCAwKSAhPSAoLTEgfCAwKSkpIDogMCkgPyAoaTI1ID0gaTIzIC0gaTIyIHwgMCwgaTI2ID0gaTI1ID4+PiAwID4gKGkxNiArIDQwIHwgMCkgPj4+IDAsIGkyNikgOiAwKSB7CiAgaTE1ID0gaTI2ID8gaTI1IDogaTI7CiAgaTIxID0gMTk0OwogfQogaWYgKChpMjEgfCAwKSA9PSAxOTQpIHsKICBpMiA9IChIRUFQMzJbNjExNF0gfCAwKSArIGkxNSB8IDA7CiAgSEVBUDMyWzYxMTRdID0gaTI7CiAgaWYgKGkyID4+PiAwID4gKEhFQVAzMls2MTE1XSB8IDApID4+PiAwKSBIRUFQMzJbNjExNV0gPSBpMjsKICBpNyA9IEhFQVAzMls2MDEyXSB8IDA7CiAgTDI5OSA6IGRvIGlmIChpNykgewogICBpNiA9IDI0NDcyOwogICBkbyB7CiAgICBpMiA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiAgICBpMyA9IGk2ICsgNCB8IDA7CiAgICBpNSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiAgICBpZiAoKGkyMiB8IDApID09IChpMiArIGk1IHwgMCkpIHsKICAgICBpMjcgPSBpMjsKICAgICBpMjggPSBpMzsKICAgICBpMjkgPSBpNTsKICAgICBpMzAgPSBpNjsKICAgICBpMjEgPSAyMDQ7CiAgICAgYnJlYWs7CiAgICB9CiAgICBpNiA9IEhFQVAzMltpNiArIDggPj4gMl0gfCAwOwogICB9IHdoaWxlICgoaTYgfCAwKSAhPSAwKTsKICAgaWYgKCgoaTIxIHwgMCkgPT0gMjA0ID8gKEhFQVAzMltpMzAgKyAxMiA+PiAyXSAmIDggfCAwKSA9PSAwIDogMCkgPyBpNyA+Pj4gMCA8IGkyMiA+Pj4gMCAmIGk3ID4+PiAwID49IGkyNyA+Pj4gMCA6IDApIHsKICAgIEhFQVAzMltpMjggPj4gMl0gPSBpMjkgKyBpMTU7CiAgICBpMzggPSAoSEVBUDMyWzYwMDldIHwgMCkgKyBpMTUgfCAwOwogICAgaTM3ID0gaTcgKyA4IHwgMDsKICAgIGkzNyA9IChpMzcgJiA3IHwgMCkgPT0gMCA/IDAgOiAwIC0gaTM3ICYgNzsKICAgIGkzNiA9IGkzOCAtIGkzNyB8IDA7CiAgICBIRUFQMzJbNjAxMl0gPSBpNyArIGkzNzsKICAgIEhFQVAzMls2MDA5XSA9IGkzNjsKICAgIEhFQVAzMltpNyArIChpMzcgKyA0KSA+PiAyXSA9IGkzNiB8IDE7CiAgICBIRUFQMzJbaTcgKyAoaTM4ICsgNCkgPj4gMl0gPSA0MDsKICAgIEhFQVAzMls2MDEzXSA9IEhFQVAzMls2MTI4XTsKICAgIGJyZWFrOwogICB9CiAgIGkyID0gSEVBUDMyWzYwMTBdIHwgMDsKICAgaWYgKGkyMiA+Pj4gMCA8IGkyID4+PiAwKSB7CiAgICBIRUFQMzJbNjAxMF0gPSBpMjI7CiAgICBpMiA9IGkyMjsKICAgfQogICBpMyA9IGkyMiArIGkxNSB8IDA7CiAgIGk2ID0gMjQ0NzI7CiAgIHdoaWxlICgxKSB7CiAgICBpZiAoKEhFQVAzMltpNiA+PiAyXSB8IDApID09IChpMyB8IDApKSB7CiAgICAgaTUgPSBpNjsKICAgICBpMyA9IGk2OwogICAgIGkyMSA9IDIxMjsKICAgICBicmVhazsKICAgIH0KICAgIGk2ID0gSEVBUDMyW2k2ICsgOCA+PiAyXSB8IDA7CiAgICBpZiAoIWk2KSB7CiAgICAgaTMgPSAyNDQ3MjsKICAgICBicmVhazsKICAgIH0KICAgfQogICBpZiAoKGkyMSB8IDApID09IDIxMikgaWYgKCEoSEVBUDMyW2kzICsgMTIgPj4gMl0gJiA4KSkgewogICAgSEVBUDMyW2k1ID4+IDJdID0gaTIyOwogICAgaTEzID0gaTMgKyA0IHwgMDsKICAgIEhFQVAzMltpMTMgPj4gMl0gPSAoSEVBUDMyW2kxMyA+PiAyXSB8IDApICsgaTE1OwogICAgaTEzID0gaTIyICsgOCB8IDA7CiAgICBpMTMgPSAoaTEzICYgNyB8IDApID09IDAgPyAwIDogMCAtIGkxMyAmIDc7CiAgICBpMTAgPSBpMjIgKyAoaTE1ICsgOCkgfCAwOwogICAgaTEwID0gKGkxMCAmIDcgfCAwKSA9PSAwID8gMCA6IDAgLSBpMTAgJiA3OwogICAgaTEgPSBpMjIgKyAoaTEwICsgaTE1KSB8IDA7CiAgICBpMTIgPSBpMTMgKyBpMTYgfCAwOwogICAgaTE0ID0gaTIyICsgaTEyIHwgMDsKICAgIGkxMSA9IGkxIC0gKGkyMiArIGkxMykgLSBpMTYgfCAwOwogICAgSEVBUDMyW2kyMiArIChpMTMgKyA0KSA+PiAyXSA9IGkxNiB8IDM7CiAgICBMMzI0IDogZG8gaWYgKChpMSB8IDApICE9IChpNyB8IDApKSB7CiAgICAgaWYgKChpMSB8IDApID09IChIRUFQMzJbNjAxMV0gfCAwKSkgewogICAgICBpMzggPSAoSEVBUDMyWzYwMDhdIHwgMCkgKyBpMTEgfCAwOwogICAgICBIRUFQMzJbNjAwOF0gPSBpMzg7CiAgICAgIEhFQVAzMls2MDExXSA9IGkxNDsKICAgICAgSEVBUDMyW2kyMiArIChpMTIgKyA0KSA+PiAyXSA9IGkzOCB8IDE7CiAgICAgIEhFQVAzMltpMjIgKyAoaTM4ICsgaTEyKSA+PiAyXSA9IGkzODsKICAgICAgYnJlYWs7CiAgICAgfQogICAgIGk4ID0gaTE1ICsgNCB8IDA7CiAgICAgaTMgPSBIRUFQMzJbaTIyICsgKGk4ICsgaTEwKSA+PiAyXSB8IDA7CiAgICAgaWYgKChpMyAmIDMgfCAwKSA9PSAxKSB7CiAgICAgIGk5ID0gaTMgJiAtODsKICAgICAgaTYgPSBpMyA+Pj4gMzsKICAgICAgTDMzMiA6IGRvIGlmIChpMyA+Pj4gMCA+PSAyNTYpIHsKICAgICAgIGk3ID0gSEVBUDMyW2kyMiArICgoaTEwIHwgMjQpICsgaTE1KSA+PiAyXSB8IDA7CiAgICAgICBpNCA9IEhFQVAzMltpMjIgKyAoaTE1ICsgMTIgKyBpMTApID4+IDJdIHwgMDsKICAgICAgIGRvIGlmICgoaTQgfCAwKSA9PSAoaTEgfCAwKSkgewogICAgICAgIGk1ID0gaTEwIHwgMTY7CiAgICAgICAgaTQgPSBpMjIgKyAoaTggKyBpNSkgfCAwOwogICAgICAgIGkzID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgICAgICBpZiAoIWkzKSB7CiAgICAgICAgIGk0ID0gaTIyICsgKGk1ICsgaTE1KSB8IDA7CiAgICAgICAgIGkzID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgICAgICAgaWYgKCFpMykgewogICAgICAgICAgaTM1ID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGk1ID0gaTMgKyAyMCB8IDA7CiAgICAgICAgIGk2ID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICAgICAgICAgaWYgKGk2KSB7CiAgICAgICAgICBpMyA9IGk2OwogICAgICAgICAgaTQgPSBpNTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGk1ID0gaTMgKyAxNiB8IDA7CiAgICAgICAgIGk2ID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICAgICAgICAgaWYgKCFpNikgYnJlYWs7IGVsc2UgewogICAgICAgICAgaTMgPSBpNjsKICAgICAgICAgIGk0ID0gaTU7CiAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGk0ID4+PiAwIDwgaTIgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgICAgSEVBUDMyW2k0ID4+IDJdID0gMDsKICAgICAgICAgaTM1ID0gaTM7CiAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgaTUgPSBIRUFQMzJbaTIyICsgKChpMTAgfCA4KSArIGkxNSkgPj4gMl0gfCAwOwogICAgICAgIGlmIChpNSA+Pj4gMCA8IGkyID4+PiAwKSBfYWJvcnQoKTsKICAgICAgICBpMiA9IGk1ICsgMTIgfCAwOwogICAgICAgIGlmICgoSEVBUDMyW2kyID4+IDJdIHwgMCkgIT0gKGkxIHwgMCkpIF9hYm9ydCgpOwogICAgICAgIGkzID0gaTQgKyA4IHwgMDsKICAgICAgICBpZiAoKEhFQVAzMltpMyA+PiAyXSB8IDApID09IChpMSB8IDApKSB7CiAgICAgICAgIEhFQVAzMltpMiA+PiAyXSA9IGk0OwogICAgICAgICBIRUFQMzJbaTMgPj4gMl0gPSBpNTsKICAgICAgICAgaTM1ID0gaTQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSBfYWJvcnQoKTsKICAgICAgIH0gd2hpbGUgKDApOwogICAgICAgaWYgKCFpNykgYnJlYWs7CiAgICAgICBpMiA9IEhFQVAzMltpMjIgKyAoaTE1ICsgMjggKyBpMTApID4+IDJdIHwgMDsKICAgICAgIGkzID0gMjQzMjggKyAoaTIgPDwgMikgfCAwOwogICAgICAgZG8gaWYgKChpMSB8IDApICE9IChIRUFQMzJbaTMgPj4gMl0gfCAwKSkgewogICAgICAgIGlmIChpNyA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgICAgaTIgPSBpNyArIDE2IHwgMDsKICAgICAgICBpZiAoKEhFQVAzMltpMiA+PiAyXSB8IDApID09IChpMSB8IDApKSBIRUFQMzJbaTIgPj4gMl0gPSBpMzU7IGVsc2UgSEVBUDMyW2k3ICsgMjAgPj4gMl0gPSBpMzU7CiAgICAgICAgaWYgKCFpMzUpIGJyZWFrIEwzMzI7CiAgICAgICB9IGVsc2UgewogICAgICAgIEhFQVAzMltpMyA+PiAyXSA9IGkzNTsKICAgICAgICBpZiAoaTM1KSBicmVhazsKICAgICAgICBIRUFQMzJbNjAwN10gPSBIRUFQMzJbNjAwN10gJiB+KDEgPDwgaTIpOwogICAgICAgIGJyZWFrIEwzMzI7CiAgICAgICB9IHdoaWxlICgwKTsKICAgICAgIGkzID0gSEVBUDMyWzYwMTBdIHwgMDsKICAgICAgIGlmIChpMzUgPj4+IDAgPCBpMyA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgICBIRUFQMzJbaTM1ICsgMjQgPj4gMl0gPSBpNzsKICAgICAgIGkxID0gaTEwIHwgMTY7CiAgICAgICBpMiA9IEhFQVAzMltpMjIgKyAoaTEgKyBpMTUpID4+IDJdIHwgMDsKICAgICAgIGRvIGlmIChpMikgaWYgKGkyID4+PiAwIDwgaTMgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgICBIRUFQMzJbaTM1ICsgMTYgPj4gMl0gPSBpMjsKICAgICAgICBIRUFQMzJbaTIgKyAyNCA+PiAyXSA9IGkzNTsKICAgICAgICBicmVhazsKICAgICAgIH0gd2hpbGUgKDApOwogICAgICAgaTEgPSBIRUFQMzJbaTIyICsgKGk4ICsgaTEpID4+IDJdIHwgMDsKICAgICAgIGlmICghaTEpIGJyZWFrOwogICAgICAgaWYgKGkxID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICAgICAgSEVBUDMyW2kzNSArIDIwID4+IDJdID0gaTE7CiAgICAgICAgSEVBUDMyW2kxICsgMjQgPj4gMl0gPSBpMzU7CiAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICBpNCA9IEhFQVAzMltpMjIgKyAoKGkxMCB8IDgpICsgaTE1KSA+PiAyXSB8IDA7CiAgICAgICBpNSA9IEhFQVAzMltpMjIgKyAoaTE1ICsgMTIgKyBpMTApID4+IDJdIHwgMDsKICAgICAgIGkzID0gMjQwNjQgKyAoaTYgPDwgMSA8PCAyKSB8IDA7CiAgICAgICBkbyBpZiAoKGk0IHwgMCkgIT0gKGkzIHwgMCkpIHsKICAgICAgICBpZiAoaTQgPj4+IDAgPCBpMiA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgICAgaWYgKChIRUFQMzJbaTQgKyAxMiA+PiAyXSB8IDApID09IChpMSB8IDApKSBicmVhazsKICAgICAgICBfYWJvcnQoKTsKICAgICAgIH0gd2hpbGUgKDApOwogICAgICAgaWYgKChpNSB8IDApID09IChpNCB8IDApKSB7CiAgICAgICAgSEVBUDMyWzYwMDZdID0gSEVBUDMyWzYwMDZdICYgfigxIDw8IGk2KTsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGRvIGlmICgoaTUgfCAwKSA9PSAoaTMgfCAwKSkgaTMxID0gaTUgKyA4IHwgMDsgZWxzZSB7CiAgICAgICAgaWYgKGk1ID4+PiAwIDwgaTIgPj4+IDApIF9hYm9ydCgpOwogICAgICAgIGkyID0gaTUgKyA4IHwgMDsKICAgICAgICBpZiAoKEhFQVAzMltpMiA+PiAyXSB8IDApID09IChpMSB8IDApKSB7CiAgICAgICAgIGkzMSA9IGkyOwogICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgX2Fib3J0KCk7CiAgICAgICB9IHdoaWxlICgwKTsKICAgICAgIEhFQVAzMltpNCArIDEyID4+IDJdID0gaTU7CiAgICAgICBIRUFQMzJbaTMxID4+IDJdID0gaTQ7CiAgICAgIH0gd2hpbGUgKDApOwogICAgICBpMSA9IGkyMiArICgoaTkgfCBpMTApICsgaTE1KSB8IDA7CiAgICAgIGk1ID0gaTkgKyBpMTEgfCAwOwogICAgIH0gZWxzZSBpNSA9IGkxMTsKICAgICBpMSA9IGkxICsgNCB8IDA7CiAgICAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kxID4+IDJdICYgLTI7CiAgICAgSEVBUDMyW2kyMiArIChpMTIgKyA0KSA+PiAyXSA9IGk1IHwgMTsKICAgICBIRUFQMzJbaTIyICsgKGk1ICsgaTEyKSA+PiAyXSA9IGk1OwogICAgIGkxID0gaTUgPj4+IDM7CiAgICAgaWYgKGk1ID4+PiAwIDwgMjU2KSB7CiAgICAgIGkyID0gaTEgPDwgMTsKICAgICAgaTQgPSAyNDA2NCArIChpMiA8PCAyKSB8IDA7CiAgICAgIGkzID0gSEVBUDMyWzYwMDZdIHwgMDsKICAgICAgaTEgPSAxIDw8IGkxOwogICAgICBkbyBpZiAoIShpMyAmIGkxKSkgewogICAgICAgSEVBUDMyWzYwMDZdID0gaTMgfCBpMTsKICAgICAgIGkzNiA9IDI0MDY0ICsgKGkyICsgMiA8PCAyKSB8IDA7CiAgICAgICBpMzcgPSBpNDsKICAgICAgfSBlbHNlIHsKICAgICAgIGkxID0gMjQwNjQgKyAoaTIgKyAyIDw8IDIpIHwgMDsKICAgICAgIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgICAgIGlmIChpMiA+Pj4gMCA+PSAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIHsKICAgICAgICBpMzYgPSBpMTsKICAgICAgICBpMzcgPSBpMjsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIF9hYm9ydCgpOwogICAgICB9IHdoaWxlICgwKTsKICAgICAgSEVBUDMyW2kzNiA+PiAyXSA9IGkxNDsKICAgICAgSEVBUDMyW2kzNyArIDEyID4+IDJdID0gaTE0OwogICAgICBIRUFQMzJbaTIyICsgKGkxMiArIDgpID4+IDJdID0gaTM3OwogICAgICBIRUFQMzJbaTIyICsgKGkxMiArIDEyKSA+PiAyXSA9IGk0OwogICAgICBicmVhazsKICAgICB9CiAgICAgaTEgPSBpNSA+Pj4gODsKICAgICBkbyBpZiAoIWkxKSBpNCA9IDA7IGVsc2UgewogICAgICBpZiAoaTUgPj4+IDAgPiAxNjc3NzIxNSkgewogICAgICAgaTQgPSAzMTsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGkzNiA9IChpMSArIDEwNDgzMjAgfCAwKSA+Pj4gMTYgJiA4OwogICAgICBpMzcgPSBpMSA8PCBpMzY7CiAgICAgIGkzNSA9IChpMzcgKyA1MjAxOTIgfCAwKSA+Pj4gMTYgJiA0OwogICAgICBpMzcgPSBpMzcgPDwgaTM1OwogICAgICBpNCA9IChpMzcgKyAyNDU3NjAgfCAwKSA+Pj4gMTYgJiAyOwogICAgICBpNCA9IDE0IC0gKGkzNSB8IGkzNiB8IGk0KSArIChpMzcgPDwgaTQgPj4+IDE1KSB8IDA7CiAgICAgIGk0ID0gaTUgPj4+IChpNCArIDcgfCAwKSAmIDEgfCBpNCA8PCAxOwogICAgIH0gd2hpbGUgKDApOwogICAgIGkxID0gMjQzMjggKyAoaTQgPDwgMikgfCAwOwogICAgIEhFQVAzMltpMjIgKyAoaTEyICsgMjgpID4+IDJdID0gaTQ7CiAgICAgSEVBUDMyW2kyMiArIChpMTIgKyAyMCkgPj4gMl0gPSAwOwogICAgIEhFQVAzMltpMjIgKyAoaTEyICsgMTYpID4+IDJdID0gMDsKICAgICBpMiA9IEhFQVAzMls2MDA3XSB8IDA7CiAgICAgaTMgPSAxIDw8IGk0OwogICAgIGlmICghKGkyICYgaTMpKSB7CiAgICAgIEhFQVAzMls2MDA3XSA9IGkyIHwgaTM7CiAgICAgIEhFQVAzMltpMSA+PiAyXSA9IGkxNDsKICAgICAgSEVBUDMyW2kyMiArIChpMTIgKyAyNCkgPj4gMl0gPSBpMTsKICAgICAgSEVBUDMyW2kyMiArIChpMTIgKyAxMikgPj4gMl0gPSBpMTQ7CiAgICAgIEhFQVAzMltpMjIgKyAoaTEyICsgOCkgPj4gMl0gPSBpMTQ7CiAgICAgIGJyZWFrOwogICAgIH0KICAgICBpMSA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiAgICAgTDQxOCA6IGRvIGlmICgoSEVBUDMyW2kxICsgNCA+PiAyXSAmIC04IHwgMCkgIT0gKGk1IHwgMCkpIHsKICAgICAgaTQgPSBpNSA8PCAoKGk0IHwgMCkgPT0gMzEgPyAwIDogMjUgLSAoaTQgPj4+IDEpIHwgMCk7CiAgICAgIHdoaWxlICgxKSB7CiAgICAgICBpMiA9IGkxICsgMTYgKyAoaTQgPj4+IDMxIDw8IDIpIHwgMDsKICAgICAgIGkzID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgICAgIGlmICghaTMpIGJyZWFrOwogICAgICAgaWYgKChIRUFQMzJbaTMgKyA0ID4+IDJdICYgLTggfCAwKSA9PSAoaTUgfCAwKSkgewogICAgICAgIGkzOCA9IGkzOwogICAgICAgIGJyZWFrIEw0MTg7CiAgICAgICB9IGVsc2UgewogICAgICAgIGk0ID0gaTQgPDwgMTsKICAgICAgICBpMSA9IGkzOwogICAgICAgfQogICAgICB9CiAgICAgIGlmIChpMiA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgICAgSEVBUDMyW2kyID4+IDJdID0gaTE0OwogICAgICAgSEVBUDMyW2kyMiArIChpMTIgKyAyNCkgPj4gMl0gPSBpMTsKICAgICAgIEhFQVAzMltpMjIgKyAoaTEyICsgMTIpID4+IDJdID0gaTE0OwogICAgICAgSEVBUDMyW2kyMiArIChpMTIgKyA4KSA+PiAyXSA9IGkxNDsKICAgICAgIGJyZWFrIEwzMjQ7CiAgICAgIH0KICAgICB9IGVsc2UgaTM4ID0gaTE7IHdoaWxlICgwKTsKICAgICBpMSA9IGkzOCArIDggfCAwOwogICAgIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgICBpMzcgPSBIRUFQMzJbNjAxMF0gfCAwOwogICAgIGlmIChpMiA+Pj4gMCA+PSBpMzcgPj4+IDAgJiBpMzggPj4+IDAgPj0gaTM3ID4+PiAwKSB7CiAgICAgIEhFQVAzMltpMiArIDEyID4+IDJdID0gaTE0OwogICAgICBIRUFQMzJbaTEgPj4gMl0gPSBpMTQ7CiAgICAgIEhFQVAzMltpMjIgKyAoaTEyICsgOCkgPj4gMl0gPSBpMjsKICAgICAgSEVBUDMyW2kyMiArIChpMTIgKyAxMikgPj4gMl0gPSBpMzg7CiAgICAgIEhFQVAzMltpMjIgKyAoaTEyICsgMjQpID4+IDJdID0gMDsKICAgICAgYnJlYWs7CiAgICAgfSBlbHNlIF9hYm9ydCgpOwogICAgfSBlbHNlIHsKICAgICBpMzggPSAoSEVBUDMyWzYwMDldIHwgMCkgKyBpMTEgfCAwOwogICAgIEhFQVAzMls2MDA5XSA9IGkzODsKICAgICBIRUFQMzJbNjAxMl0gPSBpMTQ7CiAgICAgSEVBUDMyW2kyMiArIChpMTIgKyA0KSA+PiAyXSA9IGkzOCB8IDE7CiAgICB9IHdoaWxlICgwKTsKICAgIGkzOCA9IGkyMiArIChpMTMgfCA4KSB8IDA7CiAgICByZXR1cm4gaTM4IHwgMDsKICAgfSBlbHNlIGkzID0gMjQ0NzI7CiAgIHdoaWxlICgxKSB7CiAgICBpMiA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiAgICBpZiAoaTIgPj4+IDAgPD0gaTcgPj4+IDAgPyAoaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMCwgaTQgPSBpMiArIGkxIHwgMCwgaTQgPj4+IDAgPiBpNyA+Pj4gMCkgOiAwKSBicmVhazsKICAgIGkzID0gSEVBUDMyW2kzICsgOCA+PiAyXSB8IDA7CiAgIH0KICAgaTUgPSBpMiArIChpMSArIC0zOSkgfCAwOwogICBpMiA9IGkyICsgKGkxICsgLTQ3ICsgKChpNSAmIDcgfCAwKSA9PSAwID8gMCA6IDAgLSBpNSAmIDcpKSB8IDA7CiAgIGk1ID0gaTcgKyAxNiB8IDA7CiAgIGkyID0gaTIgPj4+IDAgPCBpNSA+Pj4gMCA/IGk3IDogaTI7CiAgIGkxID0gaTIgKyA4IHwgMDsKICAgaTMgPSBpMjIgKyA4IHwgMDsKICAgaTMgPSAoaTMgJiA3IHwgMCkgPT0gMCA/IDAgOiAwIC0gaTMgJiA3OwogICBpMzggPSBpMTUgKyAtNDAgLSBpMyB8IDA7CiAgIEhFQVAzMls2MDEyXSA9IGkyMiArIGkzOwogICBIRUFQMzJbNjAwOV0gPSBpMzg7CiAgIEhFQVAzMltpMjIgKyAoaTMgKyA0KSA+PiAyXSA9IGkzOCB8IDE7CiAgIEhFQVAzMltpMjIgKyAoaTE1ICsgLTM2KSA+PiAyXSA9IDQwOwogICBIRUFQMzJbNjAxM10gPSBIRUFQMzJbNjEyOF07CiAgIGkzID0gaTIgKyA0IHwgMDsKICAgSEVBUDMyW2kzID4+IDJdID0gMjc7CiAgIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMls2MTE4XTsKICAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMls2MTE5XTsKICAgSEVBUDMyW2kxICsgOCA+PiAyXSA9IEhFQVAzMls2MTIwXTsKICAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBIRUFQMzJbNjEyMV07CiAgIEhFQVAzMls2MTE4XSA9IGkyMjsKICAgSEVBUDMyWzYxMTldID0gaTE1OwogICBIRUFQMzJbNjEyMV0gPSAwOwogICBIRUFQMzJbNjEyMF0gPSBpMTsKICAgaTEgPSBpMiArIDI4IHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gNzsKICAgaWYgKChpMiArIDMyIHwgMCkgPj4+IDAgPCBpNCA+Pj4gMCkgZG8gewogICAgaTM4ID0gaTE7CiAgICBpMSA9IGkxICsgNCB8IDA7CiAgICBIRUFQMzJbaTEgPj4gMl0gPSA3OwogICB9IHdoaWxlICgoaTM4ICsgOCB8IDApID4+PiAwIDwgaTQgPj4+IDApOwogICBpZiAoKGkyIHwgMCkgIT0gKGk3IHwgMCkpIHsKICAgIGk2ID0gaTIgLSBpNyB8IDA7CiAgICBIRUFQMzJbaTMgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl0gJiAtMjsKICAgIEhFQVAzMltpNyArIDQgPj4gMl0gPSBpNiB8IDE7CiAgICBIRUFQMzJbaTIgPj4gMl0gPSBpNjsKICAgIGkxID0gaTYgPj4+IDM7CiAgICBpZiAoaTYgPj4+IDAgPCAyNTYpIHsKICAgICBpMiA9IGkxIDw8IDE7CiAgICAgaTQgPSAyNDA2NCArIChpMiA8PCAyKSB8IDA7CiAgICAgaTMgPSBIRUFQMzJbNjAwNl0gfCAwOwogICAgIGkxID0gMSA8PCBpMTsKICAgICBpZiAoaTMgJiBpMSkgewogICAgICBpMSA9IDI0MDY0ICsgKGkyICsgMiA8PCAyKSB8IDA7CiAgICAgIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgICAgaWYgKGkyID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICAgICBpMzIgPSBpMTsKICAgICAgIGkzMyA9IGkyOwogICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgSEVBUDMyWzYwMDZdID0gaTMgfCBpMTsKICAgICAgaTMyID0gMjQwNjQgKyAoaTIgKyAyIDw8IDIpIHwgMDsKICAgICAgaTMzID0gaTQ7CiAgICAgfQogICAgIEhFQVAzMltpMzIgPj4gMl0gPSBpNzsKICAgICBIRUFQMzJbaTMzICsgMTIgPj4gMl0gPSBpNzsKICAgICBIRUFQMzJbaTcgKyA4ID4+IDJdID0gaTMzOwogICAgIEhFQVAzMltpNyArIDEyID4+IDJdID0gaTQ7CiAgICAgYnJlYWs7CiAgICB9CiAgICBpMSA9IGk2ID4+PiA4OwogICAgaWYgKGkxKSBpZiAoaTYgPj4+IDAgPiAxNjc3NzIxNSkgaTQgPSAzMTsgZWxzZSB7CiAgICAgaTM3ID0gKGkxICsgMTA0ODMyMCB8IDApID4+PiAxNiAmIDg7CiAgICAgaTM4ID0gaTEgPDwgaTM3OwogICAgIGkzNiA9IChpMzggKyA1MjAxOTIgfCAwKSA+Pj4gMTYgJiA0OwogICAgIGkzOCA9IGkzOCA8PCBpMzY7CiAgICAgaTQgPSAoaTM4ICsgMjQ1NzYwIHwgMCkgPj4+IDE2ICYgMjsKICAgICBpNCA9IDE0IC0gKGkzNiB8IGkzNyB8IGk0KSArIChpMzggPDwgaTQgPj4+IDE1KSB8IDA7CiAgICAgaTQgPSBpNiA+Pj4gKGk0ICsgNyB8IDApICYgMSB8IGk0IDw8IDE7CiAgICB9IGVsc2UgaTQgPSAwOwogICAgaTMgPSAyNDMyOCArIChpNCA8PCAyKSB8IDA7CiAgICBIRUFQMzJbaTcgKyAyOCA+PiAyXSA9IGk0OwogICAgSEVBUDMyW2k3ICsgMjAgPj4gMl0gPSAwOwogICAgSEVBUDMyW2k1ID4+IDJdID0gMDsKICAgIGkxID0gSEVBUDMyWzYwMDddIHwgMDsKICAgIGkyID0gMSA8PCBpNDsKICAgIGlmICghKGkxICYgaTIpKSB7CiAgICAgSEVBUDMyWzYwMDddID0gaTEgfCBpMjsKICAgICBIRUFQMzJbaTMgPj4gMl0gPSBpNzsKICAgICBIRUFQMzJbaTcgKyAyNCA+PiAyXSA9IGkzOwogICAgIEhFQVAzMltpNyArIDEyID4+IDJdID0gaTc7CiAgICAgSEVBUDMyW2k3ICsgOCA+PiAyXSA9IGk3OwogICAgIGJyZWFrOwogICAgfQogICAgaTEgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogICAgTDQ1OSA6IGRvIGlmICgoSEVBUDMyW2kxICsgNCA+PiAyXSAmIC04IHwgMCkgIT0gKGk2IHwgMCkpIHsKICAgICBpNCA9IGk2IDw8ICgoaTQgfCAwKSA9PSAzMSA/IDAgOiAyNSAtIChpNCA+Pj4gMSkgfCAwKTsKICAgICB3aGlsZSAoMSkgewogICAgICBpMiA9IGkxICsgMTYgKyAoaTQgPj4+IDMxIDw8IDIpIHwgMDsKICAgICAgaTMgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogICAgICBpZiAoIWkzKSBicmVhazsKICAgICAgaWYgKChIRUFQMzJbaTMgKyA0ID4+IDJdICYgLTggfCAwKSA9PSAoaTYgfCAwKSkgewogICAgICAgaTM0ID0gaTM7CiAgICAgICBicmVhayBMNDU5OwogICAgICB9IGVsc2UgewogICAgICAgaTQgPSBpNCA8PCAxOwogICAgICAgaTEgPSBpMzsKICAgICAgfQogICAgIH0KICAgICBpZiAoaTIgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICAgSEVBUDMyW2kyID4+IDJdID0gaTc7CiAgICAgIEhFQVAzMltpNyArIDI0ID4+IDJdID0gaTE7CiAgICAgIEhFQVAzMltpNyArIDEyID4+IDJdID0gaTc7CiAgICAgIEhFQVAzMltpNyArIDggPj4gMl0gPSBpNzsKICAgICAgYnJlYWsgTDI5OTsKICAgICB9CiAgICB9IGVsc2UgaTM0ID0gaTE7IHdoaWxlICgwKTsKICAgIGkxID0gaTM0ICsgOCB8IDA7CiAgICBpMiA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiAgICBpMzggPSBIRUFQMzJbNjAxMF0gfCAwOwogICAgaWYgKGkyID4+PiAwID49IGkzOCA+Pj4gMCAmIGkzNCA+Pj4gMCA+PSBpMzggPj4+IDApIHsKICAgICBIRUFQMzJbaTIgKyAxMiA+PiAyXSA9IGk3OwogICAgIEhFQVAzMltpMSA+PiAyXSA9IGk3OwogICAgIEhFQVAzMltpNyArIDggPj4gMl0gPSBpMjsKICAgICBIRUFQMzJbaTcgKyAxMiA+PiAyXSA9IGkzNDsKICAgICBIRUFQMzJbaTcgKyAyNCA+PiAyXSA9IDA7CiAgICAgYnJlYWs7CiAgICB9IGVsc2UgX2Fib3J0KCk7CiAgIH0KICB9IGVsc2UgewogICBpMzggPSBIRUFQMzJbNjAxMF0gfCAwOwogICBpZiAoKGkzOCB8IDApID09IDAgfCBpMjIgPj4+IDAgPCBpMzggPj4+IDApIEhFQVAzMls2MDEwXSA9IGkyMjsKICAgSEVBUDMyWzYxMThdID0gaTIyOwogICBIRUFQMzJbNjExOV0gPSBpMTU7CiAgIEhFQVAzMls2MTIxXSA9IDA7CiAgIEhFQVAzMls2MDE1XSA9IEhFQVAzMls2MTI0XTsKICAgSEVBUDMyWzYwMTRdID0gLTE7CiAgIGkxID0gMDsKICAgZG8gewogICAgaTM4ID0gaTEgPDwgMTsKICAgIGkzNyA9IDI0MDY0ICsgKGkzOCA8PCAyKSB8IDA7CiAgICBIRUFQMzJbMjQwNjQgKyAoaTM4ICsgMyA8PCAyKSA+PiAyXSA9IGkzNzsKICAgIEhFQVAzMlsyNDA2NCArIChpMzggKyAyIDw8IDIpID4+IDJdID0gaTM3OwogICAgaTEgPSBpMSArIDEgfCAwOwogICB9IHdoaWxlICgoaTEgfCAwKSAhPSAzMik7CiAgIGkzOCA9IGkyMiArIDggfCAwOwogICBpMzggPSAoaTM4ICYgNyB8IDApID09IDAgPyAwIDogMCAtIGkzOCAmIDc7CiAgIGkzNyA9IGkxNSArIC00MCAtIGkzOCB8IDA7CiAgIEhFQVAzMls2MDEyXSA9IGkyMiArIGkzODsKICAgSEVBUDMyWzYwMDldID0gaTM3OwogICBIRUFQMzJbaTIyICsgKGkzOCArIDQpID4+IDJdID0gaTM3IHwgMTsKICAgSEVBUDMyW2kyMiArIChpMTUgKyAtMzYpID4+IDJdID0gNDA7CiAgIEhFQVAzMls2MDEzXSA9IEhFQVAzMls2MTI4XTsKICB9IHdoaWxlICgwKTsKICBpMSA9IEhFQVAzMls2MDA5XSB8IDA7CiAgaWYgKGkxID4+PiAwID4gaTE2ID4+PiAwKSB7CiAgIGkzNyA9IGkxIC0gaTE2IHwgMDsKICAgSEVBUDMyWzYwMDldID0gaTM3OwogICBpMzggPSBIRUFQMzJbNjAxMl0gfCAwOwogICBIRUFQMzJbNjAxMl0gPSBpMzggKyBpMTY7CiAgIEhFQVAzMltpMzggKyAoaTE2ICsgNCkgPj4gMl0gPSBpMzcgfCAxOwogICBIRUFQMzJbaTM4ICsgNCA+PiAyXSA9IGkxNiB8IDM7CiAgIGkzOCA9IGkzOCArIDggfCAwOwogICByZXR1cm4gaTM4IHwgMDsKICB9CiB9CiBpMzggPSBfX19lcnJub19sb2NhdGlvbigpIHwgMDsKIEhFQVAzMltpMzggPj4gMl0gPSAxMjsKIGkzOCA9IDA7CiByZXR1cm4gaTM4IHwgMDsKfQoKZnVuY3Rpb24gX3ByaW50Zl9jb3JlKGk0OSwgaTIsIGk1MCwgaTUxLCBpNTIpIHsKIGk0OSA9IGk0OSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk1MCA9IGk1MCB8IDA7CiBpNTEgPSBpNTEgfCAwOwogaTUyID0gaTUyIHwgMDsKIHZhciBpMSA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGQ2ID0gMC4wLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBkMTEgPSAwLjAsIGkxMiA9IDAsIGkxMyA9IDAsIGkxNCA9IDAsIGkxNSA9IDAsIGkxNiA9IDAsIGkxNyA9IDAsIGkxOCA9IDAsIGkxOSA9IDAsIGkyMCA9IDAsIGkyMSA9IDAsIGkyMiA9IDAsIGkyMyA9IDAsIGkyNCA9IDAsIGkyNSA9IDAsIGkyNiA9IDAsIGkyNyA9IDAsIGkyOCA9IDAsIGkyOSA9IDAsIGkzMCA9IDAsIGkzMSA9IDAsIGkzMiA9IDAsIGkzMyA9IDAsIGkzNCA9IDAsIGkzNSA9IDAsIGkzNiA9IDAsIGkzNyA9IDAsIGkzOCA9IDAsIGkzOSA9IDAsIGk0MCA9IDAsIGk0MSA9IDAsIGk0MiA9IDAsIGk0MyA9IDAsIGk0NCA9IDAsIGk0NSA9IDAsIGk0NiA9IDAsIGk0NyA9IDAsIGk0OCA9IDAsIGk1MyA9IDA7CiBpNTMgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyA2MjQgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0NCA9IGk1MyArIDI0IHwgMDsKIGk0NiA9IGk1MyArIDE2IHwgMDsKIGk0NSA9IGk1MyArIDU4OCB8IDA7CiBpMzkgPSBpNTMgKyA1NzYgfCAwOwogaTQzID0gaTUzOwogaTM2ID0gaTUzICsgNTM2IHwgMDsKIGk0OCA9IGk1MyArIDggfCAwOwogaTQ3ID0gaTUzICsgNTI4IHwgMDsKIGkyNyA9IChpNDkgfCAwKSAhPSAwOwogaTI4ID0gaTM2ICsgNDAgfCAwOwogaTM1ID0gaTI4OwogaTM2ID0gaTM2ICsgMzkgfCAwOwogaTM3ID0gaTQ4ICsgNCB8IDA7CiBpMzggPSBpMzkgKyAxMiB8IDA7CiBpMzkgPSBpMzkgKyAxMSB8IDA7CiBpNDAgPSBpNDU7CiBpNDEgPSBpMzg7CiBpNDIgPSBpNDEgLSBpNDAgfCAwOwogaTI5ID0gLTIgLSBpNDAgfCAwOwogaTMwID0gaTQxICsgMiB8IDA7CiBpMzEgPSBpNDQgKyAyODggfCAwOwogaTMyID0gaTQ1ICsgOSB8IDA7CiBpMzMgPSBpMzI7CiBpMzQgPSBpNDUgKyA4IHwgMDsKIGkxID0gMDsKIGkxMiA9IGkyOwogaTMgPSAwOwogaTIgPSAwOwogTDEgOiB3aGlsZSAoMSkgewogIGRvIGlmICgoaTEgfCAwKSA+IC0xKSBpZiAoKGkzIHwgMCkgPiAoMjE0NzQ4MzY0NyAtIGkxIHwgMCkpIHsKICAgaTEgPSBfX19lcnJub19sb2NhdGlvbigpIHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gNzU7CiAgIGkxID0gLTE7CiAgIGJyZWFrOwogIH0gZWxzZSB7CiAgIGkxID0gaTMgKyBpMSB8IDA7CiAgIGJyZWFrOwogIH0gd2hpbGUgKDApOwogIGkzID0gSEVBUDhbaTEyID4+IDBdIHwgMDsKICBpZiAoIShpMyA8PCAyNCA+PiAyNCkpIHsKICAgaTI2ID0gMjQ1OwogICBicmVhazsKICB9IGVsc2UgaTQgPSBpMTI7CiAgTDkgOiB3aGlsZSAoMSkgewogICBzd2l0Y2ggKGkzIDw8IDI0ID4+IDI0KSB7CiAgIGNhc2UgMzc6CiAgICB7CiAgICAgaTMgPSBpNDsKICAgICBpMjYgPSA5OwogICAgIGJyZWFrIEw5OwogICAgfQogICBjYXNlIDA6CiAgICB7CiAgICAgaTMgPSBpNDsKICAgICBicmVhayBMOTsKICAgIH0KICAgZGVmYXVsdDoKICAgIHt9CiAgIH0KICAgaTI1ID0gaTQgKyAxIHwgMDsKICAgaTMgPSBIRUFQOFtpMjUgPj4gMF0gfCAwOwogICBpNCA9IGkyNTsKICB9CiAgTDEyIDogZG8gaWYgKChpMjYgfCAwKSA9PSA5KSB3aGlsZSAoMSkgewogICBpMjYgPSAwOwogICBpZiAoKEhFQVA4W2kzICsgMSA+PiAwXSB8IDApICE9IDM3KSBicmVhayBMMTI7CiAgIGk0ID0gaTQgKyAxIHwgMDsKICAgaTMgPSBpMyArIDIgfCAwOwogICBpZiAoKEhFQVA4W2kzID4+IDBdIHwgMCkgPT0gMzcpIGkyNiA9IDk7IGVsc2UgYnJlYWs7CiAgfSB3aGlsZSAoMCk7CiAgaTE0ID0gaTQgLSBpMTIgfCAwOwogIGlmIChpMjcgPyAoSEVBUDMyW2k0OSA+PiAyXSAmIDMyIHwgMCkgPT0gMCA6IDApIF9fX2Z3cml0ZXgoaTEyLCBpMTQsIGk0OSkgfCAwOwogIGlmICgoaTQgfCAwKSAhPSAoaTEyIHwgMCkpIHsKICAgaTEyID0gaTM7CiAgIGkzID0gaTE0OwogICBjb250aW51ZTsKICB9CiAgaTcgPSBpMyArIDEgfCAwOwogIGk0ID0gSEVBUDhbaTcgPj4gMF0gfCAwOwogIGk1ID0gKGk0IDw8IDI0ID4+IDI0KSArIC00OCB8IDA7CiAgaWYgKGk1ID4+PiAwIDwgMTApIHsKICAgaTI1ID0gKEhFQVA4W2kzICsgMiA+PiAwXSB8IDApID09IDM2OwogICBpNyA9IGkyNSA/IGkzICsgMyB8IDAgOiBpNzsKICAgaTQgPSBIRUFQOFtpNyA+PiAwXSB8IDA7CiAgIGkxMCA9IGkyNSA/IGk1IDogLTE7CiAgIGkyID0gaTI1ID8gMSA6IGkyOwogIH0gZWxzZSBpMTAgPSAtMTsKICBpMyA9IGk0IDw8IDI0ID4+IDI0OwogIEwyNSA6IGRvIGlmICgoaTMgJiAtMzIgfCAwKSA9PSAzMikgewogICBpNSA9IDA7CiAgIHdoaWxlICgxKSB7CiAgICBpZiAoISgxIDw8IGkzICsgLTMyICYgNzU5MTMpKSB7CiAgICAgaTggPSBpNTsKICAgICBpMyA9IGk3OwogICAgIGJyZWFrIEwyNTsKICAgIH0KICAgIGk1ID0gMSA8PCAoaTQgPDwgMjQgPj4gMjQpICsgLTMyIHwgaTU7CiAgICBpNyA9IGk3ICsgMSB8IDA7CiAgICBpNCA9IEhFQVA4W2k3ID4+IDBdIHwgMDsKICAgIGkzID0gaTQgPDwgMjQgPj4gMjQ7CiAgICBpZiAoKGkzICYgLTMyIHwgMCkgIT0gMzIpIHsKICAgICBpOCA9IGk1OwogICAgIGkzID0gaTc7CiAgICAgYnJlYWs7CiAgICB9CiAgIH0KICB9IGVsc2UgewogICBpOCA9IDA7CiAgIGkzID0gaTc7CiAgfSB3aGlsZSAoMCk7CiAgZG8gaWYgKGk0IDw8IDI0ID4+IDI0ID09IDQyKSB7CiAgIGk1ID0gaTMgKyAxIHwgMDsKICAgaTQgPSAoSEVBUDhbaTUgPj4gMF0gfCAwKSArIC00OCB8IDA7CiAgIGlmIChpNCA+Pj4gMCA8IDEwID8gKEhFQVA4W2kzICsgMiA+PiAwXSB8IDApID09IDM2IDogMCkgewogICAgSEVBUDMyW2k1MiArIChpNCA8PCAyKSA+PiAyXSA9IDEwOwogICAgaTIgPSAxOwogICAgaTMgPSBpMyArIDMgfCAwOwogICAgaTQgPSBIRUFQMzJbaTUxICsgKChIRUFQOFtpNSA+PiAwXSB8IDApICsgLTQ4IDw8IDMpID4+IDJdIHwgMDsKICAgfSBlbHNlIHsKICAgIGlmIChpMikgewogICAgIGkxID0gLTE7CiAgICAgYnJlYWsgTDE7CiAgICB9CiAgICBpZiAoIWkyNykgewogICAgIGkxMyA9IGk4OwogICAgIGkzID0gaTU7CiAgICAgaTIgPSAwOwogICAgIGkyNSA9IDA7CiAgICAgYnJlYWs7CiAgICB9CiAgICBpMiA9IChIRUFQMzJbaTUwID4+IDJdIHwgMCkgKyAoNCAtIDEpICYgfig0IC0gMSk7CiAgICBpNCA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgICBIRUFQMzJbaTUwID4+IDJdID0gaTIgKyA0OwogICAgaTIgPSAwOwogICAgaTMgPSBpNTsKICAgfQogICBpZiAoKGk0IHwgMCkgPCAwKSB7CiAgICBpMTMgPSBpOCB8IDgxOTI7CiAgICBpMjUgPSAwIC0gaTQgfCAwOwogICB9IGVsc2UgewogICAgaTEzID0gaTg7CiAgICBpMjUgPSBpNDsKICAgfQogIH0gZWxzZSB7CiAgIGk1ID0gKGk0IDw8IDI0ID4+IDI0KSArIC00OCB8IDA7CiAgIGlmIChpNSA+Pj4gMCA8IDEwKSB7CiAgICBpNCA9IDA7CiAgICBkbyB7CiAgICAgaTQgPSAoaTQgKiAxMCB8IDApICsgaTUgfCAwOwogICAgIGkzID0gaTMgKyAxIHwgMDsKICAgICBpNSA9IChIRUFQOFtpMyA+PiAwXSB8IDApICsgLTQ4IHwgMDsKICAgIH0gd2hpbGUgKGk1ID4+PiAwIDwgMTApOwogICAgaWYgKChpNCB8IDApIDwgMCkgewogICAgIGkxID0gLTE7CiAgICAgYnJlYWsgTDE7CiAgICB9IGVsc2UgewogICAgIGkxMyA9IGk4OwogICAgIGkyNSA9IGk0OwogICAgfQogICB9IGVsc2UgewogICAgaTEzID0gaTg7CiAgICBpMjUgPSAwOwogICB9CiAgfSB3aGlsZSAoMCk7CiAgTDQ2IDogZG8gaWYgKChIRUFQOFtpMyA+PiAwXSB8IDApID09IDQ2KSB7CiAgIGk1ID0gaTMgKyAxIHwgMDsKICAgaTQgPSBIRUFQOFtpNSA+PiAwXSB8IDA7CiAgIGlmIChpNCA8PCAyNCA+PiAyNCAhPSA0MikgewogICAgaTcgPSAoaTQgPDwgMjQgPj4gMjQpICsgLTQ4IHwgMDsKICAgIGlmIChpNyA+Pj4gMCA8IDEwKSB7CiAgICAgaTMgPSBpNTsKICAgICBpNCA9IDA7CiAgICB9IGVsc2UgewogICAgIGkzID0gaTU7CiAgICAgaTcgPSAwOwogICAgIGJyZWFrOwogICAgfQogICAgd2hpbGUgKDEpIHsKICAgICBpNCA9IChpNCAqIDEwIHwgMCkgKyBpNyB8IDA7CiAgICAgaTMgPSBpMyArIDEgfCAwOwogICAgIGk3ID0gKEhFQVA4W2kzID4+IDBdIHwgMCkgKyAtNDggfCAwOwogICAgIGlmIChpNyA+Pj4gMCA+PSAxMCkgewogICAgICBpNyA9IGk0OwogICAgICBicmVhayBMNDY7CiAgICAgfQogICAgfQogICB9CiAgIGk1ID0gaTMgKyAyIHwgMDsKICAgaTQgPSAoSEVBUDhbaTUgPj4gMF0gfCAwKSArIC00OCB8IDA7CiAgIGlmIChpNCA+Pj4gMCA8IDEwID8gKEhFQVA4W2kzICsgMyA+PiAwXSB8IDApID09IDM2IDogMCkgewogICAgSEVBUDMyW2k1MiArIChpNCA8PCAyKSA+PiAyXSA9IDEwOwogICAgaTMgPSBpMyArIDQgfCAwOwogICAgaTcgPSBIRUFQMzJbaTUxICsgKChIRUFQOFtpNSA+PiAwXSB8IDApICsgLTQ4IDw8IDMpID4+IDJdIHwgMDsKICAgIGJyZWFrOwogICB9CiAgIGlmIChpMikgewogICAgaTEgPSAtMTsKICAgIGJyZWFrIEwxOwogICB9CiAgIGlmIChpMjcpIHsKICAgIGkzID0gKEhFQVAzMltpNTAgPj4gMl0gfCAwKSArICg0IC0gMSkgJiB+KDQgLSAxKTsKICAgIGk3ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICAgIEhFQVAzMltpNTAgPj4gMl0gPSBpMyArIDQ7CiAgICBpMyA9IGk1OwogICB9IGVsc2UgewogICAgaTMgPSBpNTsKICAgIGk3ID0gMDsKICAgfQogIH0gZWxzZSBpNyA9IC0xOyB3aGlsZSAoMCk7CiAgaTkgPSAwOwogIHdoaWxlICgxKSB7CiAgIGk0ID0gKEhFQVA4W2kzID4+IDBdIHwgMCkgKyAtNjUgfCAwOwogICBpZiAoaTQgPj4+IDAgPiA1NykgewogICAgaTEgPSAtMTsKICAgIGJyZWFrIEwxOwogICB9CiAgIGk1ID0gaTMgKyAxIHwgMDsKICAgaTQgPSBIRUFQOFs0Mjk5NiArIChpOSAqIDU4IHwgMCkgKyBpNCA+PiAwXSB8IDA7CiAgIGk4ID0gaTQgJiAyNTU7CiAgIGlmICgoaTggKyAtMSB8IDApID4+PiAwIDwgOCkgewogICAgaTMgPSBpNTsKICAgIGk5ID0gaTg7CiAgIH0gZWxzZSB7CiAgICBpMjQgPSBpNTsKICAgIGJyZWFrOwogICB9CiAgfQogIGlmICghKGk0IDw8IDI0ID4+IDI0KSkgewogICBpMSA9IC0xOwogICBicmVhazsKICB9CiAgaTUgPSAoaTEwIHwgMCkgPiAtMTsKICBkbyBpZiAoaTQgPDwgMjQgPj4gMjQgPT0gMTkpIGlmIChpNSkgewogICBpMSA9IC0xOwogICBicmVhayBMMTsKICB9IGVsc2UgaTI2ID0gNTI7IGVsc2UgewogICBpZiAoaTUpIHsKICAgIEhFQVAzMltpNTIgKyAoaTEwIDw8IDIpID4+IDJdID0gaTg7CiAgICBpMjIgPSBpNTEgKyAoaTEwIDw8IDMpIHwgMDsKICAgIGkyMyA9IEhFQVAzMltpMjIgKyA0ID4+IDJdIHwgMDsKICAgIGkyNiA9IGk0MzsKICAgIEhFQVAzMltpMjYgPj4gMl0gPSBIRUFQMzJbaTIyID4+IDJdOwogICAgSEVBUDMyW2kyNiArIDQgPj4gMl0gPSBpMjM7CiAgICBpMjYgPSA1MjsKICAgIGJyZWFrOwogICB9CiAgIGlmICghaTI3KSB7CiAgICBpMSA9IDA7CiAgICBicmVhayBMMTsKICAgfQogICBfcG9wX2FyZyhpNDMsIGk4LCBpNTApOwogIH0gd2hpbGUgKDApOwogIGlmICgoaTI2IHwgMCkgPT0gNTIgPyAoaTI2ID0gMCwgIWkyNykgOiAwKSB7CiAgIGkxMiA9IGkyNDsKICAgaTMgPSBpMTQ7CiAgIGNvbnRpbnVlOwogIH0KICBpMTAgPSBIRUFQOFtpMyA+PiAwXSB8IDA7CiAgaTEwID0gKGk5IHwgMCkgIT0gMCAmIChpMTAgJiAxNSB8IDApID09IDMgPyBpMTAgJiAtMzMgOiBpMTA7CiAgaTUgPSBpMTMgJiAtNjU1Mzc7CiAgaTIzID0gKGkxMyAmIDgxOTIgfCAwKSA9PSAwID8gaTEzIDogaTU7CiAgTDc1IDogZG8gc3dpdGNoIChpMTAgfCAwKSB7CiAgY2FzZSAxMTA6CiAgIHN3aXRjaCAoaTkgfCAwKSB7CiAgIGNhc2UgMDoKICAgIHsKICAgICBIRUFQMzJbSEVBUDMyW2k0MyA+PiAyXSA+PiAyXSA9IGkxOwogICAgIGkxMiA9IGkyNDsKICAgICBpMyA9IGkxNDsKICAgICBjb250aW51ZSBMMTsKICAgIH0KICAgY2FzZSAxOgogICAgewogICAgIEhFQVAzMltIRUFQMzJbaTQzID4+IDJdID4+IDJdID0gaTE7CiAgICAgaTEyID0gaTI0OwogICAgIGkzID0gaTE0OwogICAgIGNvbnRpbnVlIEwxOwogICAgfQogICBjYXNlIDI6CiAgICB7CiAgICAgaTEyID0gSEVBUDMyW2k0MyA+PiAyXSB8IDA7CiAgICAgSEVBUDMyW2kxMiA+PiAyXSA9IGkxOwogICAgIEhFQVAzMltpMTIgKyA0ID4+IDJdID0gKChpMSB8IDApIDwgMCkgPDwgMzEgPj4gMzE7CiAgICAgaTEyID0gaTI0OwogICAgIGkzID0gaTE0OwogICAgIGNvbnRpbnVlIEwxOwogICAgfQogICBjYXNlIDM6CiAgICB7CiAgICAgSEVBUDE2W0hFQVAzMltpNDMgPj4gMl0gPj4gMV0gPSBpMTsKICAgICBpMTIgPSBpMjQ7CiAgICAgaTMgPSBpMTQ7CiAgICAgY29udGludWUgTDE7CiAgICB9CiAgIGNhc2UgNDoKICAgIHsKICAgICBIRUFQOFtIRUFQMzJbaTQzID4+IDJdID4+IDBdID0gaTE7CiAgICAgaTEyID0gaTI0OwogICAgIGkzID0gaTE0OwogICAgIGNvbnRpbnVlIEwxOwogICAgfQogICBjYXNlIDY6CiAgICB7CiAgICAgSEVBUDMyW0hFQVAzMltpNDMgPj4gMl0gPj4gMl0gPSBpMTsKICAgICBpMTIgPSBpMjQ7CiAgICAgaTMgPSBpMTQ7CiAgICAgY29udGludWUgTDE7CiAgICB9CiAgIGNhc2UgNzoKICAgIHsKICAgICBpMTIgPSBIRUFQMzJbaTQzID4+IDJdIHwgMDsKICAgICBIRUFQMzJbaTEyID4+IDJdID0gaTE7CiAgICAgSEVBUDMyW2kxMiArIDQgPj4gMl0gPSAoKGkxIHwgMCkgPCAwKSA8PCAzMSA+PiAzMTsKICAgICBpMTIgPSBpMjQ7CiAgICAgaTMgPSBpMTQ7CiAgICAgY29udGludWUgTDE7CiAgICB9CiAgIGRlZmF1bHQ6CiAgICB7CiAgICAgaTEyID0gaTI0OwogICAgIGkzID0gaTE0OwogICAgIGNvbnRpbnVlIEwxOwogICAgfQogICB9CiAgY2FzZSAxMTI6CiAgIHsKICAgIGk5ID0gaTIzIHwgODsKICAgIGk3ID0gaTcgPj4+IDAgPiA4ID8gaTcgOiA4OwogICAgaTEwID0gMTIwOwogICAgaTI2ID0gNjQ7CiAgICBicmVhazsKICAgfQogIGNhc2UgODg6CiAgY2FzZSAxMjA6CiAgIHsKICAgIGk5ID0gaTIzOwogICAgaTI2ID0gNjQ7CiAgICBicmVhazsKICAgfQogIGNhc2UgMTExOgogICB7CiAgICBpNSA9IGk0MzsKICAgIGk0ID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICAgIGk1ID0gSEVBUDMyW2k1ICsgNCA+PiAyXSB8IDA7CiAgICBpZiAoKGk0IHwgMCkgPT0gMCAmIChpNSB8IDApID09IDApIGkzID0gaTI4OyBlbHNlIHsKICAgICBpMyA9IGkyODsKICAgICBkbyB7CiAgICAgIGkzID0gaTMgKyAtMSB8IDA7CiAgICAgIEhFQVA4W2kzID4+IDBdID0gaTQgJiA3IHwgNDg7CiAgICAgIGk0ID0gX2JpdHNoaWZ0NjRMc2hyKGk0IHwgMCwgaTUgfCAwLCAzKSB8IDA7CiAgICAgIGk1ID0gdGVtcFJldDA7CiAgICAgfSB3aGlsZSAoISgoaTQgfCAwKSA9PSAwICYgKGk1IHwgMCkgPT0gMCkpOwogICAgfQogICAgaWYgKCEoaTIzICYgOCkpIHsKICAgICBpNCA9IGkyMzsKICAgICBpOSA9IDA7CiAgICAgaTggPSA0MzQ3NjsKICAgICBpMjYgPSA3NzsKICAgIH0gZWxzZSB7CiAgICAgaTkgPSBpMzUgLSBpMyArIDEgfCAwOwogICAgIGk0ID0gaTIzOwogICAgIGk3ID0gKGk3IHwgMCkgPCAoaTkgfCAwKSA/IGk5IDogaTc7CiAgICAgaTkgPSAwOwogICAgIGk4ID0gNDM0NzY7CiAgICAgaTI2ID0gNzc7CiAgICB9CiAgICBicmVhazsKICAgfQogIGNhc2UgMTA1OgogIGNhc2UgMTAwOgogICB7CiAgICBpNCA9IGk0MzsKICAgIGkzID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgIGk0ID0gSEVBUDMyW2k0ICsgNCA+PiAyXSB8IDA7CiAgICBpZiAoKGk0IHwgMCkgPCAwKSB7CiAgICAgaTMgPSBfaTY0U3VidHJhY3QoMCwgMCwgaTMgfCAwLCBpNCB8IDApIHwgMDsKICAgICBpNCA9IHRlbXBSZXQwOwogICAgIGk1ID0gaTQzOwogICAgIEhFQVAzMltpNSA+PiAyXSA9IGkzOwogICAgIEhFQVAzMltpNSArIDQgPj4gMl0gPSBpNDsKICAgICBpNSA9IDE7CiAgICAgaTggPSA0MzQ3NjsKICAgICBpMjYgPSA3NjsKICAgICBicmVhayBMNzU7CiAgICB9CiAgICBpZiAoIShpMjMgJiAyMDQ4KSkgewogICAgIGk4ID0gaTIzICYgMTsKICAgICBpNSA9IGk4OwogICAgIGk4ID0gKGk4IHwgMCkgPT0gMCA/IDQzNDc2IDogNDM0Nzg7CiAgICAgaTI2ID0gNzY7CiAgICB9IGVsc2UgewogICAgIGk1ID0gMTsKICAgICBpOCA9IDQzNDc3OwogICAgIGkyNiA9IDc2OwogICAgfQogICAgYnJlYWs7CiAgIH0KICBjYXNlIDExNzoKICAgewogICAgaTQgPSBpNDM7CiAgICBpMyA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgICBpNCA9IEhFQVAzMltpNCArIDQgPj4gMl0gfCAwOwogICAgaTUgPSAwOwogICAgaTggPSA0MzQ3NjsKICAgIGkyNiA9IDc2OwogICAgYnJlYWs7CiAgIH0KICBjYXNlIDk5OgogICB7CiAgICBIRUFQOFtpMzYgPj4gMF0gPSBIRUFQMzJbaTQzID4+IDJdOwogICAgaTEyID0gaTM2OwogICAgaTQgPSAxOwogICAgaTkgPSAwOwogICAgaTEwID0gNDM0NzY7CiAgICBpMyA9IGkyODsKICAgIGJyZWFrOwogICB9CiAgY2FzZSAxMDk6CiAgIHsKICAgIGkzID0gX19fZXJybm9fbG9jYXRpb24oKSB8IDA7CiAgICBpMyA9IF9zdHJlcnJvcihIRUFQMzJbaTMgPj4gMl0gfCAwKSB8IDA7CiAgICBpMjYgPSA4MjsKICAgIGJyZWFrOwogICB9CiAgY2FzZSAxMTU6CiAgIHsKICAgIGkzID0gSEVBUDMyW2k0MyA+PiAyXSB8IDA7CiAgICBpMyA9IChpMyB8IDApICE9IDAgPyBpMyA6IDQzNDg2OwogICAgaTI2ID0gODI7CiAgICBicmVhazsKICAgfQogIGNhc2UgNjc6CiAgIHsKICAgIEhFQVAzMltpNDggPj4gMl0gPSBIRUFQMzJbaTQzID4+IDJdOwogICAgSEVBUDMyW2kzNyA+PiAyXSA9IDA7CiAgICBIRUFQMzJbaTQzID4+IDJdID0gaTQ4OwogICAgaTcgPSAtMTsKICAgIGkyNiA9IDg2OwogICAgYnJlYWs7CiAgIH0KICBjYXNlIDgzOgogICB7CiAgICBpZiAoIWk3KSB7CiAgICAgX3BhZChpNDksIDMyLCBpMjUsIDAsIGkyMyk7CiAgICAgaTMgPSAwOwogICAgIGkyNiA9IDk4OwogICAgfSBlbHNlIGkyNiA9IDg2OwogICAgYnJlYWs7CiAgIH0KICBjYXNlIDY1OgogIGNhc2UgNzE6CiAgY2FzZSA3MDoKICBjYXNlIDY5OgogIGNhc2UgOTc6CiAgY2FzZSAxMDM6CiAgY2FzZSAxMDI6CiAgY2FzZSAxMDE6CiAgIHsKICAgIGQ2ID0gK0hFQVBGNjRbaTQzID4+IDNdOwogICAgSEVBUDMyW2k0NiA+PiAyXSA9IDA7CiAgICBIRUFQRjY0W3RlbXBEb3VibGVQdHIgPj4gM10gPSBkNjsKICAgIGlmICgoSEVBUDMyW3RlbXBEb3VibGVQdHIgKyA0ID4+IDJdIHwgMCkgPj0gMCkgaWYgKCEoaTIzICYgMjA0OCkpIHsKICAgICBpMjIgPSBpMjMgJiAxOwogICAgIGkyMSA9IGkyMjsKICAgICBpMjIgPSAoaTIyIHwgMCkgPT0gMCA/IDQzNDk0IDogNDM0OTk7CiAgICB9IGVsc2UgewogICAgIGkyMSA9IDE7CiAgICAgaTIyID0gNDM0OTY7CiAgICB9IGVsc2UgewogICAgIGQ2ID0gLWQ2OwogICAgIGkyMSA9IDE7CiAgICAgaTIyID0gNDM0OTM7CiAgICB9CiAgICBIRUFQRjY0W3RlbXBEb3VibGVQdHIgPj4gM10gPSBkNjsKICAgIGkyMCA9IEhFQVAzMlt0ZW1wRG91YmxlUHRyICsgNCA+PiAyXSAmIDIxNDY0MzUwNzI7CiAgICBkbyBpZiAoaTIwID4+PiAwIDwgMjE0NjQzNTA3MiB8IChpMjAgfCAwKSA9PSAyMTQ2NDM1MDcyICYgMCA8IDApIHsKICAgICBkMTEgPSArX2ZyZXhwbChkNiwgaTQ2KSAqIDIuMDsKICAgICBpNCA9IGQxMSAhPSAwLjA7CiAgICAgaWYgKGk0KSBIRUFQMzJbaTQ2ID4+IDJdID0gKEhFQVAzMltpNDYgPj4gMl0gfCAwKSArIC0xOwogICAgIGkxOCA9IGkxMCB8IDMyOwogICAgIGlmICgoaTE4IHwgMCkgPT0gOTcpIHsKICAgICAgaTEyID0gaTEwICYgMzI7CiAgICAgIGkxNCA9IChpMTIgfCAwKSA9PSAwID8gaTIyIDogaTIyICsgOSB8IDA7CiAgICAgIGkxMyA9IGkyMSB8IDI7CiAgICAgIGkzID0gMTIgLSBpNyB8IDA7CiAgICAgIGRvIGlmICghKGk3ID4+PiAwID4gMTEgfCAoaTMgfCAwKSA9PSAwKSkgewogICAgICAgZDYgPSA4LjA7CiAgICAgICBkbyB7CiAgICAgICAgaTMgPSBpMyArIC0xIHwgMDsKICAgICAgICBkNiA9IGQ2ICogMTYuMDsKICAgICAgIH0gd2hpbGUgKChpMyB8IDApICE9IDApOwogICAgICAgaWYgKChIRUFQOFtpMTQgPj4gMF0gfCAwKSA9PSA0NSkgewogICAgICAgIGQ2ID0gLShkNiArICgtZDExIC0gZDYpKTsKICAgICAgICBicmVhazsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgZDYgPSBkMTEgKyBkNiAtIGQ2OwogICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICB9IGVsc2UgZDYgPSBkMTE7IHdoaWxlICgwKTsKICAgICAgaTQgPSBIRUFQMzJbaTQ2ID4+IDJdIHwgMDsKICAgICAgaTMgPSAoaTQgfCAwKSA8IDAgPyAwIC0gaTQgfCAwIDogaTQ7CiAgICAgIGkzID0gX2ZtdF91KGkzLCAoKGkzIHwgMCkgPCAwKSA8PCAzMSA+PiAzMSwgaTM4KSB8IDA7CiAgICAgIGlmICgoaTMgfCAwKSA9PSAoaTM4IHwgMCkpIHsKICAgICAgIEhFQVA4W2kzOSA+PiAwXSA9IDQ4OwogICAgICAgaTMgPSBpMzk7CiAgICAgIH0KICAgICAgSEVBUDhbaTMgKyAtMSA+PiAwXSA9IChpNCA+PiAzMSAmIDIpICsgNDM7CiAgICAgIGk5ID0gaTMgKyAtMiB8IDA7CiAgICAgIEhFQVA4W2k5ID4+IDBdID0gaTEwICsgMTU7CiAgICAgIGk4ID0gKGk3IHwgMCkgPCAxOwogICAgICBpNSA9IChpMjMgJiA4IHwgMCkgPT0gMDsKICAgICAgaTQgPSBpNDU7CiAgICAgIHdoaWxlICgxKSB7CiAgICAgICBpMjIgPSB+fmQ2OwogICAgICAgaTMgPSBpNCArIDEgfCAwOwogICAgICAgSEVBUDhbaTQgPj4gMF0gPSBIRUFQVThbNDM0NjAgKyBpMjIgPj4gMF0gfCBpMTI7CiAgICAgICBkNiA9IChkNiAtICsoaTIyIHwgMCkpICogMTYuMDsKICAgICAgIGRvIGlmICgoaTMgLSBpNDAgfCAwKSA9PSAxKSB7CiAgICAgICAgaWYgKGk1ICYgKGk4ICYgZDYgPT0gMC4wKSkgYnJlYWs7CiAgICAgICAgSEVBUDhbaTMgPj4gMF0gPSA0NjsKICAgICAgICBpMyA9IGk0ICsgMiB8IDA7CiAgICAgICB9IHdoaWxlICgwKTsKICAgICAgIGlmICghKGQ2ICE9IDAuMCkpIGJyZWFrOyBlbHNlIGk0ID0gaTM7CiAgICAgIH0KICAgICAgaTcgPSAoaTcgfCAwKSAhPSAwICYgKGkyOSArIGkzIHwgMCkgPCAoaTcgfCAwKSA/IGkzMCArIGk3IC0gaTkgfCAwIDogaTQyIC0gaTkgKyBpMyB8IDA7CiAgICAgIGk1ID0gaTcgKyBpMTMgfCAwOwogICAgICBfcGFkKGk0OSwgMzIsIGkyNSwgaTUsIGkyMyk7CiAgICAgIGlmICghKEhFQVAzMltpNDkgPj4gMl0gJiAzMikpIF9fX2Z3cml0ZXgoaTE0LCBpMTMsIGk0OSkgfCAwOwogICAgICBfcGFkKGk0OSwgNDgsIGkyNSwgaTUsIGkyMyBeIDY1NTM2KTsKICAgICAgaTMgPSBpMyAtIGk0MCB8IDA7CiAgICAgIGlmICghKEhFQVAzMltpNDkgPj4gMl0gJiAzMikpIF9fX2Z3cml0ZXgoaTQ1LCBpMywgaTQ5KSB8IDA7CiAgICAgIGk0ID0gaTQxIC0gaTkgfCAwOwogICAgICBfcGFkKGk0OSwgNDgsIGk3IC0gKGkzICsgaTQpIHwgMCwgMCwgMCk7CiAgICAgIGlmICghKEhFQVAzMltpNDkgPj4gMl0gJiAzMikpIF9fX2Z3cml0ZXgoaTksIGk0LCBpNDkpIHwgMDsKICAgICAgX3BhZChpNDksIDMyLCBpMjUsIGk1LCBpMjMgXiA4MTkyKTsKICAgICAgaTMgPSAoaTUgfCAwKSA8IChpMjUgfCAwKSA/IGkyNSA6IGk1OwogICAgICBicmVhazsKICAgICB9CiAgICAgaTMgPSAoaTcgfCAwKSA8IDAgPyA2IDogaTc7CiAgICAgaWYgKGk0KSB7CiAgICAgIGk0ID0gKEhFQVAzMltpNDYgPj4gMl0gfCAwKSArIC0yOCB8IDA7CiAgICAgIEhFQVAzMltpNDYgPj4gMl0gPSBpNDsKICAgICAgZDYgPSBkMTEgKiAyNjg0MzU0NTYuMDsKICAgICB9IGVsc2UgewogICAgICBkNiA9IGQxMTsKICAgICAgaTQgPSBIRUFQMzJbaTQ2ID4+IDJdIHwgMDsKICAgICB9CiAgICAgaTIwID0gKGk0IHwgMCkgPCAwID8gaTQ0IDogaTMxOwogICAgIGkxOSA9IGkyMDsKICAgICBpNCA9IGkyMDsKICAgICBkbyB7CiAgICAgIGkxNyA9IH5+ZDYgPj4+IDA7CiAgICAgIEhFQVAzMltpNCA+PiAyXSA9IGkxNzsKICAgICAgaTQgPSBpNCArIDQgfCAwOwogICAgICBkNiA9IChkNiAtICsoaTE3ID4+PiAwKSkgKiAxLjBlOTsKICAgICB9IHdoaWxlIChkNiAhPSAwLjApOwogICAgIGk1ID0gaTQ7CiAgICAgaTQgPSBIRUFQMzJbaTQ2ID4+IDJdIHwgMDsKICAgICBpZiAoKGk0IHwgMCkgPiAwKSB7CiAgICAgIGk4ID0gaTIwOwogICAgICB3aGlsZSAoMSkgewogICAgICAgaTkgPSAoaTQgfCAwKSA+IDI5ID8gMjkgOiBpNDsKICAgICAgIGk3ID0gaTUgKyAtNCB8IDA7CiAgICAgICBkbyBpZiAoaTcgPj4+IDAgPCBpOCA+Pj4gMCkgaTcgPSBpODsgZWxzZSB7CiAgICAgICAgaTQgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgaTE3ID0gX2JpdHNoaWZ0NjRTaGwoSEVBUDMyW2k3ID4+IDJdIHwgMCwgMCwgaTkgfCAwKSB8IDA7CiAgICAgICAgIGkxNyA9IF9pNjRBZGQoaTE3IHwgMCwgdGVtcFJldDAgfCAwLCBpNCB8IDAsIDApIHwgMDsKICAgICAgICAgaTQgPSB0ZW1wUmV0MDsKICAgICAgICAgaTE2ID0gX19fdXJlbWRpMyhpMTcgfCAwLCBpNCB8IDAsIDFlOSwgMCkgfCAwOwogICAgICAgICBIRUFQMzJbaTcgPj4gMl0gPSBpMTY7CiAgICAgICAgIGk0ID0gX19fdWRpdmRpMyhpMTcgfCAwLCBpNCB8IDAsIDFlOSwgMCkgfCAwOwogICAgICAgICBpNyA9IGk3ICsgLTQgfCAwOwogICAgICAgIH0gd2hpbGUgKGk3ID4+PiAwID49IGk4ID4+PiAwKTsKICAgICAgICBpZiAoIWk0KSB7CiAgICAgICAgIGk3ID0gaTg7CiAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpNyA9IGk4ICsgLTQgfCAwOwogICAgICAgIEhFQVAzMltpNyA+PiAyXSA9IGk0OwogICAgICAgfSB3aGlsZSAoMCk7CiAgICAgICB3aGlsZSAoMSkgewogICAgICAgIGlmIChpNSA+Pj4gMCA8PSBpNyA+Pj4gMCkgYnJlYWs7CiAgICAgICAgaTQgPSBpNSArIC00IHwgMDsKICAgICAgICBpZiAoIShIRUFQMzJbaTQgPj4gMl0gfCAwKSkgaTUgPSBpNDsgZWxzZSBicmVhazsKICAgICAgIH0KICAgICAgIGk0ID0gKEhFQVAzMltpNDYgPj4gMl0gfCAwKSAtIGk5IHwgMDsKICAgICAgIEhFQVAzMltpNDYgPj4gMl0gPSBpNDsKICAgICAgIGlmICgoaTQgfCAwKSA+IDApIGk4ID0gaTc7IGVsc2UgYnJlYWs7CiAgICAgIH0KICAgICB9IGVsc2UgaTcgPSBpMjA7CiAgICAgaWYgKChpNCB8IDApIDwgMCkgewogICAgICBpMTQgPSAoKGkzICsgMjUgfCAwKSAvIDkgfCAwKSArIDEgfCAwOwogICAgICBpMTUgPSAoaTE4IHwgMCkgPT0gMTAyOwogICAgICBpMTIgPSBpNzsKICAgICAgd2hpbGUgKDEpIHsKICAgICAgIGkxMyA9IDAgLSBpNCB8IDA7CiAgICAgICBpMTMgPSAoaTEzIHwgMCkgPiA5ID8gOSA6IGkxMzsKICAgICAgIGRvIGlmIChpMTIgPj4+IDAgPCBpNSA+Pj4gMCkgewogICAgICAgIGk0ID0gKDEgPDwgaTEzKSArIC0xIHwgMDsKICAgICAgICBpOCA9IDFlOSA+Pj4gaTEzOwogICAgICAgIGk3ID0gMDsKICAgICAgICBpOSA9IGkxMjsKICAgICAgICBkbyB7CiAgICAgICAgIGkxNyA9IEhFQVAzMltpOSA+PiAyXSB8IDA7CiAgICAgICAgIEhFQVAzMltpOSA+PiAyXSA9IChpMTcgPj4+IGkxMykgKyBpNzsKICAgICAgICAgaTcgPSBNYXRoX2ltdWwoaTE3ICYgaTQsIGk4KSB8IDA7CiAgICAgICAgIGk5ID0gaTkgKyA0IHwgMDsKICAgICAgICB9IHdoaWxlIChpOSA+Pj4gMCA8IGk1ID4+PiAwKTsKICAgICAgICBpNCA9IChIRUFQMzJbaTEyID4+IDJdIHwgMCkgPT0gMCA/IGkxMiArIDQgfCAwIDogaTEyOwogICAgICAgIGlmICghaTcpIHsKICAgICAgICAgaTcgPSBpNDsKICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIEhFQVAzMltpNSA+PiAyXSA9IGk3OwogICAgICAgIGk3ID0gaTQ7CiAgICAgICAgaTUgPSBpNSArIDQgfCAwOwogICAgICAgfSBlbHNlIGk3ID0gKEhFQVAzMltpMTIgPj4gMl0gfCAwKSA9PSAwID8gaTEyICsgNCB8IDAgOiBpMTI7IHdoaWxlICgwKTsKICAgICAgIGk0ID0gaTE1ID8gaTIwIDogaTc7CiAgICAgICBpNSA9IChpNSAtIGk0ID4+IDIgfCAwKSA+IChpMTQgfCAwKSA/IGk0ICsgKGkxNCA8PCAyKSB8IDAgOiBpNTsKICAgICAgIGk0ID0gKEhFQVAzMltpNDYgPj4gMl0gfCAwKSArIGkxMyB8IDA7CiAgICAgICBIRUFQMzJbaTQ2ID4+IDJdID0gaTQ7CiAgICAgICBpZiAoKGk0IHwgMCkgPj0gMCkgewogICAgICAgIGkxMiA9IGk3OwogICAgICAgIGJyZWFrOwogICAgICAgfSBlbHNlIGkxMiA9IGk3OwogICAgICB9CiAgICAgfSBlbHNlIGkxMiA9IGk3OwogICAgIGRvIGlmIChpMTIgPj4+IDAgPCBpNSA+Pj4gMCkgewogICAgICBpNCA9IChpMTkgLSBpMTIgPj4gMikgKiA5IHwgMDsKICAgICAgaTggPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKICAgICAgaWYgKGk4ID4+PiAwIDwgMTApIGJyZWFrOyBlbHNlIGk3ID0gMTA7CiAgICAgIGRvIHsKICAgICAgIGk3ID0gaTcgKiAxMCB8IDA7CiAgICAgICBpNCA9IGk0ICsgMSB8IDA7CiAgICAgIH0gd2hpbGUgKGk4ID4+PiAwID49IGk3ID4+PiAwKTsKICAgICB9IGVsc2UgaTQgPSAwOyB3aGlsZSAoMCk7CiAgICAgaTE2ID0gKGkxOCB8IDApID09IDEwMzsKICAgICBpMTcgPSAoaTMgfCAwKSAhPSAwOwogICAgIGk3ID0gaTMgLSAoKGkxOCB8IDApICE9IDEwMiA/IGk0IDogMCkgKyAoKGkxNyAmIGkxNikgPDwgMzEgPj4gMzEpIHwgMDsKICAgICBpZiAoKGk3IHwgMCkgPCAoKChpNSAtIGkxOSA+PiAyKSAqIDkgfCAwKSArIC05IHwgMCkpIHsKICAgICAgaTkgPSBpNyArIDkyMTYgfCAwOwogICAgICBpMTUgPSAoaTkgfCAwKSAvIDkgfCAwOwogICAgICBpNyA9IGkyMCArIChpMTUgKyAtMTAyMyA8PCAyKSB8IDA7CiAgICAgIGk5ID0gKChpOSB8IDApICUgOSB8IDApICsgMSB8IDA7CiAgICAgIGlmICgoaTkgfCAwKSA8IDkpIHsKICAgICAgIGk4ID0gMTA7CiAgICAgICBkbyB7CiAgICAgICAgaTggPSBpOCAqIDEwIHwgMDsKICAgICAgICBpOSA9IGk5ICsgMSB8IDA7CiAgICAgICB9IHdoaWxlICgoaTkgfCAwKSAhPSA5KTsKICAgICAgfSBlbHNlIGk4ID0gMTA7CiAgICAgIGkxMyA9IEhFQVAzMltpNyA+PiAyXSB8IDA7CiAgICAgIGkxNCA9IChpMTMgPj4+IDApICUgKGk4ID4+PiAwKSB8IDA7CiAgICAgIGlmICgoaTE0IHwgMCkgPT0gMCA/IChpMjAgKyAoaTE1ICsgLTEwMjIgPDwgMikgfCAwKSA9PSAoaTUgfCAwKSA6IDApIGk4ID0gaTEyOyBlbHNlIGkyNiA9IDE2MzsKICAgICAgZG8gaWYgKChpMjYgfCAwKSA9PSAxNjMpIHsKICAgICAgIGkyNiA9IDA7CiAgICAgICBkMTEgPSAoKChpMTMgPj4+IDApIC8gKGk4ID4+PiAwKSB8IDApICYgMSB8IDApID09IDAgPyA5MDA3MTk5MjU0NzQwOTkyLjAgOiA5MDA3MTk5MjU0NzQwOTk0LjA7CiAgICAgICBpOSA9IChpOCB8IDApIC8gMiB8IDA7CiAgICAgICBkbyBpZiAoaTE0ID4+PiAwIDwgaTkgPj4+IDApIGQ2ID0gLjU7IGVsc2UgewogICAgICAgIGlmICgoaTE0IHwgMCkgPT0gKGk5IHwgMCkgPyAoaTIwICsgKGkxNSArIC0xMDIyIDw8IDIpIHwgMCkgPT0gKGk1IHwgMCkgOiAwKSB7CiAgICAgICAgIGQ2ID0gMS4wOwogICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZDYgPSAxLjU7CiAgICAgICB9IHdoaWxlICgwKTsKICAgICAgIGRvIGlmIChpMjEpIHsKICAgICAgICBpZiAoKEhFQVA4W2kyMiA+PiAwXSB8IDApICE9IDQ1KSBicmVhazsKICAgICAgICBkMTEgPSAtZDExOwogICAgICAgIGQ2ID0gLWQ2OwogICAgICAgfSB3aGlsZSAoMCk7CiAgICAgICBpOSA9IGkxMyAtIGkxNCB8IDA7CiAgICAgICBIRUFQMzJbaTcgPj4gMl0gPSBpOTsKICAgICAgIGlmICghKGQxMSArIGQ2ICE9IGQxMSkpIHsKICAgICAgICBpOCA9IGkxMjsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGkxOCA9IGk5ICsgaTggfCAwOwogICAgICAgSEVBUDMyW2k3ID4+IDJdID0gaTE4OwogICAgICAgaWYgKGkxOCA+Pj4gMCA+IDk5OTk5OTk5OSkgewogICAgICAgIGk0ID0gaTEyOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGk4ID0gaTcgKyAtNCB8IDA7CiAgICAgICAgIEhFQVAzMltpNyA+PiAyXSA9IDA7CiAgICAgICAgIGlmIChpOCA+Pj4gMCA8IGk0ID4+PiAwKSB7CiAgICAgICAgICBpNCA9IGk0ICsgLTQgfCAwOwogICAgICAgICAgSEVBUDMyW2k0ID4+IDJdID0gMDsKICAgICAgICAgfQogICAgICAgICBpMTggPSAoSEVBUDMyW2k4ID4+IDJdIHwgMCkgKyAxIHwgMDsKICAgICAgICAgSEVBUDMyW2k4ID4+IDJdID0gaTE4OwogICAgICAgICBpZiAoaTE4ID4+PiAwID4gOTk5OTk5OTk5KSBpNyA9IGk4OyBlbHNlIHsKICAgICAgICAgIGkxMiA9IGk0OwogICAgICAgICAgaTcgPSBpODsKICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgfQogICAgICAgfQogICAgICAgaTQgPSAoaTE5IC0gaTEyID4+IDIpICogOSB8IDA7CiAgICAgICBpOSA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogICAgICAgaWYgKGk5ID4+PiAwIDwgMTApIHsKICAgICAgICBpOCA9IGkxMjsKICAgICAgICBicmVhazsKICAgICAgIH0gZWxzZSBpOCA9IDEwOwogICAgICAgZG8gewogICAgICAgIGk4ID0gaTggKiAxMCB8IDA7CiAgICAgICAgaTQgPSBpNCArIDEgfCAwOwogICAgICAgfSB3aGlsZSAoaTkgPj4+IDAgPj0gaTggPj4+IDApOwogICAgICAgaTggPSBpMTI7CiAgICAgIH0gd2hpbGUgKDApOwogICAgICBpMTggPSBpNyArIDQgfCAwOwogICAgICBpMTIgPSBpODsKICAgICAgaTUgPSBpNSA+Pj4gMCA+IGkxOCA+Pj4gMCA/IGkxOCA6IGk1OwogICAgIH0KICAgICBpMTQgPSAwIC0gaTQgfCAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgIGlmIChpNSA+Pj4gMCA8PSBpMTIgPj4+IDApIHsKICAgICAgIGkxNSA9IDA7CiAgICAgICBpMTggPSBpNTsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGk3ID0gaTUgKyAtNCB8IDA7CiAgICAgIGlmICghKEhFQVAzMltpNyA+PiAyXSB8IDApKSBpNSA9IGk3OyBlbHNlIHsKICAgICAgIGkxNSA9IDE7CiAgICAgICBpMTggPSBpNTsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgfQogICAgIGRvIGlmIChpMTYpIHsKICAgICAgaTMgPSAoaTE3ICYgMSBeIDEpICsgaTMgfCAwOwogICAgICBpZiAoKGkzIHwgMCkgPiAoaTQgfCAwKSAmIChpNCB8IDApID4gLTUpIHsKICAgICAgIGkxMCA9IGkxMCArIC0xIHwgMDsKICAgICAgIGkzID0gaTMgKyAtMSAtIGk0IHwgMDsKICAgICAgfSBlbHNlIHsKICAgICAgIGkxMCA9IGkxMCArIC0yIHwgMDsKICAgICAgIGkzID0gaTMgKyAtMSB8IDA7CiAgICAgIH0KICAgICAgaTUgPSBpMjMgJiA4OwogICAgICBpZiAoaTUpIGJyZWFrOwogICAgICBkbyBpZiAoaTE1KSB7CiAgICAgICBpNSA9IEhFQVAzMltpMTggKyAtNCA+PiAyXSB8IDA7CiAgICAgICBpZiAoIWk1KSB7CiAgICAgICAgaTcgPSA5OwogICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgaWYgKCEoKGk1ID4+PiAwKSAlIDEwIHwgMCkpIHsKICAgICAgICBpOCA9IDEwOwogICAgICAgIGk3ID0gMDsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgaTcgPSAwOwogICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgZG8gewogICAgICAgIGk4ID0gaTggKiAxMCB8IDA7CiAgICAgICAgaTcgPSBpNyArIDEgfCAwOwogICAgICAgfSB3aGlsZSAoKChpNSA+Pj4gMCkgJSAoaTggPj4+IDApIHwgMCB8IDApID09IDApOwogICAgICB9IGVsc2UgaTcgPSA5OyB3aGlsZSAoMCk7CiAgICAgIGk1ID0gKChpMTggLSBpMTkgPj4gMikgKiA5IHwgMCkgKyAtOSB8IDA7CiAgICAgIGlmICgoaTEwIHwgMzIgfCAwKSA9PSAxMDIpIHsKICAgICAgIGk1ID0gaTUgLSBpNyB8IDA7CiAgICAgICBpNSA9IChpNSB8IDApIDwgMCA/IDAgOiBpNTsKICAgICAgIGkzID0gKGkzIHwgMCkgPCAoaTUgfCAwKSA/IGkzIDogaTU7CiAgICAgICBpNSA9IDA7CiAgICAgICBicmVhazsKICAgICAgfSBlbHNlIHsKICAgICAgIGk1ID0gaTUgKyBpNCAtIGk3IHwgMDsKICAgICAgIGk1ID0gKGk1IHwgMCkgPCAwID8gMCA6IGk1OwogICAgICAgaTMgPSAoaTMgfCAwKSA8IChpNSB8IDApID8gaTMgOiBpNTsKICAgICAgIGk1ID0gMDsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgfSBlbHNlIGk1ID0gaTIzICYgODsgd2hpbGUgKDApOwogICAgIGkxMyA9IGkzIHwgaTU7CiAgICAgaTggPSAoaTEzIHwgMCkgIT0gMCAmIDE7CiAgICAgaTkgPSAoaTEwIHwgMzIgfCAwKSA9PSAxMDI7CiAgICAgaWYgKGk5KSB7CiAgICAgIGk0ID0gKGk0IHwgMCkgPiAwID8gaTQgOiAwOwogICAgICBpMTAgPSAwOwogICAgIH0gZWxzZSB7CiAgICAgIGk3ID0gKGk0IHwgMCkgPCAwID8gaTE0IDogaTQ7CiAgICAgIGk3ID0gX2ZtdF91KGk3LCAoKGk3IHwgMCkgPCAwKSA8PCAzMSA+PiAzMSwgaTM4KSB8IDA7CiAgICAgIGlmICgoaTQxIC0gaTcgfCAwKSA8IDIpIGRvIHsKICAgICAgIGk3ID0gaTcgKyAtMSB8IDA7CiAgICAgICBIRUFQOFtpNyA+PiAwXSA9IDQ4OwogICAgICB9IHdoaWxlICgoaTQxIC0gaTcgfCAwKSA8IDIpOwogICAgICBIRUFQOFtpNyArIC0xID4+IDBdID0gKGk0ID4+IDMxICYgMikgKyA0MzsKICAgICAgaTE5ID0gaTcgKyAtMiB8IDA7CiAgICAgIEhFQVA4W2kxOSA+PiAwXSA9IGkxMDsKICAgICAgaTQgPSBpNDEgLSBpMTkgfCAwOwogICAgICBpMTAgPSBpMTk7CiAgICAgfQogICAgIGkxNCA9IGkyMSArIDEgKyBpMyArIGk4ICsgaTQgfCAwOwogICAgIF9wYWQoaTQ5LCAzMiwgaTI1LCBpMTQsIGkyMyk7CiAgICAgaWYgKCEoSEVBUDMyW2k0OSA+PiAyXSAmIDMyKSkgX19fZndyaXRleChpMjIsIGkyMSwgaTQ5KSB8IDA7CiAgICAgX3BhZChpNDksIDQ4LCBpMjUsIGkxNCwgaTIzIF4gNjU1MzYpOwogICAgIGRvIGlmIChpOSkgewogICAgICBpNyA9IGkxMiA+Pj4gMCA+IGkyMCA+Pj4gMCA/IGkyMCA6IGkxMjsKICAgICAgaTQgPSBpNzsKICAgICAgZG8gewogICAgICAgaTUgPSBfZm10X3UoSEVBUDMyW2k0ID4+IDJdIHwgMCwgMCwgaTMyKSB8IDA7CiAgICAgICBkbyBpZiAoKGk0IHwgMCkgPT0gKGk3IHwgMCkpIHsKICAgICAgICBpZiAoKGk1IHwgMCkgIT0gKGkzMiB8IDApKSBicmVhazsKICAgICAgICBIRUFQOFtpMzQgPj4gMF0gPSA0ODsKICAgICAgICBpNSA9IGkzNDsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGk1ID4+PiAwIDw9IGk0NSA+Pj4gMCkgYnJlYWs7CiAgICAgICAgZG8gewogICAgICAgICBpNSA9IGk1ICsgLTEgfCAwOwogICAgICAgICBIRUFQOFtpNSA+PiAwXSA9IDQ4OwogICAgICAgIH0gd2hpbGUgKGk1ID4+PiAwID4gaTQ1ID4+PiAwKTsKICAgICAgIH0gd2hpbGUgKDApOwogICAgICAgaWYgKCEoSEVBUDMyW2k0OSA+PiAyXSAmIDMyKSkgX19fZndyaXRleChpNSwgaTMzIC0gaTUgfCAwLCBpNDkpIHwgMDsKICAgICAgIGk0ID0gaTQgKyA0IHwgMDsKICAgICAgfSB3aGlsZSAoaTQgPj4+IDAgPD0gaTIwID4+PiAwKTsKICAgICAgZG8gaWYgKGkxMykgewogICAgICAgaWYgKEhFQVAzMltpNDkgPj4gMl0gJiAzMikgYnJlYWs7CiAgICAgICBfX19md3JpdGV4KDQzNTI4LCAxLCBpNDkpIHwgMDsKICAgICAgfSB3aGlsZSAoMCk7CiAgICAgIGlmICgoaTMgfCAwKSA+IDAgJiBpNCA+Pj4gMCA8IGkxOCA+Pj4gMCkgewogICAgICAgaTUgPSBpNDsKICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgaTQgPSBfZm10X3UoSEVBUDMyW2k1ID4+IDJdIHwgMCwgMCwgaTMyKSB8IDA7CiAgICAgICAgaWYgKGk0ID4+PiAwID4gaTQ1ID4+PiAwKSBkbyB7CiAgICAgICAgIGk0ID0gaTQgKyAtMSB8IDA7CiAgICAgICAgIEhFQVA4W2k0ID4+IDBdID0gNDg7CiAgICAgICAgfSB3aGlsZSAoaTQgPj4+IDAgPiBpNDUgPj4+IDApOwogICAgICAgIGlmICghKEhFQVAzMltpNDkgPj4gMl0gJiAzMikpIF9fX2Z3cml0ZXgoaTQsIChpMyB8IDApID4gOSA/IDkgOiBpMywgaTQ5KSB8IDA7CiAgICAgICAgaTUgPSBpNSArIDQgfCAwOwogICAgICAgIGk0ID0gaTMgKyAtOSB8IDA7CiAgICAgICAgaWYgKCEoKGkzIHwgMCkgPiA5ICYgaTUgPj4+IDAgPCBpMTggPj4+IDApKSB7CiAgICAgICAgIGkzID0gaTQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSBpMyA9IGk0OwogICAgICAgfQogICAgICB9CiAgICAgIF9wYWQoaTQ5LCA0OCwgaTMgKyA5IHwgMCwgOSwgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgaTkgPSBpMTUgPyBpMTggOiBpMTIgKyA0IHwgMDsKICAgICAgaWYgKChpMyB8IDApID4gLTEpIHsKICAgICAgIGk4ID0gKGk1IHwgMCkgPT0gMDsKICAgICAgIGk3ID0gaTEyOwogICAgICAgZG8gewogICAgICAgIGk0ID0gX2ZtdF91KEhFQVAzMltpNyA+PiAyXSB8IDAsIDAsIGkzMikgfCAwOwogICAgICAgIGlmICgoaTQgfCAwKSA9PSAoaTMyIHwgMCkpIHsKICAgICAgICAgSEVBUDhbaTM0ID4+IDBdID0gNDg7CiAgICAgICAgIGk0ID0gaTM0OwogICAgICAgIH0KICAgICAgICBkbyBpZiAoKGk3IHwgMCkgPT0gKGkxMiB8IDApKSB7CiAgICAgICAgIGk1ID0gaTQgKyAxIHwgMDsKICAgICAgICAgaWYgKCEoSEVBUDMyW2k0OSA+PiAyXSAmIDMyKSkgX19fZndyaXRleChpNCwgMSwgaTQ5KSB8IDA7CiAgICAgICAgIGlmIChpOCAmIChpMyB8IDApIDwgMSkgewogICAgICAgICAgaTQgPSBpNTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChIRUFQMzJbaTQ5ID4+IDJdICYgMzIpIHsKICAgICAgICAgIGk0ID0gaTU7CiAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBfX19md3JpdGV4KDQzNTI4LCAxLCBpNDkpIHwgMDsKICAgICAgICAgaTQgPSBpNTsKICAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaTQgPj4+IDAgPD0gaTQ1ID4+PiAwKSBicmVhazsKICAgICAgICAgZG8gewogICAgICAgICAgaTQgPSBpNCArIC0xIHwgMDsKICAgICAgICAgIEhFQVA4W2k0ID4+IDBdID0gNDg7CiAgICAgICAgIH0gd2hpbGUgKGk0ID4+PiAwID4gaTQ1ID4+PiAwKTsKICAgICAgICB9IHdoaWxlICgwKTsKICAgICAgICBpNSA9IGkzMyAtIGk0IHwgMDsKICAgICAgICBpZiAoIShIRUFQMzJbaTQ5ID4+IDJdICYgMzIpKSBfX19md3JpdGV4KGk0LCAoaTMgfCAwKSA+IChpNSB8IDApID8gaTUgOiBpMywgaTQ5KSB8IDA7CiAgICAgICAgaTMgPSBpMyAtIGk1IHwgMDsKICAgICAgICBpNyA9IGk3ICsgNCB8IDA7CiAgICAgICB9IHdoaWxlIChpNyA+Pj4gMCA8IGk5ID4+PiAwICYgKGkzIHwgMCkgPiAtMSk7CiAgICAgIH0KICAgICAgX3BhZChpNDksIDQ4LCBpMyArIDE4IHwgMCwgMTgsIDApOwogICAgICBpZiAoSEVBUDMyW2k0OSA+PiAyXSAmIDMyKSBicmVhazsKICAgICAgX19fZndyaXRleChpMTAsIGk0MSAtIGkxMCB8IDAsIGk0OSkgfCAwOwogICAgIH0gd2hpbGUgKDApOwogICAgIF9wYWQoaTQ5LCAzMiwgaTI1LCBpMTQsIGkyMyBeIDgxOTIpOwogICAgIGkzID0gKGkxNCB8IDApIDwgKGkyNSB8IDApID8gaTI1IDogaTE0OwogICAgfSBlbHNlIHsKICAgICBpOSA9IChpMTAgJiAzMiB8IDApICE9IDA7CiAgICAgaTggPSBkNiAhPSBkNiB8IDAuMCAhPSAwLjA7CiAgICAgaTQgPSBpOCA/IDAgOiBpMjE7CiAgICAgaTcgPSBpNCArIDMgfCAwOwogICAgIF9wYWQoaTQ5LCAzMiwgaTI1LCBpNywgaTUpOwogICAgIGkzID0gSEVBUDMyW2k0OSA+PiAyXSB8IDA7CiAgICAgaWYgKCEoaTMgJiAzMikpIHsKICAgICAgX19fZndyaXRleChpMjIsIGk0LCBpNDkpIHwgMDsKICAgICAgaTMgPSBIRUFQMzJbaTQ5ID4+IDJdIHwgMDsKICAgICB9CiAgICAgaWYgKCEoaTMgJiAzMikpIF9fX2Z3cml0ZXgoaTggPyAoaTkgPyA0MzUyMCA6IDQzNTI0KSA6IGk5ID8gNDM1MTIgOiA0MzUxNiwgMywgaTQ5KSB8IDA7CiAgICAgX3BhZChpNDksIDMyLCBpMjUsIGk3LCBpMjMgXiA4MTkyKTsKICAgICBpMyA9IChpNyB8IDApIDwgKGkyNSB8IDApID8gaTI1IDogaTc7CiAgICB9IHdoaWxlICgwKTsKICAgIGkxMiA9IGkyNDsKICAgIGNvbnRpbnVlIEwxOwogICB9CiAgZGVmYXVsdDoKICAgewogICAgaTUgPSBpMjM7CiAgICBpNCA9IGk3OwogICAgaTkgPSAwOwogICAgaTEwID0gNDM0NzY7CiAgICBpMyA9IGkyODsKICAgfQogIH0gd2hpbGUgKDApOwogIEwzMTMgOiBkbyBpZiAoKGkyNiB8IDApID09IDY0KSB7CiAgIGk1ID0gaTQzOwogICBpNCA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgIGk1ID0gSEVBUDMyW2k1ICsgNCA+PiAyXSB8IDA7CiAgIGk4ID0gaTEwICYgMzI7CiAgIGlmICghKChpNCB8IDApID09IDAgJiAoaTUgfCAwKSA9PSAwKSkgewogICAgaTMgPSBpMjg7CiAgICBkbyB7CiAgICAgaTMgPSBpMyArIC0xIHwgMDsKICAgICBIRUFQOFtpMyA+PiAwXSA9IEhFQVBVOFs0MzQ2MCArIChpNCAmIDE1KSA+PiAwXSB8IGk4OwogICAgIGk0ID0gX2JpdHNoaWZ0NjRMc2hyKGk0IHwgMCwgaTUgfCAwLCA0KSB8IDA7CiAgICAgaTUgPSB0ZW1wUmV0MDsKICAgIH0gd2hpbGUgKCEoKGk0IHwgMCkgPT0gMCAmIChpNSB8IDApID09IDApKTsKICAgIGkyNiA9IGk0MzsKICAgIGlmICgoaTkgJiA4IHwgMCkgPT0gMCB8IChIRUFQMzJbaTI2ID4+IDJdIHwgMCkgPT0gMCAmIChIRUFQMzJbaTI2ICsgNCA+PiAyXSB8IDApID09IDApIHsKICAgICBpNCA9IGk5OwogICAgIGk5ID0gMDsKICAgICBpOCA9IDQzNDc2OwogICAgIGkyNiA9IDc3OwogICAgfSBlbHNlIHsKICAgICBpNCA9IGk5OwogICAgIGk5ID0gMjsKICAgICBpOCA9IDQzNDc2ICsgKGkxMCA+PiA0KSB8IDA7CiAgICAgaTI2ID0gNzc7CiAgICB9CiAgIH0gZWxzZSB7CiAgICBpMyA9IGkyODsKICAgIGk0ID0gaTk7CiAgICBpOSA9IDA7CiAgICBpOCA9IDQzNDc2OwogICAgaTI2ID0gNzc7CiAgIH0KICB9IGVsc2UgaWYgKChpMjYgfCAwKSA9PSA3NikgewogICBpMyA9IF9mbXRfdShpMywgaTQsIGkyOCkgfCAwOwogICBpNCA9IGkyMzsKICAgaTkgPSBpNTsKICAgaTI2ID0gNzc7CiAgfSBlbHNlIGlmICgoaTI2IHwgMCkgPT0gODIpIHsKICAgaTI2ID0gMDsKICAgaTIzID0gX21lbWNocihpMywgMCwgaTcpIHwgMDsKICAgaTIyID0gKGkyMyB8IDApID09IDA7CiAgIGkxMiA9IGkzOwogICBpNCA9IGkyMiA/IGk3IDogaTIzIC0gaTMgfCAwOwogICBpOSA9IDA7CiAgIGkxMCA9IDQzNDc2OwogICBpMyA9IGkyMiA/IGkzICsgaTcgfCAwIDogaTIzOwogIH0gZWxzZSBpZiAoKGkyNiB8IDApID09IDg2KSB7CiAgIGkyNiA9IDA7CiAgIGk0ID0gMDsKICAgaTMgPSAwOwogICBpOCA9IEhFQVAzMltpNDMgPj4gMl0gfCAwOwogICB3aGlsZSAoMSkgewogICAgaTUgPSBIRUFQMzJbaTggPj4gMl0gfCAwOwogICAgaWYgKCFpNSkgYnJlYWs7CiAgICBpMyA9IF93Y3RvbWIoaTQ3LCBpNSkgfCAwOwogICAgaWYgKChpMyB8IDApIDwgMCB8IGkzID4+PiAwID4gKGk3IC0gaTQgfCAwKSA+Pj4gMCkgYnJlYWs7CiAgICBpNCA9IGkzICsgaTQgfCAwOwogICAgaWYgKGk3ID4+PiAwID4gaTQgPj4+IDApIGk4ID0gaTggKyA0IHwgMDsgZWxzZSBicmVhazsKICAgfQogICBpZiAoKGkzIHwgMCkgPCAwKSB7CiAgICBpMSA9IC0xOwogICAgYnJlYWsgTDE7CiAgIH0KICAgX3BhZChpNDksIDMyLCBpMjUsIGk0LCBpMjMpOwogICBpZiAoIWk0KSB7CiAgICBpMyA9IDA7CiAgICBpMjYgPSA5ODsKICAgfSBlbHNlIHsKICAgIGk1ID0gMDsKICAgIGk3ID0gSEVBUDMyW2k0MyA+PiAyXSB8IDA7CiAgICB3aGlsZSAoMSkgewogICAgIGkzID0gSEVBUDMyW2k3ID4+IDJdIHwgMDsKICAgICBpZiAoIWkzKSB7CiAgICAgIGkzID0gaTQ7CiAgICAgIGkyNiA9IDk4OwogICAgICBicmVhayBMMzEzOwogICAgIH0KICAgICBpMyA9IF93Y3RvbWIoaTQ3LCBpMykgfCAwOwogICAgIGk1ID0gaTMgKyBpNSB8IDA7CiAgICAgaWYgKChpNSB8IDApID4gKGk0IHwgMCkpIHsKICAgICAgaTMgPSBpNDsKICAgICAgaTI2ID0gOTg7CiAgICAgIGJyZWFrIEwzMTM7CiAgICAgfQogICAgIGlmICghKEhFQVAzMltpNDkgPj4gMl0gJiAzMikpIF9fX2Z3cml0ZXgoaTQ3LCBpMywgaTQ5KSB8IDA7CiAgICAgaWYgKGk1ID4+PiAwID49IGk0ID4+PiAwKSB7CiAgICAgIGkzID0gaTQ7CiAgICAgIGkyNiA9IDk4OwogICAgICBicmVhazsKICAgICB9IGVsc2UgaTcgPSBpNyArIDQgfCAwOwogICAgfQogICB9CiAgfSB3aGlsZSAoMCk7CiAgaWYgKChpMjYgfCAwKSA9PSA5OCkgewogICBpMjYgPSAwOwogICBfcGFkKGk0OSwgMzIsIGkyNSwgaTMsIGkyMyBeIDgxOTIpOwogICBpMTIgPSBpMjQ7CiAgIGkzID0gKGkyNSB8IDApID4gKGkzIHwgMCkgPyBpMjUgOiBpMzsKICAgY29udGludWU7CiAgfQogIGlmICgoaTI2IHwgMCkgPT0gNzcpIHsKICAgaTI2ID0gMDsKICAgaTUgPSAoaTcgfCAwKSA+IC0xID8gaTQgJiAtNjU1MzcgOiBpNDsKICAgaTQgPSBpNDM7CiAgIGk0ID0gKEhFQVAzMltpNCA+PiAyXSB8IDApICE9IDAgfCAoSEVBUDMyW2k0ICsgNCA+PiAyXSB8IDApICE9IDA7CiAgIGlmICgoaTcgfCAwKSAhPSAwIHwgaTQpIHsKICAgIGk0ID0gKGk0ICYgMSBeIDEpICsgKGkzNSAtIGkzKSB8IDA7CiAgICBpMTIgPSBpMzsKICAgIGk0ID0gKGk3IHwgMCkgPiAoaTQgfCAwKSA/IGk3IDogaTQ7CiAgICBpMTAgPSBpODsKICAgIGkzID0gaTI4OwogICB9IGVsc2UgewogICAgaTEyID0gaTI4OwogICAgaTQgPSAwOwogICAgaTEwID0gaTg7CiAgICBpMyA9IGkyODsKICAgfQogIH0KICBpOCA9IGkzIC0gaTEyIHwgMDsKICBpNCA9IChpNCB8IDApIDwgKGk4IHwgMCkgPyBpOCA6IGk0OwogIGk3ID0gaTkgKyBpNCB8IDA7CiAgaTMgPSAoaTI1IHwgMCkgPCAoaTcgfCAwKSA/IGk3IDogaTI1OwogIF9wYWQoaTQ5LCAzMiwgaTMsIGk3LCBpNSk7CiAgaWYgKCEoSEVBUDMyW2k0OSA+PiAyXSAmIDMyKSkgX19fZndyaXRleChpMTAsIGk5LCBpNDkpIHwgMDsKICBfcGFkKGk0OSwgNDgsIGkzLCBpNywgaTUgXiA2NTUzNik7CiAgX3BhZChpNDksIDQ4LCBpNCwgaTgsIDApOwogIGlmICghKEhFQVAzMltpNDkgPj4gMl0gJiAzMikpIF9fX2Z3cml0ZXgoaTEyLCBpOCwgaTQ5KSB8IDA7CiAgX3BhZChpNDksIDMyLCBpMywgaTcsIGk1IF4gODE5Mik7CiAgaTEyID0gaTI0OwogfQogTDM0OCA6IGRvIGlmICgoaTI2IHwgMCkgPT0gMjQ1KSBpZiAoIWk0OSkgaWYgKGkyKSB7CiAgaTEgPSAxOwogIHdoaWxlICgxKSB7CiAgIGkyID0gSEVBUDMyW2k1MiArIChpMSA8PCAyKSA+PiAyXSB8IDA7CiAgIGlmICghaTIpIGJyZWFrOwogICBfcG9wX2FyZyhpNTEgKyAoaTEgPDwgMykgfCAwLCBpMiwgaTUwKTsKICAgaTEgPSBpMSArIDEgfCAwOwogICBpZiAoKGkxIHwgMCkgPj0gMTApIHsKICAgIGkxID0gMTsKICAgIGJyZWFrIEwzNDg7CiAgIH0KICB9CiAgaWYgKChpMSB8IDApIDwgMTApIHdoaWxlICgxKSB7CiAgIGlmIChIRUFQMzJbaTUyICsgKGkxIDw8IDIpID4+IDJdIHwgMCkgewogICAgaTEgPSAtMTsKICAgIGJyZWFrIEwzNDg7CiAgIH0KICAgaTEgPSBpMSArIDEgfCAwOwogICBpZiAoKGkxIHwgMCkgPj0gMTApIHsKICAgIGkxID0gMTsKICAgIGJyZWFrOwogICB9CiAgfSBlbHNlIGkxID0gMTsKIH0gZWxzZSBpMSA9IDA7IHdoaWxlICgwKTsKIFNUQUNLVE9QID0gaTUzOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjM4RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9teV9tb2R1bGVDMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIF9fWk4xMGVtc2NyaXB0ZW4xNXJlZ2lzdGVyX3ZlY3RvcklpRUVOU182Y2xhc3NfSU5TdDNfXzE2dmVjdG9ySVRfTlMyXzlhbGxvY2F0b3JJUzRfRUVFRU5TXzhpbnRlcm5hbDExTm9CYXNlQ2xhc3NFRUVQS2MoaTEgKyAzIHwgMCwgMjQ1MjApOwogX19aTjEwZW1zY3JpcHRlbjE1cmVnaXN0ZXJfdmVjdG9ySWRFRU5TXzZjbGFzc19JTlN0M19fMTZ2ZWN0b3JJVF9OUzJfOWFsbG9jYXRvcklTNF9FRUVFTlNfOGludGVybmFsMTFOb0Jhc2VDbGFzc0VFRVBLYyhpMSArIDIgfCAwLCAyNDUzMCk7CiBfX1pOMTBlbXNjcmlwdGVuMTVyZWdpc3Rlcl92ZWN0b3JJY0VFTlNfNmNsYXNzX0lOU3QzX18xNnZlY3RvcklUX05TMl85YWxsb2NhdG9ySVM0X0VFRUVOU184aW50ZXJuYWwxMU5vQmFzZUNsYXNzRUVFUEtjKGkxICsgMSB8IDAsIDI0NTQzKTsKIF9fWk4xMGVtc2NyaXB0ZW4xNXJlZ2lzdGVyX3ZlY3RvcklmRUVOU182Y2xhc3NfSU5TdDNfXzE2dmVjdG9ySVRfTlMyXzlhbGxvY2F0b3JJUzRfRUVFRU5TXzhpbnRlcm5hbDExTm9CYXNlQ2xhc3NFRUVQS2MoaTEsIDI0NTU0KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDEzNDk2LCAxMzUwNCwgMTM1MjAsIDAsIDI2MTI5LCAzLCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI0NTY2LCAyNjEzNCwgMjEwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDEzNDk2LCAxLCAyMDYxNiwgMjYxMjksIDQsIDEpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY2xhc3NfZnVuY3Rpb24oMTM0OTYsIDI0NTc4LCAyLCAyMDYyMCwgMjY3MjYsIDEsIDIxMSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jbGFzc19mdW5jdGlvbigxMzQ5NiwgMjQ1OTMsIDIsIDIwNjI4LCAyNjcyNiwgMiwgMjEyKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDEzNTM2LCAxMzU0NCwgMTM1NjAsIDAsIDI2MTI5LCA1LCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI0NjEwLCAyNjEzNCwgMjEzKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDEzNTM2LCAxLCAyMDYzNiwgMjYxMjksIDYsIDIpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY2xhc3NfZnVuY3Rpb24oMTM1MzYsIDM1NTE2LCA0LCAyMDY0MCwgMjYxNDIsIDQsIDEpOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNzsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfcHJvcGVydHkoMTM1MzYsIDI0NjIzLCAxNjExMiwgMjYxNDgsIDI5LCBpMiB8IDAsIDE2MTEyLCAyNjEzNywgMiwgaTMgfCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDg7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDQ7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDEzNTM2LCAyNDYzNCwgMTYxMTIsIDI2MTQ4LCAyOSwgaTMgfCAwLCAxNjExMiwgMjYxMzcsIDIsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA5OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA1OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxMzUzNiwgMjQ2NDMsIDE2MTEyLCAyNjE0OCwgMjksIGkyIHwgMCwgMTYxMTIsIDI2MTM3LCAyLCBpMyB8IDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTM1NzYsIDEzNTg0LCAxMzYwMCwgMCwgMjYxMjksIDEwLCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI0NjU0LCAyNjEzNCwgMjE0KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxMzYzMiwgMTM1NzYsIDI0NjYyLCAyLCAyNjEyOSwgMTEsIDI3MDQ0LCAzLCAyNjE0OCwgMzAsIDI2MTM0LCAyMTUpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTM1NzYsIDEsIDIwNjg0LCAyNjEyOSwgMTIsIDIxNik7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzU3NiwgMjQ2ODIsIDMsIDIwNzE2LCAyNzEwNiwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDI7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNTc2LCAyNDY5MSwgMywgMjA3MTYsIDI3MTA2LCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM1NzYsIDI0Njk5LCAzLCAyMDcxNiwgMjcxMDYsIDEsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzU3NiwgMjQ2OTksIDUsIDIwNzI4LCAyNzExMSwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDQ7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNTc2LCAyNDcwNiwgMywgMjA3MTYsIDI3MTA2LCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gNTsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM1NzYsIDI0NzEwLCAzLCAyMDcxNiwgMjcxMDYsIDEsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA2OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzU3NiwgMjQ3MTksIDMsIDIwNzE2LCAyNzEwNiwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDE7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNTc2LCAyNDcyNiwgNCwgMjA3NDgsIDI3MTE4LCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMjsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM1NzYsIDI0NzMyLCAyLCAyMDc2NCwgMjcxMjQsIDEsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzU3NiwgMjQ3MzgsIDMsIDIwNzE2LCAyNzEwNiwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDg7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNTc2LCAyNDc0NiwgMywgMjA3MTYsIDI3MTA2LCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gOTsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM1NzYsIDI0NzU1LCAzLCAyMDcxNiwgMjcxMDYsIDEsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAyOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzU3NiwgMjQ3NjAsIDQsIDIwNzQ4LCAyNzExOCwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDE7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNTc2LCAyNDc2NSwgMywgMjA3NzIsIDI2MzM3LCAxLCBpMyB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTM2NTYsIDEzNjY0LCAxMzY4MCwgMCwgMjYxMjksIDEzLCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI0Nzc2LCAyNjEzNCwgMjE3KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxMzcxMiwgMTM2NTYsIDI0Nzg5LCAyLCAyNjEyOSwgMTQsIDI3MDQ0LCA0LCAyNjE0OCwgMzEsIDI2MTM0LCAyMTgpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTM2NTYsIDEsIDIwODEyLCAyNjEyOSwgMTUsIDIxOSk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzY1NiwgMjQ4MTQsIDQsIDIwODQ0LCAyNzQ5NiwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDI7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNjU2LCAyNDgxOSwgNCwgMjA4NjAsIDI2MzQyLCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfcHJvcGVydHkoMTM2NTYsIDI0ODI3LCAxNjE1MiwgMjcxMjQsIDIsIGkzIHwgMCwgMTYxNTIsIDI2MzM3LCAzLCBpMiB8IDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTY7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDY7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDEzNjU2LCAyNDgzNywgMTYxMTIsIDI2MTQ4LCAzMiwgaTIgfCAwLCAxNjExMiwgMjYxMzcsIDMsIGkzIHwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxMzczNiwgMTM3NDQsIDEzNzYwLCAwLCAyNjEyOSwgMTcsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjQ4NDYsIDI2MTM0LCAyMjApOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDEzNzkyLCAxMzczNiwgMjQ4NjAsIDIsIDI2MTI5LCAxOCwgMjcwNDQsIDUsIDI2MTQ4LCAzMywgMjYxMzQsIDIyMSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxMzczNiwgMSwgMjA5MDQsIDI2MTI5LCAxOSwgMjIyKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDE7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNzM2LCAyNDg4NiwgNSwgMjA5MzYsIDI3ODc3LCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMTsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM3MzYsIDI0ODg2LCA2LCAyMDk1NiwgMjc4ODQsIDEsIGkzIHwgMCwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxMzgxNiwgMTM4MjQsIDEzODQwLCAwLCAyNjEyOSwgMjAsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjQ4ODksIDI2MTM0LCAyMjMpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDEzODcyLCAxMzgxNiwgMjQ5MDAsIDIsIDI2MTI5LCAyMSwgMjcwNDQsIDYsIDI2MTQ4LCAzNCwgMjYxMzQsIDIyNCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxMzgxNiwgMSwgMjEwMDgsIDI2MTI5LCAyMiwgMjI1KTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDI7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzODE2LCAyNDkyMywgNSwgMjEwNDAsIDI3MTExLCAyLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM4MTYsIDI0OTI5LCA1LCAyMTA0MCwgMjcxMTEsIDIsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA0OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzgxNiwgMjQ5MzUsIDUsIDIxMDQwLCAyNzExMSwgMiwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDM7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzODE2LCAyNDk0NCwgNCwgMjEwNjAsIDI3MTE4LCAyLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gNDsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM4MTYsIDI0OTUxLCA0LCAyMTA2MCwgMjcxMTgsIDIsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA0OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAzOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxMzgxNiwgMjQ5NTgsIDE2MTUyLCAyNzEyNCwgMywgaTMgfCAwLCAxNjE1MiwgMjYzMzcsIDQsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA1OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA0OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxMzgxNiwgMjQ5NjUsIDE2MTUyLCAyNzEyNCwgMywgaTIgfCAwLCAxNjE1MiwgMjYzMzcsIDQsIGkzIHwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxMzg5NiwgMTM5MDQsIDEzOTIwLCAwLCAyNjEyOSwgMjMsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjQ5NzUsIDI2MTM0LCAyMjYpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDEzOTUyLCAxMzg5NiwgMjQ5ODMsIDIsIDI2MTI5LCAyNCwgMjcwNDQsIDcsIDI2MTQ4LCAzNSwgMjYxMzQsIDIyNyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxMzg5NiwgMSwgMjExMDQsIDI2MTI5LCAyNSwgMjI4KTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDE7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzODk2LCAyNTAwMywgNSwgMjExMzYsIDI4NTcyLCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMTsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM4OTYsIDI1MDEwLCA2LCAyMTE1NiwgMjg1NzksIDEsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzg5NiwgMjUwMTUsIDcsIDIxMTgwLCAyODU4NywgMSwgaTMgfCAwLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDEzOTc2LCAxMzk4NCwgMTRlMywgMCwgMjYxMjksIDI2LCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI1MDI1LCAyNjEzNCwgMjI5KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxNDAzMiwgMTM5NzYsIDI1MDM2LCAyLCAyNjEyOSwgMjcsIDI3MDQ0LCA4LCAyNjE0OCwgMzYsIDI2MTM0LCAyMzApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTM5NzYsIDEsIDIxMjM2LCAyNjEyOSwgMjgsIDIzMSk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzk3NiwgMjUwNjcsIDQsIDIxMjY4LCAyODk3MSwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDU7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzOTc2LCAyNTA3MiwgMywgMjEyODQsIDI2MzM3LCA1LCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gNjsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM5NzYsIDI1MDgyLCAyLCAyMTI5NiwgMjcxMjQsIDQsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA2OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxMzk3NiwgMjUwODgsIDE2MTUyLCAyNzEyNCwgNSwgaTMgfCAwLCAxNjE1MiwgMjYzMzcsIDYsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA4OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxMzk3NiwgMjUwOTQsIDE2MTUyLCAyNzEyNCwgNSwgaTIgfCAwLCAxNjE1MiwgMjYzMzcsIDYsIGkzIHwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA2OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA4OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxMzk3NiwgMjUxMTAsIDE2MTUyLCAyNzEyNCwgNSwgaTMgfCAwLCAxNjE1MiwgMjYzMzcsIDYsIGkyIHwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxNDA1NiwgMTQwNjQsIDE0MDgwLCAwLCAyNjEyOSwgMjksIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjUxMTQsIDI2MTM0LCAyMzIpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE0MTEyLCAxNDA1NiwgMjUxMjUsIDIsIDI2MTI5LCAzMCwgMjcwNDQsIDksIDI2MTQ4LCAzNywgMjYxMzQsIDIzMyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxNDA1NiwgMSwgMjEzMzIsIDI2MTI5LCAzMSwgMjM0KTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIzNTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQwNTYsIDI1MTQ4LCAyLCAyMTM2NCwgMjY3MjYsIDcsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA4OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDA1NiwgMzYwMTUsIDMsIDIxMzcyLCAyNjEzNywgNCwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDU7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAzNjAxNSwgNCwgMjEzODQsIDI2MTQyLCA1LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMzI7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAyNTE1OCwgMiwgMjE0MDAsIDI2MTQ4LCAzOCwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDk7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAyNTE2NiwgMiwgMjE0MDgsIDI3MTI0LCA2LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAyNTE2NiwgMywgMjE0MTYsIDI3MTA2LCAyLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAzNjA3MSwgMiwgMjE0MDgsIDI3MTI0LCA2LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTE7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAzNjA3MSwgMywgMjE0MTYsIDI3MTA2LCAyLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQwNTYsIDM2MDcxLCA1LCAyMTQyOCwgMjcxMTEsIDMsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA2OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDA1NiwgMjUxNzUsIDUsIDIxNDI4LCAyNzExMSwgMywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIzNjsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQwNTYsIDI0ODE5LCAyLCAyMTM2NCwgMjY3MjYsIDcsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMzc7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MDU2LCAyNTE4MSwgMiwgMjEzNjQsIDI2NzI2LCA3LCBpMiB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTQxMzYsIDE0MTQ0LCAxNDE2MCwgMCwgMjYxMjksIDMzLCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI1MTg3LCAyNjEzNCwgMjM4KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxNDE5MiwgMTQxMzYsIDI1MTk1LCAyLCAyNjEyOSwgMzQsIDI3MDQ0LCAxMCwgMjYxNDgsIDM5LCAyNjEzNCwgMjM5KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE0MTM2LCAxLCAyMTQ3NiwgMjYxMjksIDM1LCAyNDApOwogaTIgPSBfX1pud2ooNCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MTM2LCAyNTIxNSwgNiwgMjE1MDgsIDI5NjU3LCAxLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooNCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MTM2LCAyNTIyMiwgNiwgMjE1MDgsIDI5NjU3LCAxLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooNCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMzsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MTM2LCAyNTIyOSwgNiwgMjE1MDgsIDI5NjU3LCAxLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooNCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MTM2LCAyNTIzNiwgNCwgMjE1MzIsIDI5NjY1LCA3LCBpMiB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTQyMTYsIDE0MjI0LCAxNDI0MCwgMCwgMjYxMjksIDM2LCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI1MjQyLCAyNjEzNCwgMjQxKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxNDI3MiwgMTQyMTYsIDI1MjUwLCAyLCAyNjEyOSwgMzcsIDI3MDQ0LCAxMSwgMjYxNDgsIDQwLCAyNjEzNCwgMjQyKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE0MjE2LCAxLCAyMTU3NiwgMjYxMjksIDM4LCAyNDMpOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQyMTYsIDI1MjcwLCA3LCAyMTYwOCwgMjk5OTcsIDEsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDIxNiwgMjUyNzUsIDcsIDIxNjM2LCAzMDAwNiwgMSwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDEyOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDIxNiwgMjUyODYsIDMsIDIxNjY0LCAyNzEwNiwgMywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDk7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MjE2LCAyNTI5NSwgMywgMjE2NzYsIDI2MzM3LCA3LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MjE2LCAyNTMwNSwgMywgMjE2NzYsIDI2MzM3LCA3LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTE7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MjE2LCAyNTMxNiwgMywgMjE2NzYsIDI2MzM3LCA3LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTI7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0MjE2LCAyNTMyOSwgMywgMjE2NzYsIDI2MzM3LCA3LCBpMiB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTQyOTYsIDE0MzA0LCAxNDMyMCwgMCwgMjYxMjksIDM5LCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI1MzM4LCAyNjEzNCwgMjQ0KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxNDM1MiwgMTQyOTYsIDI1MzQ2LCAyLCAyNjEyOSwgNDAsIDI3MDQ0LCAxMiwgMjYxNDgsIDQxLCAyNjEzNCwgMjQ1KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE0Mjk2LCAxLCAyMTcxNiwgMjYxMjksIDQxLCAyNDYpOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQyOTYsIDI1MzY2LCA3LCAyMTc0OCwgMzAzNDEsIDEsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAxOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDI5NiwgMjUzNjksIDksIDIxNzc2LCAzMDM1MCwgMSwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDE7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0Mjk2LCAyNTM2OSwgNCwgMjE4MTIsIDMwMzYxLCAxLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTM7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0Mjk2LCAyNTI5NSwgMywgMjE4MjgsIDI2MzM3LCA4LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTQ7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0Mjk2LCAyNTMwNSwgMywgMjE4MjgsIDI2MzM3LCA4LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTU7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0Mjk2LCAyNTM3NCwgMywgMjE4MjgsIDI2MzM3LCA4LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTY7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0Mjk2LCAyNTM4MywgMywgMjE4MjgsIDI2MzM3LCA4LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNDI7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDk7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE0Mjk2LCAyNDgxOSwgMTYxMTIsIDI2MTQ4LCA0MiwgaTIgfCAwLCAxNjExMiwgMjYxMzcsIDYsIGkzIHwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxNDM3NiwgMTQzODQsIDE0NDAwLCAwLCAyNjEyOSwgNDMsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjUzOTQsIDI2MTM0LCAyNDcpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE0NDMyLCAxNDM3NiwgMjU0MDIsIDIsIDI2MTI5LCA0NCwgMjcwNDQsIDEzLCAyNjE0OCwgNDMsIDI2MTM0LCAyNDgpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTQzNzYsIDEsIDIxODY4LCAyNjEyOSwgNDUsIDI0OSk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDM3NiwgMjU0MjIsIDMsIDIxOTAwLCAzMDY5MywgMiwgaTMgfCAwLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE0NDU2LCAxNDQ2NCwgMTQ0ODAsIDAsIDI2MTI5LCA0NiwgMjYxMzIsIDAsIDI2MTMyLCAwLCAyNTQyNywgMjYxMzQsIDI1MCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTQ1MTIsIDE0NDU2LCAyNTQ0MiwgMiwgMjYxMjksIDQ3LCAyNzA0NCwgMTQsIDI2MTQ4LCA0NCwgMjYxMzQsIDI1MSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxNDQ1NiwgMSwgMjE5NDAsIDI2MTI5LCA0OCwgMjUyKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDEzOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDQ1NiwgMjU0NjksIDMsIDIxOTcyLCAyNzEwNiwgNCwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDU7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0NDU2LCAyNTQ3OCwgNCwgMjE5ODQsIDI3MTE4LCAzLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gNjsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ0NTYsIDI1NDg3LCA0LCAyMTk4NCwgMjcxMTgsIDMsIGkzIHwgMCwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxNDUzNiwgMTQ1NDQsIDE0NTYwLCAwLCAyNjEyOSwgNDksIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjU1MDAsIDI2MTM0LCAyNTMpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE0NTkyLCAxNDUzNiwgMjU1MTIsIDIsIDI2MTI5LCA1MCwgMjcwNDQsIDE1LCAyNjE0OCwgNDUsIDI2MTM0LCAyNTQpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTQ1MzYsIDEsIDIyMDI4LCAyNjEyOSwgNTEsIDI1NSk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDUzNiwgMjU1MzYsIDcsIDIyMDYwLCAzMTQ0MSwgMSwgaTMgfCAwLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE0NjE2LCAxNDYyNCwgMTQ2NDAsIDAsIDI2MTI5LCA1MiwgMjYxMzIsIDAsIDI2MTMyLCAwLCAyNTU0MywgMjYxMzQsIDI1Nik7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTQ2NzIsIDE0NjE2LCAyNTU1NCwgMiwgMjYxMjksIDUzLCAyNzA0NCwgMTYsIDI2MTQ4LCA0NiwgMjYxMzQsIDI1Nyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxNDYxNiwgMSwgMjIxMTYsIDI2MTI5LCA1NCwgMjU4KTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDI7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0NjE2LCAyNTU3NywgNywgMjIxNDgsIDMxNDQxLCAyLCBpMyB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTQ2OTYsIDE0NzA0LCAxNDcyMCwgMCwgMjYxMjksIDU1LCAyNjEzMiwgMCwgMjYxMzIsIDAsIDI1NTg0LCAyNjEzNCwgMjU5KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxNDc1MiwgMTQ2OTYsIDI1NTk4LCAyLCAyNjEyOSwgNTYsIDI3MDQ0LCAxNywgMjYxNDgsIDQ3LCAyNjEzNCwgMjYwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE0Njk2LCAxLCAyMjIwNCwgMjYxMjksIDU3LCAyNjEpOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gNzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ2OTYsIDM2MDcxLCA0LCAyMjIzNiwgMjcxMTgsIDQsIGkzIHwgMCwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxNDc3NiwgMTQ3ODQsIDE0ODAwLCAwLCAyNjEyOSwgNTgsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjU2MjQsIDI2MTM0LCAyNjIpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE0ODMyLCAxNDc3NiwgMjU2MzIsIDIsIDI2MTI5LCA1OSwgMjcwNDQsIDE4LCAyNjE0OCwgNDgsIDI2MTM0LCAyNjMpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTQ3NzYsIDEsIDIyMjgwLCAyNjEyOSwgNjAsIDI2NCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDc3NiwgMjU2NTIsIDMsIDIyMzEyLCAzMjUwNSwgMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDI7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0Nzc2LCAyNTY2MiwgMywgMjIzMTIsIDMyNTA1LCAxLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ3NzYsIDM2MDcxLCA3LCAyMjMyNCwgMzAwMDYsIDIsIGkzIHwgMCwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxNDg1NiwgMTQ4NjQsIDE0ODgwLCAwLCAyNjEyOSwgNjEsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjU2NzUsIDI2MTM0LCAyNjUpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE0OTEyLCAxNDg1NiwgMjU2ODQsIDIsIDI2MTI5LCA2MiwgMjcwNDQsIDE5LCAyNjE0OCwgNDksIDI2MTM0LCAyNjYpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTQ4NTYsIDEsIDIyMzgwLCAyNjEyOSwgNjMsIDI2Nyk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxMTsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ4NTYsIDM2MDcxLCAyLCAyMjQxMiwgMjcxMjQsIDgsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxNzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ4NTYsIDI1NzA1LCAzLCAyMjQyMCwgMjYzMzcsIDksIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxODsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ4NTYsIDI1MzA1LCAzLCAyMjQyMCwgMjYzMzcsIDksIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAyNjg7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE0ODU2LCAyNDgxOSwgMiwgMjI0MzIsIDI2NzI2LCAxMCwgaTMgfCAwLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE0OTM2LCAxNDk0NCwgMTQ5NjAsIDAsIDI2MTI5LCA2NCwgMjYxMzIsIDAsIDI2MTMyLCAwLCAyNTcxNCwgMjYxMzQsIDI2OSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTQ5OTIsIDE0OTM2LCAyNTcyNCwgMiwgMjYxMjksIDY1LCAyNzA0NCwgMjAsIDI2MTQ4LCA1MCwgMjYxMzQsIDI3MCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxNDkzNiwgMSwgMjI0NjgsIDI2MTI5LCA2NiwgMjcxKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDEyOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDkzNiwgMzYwNzEsIDIsIDIyNTAwLCAyNzEyNCwgOSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDE5OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDkzNiwgMjU3MDUsIDMsIDIyNTA4LCAyNjMzNywgMTAsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAyMDsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTQ5MzYsIDI1MzA1LCAzLCAyMjUwOCwgMjYzMzcsIDEwLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMjcyOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNDkzNiwgMjQ4MTksIDIsIDIyNTIwLCAyNjcyNiwgMTEsIGkzIHwgMCwgMCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxNTAxNiwgMTUwMjQsIDE1MDQwLCAwLCAyNjEyOSwgNjcsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMjU3NDYsIDI2MTM0LCAyNzMpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE1MDcyLCAxNTAxNiwgMjU3NTUsIDIsIDI2MTI5LCA2OCwgMjcwNDQsIDIxLCAyNjE0OCwgNTEsIDI2MTM0LCAyNzQpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTUwMTYsIDEsIDIyNTU2LCAyNjEyOSwgNjksIDI3NSk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxMzsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUwMTYsIDM2MDcxLCAyLCAyMjU4OCwgMjcxMjQsIDEwLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMjE7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MDE2LCAyNTcwNSwgMywgMjI1OTYsIDI2MzM3LCAxMSwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDIyOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTAxNiwgMjUzMDUsIDMsIDIyNTk2LCAyNjMzNywgMTEsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAyNzY7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MDE2LCAyNDgxOSwgMiwgMjI2MDgsIDI2NzI2LCAxMiwgaTMgfCAwLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE1MDk2LCAxNTEwNCwgMTUxMjAsIDAsIDI2MTI5LCA3MCwgMjYxMzIsIDAsIDI2MTMyLCAwLCAyNTc3NiwgMjYxMzQsIDI3Nyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTUxNTIsIDE1MDk2LCAyNTc4NiwgMiwgMjYxMjksIDcxLCAyNzA0NCwgMjIsIDI2MTQ4LCA1MiwgMjYxMzQsIDI3OCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxNTA5NiwgMSwgMjI2NDQsIDI2MTI5LCA3MiwgMjc5KTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDI4MDsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUwOTYsIDI1ODA4LCAyLCAyMjY3NiwgMjY3MjYsIDEzLCBpMyB8IDAsIDApOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMjM7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MDk2LCAyNTgxNSwgMywgMjI2ODQsIDI2MzM3LCAxMiwgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDE0OwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTA5NiwgMjU4MjQsIDMsIDIyNjk2LCAyNjEzNywgNywgaTMgfCAwLCAwKTsKIGkzID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDczOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTA5NiwgMjU4NDAsIDIsIDIyNzA4LCAyNjE0OCwgNTMsIGkzIHwgMCwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3NDsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTU7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg0NywgMTYxMTIsIDI2MTQ4LCA1NCwgaTMgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA3NTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMTY7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg0NywgMTYxMTIsIDI2MTQ4LCA1NCwgaTIgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkzIHwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3NjsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTc7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg2MCwgMTYxMTIsIDI2MTQ4LCA1NCwgaTMgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAxNDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMTg7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg2OSwgMTYxNTIsIDI3MTI0LCAxMSwgaTIgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkzIHwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAxNTsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTk7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg3MywgMTYxNTIsIDI3MTI0LCAxMSwgaTMgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA3NzsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTMgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMjA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg3NywgMTYwNjQsIDI2MTQ4LCA1NSwgaTIgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkzIHwgMCk7CiBpMyA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSA3ODsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjE7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MDk2LCAyNTg4MiwgMTYxMTIsIDI2MTQ4LCA1NCwgaTMgfCAwLCAxNjExMiwgMjYxMzcsIDgsIGkyIHwgMCk7CiBTVEFDS1RPUCA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfZnJlZShpMTUpIHsKIGkxNSA9IGkxNSB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEyID0gMCwgaTEzID0gMCwgaTE0ID0gMCwgaTE2ID0gMCwgaTE3ID0gMCwgaTE4ID0gMCwgaTE5ID0gMCwgaTIwID0gMDsKIGlmICghaTE1KSByZXR1cm47CiBpMSA9IGkxNSArIC04IHwgMDsKIGk3ID0gSEVBUDMyWzYwMTBdIHwgMDsKIGlmIChpMSA+Pj4gMCA8IGk3ID4+PiAwKSBfYWJvcnQoKTsKIGkyID0gSEVBUDMyW2kxNSArIC00ID4+IDJdIHwgMDsKIGkzID0gaTIgJiAzOwogaWYgKChpMyB8IDApID09IDEpIF9hYm9ydCgpOwogaTEzID0gaTIgJiAtODsKIGkxNiA9IGkxNSArIChpMTMgKyAtOCkgfCAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkxID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICBpZiAoIWkzKSByZXR1cm47CiAgaTggPSAtOCAtIGkxIHwgMDsKICBpMTAgPSBpMTUgKyBpOCB8IDA7CiAgaTExID0gaTEgKyBpMTMgfCAwOwogIGlmIChpMTAgPj4+IDAgPCBpNyA+Pj4gMCkgX2Fib3J0KCk7CiAgaWYgKChpMTAgfCAwKSA9PSAoSEVBUDMyWzYwMTFdIHwgMCkpIHsKICAgaTEgPSBpMTUgKyAoaTEzICsgLTQpIHwgMDsKICAgaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogICBpZiAoKGkyICYgMyB8IDApICE9IDMpIHsKICAgIGkyMCA9IGkxMDsKICAgIGk1ID0gaTExOwogICAgYnJlYWs7CiAgIH0KICAgSEVBUDMyWzYwMDhdID0gaTExOwogICBIRUFQMzJbaTEgPj4gMl0gPSBpMiAmIC0yOwogICBIRUFQMzJbaTE1ICsgKGk4ICsgNCkgPj4gMl0gPSBpMTEgfCAxOwogICBIRUFQMzJbaTE2ID4+IDJdID0gaTExOwogICByZXR1cm47CiAgfQogIGk0ID0gaTEgPj4+IDM7CiAgaWYgKGkxID4+PiAwIDwgMjU2KSB7CiAgIGkzID0gSEVBUDMyW2kxNSArIChpOCArIDgpID4+IDJdIHwgMDsKICAgaTIgPSBIRUFQMzJbaTE1ICsgKGk4ICsgMTIpID4+IDJdIHwgMDsKICAgaTEgPSAyNDA2NCArIChpNCA8PCAxIDw8IDIpIHwgMDsKICAgaWYgKChpMyB8IDApICE9IChpMSB8IDApKSB7CiAgICBpZiAoaTMgPj4+IDAgPCBpNyA+Pj4gMCkgX2Fib3J0KCk7CiAgICBpZiAoKEhFQVAzMltpMyArIDEyID4+IDJdIHwgMCkgIT0gKGkxMCB8IDApKSBfYWJvcnQoKTsKICAgfQogICBpZiAoKGkyIHwgMCkgPT0gKGkzIHwgMCkpIHsKICAgIEhFQVAzMls2MDA2XSA9IEhFQVAzMls2MDA2XSAmIH4oMSA8PCBpNCk7CiAgICBpMjAgPSBpMTA7CiAgICBpNSA9IGkxMTsKICAgIGJyZWFrOwogICB9CiAgIGlmICgoaTIgfCAwKSAhPSAoaTEgfCAwKSkgewogICAgaWYgKGkyID4+PiAwIDwgaTcgPj4+IDApIF9hYm9ydCgpOwogICAgaTEgPSBpMiArIDggfCAwOwogICAgaWYgKChIRUFQMzJbaTEgPj4gMl0gfCAwKSA9PSAoaTEwIHwgMCkpIGk2ID0gaTE7IGVsc2UgX2Fib3J0KCk7CiAgIH0gZWxzZSBpNiA9IGkyICsgOCB8IDA7CiAgIEhFQVAzMltpMyArIDEyID4+IDJdID0gaTI7CiAgIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogICBpMjAgPSBpMTA7CiAgIGk1ID0gaTExOwogICBicmVhazsKICB9CiAgaTYgPSBIRUFQMzJbaTE1ICsgKGk4ICsgMjQpID4+IDJdIHwgMDsKICBpMyA9IEhFQVAzMltpMTUgKyAoaTggKyAxMikgPj4gMl0gfCAwOwogIGRvIGlmICgoaTMgfCAwKSA9PSAoaTEwIHwgMCkpIHsKICAgaTIgPSBpMTUgKyAoaTggKyAyMCkgfCAwOwogICBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgIGlmICghaTEpIHsKICAgIGkyID0gaTE1ICsgKGk4ICsgMTYpIHwgMDsKICAgIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgIGlmICghaTEpIHsKICAgICBpOSA9IDA7CiAgICAgYnJlYWs7CiAgICB9CiAgIH0KICAgd2hpbGUgKDEpIHsKICAgIGkzID0gaTEgKyAyMCB8IDA7CiAgICBpNCA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiAgICBpZiAoaTQpIHsKICAgICBpMSA9IGk0OwogICAgIGkyID0gaTM7CiAgICAgY29udGludWU7CiAgICB9CiAgICBpMyA9IGkxICsgMTYgfCAwOwogICAgaTQgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogICAgaWYgKCFpNCkgYnJlYWs7IGVsc2UgewogICAgIGkxID0gaTQ7CiAgICAgaTIgPSBpMzsKICAgIH0KICAgfQogICBpZiAoaTIgPj4+IDAgPCBpNyA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgSEVBUDMyW2kyID4+IDJdID0gMDsKICAgIGk5ID0gaTE7CiAgICBicmVhazsKICAgfQogIH0gZWxzZSB7CiAgIGk0ID0gSEVBUDMyW2kxNSArIChpOCArIDgpID4+IDJdIHwgMDsKICAgaWYgKGk0ID4+PiAwIDwgaTcgPj4+IDApIF9hYm9ydCgpOwogICBpMSA9IGk0ICsgMTIgfCAwOwogICBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApICE9IChpMTAgfCAwKSkgX2Fib3J0KCk7CiAgIGkyID0gaTMgKyA4IHwgMDsKICAgaWYgKChIRUFQMzJbaTIgPj4gMl0gfCAwKSA9PSAoaTEwIHwgMCkpIHsKICAgIEhFQVAzMltpMSA+PiAyXSA9IGkzOwogICAgSEVBUDMyW2kyID4+IDJdID0gaTQ7CiAgICBpOSA9IGkzOwogICAgYnJlYWs7CiAgIH0gZWxzZSBfYWJvcnQoKTsKICB9IHdoaWxlICgwKTsKICBpZiAoaTYpIHsKICAgaTEgPSBIRUFQMzJbaTE1ICsgKGk4ICsgMjgpID4+IDJdIHwgMDsKICAgaTIgPSAyNDMyOCArIChpMSA8PCAyKSB8IDA7CiAgIGlmICgoaTEwIHwgMCkgPT0gKEhFQVAzMltpMiA+PiAyXSB8IDApKSB7CiAgICBIRUFQMzJbaTIgPj4gMl0gPSBpOTsKICAgIGlmICghaTkpIHsKICAgICBIRUFQMzJbNjAwN10gPSBIRUFQMzJbNjAwN10gJiB+KDEgPDwgaTEpOwogICAgIGkyMCA9IGkxMDsKICAgICBpNSA9IGkxMTsKICAgICBicmVhazsKICAgIH0KICAgfSBlbHNlIHsKICAgIGlmIChpNiA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7CiAgICBpMSA9IGk2ICsgMTYgfCAwOwogICAgaWYgKChIRUFQMzJbaTEgPj4gMl0gfCAwKSA9PSAoaTEwIHwgMCkpIEhFQVAzMltpMSA+PiAyXSA9IGk5OyBlbHNlIEhFQVAzMltpNiArIDIwID4+IDJdID0gaTk7CiAgICBpZiAoIWk5KSB7CiAgICAgaTIwID0gaTEwOwogICAgIGk1ID0gaTExOwogICAgIGJyZWFrOwogICAgfQogICB9CiAgIGkyID0gSEVBUDMyWzYwMTBdIHwgMDsKICAgaWYgKGk5ID4+PiAwIDwgaTIgPj4+IDApIF9hYm9ydCgpOwogICBIRUFQMzJbaTkgKyAyNCA+PiAyXSA9IGk2OwogICBpMSA9IEhFQVAzMltpMTUgKyAoaTggKyAxNikgPj4gMl0gfCAwOwogICBkbyBpZiAoaTEpIGlmIChpMSA+Pj4gMCA8IGkyID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICBIRUFQMzJbaTkgKyAxNiA+PiAyXSA9IGkxOwogICAgSEVBUDMyW2kxICsgMjQgPj4gMl0gPSBpOTsKICAgIGJyZWFrOwogICB9IHdoaWxlICgwKTsKICAgaTEgPSBIRUFQMzJbaTE1ICsgKGk4ICsgMjApID4+IDJdIHwgMDsKICAgaWYgKGkxKSBpZiAoaTEgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgIEhFQVAzMltpOSArIDIwID4+IDJdID0gaTE7CiAgICBIRUFQMzJbaTEgKyAyNCA+PiAyXSA9IGk5OwogICAgaTIwID0gaTEwOwogICAgaTUgPSBpMTE7CiAgICBicmVhazsKICAgfSBlbHNlIHsKICAgIGkyMCA9IGkxMDsKICAgIGk1ID0gaTExOwogICB9CiAgfSBlbHNlIHsKICAgaTIwID0gaTEwOwogICBpNSA9IGkxMTsKICB9CiB9IGVsc2UgewogIGkyMCA9IGkxOwogIGk1ID0gaTEzOwogfSB3aGlsZSAoMCk7CiBpZiAoaTIwID4+PiAwID49IGkxNiA+Pj4gMCkgX2Fib3J0KCk7CiBpMSA9IGkxNSArIChpMTMgKyAtNCkgfCAwOwogaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaWYgKCEoaTIgJiAxKSkgX2Fib3J0KCk7CiBpZiAoIShpMiAmIDIpKSB7CiAgaWYgKChpMTYgfCAwKSA9PSAoSEVBUDMyWzYwMTJdIHwgMCkpIHsKICAgaTE5ID0gKEhFQVAzMls2MDA5XSB8IDApICsgaTUgfCAwOwogICBIRUFQMzJbNjAwOV0gPSBpMTk7CiAgIEhFQVAzMls2MDEyXSA9IGkyMDsKICAgSEVBUDMyW2kyMCArIDQgPj4gMl0gPSBpMTkgfCAxOwogICBpZiAoKGkyMCB8IDApICE9IChIRUFQMzJbNjAxMV0gfCAwKSkgcmV0dXJuOwogICBIRUFQMzJbNjAxMV0gPSAwOwogICBIRUFQMzJbNjAwOF0gPSAwOwogICByZXR1cm47CiAgfQogIGlmICgoaTE2IHwgMCkgPT0gKEhFQVAzMls2MDExXSB8IDApKSB7CiAgIGkxOSA9IChIRUFQMzJbNjAwOF0gfCAwKSArIGk1IHwgMDsKICAgSEVBUDMyWzYwMDhdID0gaTE5OwogICBIRUFQMzJbNjAxMV0gPSBpMjA7CiAgIEhFQVAzMltpMjAgKyA0ID4+IDJdID0gaTE5IHwgMTsKICAgSEVBUDMyW2kyMCArIGkxOSA+PiAyXSA9IGkxOTsKICAgcmV0dXJuOwogIH0KICBpNSA9IChpMiAmIC04KSArIGk1IHwgMDsKICBpNCA9IGkyID4+PiAzOwogIGRvIGlmIChpMiA+Pj4gMCA+PSAyNTYpIHsKICAgaTYgPSBIRUFQMzJbaTE1ICsgKGkxMyArIDE2KSA+PiAyXSB8IDA7CiAgIGkxID0gSEVBUDMyW2kxNSArIChpMTMgfCA0KSA+PiAyXSB8IDA7CiAgIGRvIGlmICgoaTEgfCAwKSA9PSAoaTE2IHwgMCkpIHsKICAgIGkyID0gaTE1ICsgKGkxMyArIDEyKSB8IDA7CiAgICBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgICBpZiAoIWkxKSB7CiAgICAgaTIgPSBpMTUgKyAoaTEzICsgOCkgfCAwOwogICAgIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgICBpZiAoIWkxKSB7CiAgICAgIGkxNCA9IDA7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIH0KICAgIHdoaWxlICgxKSB7CiAgICAgaTMgPSBpMSArIDIwIHwgMDsKICAgICBpNCA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiAgICAgaWYgKGk0KSB7CiAgICAgIGkxID0gaTQ7CiAgICAgIGkyID0gaTM7CiAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBpMyA9IGkxICsgMTYgfCAwOwogICAgIGk0ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICAgICBpZiAoIWk0KSBicmVhazsgZWxzZSB7CiAgICAgIGkxID0gaTQ7CiAgICAgIGkyID0gaTM7CiAgICAgfQogICAgfQogICAgaWYgKGkyID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICAgSEVBUDMyW2kyID4+IDJdID0gMDsKICAgICBpMTQgPSBpMTsKICAgICBicmVhazsKICAgIH0KICAgfSBlbHNlIHsKICAgIGkyID0gSEVBUDMyW2kxNSArIGkxMyA+PiAyXSB8IDA7CiAgICBpZiAoaTIgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOwogICAgaTMgPSBpMiArIDEyIHwgMDsKICAgIGlmICgoSEVBUDMyW2kzID4+IDJdIHwgMCkgIT0gKGkxNiB8IDApKSBfYWJvcnQoKTsKICAgIGk0ID0gaTEgKyA4IHwgMDsKICAgIGlmICgoSEVBUDMyW2k0ID4+IDJdIHwgMCkgPT0gKGkxNiB8IDApKSB7CiAgICAgSEVBUDMyW2kzID4+IDJdID0gaTE7CiAgICAgSEVBUDMyW2k0ID4+IDJdID0gaTI7CiAgICAgaTE0ID0gaTE7CiAgICAgYnJlYWs7CiAgICB9IGVsc2UgX2Fib3J0KCk7CiAgIH0gd2hpbGUgKDApOwogICBpZiAoaTYpIHsKICAgIGkxID0gSEVBUDMyW2kxNSArIChpMTMgKyAyMCkgPj4gMl0gfCAwOwogICAgaTIgPSAyNDMyOCArIChpMSA8PCAyKSB8IDA7CiAgICBpZiAoKGkxNiB8IDApID09IChIRUFQMzJbaTIgPj4gMl0gfCAwKSkgewogICAgIEhFQVAzMltpMiA+PiAyXSA9IGkxNDsKICAgICBpZiAoIWkxNCkgewogICAgICBIRUFQMzJbNjAwN10gPSBIRUFQMzJbNjAwN10gJiB+KDEgPDwgaTEpOwogICAgICBicmVhazsKICAgICB9CiAgICB9IGVsc2UgewogICAgIGlmIChpNiA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7CiAgICAgaTEgPSBpNiArIDE2IHwgMDsKICAgICBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApID09IChpMTYgfCAwKSkgSEVBUDMyW2kxID4+IDJdID0gaTE0OyBlbHNlIEhFQVAzMltpNiArIDIwID4+IDJdID0gaTE0OwogICAgIGlmICghaTE0KSBicmVhazsKICAgIH0KICAgIGkyID0gSEVBUDMyWzYwMTBdIHwgMDsKICAgIGlmIChpMTQgPj4+IDAgPCBpMiA+Pj4gMCkgX2Fib3J0KCk7CiAgICBIRUFQMzJbaTE0ICsgMjQgPj4gMl0gPSBpNjsKICAgIGkxID0gSEVBUDMyW2kxNSArIChpMTMgKyA4KSA+PiAyXSB8IDA7CiAgICBkbyBpZiAoaTEpIGlmIChpMSA+Pj4gMCA8IGkyID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICAgSEVBUDMyW2kxNCArIDE2ID4+IDJdID0gaTE7CiAgICAgSEVBUDMyW2kxICsgMjQgPj4gMl0gPSBpMTQ7CiAgICAgYnJlYWs7CiAgICB9IHdoaWxlICgwKTsKICAgIGkxID0gSEVBUDMyW2kxNSArIChpMTMgKyAxMikgPj4gMl0gfCAwOwogICAgaWYgKGkxKSBpZiAoaTEgPj4+IDAgPCAoSEVBUDMyWzYwMTBdIHwgMCkgPj4+IDApIF9hYm9ydCgpOyBlbHNlIHsKICAgICBIRUFQMzJbaTE0ICsgMjAgPj4gMl0gPSBpMTsKICAgICBIRUFQMzJbaTEgKyAyNCA+PiAyXSA9IGkxNDsKICAgICBicmVhazsKICAgIH0KICAgfQogIH0gZWxzZSB7CiAgIGkzID0gSEVBUDMyW2kxNSArIGkxMyA+PiAyXSB8IDA7CiAgIGkyID0gSEVBUDMyW2kxNSArIChpMTMgfCA0KSA+PiAyXSB8IDA7CiAgIGkxID0gMjQwNjQgKyAoaTQgPDwgMSA8PCAyKSB8IDA7CiAgIGlmICgoaTMgfCAwKSAhPSAoaTEgfCAwKSkgewogICAgaWYgKGkzID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsKICAgIGlmICgoSEVBUDMyW2kzICsgMTIgPj4gMl0gfCAwKSAhPSAoaTE2IHwgMCkpIF9hYm9ydCgpOwogICB9CiAgIGlmICgoaTIgfCAwKSA9PSAoaTMgfCAwKSkgewogICAgSEVBUDMyWzYwMDZdID0gSEVBUDMyWzYwMDZdICYgfigxIDw8IGk0KTsKICAgIGJyZWFrOwogICB9CiAgIGlmICgoaTIgfCAwKSAhPSAoaTEgfCAwKSkgewogICAgaWYgKGkyID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsKICAgIGkxID0gaTIgKyA4IHwgMDsKICAgIGlmICgoSEVBUDMyW2kxID4+IDJdIHwgMCkgPT0gKGkxNiB8IDApKSBpMTIgPSBpMTsgZWxzZSBfYWJvcnQoKTsKICAgfSBlbHNlIGkxMiA9IGkyICsgOCB8IDA7CiAgIEhFQVAzMltpMyArIDEyID4+IDJdID0gaTI7CiAgIEhFQVAzMltpMTIgPj4gMl0gPSBpMzsKICB9IHdoaWxlICgwKTsKICBIRUFQMzJbaTIwICsgNCA+PiAyXSA9IGk1IHwgMTsKICBIRUFQMzJbaTIwICsgaTUgPj4gMl0gPSBpNTsKICBpZiAoKGkyMCB8IDApID09IChIRUFQMzJbNjAxMV0gfCAwKSkgewogICBIRUFQMzJbNjAwOF0gPSBpNTsKICAgcmV0dXJuOwogIH0KIH0gZWxzZSB7CiAgSEVBUDMyW2kxID4+IDJdID0gaTIgJiAtMjsKICBIRUFQMzJbaTIwICsgNCA+PiAyXSA9IGk1IHwgMTsKICBIRUFQMzJbaTIwICsgaTUgPj4gMl0gPSBpNTsKIH0KIGkxID0gaTUgPj4+IDM7CiBpZiAoaTUgPj4+IDAgPCAyNTYpIHsKICBpMiA9IGkxIDw8IDE7CiAgaTQgPSAyNDA2NCArIChpMiA8PCAyKSB8IDA7CiAgaTMgPSBIRUFQMzJbNjAwNl0gfCAwOwogIGkxID0gMSA8PCBpMTsKICBpZiAoaTMgJiBpMSkgewogICBpMSA9IDI0MDY0ICsgKGkyICsgMiA8PCAyKSB8IDA7CiAgIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgaWYgKGkyID4+PiAwIDwgKEhFQVAzMls2MDEwXSB8IDApID4+PiAwKSBfYWJvcnQoKTsgZWxzZSB7CiAgICBpMTcgPSBpMTsKICAgIGkxOCA9IGkyOwogICB9CiAgfSBlbHNlIHsKICAgSEVBUDMyWzYwMDZdID0gaTMgfCBpMTsKICAgaTE3ID0gMjQwNjQgKyAoaTIgKyAyIDw8IDIpIHwgMDsKICAgaTE4ID0gaTQ7CiAgfQogIEhFQVAzMltpMTcgPj4gMl0gPSBpMjA7CiAgSEVBUDMyW2kxOCArIDEyID4+IDJdID0gaTIwOwogIEhFQVAzMltpMjAgKyA4ID4+IDJdID0gaTE4OwogIEhFQVAzMltpMjAgKyAxMiA+PiAyXSA9IGk0OwogIHJldHVybjsKIH0KIGkxID0gaTUgPj4+IDg7CiBpZiAoaTEpIGlmIChpNSA+Pj4gMCA+IDE2Nzc3MjE1KSBpNCA9IDMxOyBlbHNlIHsKICBpMTcgPSAoaTEgKyAxMDQ4MzIwIHwgMCkgPj4+IDE2ICYgODsKICBpMTggPSBpMSA8PCBpMTc7CiAgaTE2ID0gKGkxOCArIDUyMDE5MiB8IDApID4+PiAxNiAmIDQ7CiAgaTE4ID0gaTE4IDw8IGkxNjsKICBpNCA9IChpMTggKyAyNDU3NjAgfCAwKSA+Pj4gMTYgJiAyOwogIGk0ID0gMTQgLSAoaTE2IHwgaTE3IHwgaTQpICsgKGkxOCA8PCBpNCA+Pj4gMTUpIHwgMDsKICBpNCA9IGk1ID4+PiAoaTQgKyA3IHwgMCkgJiAxIHwgaTQgPDwgMTsKIH0gZWxzZSBpNCA9IDA7CiBpMSA9IDI0MzI4ICsgKGk0IDw8IDIpIHwgMDsKIEhFQVAzMltpMjAgKyAyOCA+PiAyXSA9IGk0OwogSEVBUDMyW2kyMCArIDIwID4+IDJdID0gMDsKIEhFQVAzMltpMjAgKyAxNiA+PiAyXSA9IDA7CiBpMiA9IEhFQVAzMls2MDA3XSB8IDA7CiBpMyA9IDEgPDwgaTQ7CiBMMTk5IDogZG8gaWYgKGkyICYgaTMpIHsKICBpMSA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiAgTDIwMiA6IGRvIGlmICgoSEVBUDMyW2kxICsgNCA+PiAyXSAmIC04IHwgMCkgIT0gKGk1IHwgMCkpIHsKICAgaTQgPSBpNSA8PCAoKGk0IHwgMCkgPT0gMzEgPyAwIDogMjUgLSAoaTQgPj4+IDEpIHwgMCk7CiAgIHdoaWxlICgxKSB7CiAgICBpMiA9IGkxICsgMTYgKyAoaTQgPj4+IDMxIDw8IDIpIHwgMDsKICAgIGkzID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgIGlmICghaTMpIGJyZWFrOwogICAgaWYgKChIRUFQMzJbaTMgKyA0ID4+IDJdICYgLTggfCAwKSA9PSAoaTUgfCAwKSkgewogICAgIGkxOSA9IGkzOwogICAgIGJyZWFrIEwyMDI7CiAgICB9IGVsc2UgewogICAgIGk0ID0gaTQgPDwgMTsKICAgICBpMSA9IGkzOwogICAgfQogICB9CiAgIGlmIChpMiA+Pj4gMCA8IChIRUFQMzJbNjAxMF0gfCAwKSA+Pj4gMCkgX2Fib3J0KCk7IGVsc2UgewogICAgSEVBUDMyW2kyID4+IDJdID0gaTIwOwogICAgSEVBUDMyW2kyMCArIDI0ID4+IDJdID0gaTE7CiAgICBIRUFQMzJbaTIwICsgMTIgPj4gMl0gPSBpMjA7CiAgICBIRUFQMzJbaTIwICsgOCA+PiAyXSA9IGkyMDsKICAgIGJyZWFrIEwxOTk7CiAgIH0KICB9IGVsc2UgaTE5ID0gaTE7IHdoaWxlICgwKTsKICBpMSA9IGkxOSArIDggfCAwOwogIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICBpMTggPSBIRUFQMzJbNjAxMF0gfCAwOwogIGlmIChpMiA+Pj4gMCA+PSBpMTggPj4+IDAgJiBpMTkgPj4+IDAgPj0gaTE4ID4+PiAwKSB7CiAgIEhFQVAzMltpMiArIDEyID4+IDJdID0gaTIwOwogICBIRUFQMzJbaTEgPj4gMl0gPSBpMjA7CiAgIEhFQVAzMltpMjAgKyA4ID4+IDJdID0gaTI7CiAgIEhFQVAzMltpMjAgKyAxMiA+PiAyXSA9IGkxOTsKICAgSEVBUDMyW2kyMCArIDI0ID4+IDJdID0gMDsKICAgYnJlYWs7CiAgfSBlbHNlIF9hYm9ydCgpOwogfSBlbHNlIHsKICBIRUFQMzJbNjAwN10gPSBpMiB8IGkzOwogIEhFQVAzMltpMSA+PiAyXSA9IGkyMDsKICBIRUFQMzJbaTIwICsgMjQgPj4gMl0gPSBpMTsKICBIRUFQMzJbaTIwICsgMTIgPj4gMl0gPSBpMjA7CiAgSEVBUDMyW2kyMCArIDggPj4gMl0gPSBpMjA7CiB9IHdoaWxlICgwKTsKIGkyMCA9IChIRUFQMzJbNjAxNF0gfCAwKSArIC0xIHwgMDsKIEhFQVAzMls2MDE0XSA9IGkyMDsKIGlmICghaTIwKSBpMSA9IDI0NDgwOyBlbHNlIHJldHVybjsKIHdoaWxlICgxKSB7CiAgaTEgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogIGlmICghaTEpIGJyZWFrOyBlbHNlIGkxID0gaTEgKyA4IHwgMDsKIH0KIEhFQVAzMls2MDE0XSA9IC0xOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pONDZFbXNjcmlwdGVuQmluZGluZ0luaXRpYWxpemVyX215X21vZHVsZV9tYXhpRkZUQzJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTUxNzYsIDE1MTg0LCAxNTIwMCwgMCwgMjYxMjksIDkyLCAyNjEzMiwgMCwgMjYxMzIsIDAsIDMzODgyLCAyNjEzNCwgMjg3KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX3NtYXJ0X3B0cigxNTIxNiwgMTUxNzYsIDMzODkwLCAyLCAyNjEyOSwgOTMsIDI3MDQ0LCAyNywgMjYxNDgsIDY1LCAyNjEzNCwgMjg4KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE1MTc2LCAxLCAyMjcyMCwgMjYxMjksIDk0LCAyODkpOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMjg7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MTc2LCAzNTUxNiwgNSwgMjI3MjQsIDMzOTEwLCA0LCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUxNzYsIDMzOTE3LCAzLCAyMjc0NCwgMzM5MjUsIDIsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAxNjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUxNzYsIDMzOTMwLCAyLCAyMjc1NiwgMzM5MzksIDEyLCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMTc7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MTc2LCAzMzk0MywgMiwgMjI3NTYsIDMzOTM5LCAxMiwgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDE4OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTE3NiwgMzM5NjAsIDIsIDIyNzU2LCAzMzkzOSwgMTIsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAxMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUxNzYsIDMzOTc3LCAzLCAyMjc2NCwgMzM5OTAsIDMsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAxNDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUxNzYsIDMzOTk1LCAzLCAyMjc2NCwgMzM5OTAsIDMsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAxNTsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUxNzYsIDM0MDEwLCAzLCAyMjc2NCwgMzM5OTAsIDMsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSA5NTsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNDY7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MTc2LCAzNDAxOSwgMTYxMTIsIDI2MTQ4LCA2NiwgaTEgfCAwLCAxNjExMiwgMjYxMzcsIDE1LCBpMiB8IDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gOTY7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDQ3OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxNTE3NiwgMzQwMzAsIDE2MTEyLCAyNjE0OCwgNjYsIGkyIHwgMCwgMTYxMTIsIDI2MTM3LCAxNSwgaTEgfCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDk3OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA0ODsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfcHJvcGVydHkoMTUxNzYsIDM0MDM4LCAxNjExMiwgMjYxNDgsIDY2LCBpMSB8IDAsIDE2MTEyLCAyNjEzNywgMTUsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA0OTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gNTA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MTc2LCAzNDA0MywgMTM0NDAsIDI2MTQ4LCA2NywgaTIgfCAwLCAxMzQ0MCwgMjYxMzcsIDE2LCBpMSB8IDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gNTE7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDUyOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxNTE3NiwgMzQwNTQsIDEzNDQwLCAyNjE0OCwgNjcsIGkxIHwgMCwgMTM0NDAsIDI2MTM3LCAxNiwgaTIgfCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE1MjI0LCAxNTIzMiwgMTUyNDgsIDAsIDI2MTI5LCA5OCwgMjYxMzIsIDAsIDI2MTMyLCAwLCAzNDA2MSwgMjYxMzQsIDI5MCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTUyNjQsIDE1MjI0LCAzNDA3MCwgMiwgMjYxMjksIDk5LCAyNzA0NCwgMjgsIDI2MTQ4LCA2OCwgMjYxMzQsIDI5MSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxNTIyNCwgMSwgMjI3NzYsIDI2MTI5LCAxMDAsIDI5Mik7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyOTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTUyMjQsIDM1NTE2LCA1LCAyMjc4MCwgMzM5MTAsIDUsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA0OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTIyNCwgMzM5MTcsIDQsIDIyODAwLCAzNDA5MSwgMiwgaTIgfCAwLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE1MjcyLCAxNTI4MCwgMTUyOTYsIDAsIDI2MTI5LCAxMDEsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMzQwOTcsIDI2MTM0LCAyOTMpOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE1MzEyLCAxNTI3MiwgMzQxMTksIDIsIDI2MTI5LCAxMDIsIDI3MDQ0LCAyOSwgMjYxNDgsIDY5LCAyNjEzNCwgMjk0KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE1MjcyLCAxLCAyMjgxNiwgMjYxMjksIDEwMywgMjk1KTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDE7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MjcyLCAzNTUxNiwgNSwgMjI4MjAsIDM0MTUzLCAxLCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNTM7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MjcyLCAzNDE2MCwgMywgMjI4NDAsIDI2MTM3LCAxNywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDEwNDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gNTQ7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MjcyLCAzNDE3MCwgMTYxMTIsIDI2MTQ4LCA3MCwgaTIgfCAwLCAxNjExMiwgMjYxMzcsIDE4LCBpMSB8IDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMTA1OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA1NTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfcHJvcGVydHkoMTUyNzIsIDM0MTgzLCAxNjExMiwgMjYxNDgsIDcwLCBpMSB8IDAsIDE2MTEyLCAyNjEzNywgMTgsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAxMDY7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDU2OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxNTI3MiwgMzQxOTMsIDE2MTEyLCAyNjE0OCwgNzAsIGkyIHwgMCwgMTYxMTIsIDI2MTM3LCAxOCwgaTEgfCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDEwNzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNTc7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MjcyLCAzNDIwMywgMTYxMTIsIDI2MTQ4LCA3MCwgaTEgfCAwLCAxNjExMiwgMjYxMzcsIDE4LCBpMiB8IDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTk7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDI0OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxNTI3MiwgMzQyMjIsIDE2MTQ0LCAzMzkzOSwgMTYsIGkyIHwgMCwgMTYxNDQsIDI2NjY0LCAxNSwgaTEgfCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyNTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfcHJvcGVydHkoMTUyNzIsIDM0MjQ0LCAxNjE0NCwgMzM5MzksIDE2LCBpMSB8IDAsIDE2MTQ0LCAyNjY2NCwgMTUsIGkyIHwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMjY7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MjcyLCAzNDI2NSwgMTYxNDQsIDMzOTM5LCAxNiwgaTIgfCAwLCAxNjE0NCwgMjY2NjQsIDE1LCBpMSB8IDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMTc7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MjcyLCAzNDI5MSwgMywgMjI4NTIsIDMzOTkwLCA1LCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMTg7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MjcyLCAzNDMwMiwgMywgMjI4NTIsIDMzOTkwLCA1LCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gNzE7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1MjcyLCAzNDMxMCwgMywgMjI4NjQsIDI2MTcxLCAxNSwgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDEwODsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNTg7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MjcyLCAzNDMyNiwgMTYxMTIsIDI2MTQ4LCA3MCwgaTEgfCAwLCAxNjExMiwgMjYxMzcsIDE4LCBpMiB8IDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjI7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDI3OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxNTI3MiwgMzQzMzksIDE2MTQ0LCAzMzkzOSwgMTYsIGkyIHwgMCwgMTYxNDQsIDI2NjY0LCAxNSwgaTEgfCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDcyOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTI3MiwgMzQzNTMsIDMsIDIyODY0LCAyNjE3MSwgMTUsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjg7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5KDE1MjcyLCAzNDM2NCwgMTYxNDQsIDMzOTM5LCAxNiwgaTEgfCAwLCAxNjE0NCwgMjY2NjQsIDE1LCBpMiB8IDApOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjQ7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDI5OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eSgxNTI3MiwgMzQzNzgsIDE2MTQ0LCAzMzkzOSwgMTYsIGkyIHwgMCwgMTYxNDQsIDI2NjY0LCAxNSwgaTEgfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aM0ZGVGliUGZTX1NfU18oaTIzLCBpMjEsIGkxOSwgaTE4LCBpMjQsIGkyMikgewogaTIzID0gaTIzIHwgMDsKIGkyMSA9IGkyMSB8IDA7CiBpMTkgPSBpMTkgfCAwOwogaTE4ID0gaTE4IHwgMDsKIGkyNCA9IGkyNCB8IDA7CiBpMjIgPSBpMjIgfCAwOwogdmFyIGkxID0gMCwgZDIgPSAwLjAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGQ5ID0gMC4wLCBkMTAgPSAwLjAsIGQxMSA9IDAuMCwgZDEyID0gMC4wLCBkMTMgPSAwLjAsIGQxNCA9IDAuMCwgZDE1ID0gMC4wLCBkMTYgPSAwLjAsIGQxNyA9IDAuMCwgZDIwID0gMC4wLCBpMjUgPSAwLCBkMjYgPSAwLjAsIGQyNyA9IDAuMDsKIGkyNSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMSA9IGkyNTsKIGlmICgoaTIzIHwgMCkgPCAyKSB7CiAgaTggPSBIRUFQMzJbNTk0Nl0gfCAwOwogIEhFQVAzMltpMSA+PiAyXSA9IGkyMzsKICBfZnByaW50ZihpOCwgMzM4NTYsIGkxKSB8IDA7CiAgX2V4aXQoMSk7CiB9CiBpZiAoaTIzICsgLTEgJiBpMjMpIHsKICBpOCA9IEhFQVAzMls1OTQ2XSB8IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gaTIzOwogIF9mcHJpbnRmKGk4LCAzMzg1NiwgaTEpIHwgMDsKICBfZXhpdCgxKTsKIH0KIEw3IDogZG8gaWYgKCEoSEVBUDMyWzU2NzldIHwgMCkpIHsKICBpNCA9IF9tYWxsb2MoNjQpIHwgMDsKICBIRUFQMzJbNTY3OV0gPSBpNDsKICBpMSA9IDE7CiAgaTggPSAyOwogIHdoaWxlICgxKSB7CiAgIGk3ID0gX21hbGxvYyhpOCA8PCAyKSB8IDA7CiAgIGkzID0gaTEgKyAtMSB8IDA7CiAgIEhFQVAzMltpNCArIChpMyA8PCAyKSA+PiAyXSA9IGk3OwogICBpZiAoKGk4IHwgMCkgPiAwKSB7CiAgICBpNiA9IEhFQVAzMlsoSEVBUDMyWzU2NzldIHwgMCkgKyAoaTMgPDwgMikgPj4gMl0gfCAwOwogICAgaTcgPSAwOwogICAgZG8gewogICAgIGk0ID0gaTc7CiAgICAgaTUgPSAwOwogICAgIGkzID0gMDsKICAgICB3aGlsZSAoMSkgewogICAgICBpMyA9IGk0ICYgMSB8IGkzIDw8IDE7CiAgICAgIGk1ID0gaTUgKyAxIHwgMDsKICAgICAgaWYgKChpNSB8IDApID09IChpMSB8IDApKSBicmVhazsgZWxzZSBpNCA9IGk0ID4+IDE7CiAgICAgfQogICAgIEhFQVAzMltpNiArIChpNyA8PCAyKSA+PiAyXSA9IGkzOwogICAgIGk3ID0gaTcgKyAxIHwgMDsKICAgIH0gd2hpbGUgKChpNyB8IDApICE9IChpOCB8IDApKTsKICAgfQogICBpMSA9IGkxICsgMSB8IDA7CiAgIGlmICgoaTEgfCAwKSA9PSAxNykgYnJlYWsgTDc7CiAgIGk0ID0gSEVBUDMyWzU2NzldIHwgMDsKICAgaTggPSBpOCA8PCAxOwogIH0KIH0gd2hpbGUgKDApOwogZDIwID0gaTIxID8gLTYuMjgzMTg1MzA3MTc5NTg2IDogNi4yODMxODUzMDcxNzk1ODY7CiBpMSA9IDA7CiB3aGlsZSAoMSkgaWYgKCEoMSA8PCBpMSAmIGkyMykpIGkxID0gaTEgKyAxIHwgMDsgZWxzZSBicmVhazsKIGk3ID0gKGkyMyB8IDApID4gMDsKIEwyNCA6IGRvIGlmIChpNykgewogIGk1ID0gKGkxOCB8IDApID09IDA7CiAgaWYgKChpMSB8IDApIDwgMTcpIHsKICAgaTEgPSBIRUFQMzJbKEhFQVAzMls1Njc5XSB8IDApICsgKGkxICsgLTEgPDwgMikgPj4gMl0gfCAwOwogICBpNCA9IDA7CiAgIHdoaWxlICgxKSB7CiAgICBpMyA9IEhFQVAzMltpMSArIChpNCA8PCAyKSA+PiAyXSB8IDA7CiAgICBIRUFQMzJbaTI0ICsgKGkzIDw8IDIpID4+IDJdID0gSEVBUDMyW2kxOSArIChpNCA8PCAyKSA+PiAyXTsKICAgIGlmIChpNSkgZDIgPSAwLjA7IGVsc2UgZDIgPSArSEVBUEYzMltpMTggKyAoaTQgPDwgMikgPj4gMl07CiAgICBIRUFQRjMyW2kyMiArIChpMyA8PCAyKSA+PiAyXSA9IGQyOwogICAgaTQgPSBpNCArIDEgfCAwOwogICAgaWYgKChpNCB8IDApID09IChpMjMgfCAwKSkgewogICAgIGkxID0gMTsKICAgICBpNiA9IDI7CiAgICAgYnJlYWsgTDI0OwogICAgfQogICB9CiAgfQogIGlmIChpNSkgewogICBpNiA9IDA7CiAgIGRvIHsKICAgIGk0ID0gaTY7CiAgICBpNSA9IDA7CiAgICBpMyA9IDA7CiAgICB3aGlsZSAoMSkgewogICAgIGkzID0gaTQgJiAxIHwgaTMgPDwgMTsKICAgICBpNSA9IGk1ICsgMSB8IDA7CiAgICAgaWYgKChpNSB8IDApID09IChpMSB8IDApKSBicmVhazsgZWxzZSBpNCA9IGk0ID4+IDE7CiAgICB9CiAgICBIRUFQMzJbaTI0ICsgKGkzIDw8IDIpID4+IDJdID0gSEVBUDMyW2kxOSArIChpNiA8PCAyKSA+PiAyXTsKICAgIEhFQVBGMzJbaTIyICsgKGkzIDw8IDIpID4+IDJdID0gMC4wOwogICAgaTYgPSBpNiArIDEgfCAwOwogICB9IHdoaWxlICgoaTYgfCAwKSAhPSAoaTIzIHwgMCkpOwogICBpMSA9IDE7CiAgIGk2ID0gMjsKICB9IGVsc2UgewogICBpNiA9IDA7CiAgIGRvIHsKICAgIGk0ID0gaTY7CiAgICBpNSA9IDA7CiAgICBpMyA9IDA7CiAgICB3aGlsZSAoMSkgewogICAgIGkzID0gaTQgJiAxIHwgaTMgPDwgMTsKICAgICBpNSA9IGk1ICsgMSB8IDA7CiAgICAgaWYgKChpNSB8IDApID09IChpMSB8IDApKSBicmVhazsgZWxzZSBpNCA9IGk0ID4+IDE7CiAgICB9CiAgICBIRUFQMzJbaTI0ICsgKGkzIDw8IDIpID4+IDJdID0gSEVBUDMyW2kxOSArIChpNiA8PCAyKSA+PiAyXTsKICAgIEhFQVAzMltpMjIgKyAoaTMgPDwgMikgPj4gMl0gPSBIRUFQMzJbaTE4ICsgKGk2IDw8IDIpID4+IDJdOwogICAgaTYgPSBpNiArIDEgfCAwOwogICB9IHdoaWxlICgoaTYgfCAwKSAhPSAoaTIzIHwgMCkpOwogICBpMSA9IDE7CiAgIGk2ID0gMjsKICB9CiB9IGVsc2UgewogIGkxID0gMTsKICBpNiA9IDI7CiB9IHdoaWxlICgwKTsKIHdoaWxlICgxKSB7CiAgZDE0ID0gZDIwIC8gKyhpNiB8IDApOwogIGQxMyA9IGQxNCAqIC0yLjA7CiAgZDExID0gK01hdGhfc2luKCtkMTMpOwogIGQxMiA9ICtNYXRoX3NpbigrLWQxNCk7CiAgZDEzID0gK01hdGhfY29zKCtkMTMpOwogIGQxNCA9ICtNYXRoX2NvcygrZDE0KTsKICBkMTUgPSBkMTQgKiAyLjA7CiAgTDQ3IDogZG8gaWYgKGk3KSB7CiAgIGlmICgoaTEgfCAwKSA+IDApIHsKICAgIGkzID0gMDsKICAgIGk0ID0gaTE7CiAgIH0gZWxzZSB7CiAgICBpMSA9IDA7CiAgICB3aGlsZSAoMSkgewogICAgIGkxID0gaTEgKyBpNiB8IDA7CiAgICAgaWYgKChpMSB8IDApID49IChpMjMgfCAwKSkgYnJlYWsgTDQ3OwogICAgfQogICB9CiAgIHdoaWxlICgxKSB7CiAgICBkMTYgPSBkMTI7CiAgICBkMTAgPSBkMTE7CiAgICBkMTcgPSBkMTQ7CiAgICBkMiA9IGQxMzsKICAgIGk1ID0gaTM7CiAgICB3aGlsZSAoMSkgewogICAgIGQ5ID0gZDE1ICogZDE3IC0gZDI7CiAgICAgZDIgPSBkMTUgKiBkMTYgLSBkMTA7CiAgICAgaTggPSBpNSArIGkxIHwgMDsKICAgICBpMTkgPSBpMjQgKyAoaTggPDwgMikgfCAwOwogICAgIGQyNyA9ICtIRUFQRjMyW2kxOSA+PiAyXTsKICAgICBpOCA9IGkyMiArIChpOCA8PCAyKSB8IDA7CiAgICAgZDEwID0gK0hFQVBGMzJbaTggPj4gMl07CiAgICAgZDI2ID0gZDkgKiBkMjcgLSBkMiAqIGQxMDsKICAgICBkMTAgPSBkMiAqIGQyNyArIGQ5ICogZDEwOwogICAgIGkxOCA9IGkyNCArIChpNSA8PCAyKSB8IDA7CiAgICAgSEVBUEYzMltpMTkgPj4gMl0gPSArSEVBUEYzMltpMTggPj4gMl0gLSBkMjY7CiAgICAgaTE5ID0gaTIyICsgKGk1IDw8IDIpIHwgMDsKICAgICBIRUFQRjMyW2k4ID4+IDJdID0gK0hFQVBGMzJbaTE5ID4+IDJdIC0gZDEwOwogICAgIEhFQVBGMzJbaTE4ID4+IDJdID0gZDI2ICsgK0hFQVBGMzJbaTE4ID4+IDJdOwogICAgIEhFQVBGMzJbaTE5ID4+IDJdID0gZDEwICsgK0hFQVBGMzJbaTE5ID4+IDJdOwogICAgIGk1ID0gaTUgKyAxIHwgMDsKICAgICBpZiAoKGk1IHwgMCkgPT0gKGk0IHwgMCkpIGJyZWFrOyBlbHNlIHsKICAgICAgZDI3ID0gZDE3OwogICAgICBkMTAgPSBkMTY7CiAgICAgIGQxNiA9IGQyOwogICAgICBkMTcgPSBkOTsKICAgICAgZDIgPSBkMjc7CiAgICAgfQogICAgfQogICAgaTMgPSBpMyArIGk2IHwgMDsKICAgIGlmICgoaTMgfCAwKSA+PSAoaTIzIHwgMCkpIGJyZWFrOyBlbHNlIGk0ID0gaTQgKyBpNiB8IDA7CiAgIH0KICB9IHdoaWxlICgwKTsKICBpMSA9IGk2IDw8IDE7CiAgaWYgKChpMSB8IDApID4gKGkyMyB8IDApKSBicmVhazsgZWxzZSB7CiAgIGkxOSA9IGk2OwogICBpNiA9IGkxOwogICBpMSA9IGkxOTsKICB9CiB9CiBpZiAoIWkyMSkgewogIFNUQUNLVE9QID0gaTI1OwogIHJldHVybjsKIH0KIGQyID0gKyhpMjMgfCAwKTsKIGlmIChpNykgaTEgPSAwOyBlbHNlIHsKICBTVEFDS1RPUCA9IGkyNTsKICByZXR1cm47CiB9CiBkbyB7CiAgaTIxID0gaTI0ICsgKGkxIDw8IDIpIHwgMDsKICBIRUFQRjMyW2kyMSA+PiAyXSA9ICtIRUFQRjMyW2kyMSA+PiAyXSAvIGQyOwogIGkyMSA9IGkyMiArIChpMSA8PCAyKSB8IDA7CiAgSEVBUEYzMltpMjEgPj4gMl0gPSArSEVBUEYzMltpMjEgPj4gMl0gLyBkMjsKICBpMSA9IGkxICsgMSB8IDA7CiB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTIzIHwgMCkpOwogU1RBQ0tUT1AgPSBpMjU7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fX3VkaXZtb2RkaTQoaTUsIGk2LCBpOCwgaTExLCBpMTMpIHsKIGk1ID0gaTUgfCAwOwogaTYgPSBpNiB8IDA7CiBpOCA9IGk4IHwgMDsKIGkxMSA9IGkxMSB8IDA7CiBpMTMgPSBpMTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMiA9IDAsIGkxNCA9IDAsIGkxNSA9IDA7CiBpOSA9IGk1OwogaTQgPSBpNjsKIGk3ID0gaTQ7CiBpMiA9IGk4OwogaTEyID0gaTExOwogaTMgPSBpMTI7CiBpZiAoIWk3KSB7CiAgaTEgPSAoaTEzIHwgMCkgIT0gMDsKICBpZiAoIWkzKSB7CiAgIGlmIChpMSkgewogICAgSEVBUDMyW2kxMyA+PiAyXSA9IChpOSA+Pj4gMCkgJSAoaTIgPj4+IDApOwogICAgSEVBUDMyW2kxMyArIDQgPj4gMl0gPSAwOwogICB9CiAgIGkxMiA9IDA7CiAgIGkxMyA9IChpOSA+Pj4gMCkgLyAoaTIgPj4+IDApID4+PiAwOwogICByZXR1cm4gKHRlbXBSZXQwID0gaTEyLCBpMTMpIHwgMDsKICB9IGVsc2UgewogICBpZiAoIWkxKSB7CiAgICBpMTIgPSAwOwogICAgaTEzID0gMDsKICAgIHJldHVybiAodGVtcFJldDAgPSBpMTIsIGkxMykgfCAwOwogICB9CiAgIEhFQVAzMltpMTMgPj4gMl0gPSBpNSB8IDA7CiAgIEhFQVAzMltpMTMgKyA0ID4+IDJdID0gaTYgJiAwOwogICBpMTIgPSAwOwogICBpMTMgPSAwOwogICByZXR1cm4gKHRlbXBSZXQwID0gaTEyLCBpMTMpIHwgMDsKICB9CiB9CiBpMSA9IChpMyB8IDApID09IDA7CiBkbyBpZiAoaTIpIHsKICBpZiAoIWkxKSB7CiAgIGkxID0gKE1hdGhfY2x6MzIoaTMgfCAwKSB8IDApIC0gKE1hdGhfY2x6MzIoaTcgfCAwKSB8IDApIHwgMDsKICAgaWYgKGkxID4+PiAwIDw9IDMxKSB7CiAgICBpMTAgPSBpMSArIDEgfCAwOwogICAgaTMgPSAzMSAtIGkxIHwgMDsKICAgIGk2ID0gaTEgLSAzMSA+PiAzMTsKICAgIGkyID0gaTEwOwogICAgaTUgPSBpOSA+Pj4gKGkxMCA+Pj4gMCkgJiBpNiB8IGk3IDw8IGkzOwogICAgaTYgPSBpNyA+Pj4gKGkxMCA+Pj4gMCkgJiBpNjsKICAgIGkxID0gMDsKICAgIGkzID0gaTkgPDwgaTM7CiAgICBicmVhazsKICAgfQogICBpZiAoIWkxMykgewogICAgaTEyID0gMDsKICAgIGkxMyA9IDA7CiAgICByZXR1cm4gKHRlbXBSZXQwID0gaTEyLCBpMTMpIHwgMDsKICAgfQogICBIRUFQMzJbaTEzID4+IDJdID0gaTUgfCAwOwogICBIRUFQMzJbaTEzICsgNCA+PiAyXSA9IGk0IHwgaTYgJiAwOwogICBpMTIgPSAwOwogICBpMTMgPSAwOwogICByZXR1cm4gKHRlbXBSZXQwID0gaTEyLCBpMTMpIHwgMDsKICB9CiAgaTEgPSBpMiAtIDEgfCAwOwogIGlmIChpMSAmIGkyKSB7CiAgIGkzID0gKE1hdGhfY2x6MzIoaTIgfCAwKSB8IDApICsgMzMgLSAoTWF0aF9jbHozMihpNyB8IDApIHwgMCkgfCAwOwogICBpMTUgPSA2NCAtIGkzIHwgMDsKICAgaTEwID0gMzIgLSBpMyB8IDA7CiAgIGk0ID0gaTEwID4+IDMxOwogICBpMTQgPSBpMyAtIDMyIHwgMDsKICAgaTYgPSBpMTQgPj4gMzE7CiAgIGkyID0gaTM7CiAgIGk1ID0gaTEwIC0gMSA+PiAzMSAmIGk3ID4+PiAoaTE0ID4+PiAwKSB8IChpNyA8PCBpMTAgfCBpOSA+Pj4gKGkzID4+PiAwKSkgJiBpNjsKICAgaTYgPSBpNiAmIGk3ID4+PiAoaTMgPj4+IDApOwogICBpMSA9IGk5IDw8IGkxNSAmIGk0OwogICBpMyA9IChpNyA8PCBpMTUgfCBpOSA+Pj4gKGkxNCA+Pj4gMCkpICYgaTQgfCBpOSA8PCBpMTAgJiBpMyAtIDMzID4+IDMxOwogICBicmVhazsKICB9CiAgaWYgKGkxMykgewogICBIRUFQMzJbaTEzID4+IDJdID0gaTEgJiBpOTsKICAgSEVBUDMyW2kxMyArIDQgPj4gMl0gPSAwOwogIH0KICBpZiAoKGkyIHwgMCkgPT0gMSkgewogICBpMTQgPSBpNCB8IGk2ICYgMDsKICAgaTE1ID0gaTUgfCAwIHwgMDsKICAgcmV0dXJuICh0ZW1wUmV0MCA9IGkxNCwgaTE1KSB8IDA7CiAgfSBlbHNlIHsKICAgaTE1ID0gX2xsdm1fY3R0el9pMzIoaTIgfCAwKSB8IDA7CiAgIGkxNCA9IGk3ID4+PiAoaTE1ID4+PiAwKSB8IDA7CiAgIGkxNSA9IGk3IDw8IDMyIC0gaTE1IHwgaTkgPj4+IChpMTUgPj4+IDApIHwgMDsKICAgcmV0dXJuICh0ZW1wUmV0MCA9IGkxNCwgaTE1KSB8IDA7CiAgfQogfSBlbHNlIHsKICBpZiAoaTEpIHsKICAgaWYgKGkxMykgewogICAgSEVBUDMyW2kxMyA+PiAyXSA9IChpNyA+Pj4gMCkgJSAoaTIgPj4+IDApOwogICAgSEVBUDMyW2kxMyArIDQgPj4gMl0gPSAwOwogICB9CiAgIGkxNCA9IDA7CiAgIGkxNSA9IChpNyA+Pj4gMCkgLyAoaTIgPj4+IDApID4+PiAwOwogICByZXR1cm4gKHRlbXBSZXQwID0gaTE0LCBpMTUpIHwgMDsKICB9CiAgaWYgKCFpOSkgewogICBpZiAoaTEzKSB7CiAgICBIRUFQMzJbaTEzID4+IDJdID0gMDsKICAgIEhFQVAzMltpMTMgKyA0ID4+IDJdID0gKGk3ID4+PiAwKSAlIChpMyA+Pj4gMCk7CiAgIH0KICAgaTE0ID0gMDsKICAgaTE1ID0gKGk3ID4+PiAwKSAvIChpMyA+Pj4gMCkgPj4+IDA7CiAgIHJldHVybiAodGVtcFJldDAgPSBpMTQsIGkxNSkgfCAwOwogIH0KICBpMSA9IGkzIC0gMSB8IDA7CiAgaWYgKCEoaTEgJiBpMykpIHsKICAgaWYgKGkxMykgewogICAgSEVBUDMyW2kxMyA+PiAyXSA9IGk1IHwgMDsKICAgIEhFQVAzMltpMTMgKyA0ID4+IDJdID0gaTEgJiBpNyB8IGk2ICYgMDsKICAgfQogICBpMTQgPSAwOwogICBpMTUgPSBpNyA+Pj4gKChfbGx2bV9jdHR6X2kzMihpMyB8IDApIHwgMCkgPj4+IDApOwogICByZXR1cm4gKHRlbXBSZXQwID0gaTE0LCBpMTUpIHwgMDsKICB9CiAgaTEgPSAoTWF0aF9jbHozMihpMyB8IDApIHwgMCkgLSAoTWF0aF9jbHozMihpNyB8IDApIHwgMCkgfCAwOwogIGlmIChpMSA+Pj4gMCA8PSAzMCkgewogICBpNiA9IGkxICsgMSB8IDA7CiAgIGkzID0gMzEgLSBpMSB8IDA7CiAgIGkyID0gaTY7CiAgIGk1ID0gaTcgPDwgaTMgfCBpOSA+Pj4gKGk2ID4+PiAwKTsKICAgaTYgPSBpNyA+Pj4gKGk2ID4+PiAwKTsKICAgaTEgPSAwOwogICBpMyA9IGk5IDw8IGkzOwogICBicmVhazsKICB9CiAgaWYgKCFpMTMpIHsKICAgaTE0ID0gMDsKICAgaTE1ID0gMDsKICAgcmV0dXJuICh0ZW1wUmV0MCA9IGkxNCwgaTE1KSB8IDA7CiAgfQogIEhFQVAzMltpMTMgPj4gMl0gPSBpNSB8IDA7CiAgSEVBUDMyW2kxMyArIDQgPj4gMl0gPSBpNCB8IGk2ICYgMDsKICBpMTQgPSAwOwogIGkxNSA9IDA7CiAgcmV0dXJuICh0ZW1wUmV0MCA9IGkxNCwgaTE1KSB8IDA7CiB9IHdoaWxlICgwKTsKIGlmICghaTIpIHsKICBpNyA9IGkzOwogIGk0ID0gMDsKICBpMyA9IDA7CiB9IGVsc2UgewogIGkxMCA9IGk4IHwgMCB8IDA7CiAgaTkgPSBpMTIgfCBpMTEgJiAwOwogIGk3ID0gX2k2NEFkZChpMTAgfCAwLCBpOSB8IDAsIC0xLCAtMSkgfCAwOwogIGk4ID0gdGVtcFJldDA7CiAgaTQgPSBpMzsKICBpMyA9IDA7CiAgZG8gewogICBpMTEgPSBpNDsKICAgaTQgPSBpMSA+Pj4gMzEgfCBpNCA8PCAxOwogICBpMSA9IGkzIHwgaTEgPDwgMTsKICAgaTExID0gaTUgPDwgMSB8IGkxMSA+Pj4gMzEgfCAwOwogICBpMTIgPSBpNSA+Pj4gMzEgfCBpNiA8PCAxIHwgMDsKICAgX2k2NFN1YnRyYWN0KGk3LCBpOCwgaTExLCBpMTIpIHwgMDsKICAgaTE1ID0gdGVtcFJldDA7CiAgIGkxNCA9IGkxNSA+PiAzMSB8ICgoaTE1IHwgMCkgPCAwID8gLTEgOiAwKSA8PCAxOwogICBpMyA9IGkxNCAmIDE7CiAgIGk1ID0gX2k2NFN1YnRyYWN0KGkxMSwgaTEyLCBpMTQgJiBpMTAsICgoKGkxNSB8IDApIDwgMCA/IC0xIDogMCkgPj4gMzEgfCAoKGkxNSB8IDApIDwgMCA/IC0xIDogMCkgPDwgMSkgJiBpOSkgfCAwOwogICBpNiA9IHRlbXBSZXQwOwogICBpMiA9IGkyIC0gMSB8IDA7CiAgfSB3aGlsZSAoKGkyIHwgMCkgIT0gMCk7CiAgaTcgPSBpNDsKICBpNCA9IDA7CiB9CiBpMiA9IDA7CiBpZiAoaTEzKSB7CiAgSEVBUDMyW2kxMyA+PiAyXSA9IGk1OwogIEhFQVAzMltpMTMgKyA0ID4+IDJdID0gaTY7CiB9CiBpMTQgPSAoaTEgfCAwKSA+Pj4gMzEgfCAoaTcgfCBpMikgPDwgMSB8IChpMiA8PCAxIHwgaTEgPj4+IDMxKSAmIDAgfCBpNDsKIGkxNSA9IChpMSA8PCAxIHwgMCA+Pj4gMzEpICYgLTIgfCBpMzsKIHJldHVybiAodGVtcFJldDAgPSBpMTQsIGkxNSkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYmVsb3dfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2aWIoaTMsIGkxNSwgaTE0LCBpNiwgaTEzKSB7CiBpMyA9IGkzIHwgMDsKIGkxNSA9IGkxNSB8IDA7CiBpMTQgPSBpMTQgfCAwOwogaTYgPSBpNiB8IDA7CiBpMTMgPSBpMTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEyID0gMDsKIEwxIDogZG8gaWYgKChpMyB8IDApID09IChIRUFQMzJbaTE1ICsgOCA+PiAyXSB8IDApKSB7CiAgaWYgKChIRUFQMzJbaTE1ICsgNCA+PiAyXSB8IDApID09IChpMTQgfCAwKSA/IChpMSA9IGkxNSArIDI4IHwgMCwgKEhFQVAzMltpMSA+PiAyXSB8IDApICE9IDEpIDogMCkgSEVBUDMyW2kxID4+IDJdID0gaTY7CiB9IGVsc2UgewogIGlmICgoaTMgfCAwKSAhPSAoSEVBUDMyW2kxNSA+PiAyXSB8IDApKSB7CiAgIGkxMiA9IEhFQVAzMltpMyArIDEyID4+IDJdIHwgMDsKICAgaTQgPSBpMyArIDE2ICsgKGkxMiA8PCAzKSB8IDA7CiAgIF9fWk5LMTBfX2N4eGFiaXYxMjJfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYmVsb3dfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2aWIoaTMgKyAxNiB8IDAsIGkxNSwgaTE0LCBpNiwgaTEzKTsKICAgaTEgPSBpMyArIDI0IHwgMDsKICAgaWYgKChpMTIgfCAwKSA8PSAxKSBicmVhazsKICAgaTIgPSBIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMDsKICAgaWYgKChpMiAmIDIgfCAwKSA9PSAwID8gKGk1ID0gaTE1ICsgMzYgfCAwLCAoSEVBUDMyW2k1ID4+IDJdIHwgMCkgIT0gMSkgOiAwKSB7CiAgICBpZiAoIShpMiAmIDEpKSB7CiAgICAgaTIgPSBpMTUgKyA1NCB8IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaWYgKEhFQVA4W2kyID4+IDBdIHwgMCkgYnJlYWsgTDE7CiAgICAgIGlmICgoSEVBUDMyW2k1ID4+IDJdIHwgMCkgPT0gMSkgYnJlYWsgTDE7CiAgICAgIF9fWk5LMTBfX2N4eGFiaXYxMjJfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYmVsb3dfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2aWIoaTEsIGkxNSwgaTE0LCBpNiwgaTEzKTsKICAgICAgaTEgPSBpMSArIDggfCAwOwogICAgICBpZiAoaTEgPj4+IDAgPj0gaTQgPj4+IDApIGJyZWFrIEwxOwogICAgIH0KICAgIH0KICAgIGkyID0gaTE1ICsgMjQgfCAwOwogICAgaTMgPSBpMTUgKyA1NCB8IDA7CiAgICB3aGlsZSAoMSkgewogICAgIGlmIChIRUFQOFtpMyA+PiAwXSB8IDApIGJyZWFrIEwxOwogICAgIGlmICgoSEVBUDMyW2k1ID4+IDJdIHwgMCkgPT0gMSA/IChIRUFQMzJbaTIgPj4gMl0gfCAwKSA9PSAxIDogMCkgYnJlYWsgTDE7CiAgICAgX19aTksxMF9fY3h4YWJpdjEyMl9fYmFzZV9jbGFzc190eXBlX2luZm8xNnNlYXJjaF9iZWxvd19kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZpYihpMSwgaTE1LCBpMTQsIGk2LCBpMTMpOwogICAgIGkxID0gaTEgKyA4IHwgMDsKICAgICBpZiAoaTEgPj4+IDAgPj0gaTQgPj4+IDApIGJyZWFrIEwxOwogICAgfQogICB9CiAgIGkyID0gaTE1ICsgNTQgfCAwOwogICB3aGlsZSAoMSkgewogICAgaWYgKEhFQVA4W2kyID4+IDBdIHwgMCkgYnJlYWsgTDE7CiAgICBfX1pOSzEwX19jeHhhYml2MTIyX19iYXNlX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2JlbG93X2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdmliKGkxLCBpMTUsIGkxNCwgaTYsIGkxMyk7CiAgICBpMSA9IGkxICsgOCB8IDA7CiAgICBpZiAoaTEgPj4+IDAgPj0gaTQgPj4+IDApIGJyZWFrIEwxOwogICB9CiAgfQogIGlmICgoSEVBUDMyW2kxNSArIDE2ID4+IDJdIHwgMCkgIT0gKGkxNCB8IDApID8gKGkxMSA9IGkxNSArIDIwIHwgMCwgKEhFQVAzMltpMTEgPj4gMl0gfCAwKSAhPSAoaTE0IHwgMCkpIDogMCkgewogICBIRUFQMzJbaTE1ICsgMzIgPj4gMl0gPSBpNjsKICAgaTggPSBpMTUgKyA0NCB8IDA7CiAgIGlmICgoSEVBUDMyW2k4ID4+IDJdIHwgMCkgPT0gNCkgYnJlYWs7CiAgIGkyID0gSEVBUDMyW2kzICsgMTIgPj4gMl0gfCAwOwogICBpNCA9IGkzICsgMTYgKyAoaTIgPDwgMykgfCAwOwogICBpNSA9IGkxNSArIDUyIHwgMDsKICAgaTYgPSBpMTUgKyA1MyB8IDA7CiAgIGk5ID0gaTE1ICsgNTQgfCAwOwogICBpNyA9IGkzICsgOCB8IDA7CiAgIGkxMCA9IGkxNSArIDI0IHwgMDsKICAgTDM0IDogZG8gaWYgKChpMiB8IDApID4gMCkgewogICAgaTIgPSAwOwogICAgaTEgPSAwOwogICAgaTMgPSBpMyArIDE2IHwgMDsKICAgIHdoaWxlICgxKSB7CiAgICAgSEVBUDhbaTUgPj4gMF0gPSAwOwogICAgIEhFQVA4W2k2ID4+IDBdID0gMDsKICAgICBfX1pOSzEwX19jeHhhYml2MTIyX19iYXNlX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2Fib3ZlX2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdlM0X2liKGkzLCBpMTUsIGkxNCwgaTE0LCAxLCBpMTMpOwogICAgIGlmIChIRUFQOFtpOSA+PiAwXSB8IDApIHsKICAgICAgaTEyID0gMjA7CiAgICAgIGJyZWFrIEwzNDsKICAgICB9CiAgICAgZG8gaWYgKEhFQVA4W2k2ID4+IDBdIHwgMCkgewogICAgICBpZiAoIShIRUFQOFtpNSA+PiAwXSB8IDApKSBpZiAoIShIRUFQMzJbaTcgPj4gMl0gJiAxKSkgewogICAgICAgaTEgPSAxOwogICAgICAgaTEyID0gMjA7CiAgICAgICBicmVhayBMMzQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICBpMSA9IDE7CiAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoKEhFQVAzMltpMTAgPj4gMl0gfCAwKSA9PSAxKSBicmVhayBMMzQ7CiAgICAgIGlmICghKEhFQVAzMltpNyA+PiAyXSAmIDIpKSBicmVhayBMMzQ7IGVsc2UgewogICAgICAgaTIgPSAxOwogICAgICAgaTEgPSAxOwogICAgICB9CiAgICAgfSB3aGlsZSAoMCk7CiAgICAgaTMgPSBpMyArIDggfCAwOwogICAgIGlmIChpMyA+Pj4gMCA+PSBpNCA+Pj4gMCkgewogICAgICBpMTIgPSAyMDsKICAgICAgYnJlYWs7CiAgICAgfQogICAgfQogICB9IGVsc2UgewogICAgaTIgPSAwOwogICAgaTEgPSAwOwogICAgaTEyID0gMjA7CiAgIH0gd2hpbGUgKDApOwogICBkbyBpZiAoKGkxMiB8IDApID09IDIwKSB7CiAgICBpZiAoKCFpMiA/IChIRUFQMzJbaTExID4+IDJdID0gaTE0LCBpMTQgPSBpMTUgKyA0MCB8IDAsIEhFQVAzMltpMTQgPj4gMl0gPSAoSEVBUDMyW2kxNCA+PiAyXSB8IDApICsgMSwgKEhFQVAzMltpMTUgKyAzNiA+PiAyXSB8IDApID09IDEpIDogMCkgPyAoSEVBUDMyW2kxMCA+PiAyXSB8IDApID09IDIgOiAwKSB7CiAgICAgSEVBUDhbaTkgPj4gMF0gPSAxOwogICAgIGlmIChpMSkgYnJlYWs7CiAgICB9IGVsc2UgaTEyID0gMjQ7CiAgICBpZiAoKGkxMiB8IDApID09IDI0ID8gaTEgOiAwKSBicmVhazsKICAgIEhFQVAzMltpOCA+PiAyXSA9IDQ7CiAgICBicmVhayBMMTsKICAgfSB3aGlsZSAoMCk7CiAgIEhFQVAzMltpOCA+PiAyXSA9IDM7CiAgIGJyZWFrOwogIH0KICBpZiAoKGk2IHwgMCkgPT0gMSkgSEVBUDMyW2kxNSArIDMyID4+IDJdID0gMTsKIH0gd2hpbGUgKDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfZm1vZChkMTIsIGQxKSB7CiBkMTIgPSArZDEyOwogZDEgPSArZDE7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDAsIGkxMyA9IDAsIGkxNCA9IDA7CiBIRUFQRjY0W3RlbXBEb3VibGVQdHIgPj4gM10gPSBkMTI7CiBpMiA9IEhFQVAzMlt0ZW1wRG91YmxlUHRyID4+IDJdIHwgMDsKIGk5ID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgKyA0ID4+IDJdIHwgMDsKIEhFQVBGNjRbdGVtcERvdWJsZVB0ciA+PiAzXSA9IGQxOwogaTEwID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gfCAwOwogaTExID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgKyA0ID4+IDJdIHwgMDsKIGkzID0gX2JpdHNoaWZ0NjRMc2hyKGkyIHwgMCwgaTkgfCAwLCA1MikgfCAwOwogaTMgPSBpMyAmIDIwNDc7CiBpNyA9IF9iaXRzaGlmdDY0THNocihpMTAgfCAwLCBpMTEgfCAwLCA1MikgfCAwOwogaTcgPSBpNyAmIDIwNDc7CiBpMTMgPSBpOSAmIC0yMTQ3NDgzNjQ4OwogaTYgPSBfYml0c2hpZnQ2NFNobChpMTAgfCAwLCBpMTEgfCAwLCAxKSB8IDA7CiBpOCA9IHRlbXBSZXQwOwogTDEgOiBkbyBpZiAoISgoaTYgfCAwKSA9PSAwICYgKGk4IHwgMCkgPT0gMCkgPyAoaTUgPSBpMTEgJiAyMTQ3NDgzNjQ3LCAhKGk1ID4+PiAwID4gMjE0NjQzNTA3MiB8IChpNSB8IDApID09IDIxNDY0MzUwNzIgJiBpMTAgPj4+IDAgPiAwIHwgKGkzIHwgMCkgPT0gMjA0NykpIDogMCkgewogIGk0ID0gX2JpdHNoaWZ0NjRTaGwoaTIgfCAwLCBpOSB8IDAsIDEpIHwgMDsKICBpNSA9IHRlbXBSZXQwOwogIGlmICghKGk1ID4+PiAwID4gaTggPj4+IDAgfCAoaTUgfCAwKSA9PSAoaTggfCAwKSAmIGk0ID4+PiAwID4gaTYgPj4+IDApKSByZXR1cm4gKygoaTQgfCAwKSA9PSAoaTYgfCAwKSAmIChpNSB8IDApID09IChpOCB8IDApID8gZDEyICogMC4wIDogZDEyKTsKICBpZiAoIWkzKSB7CiAgIGkzID0gX2JpdHNoaWZ0NjRTaGwoaTIgfCAwLCBpOSB8IDAsIDEyKSB8IDA7CiAgIGk0ID0gdGVtcFJldDA7CiAgIGlmICgoaTQgfCAwKSA+IC0xIHwgKGk0IHwgMCkgPT0gLTEgJiBpMyA+Pj4gMCA+IDQyOTQ5NjcyOTUpIHsKICAgIGk1ID0gaTM7CiAgICBpMyA9IDA7CiAgICBkbyB7CiAgICAgaTMgPSBpMyArIC0xIHwgMDsKICAgICBpNSA9IF9iaXRzaGlmdDY0U2hsKGk1IHwgMCwgaTQgfCAwLCAxKSB8IDA7CiAgICAgaTQgPSB0ZW1wUmV0MDsKICAgIH0gd2hpbGUgKChpNCB8IDApID4gLTEgfCAoaTQgfCAwKSA9PSAtMSAmIGk1ID4+PiAwID4gNDI5NDk2NzI5NSk7CiAgIH0gZWxzZSBpMyA9IDA7CiAgIGkyID0gX2JpdHNoaWZ0NjRTaGwoaTIgfCAwLCBpOSB8IDAsIDEgLSBpMyB8IDApIHwgMDsKICAgaTQgPSB0ZW1wUmV0MDsKICB9IGVsc2UgaTQgPSBpOSAmIDEwNDg1NzUgfCAxMDQ4NTc2OwogIGlmICghaTcpIHsKICAgaTUgPSBfYml0c2hpZnQ2NFNobChpMTAgfCAwLCBpMTEgfCAwLCAxMikgfCAwOwogICBpNiA9IHRlbXBSZXQwOwogICBpZiAoKGk2IHwgMCkgPiAtMSB8IChpNiB8IDApID09IC0xICYgaTUgPj4+IDAgPiA0Mjk0OTY3Mjk1KSB7CiAgICBpNyA9IDA7CiAgICBkbyB7CiAgICAgaTcgPSBpNyArIC0xIHwgMDsKICAgICBpNSA9IF9iaXRzaGlmdDY0U2hsKGk1IHwgMCwgaTYgfCAwLCAxKSB8IDA7CiAgICAgaTYgPSB0ZW1wUmV0MDsKICAgIH0gd2hpbGUgKChpNiB8IDApID4gLTEgfCAoaTYgfCAwKSA9PSAtMSAmIGk1ID4+PiAwID4gNDI5NDk2NzI5NSk7CiAgIH0gZWxzZSBpNyA9IDA7CiAgIGkxMCA9IF9iaXRzaGlmdDY0U2hsKGkxMCB8IDAsIGkxMSB8IDAsIDEgLSBpNyB8IDApIHwgMDsKICAgaTkgPSB0ZW1wUmV0MDsKICB9IGVsc2UgaTkgPSBpMTEgJiAxMDQ4NTc1IHwgMTA0ODU3NjsKICBpOCA9IF9pNjRTdWJ0cmFjdChpMiB8IDAsIGk0IHwgMCwgaTEwIHwgMCwgaTkgfCAwKSB8IDA7CiAgaTYgPSB0ZW1wUmV0MDsKICBpNSA9IChpNiB8IDApID4gLTEgfCAoaTYgfCAwKSA9PSAtMSAmIGk4ID4+PiAwID4gNDI5NDk2NzI5NTsKICBMMjMgOiBkbyBpZiAoKGkzIHwgMCkgPiAoaTcgfCAwKSkgewogICB3aGlsZSAoMSkgewogICAgaWYgKGk1KSBpZiAoKGkyIHwgMCkgPT0gKGkxMCB8IDApICYgKGk0IHwgMCkgPT0gKGk5IHwgMCkpIGJyZWFrOyBlbHNlIHsKICAgICBpMiA9IGk4OwogICAgIGk0ID0gaTY7CiAgICB9CiAgICBpMiA9IF9iaXRzaGlmdDY0U2hsKGkyIHwgMCwgaTQgfCAwLCAxKSB8IDA7CiAgICBpNCA9IHRlbXBSZXQwOwogICAgaTMgPSBpMyArIC0xIHwgMDsKICAgIGk4ID0gX2k2NFN1YnRyYWN0KGkyIHwgMCwgaTQgfCAwLCBpMTAgfCAwLCBpOSB8IDApIHwgMDsKICAgIGk2ID0gdGVtcFJldDA7CiAgICBpNSA9IChpNiB8IDApID4gLTEgfCAoaTYgfCAwKSA9PSAtMSAmIGk4ID4+PiAwID4gNDI5NDk2NzI5NTsKICAgIGlmICgoaTMgfCAwKSA8PSAoaTcgfCAwKSkgYnJlYWsgTDIzOwogICB9CiAgIGQxID0gZDEyICogMC4wOwogICBicmVhayBMMTsKICB9IHdoaWxlICgwKTsKICBpZiAoaTUpIGlmICgoaTIgfCAwKSA9PSAoaTEwIHwgMCkgJiAoaTQgfCAwKSA9PSAoaTkgfCAwKSkgewogICBkMSA9IGQxMiAqIDAuMDsKICAgYnJlYWs7CiAgfSBlbHNlIHsKICAgaTQgPSBpNjsKICAgaTIgPSBpODsKICB9CiAgaWYgKGk0ID4+PiAwIDwgMTA0ODU3NiB8IChpNCB8IDApID09IDEwNDg1NzYgJiBpMiA+Pj4gMCA8IDApIGRvIHsKICAgaTIgPSBfYml0c2hpZnQ2NFNobChpMiB8IDAsIGk0IHwgMCwgMSkgfCAwOwogICBpNCA9IHRlbXBSZXQwOwogICBpMyA9IGkzICsgLTEgfCAwOwogIH0gd2hpbGUgKGk0ID4+PiAwIDwgMTA0ODU3NiB8IChpNCB8IDApID09IDEwNDg1NzYgJiBpMiA+Pj4gMCA8IDApOwogIGlmICgoaTMgfCAwKSA+IDApIHsKICAgaTExID0gX2k2NEFkZChpMiB8IDAsIGk0IHwgMCwgMCwgLTEwNDg1NzYpIHwgMDsKICAgaTIgPSB0ZW1wUmV0MDsKICAgaTMgPSBfYml0c2hpZnQ2NFNobChpMyB8IDAsIDAsIDUyKSB8IDA7CiAgIGkyID0gaTIgfCB0ZW1wUmV0MDsKICAgaTMgPSBpMTEgfCBpMzsKICB9IGVsc2UgewogICBpMyA9IF9iaXRzaGlmdDY0THNocihpMiB8IDAsIGk0IHwgMCwgMSAtIGkzIHwgMCkgfCAwOwogICBpMiA9IHRlbXBSZXQwOwogIH0KICBIRUFQMzJbdGVtcERvdWJsZVB0ciA+PiAyXSA9IGkzOwogIEhFQVAzMlt0ZW1wRG91YmxlUHRyICsgNCA+PiAyXSA9IGkyIHwgaTEzOwogIGQxID0gK0hFQVBGNjRbdGVtcERvdWJsZVB0ciA+PiAzXTsKIH0gZWxzZSBpMTQgPSAzOyB3aGlsZSAoMCk7CiBpZiAoKGkxNCB8IDApID09IDMpIHsKICBkMSA9IGQxMiAqIGQxOwogIGQxID0gZDEgLyBkMTsKIH0KIHJldHVybiArZDE7Cn0KCmZ1bmN0aW9uIF9fWk40OUVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfbXlfbW9kdWxlX21heGlHcmFpbnNDMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzKDE1NDk2LCAxNTUwNCwgMTU1MjAsIDAsIDI2MTI5LCAxMTIsIDI2MTMyLCAwLCAyNjEzMiwgMCwgMzU5NTQsIDI2MTM0LCAzMDApOwogX19lbWJpbmRfcmVnaXN0ZXJfc21hcnRfcHRyKDE1NTM2LCAxNTQ5NiwgMzU5NzAsIDIsIDI2MTI5LCAxMTMsIDI3MDQ0LCAzMSwgMjYxNDgsIDc0LCAyNjEzNCwgMzAxKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDE1NDk2LCAxLCAyMzE1MiwgMjYxMjksIDExNCwgMzAyKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDYzOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTQ5NiwgMzYwMTUsIDMsIDIzMTU2LCAyNjEzNywgMjAsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyNTsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTU0OTYsIDM2MDI1LCAyLCAyMzE2OCwgMjcxMjQsIDE5LCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMjY7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1NDk2LCAzNjA0NywgMiwgMjMxNjgsIDI3MTI0LCAxOSwgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDMwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTQ5NiwgMzYwNTksIDMsIDIzMTc2LCAyNjMzNywgMTYsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAxOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTQ5NiwgMzYwNzEsIDYsIDIzMTg4LCAzNjA3NiwgMSwgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDE7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1NDk2LCAzNjA4NCwgNSwgMjMyMTIsIDM2MDkwLCAxLCBpMSB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTU1NDQsIDE1NTUyLCAxNTU2OCwgMCwgMjYxMjksIDExNSwgMjYxMzIsIDAsIDI2MTMyLCAwLCAzNjA5NywgMjYxMzQsIDMwMyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTU1ODQsIDE1NTQ0LCAzNjExMiwgMiwgMjYxMjksIDExNiwgMjcwNDQsIDMyLCAyNjE0OCwgNzUsIDI2MTM0LCAzMDQpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTU1NDQsIDEsIDIzMjMyLCAyNjEyOSwgMTE3LCAzMDUpOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gNjQ7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1NTQ0LCAzNjAxNSwgMywgMjMyMzYsIDI2MTM3LCAyMSwgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDI7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1NTQ0LCAzNjA3MSwgNiwgMjMyNDgsIDM2MDc2LCAyLCBpMSB8IDAsIDApOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTU1OTIsIDE1NjAwLCAxNTYxNiwgMCwgMjYxMjksIDExOCwgMjYxMzIsIDAsIDI2MTMyLCAwLCAzNjE1NiwgMjYxMzQsIDMwNik7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTU2MzIsIDE1NTkyLCAzNTk3MCwgMiwgMjYxMjksIDExOSwgMjcwNDQsIDMzLCAyNjE0OCwgNzYsIDI2MTM0LCAzMDcpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTU1OTIsIDEsIDIzMjcyLCAyNjEyOSwgMTIwLCAzMDgpOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gNjU7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1NTkyLCAzNjAxNSwgMywgMjMyNzYsIDI2MTM3LCAyMiwgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDI3OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTU5MiwgMzYwMjUsIDIsIDIzMjg4LCAyNzEyNCwgMjAsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyODsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTU1OTIsIDM2MDQ3LCAyLCAyMzI4OCwgMjcxMjQsIDIwLCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMzE7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDE1NTkyLCAzNjA1OSwgMywgMjMyOTYsIDI2MzM3LCAxNywgaTEgfCAwLCAwKTsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDMyOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxNTU5MiwgMzYxNzMsIDMsIDIzMjk2LCAyNjMzNywgMTcsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAzMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTU1OTIsIDM2MTg2LCAzLCAyMzI5NiwgMjYzMzcsIDE3LCBpMSB8IDAsIDApOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMTsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTU1OTIsIDM2MDcxLCA3LCAyMzMwOCwgMzYxOTcsIDEsIGkxIHwgMCwgMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk44bWF4aUlGRlQ3cHJvY2Vzc0VSTlN0M19fMTZ2ZWN0b3JJZk5TMF85YWxsb2NhdG9ySWZFRUVFUzVfKGkxMiwgaTIsIGkzKSB7CiBpMTIgPSBpMTIgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIHZhciBpMSA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDAsIGQxMyA9IDAuMCwgaTE0ID0gMCwgaTE1ID0gMDsKIGkxMSA9IGkxMiArIDI0IHwgMDsKIGkxID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiBpZiAoaTEpIHsKICBpMTAgPSBpMTIgKyAyMCB8IDA7CiAgaTggPSBpMTIgKyA0IHwgMDsKICBpOSA9IGkxOwogIGk4ID0gSEVBUDMyW2k4ID4+IDJdIHwgMDsKICBpOCA9IGk4ICsgKGk5IDw8IDIpIHwgMDsKICBkMTMgPSArSEVBUEYzMltpOCA+PiAyXTsKICBpMTIgPSBpMTIgKyAyOCB8IDA7CiAgaTggPSBkMTMgPiAuOTk5OTg5OTg2NDE5Njc3NzsKICBkMTMgPSBpOCA/IC45OTk5ODk5ODY0MTk2Nzc3IDogZDEzOwogIGk4ID0gZDEzIDwgLS45OTk5ODk5ODY0MTk2Nzc3OwogIGQxMyA9IGk4ID8gLS45OTk5ODk5ODY0MTk2Nzc3IDogZDEzOwogIEhFQVBGMzJbaTEyID4+IDJdID0gZDEzOwogIGkxMCA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogIGkxMiA9IGk5ICsgMSB8IDA7CiAgaTEwID0gKGkxMCB8IDApID09IChpMTIgfCAwKTsKICBpMTIgPSBpMTAgPyAwIDogaTEyOwogIEhFQVAzMltpMTEgPj4gMl0gPSBpMTI7CiAgcmV0dXJuICtkMTM7CiB9CiBpMTAgPSBpMTIgKyAzMiB8IDA7CiBfbWVtc2V0KEhFQVAzMltpMTIgPj4gMl0gfCAwLCAwLCBIRUFQMzJbaTEwID4+IDJdIDw8IDIgfCAwKSB8IDA7CiBpNyA9IEhFQVAzMltpMTIgKyAzNiA+PiAyXSB8IDA7CiBpOSA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogaTggPSBIRUFQMzJbaTEyICsgOCA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpMSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpMiA9IEhFQVAzMltpNyArIDQgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTcgKyA4ID4+IDJdIHwgMDsKIGk2ID0gSEVBUDMyW2k3ICsgMTYgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApID4gMCkgewogIGkzID0gMDsKICBkbyB7CiAgIGkxNSA9IGk0ICsgKGkzIDw8IDIpIHwgMDsKICAgaTE0ID0gaTEgKyAoaTMgPDwgMikgfCAwOwogICBkMTMgPSArSEVBUEYzMltpMTUgPj4gMl0gKiArTWF0aF9jb3MoKygrSEVBUEYzMltpMTQgPj4gMl0pKTsKICAgSEVBUEYzMltpNSArIChpMyA8PCAyKSA+PiAyXSA9IGQxMzsKICAgZDEzID0gK0hFQVBGMzJbaTE1ID4+IDJdICogK01hdGhfc2luKCsoK0hFQVBGMzJbaTE0ID4+IDJdKSk7CiAgIEhFQVBGMzJbaTYgKyAoaTMgPDwgMikgPj4gMl0gPSBkMTM7CiAgIGkzID0gaTMgKyAxIHwgMDsKICB9IHdoaWxlICgoaTMgfCAwKSAhPSAoaTIgfCAwKSk7CiB9CiBpMSA9IGk3ICsgMTIgfCAwOwogX19aM0ZGVGliUGZTX1NfU18oSEVBUDMyW2k3ID4+IDJdIHwgMCwgMSwgaTUsIGk2LCBIRUFQMzJbaTEgPj4gMl0gfCAwLCBIRUFQMzJbaTcgKyAyMCA+PiAyXSB8IDApOwogaTMgPSBIRUFQMzJbaTcgPj4gMl0gfCAwOwogaWYgKChpMyB8IDApID4gMCkgewogIGkxID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICBpMiA9IDA7CiAgZG8gewogICBpMTUgPSBpOSArIChpMiA8PCAyKSB8IDA7CiAgIEhFQVBGMzJbaTE1ID4+IDJdID0gK0hFQVBGMzJbaTE1ID4+IDJdICsgK0hFQVBGMzJbaTEgKyAoaTIgPDwgMikgPj4gMl0gKiArSEVBUEYzMltpOCArIChpMiA8PCAyKSA+PiAyXTsKICAgaTIgPSBpMiArIDEgfCAwOwogIH0gd2hpbGUgKChpMiB8IDApICE9IChpMyB8IDApKTsKIH0KIGk1ID0gaTEyICsgNCB8IDA7CiBpMTUgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogaTYgPSBpMTIgKyAyMCB8IDA7CiBpMSA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiBfbWVtY3B5KGkxNSB8IDAsIGkxNSArIChpMSA8PCAyKSB8IDAsIChIRUFQMzJbaTEwID4+IDJdIHwgMCkgLSBpMSA8PCAyIHwgMCkgfCAwOwogaTEgPSBIRUFQMzJbaTYgPj4gMl0gfCAwOwogX21lbXNldCgoSEVBUDMyW2k1ID4+IDJdIHwgMCkgKyAoKEhFQVAzMltpMTAgPj4gMl0gfCAwKSAtIGkxIDw8IDIpIHwgMCwgMCwgaTEgPDwgMiB8IDApIHwgMDsKIGkxID0gSEVBUDMyW2kxMCA+PiAyXSB8IDA7CiBpZiAoKGkxIHwgMCkgPiAwKSB7CiAgaTIgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKICBpMyA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgaTQgPSAwOwogIGRvIHsKICAgaTE1ID0gaTMgKyAoaTQgPDwgMikgfCAwOwogICBIRUFQRjMyW2kxNSA+PiAyXSA9ICtIRUFQRjMyW2kyICsgKGk0IDw8IDIpID4+IDJdICsgK0hFQVBGMzJbaTE1ID4+IDJdOwogICBpNCA9IGk0ICsgMSB8IDA7CiAgfSB3aGlsZSAoKGk0IHwgMCkgPCAoaTEgfCAwKSk7CiB9CiBpMTQgPSBpNjsKIGkxMCA9IGk1OwogaTE1ID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiBpMTAgPSBIRUFQMzJbaTEwID4+IDJdIHwgMDsKIGkxMCA9IGkxMCArIChpMTUgPDwgMikgfCAwOwogZDEzID0gK0hFQVBGMzJbaTEwID4+IDJdOwogaTEyID0gaTEyICsgMjggfCAwOwogaTEwID0gZDEzID4gLjk5OTk4OTk4NjQxOTY3Nzc7CiBkMTMgPSBpMTAgPyAuOTk5OTg5OTg2NDE5Njc3NyA6IGQxMzsKIGkxMCA9IGQxMyA8IC0uOTk5OTg5OTg2NDE5Njc3NzsKIGQxMyA9IGkxMCA/IC0uOTk5OTg5OTg2NDE5Njc3NyA6IGQxMzsKIEhFQVBGMzJbaTEyID4+IDJdID0gZDEzOwogaTE0ID0gSEVBUDMyW2kxNCA+PiAyXSB8IDA7CiBpMTUgPSBpMTUgKyAxIHwgMDsKIGkxNCA9IChpMTQgfCAwKSA9PSAoaTE1IHwgMCk7CiBpMTUgPSBpMTQgPyAwIDogaTE1OwogSEVBUDMyW2kxMSA+PiAyXSA9IGkxNTsKIHJldHVybiArZDEzOwp9CgpmdW5jdGlvbiBfcG9wX2FyZyhpMiwgaTMsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTQgPSAwLCBpNSA9IDAsIGQ2ID0gMC4wOwogTDEgOiBkbyBpZiAoaTMgPj4+IDAgPD0gMjApIGRvIHN3aXRjaCAoaTMgfCAwKSB7CiBjYXNlIDk6CiAgewogICBpNCA9IChIRUFQMzJbaTEgPj4gMl0gfCAwKSArICg0IC0gMSkgJiB+KDQgLSAxKTsKICAgaTMgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogICBIRUFQMzJbaTEgPj4gMl0gPSBpNCArIDQ7CiAgIEhFQVAzMltpMiA+PiAyXSA9IGkzOwogICBicmVhayBMMTsKICB9CiBjYXNlIDEwOgogIHsKICAgaTQgPSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyAoNCAtIDEpICYgfig0IC0gMSk7CiAgIGkzID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gaTQgKyA0OwogICBpNCA9IGkyOwogICBIRUFQMzJbaTQgPj4gMl0gPSBpMzsKICAgSEVBUDMyW2k0ICsgNCA+PiAyXSA9ICgoaTMgfCAwKSA8IDApIDw8IDMxID4+IDMxOwogICBicmVhayBMMTsKICB9CiBjYXNlIDExOgogIHsKICAgaTQgPSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyAoNCAtIDEpICYgfig0IC0gMSk7CiAgIGkzID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gaTQgKyA0OwogICBpNCA9IGkyOwogICBIRUFQMzJbaTQgPj4gMl0gPSBpMzsKICAgSEVBUDMyW2k0ICsgNCA+PiAyXSA9IDA7CiAgIGJyZWFrIEwxOwogIH0KIGNhc2UgMTI6CiAgewogICBpNCA9IChIRUFQMzJbaTEgPj4gMl0gfCAwKSArICg4IC0gMSkgJiB+KDggLSAxKTsKICAgaTMgPSBpNDsKICAgaTUgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogICBpMyA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogICBIRUFQMzJbaTEgPj4gMl0gPSBpNCArIDg7CiAgIGk0ID0gaTI7CiAgIEhFQVAzMltpNCA+PiAyXSA9IGk1OwogICBIRUFQMzJbaTQgKyA0ID4+IDJdID0gaTM7CiAgIGJyZWFrIEwxOwogIH0KIGNhc2UgMTM6CiAgewogICBpNSA9IChIRUFQMzJbaTEgPj4gMl0gfCAwKSArICg0IC0gMSkgJiB+KDQgLSAxKTsKICAgaTQgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogICBIRUFQMzJbaTEgPj4gMl0gPSBpNSArIDQ7CiAgIGk0ID0gKGk0ICYgNjU1MzUpIDw8IDE2ID4+IDE2OwogICBpNSA9IGkyOwogICBIRUFQMzJbaTUgPj4gMl0gPSBpNDsKICAgSEVBUDMyW2k1ICsgNCA+PiAyXSA9ICgoaTQgfCAwKSA8IDApIDw8IDMxID4+IDMxOwogICBicmVhayBMMTsKICB9CiBjYXNlIDE0OgogIHsKICAgaTUgPSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyAoNCAtIDEpICYgfig0IC0gMSk7CiAgIGk0ID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gaTUgKyA0OwogICBpNSA9IGkyOwogICBIRUFQMzJbaTUgPj4gMl0gPSBpNCAmIDY1NTM1OwogICBIRUFQMzJbaTUgKyA0ID4+IDJdID0gMDsKICAgYnJlYWsgTDE7CiAgfQogY2FzZSAxNToKICB7CiAgIGk1ID0gKEhFQVAzMltpMSA+PiAyXSB8IDApICsgKDQgLSAxKSAmIH4oNCAtIDEpOwogICBpNCA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgIEhFQVAzMltpMSA+PiAyXSA9IGk1ICsgNDsKICAgaTQgPSAoaTQgJiAyNTUpIDw8IDI0ID4+IDI0OwogICBpNSA9IGkyOwogICBIRUFQMzJbaTUgPj4gMl0gPSBpNDsKICAgSEVBUDMyW2k1ICsgNCA+PiAyXSA9ICgoaTQgfCAwKSA8IDApIDw8IDMxID4+IDMxOwogICBicmVhayBMMTsKICB9CiBjYXNlIDE2OgogIHsKICAgaTUgPSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyAoNCAtIDEpICYgfig0IC0gMSk7CiAgIGk0ID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gaTUgKyA0OwogICBpNSA9IGkyOwogICBIRUFQMzJbaTUgPj4gMl0gPSBpNCAmIDI1NTsKICAgSEVBUDMyW2k1ICsgNCA+PiAyXSA9IDA7CiAgIGJyZWFrIEwxOwogIH0KIGNhc2UgMTc6CiAgewogICBpNSA9IChIRUFQMzJbaTEgPj4gMl0gfCAwKSArICg4IC0gMSkgJiB+KDggLSAxKTsKICAgZDYgPSArSEVBUEY2NFtpNSA+PiAzXTsKICAgSEVBUDMyW2kxID4+IDJdID0gaTUgKyA4OwogICBIRUFQRjY0W2kyID4+IDNdID0gZDY7CiAgIGJyZWFrIEwxOwogIH0KIGNhc2UgMTg6CiAgewogICBpNSA9IChIRUFQMzJbaTEgPj4gMl0gfCAwKSArICg4IC0gMSkgJiB+KDggLSAxKTsKICAgZDYgPSArSEVBUEY2NFtpNSA+PiAzXTsKICAgSEVBUDMyW2kxID4+IDJdID0gaTUgKyA4OwogICBIRUFQRjY0W2kyID4+IDNdID0gZDY7CiAgIGJyZWFrIEwxOwogIH0KIGRlZmF1bHQ6CiAgYnJlYWsgTDE7CiB9IHdoaWxlICgwKTsgd2hpbGUgKDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQ1c2V0dXBFaWlpKGkxNSwgaTIsIGkzLCBpNCkgewogaTE1ID0gaTE1IHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBkMSA9IDAuMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDAsIGkxMiA9IDAsIGkxMyA9IDAsIGkxNCA9IDAsIGQxNiA9IDAuMDsKIGkxNCA9IF9fWm53aigyNCkgfCAwOwogSEVBUDMyW2kxNCA+PiAyXSA9IGkyOwogaTcgPSAoaTIgfCAwKSAvIDIgfCAwOwogSEVBUDMyW2kxNCArIDQgPj4gMl0gPSBpNzsKIGk5ID0gaTIgPDwgMjsKIGkxMSA9IF9tYWxsb2MoaTkpIHwgMDsKIEhFQVAzMltpMTQgKyA4ID4+IDJdID0gaTExOwogaTExID0gX21hbGxvYyhpOSkgfCAwOwogSEVBUDMyW2kxNCArIDE2ID4+IDJdID0gaTExOwogaTExID0gX21hbGxvYyhpOSkgfCAwOwogSEVBUDMyW2kxNCArIDEyID4+IDJdID0gaTExOwogaTExID0gX21hbGxvYyhpOSkgfCAwOwogSEVBUDMyW2kxNCArIDIwID4+IDJdID0gaTExOwogSEVBUDMyW2kxNSArIDY0ID4+IDJdID0gaTE0OwogaTE0ID0gaTE1ICsgNjAgfCAwOwogSEVBUDMyW2kxNCA+PiAyXSA9IGkyOwogaTExID0gaTE1ICsgMzIgfCAwOwogSEVBUDMyW2kxMSA+PiAyXSA9IGkzOwogaTEwID0gaTE1ICsgNDAgfCAwOwogSEVBUDMyW2kxMCA+PiAyXSA9IGk3OwogaTEyID0gaTE1ICsgMzYgfCAwOwogSEVBUDMyW2kxMiA+PiAyXSA9IGk0OwogaTIgPSBfbWFsbG9jKGk5KSB8IDA7CiBpOSA9IGkxNSArIDQ0IHwgMDsKIEhFQVAzMltpOSA+PiAyXSA9IGkyOwogaTIgPSBpMTUgKyA0IHwgMDsKIGkzID0gaTE1ICsgOCB8IDA7CiBpNCA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNiA9IGk0IC0gaTUgPj4gMjsKIGlmIChpNyA+Pj4gMCA8PSBpNiA+Pj4gMCkgaWYgKGk3ID4+PiAwIDwgaTYgPj4+IDAgPyAoaTggPSBpNSArIChpNyA8PCAyKSB8IDAsIChpNCB8IDApICE9IChpOCB8IDApKSA6IDApIHsKICBIRUFQMzJbaTMgPj4gMl0gPSBpNCArICh+KChpNCArIC00IC0gaTggfCAwKSA+Pj4gMikgPDwgMik7CiAgaTIgPSBpNzsKIH0gZWxzZSBpMiA9IGk3OyBlbHNlIHsKICBfX1pOU3QzX18xNnZlY3RvcklmTlNfOWFsbG9jYXRvcklmRUVFOF9fYXBwZW5kRWooaTIsIGk3IC0gaTYgfCAwKTsKICBpMiA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogfQogaTMgPSBfbWFsbG9jKGkyIDw8IDIpIHwgMDsKIEhFQVAzMltpMTUgPj4gMl0gPSBpMzsKIGkzID0gaTE1ICsgMTYgfCAwOwogaTQgPSBpMTUgKyAyMCB8IDA7CiBpNSA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpNyA9IGk1IC0gaTYgPj4gMjsKIGlmIChpMiA+Pj4gMCA8PSBpNyA+Pj4gMCkgewogIGlmIChpMiA+Pj4gMCA8IGk3ID4+PiAwID8gKGkxMyA9IGk2ICsgKGkyIDw8IDIpIHwgMCwgKGk1IHwgMCkgIT0gKGkxMyB8IDApKSA6IDApIEhFQVAzMltpNCA+PiAyXSA9IGk1ICsgKH4oKGk1ICsgLTQgLSBpMTMgfCAwKSA+Pj4gMikgPDwgMik7CiB9IGVsc2UgX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRThfX2FwcGVuZEVqKGkzLCBpMiAtIGk3IHwgMCk7CiBpMyA9IF9fWm53aig0KSB8IDA7CiBpNCA9IGkxNSArIDI4IHwgMDsKIEhFQVAzMltpNCA+PiAyXSA9IGkzOwogX21lbXNldChIRUFQMzJbaTkgPj4gMl0gfCAwLCAwLCBIRUFQMzJbaTE0ID4+IDJdIDw8IDIgfCAwKSB8IDA7CiBfbWVtc2V0KEhFQVAzMltpMTUgPj4gMl0gfCAwLCAwLCBIRUFQMzJbaTEwID4+IDJdIDw8IDIgfCAwKSB8IDA7CiBIRUFQRjMyW0hFQVAzMltpNCA+PiAyXSA+PiAyXSA9IDAuMDsKIGk0ID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiBIRUFQMzJbaTE1ICsgNTIgPj4gMl0gPSBpNCAtIChIRUFQMzJbaTEyID4+IDJdIHwgMCk7CiBIRUFQOFtpMTUgKyA2OCA+PiAwXSA9IDA7CiBpMTQgPSBIRUFQMzJbaTE0ID4+IDJdIDw8IDI7CiBpMyA9IF9tYWxsb2MoaTE0KSB8IDA7CiBIRUFQMzJbaTE1ICsgNDggPj4gMl0gPSBpMzsKIF9tZW1zZXQoaTMgfCAwLCAwLCBpMTQgfCAwKSB8IDA7CiBpZiAoKGk0IHwgMCkgPD0gMCkgcmV0dXJuOwogZDEgPSArKGk0ICsgLTEgfCAwKTsKIGkyID0gMDsKIGRvIHsKICBkMTYgPSAuNSAtICtNYXRoX2NvcygrKCsoaTIgfCAwKSAqIDYuMjgzMTg1MzA3MTc5NTg2IC8gZDEpKSAqIC41OwogIEhFQVBGMzJbaTMgKyAoaTIgPDwgMikgPj4gMl0gPSBkMTY7CiAgaTIgPSBpMiArIDEgfCAwOwogfSB3aGlsZSAoKGkyIHwgMCkgIT0gKGk0IHwgMCkpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xNnZlY3RvcklmTlNfOWFsbG9jYXRvcklmRUVFNmFzc2lnbklQZkVFTlNfOWVuYWJsZV9pZklYYWFzcjIxX19pc19mb3J3YXJkX2l0ZXJhdG9ySVRfRUU1dmFsdWVzcjE2aXNfY29uc3RydWN0aWJsZUlmTlNfMTVpdGVyYXRvcl90cmFpdHNJUzdfRTlyZWZlcmVuY2VFRUU1dmFsdWVFdkU0dHlwZUVTN19TN18oaTgsIGkyLCBpMTApIHsKIGk4ID0gaTggfCAwOwogaTIgPSBpMiB8IDA7CiBpMTAgPSBpMTAgfCAwOwogdmFyIGkxID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk5ID0gMDsKIGk5ID0gaTI7CiBpNyA9IGkxMCAtIGk5ID4+IDI7CiBpNSA9IGk4ICsgOCB8IDA7CiBpMSA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpOCA+PiAyXSB8IDA7CiBpNCA9IGk2OwogaWYgKGk3ID4+PiAwIDw9IGkxIC0gaTQgPj4gMiA+Pj4gMCkgewogIGk1ID0gaTggKyA0IHwgMDsKICBpMSA9IChIRUFQMzJbaTUgPj4gMl0gfCAwKSAtIGk0ID4+IDI7CiAgaTggPSBpNyA+Pj4gMCA+IGkxID4+PiAwOwogIGkxID0gaTggPyBpMiArIChpMSA8PCAyKSB8IDAgOiBpMTA7CiAgaTMgPSBpMTsKICBpOSA9IGkzIC0gaTkgfCAwOwogIF9tZW1tb3ZlKGk2IHwgMCwgaTIgfCAwLCBpOSB8IDApIHwgMDsKICBpMiA9IGk2ICsgKGk5ID4+IDIgPDwgMikgfCAwOwogIGlmICghaTgpIHsKICAgaTEgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogICBpZiAoKGkxIHwgMCkgPT0gKGkyIHwgMCkpIHJldHVybjsKICAgSEVBUDMyW2k1ID4+IDJdID0gaTEgKyAofigoaTEgKyAtNCAtIGkyIHwgMCkgPj4+IDIpIDw8IDIpOwogICByZXR1cm47CiAgfQogIGlmICgoaTEgfCAwKSA9PSAoaTEwIHwgMCkpIHJldHVybjsKICBpMiA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgaTMgPSBpMiArICgoKGkxMCArIC00IC0gaTMgfCAwKSA+Pj4gMikgKyAxIDw8IDIpIHwgMDsKICB3aGlsZSAoMSkgewogICBIRUFQMzJbaTIgPj4gMl0gPSBIRUFQMzJbaTEgPj4gMl07CiAgIGkxID0gaTEgKyA0IHwgMDsKICAgaWYgKChpMSB8IDApID09IChpMTAgfCAwKSkgYnJlYWs7IGVsc2UgaTIgPSBpMiArIDQgfCAwOwogIH0KICBIRUFQMzJbaTUgPj4gMl0gPSBpMzsKICByZXR1cm47CiB9CiBpZiAoaTYpIHsKICBpMSA9IGk4ICsgNCB8IDA7CiAgaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogIGlmICgoaTMgfCAwKSAhPSAoaTYgfCAwKSkgSEVBUDMyW2kxID4+IDJdID0gaTMgKyAofigoaTMgKyAtNCAtIGk0IHwgMCkgPj4+IDIpIDw8IDIpOwogIF9fWmRsUHYoaTYpOwogIEhFQVAzMltpNSA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gMDsKICBIRUFQMzJbaTggPj4gMl0gPSAwOwogIGkxID0gMDsKIH0KIGlmIChpNyA+Pj4gMCA+IDEwNzM3NDE4MjMpIHsKICBfX1pOS1N0M19fMTIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUUyMF9fdGhyb3dfbGVuZ3RoX2Vycm9yRXYoaTgpOwogIGkxID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICBpMyA9IEhFQVAzMltpOCA+PiAyXSB8IDA7CiB9IGVsc2UgaTMgPSAwOwogaTEgPSBpMSAtIGkzIHwgMDsKIGlmIChpMSA+PiAyID4+PiAwIDwgNTM2ODcwOTExKSB7CiAgaTEgPSBpMSA+PiAxOwogIGkxID0gaTEgPj4+IDAgPCBpNyA+Pj4gMCA/IGk3IDogaTE7CiAgaWYgKGkxID4+PiAwID4gMTA3Mzc0MTgyMykgewogICBfX1pOS1N0M19fMTIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUUyMF9fdGhyb3dfbGVuZ3RoX2Vycm9yRXYoaTgpOwogICBpMyA9IGkxOwogIH0gZWxzZSBpMyA9IGkxOwogfSBlbHNlIGkzID0gMTA3Mzc0MTgyMzsKIGkxID0gX19abndqKGkzIDw8IDIpIHwgMDsKIGk0ID0gaTggKyA0IHwgMDsKIEhFQVAzMltpNCA+PiAyXSA9IGkxOwogSEVBUDMyW2k4ID4+IDJdID0gaTE7CiBIRUFQMzJbaTUgPj4gMl0gPSBpMSArIChpMyA8PCAyKTsKIGlmICgoaTIgfCAwKSA9PSAoaTEwIHwgMCkpIHJldHVybjsKIGkzID0gaTEgKyAoKChpMTAgKyAtNCAtIGk5IHwgMCkgPj4+IDIpICsgMSA8PCAyKSB8IDA7CiB3aGlsZSAoMSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpMiA9IGkyICsgNCB8IDA7CiAgaWYgKChpMiB8IDApID09IChpMTAgfCAwKSkgYnJlYWs7IGVsc2UgaTEgPSBpMSArIDQgfCAwOwogfQogSEVBUDMyW2k0ID4+IDJdID0gaTM7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckU0cGxheUVkZGRpZChpNiwgZDExLCBkMiwgZDksIGk1LCBkMTApIHsKIGk2ID0gaTYgfCAwOwogZDExID0gK2QxMTsKIGQyID0gK2QyOwogZDkgPSArZDk7CiBpNSA9IGk1IHwgMDsKIGQxMCA9ICtkMTA7CiB2YXIgaTEgPSAwLCBpMyA9IDAsIGQ0ID0gMC4wLCBpNyA9IDAsIGQ4ID0gMC4wLCBpMTIgPSAwOwogZDIgPSArSEVBUEY2NFtpNiA+PiAzXSArIGQyOwogSEVBUEY2NFtpNiA+PiAzXSA9IGQyOwogaTMgPSBpNiArIDQ4IHwgMDsKIGQ4ID0gK0hFQVBGNjRbaTMgPj4gM10gKyAxLjA7CiBIRUFQRjY0W2kzID4+IDNdID0gZDg7CiBpZiAoZDIgPj0gKyhIRUFQMzJbaTYgKyAzNiA+PiAyXSB8IDApKSB7CiAgZDIgPSBkMiAtICsoSEVBUDMyW2k2ICsgNDAgPj4gMl0gfCAwKTsKICBIRUFQRjY0W2k2ID4+IDNdID0gZDI7CiB9CiBpZiAoZDIgPCArKEhFQVAzMltpNiArIDMyID4+IDJdIHwgMCkpIHsKICBkMiA9IGQyICsgKyhIRUFQMzJbaTYgKyA0MCA+PiAyXSB8IDApOwogIEhFQVBGNjRbaTYgPj4gM10gPSBkMjsKIH0KIGkxID0gaTYgKyAyNCB8IDA7CiBkNCA9ICsoSEVBUDMyWzUwODNdIHwgMCkgKiBkOSAvICsoaTUgfCAwKSArICtIRUFQRjY0W2kxID4+IDNdOwogaWYgKGQ4ID4gZDQpIHsKICBIRUFQRjY0W2kzID4+IDNdID0gZDggLSBkNDsKICBpMyA9IF9fWm53aigxMDQpIHwgMDsKICBpNyA9IEhFQVAzMltpNiArIDggPj4gMl0gfCAwOwogIGQxMCA9IGQyIC8gKyhIRUFQMzJbaTcgKyAxMDggPj4gMl0gfCAwKSArIGQxMDsKICBkMTAgPSBkMTAgPCAxLjAgPyBkMTAgOiAxLjA7CiAgX19aTjltYXhpR3JhaW5JMTRoYW5uV2luRnVuY3RvckVDMkVQMTBtYXhpU2FtcGxlZGRkUDIwbWF4aUdyYWluV2luZG93Q2FjaGVJUzBfRShpMywgaTcsIGQxMCA8IDAuMCA/IDAuMCA6IGQxMCwgZDksIGQxMSwgaTYgKyAxNiB8IDApOwogIGk3ID0gaTYgKyAxMiB8IDA7CiAgaTYgPSBIRUFQMzJbaTcgPj4gMl0gfCAwOwogIGk1ID0gX19abndqKDEyKSB8IDA7CiAgSEVBUDMyW2k1ICsgOCA+PiAyXSA9IGkzOwogIEhFQVAzMltpNSArIDQgPj4gMl0gPSBpNjsKICBpMyA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiAgSEVBUDMyW2k1ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kzICsgNCA+PiAyXSA9IGk1OwogIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogIGk2ID0gaTYgKyA4IHwgMDsKICBIRUFQMzJbaTYgPj4gMl0gPSAoSEVBUDMyW2k2ID4+IDJdIHwgMCkgKyAxOwogIGQxMSA9ICsoKF9yYW5kKCkgfCAwKSAlIDEwIHwgMCB8IDApOwogIEhFQVBGNjRbaTEgPj4gM10gPSBkMTE7CiAgaTEgPSBpNzsKIH0gZWxzZSBpMSA9IGk2ICsgMTIgfCAwOwogaTUgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTEgPSBIRUFQMzJbaTUgKyA0ID4+IDJdIHwgMDsKIGlmICgoaTEgfCAwKSA9PSAoaTUgfCAwKSkgewogIGQxMSA9IDAuMDsKICByZXR1cm4gK2QxMTsKIH0KIGk2ID0gaTUgKyA4IHwgMDsKIGk3ID0gaTE7CiBkMiA9IDAuMDsKIGRvIHsKICBpMyA9IGk3ICsgOCB8IDA7CiAgaTEyID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICBkMiA9IGQyICsgK0ZVTkNUSU9OX1RBQkxFX2RpW0hFQVAzMltIRUFQMzJbaTEyID4+IDJdID4+IDJdICYgMzFdKGkxMik7CiAgaTMgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogIGlmICghKEhFQVA4W2kzICsgNCA+PiAwXSB8IDApKSBpMSA9IEhFQVAzMltpNyArIDQgPj4gMl0gfCAwOyBlbHNlIHsKICAgaWYgKGkzKSBGVU5DVElPTl9UQUJMRV92aVtIRUFQMzJbKEhFQVAzMltpMyA+PiAyXSB8IDApICsgOCA+PiAyXSAmIDUxMV0oaTMpOwogICBpNyA9IGk3ICsgNCB8IDA7CiAgIGkxMiA9IEhFQVAzMltpNyA+PiAyXSB8IDA7CiAgIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgSEVBUDMyW2kzICsgNCA+PiAyXSA9IGkxMjsKICAgSEVBUDMyW0hFQVAzMltpNyA+PiAyXSA+PiAyXSA9IGkzOwogICBIRUFQMzJbaTYgPj4gMl0gPSAoSEVBUDMyW2k2ID4+IDJdIHwgMCkgKyAtMTsKICAgX19aZGxQdihpMSk7CiAgIGkxID0gaTEyOwogIH0KICBpNyA9IGkxOwogfSB3aGlsZSAoKGk3IHwgMCkgIT0gKGk1IHwgMCkpOwogcmV0dXJuICtkMjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFQzJJUzNfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVM0X0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVNCX1BTM19FRTV2YWx1ZUVOUzRfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMzM5MjsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNjYsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVDMklTM19OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzRfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJU0JfUFMzX0VFNXZhbHVlRU5TNF81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIzNTA0OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2OCwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVFQzJJUzNfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVM0X0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVNCX1BTM19FRTV2YWx1ZUVOUzRfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMzQ0ODsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNjcsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkyMW1heGlGRlRPY3RhdmVBbmFseXplckVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIyOTEyOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg1OSwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVDMklTMl9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzNfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJU0FfUFMyX0VFNXZhbHVlRU5TM181X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIzMTMyOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2MiwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aURpc3RvcnRpb25FQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMTkyMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzcsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMDg4NDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMjgsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEQ0Jsb2NrZXJFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMjE4NDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNDAsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlMYWdFeHBJZEVFQzJJUzJfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMzX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVNBX1BTMl9FRTV2YWx1ZUVOUzNfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMTIxNjsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzEsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFNHBsYXlFZGRpZChpMTIsIGQxMSwgZDksIGkzLCBkMTApIHsKIGkxMiA9IGkxMiB8IDA7CiBkMTEgPSArZDExOwogZDkgPSArZDk7CiBpMyA9IGkzIHwgMDsKIGQxMCA9ICtkMTA7CiB2YXIgaTEgPSAwLCBkMiA9IDAuMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgZDcgPSAwLjAsIGQ4ID0gMC4wOwogZDIgPSArSEVBUEY2NFtpMTIgPj4gM10gKyBkMTE7CiBIRUFQRjY0W2kxMiA+PiAzXSA9IGQyOwogaTQgPSBpMTIgKyAzMiB8IDA7CiBkOCA9ICtIRUFQRjY0W2k0ID4+IDNdICsgMS4wOwogSEVBUEY2NFtpNCA+PiAzXSA9IGQ4OwogaTUgPSBIRUFQMzJbaTEyICsgOCA+PiAyXSB8IDA7CiBpNiA9IGk1ICsgMTA4IHwgMDsKIGQ3ID0gKyhIRUFQMzJbaTYgPj4gMl0gfCAwKTsKIGlmIChkMiA+IGQ3KSB7CiAgZDIgPSBkMiAtIGQ3OwogIEhFQVBGNjRbaTEyID4+IDNdID0gZDI7CiB9CiBpZiAoZDIgPCAwLjApIHsKICBkMiA9IGQyICsgZDc7CiAgSEVBUEY2NFtpMTIgPj4gM10gPSBkMjsKIH0KIGkxID0gaTEyICsgMjQgfCAwOwogZDcgPSArKEhFQVAzMls1MDgzXSB8IDApICogZDkgLyArKGkzIHwgMCkgKyArSEVBUEY2NFtpMSA+PiAzXTsKIGlmIChkOCA+IGQ3KSB7CiAgSEVBUEY2NFtpNCA+PiAzXSA9IGQ4IC0gZDc7CiAgaTQgPSBfX1pud2ooMTA0KSB8IDA7CiAgZDEwID0gZDIgLyArKEhFQVAzMltpNiA+PiAyXSB8IDApICsgZDEwOwogIGQxMCA9IGQxMCA8IDEuMCA/IGQxMCA6IDEuMDsKICBfX1pOOW1heGlHcmFpbkkxNGhhbm5XaW5GdW5jdG9yRUMyRVAxMG1heGlTYW1wbGVkZGRQMjBtYXhpR3JhaW5XaW5kb3dDYWNoZUlTMF9FKGk0LCBpNSwgZDEwIDwgMC4wID8gMC4wIDogZDEwLCBkOSwgZDExID4gMC4wID8gMS4wIDogLTEuMCwgaTEyICsgMTYgfCAwKTsKICBpMTIgPSBpMTIgKyAxMiB8IDA7CiAgaTYgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKICBpNSA9IF9fWm53aigxMikgfCAwOwogIEhFQVAzMltpNSArIDggPj4gMl0gPSBpNDsKICBIRUFQMzJbaTUgKyA0ID4+IDJdID0gaTY7CiAgaTQgPSBIRUFQMzJbaTYgPj4gMl0gfCAwOwogIEhFQVAzMltpNSA+PiAyXSA9IGk0OwogIEhFQVAzMltpNCArIDQgPj4gMl0gPSBpNTsKICBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKICBpNiA9IGk2ICsgOCB8IDA7CiAgSEVBUDMyW2k2ID4+IDJdID0gKEhFQVAzMltpNiA+PiAyXSB8IDApICsgMTsKICBkMTEgPSArKChfcmFuZCgpIHwgMCkgJSAxMCB8IDAgfCAwKTsKICBIRUFQRjY0W2kxID4+IDNdID0gZDExOwogIGkxID0gaTEyOwogfSBlbHNlIGkxID0gaTEyICsgMTIgfCAwOwogaTQgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTEgPSBIRUFQMzJbaTQgKyA0ID4+IDJdIHwgMDsKIGlmICgoaTEgfCAwKSA9PSAoaTQgfCAwKSkgewogIGQxMSA9IDAuMDsKICByZXR1cm4gK2QxMTsKIH0KIGk1ID0gaTQgKyA4IHwgMDsKIGk2ID0gaTE7CiBkMiA9IDAuMDsKIGRvIHsKICBpMyA9IGk2ICsgOCB8IDA7CiAgaTEyID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICBkMiA9IGQyICsgK0ZVTkNUSU9OX1RBQkxFX2RpW0hFQVAzMltIRUFQMzJbaTEyID4+IDJdID4+IDJdICYgMzFdKGkxMik7CiAgaTMgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogIGlmICghKEhFQVA4W2kzICsgNCA+PiAwXSB8IDApKSBpMSA9IEhFQVAzMltpNiArIDQgPj4gMl0gfCAwOyBlbHNlIHsKICAgaWYgKGkzKSBGVU5DVElPTl9UQUJMRV92aVtIRUFQMzJbKEhFQVAzMltpMyA+PiAyXSB8IDApICsgOCA+PiAyXSAmIDUxMV0oaTMpOwogICBpNiA9IGk2ICsgNCB8IDA7CiAgIGkxMiA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiAgIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgSEVBUDMyW2kzICsgNCA+PiAyXSA9IGkxMjsKICAgSEVBUDMyW0hFQVAzMltpNiA+PiAyXSA+PiAyXSA9IGkzOwogICBIRUFQMzJbaTUgPj4gMl0gPSAoSEVBUDMyW2k1ID4+IDJdIHwgMCkgKyAtMTsKICAgX19aZGxQdihpMSk7CiAgIGkxID0gaTEyOwogIH0KICBpNiA9IGkxOwogfSB3aGlsZSAoKGk2IHwgMCkgIT0gKGk0IHwgMCkpOwogcmV0dXJuICtkMjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMm1heGlFbnZlbG9wZUVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIwNzkyOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgyNywgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTExbWF4aUZsYW5nZXJFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMjAwODsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzgsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMTMxMjsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzIsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlGaWx0ZXJFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMDk4ODsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMjksIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlDaG9ydXNFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMjA5NjsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzksIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aVNuYXJlRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFKGk2LCBpNSwgaTQsIGkxKSB7CiBpNiA9IGk2IHwgMDsKIGk1ID0gaTUgfCAwOwogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTcgPSAwOwogSEVBUDMyW2k2ID4+IDJdID0gaTU7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDIwKSB8IDA7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMiAmIDEpKSB7CiAgaTIgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NSwgaTIgfCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fWmRsUHYoaTEpOwogICBicmVhazsKICB9CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxICsgOCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gMjI0NDg7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2kxICsgMTYgPj4gMl0gPSBpMjsKICBIRUFQMzJbaTEgKyAxMiA+PiAyXSA9IGk1OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpNiArIDQgPj4gMl0gPSBpMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0gZWxzZSByZXR1cm47CiB9IGVsc2UgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7IHdoaWxlICgwKTsKIF9fX2N4YV9iZWdpbl9jYXRjaChpMyB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDQzLCBpNCB8IDAsIGk1IHwgMCk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNyAmIDEpKSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdigyKTsKICBfX1RIUkVXX18gPSAwOwogfQogaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdigzKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpNyAmIDEpIHsKICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJOW1heGlDbG9ja0VDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIyNjI0OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg0NSwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpS2lja0VDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIyMzYwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg0MiwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIyOTY4OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2MCwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSGF0c0VDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIyNTM2OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg0NCwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpU1ZGRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFKGk2LCBpNSwgaTQsIGkxKSB7CiBpNiA9IGk2IHwgMDsKIGk1ID0gaTUgfCAwOwogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTcgPSAwOwogSEVBUDMyW2k2ID4+IDJdID0gaTU7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDIwKSB8IDA7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMiAmIDEpKSB7CiAgaTIgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NSwgaTIgfCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fWmRsUHYoaTEpOwogICBicmVhazsKICB9CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxICsgOCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gMjIyNjA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2kxICsgMTYgPj4gMl0gPSBpMjsKICBIRUFQMzJbaTEgKyAxMiA+PiAyXSA9IGk1OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpNiArIDQgPj4gMl0gPSBpMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0gZWxzZSByZXR1cm47CiB9IGVsc2UgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7IHdoaWxlICgwKTsKIF9fX2N4YV9iZWdpbl9jYXRjaChpMyB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDQxLCBpNCB8IDAsIGk1IHwgMCk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNyAmIDEpKSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdigyKTsKICBfX1RIUkVXX18gPSAwOwogfQogaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdigzKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpNyAmIDEpIHsKICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlPc2NFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMDY2NDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMjYsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIxMDg0OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzMCwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFKGk2LCBpNSwgaTQsIGkxKSB7CiBpNiA9IGk2IHwgMDsKIGk1ID0gaTUgfCAwOwogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTcgPSAwOwogSEVBUDMyW2k2ID4+IDJdID0gaTU7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDIwKSB8IDA7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMiAmIDEpKSB7CiAgaTIgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NSwgaTIgfCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fWmRsUHYoaTEpOwogICBicmVhazsKICB9CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxICsgOCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gMjE0NTY7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2kxICsgMTYgPj4gMl0gPSBpMjsKICBIRUFQMzJbaTEgKyAxMiA+PiAyXSA9IGk1OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpNiArIDQgPj4gMl0gPSBpMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0gZWxzZSByZXR1cm47CiB9IGVsc2UgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7IHdoaWxlICgwKTsKIF9fX2N4YV9iZWdpbl9jYXRjaChpMyB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDMzLCBpNCB8IDAsIGk1IHwgMCk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNyAmIDEpKSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdigyKTsKICBfX1RIUkVXX18gPSAwOwogfQogaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdigzKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpNyAmIDEpIHsKICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMzAyNDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNjEsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRShpNiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk3ID0gMDsKIEhFQVAzMltpNiA+PiAyXSA9IGk1OwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCAyMCkgfCAwOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTIgJiAxKSkgewogIGkyID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODUsIGkyIHwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX1pkbFB2KGkxKTsKICAgYnJlYWs7CiAgfQogIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IDIxNjk2OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpMSArIDE2ID4+IDJdID0gaTI7CiAgSEVBUDMyW2kxICsgMTIgPj4gMl0gPSBpNTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9IGVsc2UgcmV0dXJuOwogfSBlbHNlIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOyB3aGlsZSAoMCk7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTMgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzNSwgaTQgfCAwLCBpNSB8IDApOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTcgJiAxKSkgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3YoMik7CiAgX19USFJFV19fID0gMDsKIH0KIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3YoMyk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRHluRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFKGk2LCBpNSwgaTQsIGkxKSB7CiBpNiA9IGk2IHwgMDsKIGk1ID0gaTUgfCAwOwogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTcgPSAwOwogSEVBUDMyW2k2ID4+IDJdID0gaTU7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDIwKSB8IDA7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMiAmIDEpKSB7CiAgaTIgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NSwgaTIgfCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fWmRsUHYoaTEpOwogICBicmVhazsKICB9CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxICsgOCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gMjE1NTY7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2kxICsgMTYgPj4gMl0gPSBpMjsKICBIRUFQMzJbaTEgKyAxMiA+PiAyXSA9IGk1OwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfQogIEhFQVAzMltpNiArIDQgPj4gMl0gPSBpMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0gZWxzZSByZXR1cm47CiB9IGVsc2UgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7IHdoaWxlICgwKTsKIF9fX2N4YV9iZWdpbl9jYXRjaChpMyB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDM0LCBpNCB8IDAsIGk1IHwgMCk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNyAmIDEpKSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdigyKTsKICBfX1RIUkVXX18gPSAwOwogfQogaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdigzKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpNyAmIDEpIHsKICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUoaTYsIGk1LCBpNCwgaTEpIHsKIGk2ID0gaTYgfCAwOwogaTUgPSBpNSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNyA9IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgMjApIHwgMDsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkyICYgMSkpIHsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg1LCBpMiB8IDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19aZGxQdihpMSk7CiAgIGJyZWFrOwogIH0KICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgKyA4ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAyMTg0ODsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGk3ID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGk3ICYgMSkgewogICBpNyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTcpOwogIH0KICBIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IGkyOwogIEhFQVAzMltpMSArIDEyID4+IDJdID0gaTU7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpNyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpNyAmIDEpIHsKICAgaTcgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKICB9CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGkxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTcgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTcgJiAxKSB7CiAgIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpNyk7CiAgfSBlbHNlIHJldHVybjsKIH0gZWxzZSBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsgd2hpbGUgKDApOwogX19fY3hhX2JlZ2luX2NhdGNoKGkzIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzYsIGk0IHwgMCwgaTUgfCAwKTsKIGk3ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk3ICYgMSkpIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92KDIpOwogIF9fVEhSRVdfXyA9IDA7CiB9CiBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTcgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGk3ICYgMSkgewogIGk3ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGk3KTsKIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKfQoKZnVuY3Rpb24gX19fc3RkaW9fd3JpdGUoaTE0LCBpMiwgaTEpIHsKIGkxNCA9IGkxNCB8IDA7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEyID0gMCwgaTEzID0gMCwgaTE1ID0gMDsKIGkxNSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDQ4IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMTEgPSBpMTUgKyAxNiB8IDA7CiBpMTAgPSBpMTU7CiBpMyA9IGkxNSArIDMyIHwgMDsKIGkxMiA9IGkxNCArIDI4IHwgMDsKIGk0ID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSBpNDsKIGkxMyA9IGkxNCArIDIwIHwgMDsKIGk0ID0gKEhFQVAzMltpMTMgPj4gMl0gfCAwKSAtIGk0IHwgMDsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSBpNDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSBpMjsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gaTE7CiBpOCA9IGkxNCArIDYwIHwgMDsKIGk5ID0gaTE0ICsgNDQgfCAwOwogaTIgPSAyOwogaTQgPSBpNCArIGkxIHwgMDsKIHdoaWxlICgxKSB7CiAgaWYgKCEoSEVBUDMyWzU5MzVdIHwgMCkpIHsKICAgSEVBUDMyW2kxMSA+PiAyXSA9IEhFQVAzMltpOCA+PiAyXTsKICAgSEVBUDMyW2kxMSArIDQgPj4gMl0gPSBpMzsKICAgSEVBUDMyW2kxMSArIDggPj4gMl0gPSBpMjsKICAgaTYgPSBfX19zeXNjYWxsX3JldChfX19zeXNjYWxsMTQ2KDE0NiwgaTExIHwgMCkgfCAwKSB8IDA7CiAgfSBlbHNlIHsKICAgX3B0aHJlYWRfY2xlYW51cF9wdXNoKDMxMCwgaTE0IHwgMCk7CiAgIEhFQVAzMltpMTAgPj4gMl0gPSBIRUFQMzJbaTggPj4gMl07CiAgIEhFQVAzMltpMTAgKyA0ID4+IDJdID0gaTM7CiAgIEhFQVAzMltpMTAgKyA4ID4+IDJdID0gaTI7CiAgIGk2ID0gX19fc3lzY2FsbF9yZXQoX19fc3lzY2FsbDE0NigxNDYsIGkxMCB8IDApIHwgMCkgfCAwOwogICBfcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKICB9CiAgaWYgKChpNCB8IDApID09IChpNiB8IDApKSB7CiAgIGk0ID0gNjsKICAgYnJlYWs7CiAgfQogIGlmICgoaTYgfCAwKSA8IDApIHsKICAgaTQgPSA4OwogICBicmVhazsKICB9CiAgaTQgPSBpNCAtIGk2IHwgMDsKICBpNSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogIGlmIChpNiA+Pj4gMCA8PSBpNSA+Pj4gMCkgaWYgKChpMiB8IDApID09IDIpIHsKICAgSEVBUDMyW2kxMiA+PiAyXSA9IChIRUFQMzJbaTEyID4+IDJdIHwgMCkgKyBpNjsKICAgaTcgPSBpNTsKICAgaTIgPSAyOwogIH0gZWxzZSBpNyA9IGk1OyBlbHNlIHsKICAgaTcgPSBIRUFQMzJbaTkgPj4gMl0gfCAwOwogICBIRUFQMzJbaTEyID4+IDJdID0gaTc7CiAgIEhFQVAzMltpMTMgPj4gMl0gPSBpNzsKICAgaTcgPSBIRUFQMzJbaTMgKyAxMiA+PiAyXSB8IDA7CiAgIGk2ID0gaTYgLSBpNSB8IDA7CiAgIGkzID0gaTMgKyA4IHwgMDsKICAgaTIgPSBpMiArIC0xIHwgMDsKICB9CiAgSEVBUDMyW2kzID4+IDJdID0gKEhFQVAzMltpMyA+PiAyXSB8IDApICsgaTY7CiAgSEVBUDMyW2kzICsgNCA+PiAyXSA9IGk3IC0gaTY7CiB9CiBpZiAoKGk0IHwgMCkgPT0gNikgewogIGkxMSA9IEhFQVAzMltpOSA+PiAyXSB8IDA7CiAgSEVBUDMyW2kxNCArIDE2ID4+IDJdID0gaTExICsgKEhFQVAzMltpMTQgKyA0OCA+PiAyXSB8IDApOwogIGkxNCA9IGkxMTsKICBIRUFQMzJbaTEyID4+IDJdID0gaTE0OwogIEhFQVAzMltpMTMgPj4gMl0gPSBpMTQ7CiB9IGVsc2UgaWYgKChpNCB8IDApID09IDgpIHsKICBIRUFQMzJbaTE0ICsgMTYgPj4gMl0gPSAwOwogIEhFQVAzMltpMTIgPj4gMl0gPSAwOwogIEhFQVAzMltpMTMgPj4gMl0gPSAwOwogIEhFQVAzMltpMTQgPj4gMl0gPSBIRUFQMzJbaTE0ID4+IDJdIHwgMzI7CiAgaWYgKChpMiB8IDApID09IDIpIGkxID0gMDsgZWxzZSBpMSA9IGkxIC0gKEhFQVAzMltpMyArIDQgPj4gMl0gfCAwKSB8IDA7CiB9CiBTVEFDS1RPUCA9IGkxNTsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xNm1heGlNRkNDQW5hbHlzZXJJZEU0bWZjY0VSTlN0M19fMTZ2ZWN0b3JJZk5TMV85YWxsb2NhdG9ySWZFRUVFUk5TMl9JZE5TM19JZEVFRUUoaTEzLCBpMSwgaTEwKSB7CiBpMTMgPSBpMTMgfCAwOwogaTEgPSBpMSB8IDA7CiBpMTAgPSBpMTAgfCAwOwogdmFyIGQyID0gMC4wLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMSA9IDAsIGkxMiA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpMTIgPSBpMTMgKyA0IHwgMDsKIGkxID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiBpZiAoaTEpIHsKICBpNSA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogIGk2ID0gSEVBUDMyW2kxMyArIDQwID4+IDJdIHwgMDsKICBpZiAoIWk2KSB7CiAgIF9tZW1zZXQoaTUgfCAwLCAwLCAoaTEgPj4+IDAgPiAxID8gaTEgPDwgMyA6IDgpIHwgMCkgfCAwOwogICBpMSA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogIH0gZWxzZSB7CiAgIGk3ID0gSEVBUDMyW2kxMyArIDM2ID4+IDJdIHwgMDsKICAgaTkgPSAwOwogICBkbyB7CiAgICBpNCA9IGk1ICsgKGk5IDw8IDMpIHwgMDsKICAgIEhFQVBGNjRbaTQgPj4gM10gPSAwLjA7CiAgICBkMiA9IDAuMDsKICAgIGk4ID0gMDsKICAgIGRvIHsKICAgICBpMTEgPSBpNyArICgoTWF0aF9pbXVsKGk4LCBpMSkgfCAwKSArIGk5IDw8IDMpIHwgMDsKICAgICBkMiA9IGQyICsgK0hFQVBGNjRbaTExID4+IDNdICogK0hFQVBGMzJbaTMgKyAoaTggPDwgMikgPj4gMl07CiAgICAgSEVBUEY2NFtpNCA+PiAzXSA9IGQyOwogICAgIGk4ID0gaTggKyAxIHwgMDsKICAgIH0gd2hpbGUgKChpOCB8IDApICE9IChpNiB8IDApKTsKICAgIGk5ID0gaTkgKyAxIHwgMDsKICAgfSB3aGlsZSAoKGk5IHwgMCkgIT0gKGkxIHwgMCkpOwogIH0KICBpZiAoaTEpIHsKICAgaTMgPSBIRUFQMzJbaTEzID4+IDJdIHwgMDsKICAgaTUgPSAwOwogICBkbyB7CiAgICBpNCA9IGkzICsgKGk1IDw8IDMpIHwgMDsKICAgIGQyID0gK0hFQVBGNjRbaTQgPj4gM107CiAgICBpZiAoZDIgPiAxLjBlLTA2KSBkMiA9ICtNYXRoX2xvZygrKGQyICogZDIpKTsgZWxzZSBkMiA9IDAuMDsKICAgIEhFQVBGNjRbaTQgPj4gM10gPSBkMjsKICAgIGk1ID0gaTUgKyAxIHwgMDsKICAgfSB3aGlsZSAoKGk1IHwgMCkgIT0gKGkxIHwgMCkpOwogIH0KIH0KIGkxMSA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogaTEgPSBpMTMgKyA4IHwgMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGlmICghaTMpIHJldHVybjsKIF9tZW1zZXQoaTExIHwgMCwgMCwgKGkzID4+PiAwID4gMSA/IGkzIDw8IDMgOiA4KSB8IDApIHwgMDsKIGkxMCA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpZiAoIWkxMCkgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKIGkzID0gKGkxIHwgMCkgPT0gMDsKIGk0ID0gaTEzICsgNDQgfCAwOwogaTggPSAwOwogZG8gewogIGlmICghaTMpIHsKICAgaTUgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogICBpNiA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogICBpNyA9IGkxMSArIChpOCA8PCAzKSB8IDA7CiAgIGQyID0gK0hFQVBGNjRbaTcgPj4gM107CiAgIGk5ID0gMDsKICAgZG8gewogICAgaTEyID0gaTUgKyAoKE1hdGhfaW11bChpOSwgaTEwKSB8IDApICsgaTggPDwgMykgfCAwOwogICAgZDIgPSBkMiArICtIRUFQRjY0W2kxMiA+PiAzXSAqICtIRUFQRjY0W2k2ICsgKGk5IDw8IDMpID4+IDNdOwogICAgSEVBUEY2NFtpNyA+PiAzXSA9IGQyOwogICAgaTkgPSBpOSArIDEgfCAwOwogICB9IHdoaWxlICgoaTkgfCAwKSAhPSAoaTEgfCAwKSk7CiAgfQogIGk4ID0gaTggKyAxIHwgMDsKIH0gd2hpbGUgKChpOCB8IDApICE9IChpMTAgfCAwKSk7CiBkMiA9ICsoaTEwID4+PiAwKTsKIGkxID0gMDsKIGRvIHsKICBpMTMgPSBpMTEgKyAoaTEgPDwgMykgfCAwOwogIEhFQVBGNjRbaTEzID4+IDNdID0gK0hFQVBGNjRbaTEzID4+IDNdIC8gZDI7CiAgaTEgPSBpMSArIDEgfCAwOwogfSB3aGlsZSAoKGkxIHwgMCkgIT0gKGkxMCB8IDApKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aN1JlYWxGRlRpUGZTX1NfKGk0LCBpMiwgaTEzLCBpMTIpIHsKIGk0ID0gaTQgfCAwOwogaTIgPSBpMiB8IDA7CiBpMTMgPSBpMTMgfCAwOwogaTEyID0gaTEyIHwgMDsKIHZhciBkMSA9IDAuMCwgaTMgPSAwLCBkNSA9IDAuMCwgZDYgPSAwLjAsIGQ3ID0gMC4wLCBkOCA9IDAuMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTQgPSAwLCBkMTUgPSAwLjAsIGQxNiA9IDAuMCwgZDE3ID0gMC4wLCBkMTggPSAwLjAsIGQxOSA9IDAuMCwgaTIwID0gMCwgaTIxID0gMDsKIGk5ID0gKGk0IHwgMCkgLyAyIHwgMDsKIGQxID0gMy4xNDE1OTI2NTM1ODk3OTMgLyArKGk5IHwgMCk7CiBpMTEgPSBpOSA8PCAyOwogaTEwID0gX21hbGxvYyhpMTEpIHwgMDsKIGkxMSA9IF9tYWxsb2MoaTExKSB8IDA7CiBpZiAoKGk0IHwgMCkgPiAxKSB7CiAgaTMgPSAwOwogIGRvIHsKICAgaTE0ID0gaTMgPDwgMTsKICAgSEVBUDMyW2kxMCArIChpMyA8PCAyKSA+PiAyXSA9IEhFQVAzMltpMiArIChpMTQgPDwgMikgPj4gMl07CiAgIEhFQVAzMltpMTEgKyAoaTMgPDwgMikgPj4gMl0gPSBIRUFQMzJbaTIgKyAoKGkxNCB8IDEpIDw8IDIpID4+IDJdOwogICBpMyA9IGkzICsgMSB8IDA7CiAgfSB3aGlsZSAoKGkzIHwgMCkgPCAoaTkgfCAwKSk7CiB9CiBfX1ozRkZUaWJQZlNfU19TXyhpOSwgMCwgaTEwLCBpMTEsIGkxMywgaTEyKTsKIGQ4ID0gZDE7CiBkNyA9ICtNYXRoX3NpbigrKGQ4ICogLjUpKTsKIGQ3ID0gZDcgKiAoZDcgKiAtMi4wKTsKIGQ4ID0gK01hdGhfc2luKCtkOCk7CiBpMyA9IChpNCB8IDApIC8gNCB8IDA7CiBpZiAoKGk0IHwgMCkgPD0gNykgewogIGQ3ID0gK0hFQVBGMzJbaTEzID4+IDJdOwogIGQ4ID0gK0hFQVBGMzJbaTEyID4+IDJdOwogIGQ4ID0gZDcgKyBkODsKICBIRUFQRjMyW2kxMyA+PiAyXSA9IGQ4OwogIGQ4ID0gK0hFQVBGMzJbaTEyID4+IDJdOwogIGQ4ID0gZDcgLSBkODsKICBIRUFQRjMyW2kxMiA+PiAyXSA9IGQ4OwogIF9mcmVlKGkxMCk7CiAgX2ZyZWUoaTExKTsKICByZXR1cm47CiB9CiBpMiA9IDE7CiBkNSA9IGQ4OwogZDYgPSBkNyArIDEuMDsKIHdoaWxlICgxKSB7CiAgaTE0ID0gaTkgLSBpMiB8IDA7CiAgaTIxID0gaTEzICsgKGkyIDw8IDIpIHwgMDsKICBkMTcgPSArSEVBUEYzMltpMjEgPj4gMl07CiAgaTQgPSBpMTMgKyAoaTE0IDw8IDIpIHwgMDsKICBkMTYgPSArSEVBUEYzMltpNCA+PiAyXTsKICBkMTggPSAoZDE3ICsgZDE2KSAqIC41OwogIGkyMCA9IGkxMiArIChpMiA8PCAyKSB8IDA7CiAgZDE5ID0gK0hFQVBGMzJbaTIwID4+IDJdOwogIGkxNCA9IGkxMiArIChpMTQgPDwgMikgfCAwOwogIGQxID0gK0hFQVBGMzJbaTE0ID4+IDJdOwogIGQxNSA9IChkMTkgLSBkMSkgKiAuNTsKICBkMSA9IChkMTkgKyBkMSkgKiAuNTsKICBkMTYgPSAoZDE3IC0gZDE2KSAqIC0uNTsKICBkMTcgPSBkNiAqIGQxOwogIGQxOSA9IGQ1ICogZDE2OwogIEhFQVBGMzJbaTIxID4+IDJdID0gZDE4ICsgZDE3IC0gZDE5OwogIGQxNiA9IGQ2ICogZDE2OwogIGQxID0gZDUgKiBkMTsKICBIRUFQRjMyW2kyMCA+PiAyXSA9IGQxNiArIGQxNSArIGQxOwogIEhFQVBGMzJbaTQgPj4gMl0gPSBkMTkgKyAoZDE4IC0gZDE3KTsKICBIRUFQRjMyW2kxNCA+PiAyXSA9IGQxNiAtIGQxNSArIGQxOwogIGQxID0gZDYgKyAoZDcgKiBkNiAtIGQ4ICogZDUpOwogIGkyID0gaTIgKyAxIHwgMDsKICBpZiAoKGkyIHwgMCkgPj0gKGkzIHwgMCkpIGJyZWFrOyBlbHNlIHsKICAgZDUgPSBkNSArIChkNyAqIGQ1ICsgZDggKiBkNik7CiAgIGQ2ID0gZDE7CiAgfQogfQogZDE4ID0gK0hFQVBGMzJbaTEzID4+IDJdOwogZDE5ID0gK0hFQVBGMzJbaTEyID4+IDJdOwogZDE5ID0gZDE4ICsgZDE5OwogSEVBUEYzMltpMTMgPj4gMl0gPSBkMTk7CiBkMTkgPSArSEVBUEYzMltpMTIgPj4gMl07CiBkMTkgPSBkMTggLSBkMTk7CiBIRUFQRjMyW2kxMiA+PiAyXSA9IGQxOTsKIF9mcmVlKGkxMCk7CiBfZnJlZShpMTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXI5Y2FsY3VsYXRlRVJOU3QzX18xNnZlY3RvcklmTlMwXzlhbGxvY2F0b3JJZkVFRUUoaTE1LCBpMSkgewogaTE1ID0gaTE1IHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgZDMgPSAwLjAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGQ3ID0gMC4wLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEyID0gMCwgaTEzID0gMCwgaTE0ID0gMDsKIGkxMyA9IEhFQVAzMltpMTUgKyA0ID4+IDJdIHwgMDsKIGlmICgoaTEzIHwgMCkgPiAwKSB7CiAgaTYgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogIGk4ID0gaTE1ICsgNTYgfCAwOwogIGk5ID0gaTE1ICsgNTIgfCAwOwogIGkxMCA9IEhFQVAzMltpMTUgKyA0OCA+PiAyXSB8IDA7CiAgaTExID0gaTE1ICsgMjggfCAwOwogIGk0ID0gMDsKICBpMSA9IDA7CiAgaTEyID0gMDsKICBkMyA9IDAuMDsKICB3aGlsZSAoMSkgewogICBpNCA9IGk0ICsgMSB8IDA7CiAgIGQzID0gZDMgKyArSEVBUEYzMltpNiArIChpMTIgPDwgMikgPj4gMl0gKiAoK0hFQVBGMzJbaTggPj4gMl0gKyArKGkxMiB8IDApICogK0hFQVBGMzJbaTkgPj4gMl0pOwogICBpNSA9IEhFQVAzMltpMTAgKyAoaTEyIDw8IDIpID4+IDJdIHwgMDsKICAgaWYgKChpNSB8IDApICE9IChpMSB8IDApKSBpZiAoKGkxIHwgMCkgPCAoaTUgfCAwKSkgewogICAgZDMgPSBkMyAvICsoaTQgfCAwKTsKICAgIGkyID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiAgICBkbyB7CiAgICAgSEVBUEYzMltpMiArIChpMSA8PCAyKSA+PiAyXSA9IGQzOwogICAgIGkxID0gaTEgKyAxIHwgMDsKICAgIH0gd2hpbGUgKChpMSB8IDApICE9IChpNSB8IDApKTsKICAgIGk0ID0gMDsKICAgIGQzID0gMC4wOwogICB9IGVsc2UgewogICAgaTQgPSAwOwogICAgZDMgPSAwLjA7CiAgIH0KICAgaTEyID0gaTEyICsgMSB8IDA7CiAgIGlmICgoaTEyIHwgMCkgPj0gKGkxMyB8IDApKSBicmVhazsgZWxzZSBpMSA9IGk1OwogIH0KICBpZiAoKGk0IHwgMCkgPiAwKSB7CiAgIGkyID0gaTE1ICsgOCB8IDA7CiAgIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKICAgaWYgKChpNSB8IDApIDwgKGkxIHwgMCkpIEhFQVBGMzJbKEhFQVAzMltpMTUgKyAyOCA+PiAyXSB8IDApICsgKGk1IDw8IDIpID4+IDJdID0gZDMgLyArKGk0IHwgMCk7CiAgfSBlbHNlIGkxNCA9IDk7CiB9IGVsc2UgaTE0ID0gOTsKIGlmICgoaTE0IHwgMCkgPT0gOSkgewogIGkxID0gaTE1ICsgOCB8IDA7CiAgaTIgPSBpMTsKICBpMSA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiB9CiBpZiAoKGkxIHwgMCkgPD0gMCkgcmV0dXJuOwogaTkgPSBIRUFQMzJbaTE1ICsgMjggPj4gMl0gfCAwOwogaTEwID0gSEVBUDMyW2kxNSArIDMyID4+IDJdIHwgMDsKIGkxMSA9IGkxNSArIDM2IHwgMDsKIGkxMiA9IGkxNSArIDQ0IHwgMDsKIGk1ID0gaTE1ICsgNDAgfCAwOwogaTggPSAwOwogZG8gewogIGQzID0gK0hFQVBGMzJbaTkgKyAoaTggPDwgMikgPj4gMl07CiAgaTYgPSBpMTAgKyAoaTggPDwgMikgfCAwOwogIGQ3ID0gK0hFQVBGMzJbaTYgPj4gMl07CiAgZG8gaWYgKCEoZDMgPj0gZDcpKSB7CiAgIGkxID0gKEhFQVAzMltpMTEgPj4gMl0gfCAwKSArIChpOCA8PCAyKSB8IDA7CiAgIGk0ID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICAgaWYgKChpNCB8IDApID4gMCkgewogICAgSEVBUDMyW2kxID4+IDJdID0gaTQgKyAtMTsKICAgIGJyZWFrOwogICB9IGVsc2UgewogICAgSEVBUEYzMltpNiA+PiAyXSA9IGQ3ICogK0hFQVBGMzJbaTEyID4+IDJdOwogICAgYnJlYWs7CiAgIH0KICB9IGVsc2UgewogICBIRUFQRjMyW2k2ID4+IDJdID0gZDM7CiAgIEhFQVAzMlsoSEVBUDMyW2kxMSA+PiAyXSB8IDApICsgKGk4IDw8IDIpID4+IDJdID0gSEVBUDMyW2k1ID4+IDJdOwogIH0gd2hpbGUgKDApOwogIGk4ID0gaTggKyAxIHwgMDsKIH0gd2hpbGUgKChpOCB8IDApIDwgKEhFQVAzMltpMiA+PiAyXSB8IDApKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjltYXhpU25hcmU0cGxheUV2KGk4KSB7CiBpOCA9IGk4IHwgMDsKIHZhciBkMSA9IDAuMCwgZDIgPSAwLjAsIGkzID0gMCwgZDQgPSAwLjAsIGQ1ID0gMC4wLCBpNiA9IDAsIGk3ID0gMDsKIGk3ID0gaTggKyAyMzIgfCAwOwogZDEgPSArX19aTjdtYXhpRW52NGFkc3JFZGkoaTggKyAxNzYgfCAwLCAxLjAsIEhFQVAzMltpNyA+PiAyXSB8IDApOwogaTYgPSBpOCArIDI0IHwgMDsKIEhFQVBGNjRbaTYgPj4gM10gPSBkMTsKIGlmIChIRUFQOFtpOCArIDQ4ID4+IDBdIHwgMCkgewogIGQxID0gK01hdGhfYWJzKCsoMS4wIC0gZDEpKTsKICBIRUFQRjY0W2k2ID4+IDNdID0gZDE7CiB9CiBkMiA9ICtIRUFQRjY0W2k4ID4+IDNdICogKGQxICogLjg1ICsgLjEpOwogaTMgPSBpOCArIDg4IHwgMDsKIGQxID0gK0hFQVBGNjRbaTMgPj4gM107CiBpZiAoZDEgPj0gMS4wKSB7CiAgZDEgPSBkMSArIC0xLjA7CiAgSEVBUEY2NFtpMyA+PiAzXSA9IGQxOwogfQogZDUgPSBkMSArIDEuMCAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gZDIpOwogSEVBUEY2NFtpMyA+PiAzXSA9IGQ1OwogZDUgPSAoKCEoZDUgPD0gLjUpID8gMS4wIC0gZDUgOiBkNSkgKyAtLjI1KSAqIDQuMDsKIEhFQVBGNjRbaTggKyAxMTIgPj4gM10gPSBkNTsKIGQxID0gKyhfcmFuZCgpIHwgMCkgKiA0LjY1NjYxMjg3MzA3NzM5M2UtMTAgKiAyLjAgKyAtMS4wOwogSEVBUEY2NFtpOCArIDE2MCA+PiAzXSA9IGQxOwogZDEgPSArSEVBUEY2NFtpNiA+PiAzXSAqIChkNSArIGQxKTsKIGk2ID0gaTggKyA4IHwgMDsKIEhFQVBGNjRbaTYgPj4gM10gPSBkMTsKIGlmICgoSEVBUDMyW2k3ID4+IDJdIHwgMCkgPT0gMSkgSEVBUDMyW2k3ID4+IDJdID0gMDsKIGlmIChIRUFQOFtpOCArIDMyID4+IDBdIHwgMCkgewogIGQ1ID0gK0hFQVBGNjRbaTggKyA0MCA+PiAzXTsKICBkMSA9IGQxICogZDU7CiAgZDEgPSAxLjAgLyAoZDUgLyAoZDUgKiBkNSAqIC4yOCArIDEuMCkpICogKGQxIC8gKGQxICogZDEgKiAuMjggKyAxLjApKTsKICBIRUFQRjY0W2k2ID4+IDNdID0gZDE7CiB9CiBpZiAoSEVBUDhbaTggKyAzNCA+PiAwXSB8IDApIHsKICBkMiA9ICtIRUFQRjY0W2k4ICsgNTYgPj4gM107CiAgZDQgPSArSEVBUEY2NFtpOCArIDY0ID4+IDNdOwogIGkzID0gaTggKyA0OTYgfCAwOwogIGQyID0gZDIgPCAxMC4wID8gMTAuMCA6IGQyOwogIEhFQVBGNjRbaTMgPj4gM10gPSBkMjsKICBkNSA9ICsoSEVBUDMyWzUwODNdIHwgMCk7CiAgaWYgKGQyID4gZDUpIHsKICAgSEVBUEY2NFtpMyA+PiAzXSA9IGQ1OwogICBkMiA9IGQ1OwogIH0KICBkMiA9ICtNYXRoX2NvcygrKGQyICogNi4yODMxODUzMDcxNzk1ODYgLyBkNSkpOwogIEhFQVBGNjRbaTggKyA0ODAgPj4gM10gPSBkMjsKICBkNSA9IDIuMCAtIGQyICogMi4wOwogIEhFQVBGNjRbaTggKyA0ODggPj4gM10gPSBkNTsKICBkMiA9IGQyICsgLTEuMDsKICBkNCA9IChkNCA8IDEuMCA/IDEuMCA6IGQ0KSAqIGQyOwogIGQ0ID0gKGQ0ICsgK01hdGhfc3FydCgrLStNYXRoX3BvdygrZDIsIDMuMCkpICogMS40MTQyMTM1NjIzNzMwOTUxKSAvIGQ0OwogIGk3ID0gaTggKyA0NjQgfCAwOwogIGkzID0gaTggKyA0NzIgfCAwOwogIGQyID0gK0hFQVBGNjRbaTMgPj4gM107CiAgZDUgPSArSEVBUEY2NFtpNyA+PiAzXSArIGQ1ICogKGQxIC0gZDIpOwogIGQxID0gZDIgKyBkNTsKICBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiAgSEVBUEY2NFtpNyA+PiAzXSA9IGQ0ICogZDU7CiAgSEVBUEY2NFtpOCArIDI4OCA+PiAzXSA9IGQxOwogIEhFQVBGNjRbaTYgPj4gM10gPSBkMTsKIH0KIGQxID0gZDEgKiArSEVBUEY2NFtpOCArIDcyID4+IDNdOwogaWYgKCEoSEVBUDhbaTggKyAzMyA+PiAwXSB8IDApKSB7CiAgZDUgPSBkMTsKICByZXR1cm4gK2Q1OwogfQogaWYgKGQxID4gMS4wKSB7CiAgZDUgPSAxLjA7CiAgcmV0dXJuICtkNTsKIH0KIGQ1ID0gZDEgPCAtMS4wID8gLTEuMCA6IGQxOwogcmV0dXJuICtkNTsKfQoKZnVuY3Rpb24gX19aTjE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckU0cGxheUVkZGlkKGk2LCBkMTEsIGQ5LCBpMiwgZDEwKSB7CiBpNiA9IGk2IHwgMDsKIGQxMSA9ICtkMTE7CiBkOSA9ICtkOTsKIGkyID0gaTIgfCAwOwogZDEwID0gK2QxMDsKIHZhciBkMSA9IDAuMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgZDcgPSAwLjAsIGQ4ID0gMC4wLCBpMTIgPSAwOwogZDEgPSArSEVBUEY2NFtpNiA+PiAzXSArIDEuMDsKIEhFQVBGNjRbaTYgPj4gM10gPSBkMTsKIGk0ID0gaTYgKyA4IHwgMDsKIGkzID0gKEhFQVAzMltpNCA+PiAyXSB8IDApICsgMSB8IDA7CiBIRUFQMzJbaTQgPj4gMl0gPSBpMzsKIGk0ID0gSEVBUDMyW2k2ICsgMTIgPj4gMl0gfCAwOwogaTUgPSBpNCArIDEwOCB8IDA7CiBkNyA9ICsoSEVBUDMyW2k1ID4+IDJdIHwgMCk7CiBpZiAoIShkMSA+IGQ3KSkgaWYgKGQxIDwgMC4wKSB7CiAgSEVBUEY2NFtpNiA+PiAzXSA9IGQ3OwogIGQ4ID0gZDc7CiB9IGVsc2UgZDggPSBkMTsgZWxzZSB7CiAgSEVBUEY2NFtpNiA+PiAzXSA9IDAuMDsKICBkOCA9IDAuMDsKIH0KIGQ3ID0gKyhIRUFQMzJbNTA4M10gfCAwKSAqIGQ5IC8gKyhpMiB8IDApOwogZDEgPSArX2Ztb2QoKyhpMyB8IDApLCBkNyArICtIRUFQRjY0W2k2ICsgMzIgPj4gM10pOwogaWYgKCtNYXRoX2Zsb29yKCtkMSkgPT0gMC4wKSB7CiAgaTMgPSBfX1pud2ooMTA0KSB8IDA7CiAgZDEwID0gZDggLyArKEhFQVAzMltpNSA+PiAyXSB8IDApICsgZDEwOwogIGQxMCA9IGQxMCA8IDEuMCA/IGQxMCA6IDEuMDsKICBfX1pOOW1heGlHcmFpbkkxNGhhbm5XaW5GdW5jdG9yRUMyRVAxMG1heGlTYW1wbGVkZGRQMjBtYXhpR3JhaW5XaW5kb3dDYWNoZUlTMF9FKGkzLCBpNCwgZDEwIDwgMC4wID8gMC4wIDogZDEwLCBkOSwgZDExIC0gZDEgLyBkNyAqIC4xLCBpNiArIDIwIHwgMCk7CiAgaTQgPSBIRUFQMzJbaTYgKyAxNiA+PiAyXSB8IDA7CiAgaTYgPSBfX1pud2ooMTIpIHwgMDsKICBIRUFQMzJbaTYgKyA4ID4+IDJdID0gaTM7CiAgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IGk0OwogIGk1ID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKICBIRUFQMzJbaTUgKyA0ID4+IDJdID0gaTY7CiAgSEVBUDMyW2k0ID4+IDJdID0gaTY7CiAgaTYgPSBpNCArIDggfCAwOwogIEhFQVAzMltpNiA+PiAyXSA9IChIRUFQMzJbaTYgPj4gMl0gfCAwKSArIDE7CiB9IGVsc2UgaTQgPSBIRUFQMzJbaTYgKyAxNiA+PiAyXSB8IDA7CiBpMiA9IEhFQVAzMltpNCArIDQgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApID09IChpNCB8IDApKSB7CiAgZDExID0gMC4wOwogIHJldHVybiArZDExOwogfQogaTUgPSBpNCArIDggfCAwOwogaTYgPSBpMjsKIGQxID0gMC4wOwogZG8gewogIGkzID0gaTYgKyA4IHwgMDsKICBpMTIgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogIGQxID0gZDEgKyArRlVOQ1RJT05fVEFCTEVfZGlbSEVBUDMyW0hFQVAzMltpMTIgPj4gMl0gPj4gMl0gJiAzMV0oaTEyKTsKICBpMyA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiAgaWYgKCEoSEVBUDhbaTMgKyA0ID4+IDBdIHwgMCkpIGkyID0gSEVBUDMyW2k2ICsgNCA+PiAyXSB8IDA7IGVsc2UgewogICBpZiAoaTMpIEZVTkNUSU9OX1RBQkxFX3ZpW0hFQVAzMlsoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyA4ID4+IDJdICYgNTExXShpMyk7CiAgIGk2ID0gaTYgKyA0IHwgMDsKICAgaTEyID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKICAgaTMgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogICBIRUFQMzJbaTMgKyA0ID4+IDJdID0gaTEyOwogICBIRUFQMzJbSEVBUDMyW2k2ID4+IDJdID4+IDJdID0gaTM7CiAgIEhFQVAzMltpNSA+PiAyXSA9IChIRUFQMzJbaTUgPj4gMl0gfCAwKSArIC0xOwogICBfX1pkbFB2KGkyKTsKICAgaTIgPSBpMTI7CiAgfQogIGk2ID0gaTI7CiB9IHdoaWxlICgoaTYgfCAwKSAhPSAoaTQgfCAwKSk7CiByZXR1cm4gK2QxOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQ3cHJvY2Vzc0VmKGkxNCwgZDEpIHsKIGkxNCA9IGkxNCB8IDA7CiBkMSA9ICtkMTsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEyID0gMCwgaTEzID0gMCwgZDE1ID0gMC4wOwogaTEyID0gaTE0ICsgNTIgfCAwOwogaTEwID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiBpOSA9IGkxMCArIDEgfCAwOwogSEVBUDMyW2kxMiA+PiAyXSA9IGk5OwogaTEzID0gaTE0ICsgNDQgfCAwOwogaTcgPSBIRUFQMzJbaTEzID4+IDJdIHwgMDsKIEhFQVBGMzJbaTcgKyAoaTEwIDw8IDIpID4+IDJdID0gZDE7CiBpMTAgPSBpMTQgKyAzMiB8IDA7CiBpOSA9IChpOSB8IDApID09IChIRUFQMzJbaTEwID4+IDJdIHwgMCk7CiBpMTEgPSBpMTQgKyA2OCB8IDA7CiBpMiA9IGk5ICYgMTsKIEhFQVA4W2kxMSA+PiAwXSA9IGkyOwogaWYgKCFpOSkgewogIGkxNCA9IGkyOwogIGkxNCA9IGkxNCA8PCAyNCA+PiAyNCAhPSAwOwogIHJldHVybiBpMTQgfCAwOwogfQogaTQgPSBIRUFQMzJbaTE0ICsgNjQgPj4gMl0gfCAwOwogaTIgPSBIRUFQMzJbaTE0ICsgNDggPj4gMl0gfCAwOwogaTggPSBIRUFQMzJbaTE0ICsgNCA+PiAyXSB8IDA7CiBpOSA9IEhFQVAzMltpMTQgKyAxNiA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpNCArIDggPj4gMl0gfCAwOwogaWYgKChpNSB8IDApID4gMCkgewogIGkzID0gMDsKICBkbyB7CiAgIEhFQVBGMzJbaTYgKyAoaTMgPDwgMikgPj4gMl0gPSArSEVBUEYzMltpNyArIChpMyA8PCAyKSA+PiAyXSAqICtIRUFQRjMyW2kyICsgKGkzIDw8IDIpID4+IDJdOwogICBpMyA9IGkzICsgMSB8IDA7CiAgfSB3aGlsZSAoKGkzIHwgMCkgIT0gKGk1IHwgMCkpOwogfQogaTIgPSBpNCArIDEyIHwgMDsKIGkzID0gaTQgKyAyMCB8IDA7CiBfX1o3UmVhbEZGVGlQZlNfU18oaTUsIGk2LCBIRUFQMzJbaTIgPj4gMl0gfCAwLCBIRUFQMzJbaTMgPj4gMl0gfCAwKTsKIGk1ID0gSEVBUDMyW2k0ICsgNCA+PiAyXSB8IDA7CiBpZiAoKGk1IHwgMCkgPiAwKSB7CiAgaTQgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogIGkyID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICBpMyA9IDA7CiAgZG8gewogICBpNyA9IGk0ICsgKGkzIDw8IDIpIHwgMDsKICAgZDE1ID0gK0hFQVBGMzJbaTcgPj4gMl07CiAgIGk2ID0gaTIgKyAoaTMgPDwgMikgfCAwOwogICBkMSA9ICtIRUFQRjMyW2k2ID4+IDJdOwogICBkMSA9ICtNYXRoX3NxcnQoKyhkMTUgKiBkMTUgKyBkMSAqIGQxKSk7CiAgIEhFQVBGMzJbaTggKyAoaTMgPDwgMikgPj4gMl0gPSBkMTsKICAgZDEgPSArTWF0aF9hdGFuMigrKCtIRUFQRjMyW2k2ID4+IDJdKSwgKygrSEVBUEYzMltpNyA+PiAyXSkpOwogICBIRUFQRjMyW2k5ICsgKGkzIDw8IDIpID4+IDJdID0gZDE7CiAgIGkzID0gaTMgKyAxIHwgMDsKICB9IHdoaWxlICgoaTMgfCAwKSAhPSAoaTUgfCAwKSk7CiB9CiBpOCA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogaTE0ID0gaTE0ICsgMzYgfCAwOwogaTkgPSBIRUFQMzJbaTE0ID4+IDJdIHwgMDsKIF9tZW1jcHkoaTggfCAwLCBpOCArIChpOSA8PCAyKSB8IDAsIChIRUFQMzJbaTEwID4+IDJdIHwgMCkgLSBpOSA8PCAyIHwgMCkgfCAwOwogaTkgPSBIRUFQMzJbaTE0ID4+IDJdIHwgMDsKIF9tZW1zZXQoKEhFQVAzMltpMTMgPj4gMl0gfCAwKSArICgoSEVBUDMyW2kxMCA+PiAyXSB8IDApIC0gaTkgPDwgMikgfCAwLCAwLCBpOSA8PCAyIHwgMCkgfCAwOwogSEVBUDMyW2kxMiA+PiAyXSA9IChIRUFQMzJbaTEwID4+IDJdIHwgMCkgLSAoSEVBUDMyW2kxNCA+PiAyXSB8IDApOwogaTE0ID0gSEVBUDhbaTExID4+IDBdIHwgMDsKIGkxNCA9IGkxNCA8PCAyNCA+PiAyNCAhPSAwOwogcmV0dXJuIGkxNCB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUVudjRhZHNyRWRpKGkxMCwgZDksIGk4KSB7CiBpMTAgPSBpMTAgfCAwOwogZDkgPSArZDk7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGQyID0gMC4wLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk3ID0gKGk4IHwgMCkgPT0gMTsKIGkxID0gaTEwICsgNjggfCAwOwogaTQgPSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgPT0gMTsKIGlmIChpNykgaWYgKCFpNCkgewogIGlmICgoSEVBUDMyW2kxMCArIDgwID4+IDJdIHwgMCkgIT0gMSA/IChpNSA9IGkxMCArIDcyIHwgMCwgKEhFQVAzMltpNSA+PiAyXSB8IDApICE9IDEpIDogMCkgewogICBIRUFQMzJbaTEwICsgNjQgPj4gMl0gPSAwOwogICBIRUFQMzJbaTUgPj4gMl0gPSAwOwogICBIRUFQMzJbaTEwICsgNzYgPj4gMl0gPSAwOwogICBIRUFQMzJbaTEwICsgODQgPj4gMl0gPSAwOwogICBIRUFQMzJbaTEgPj4gMl0gPSAxOwogICBpNiA9IDc7CiAgfQogfSBlbHNlIGk2ID0gNzsgZWxzZSBpZiAoaTQpIGk2ID0gNzsKIGlmICgoaTYgfCAwKSA9PSA3ID8gKEhFQVAzMltpMTAgKyA4NCA+PiAyXSA9IDAsIGkzID0gaTEwICsgNDggfCAwLCBkMiA9ICtIRUFQRjY0W2kxMCArIDE2ID4+IDNdICsgK0hFQVBGNjRbaTMgPj4gM10sIEhFQVBGNjRbaTMgPj4gM10gPSBkMiwgSEVBUEY2NFtpMTAgKyA4ID4+IDNdID0gZDIgKiBkOSwgZDIgPj0gMS4wKSA6IDApIHsKICBIRUFQRjY0W2kzID4+IDNdID0gMS4wOwogIEhFQVAzMltpMSA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxMCArIDcyID4+IDJdID0gMTsKIH0KIGkxID0gaTEwICsgNzIgfCAwOwogaWYgKChIRUFQMzJbaTEgPj4gMl0gfCAwKSA9PSAxID8gKGk2ID0gaTEwICsgNDggfCAwLCBkMiA9ICtIRUFQRjY0W2kxMCArIDI0ID4+IDNdICogK0hFQVBGNjRbaTYgPj4gM10sIEhFQVBGNjRbaTYgPj4gM10gPSBkMiwgSEVBUEY2NFtpMTAgKyA4ID4+IDNdID0gZDIgKiBkOSwgZDIgPD0gK0hFQVBGNjRbaTEwICsgMzIgPj4gM10pIDogMCkgewogIEhFQVAzMltpMSA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxMCArIDgwID4+IDJdID0gMTsKIH0KIGkzID0gaTEwICsgNjQgfCAwOwogaTEgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEwICsgNjAgPj4gMl0gfCAwOwogaWYgKChpMSB8IDApIDwgKGk0IHwgMCkgPyAoSEVBUDMyW2kxMCArIDgwID4+IDJdIHwgMCkgPT0gMSA6IDApIHsKICBIRUFQRjY0W2kxMCArIDggPj4gM10gPSArSEVBUEY2NFtpMTAgKyA0OCA+PiAzXSAqIGQ5OwogIGkxID0gaTEgKyAxIHwgMDsKICBIRUFQMzJbaTMgPj4gMl0gPSBpMTsKIH0KIGkxID0gKGkxIHwgMCkgPj0gKGk0IHwgMCk7CiBpZiAoaTcgJiBpMSkgSEVBUEY2NFtpMTAgKyA4ID4+IDNdID0gK0hFQVBGNjRbaTEwICsgNDggPj4gM10gKiBkOTsKIGlmICghKChpOCB8IDApICE9IDEgJiBpMSkpIHsKICBpZiAoKEhFQVAzMltpMTAgKyA4NCA+PiAyXSB8IDApICE9IDEpIHsKICAgaTEwID0gaTEwICsgOCB8IDA7CiAgIGQ5ID0gK0hFQVBGNjRbaTEwID4+IDNdOwogICByZXR1cm4gK2Q5OwogIH0KIH0gZWxzZSB7CiAgSEVBUDMyW2kxMCArIDgwID4+IDJdID0gMDsKICBIRUFQMzJbaTEwICsgODQgPj4gMl0gPSAxOwogfQogaTEgPSBpMTAgKyA0OCB8IDA7CiBkMiA9ICtIRUFQRjY0W2kxID4+IDNdOwogaWYgKCEoZDIgPiAwLjApKSB7CiAgaTEwID0gaTEwICsgOCB8IDA7CiAgZDkgPSArSEVBUEY2NFtpMTAgPj4gM107CiAgcmV0dXJuICtkOTsKIH0KIGQyID0gZDIgKiArSEVBUEY2NFtpMTAgKyA0MCA+PiAzXTsKIEhFQVBGNjRbaTEgPj4gM10gPSBkMjsKIEhFQVBGNjRbaTEwICsgOCA+PiAzXSA9IGQyICogZDk7CiBpMTAgPSBpMTAgKyA4IHwgMDsKIGQ5ID0gK0hFQVBGNjRbaTEwID4+IDNdOwogcmV0dXJuICtkOTsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRW52NGFkc3JFZGRkZGRsaShpMTQsIGQxMiwgZDIsIGQ3LCBkOCwgZDEzLCBpOSwgaTExKSB7CiBpMTQgPSBpMTQgfCAwOwogZDEyID0gK2QxMjsKIGQyID0gK2QyOwogZDcgPSArZDc7CiBkOCA9ICtkODsKIGQxMyA9ICtkMTM7CiBpOSA9IGk5IHwgMDsKIGkxMSA9IGkxMSB8IDA7CiB2YXIgaTEgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGkxMCA9IDA7CiBpMTAgPSAoaTExIHwgMCkgPT0gMTsKIGkxID0gaTE0ICsgNjggfCAwOwogaTQgPSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgPT0gMTsKIGlmIChpMTApIGlmICghaTQpIHsKICBpZiAoKEhFQVAzMltpMTQgKyA4MCA+PiAyXSB8IDApICE9IDEgPyAoaTUgPSBpMTQgKyA3MiB8IDAsIChIRUFQMzJbaTUgPj4gMl0gfCAwKSAhPSAxKSA6IDApIHsKICAgSEVBUDMyW2kxNCArIDY0ID4+IDJdID0gMDsKICAgSEVBUDMyW2k1ID4+IDJdID0gMDsKICAgSEVBUDMyW2kxNCArIDc2ID4+IDJdID0gMDsKICAgSEVBUDMyW2kxNCArIDg0ID4+IDJdID0gMDsKICAgSEVBUDMyW2kxID4+IDJdID0gMTsKICAgaTYgPSA3OwogIH0KIH0gZWxzZSBpNiA9IDc7IGVsc2UgaWYgKGk0KSBpNiA9IDc7CiBpZiAoKGk2IHwgMCkgPT0gNyA/IChIRUFQMzJbaTE0ICsgODQgPj4gMl0gPSAwLCBpMyA9IGkxNCArIDQ4IHwgMCwgZDIgPSArSEVBUEY2NFtpMyA+PiAzXSArIGQyLCBIRUFQRjY0W2kzID4+IDNdID0gZDIsIEhFQVBGNjRbaTE0ICsgOCA+PiAzXSA9IGQyICogZDEyLCBkMiA+PSAxLjApIDogMCkgewogIEhFQVBGNjRbaTMgPj4gM10gPSAxLjA7CiAgSEVBUDMyW2kxID4+IDJdID0gMDsKICBIRUFQMzJbaTE0ICsgNzIgPj4gMl0gPSAxOwogfQogaTEgPSBpMTQgKyA3MiB8IDA7CiBpZiAoKEhFQVAzMltpMSA+PiAyXSB8IDApID09IDEgPyAoaTYgPSBpMTQgKyA0OCB8IDAsIGQ3ID0gK0hFQVBGNjRbaTYgPj4gM10gKiBkNywgSEVBUEY2NFtpNiA+PiAzXSA9IGQ3LCBIRUFQRjY0W2kxNCArIDggPj4gM10gPSBkNyAqIGQxMiwgZDcgPD0gZDgpIDogMCkgewogIEhFQVAzMltpMSA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxNCArIDgwID4+IDJdID0gMTsKIH0KIGkzID0gaTE0ICsgNjQgfCAwOwogaTEgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogaWYgKChpMSB8IDApIDwgKGk5IHwgMCkgPyAoSEVBUDMyW2kxNCArIDgwID4+IDJdIHwgMCkgPT0gMSA6IDApIHsKICBIRUFQRjY0W2kxNCArIDggPj4gM10gPSArSEVBUEY2NFtpMTQgKyA0OCA+PiAzXSAqIGQxMjsKICBpMSA9IGkxICsgMSB8IDA7CiAgSEVBUDMyW2kzID4+IDJdID0gaTE7CiB9CiBpMSA9IChpMSB8IDApID49IChpOSB8IDApOwogaWYgKGkxMCAmIGkxKSBIRUFQRjY0W2kxNCArIDggPj4gM10gPSArSEVBUEY2NFtpMTQgKyA0OCA+PiAzXSAqIGQxMjsKIGlmICghKChpMTEgfCAwKSAhPSAxICYgaTEpKSB7CiAgaWYgKChIRUFQMzJbaTE0ICsgODQgPj4gMl0gfCAwKSAhPSAxKSB7CiAgIGkxNCA9IGkxNCArIDggfCAwOwogICBkMTMgPSArSEVBUEY2NFtpMTQgPj4gM107CiAgIHJldHVybiArZDEzOwogIH0KIH0gZWxzZSB7CiAgSEVBUDMyW2kxNCArIDgwID4+IDJdID0gMDsKICBIRUFQMzJbaTE0ICsgODQgPj4gMl0gPSAxOwogfQogaTEgPSBpMTQgKyA0OCB8IDA7CiBkMiA9ICtIRUFQRjY0W2kxID4+IDNdOwogaWYgKCEoZDIgPiAwLjApKSB7CiAgaTE0ID0gaTE0ICsgOCB8IDA7CiAgZDEzID0gK0hFQVBGNjRbaTE0ID4+IDNdOwogIHJldHVybiArZDEzOwogfQogZDEzID0gZDIgKiBkMTM7CiBIRUFQRjY0W2kxID4+IDNdID0gZDEzOwogSEVBUEY2NFtpMTQgKyA4ID4+IDNdID0gZDEzICogZDEyOwogaTE0ID0gaTE0ICsgOCB8IDA7CiBkMTMgPSArSEVBUEY2NFtpMTQgPj4gM107CiByZXR1cm4gK2QxMzsKfQoKZnVuY3Rpb24gX19aTjUzRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9uYXRpdmVfYW5kX2J1aWx0aW5fdHlwZXNDMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX3ZvaWQoMTYwNDgsIDM3Nzk2KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2Jvb2woMTYwNjQsIDM3ODAxLCAxLCAxLCAwKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIoMTYwNzIsIDM3ODA2LCAxLCAtMTI4LCAxMjcpOwogX19lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcigxNjA4OCwgMzc4MTEsIDEsIC0xMjgsIDEyNyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyKDE2MDgwLCAzNzgyMywgMSwgMCwgMjU1KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIoMTYwOTYsIDM3ODM3LCAyLCAtMzI3NjgsIDMyNzY3KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIoMTYxMDQsIDM3ODQzLCAyLCAwLCA2NTUzNSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyKDE2MTEyLCAzNzg1OCwgNCwgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcpOwogX19lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcigxNjEyMCwgMzc4NjIsIDQsIDAsIC0xKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIoMTYxMjgsIDM3ODc1LCA0LCAtMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0Nyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyKDE2MTM2LCAzNzg4MCwgNCwgMCwgLTEpOwogX19lbWJpbmRfcmVnaXN0ZXJfZmxvYXQoMTYxNDQsIDM3ODk0LCA0KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0KDE2MTUyLCAzNzkwMCwgOCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zdGRfc3RyaW5nKDE1NzYwLCAzNzkwNyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zdGRfc3RyaW5nKDE1Nzg0LCAzNzkxOSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZygxNTgwOCwgNCwgMzc5NTIpOwogX19lbWJpbmRfcmVnaXN0ZXJfZW12YWwoMTMyNDgsIDM3OTY1KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KDE1ODMyLCAwLCAzNzk4MSk7CiBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldygxNTg0MCwgMCwgMzgwMTEpOwogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcoMTU4NDgsIDEsIDM4MDQ4KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KDE1ODU2LCAyLCAzODA4Nyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldygxNTg2NCwgMywgMzgxMTgpOwogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcoMTU4NzIsIDQsIDM4MTU4KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KDE1ODgwLCA1LCAzODE4Nyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldygxNTg4OCwgNCwgMzgyMjUpOwogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcoMTU4OTYsIDUsIDM4MjU1KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KDE1ODQwLCAwLCAzODI5NCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldygxNTg0OCwgMSwgMzgzMjYpOwogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcoMTU4NTYsIDIsIDM4MzU5KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KDE1ODY0LCAzLCAzODM5Mik7CiBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldygxNTg3MiwgNCwgMzg0MjYpOwogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcoMTU4ODAsIDUsIDM4NDU5KTsKIF9fZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3KDE1OTA0LCA2LCAzODQ5Myk7CiBfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldygxNTkxMiwgNywgMzg1MjQpOwogX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcoMTU5MjAsIDcsIDM4NTU2KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFNXNoYXJlRVBTNV9QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMzcsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUU1c2hhcmVFUFM1X1BOU184aW50ZXJuYWw3X0VNX1ZBTEUoaTQsIGk4KSB7CiBpNCA9IGk0IHwgMDsKIGk4ID0gaTggfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMDsKIGkxMCA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMSA9IGkxMDsKIGk2ID0gaTEwICsgMTIgfCAwOwogaTIgPSBpMTAgKyA4IHwgMDsKIGk3ID0gX19abndqKDgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkxMSAmIDEpID8gKEhFQVAzMltpMSA+PiAyXSA9IGk4LCBfX1RIUkVXX18gPSAwLCBpMyA9IGludm9rZV9paWkoNjQsIDEzMjQ4LCBpMSB8IDApIHwgMCwgaTExID0gX19USFJFV19fLCBfX1RIUkVXX18gPSAwLCAhKGkxMSAmIDEpKSA6IDApIHsKICBIRUFQMzJbaTYgPj4gMl0gPSBpMzsKICBIRUFQMzJbaTIgPj4gMl0gPSAwOwogIF9fVEhSRVdfXyA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kyID4+IDJdOwogIGludm9rZV92aWlpaSgzNSwgaTcgfCAwLCBpNCB8IDAsIGk2IHwgMCwgaTEgfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogICBfX1RIUkVXX18gPSAwOwogICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICAgaTExID0gX19USFJFV19fOwogICBfX1RIUkVXX18gPSAwOwogICBpZiAoIShpMTEgJiAxKSkgewogICAgaTUgPSBpMTsKICAgIGJyZWFrOwogICB9CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTA7CiAgIHJldHVybiBpNyB8IDA7CiAgfQogfSBlbHNlIGk5ID0gOTsgd2hpbGUgKDApOwogaWYgKChpOSB8IDApID09IDkpIGk1ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTExICYgMSkgewogIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogfSBlbHNlIHsKICBfX1pkbFB2KGk3KTsKICBfX19yZXN1bWVFeGNlcHRpb24oaTUgfCAwKTsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVFNXNoYXJlRVBTNV9QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMzYsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjhtYXhpS2ljazRwbGF5RXYoaTgpIHsKIGk4ID0gaTggfCAwOwogdmFyIGQxID0gMC4wLCBpMiA9IDAsIGQzID0gMC4wLCBkNCA9IDAuMCwgZDUgPSAwLjAsIGk2ID0gMCwgaTcgPSAwOwogaTcgPSBpOCArIDE4NCB8IDA7CiBkMSA9ICtfX1pON21heGlFbnY0YWRzckVkaShpOCArIDEyOCB8IDAsIDEuMCwgSEVBUDMyW2k3ID4+IDJdIHwgMCk7CiBpMiA9IGk4ICsgMjQgfCAwOwogSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogaWYgKEhFQVA4W2k4ICsgNDggPj4gMF0gfCAwKSB7CiAgZDEgPSArTWF0aF9hYnMoKygxLjAgLSBkMSkpOwogIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKIH0KIGQ0ID0gK0hFQVBGNjRbaTggPj4gM10gKiBkMTsKIGkyID0gaTggKyA4OCB8IDA7CiBkMyA9ICtIRUFQRjY0W2kyID4+IDNdOwogZDUgPSArTWF0aF9zaW4oKyhkMyAqIDYuMjgzMTg1MzA3MTc5NTg2KSk7CiBIRUFQRjY0W2k4ICsgMTEyID4+IDNdID0gZDU7CiBpZiAoZDMgPj0gMS4wKSB7CiAgZDMgPSBkMyArIC0xLjA7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQzOwogfQogSEVBUEY2NFtpMiA+PiAzXSA9IGQzICsgMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkNCk7CiBkMSA9IGQ1ICogZDE7CiBpNiA9IGk4ICsgOCB8IDA7CiBIRUFQRjY0W2k2ID4+IDNdID0gZDE7CiBpZiAoKEhFQVAzMltpNyA+PiAyXSB8IDApID09IDEpIEhFQVAzMltpNyA+PiAyXSA9IDA7CiBpZiAoSEVBUDhbaTggKyAzMiA+PiAwXSB8IDApIHsKICBkNSA9ICtIRUFQRjY0W2k4ICsgNDAgPj4gM107CiAgZDEgPSBkMSAqIGQ1OwogIGQxID0gMS4wIC8gKGQ1IC8gKGQ1ICogZDUgKiAuMjggKyAxLjApKSAqIChkMSAvIChkMSAqIGQxICogLjI4ICsgMS4wKSk7CiAgSEVBUEY2NFtpNiA+PiAzXSA9IGQxOwogfQogaWYgKEhFQVA4W2k4ICsgMzQgPj4gMF0gfCAwKSB7CiAgZDMgPSArSEVBUEY2NFtpOCArIDU2ID4+IDNdOwogIGQ0ID0gK0hFQVBGNjRbaTggKyA2NCA+PiAzXTsKICBpMiA9IGk4ICsgNDQ4IHwgMDsKICBkMyA9IGQzIDwgMTAuMCA/IDEwLjAgOiBkMzsKICBIRUFQRjY0W2kyID4+IDNdID0gZDM7CiAgZDUgPSArKEhFQVAzMls1MDgzXSB8IDApOwogIGlmIChkMyA+IGQ1KSB7CiAgIEhFQVBGNjRbaTIgPj4gM10gPSBkNTsKICAgZDMgPSBkNTsKICB9CiAgZDMgPSArTWF0aF9jb3MoKyhkMyAqIDYuMjgzMTg1MzA3MTc5NTg2IC8gZDUpKTsKICBIRUFQRjY0W2k4ICsgNDMyID4+IDNdID0gZDM7CiAgZDUgPSAyLjAgLSBkMyAqIDIuMDsKICBIRUFQRjY0W2k4ICsgNDQwID4+IDNdID0gZDU7CiAgZDMgPSBkMyArIC0xLjA7CiAgZDQgPSAoZDQgPCAxLjAgPyAxLjAgOiBkNCkgKiBkMzsKICBkNCA9IChkNCArICtNYXRoX3NxcnQoKy0rTWF0aF9wb3coK2QzLCAzLjApKSAqIDEuNDE0MjEzNTYyMzczMDk1MSkgLyBkNDsKICBpNyA9IGk4ICsgNDE2IHwgMDsKICBpMiA9IGk4ICsgNDI0IHwgMDsKICBkMyA9ICtIRUFQRjY0W2kyID4+IDNdOwogIGQ1ID0gK0hFQVBGNjRbaTcgPj4gM10gKyBkNSAqIChkMSAtIGQzKTsKICBkMSA9IGQzICsgZDU7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogIEhFQVBGNjRbaTcgPj4gM10gPSBkNCAqIGQ1OwogIEhFQVBGNjRbaTggKyAyNDAgPj4gM10gPSBkMTsKICBIRUFQRjY0W2k2ID4+IDNdID0gZDE7CiB9CiBkMSA9IGQxICogK0hFQVBGNjRbaTggKyA3MiA+PiAzXTsKIGlmICghKEhFQVA4W2k4ICsgMzMgPj4gMF0gfCAwKSkgewogIGQ1ID0gZDE7CiAgcmV0dXJuICtkNTsKIH0KIGlmIChkMSA+IDEuMCkgewogIGQ1ID0gMS4wOwogIHJldHVybiArZDU7CiB9CiBkNSA9IGQxIDwgLTEuMCA/IC0xLjAgOiBkMTsKIHJldHVybiArZDU7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMzIsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpTUZDQ0FuYWx5c2VySWRFRUVFNXNoYXJlRVBTNF9QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMzQsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDE5LCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURlbGF5bGluZUVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDEwLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURDQmxvY2tlckVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDIyLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUxhZ0V4cElkRUVFRTVzaGFyZUVQUzRfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDEzLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk44bWF4aUhhdHM0cGxheUV2KGk0KSB7CiBpNCA9IGk0IHwgMDsKIHZhciBkMSA9IDAuMCwgaTIgPSAwLCBpMyA9IDAsIGQ1ID0gMC4wLCBpNiA9IDAsIGQ3ID0gMC4wLCBkOCA9IDAuMCwgZDkgPSAwLjAsIGkxMCA9IDA7CiBpMyA9IGk0ICsgMjMyIHwgMDsKIGQxID0gK19fWk43bWF4aUVudjRhZHNyRWRpKGk0ICsgMTc2IHwgMCwgMS4wLCBIRUFQMzJbaTMgPj4gMl0gfCAwKTsKIGkyID0gaTQgKyAyNCB8IDA7CiBIRUFQRjY0W2kyID4+IDNdID0gZDE7CiBpZiAoSEVBUDhbaTQgKyA0OCA+PiAwXSB8IDApIHsKICBkMSA9ICtNYXRoX2FicygrKDEuMCAtIGQxKSk7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogfQogaTYgPSBpNCArIDg4IHwgMDsKIGQxID0gNTEyLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvICgrSEVBUEY2NFtpNCA+PiAzXSAqICtIRUFQRjMyWzUwODJdKSkgKyArSEVBUEY2NFtpNiA+PiAzXTsKIGQxID0gIShkMSA+PSA1MTEuMCkgPyBkMSA6IGQxICsgLTUxMi4wOwogSEVBUEY2NFtpNiA+PiAzXSA9IGQxOwogZDUgPSBkMSAtICtNYXRoX2Zsb29yKCtkMSk7CiBpNiA9IH5+ZDE7CiBkNSA9ICtIRUFQRjY0WzggKyAoaTYgKyAyIDw8IDMpID4+IDNdICogZDUgKyArSEVBUEY2NFs4ICsgKGk2ICsgMSA8PCAzKSA+PiAzXSAqICgxLjAgLSBkNSk7CiBIRUFQRjY0W2k0ICsgMTEyID4+IDNdID0gZDU7CiBkMSA9ICsoX3JhbmQoKSB8IDApICogNC42NTY2MTI4NzMwNzczOTNlLTEwICogMi4wICsgLTEuMDsKIEhFQVBGNjRbaTQgKyAxNjAgPj4gM10gPSBkMTsKIGQxID0gK0hFQVBGNjRbaTIgPj4gM10gKiAoZDUgKyBkMSk7CiBpMiA9IGk0ICsgOCB8IDA7CiBIRUFQRjY0W2kyID4+IDNdID0gZDE7CiBpZiAoKEhFQVAzMltpMyA+PiAyXSB8IDApID09IDEpIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBpZiAoSEVBUDhbaTQgKyAzMiA+PiAwXSB8IDApIHsKICBkNSA9ICtIRUFQRjY0W2k0ICsgNDAgPj4gM107CiAgZDEgPSBkMSAqIGQ1OwogIGQxID0gMS4wIC8gKGQ1IC8gKGQ1ICogZDUgKiAuMjggKyAxLjApKSAqIChkMSAvIChkMSAqIGQxICogLjI4ICsgMS4wKSk7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogfQogaWYgKEhFQVA4W2k0ICsgMzQgPj4gMF0gfCAwKSB7CiAgaTEwID0gaTQgKyAyODAgfCAwOwogIGQ1ID0gK0hFQVBGNjRbaTEwID4+IDNdOwogIGkzID0gaTQgKyAyODggfCAwOwogIGQ5ID0gK0hFQVBGNjRbaTMgPj4gM107CiAgaTYgPSBpNCArIDI3MiB8IDA7CiAgZDggPSBkMSArICtIRUFQRjY0W2k2ID4+IDNdIC0gZDkgKiAyLjA7CiAgZDcgPSBkNSArICgrSEVBUEY2NFtpNCArIDMyOCA+PiAzXSAqIGQ4IC0gZDUgKiArSEVBUEY2NFtpNCArIDMzNiA+PiAzXSk7CiAgSEVBUEY2NFtpMTAgPj4gM10gPSBkNzsKICBkNSA9IGQ5ICsgKGQ4ICogK0hFQVBGNjRbaTQgKyAzNDQgPj4gM10gKyBkNSAqICtIRUFQRjY0W2k0ICsgMzUyID4+IDNdKTsKICBIRUFQRjY0W2kzID4+IDNdID0gZDU7CiAgSEVBUEY2NFtpNiA+PiAzXSA9IGQxOwogIGQxID0gZDEgLSBkNyAqICtIRUFQRjY0W2k0ICsgMzEyID4+IDNdOwogIGQxID0gZDEgKiAwLjAgKyAoZDEgLSBkNSArIChkNyAqIDAuMCArIGQ1ICogMC4wKSk7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogfQogZDEgPSBkMSAqICtIRUFQRjY0W2k0ICsgNzIgPj4gM107CiBpZiAoIShIRUFQOFtpNCArIDMzID4+IDBdIHwgMCkpIHsKICBkOSA9IGQxOwogIHJldHVybiArZDk7CiB9CiBpZiAoZDEgPiAxLjApIHsKICBkOSA9IDEuMDsKICByZXR1cm4gK2Q5OwogfQogZDkgPSBkMSA8IC0xLjAgPyAtMS4wIDogZDE7CiByZXR1cm4gK2Q5Owp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMm1heGlFbnZlbG9wZUVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDksIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTFtYXhpRmxhbmdlckVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDIwLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aVNhbXBsZUVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDE0LCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUZpbHRlckVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDExLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUNob3J1c0VFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDIxLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUoaTQsIGk4KSB7CiBpNCA9IGk0IHwgMDsKIGk4ID0gaTggfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMDsKIGkxMCA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMSA9IGkxMDsKIGk2ID0gaTEwICsgMTIgfCAwOwogaTIgPSBpMTAgKyA4IHwgMDsKIGk3ID0gX19abndqKDgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkxMSAmIDEpID8gKEhFQVAzMltpMSA+PiAyXSA9IGk4LCBfX1RIUkVXX18gPSAwLCBpMyA9IGludm9rZV9paWkoNjQsIDEzMjQ4LCBpMSB8IDApIHwgMCwgaTExID0gX19USFJFV19fLCBfX1RIUkVXX18gPSAwLCAhKGkxMSAmIDEpKSA6IDApIHsKICBIRUFQMzJbaTYgPj4gMl0gPSBpMzsKICBIRUFQMzJbaTIgPj4gMl0gPSAwOwogIF9fVEhSRVdfXyA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kyID4+IDJdOwogIGludm9rZV92aWlpaSgyNSwgaTcgfCAwLCBpNCB8IDAsIGk2IHwgMCwgaTEgfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogICBfX1RIUkVXX18gPSAwOwogICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICAgaTExID0gX19USFJFV19fOwogICBfX1RIUkVXX18gPSAwOwogICBpZiAoIShpMTEgJiAxKSkgewogICAgaTUgPSBpMTsKICAgIGJyZWFrOwogICB9CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTA7CiAgIHJldHVybiBpNyB8IDA7CiAgfQogfSBlbHNlIGk5ID0gOTsgd2hpbGUgKDApOwogaWYgKChpOSB8IDApID09IDkpIGk1ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTExICYgMSkgewogIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogfSBlbHNlIHsKICBfX1pkbFB2KGk3KTsKICBfX19yZXN1bWVFeGNlcHRpb24oaTUgfCAwKTsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aUNsb2NrRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMjcsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlLaWNrRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMjQsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlJRkZURUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMzEsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMjYsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUoaTQsIGk4KSB7CiBpNCA9IGk0IHwgMDsKIGk4ID0gaTggfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMDsKIGkxMCA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMSA9IGkxMDsKIGk2ID0gaTEwICsgMTIgfCAwOwogaTIgPSBpMTAgKyA4IHwgMDsKIGk3ID0gX19abndqKDgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkxMSAmIDEpID8gKEhFQVAzMltpMSA+PiAyXSA9IGk4LCBfX1RIUkVXX18gPSAwLCBpMyA9IGludm9rZV9paWkoNjQsIDEzMjQ4LCBpMSB8IDApIHwgMCwgaTExID0gX19USFJFV19fLCBfX1RIUkVXX18gPSAwLCAhKGkxMSAmIDEpKSA6IDApIHsKICBIRUFQMzJbaTYgPj4gMl0gPSBpMzsKICBIRUFQMzJbaTIgPj4gMl0gPSAwOwogIF9fVEhSRVdfXyA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kyID4+IDJdOwogIGludm9rZV92aWlpaSgyMywgaTcgfCAwLCBpNCB8IDAsIGk2IHwgMCwgaTEgfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogICBfX1RIUkVXX18gPSAwOwogICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICAgaTExID0gX19USFJFV19fOwogICBfX1RIUkVXX18gPSAwOwogICBpZiAoIShpMTEgJiAxKSkgewogICAgaTUgPSBpMTsKICAgIGJyZWFrOwogICB9CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTA7CiAgIHJldHVybiBpNyB8IDA7CiAgfQogfSBlbHNlIGk5ID0gOTsgd2hpbGUgKDApOwogaWYgKChpOSB8IDApID09IDkpIGk1ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTExICYgMSkgewogIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogfSBlbHNlIHsKICBfX1pkbFB2KGk3KTsKICBfX19yZXN1bWVFeGNlcHRpb24oaTUgfCAwKTsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDEyLCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMTUsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUoaTQsIGk4KSB7CiBpNCA9IGk0IHwgMDsKIGk4ID0gaTggfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMDsKIGkxMCA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMSA9IGkxMDsKIGk2ID0gaTEwICsgMTIgfCAwOwogaTIgPSBpMTAgKyA4IHwgMDsKIGk3ID0gX19abndqKDgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkxMSAmIDEpID8gKEhFQVAzMltpMSA+PiAyXSA9IGk4LCBfX1RIUkVXX18gPSAwLCBpMyA9IGludm9rZV9paWkoNjQsIDEzMjQ4LCBpMSB8IDApIHwgMCwgaTExID0gX19USFJFV19fLCBfX1RIUkVXX18gPSAwLCAhKGkxMSAmIDEpKSA6IDApIHsKICBIRUFQMzJbaTYgPj4gMl0gPSBpMzsKICBIRUFQMzJbaTIgPj4gMl0gPSAwOwogIF9fVEhSRVdfXyA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kyID4+IDJdOwogIGludm9rZV92aWlpaSgzMCwgaTcgfCAwLCBpNCB8IDAsIGk2IHwgMCwgaTEgfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogICBfX1RIUkVXX18gPSAwOwogICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICAgaTExID0gX19USFJFV19fOwogICBfX1RIUkVXX18gPSAwOwogICBpZiAoIShpMTEgJiAxKSkgewogICAgaTUgPSBpMTsKICAgIGJyZWFrOwogICB9CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTA7CiAgIHJldHVybiBpNyB8IDA7CiAgfQogfSBlbHNlIGk5ID0gOTsgd2hpbGUgKDApOwogaWYgKChpOSB8IDApID09IDkpIGk1ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTExICYgMSkgewogIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogfSBlbHNlIHsKICBfX1pkbFB2KGk3KTsKICBfX19yZXN1bWVFeGNlcHRpb24oaTUgfCAwKTsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDE3LCBpNyB8IDAsIGk0IHwgMCwgaTYgfCAwLCBpMSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogICBpMTEgPSBfX1RIUkVXX187CiAgIF9fVEhSRVdfXyA9IDA7CiAgIGlmICghKGkxMSAmIDEpKSB7CiAgICBpNSA9IGkxOwogICAgYnJlYWs7CiAgIH0KICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIEhFQVAzMltpNiA+PiAyXSB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogIGkxMSA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMTEgJiAxKSB7CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxMDsKICAgcmV0dXJuIGk3IHwgMDsKICB9CiB9IGVsc2UgaTkgPSA5OyB3aGlsZSAoMCk7CiBpZiAoKGk5IHwgMCkgPT0gOSkgaTUgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMTEgJiAxKSB7CiAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiB9IGVsc2UgewogIF9fWmRsUHYoaTcpOwogIF9fX3Jlc3VtZUV4Y2VwdGlvbihpNSB8IDApOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRHluRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFKGk0LCBpOCkgewogaTQgPSBpNCB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDA7CiBpMTAgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTEgPSBpMTA7CiBpNiA9IGkxMCArIDEyIHwgMDsKIGkyID0gaTEwICsgOCB8IDA7CiBpNyA9IF9fWm53aig4KSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBkbyBpZiAoIShpMTEgJiAxKSA/IChIRUFQMzJbaTEgPj4gMl0gPSBpOCwgX19USFJFV19fID0gMCwgaTMgPSBpbnZva2VfaWlpKDY0LCAxMzI0OCwgaTEgfCAwKSB8IDAsIGkxMSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgIShpMTEgJiAxKSkgOiAwKSB7CiAgSEVBUDMyW2k2ID4+IDJdID0gaTM7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBfX1RIUkVXX18gPSAwOwogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMiA+PiAyXTsKICBpbnZva2VfdmlpaWkoMTYsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUoaTQsIGk4KSB7CiBpNCA9IGk0IHwgMDsKIGk4ID0gaTggfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMDsKIGkxMCA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMSA9IGkxMDsKIGk2ID0gaTEwICsgMTIgfCAwOwogaTIgPSBpMTAgKyA4IHwgMDsKIGk3ID0gX19abndqKDgpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpOCB8IDApOwogaTExID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGRvIGlmICghKGkxMSAmIDEpID8gKEhFQVAzMltpMSA+PiAyXSA9IGk4LCBfX1RIUkVXX18gPSAwLCBpMyA9IGludm9rZV9paWkoNjQsIDEzMjQ4LCBpMSB8IDApIHwgMCwgaTExID0gX19USFJFV19fLCBfX1RIUkVXX18gPSAwLCAhKGkxMSAmIDEpKSA6IDApIHsKICBIRUFQMzJbaTYgPj4gMl0gPSBpMzsKICBIRUFQMzJbaTIgPj4gMl0gPSAwOwogIF9fVEhSRVdfXyA9IDA7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kyID4+IDJdOwogIGludm9rZV92aWlpaSgxOCwgaTcgfCAwLCBpNCB8IDAsIGk2IHwgMCwgaTEgfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogICBfX1RIUkVXX18gPSAwOwogICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICAgaTExID0gX19USFJFV19fOwogICBfX1RIUkVXX18gPSAwOwogICBpZiAoIShpMTEgJiAxKSkgewogICAgaTUgPSBpMTsKICAgIGJyZWFrOwogICB9CiAgIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKICB9CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTYgPj4gMl0gfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKICBpMTEgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTExICYgMSkgewogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTA7CiAgIHJldHVybiBpNyB8IDA7CiAgfQogfSBlbHNlIGk5ID0gOTsgd2hpbGUgKDApOwogaWYgKChpOSB8IDApID09IDkpIGk1ID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTggfCAwKTsKIGkxMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTExICYgMSkgewogIGkxMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogfSBlbHNlIHsKICBfX1pkbFB2KGk3KTsKICBfX19yZXN1bWVFeGNlcHRpb24oaTUgfCAwKTsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU9zY0VFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRShpNCwgaTgpIHsKIGk0ID0gaTQgfCAwOwogaTggPSBpOCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTEwID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxID0gaTEwOwogaTYgPSBpMTAgKyAxMiB8IDA7CiBpMiA9IGkxMCArIDggfCAwOwogaTcgPSBfX1pud2ooOCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogZG8gaWYgKCEoaTExICYgMSkgPyAoSEVBUDMyW2kxID4+IDJdID0gaTgsIF9fVEhSRVdfXyA9IDAsIGkzID0gaW52b2tlX2lpaSg2NCwgMTMyNDgsIGkxIHwgMCkgfCAwLCBpMTEgPSBfX1RIUkVXX18sIF9fVEhSRVdfXyA9IDAsICEoaTExICYgMSkpIDogMCkgewogIEhFQVAzMltpNiA+PiAyXSA9IGkzOwogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgX19USFJFV19fID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgaW52b2tlX3ZpaWlpKDgsIGk3IHwgMCwgaTQgfCAwLCBpNiB8IDAsIGkxIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICAgX19USFJFV19fID0gMDsKICAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgIGkxMSA9IF9fVEhSRVdfXzsKICAgX19USFJFV19fID0gMDsKICAgaWYgKCEoaTExICYgMSkpIHsKICAgIGk1ID0gaTE7CiAgICBicmVhazsKICAgfQogICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxMSk7CiAgfQogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2k2ID4+IDJdIHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0KICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiAgaTExID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkxMSAmIDEpIHsKICAgaTExID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMTEpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTEwOwogICByZXR1cm4gaTcgfCAwOwogIH0KIH0gZWxzZSBpOSA9IDk7IHdoaWxlICgwKTsKIGlmICgoaTkgfCAwKSA9PSA5KSBpNSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGk4IHwgMCk7CiBpMTEgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkxMSAmIDEpIHsKICBpMTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTExKTsKIH0gZWxzZSB7CiAgX19aZGxQdihpNyk7CiAgX19fcmVzdW1lRXhjZXB0aW9uKGk1IHwgMCk7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwbWF4aUNob3J1czZjaG9ydXNFZGpkZGQoaTEwLCBkOSwgaTMsIGQ4LCBkMiwgZDYpIHsKIGkxMCA9IGkxMCB8IDA7CiBkOSA9ICtkOTsKIGkzID0gaTMgfCAwOwogZDggPSArZDg7CiBkMiA9ICtkMjsKIGQ2ID0gK2Q2OwogdmFyIGkxID0gMCwgZDQgPSAwLjAsIGQ1ID0gMC4wLCBkNyA9IDAuMCwgaTExID0gMDsKIGQ1ID0gKyhfcmFuZCgpIHwgMCkgKiA0LjY1NjYxMjg3MzA3NzM5M2UtMTAgKiAyLjAgKyAtMS4wOwogSEVBUEY2NFtpMTAgKyAxNDExMzEyID4+IDNdID0gZDU7CiBpMSA9IGkxMCArIDE0MTE1NTIgfCAwOwogZDIgPSBkMiA8IDEwLjAgPyAxMC4wIDogZDI7CiBIRUFQRjY0W2kxID4+IDNdID0gZDI7CiBkNCA9ICsoSEVBUDMyWzUwODNdIHwgMCk7CiBpZiAoZDIgPiBkNCkgewogIEhFQVBGNjRbaTEgPj4gM10gPSBkNDsKICBkMiA9IGQ0OwogfQogZDQgPSArTWF0aF9jb3MoKyhkMiAqIDYuMjgzMTg1MzA3MTc5NTg2IC8gZDQpKTsKIEhFQVBGNjRbaTEwICsgMTQxMTUzNiA+PiAzXSA9IGQ0OwogZDcgPSAyLjAgLSBkNCAqIDIuMDsKIEhFQVBGNjRbaTEwICsgMTQxMTU0NCA+PiAzXSA9IGQ3OwogZDQgPSBkNCArIC0xLjA7CiBkNCA9IChkNCArICtNYXRoX3NxcnQoKy0rTWF0aF9wb3coK2Q0LCAzLjApKSAqIDEuNDE0MjEzNTYyMzczMDk1MSkgLyBkNDsKIGkxID0gaTEwICsgMTQxMTUyMCB8IDA7CiBpMTEgPSBpMTAgKyAxNDExNTI4IHwgMDsKIGQyID0gK0hFQVBGNjRbaTExID4+IDNdOwogZDcgPSArSEVBUEY2NFtpMSA+PiAzXSArIGQ3ICogKGQ1IC0gZDIpOwogZDUgPSBkMiArIGQ3OwogSEVBUEY2NFtpMTEgPj4gM10gPSBkNTsKIEhFQVBGNjRbaTEgPj4gM10gPSBkNCAqIGQ3OwogSEVBUEY2NFtpMTAgKyAxNDExMzQ0ID4+IDNdID0gZDU7CiBkNyA9ICsoaTMgPj4+IDApOwogZDUgPSBkNyAqIChkNSAqIDIuMCAqIGQ2KTsKIGkzID0gaTEwICsgOCB8IDA7CiBpMSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpZiAoKGkxIHwgMCkgPj0gKH5+KGQ3ICsgZDUgKyAxLjApIHwgMCkpIHsKICBIRUFQMzJbaTMgPj4gMl0gPSAwOwogIGkxID0gMDsKIH0KIGkxMSA9IGkxMCArIDQwICsgKGkxIDw8IDMpIHwgMDsKIGkxID0gaTEwICsgMzIgfCAwOwogSEVBUEY2NFtpMSA+PiAzXSA9ICtIRUFQRjY0W2kxMSA+PiAzXTsKIEhFQVBGNjRbaTExID4+IDNdID0gZDkgKiBkOCAqIC41ICsgK0hFQVBGNjRbaTExID4+IDNdICogZDg7CiBIRUFQMzJbaTMgPj4gMl0gPSAoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyAxOwogZDQgPSArSEVBUEY2NFtpMSA+PiAzXTsKIGQyID0gZDggKiAuOTk7CiBpMyA9IGkxMCArIDcwNTY0OCB8IDA7CiBpMSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpZiAoKGkxIHwgMCkgPj0gKH5+KChkNyArIGQ1ICogMS4wMiArIDEuMCkgKiAuOTgpIHwgMCkpIHsKICBIRUFQMzJbaTMgPj4gMl0gPSAwOwogIGkxID0gMDsKIH0KIGkxID0gaTEwICsgNzA1NjgwICsgKGkxIDw8IDMpIHwgMDsKIGkxMSA9IGkxMCArIDcwNTY3MiB8IDA7CiBIRUFQRjY0W2kxMSA+PiAzXSA9ICtIRUFQRjY0W2kxID4+IDNdOwogSEVBUEY2NFtpMSA+PiAzXSA9IGQyICogZDkgKiAuNSArIGQyICogK0hFQVBGNjRbaTEgPj4gM107CiBIRUFQMzJbaTMgPj4gMl0gPSAoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyAxOwogZDggPSArSEVBUEY2NFtpMTEgPj4gM107CiByZXR1cm4gKygoZDQgKiAoMS4wIC0gK01hdGhfYWJzKCtkNCkpICsgZDggKiAoMS4wIC0gK01hdGhfYWJzKCtkOCkpICsgZDkpIC8gMy4wKTsKfQoKZnVuY3Rpb24gX2xvZzEwKGQxKSB7CiBkMSA9ICtkMTsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGQ2ID0gMC4wLCBkNyA9IDAuMCwgZDggPSAwLjAsIGQ5ID0gMC4wLCBkMTAgPSAwLjA7CiBIRUFQRjY0W3RlbXBEb3VibGVQdHIgPj4gM10gPSBkMTsKIGkzID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gfCAwOwogaTIgPSBIRUFQMzJbdGVtcERvdWJsZVB0ciArIDQgPj4gMl0gfCAwOwogaTQgPSAoaTIgfCAwKSA8IDA7CiBkbyBpZiAoaTQgfCBpMiA+Pj4gMCA8IDEwNDg1NzYpIHsKICBpZiAoKGkzIHwgMCkgPT0gMCAmIChpMiAmIDIxNDc0ODM2NDcgfCAwKSA9PSAwKSB7CiAgIGQxID0gLTEuMCAvIChkMSAqIGQxKTsKICAgYnJlYWs7CiAgfQogIGlmIChpNCkgewogICBkMSA9IChkMSAtIGQxKSAvIDAuMDsKICAgYnJlYWs7CiAgfSBlbHNlIHsKICAgSEVBUEY2NFt0ZW1wRG91YmxlUHRyID4+IDNdID0gZDEgKiAxODAxNDM5ODUwOTQ4MTk4NC4wOwogICBpMiA9IEhFQVAzMlt0ZW1wRG91YmxlUHRyICsgNCA+PiAyXSB8IDA7CiAgIGk0ID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gfCAwOwogICBpMyA9IC0xMDc3OwogICBpNSA9IDk7CiAgIGJyZWFrOwogIH0KIH0gZWxzZSBpZiAoaTIgPj4+IDAgPD0gMjE0NjQzNTA3MSkgaWYgKChpMyB8IDApID09IDAgJiAwID09IDAgJiAoaTIgfCAwKSA9PSAxMDcyNjkzMjQ4KSBkMSA9IDAuMDsgZWxzZSB7CiAgaTQgPSBpMzsKICBpMyA9IC0xMDIzOwogIGk1ID0gOTsKIH0gd2hpbGUgKDApOwogaWYgKChpNSB8IDApID09IDkpIHsKICBpNSA9IGkyICsgNjE0MjQyIHwgMDsKICBIRUFQMzJbdGVtcERvdWJsZVB0ciA+PiAyXSA9IGk0OwogIEhFQVAzMlt0ZW1wRG91YmxlUHRyICsgNCA+PiAyXSA9IChpNSAmIDEwNDg1NzUpICsgMTA3MjA3OTAwNjsKICBkMTAgPSArSEVBUEY2NFt0ZW1wRG91YmxlUHRyID4+IDNdICsgLTEuMDsKICBkMSA9IGQxMCAqIChkMTAgKiAuNSk7CiAgZDggPSBkMTAgLyAoZDEwICsgMi4wKTsKICBkOSA9IGQ4ICogZDg7CiAgZDcgPSBkOSAqIGQ5OwogIEhFQVBGNjRbdGVtcERvdWJsZVB0ciA+PiAzXSA9IGQxMCAtIGQxOwogIGk0ID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgKyA0ID4+IDJdIHwgMDsKICBIRUFQMzJbdGVtcERvdWJsZVB0ciA+PiAyXSA9IDA7CiAgSEVBUDMyW3RlbXBEb3VibGVQdHIgKyA0ID4+IDJdID0gaTQ7CiAgZDYgPSArSEVBUEY2NFt0ZW1wRG91YmxlUHRyID4+IDNdOwogIGQxID0gZDggKiAoZDEgKyAoZDcgKiAoZDcgKiAoZDcgKiAuMTUzMTM4Mzc2OTkyMDkzNzMgKyAuMjIyMjIxOTg0MzIxNDk3ODQpICsgLjM5OTk5OTk5OTk5NDA5NDIpICsgZDkgKiAoZDcgKiAoZDcgKiAoZDcgKiAuMTQ3OTgxOTg2MDUxMTY1ODYgKyAuMTgxODM1NzIxNjE2MTgwNSkgKyAuMjg1NzE0Mjg3NDM2NjIzOSkgKyAuNjY2NjY2NjY2NjY2NjczNSkpKSArIChkMTAgLSBkNiAtIGQxKTsKICBkMTAgPSBkNiAqIC40MzQyOTQ0ODE4NzgxNjg5OwogIGQ3ID0gKyhpMyArIChpNSA+Pj4gMjApIHwgMCk7CiAgZDkgPSBkNyAqIC4zMDEwMjk5OTU2NjM2MTE3NzsKICBkOCA9IGQ5ICsgZDEwOwogIGQxID0gZDggKyAoZDEwICsgKGQ5IC0gZDgpICsgKGQxICogLjQzNDI5NDQ4MTg3ODE2ODkgKyAoZDcgKiAzLjY5NDIzOTA3NzE1ODkzMWUtMTMgKyAoZDYgKyBkMSkgKiAyLjUwODI5NDY3MTE2NDUyNzVlLTExKSkpOwogfQogcmV0dXJuICtkMTsKfQoKZnVuY3Rpb24gX19aTjE2bWF4aU1GQ0NBbmFseXNlcklkRTE3Y2FsY01lbEZpbHRlckJhbmtFZGkoaTExLCBkNSwgaTE2KSB7CiBpMTEgPSBpMTEgfCAwOwogZDUgPSArZDU7CiBpMTYgPSBpMTYgfCAwOwogdmFyIGQxID0gMC4wLCBpMiA9IDAsIGQzID0gMC4wLCBpNCA9IDAsIGQ2ID0gMC4wLCBkNyA9IDAuMCwgZDggPSAwLjAsIGQ5ID0gMC4wLCBkMTAgPSAwLjAsIGkxMiA9IDAsIGkxMyA9IDAsIGkxNCA9IDAsIGkxNSA9IDA7CiBkMSA9IGQ1ICogLjU7CiBpMiA9IGkxMSArIDI0IHwgMDsKIGQzID0gK0hFQVBGNjRbaTIgPj4gM107CiBpZiAoZDMgPiBkMSkgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOyBlbHNlIGQxID0gZDM7CiBkMyA9ICtfbG9nMTAoZDEgLyA3MDAuMCArIDEuMCkgKiAyNTk1LjA7CiBkMSA9ICtfbG9nMTAoK0hFQVBGNjRbaTExICsgMTYgPj4gM10gLyA3MDAuMCArIDEuMCkgKiAyNTk1LjA7CiBpMTQgPSBIRUFQMzJbaTExICsgNCA+PiAyXSB8IDA7CiBkMyA9IChkMyAtIGQxKSAvICsoKGkxNCArIDEgfCAwKSA+Pj4gMCk7CiBpMTUgPSBfbWFsbG9jKChpMTQgPDwgMykgKyAxNiB8IDApIHwgMDsKIGlmICgoaTE0IHwgMCkgPT0gLTIpIGkyID0gLTI7IGVsc2UgewogIGkyID0gaTE0ICsgMiB8IDA7CiAgaTQgPSAwOwogIHdoaWxlICgxKSB7CiAgIGQxMCA9ICgrTWF0aF9wb3coMTAuMCwgKyhkMSAvIDI1OTUuMCkpICsgLTEuMCkgKiA3MDAuMDsKICAgSEVBUEY2NFtpMTUgKyAoaTQgPDwgMykgPj4gM10gPSBkMTA7CiAgIGk0ID0gaTQgKyAxIHwgMDsKICAgaWYgKGk0ID4+PiAwID49IGkyID4+PiAwKSB7CiAgICBpMiA9IGkxNDsKICAgIGJyZWFrOwogICB9IGVsc2UgZDEgPSBkMyArIGQxOwogIH0KIH0KIGkxMyA9IF9tYWxsb2MoTWF0aF9pbXVsKGkxNiA8PCAzLCBpMikgfCAwKSB8IDA7CiBIRUFQMzJbaTExICsgMzYgPj4gMl0gPSBpMTM7CiBpZiAoaTE0ID4+PiAwIDw9IDEpIHJldHVybjsKIGQxID0gZDUgLyArKGkxNiB8IDApOwogaWYgKChpMTYgfCAwKSA+IDApIGkxMSA9IDE7IGVsc2UgcmV0dXJuOwogZG8gewogIGQ3ID0gK0hFQVBGNjRbaTE1ICsgKGkxMSA8PCAzKSA+PiAzXTsKICBpMTIgPSBpMTE7CiAgaTExID0gaTExICsgMSB8IDA7CiAgZDUgPSArSEVBUEY2NFtpMTUgKyAoaTExIDw8IDMpID4+IDNdOwogIGQ2ID0gK0hFQVBGNjRbaTE1ICsgKGkxMiArIC0xIDw8IDMpID4+IDNdOwogIGQ5ID0gMi4wIC8gKGQ1IC0gZDYpOwogIGQxMCA9IGQ5IC8gKGQ3IC0gZDYpOwogIGQ4ID0gLWQ5IC8gKGQ1IC0gZDcpOwogIGk0ID0gMDsKICBkbyB7CiAgIGQzID0gKyhpNCB8IDApICogZDE7CiAgIGkyID0gKE1hdGhfaW11bChpMTQsIGk0KSB8IDApICsgaTEyIHwgMDsKICAgZG8gaWYgKCEoZDMgPiBkNSB8IGQzIDwgZDYpKSBpZiAoZDMgPCBkNykgewogICAgSEVBUEY2NFtpMTMgKyAoaTIgPDwgMykgPj4gM10gPSAoZDMgLSBkNikgKiBkMTA7CiAgICBicmVhazsKICAgfSBlbHNlIHsKICAgIEhFQVBGNjRbaTEzICsgKGkyIDw8IDMpID4+IDNdID0gZDkgKyAoZDMgLSBkNykgKiBkODsKICAgIGJyZWFrOwogICB9IGVsc2UgSEVBUEY2NFtpMTMgKyAoaTIgPDwgMykgPj4gM10gPSAwLjA7IHdoaWxlICgwKTsKICAgaTQgPSBpNCArIDEgfCAwOwogIH0gd2hpbGUgKChpNCB8IDApICE9IChpMTYgfCAwKSk7CiB9IHdoaWxlIChpMTEgPj4+IDAgPCBpMTQgPj4+IDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlNXBsYXk0RWRkZChpNywgZDMsIGQ1LCBkNikgewogaTcgPSBpNyB8IDA7CiBkMyA9ICtkMzsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiB2YXIgZDEgPSAwLjAsIGkyID0gMCwgaTQgPSAwLCBkOCA9IDAuMCwgZDkgPSAwLjAsIGQxMCA9IDAuMCwgaTExID0gMDsKIGkyID0gaTcgKyA0MCB8IDA7CiBkMSA9ICtIRUFQRjY0W2kyID4+IDNdOwogaWYgKCEoZDMgPiAwLjApKSB7CiAgaWYgKGQxIDw9IGQ1KSB7CiAgIEhFQVBGNjRbaTIgPj4gM10gPSBkNjsKICAgZDEgPSBkNjsKICB9CiAgZDEwID0gZDEgLSAoZDYgLSBkNSkgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvIC0oK0hFQVBGMzJbNTA4Ml0gKiBkMykpOwogIEhFQVBGNjRbaTIgPj4gM10gPSBkMTA7CiAgZDkgPSBkMTAgLSArTWF0aF9mbG9vcigrZDEwKTsKICBpMTEgPSBkMTAgPiBkNTsKICBpNCA9IEhFQVAzMltpNyArIDEyOCA+PiAyXSB8IDA7CiAgaTIgPSB+fmQxMDsKICBkMyA9ICsoSEVBUDE2WyhpMTEgJiBkMTAgPCBkNiArIC0xLjAgPyBpNCArIChpMiArIDEgPDwgMSkgfCAwIDogaTQpID4+IDFdIHwgMCk7CiAgZDggPSArKEhFQVAxNltpNCArIChpMiA8PCAxKSA+PiAxXSB8IDApOwogIGQxID0gKyhIRUFQMTZbKGkxMSA/IGk0ICsgKGkyICsgLTEgPDwgMSkgfCAwIDogaTQpID4+IDFdIHwgMCk7CiAgZDUgPSArKEhFQVAxNlsoZDEwID4gZDUgKyAxLjAgPyBpNCArIChpMiArIC0yIDw8IDEpIHwgMCA6IGk0KSA+PiAxXSB8IDApOwogIGQ2ID0gLWQ5OwogIGQ2ID0gKGQ4ICsgKChkMSAtIGQzKSAqIC41ICsgKGQzIC0gZDggKiAyLjUgKyBkMSAqIDIuMCAtIGQ1ICogLjUgKyBkOSAqICgoZDggLSBkMSkgKiAxLjUgKyAoZDUgLSBkMykgKiAuNSkpICogZDYpICogZDYpIC8gMzI3NjcuMDsKICBIRUFQRjY0W2k3ICsgNjQgPj4gM10gPSBkNjsKICByZXR1cm4gK2Q2OwogfQogaWYgKGQxIDwgZDUpIHsKICBIRUFQRjY0W2kyID4+IDNdID0gZDU7CiAgZDEgPSBkNTsKIH0KIGlmIChkMSA+PSBkNikgewogIEhFQVBGNjRbaTIgPj4gM10gPSBkNTsKICBkMSA9IGQ1OwogfQogZDUgPSAoZDYgLSBkNSkgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvICgrSEVBUEYzMls1MDgyXSAqIGQzKSkgKyBkMTsKIEhFQVBGNjRbaTIgPj4gM10gPSBkNTsKIGQxID0gK01hdGhfZmxvb3IoK2Q1KTsKIGQzID0gZDUgLSBkMTsKIGk0ID0gSEVBUDMyW2k3ICsgMTI4ID4+IDJdIHwgMDsKIGlmIChkNSA+IDAuMCkgaTIgPSBpNCArICh+fmQxICsgLTEgPDwgMSkgfCAwOyBlbHNlIGkyID0gaTQ7CiBkMTAgPSArKEhFQVAxNltpMiA+PiAxXSB8IDApOwogaTExID0gfn5kNTsKIGQxID0gKyhIRUFQMTZbaTQgKyAoaTExIDw8IDEpID4+IDFdIHwgMCk7CiBkOCA9ICsoSEVBUDE2WyhkNSA8IGQ2ICsgLTIuMCA/IGk0ICsgKGkxMSArIDEgPDwgMSkgfCAwIDogaTQpID4+IDFdIHwgMCk7CiBkOSA9ICsoSEVBUDE2WyhkNSA8IGQ2ICsgLTMuMCA/IGk0ICsgKGkxMSArIDIgPDwgMSkgfCAwIDogaTQpID4+IDFdIHwgMCk7CiBkMTAgPSAoZDEgKyBkMyAqICgoZDggLSBkMTApICogLjUgKyBkMyAqIChkMTAgLSBkMSAqIDIuNSArIGQ4ICogMi4wIC0gZDkgKiAuNSArIGQzICogKChkMSAtIGQ4KSAqIDEuNSArIChkOSAtIGQxMCkgKiAuNSkpKSkgLyAzMjc2Ny4wOwogSEVBUEY2NFtpNyArIDY0ID4+IDNdID0gZDEwOwogcmV0dXJuICtkMTA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSThtYXhpSGF0c0pFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGQ0ID0gMC4wLCBkNSA9IDAuMCwgZDYgPSAwLjA7CiBpMiA9IF9fWm53aigzOTIpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMjU2ODsKIGkzID0gaTIgKyAyNCB8IDA7CiBIRUFQOFtpMiArIDQ4ID4+IDBdID0gMDsKIEhFQVA4W2kyICsgNDkgPj4gMF0gPSAwOwogSEVBUDhbaTIgKyA1MCA+PiAwXSA9IDA7CiBIRUFQRjY0W2kyICsgNTYgPj4gM10gPSAwLjA7CiBIRUFQOFtpMiArIDY0ID4+IDBdID0gMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTIgPj4gMl0gPSAwOwogSEVBUEY2NFtpMiArIDg4ID4+IDNdID0gMS4wOwogSEVBUEY2NFtpMiArIDEwNCA+PiAzXSA9IDAuMDsKIEhFQVBGNjRbaTIgKyAxNTIgPj4gM10gPSAwLjA7CiBpMyA9IGkyICsgMjg4IHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTIgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTYgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMjAgPj4gMl0gPSAwOwogZDUgPSArKEhFQVAzMls1MDgzXSB8IDApOwogZDYgPSAxLjAgLSArTWF0aF9wb3coLjAxLCArKDEuMCAvIChkNSAqIDAuMCAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMjA4ID4+IDNdID0gZDY7CiBpMyA9IGkyICsgMTYgfCAwOwogSEVBUEY2NFtpMyA+PiAzXSA9IDEyLjBlMzsKIGQ2ID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoZDUgKiAyMC4wICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyAyMTYgPj4gM10gPSBkNjsKIEhFQVBGNjRbaTIgKyAyMjQgPj4gM10gPSAuMTsKIGQ2ID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoZDUgKiAzMDAuMCAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMjMyID4+IDNdID0gZDY7CiBIRUFQMzJbaTIgKyAyNTIgPj4gMl0gPSAxOwogSEVBUDMyW2kyICsgMjQ4ID4+IDJdID0gMDsKIEhFQVBGNjRbaTIgKyAzNzYgPj4gM10gPSA4LjBlMzsKIGQ1ID0gK01hdGhfdGFuKCsoMjUxMzIuNzQxMjI4NzE4MzQzIC8gZDUpKTsKIEhFQVBGNjRbaTIgKyAzODQgPj4gM10gPSAxLjA7CiBIRUFQRjY0W2kyICsgMzEyID4+IDNdID0gZDU7CiBIRUFQRjY0W2kyICsgMzIwID4+IDNdID0gMS4wOwogSEVBUEY2NFtpMiArIDMyOCA+PiAzXSA9IDEuMDsKIGQ2ID0gZDUgKyAxLjA7CiBkNCA9IGQ1IC8gKGQ1ICogZDYgKyAxLjApOwogSEVBUEY2NFtpMiArIDMzNiA+PiAzXSA9IGQ0OwogSEVBUEY2NFtpMiArIDM0NCA+PiAzXSA9IGQ0OwogSEVBUEY2NFtpMiArIDM1MiA+PiAzXSA9IGQ0ICogKGQ2ICogMi4wKTsKIEhFQVBGNjRbaTIgKyAzNjAgPj4gM10gPSBkNSAqIGQ0OwogSEVBUEY2NFtpMiArIDM2OCA+PiAzXSA9IGQ0ICogMi4wOwogSEVBUDMyW2kxID4+IDJdID0gaTM7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTVwbGF5MkVkZGkoaTQsIGQzLCBkMSwgaTIpIHsKIGk0ID0gaTQgfCAwOwogZDMgPSArZDM7CiBkMSA9ICtkMTsKIGkyID0gaTIgfCAwOwogdmFyIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGQ4ID0gMC4wLCBpOSA9IDA7CiBpNyA9IGk0ICsgMzIgfCAwOwogZDggPSArSEVBUEY2NFtpNyA+PiAzXSArIDEuMDsKIEhFQVBGNjRbaTcgPj4gM10gPSBkODsKIGlmICgrTWF0aF9mbG9vcigrKCtfZm1vZChkOCwgKyhIRUFQMzJbNTA4M10gfCAwKSAqIGQxIC8gKyhpMiB8IDApKSkpID09IDAuMCkgewogIGk1ID0gSEVBUDMyW2k0ICsgOCA+PiAyXSB8IDA7CiAgaTcgPSBpNSArIDEwOCB8IDA7CiAgZDggPSArKEhFQVAzMltpNyA+PiAyXSB8IDApICogZDM7CiAgaTYgPSBfX1pud2ooMTA0KSB8IDA7CiAgZDggPSBkOCAvICsoSEVBUDMyW2k3ID4+IDJdIHwgMCk7CiAgZDggPSBkOCA8IDEuMCA/IGQ4IDogMS4wOwogIF9fWk45bWF4aUdyYWluSTE0aGFubldpbkZ1bmN0b3JFQzJFUDEwbWF4aVNhbXBsZWRkZFAyMG1heGlHcmFpbldpbmRvd0NhY2hlSVMwX0UoaTYsIGk1LCBkOCA8IDAuMCA/IDAuMCA6IGQ4LCBkMSwgMS4wLCBpNCArIDE2IHwgMCk7CiAgaTUgPSBIRUFQMzJbaTQgKyAxMiA+PiAyXSB8IDA7CiAgaTcgPSBfX1pud2ooMTIpIHwgMDsKICBIRUFQMzJbaTcgKyA4ID4+IDJdID0gaTY7CiAgSEVBUDMyW2k3ICsgNCA+PiAyXSA9IGk1OwogIGk2ID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICBIRUFQMzJbaTcgPj4gMl0gPSBpNjsKICBIRUFQMzJbaTYgKyA0ID4+IDJdID0gaTc7CiAgSEVBUDMyW2k1ID4+IDJdID0gaTc7CiAgaTcgPSBpNSArIDggfCAwOwogIEhFQVAzMltpNyA+PiAyXSA9IChIRUFQMzJbaTcgPj4gMl0gfCAwKSArIDE7CiB9IGVsc2UgaTUgPSBIRUFQMzJbaTQgKyAxMiA+PiAyXSB8IDA7CiBpMiA9IEhFQVAzMltpNSArIDQgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApID09IChpNSB8IDApKSB7CiAgZDggPSAwLjA7CiAgcmV0dXJuICtkODsKIH0KIGk2ID0gaTUgKyA4IHwgMDsKIGk3ID0gaTI7CiBkMSA9IDAuMDsKIGRvIHsKICBpNCA9IGk3ICsgOCB8IDA7CiAgaTkgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIGQxID0gZDEgKyArRlVOQ1RJT05fVEFCTEVfZGlbSEVBUDMyW0hFQVAzMltpOSA+PiAyXSA+PiAyXSAmIDMxXShpOSk7CiAgaTQgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIGlmICghKEhFQVA4W2k0ICsgNCA+PiAwXSB8IDApKSBpMiA9IEhFQVAzMltpNyArIDQgPj4gMl0gfCAwOyBlbHNlIHsKICAgaWYgKGk0KSBGVU5DVElPTl9UQUJMRV92aVtIRUFQMzJbKEhFQVAzMltpNCA+PiAyXSB8IDApICsgOCA+PiAyXSAmIDUxMV0oaTQpOwogICBpNyA9IGk3ICsgNCB8IDA7CiAgIGk5ID0gSEVBUDMyW2k3ID4+IDJdIHwgMDsKICAgaTQgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogICBIRUFQMzJbaTQgKyA0ID4+IDJdID0gaTk7CiAgIEhFQVAzMltIRUFQMzJbaTcgPj4gMl0gPj4gMl0gPSBpNDsKICAgSEVBUDMyW2k2ID4+IDJdID0gKEhFQVAzMltpNiA+PiAyXSB8IDApICsgLTE7CiAgIF9fWmRsUHYoaTIpOwogICBpMiA9IGk5OwogIH0KICBpNyA9IGkyOwogfSB3aGlsZSAoKGk3IHwgMCkgIT0gKGk1IHwgMCkpOwogcmV0dXJuICtkMTsKfQoKZnVuY3Rpb24gX19aTjltYXhpR3JhaW5JMTRoYW5uV2luRnVuY3RvckVDMkVQMTBtYXhpU2FtcGxlZGRkUDIwbWF4aUdyYWluV2luZG93Q2FjaGVJUzBfRShpOSwgaTEsIGQyLCBkNSwgZDYsIGkzKSB7CiBpOSA9IGk5IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogaTMgPSBpMyB8IDA7CiB2YXIgaTQgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTEwID0gMDsKIEhFQVAzMltpOSA+PiAyXSA9IDIzMzQ0OwogSEVBUDMyW2k5ICsgOCA+PiAyXSA9IGkxOwogSEVBUEY2NFtpOSArIDI0ID4+IDNdID0gZDU7CiBIRUFQRjY0W2k5ICsgNTYgPj4gM10gPSBkNjsKIEhFQVAzMltpOSArIDg0ID4+IDJdID0gSEVBUDMyW2kxICsgMTI4ID4+IDJdOwogaTQgPSBpMSArIDEwOCB8IDA7CiBpMTAgPSB+figrKEhFQVAzMltpNCA+PiAyXSB8IDApICogZDIpOwogSEVBUDMyW2k5ICsgMzIgPj4gMl0gPSBpMTA7CiBpOCA9IH5+KCsoSEVBUDMyW2kxICsgMTA0ID4+IDJdIHwgMCkgKiBkNSk7CiBIRUFQMzJbaTkgKyA0MCA+PiAyXSA9IGk4OwogaTcgPSBpOCArIC0xIHwgMDsKIEhFQVAzMltpOSArIDk2ID4+IDJdID0gaTc7CiBIRUFQMzJbaTkgKyAzNiA+PiAyXSA9IDA7CiBIRUFQOFtpOSArIDQgPj4gMF0gPSAwOwogZDIgPSAxLjAgLyBkNTsKIEhFQVBGNjRbaTkgKyA0OCA+PiAzXSA9IGQyOwogaTEgPSBpOCArIGkxMCB8IDA7CiBpNCA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBpNCA9IChpMSB8IDApIDwgKGk0IHwgMCkgPyBpMSA6IGk0OwogSEVBUDMyW2k5ICsgNDQgPj4gMl0gPSBpNDsKIGQyID0gZDIgKiBkNjsKIEhFQVBGNjRbaTkgKyA3MiA+PiAzXSA9IGQyOwogSEVBUEY2NFtpOSArIDE2ID4+IDNdID0gKygoZDIgPiAwLjAgPyBpMTAgOiBpNCkgfCAwKTsKIGlmIChkMiAhPSAwLjApIGQyID0gKyhpOCB8IDApIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkMik7IGVsc2UgZDIgPSAwLjA7CiBIRUFQRjY0W2k5ICsgNjQgPj4gM10gPSBkMjsKIGk0ID0gaTMgKyA0IHwgMDsKIGkxID0gKEhFQVAzMltpNCA+PiAyXSB8IDApICsgKGk4IDw8IDIpIHwgMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGlmIChpMykgewogIGk4ID0gaTM7CiAgaTEwID0gaTkgKyA4MCB8IDA7CiAgSEVBUDMyW2kxMCA+PiAyXSA9IGk4OwogIHJldHVybjsKIH0KIGkxMCA9IF9tYWxsb2MoaTggPDwgMykgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gaTEwOwogaWYgKCFpOCkgewogIGk4ID0gSEVBUDMyW0hFQVAzMltpNCA+PiAyXSA+PiAyXSB8IDA7CiAgaTEwID0gaTkgKyA4MCB8IDA7CiAgSEVBUDMyW2kxMCA+PiAyXSA9IGk4OwogIHJldHVybjsKIH0KIGQyID0gKyhpNyA+Pj4gMCk7CiBpMSA9IEhFQVAzMlsoSEVBUDMyW2k0ID4+IDJdIHwgMCkgKyAoaTggPDwgMikgPj4gMl0gfCAwOwogaTMgPSAwOwogZG8gewogIGQ2ID0gKDEuMCAtICtNYXRoX2NvcygrKCsoaTMgPj4+IDApICogNi4yODMxODUzMDcxNzk1ODYgLyBkMikpKSAqIC41OwogIEhFQVBGNjRbaTEgKyAoaTMgPDwgMykgPj4gM10gPSBkNjsKICBpMyA9IGkzICsgMSB8IDA7CiB9IHdoaWxlICgoaTMgfCAwKSAhPSAoaTggfCAwKSk7CiBpMTAgPSBpOSArIDgwIHwgMDsKIEhFQVAzMltpMTAgPj4gMl0gPSBpMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwbWF4aVNhbXBsZTlzZXRTYW1wbGVFUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWkoaTE1LCBpMTQsIGkxMykgewogaTE1ID0gaTE1IHwgMDsKIGkxNCA9IGkxNCB8IDA7CiBpMTMgPSBpMTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMSA9IDAsIGkxMiA9IDA7CiBpMSA9IEhFQVAzMltpMTQgPj4gMl0gfCAwOwogaTEyID0gKEhFQVAzMltpMTQgKyA0ID4+IDJdIHwgMCkgLSBpMSB8IDA7CiBpMTEgPSBpMTUgKyAxMDggfCAwOwogSEVBUDMyW2kxMSA+PiAyXSA9IGkxMiA+PiAzOwogaWYgKChpMTIgfCAwKSA8PSAwKSB7CiAgaTE1ID0gaTE1ICsgMTA0IHwgMDsKICBIRUFQMzJbaTE1ID4+IDJdID0gaTEzOwogIHJldHVybjsKIH0KIGkxMiA9IGkxNSArIDEyOCB8IDA7CiBpOSA9IGkxNSArIDEzMiB8IDA7CiBpMTAgPSBpMTUgKyAxMzYgfCAwOwogaTIgPSAwOwogd2hpbGUgKDEpIHsKICBpOCA9IH5+KCtIRUFQRjY0W2kxICsgKGkyIDw8IDMpID4+IDNdICogMzI3NjcuMCk7CiAgaTQgPSBIRUFQMzJbaTkgPj4gMl0gfCAwOwogIGkxID0gSEVBUDMyW2kxMCA+PiAyXSB8IDA7CiAgaWYgKGk0ID4+PiAwID49IGkxID4+PiAwKSB7CiAgIGkzID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiAgIGk1ID0gaTM7CiAgIGk3ID0gaTQgLSBpNSB8IDA7CiAgIGk2ID0gKGk3ID4+IDEpICsgMSB8IDA7CiAgIGlmICgoaTcgfCAwKSA8IC0yKSB7CiAgICBfX1pOS1N0M19fMTIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUUyMF9fdGhyb3dfbGVuZ3RoX2Vycm9yRXYoaTEyKTsKICAgIGk3ID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiAgICBpMSA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogICAgaTMgPSBpNzsKICAgIGk0ID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsKICAgfSBlbHNlIGk3ID0gaTU7CiAgIGk1ID0gaTM7CiAgIGkxID0gaTEgLSBpNSB8IDA7CiAgIGk2ID0gaTEgPj4gMSA+Pj4gMCA8IDEwNzM3NDE4MjMgPyAoaTEgPj4+IDAgPCBpNiA+Pj4gMCA/IGk2IDogaTEpIDogMjE0NzQ4MzY0NzsKICAgaTEgPSBpNCAtIGk1IHwgMDsKICAgaTQgPSBpMSA+PiAxOwogICBpZiAoIWk2KSBpNSA9IDA7IGVsc2UgaTUgPSBfX1pud2ooaTYgPDwgMSkgfCAwOwogICBIRUFQMTZbaTUgKyAoaTQgPDwgMSkgPj4gMV0gPSBpODsKICAgX21lbWNweShpNSB8IDAsIGkzIHwgMCwgaTEgfCAwKSB8IDA7CiAgIEhFQVAzMltpMTIgPj4gMl0gPSBpNTsKICAgSEVBUDMyW2k5ID4+IDJdID0gaTUgKyAoaTQgKyAxIDw8IDEpOwogICBIRUFQMzJbaTEwID4+IDJdID0gaTUgKyAoaTYgPDwgMSk7CiAgIGlmIChpNykgX19aZGxQdihpNyk7CiAgfSBlbHNlIHsKICAgSEVBUDE2W2k0ID4+IDFdID0gaTg7CiAgIEhFQVAzMltpOSA+PiAyXSA9IGk0ICsgMjsKICB9CiAgaTIgPSBpMiArIDEgfCAwOwogIGlmICgoaTIgfCAwKSA+PSAoSEVBUDMyW2kxMSA+PiAyXSB8IDApKSBicmVhazsKICBpMSA9IEhFQVAzMltpMTQgPj4gMl0gfCAwOwogfQogaTE1ID0gaTE1ICsgMTA0IHwgMDsKIEhFQVAzMltpMTUgPj4gMl0gPSBpMTM7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2JlbG93X2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdmliKGkzLCBpNywgaTYsIGkyLCBpNCkgewogaTMgPSBpMyB8IDA7CiBpNyA9IGk3IHwgMDsKIGk2ID0gaTYgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMSA9IDAsIGk1ID0gMCwgaTggPSAwLCBpOSA9IDA7CiBMMSA6IGRvIGlmICgoaTMgfCAwKSA9PSAoSEVBUDMyW2k3ICsgOCA+PiAyXSB8IDApKSB7CiAgaWYgKChIRUFQMzJbaTcgKyA0ID4+IDJdIHwgMCkgPT0gKGk2IHwgMCkgPyAoaTEgPSBpNyArIDI4IHwgMCwgKEhFQVAzMltpMSA+PiAyXSB8IDApICE9IDEpIDogMCkgSEVBUDMyW2kxID4+IDJdID0gaTI7CiB9IGVsc2UgewogIGlmICgoaTMgfCAwKSAhPSAoSEVBUDMyW2k3ID4+IDJdIHwgMCkpIHsKICAgaTggPSBIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMDsKICAgRlVOQ1RJT05fVEFCTEVfdmlpaWlpW0hFQVAzMlsoSEVBUDMyW2k4ID4+IDJdIHwgMCkgKyAyNCA+PiAyXSAmIDddKGk4LCBpNywgaTYsIGkyLCBpNCk7CiAgIGJyZWFrOwogIH0KICBpZiAoKEhFQVAzMltpNyArIDE2ID4+IDJdIHwgMCkgIT0gKGk2IHwgMCkgPyAoaTUgPSBpNyArIDIwIHwgMCwgKEhFQVAzMltpNSA+PiAyXSB8IDApICE9IChpNiB8IDApKSA6IDApIHsKICAgSEVBUDMyW2k3ICsgMzIgPj4gMl0gPSBpMjsKICAgaTIgPSBpNyArIDQ0IHwgMDsKICAgaWYgKChIRUFQMzJbaTIgPj4gMl0gfCAwKSA9PSA0KSBicmVhazsKICAgaTEgPSBpNyArIDUyIHwgMDsKICAgSEVBUDhbaTEgPj4gMF0gPSAwOwogICBpOSA9IGk3ICsgNTMgfCAwOwogICBIRUFQOFtpOSA+PiAwXSA9IDA7CiAgIGkzID0gSEVBUDMyW2kzICsgOCA+PiAyXSB8IDA7CiAgIEZVTkNUSU9OX1RBQkxFX3ZpaWlpaWlbSEVBUDMyWyhIRUFQMzJbaTMgPj4gMl0gfCAwKSArIDIwID4+IDJdICYgM10oaTMsIGk3LCBpNiwgaTYsIDEsIGk0KTsKICAgaWYgKEhFQVA4W2k5ID4+IDBdIHwgMCkgewogICAgaWYgKCEoSEVBUDhbaTEgPj4gMF0gfCAwKSkgewogICAgIGkxID0gMTsKICAgICBpOCA9IDEzOwogICAgfQogICB9IGVsc2UgewogICAgaTEgPSAwOwogICAgaTggPSAxMzsKICAgfQogICBkbyBpZiAoKGk4IHwgMCkgPT0gMTMpIHsKICAgIEhFQVAzMltpNSA+PiAyXSA9IGk2OwogICAgaTkgPSBpNyArIDQwIHwgMDsKICAgIEhFQVAzMltpOSA+PiAyXSA9IChIRUFQMzJbaTkgPj4gMl0gfCAwKSArIDE7CiAgICBpZiAoKEhFQVAzMltpNyArIDM2ID4+IDJdIHwgMCkgPT0gMSA/IChIRUFQMzJbaTcgKyAyNCA+PiAyXSB8IDApID09IDIgOiAwKSB7CiAgICAgSEVBUDhbaTcgKyA1NCA+PiAwXSA9IDE7CiAgICAgaWYgKGkxKSBicmVhazsKICAgIH0gZWxzZSBpOCA9IDE2OwogICAgaWYgKChpOCB8IDApID09IDE2ID8gaTEgOiAwKSBicmVhazsKICAgIEhFQVAzMltpMiA+PiAyXSA9IDQ7CiAgICBicmVhayBMMTsKICAgfSB3aGlsZSAoMCk7CiAgIEhFQVAzMltpMiA+PiAyXSA9IDM7CiAgIGJyZWFrOwogIH0KICBpZiAoKGkyIHwgMCkgPT0gMSkgSEVBUDMyW2k3ICsgMzIgPj4gMl0gPSAxOwogfSB3aGlsZSAoMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fX2R5bmFtaWNfY2FzdChpMiwgaTMsIGkxMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpMTIgPSBpMTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEzID0gMCwgaTE0ID0gMDsKIGkxNCA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDY0IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMTMgPSBpMTQ7CiBpMTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTEwID0gaTIgKyAoSEVBUDMyW2kxMSArIC04ID4+IDJdIHwgMCkgfCAwOwogaTExID0gSEVBUDMyW2kxMSArIC00ID4+IDJdIHwgMDsKIEhFQVAzMltpMTMgPj4gMl0gPSBpMTI7CiBIRUFQMzJbaTEzICsgNCA+PiAyXSA9IGkyOwogSEVBUDMyW2kxMyArIDggPj4gMl0gPSBpMzsKIEhFQVAzMltpMTMgKyAxMiA+PiAyXSA9IGkxOwogaTEgPSBpMTMgKyAxNiB8IDA7CiBpMiA9IGkxMyArIDIwIHwgMDsKIGkzID0gaTEzICsgMjQgfCAwOwogaTQgPSBpMTMgKyAyOCB8IDA7CiBpNSA9IGkxMyArIDMyIHwgMDsKIGk2ID0gaTEzICsgNDAgfCAwOwogaTcgPSAoaTExIHwgMCkgPT0gKGkxMiB8IDApOwogaTggPSBpMTsKIGk5ID0gaTggKyAzNiB8IDA7CiBkbyB7CiAgSEVBUDMyW2k4ID4+IDJdID0gMDsKICBpOCA9IGk4ICsgNCB8IDA7CiB9IHdoaWxlICgoaTggfCAwKSA8IChpOSB8IDApKTsKIEhFQVAxNltpMSArIDM2ID4+IDFdID0gMDsKIEhFQVA4W2kxICsgMzggPj4gMF0gPSAwOwogTDEgOiBkbyBpZiAoaTcpIHsKICBIRUFQMzJbaTEzICsgNDggPj4gMl0gPSAxOwogIEZVTkNUSU9OX1RBQkxFX3ZpaWlpaWlbSEVBUDMyWyhIRUFQMzJbaTEyID4+IDJdIHwgMCkgKyAyMCA+PiAyXSAmIDNdKGkxMiwgaTEzLCBpMTAsIGkxMCwgMSwgMCk7CiAgaTEgPSAoSEVBUDMyW2kzID4+IDJdIHwgMCkgPT0gMSA/IGkxMCA6IDA7CiB9IGVsc2UgewogIEZVTkNUSU9OX1RBQkxFX3ZpaWlpaVtIRUFQMzJbKEhFQVAzMltpMTEgPj4gMl0gfCAwKSArIDI0ID4+IDJdICYgN10oaTExLCBpMTMsIGkxMCwgMSwgMCk7CiAgc3dpdGNoIChIRUFQMzJbaTEzICsgMzYgPj4gMl0gfCAwKSB7CiAgY2FzZSAwOgogICB7CiAgICBpMSA9IChIRUFQMzJbaTYgPj4gMl0gfCAwKSA9PSAxICYgKEhFQVAzMltpNCA+PiAyXSB8IDApID09IDEgJiAoSEVBUDMyW2k1ID4+IDJdIHwgMCkgPT0gMSA/IEhFQVAzMltpMiA+PiAyXSB8IDAgOiAwOwogICAgYnJlYWsgTDE7CiAgIH0KICBjYXNlIDE6CiAgIGJyZWFrOwogIGRlZmF1bHQ6CiAgIHsKICAgIGkxID0gMDsKICAgIGJyZWFrIEwxOwogICB9CiAgfQogIGlmICgoSEVBUDMyW2kzID4+IDJdIHwgMCkgIT0gMSA/ICEoKEhFQVAzMltpNiA+PiAyXSB8IDApID09IDAgJiAoSEVBUDMyW2k0ID4+IDJdIHwgMCkgPT0gMSAmIChIRUFQMzJbaTUgPj4gMl0gfCAwKSA9PSAxKSA6IDApIHsKICAgaTEgPSAwOwogICBicmVhazsKICB9CiAgaTEgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogfSB3aGlsZSAoMCk7CiBTVEFDS1RPUCA9IGkxNDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF92ZnByaW50ZihpMTUsIGkxMSwgaTEpIHsKIGkxNSA9IGkxNSB8IDA7CiBpMTEgPSBpMTEgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMCA9IDAsIGkxMiA9IDAsIGkxMyA9IDAsIGkxNCA9IDAsIGkxNiA9IDA7CiBpMTYgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAyMjQgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkxMCA9IGkxNiArIDgwIHwgMDsKIGkxNCA9IGkxNiArIDk2IHwgMDsKIGkxMyA9IGkxNjsKIGkxMiA9IGkxNiArIDEzNiB8IDA7CiBpMiA9IGkxNDsKIGkzID0gaTIgKyA0MCB8IDA7CiBkbyB7CiAgSEVBUDMyW2kyID4+IDJdID0gMDsKICBpMiA9IGkyICsgNCB8IDA7CiB9IHdoaWxlICgoaTIgfCAwKSA8IChpMyB8IDApKTsKIEhFQVAzMltpMTAgPj4gMl0gPSBIRUFQMzJbaTEgPj4gMl07CiBpZiAoKF9wcmludGZfY29yZSgwLCBpMTEsIGkxMCwgaTEzLCBpMTQpIHwgMCkgPCAwKSBpMSA9IC0xOyBlbHNlIHsKICBpZiAoKEhFQVAzMltpMTUgKyA3NiA+PiAyXSB8IDApID4gLTEpIGk4ID0gX19fbG9ja2ZpbGUoaTE1KSB8IDA7IGVsc2UgaTggPSAwOwogIGkxID0gSEVBUDMyW2kxNSA+PiAyXSB8IDA7CiAgaTkgPSBpMSAmIDMyOwogIGlmICgoSEVBUDhbaTE1ICsgNzQgPj4gMF0gfCAwKSA8IDEpIEhFQVAzMltpMTUgPj4gMl0gPSBpMSAmIC0zMzsKICBpMSA9IGkxNSArIDQ4IHwgMDsKICBpZiAoIShIRUFQMzJbaTEgPj4gMl0gfCAwKSkgewogICBpMyA9IGkxNSArIDQ0IHwgMDsKICAgaTQgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogICBIRUFQMzJbaTMgPj4gMl0gPSBpMTI7CiAgIGk1ID0gaTE1ICsgMjggfCAwOwogICBIRUFQMzJbaTUgPj4gMl0gPSBpMTI7CiAgIGk2ID0gaTE1ICsgMjAgfCAwOwogICBIRUFQMzJbaTYgPj4gMl0gPSBpMTI7CiAgIEhFQVAzMltpMSA+PiAyXSA9IDgwOwogICBpNyA9IGkxNSArIDE2IHwgMDsKICAgSEVBUDMyW2k3ID4+IDJdID0gaTEyICsgODA7CiAgIGkyID0gX3ByaW50Zl9jb3JlKGkxNSwgaTExLCBpMTAsIGkxMywgaTE0KSB8IDA7CiAgIGlmIChpNCkgewogICAgRlVOQ1RJT05fVEFCTEVfaWlpaVtIRUFQMzJbaTE1ICsgMzYgPj4gMl0gJiAxNV0oaTE1LCAwLCAwKSB8IDA7CiAgICBpMiA9IChIRUFQMzJbaTYgPj4gMl0gfCAwKSA9PSAwID8gLTEgOiBpMjsKICAgIEhFQVAzMltpMyA+PiAyXSA9IGk0OwogICAgSEVBUDMyW2kxID4+IDJdID0gMDsKICAgIEhFQVAzMltpNyA+PiAyXSA9IDA7CiAgICBIRUFQMzJbaTUgPj4gMl0gPSAwOwogICAgSEVBUDMyW2k2ID4+IDJdID0gMDsKICAgfQogIH0gZWxzZSBpMiA9IF9wcmludGZfY29yZShpMTUsIGkxMSwgaTEwLCBpMTMsIGkxNCkgfCAwOwogIGkxID0gSEVBUDMyW2kxNSA+PiAyXSB8IDA7CiAgSEVBUDMyW2kxNSA+PiAyXSA9IGkxIHwgaTk7CiAgaWYgKGk4KSBfX191bmxvY2tmaWxlKGkxNSk7CiAgaTEgPSAoaTEgJiAzMiB8IDApID09IDAgPyBpMiA6IC0xOwogfQogU1RBQ0tUT1AgPSBpMTY7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlOXNldFNhbXBsZUVSTlN0M19fMTZ2ZWN0b3JJZE5TMF85YWxsb2NhdG9ySWRFRUVFKGkxNCwgaTEzKSB7CiBpMTQgPSBpMTQgfCAwOwogaTEzID0gaTEzIHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTIgPSAwOwogaTEgPSBIRUFQMzJbaTEzID4+IDJdIHwgMDsKIGkxMiA9IChIRUFQMzJbaTEzICsgNCA+PiAyXSB8IDApIC0gaTEgfCAwOwogaTExID0gaTE0ICsgMTA4IHwgMDsKIEhFQVAzMltpMTEgPj4gMl0gPSBpMTIgPj4gMzsKIGlmICgoaTEyIHwgMCkgPD0gMCkgewogIGkxNCA9IGkxNCArIDEwNCB8IDA7CiAgSEVBUDMyW2kxNCA+PiAyXSA9IDQ0MTAwOwogIHJldHVybjsKIH0KIGkxMiA9IGkxNCArIDEyOCB8IDA7CiBpOSA9IGkxNCArIDEzMiB8IDA7CiBpMTAgPSBpMTQgKyAxMzYgfCAwOwogaTIgPSAwOwogd2hpbGUgKDEpIHsKICBpOCA9IH5+KCtIRUFQRjY0W2kxICsgKGkyIDw8IDMpID4+IDNdICogMzI3NjcuMCk7CiAgaTQgPSBIRUFQMzJbaTkgPj4gMl0gfCAwOwogIGkxID0gSEVBUDMyW2kxMCA+PiAyXSB8IDA7CiAgaWYgKGk0ID4+PiAwID49IGkxID4+PiAwKSB7CiAgIGkzID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiAgIGk1ID0gaTM7CiAgIGk3ID0gaTQgLSBpNSB8IDA7CiAgIGk2ID0gKGk3ID4+IDEpICsgMSB8IDA7CiAgIGlmICgoaTcgfCAwKSA8IC0yKSB7CiAgICBfX1pOS1N0M19fMTIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUUyMF9fdGhyb3dfbGVuZ3RoX2Vycm9yRXYoaTEyKTsKICAgIGk3ID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiAgICBpMSA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogICAgaTMgPSBpNzsKICAgIGk0ID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsKICAgfSBlbHNlIGk3ID0gaTU7CiAgIGk1ID0gaTM7CiAgIGkxID0gaTEgLSBpNSB8IDA7CiAgIGk2ID0gaTEgPj4gMSA+Pj4gMCA8IDEwNzM3NDE4MjMgPyAoaTEgPj4+IDAgPCBpNiA+Pj4gMCA/IGk2IDogaTEpIDogMjE0NzQ4MzY0NzsKICAgaTEgPSBpNCAtIGk1IHwgMDsKICAgaTQgPSBpMSA+PiAxOwogICBpZiAoIWk2KSBpNSA9IDA7IGVsc2UgaTUgPSBfX1pud2ooaTYgPDwgMSkgfCAwOwogICBIRUFQMTZbaTUgKyAoaTQgPDwgMSkgPj4gMV0gPSBpODsKICAgX21lbWNweShpNSB8IDAsIGkzIHwgMCwgaTEgfCAwKSB8IDA7CiAgIEhFQVAzMltpMTIgPj4gMl0gPSBpNTsKICAgSEVBUDMyW2k5ID4+IDJdID0gaTUgKyAoaTQgKyAxIDw8IDEpOwogICBIRUFQMzJbaTEwID4+IDJdID0gaTUgKyAoaTYgPDwgMSk7CiAgIGlmIChpNykgX19aZGxQdihpNyk7CiAgfSBlbHNlIHsKICAgSEVBUDE2W2k0ID4+IDFdID0gaTg7CiAgIEhFQVAzMltpOSA+PiAyXSA9IGk0ICsgMjsKICB9CiAgaTIgPSBpMiArIDEgfCAwOwogIGlmICgoaTIgfCAwKSA+PSAoSEVBUDMyW2kxMSA+PiAyXSB8IDApKSBicmVhazsKICBpMSA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogfQogaTE0ID0gaTE0ICsgMTA0IHwgMDsKIEhFQVAzMltpMTQgPj4gMl0gPSA0NDEwMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJZE5TXzlhbGxvY2F0b3JJZEVFRThfX2FwcGVuZEVqUktkKGkxMiwgaTE0LCBpMTUpIHsKIGkxMiA9IGkxMiB8IDA7CiBpMTQgPSBpMTQgfCAwOwogaTE1ID0gaTE1IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTMgPSAwOwogaTExID0gaTEyICsgOCB8IDA7CiBpMiA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogaTEzID0gaTEyICsgNCB8IDA7CiBpMyA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogaTEgPSBpMzsKIGlmIChpMiAtIGkxID4+IDMgPj4+IDAgPj0gaTE0ID4+PiAwKSB7CiAgaTEgPSBpMTQ7CiAgaTIgPSBpMzsKICB3aGlsZSAoMSkgewogICBIRUFQRjY0W2kyID4+IDNdID0gK0hFQVBGNjRbaTE1ID4+IDNdOwogICBpMSA9IGkxICsgLTEgfCAwOwogICBpZiAoIWkxKSBicmVhazsgZWxzZSBpMiA9IGkyICsgOCB8IDA7CiAgfQogIEhFQVAzMltpMTMgPj4gMl0gPSBpMyArIChpMTQgPDwgMyk7CiAgcmV0dXJuOwogfQogaTMgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKIGk0ID0gaTM7CiBpNiA9IChpMSAtIGk0ID4+IDMpICsgaTE0IHwgMDsKIGlmIChpNiA+Pj4gMCA+IDUzNjg3MDkxMSkgewogIF9fWk5LU3QzX18xMjBfX3ZlY3Rvcl9iYXNlX2NvbW1vbklMYjFFRTIwX190aHJvd19sZW5ndGhfZXJyb3JFdihpMTIpOwogIGk0ID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiAgaTIgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKICBpMyA9IGk0OwogfQogaTUgPSBpMzsKIGkxID0gaTIgLSBpNSB8IDA7CiBpZiAoaTEgPj4gMyA+Pj4gMCA8IDI2ODQzNTQ1NSkgewogIGkxID0gaTEgPj4gMjsKICBpMSA9IGkxID4+PiAwIDwgaTYgPj4+IDAgPyBpNiA6IGkxOwogIGk1ID0gKEhFQVAzMltpMTMgPj4gMl0gfCAwKSAtIGk1IHwgMDsKICBpMiA9IGk1ID4+IDM7CiAgaWYgKCFpMSkgewogICBpNyA9IDA7CiAgIGk5ID0gMDsKICAgaTggPSBpMjsKICAgaTYgPSBpNTsKICB9IGVsc2UgaTEwID0gOTsKIH0gZWxzZSB7CiAgaTUgPSAoSEVBUDMyW2kxMyA+PiAyXSB8IDApIC0gaTUgfCAwOwogIGkxID0gNTM2ODcwOTExOwogIGkyID0gaTUgPj4gMzsKICBpMTAgPSA5OwogfQogaWYgKChpMTAgfCAwKSA9PSA5KSB7CiAgaTcgPSBpMTsKICBpOSA9IF9fWm53aihpMSA8PCAzKSB8IDA7CiAgaTggPSBpMjsKICBpNiA9IGk1OwogfQogaTIgPSBpOSArIChpNyA8PCAzKSB8IDA7CiBpMSA9IGkxNDsKIGk1ID0gaTkgKyAoaTggPDwgMykgfCAwOwogd2hpbGUgKDEpIHsKICBIRUFQRjY0W2k1ID4+IDNdID0gK0hFQVBGNjRbaTE1ID4+IDNdOwogIGkxID0gaTEgKyAtMSB8IDA7CiAgaWYgKCFpMSkgYnJlYWs7IGVsc2UgaTUgPSBpNSArIDggfCAwOwogfQogX21lbWNweShpOSB8IDAsIGkzIHwgMCwgaTYgfCAwKSB8IDA7CiBIRUFQMzJbaTEyID4+IDJdID0gaTk7CiBIRUFQMzJbaTEzID4+IDJdID0gaTkgKyAoaTggKyBpMTQgPDwgMyk7CiBIRUFQMzJbaTExID4+IDJdID0gaTI7CiBpZiAoIWk0KSByZXR1cm47CiBfX1pkbFB2KGk0KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJaU5TXzlhbGxvY2F0b3JJaUVFRThfX2FwcGVuZEVqUktpKGkxMiwgaTE0LCBpMTUpIHsKIGkxMiA9IGkxMiB8IDA7CiBpMTQgPSBpMTQgfCAwOwogaTE1ID0gaTE1IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTMgPSAwOwogaTExID0gaTEyICsgOCB8IDA7CiBpMiA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogaTEzID0gaTEyICsgNCB8IDA7CiBpMyA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogaTEgPSBpMzsKIGlmIChpMiAtIGkxID4+IDIgPj4+IDAgPj0gaTE0ID4+PiAwKSB7CiAgaTEgPSBpMTQ7CiAgaTIgPSBpMzsKICB3aGlsZSAoMSkgewogICBIRUFQMzJbaTIgPj4gMl0gPSBIRUFQMzJbaTE1ID4+IDJdOwogICBpMSA9IGkxICsgLTEgfCAwOwogICBpZiAoIWkxKSBicmVhazsgZWxzZSBpMiA9IGkyICsgNCB8IDA7CiAgfQogIEhFQVAzMltpMTMgPj4gMl0gPSBpMyArIChpMTQgPDwgMik7CiAgcmV0dXJuOwogfQogaTMgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKIGk0ID0gaTM7CiBpNiA9IChpMSAtIGk0ID4+IDIpICsgaTE0IHwgMDsKIGlmIChpNiA+Pj4gMCA+IDEwNzM3NDE4MjMpIHsKICBfX1pOS1N0M19fMTIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUUyMF9fdGhyb3dfbGVuZ3RoX2Vycm9yRXYoaTEyKTsKICBpNCA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogIGkyID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiAgaTMgPSBpNDsKIH0KIGk1ID0gaTM7CiBpMSA9IGkyIC0gaTUgfCAwOwogaWYgKGkxID4+IDIgPj4+IDAgPCA1MzY4NzA5MTEpIHsKICBpMSA9IGkxID4+IDE7CiAgaTEgPSBpMSA+Pj4gMCA8IGk2ID4+PiAwID8gaTYgOiBpMTsKICBpNSA9IChIRUFQMzJbaTEzID4+IDJdIHwgMCkgLSBpNSB8IDA7CiAgaTIgPSBpNSA+PiAyOwogIGlmICghaTEpIHsKICAgaTcgPSAwOwogICBpOSA9IDA7CiAgIGk4ID0gaTI7CiAgIGk2ID0gaTU7CiAgfSBlbHNlIGkxMCA9IDk7CiB9IGVsc2UgewogIGk1ID0gKEhFQVAzMltpMTMgPj4gMl0gfCAwKSAtIGk1IHwgMDsKICBpMSA9IDEwNzM3NDE4MjM7CiAgaTIgPSBpNSA+PiAyOwogIGkxMCA9IDk7CiB9CiBpZiAoKGkxMCB8IDApID09IDkpIHsKICBpNyA9IGkxOwogIGk5ID0gX19abndqKGkxIDw8IDIpIHwgMDsKICBpOCA9IGkyOwogIGk2ID0gaTU7CiB9CiBpMiA9IGk5ICsgKGk3IDw8IDIpIHwgMDsKIGkxID0gaTE0OwogaTUgPSBpOSArIChpOCA8PCAyKSB8IDA7CiB3aGlsZSAoMSkgewogIEhFQVAzMltpNSA+PiAyXSA9IEhFQVAzMltpMTUgPj4gMl07CiAgaTEgPSBpMSArIC0xIHwgMDsKICBpZiAoIWkxKSBicmVhazsgZWxzZSBpNSA9IGk1ICsgNCB8IDA7CiB9CiBfbWVtY3B5KGk5IHwgMCwgaTMgfCAwLCBpNiB8IDApIHwgMDsKIEhFQVAzMltpMTIgPj4gMl0gPSBpOTsKIEhFQVAzMltpMTMgPj4gMl0gPSBpOSArIChpOCArIGkxNCA8PCAyKTsKIEhFQVAzMltpMTEgPj4gMl0gPSBpMjsKIGlmICghaTQpIHJldHVybjsKIF9fWmRsUHYoaTQpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xNnZlY3RvcklmTlNfOWFsbG9jYXRvcklmRUVFOF9fYXBwZW5kRWpSS2YoaTEyLCBpMiwgaTE0KSB7CiBpMTIgPSBpMTIgfCAwOwogaTIgPSBpMiB8IDA7CiBpMTQgPSBpMTQgfCAwOwogdmFyIGkxID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTMgPSAwOwogaTExID0gaTEyICsgOCB8IDA7CiBpNCA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogaTEzID0gaTEyICsgNCB8IDA7CiBpMSA9IEhFQVAzMltpMTMgPj4gMl0gfCAwOwogaTMgPSBpMTsKIGlmIChpNCAtIGkzID4+IDIgPj4+IDAgPj0gaTIgPj4+IDApIHsKICBpMyA9IGkxICsgKGkyIDw8IDIpIHwgMDsKICB3aGlsZSAoMSkgewogICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTE0ID4+IDJdOwogICBpMiA9IGkyICsgLTEgfCAwOwogICBpZiAoIWkyKSBicmVhazsgZWxzZSBpMSA9IGkxICsgNCB8IDA7CiAgfQogIEhFQVAzMltpMTMgPj4gMl0gPSBpMzsKICByZXR1cm47CiB9CiBpMSA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogaTUgPSBpMTsKIGk2ID0gKGkzIC0gaTUgPj4gMikgKyBpMiB8IDA7CiBpZiAoaTYgPj4+IDAgPiAxMDczNzQxODIzKSB7CiAgX19aTktTdDNfXzEyMF9fdmVjdG9yX2Jhc2VfY29tbW9uSUxiMUVFMjBfX3Rocm93X2xlbmd0aF9lcnJvckV2KGkxMik7CiAgaTUgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKICBpNCA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogIGk5ID0gaTU7CiB9IGVsc2UgaTkgPSBpMTsKIGkzID0gaTk7CiBpMSA9IGk0IC0gaTMgfCAwOwogaWYgKGkxID4+IDIgPj4+IDAgPCA1MzY4NzA5MTEpIHsKICBpMSA9IGkxID4+IDE7CiAgaTEgPSBpMSA+Pj4gMCA8IGk2ID4+PiAwID8gaTYgOiBpMTsKICBpNCA9IChIRUFQMzJbaTEzID4+IDJdIHwgMCkgLSBpMyB8IDA7CiAgaTMgPSBpNCA+PiAyOwogIGlmICghaTEpIHsKICAgaTYgPSAwOwogICBpOCA9IDA7CiAgIGk3ID0gaTQ7CiAgfSBlbHNlIGkxMCA9IDEwOwogfSBlbHNlIHsKICBpNCA9IChIRUFQMzJbaTEzID4+IDJdIHwgMCkgLSBpMyB8IDA7CiAgaTEgPSAxMDczNzQxODIzOwogIGkzID0gaTQgPj4gMjsKICBpMTAgPSAxMDsKIH0KIGlmICgoaTEwIHwgMCkgPT0gMTApIHsKICBpNiA9IGkxOwogIGk4ID0gX19abndqKGkxIDw8IDIpIHwgMDsKICBpNyA9IGk0OwogfQogaTQgPSBpOCArIChpNiA8PCAyKSB8IDA7CiBpNiA9IGkzICsgaTIgfCAwOwogaTEgPSBpOCArIChpMyA8PCAyKSB8IDA7CiB3aGlsZSAoMSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMTQgPj4gMl07CiAgaTIgPSBpMiArIC0xIHwgMDsKICBpZiAoIWkyKSBicmVhazsgZWxzZSBpMSA9IGkxICsgNCB8IDA7CiB9CiBfbWVtY3B5KGk4IHwgMCwgaTkgfCAwLCBpNyB8IDApIHwgMDsKIEhFQVAzMltpMTIgPj4gMl0gPSBpODsKIEhFQVAzMltpMTMgPj4gMl0gPSBpOCArIChpNiA8PCAyKTsKIEhFQVAzMltpMTEgPj4gMl0gPSBpNDsKIGlmICghaTUpIHJldHVybjsKIF9fWmRsUHYoaTUpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTZtYXhpTUZDQ0FuYWx5c2VySWRFNXNldHVwRWpqamRkaihpNywgaTUsIGk0LCBpMywgZDIsIGQxLCBpNikgewogaTcgPSBpNyB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTMgPSBpMyB8IDA7CiBkMiA9ICtkMjsKIGQxID0gK2QxOwogaTYgPSBpNiB8IDA7CiB2YXIgZDggPSAwLjAsIGQ5ID0gMC4wLCBpMTAgPSAwLCBpMTEgPSAwLCBpMTIgPSAwLCBkMTMgPSAwLjAsIGkxNCA9IDA7CiBpMTEgPSBpNyArIDQgfCAwOwogSEVBUDMyW2kxMSA+PiAyXSA9IGk0OwogaTEwID0gaTcgKyA4IHwgMDsKIEhFQVAzMltpMTAgPj4gMl0gPSBpMzsKIEhFQVBGNjRbaTcgKyAxNiA+PiAzXSA9IGQyOwogSEVBUEY2NFtpNyArIDI0ID4+IDNdID0gZDE7CiBIRUFQMzJbaTcgKyAzMiA+PiAyXSA9IGk2OwogSEVBUDMyW2k3ICsgNDAgPj4gMl0gPSBpNTsKIEhFQVAzMltpNyArIDM2ID4+IDJdID0gMDsKIGk0ID0gaTQgPDwgMzsKIGkxMiA9IF9tYWxsb2MoaTQpIHwgMDsKIEhFQVAzMltpNyA+PiAyXSA9IGkxMjsKIGk0ID0gX21hbGxvYyhNYXRoX2ltdWwoaTQsIGkzKSB8IDApIHwgMDsKIGkxMiA9IGk3ICsgNDQgfCAwOwogSEVBUDMyW2kxMiA+PiAyXSA9IGk0OwogX19aTjE2bWF4aU1GQ0NBbmFseXNlcklkRTE3Y2FsY01lbEZpbHRlckJhbmtFZGkoaTcsICsoaTYgPj4+IDApLCBpNSk7CiBpNyA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogZDkgPSArKGk3ID4+PiAwKTsKIGQyID0gMy4xNDE1OTI2NTM1ODk3OTMgLyBkOTsKIGQ4ID0gMS4wIC8gK01hdGhfc3FydCgrZDkpOwogZDkgPSArTWF0aF9zcXJ0KCsoMi4wIC8gZDkpKTsKIGkxMCA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogaWYgKCFpMTApIHJldHVybjsKIGkxMSA9IChpNyB8IDApID09IDA7CiBpNCA9IDA7CiB3aGlsZSAoMSkgewogIGlmICghaTExKSB7CiAgIGkzID0gaTQgKyAxIHwgMDsKICAgZDEgPSBkMiAqICsoaTMgfCAwKTsKICAgaTYgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKICAgaWYgKCFpNCkgewogICAgaTQgPSAwOwogICAgZG8gewogICAgIGQxMyA9IGQ4ICogK01hdGhfY29zKCsoZDEgKiAoKyhpNCB8IDApICsgLjUpKSk7CiAgICAgaTUgPSBpNiArICgoTWF0aF9pbXVsKGk0LCBpMTApIHwgMCkgPDwgMykgfCAwOwogICAgIEhFQVBGNjRbaTUgPj4gM10gPSBkMTM7CiAgICAgaTQgPSBpNCArIDEgfCAwOwogICAgfSB3aGlsZSAoKGk0IHwgMCkgIT0gKGk3IHwgMCkpOwogICB9IGVsc2UgewogICAgaTUgPSAwOwogICAgZG8gewogICAgIGQxMyA9IGQ5ICogK01hdGhfY29zKCsoZDEgKiAoKyhpNSB8IDApICsgLjUpKSk7CiAgICAgaTE0ID0gaTYgKyAoKE1hdGhfaW11bChpNSwgaTEwKSB8IDApICsgaTQgPDwgMykgfCAwOwogICAgIEhFQVBGNjRbaTE0ID4+IDNdID0gZDEzOwogICAgIGk1ID0gaTUgKyAxIHwgMDsKICAgIH0gd2hpbGUgKChpNSB8IDApICE9IChpNyB8IDApKTsKICAgfQogIH0gZWxzZSBpMyA9IGk0ICsgMSB8IDA7CiAgaWYgKGkzID4+PiAwIDwgaTEwID4+PiAwKSBpNCA9IGkzOyBlbHNlIGJyZWFrOwogfQogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYWJvdmVfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2UzRfaWIoaTEsIGkxMiwgaTExLCBpMTAsIGkxMywgaTE0KSB7CiBpMSA9IGkxIHwgMDsKIGkxMiA9IGkxMiB8IDA7CiBpMTEgPSBpMTEgfCAwOwogaTEwID0gaTEwIHwgMDsKIGkxMyA9IGkxMyB8IDA7CiBpMTQgPSBpMTQgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwOwogaWYgKChpMSB8IDApID09IChIRUFQMzJbaTEyICsgOCA+PiAyXSB8IDApKSBfX1pOSzEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm8yOXByb2Nlc3Nfc3RhdGljX3R5cGVfYWJvdmVfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2UzRfaSgwLCBpMTIsIGkxMSwgaTEwLCBpMTMpOyBlbHNlIHsKICBpNiA9IGkxMiArIDUyIHwgMDsKICBpNyA9IEhFQVA4W2k2ID4+IDBdIHwgMDsKICBpOCA9IGkxMiArIDUzIHwgMDsKICBpOSA9IEhFQVA4W2k4ID4+IDBdIHwgMDsKICBpNSA9IEhFQVAzMltpMSArIDEyID4+IDJdIHwgMDsKICBpMiA9IGkxICsgMTYgKyAoaTUgPDwgMykgfCAwOwogIEhFQVA4W2k2ID4+IDBdID0gMDsKICBIRUFQOFtpOCA+PiAwXSA9IDA7CiAgX19aTksxMF9fY3h4YWJpdjEyMl9fYmFzZV9jbGFzc190eXBlX2luZm8xNnNlYXJjaF9hYm92ZV9kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZTNF9pYihpMSArIDE2IHwgMCwgaTEyLCBpMTEsIGkxMCwgaTEzLCBpMTQpOwogIEw0IDogZG8gaWYgKChpNSB8IDApID4gMSkgewogICBpMyA9IGkxMiArIDI0IHwgMDsKICAgaTQgPSBpMSArIDggfCAwOwogICBpNSA9IGkxMiArIDU0IHwgMDsKICAgaTEgPSBpMSArIDI0IHwgMDsKICAgZG8gewogICAgaWYgKEhFQVA4W2k1ID4+IDBdIHwgMCkgYnJlYWsgTDQ7CiAgICBpZiAoIShIRUFQOFtpNiA+PiAwXSB8IDApKSB7CiAgICAgaWYgKChIRUFQOFtpOCA+PiAwXSB8IDApICE9IDAgPyAoSEVBUDMyW2k0ID4+IDJdICYgMSB8IDApID09IDAgOiAwKSBicmVhayBMNDsKICAgIH0gZWxzZSB7CiAgICAgaWYgKChIRUFQMzJbaTMgPj4gMl0gfCAwKSA9PSAxKSBicmVhayBMNDsKICAgICBpZiAoIShIRUFQMzJbaTQgPj4gMl0gJiAyKSkgYnJlYWsgTDQ7CiAgICB9CiAgICBIRUFQOFtpNiA+PiAwXSA9IDA7CiAgICBIRUFQOFtpOCA+PiAwXSA9IDA7CiAgICBfX1pOSzEwX19jeHhhYml2MTIyX19iYXNlX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2Fib3ZlX2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdlM0X2liKGkxLCBpMTIsIGkxMSwgaTEwLCBpMTMsIGkxNCk7CiAgICBpMSA9IGkxICsgOCB8IDA7CiAgIH0gd2hpbGUgKGkxID4+PiAwIDwgaTIgPj4+IDApOwogIH0gd2hpbGUgKDApOwogIEhFQVA4W2k2ID4+IDBdID0gaTc7CiAgSEVBUDhbaTggPj4gMF0gPSBpOTsKIH0KIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJY05TXzlhbGxvY2F0b3JJY0VFRThfX2FwcGVuZEVqUktjKGkxMCwgaTIsIGk5KSB7CiBpMTAgPSBpMTAgfCAwOwogaTIgPSBpMiB8IDA7CiBpOSA9IGk5IHwgMDsKIHZhciBpMSA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGkxMSA9IDA7CiBpOCA9IGkxMCArIDggfCAwOwogaTQgPSBIRUFQMzJbaTggPj4gMl0gfCAwOwogaTExID0gaTEwICsgNCB8IDA7CiBpMSA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogaTMgPSBpMTsKIGlmICgoaTQgLSBpMyB8IDApID4+PiAwID49IGkyID4+PiAwKSB7CiAgZG8gewogICBIRUFQOFtpMSA+PiAwXSA9IEhFQVA4W2k5ID4+IDBdIHwgMDsKICAgaTEgPSAoSEVBUDMyW2kxMSA+PiAyXSB8IDApICsgMSB8IDA7CiAgIEhFQVAzMltpMTEgPj4gMl0gPSBpMTsKICAgaTIgPSBpMiArIC0xIHwgMDsKICB9IHdoaWxlICgoaTIgfCAwKSAhPSAwKTsKICByZXR1cm47CiB9CiBpMSA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogaTUgPSBpMyAtIGkxICsgaTIgfCAwOwogaWYgKChpNSB8IDApIDwgMCkgewogIF9fWk5LU3QzX18xMjBfX3ZlY3Rvcl9iYXNlX2NvbW1vbklMYjFFRTIwX190aHJvd19sZW5ndGhfZXJyb3JFdihpMTApOwogIGk0ID0gSEVBUDMyW2k4ID4+IDJdIHwgMDsKICBpMSA9IEhFQVAzMltpMTAgPj4gMl0gfCAwOwogfQogaTMgPSBpNCAtIGkxIHwgMDsKIGlmIChpMyA+Pj4gMCA8IDEwNzM3NDE4MjMpIHsKICBpMyA9IGkzIDw8IDE7CiAgaTMgPSBpMyA+Pj4gMCA8IGk1ID4+PiAwID8gaTUgOiBpMzsKICBpMSA9IChIRUFQMzJbaTExID4+IDJdIHwgMCkgLSBpMSB8IDA7CiAgaWYgKCFpMykgewogICBpNCA9IDA7CiAgIGk2ID0gMDsKICAgaTUgPSBpMTsKICB9IGVsc2UgaTcgPSA4OwogfSBlbHNlIHsKICBpMyA9IDIxNDc0ODM2NDc7CiAgaTEgPSAoSEVBUDMyW2kxMSA+PiAyXSB8IDApIC0gaTEgfCAwOwogIGk3ID0gODsKIH0KIGlmICgoaTcgfCAwKSA9PSA4KSB7CiAgaTQgPSBpMzsKICBpNiA9IF9fWm53aihpMykgfCAwOwogIGk1ID0gaTE7CiB9CiBpMSA9IGk2ICsgaTUgfCAwOwogaTQgPSBpNiArIGk0IHwgMDsKIGkzID0gaTE7CiBkbyB7CiAgSEVBUDhbaTMgPj4gMF0gPSBIRUFQOFtpOSA+PiAwXSB8IDA7CiAgaTMgPSBpMSArIDEgfCAwOwogIGkxID0gaTM7CiAgaTIgPSBpMiArIC0xIHwgMDsKIH0gd2hpbGUgKChpMiB8IDApICE9IDApOwogaTIgPSBIRUFQMzJbaTEwID4+IDJdIHwgMDsKIGk3ID0gKEhFQVAzMltpMTEgPj4gMl0gfCAwKSAtIGkyIHwgMDsKIGk5ID0gaTYgKyAoaTUgLSBpNykgfCAwOwogX21lbWNweShpOSB8IDAsIGkyIHwgMCwgaTcgfCAwKSB8IDA7CiBIRUFQMzJbaTEwID4+IDJdID0gaTk7CiBIRUFQMzJbaTExID4+IDJdID0gaTE7CiBIRUFQMzJbaTggPj4gMl0gPSBpNDsKIGlmICghaTIpIHJldHVybjsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlEeW40Z2F0ZUVkZGxkZChpMTEsIGQ5LCBkMywgaTgsIGQ1LCBkMTApIHsKIGkxMSA9IGkxMSB8IDA7CiBkOSA9ICtkOTsKIGQzID0gK2QzOwogaTggPSBpOCB8IDA7CiBkNSA9ICtkNTsKIGQxMCA9ICtkMTA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGk0ID0gMCwgaTYgPSAwLCBpNyA9IDA7CiBpNCA9ICtNYXRoX2FicygrZDkpID4gZDM7CiBpNyA9IGkxMSArIDcyIHwgMDsKIGkxID0gKEhFQVAzMltpNyA+PiAyXSB8IDApID09IDE7CiBpZiAoaTQpIGlmICghaTEgPyAoSEVBUDMyW2kxMSArIDY4ID4+IDJdID0gMCwgSEVBUDMyW2kxMSArIDgwID4+IDJdID0gMCwgSEVBUDMyW2k3ID4+IDJdID0gMSwgaTIgPSBpMTEgKyA1NiB8IDAsICtIRUFQRjY0W2kyID4+IDNdID09IDAuMCkgOiAwKSB7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IC4wMTsKICBpNiA9IDc7CiB9IGVsc2UgaTYgPSA3OyBlbHNlIGlmIChpMSkgaTYgPSA3OyBlbHNlIHsKICBpMiA9IGkxMSArIDU2IHwgMDsKICBpNCA9IGkyOwogIGQzID0gK0hFQVBGNjRbaTIgPj4gM107CiB9CiBpZiAoKGk2IHwgMCkgPT0gNykgewogIGkxID0gaTExICsgNTYgfCAwOwogIGQzID0gK0hFQVBGNjRbaTEgPj4gM107CiAgaWYgKGQzIDwgMS4wKSB7CiAgIGQzID0gKGQ1ICsgMS4wKSAqIGQzOwogICBIRUFQRjY0W2kxID4+IDNdID0gZDM7CiAgIEhFQVBGNjRbaTExICsgMzIgPj4gM10gPSBkMyAqIGQ5OwogICBpNCA9IGkxOwogIH0gZWxzZSBpNCA9IGkxOwogfQogaWYgKGQzID49IDEuMCkgewogIEhFQVAzMltpNyA+PiAyXSA9IDA7CiAgSEVBUDMyW2kxMSArIDc2ID4+IDJdID0gMTsKIH0KIGkyID0gaTExICsgNjggfCAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaWYgKChpMSB8IDApIDwgKGk4IHwgMCkgPyAoSEVBUDMyW2kxMSArIDc2ID4+IDJdIHwgMCkgPT0gMSA6IDApIHsKICBIRUFQRjY0W2kxMSArIDMyID4+IDNdID0gZDk7CiAgaTEgPSBpMSArIDEgfCAwOwogIEhFQVAzMltpMiA+PiAyXSA9IGkxOwogfQogaWYgKChpMSB8IDApID09IChpOCB8IDApKSB7CiAgSEVBUDMyW2kxMSArIDc2ID4+IDJdID0gMDsKICBIRUFQMzJbaTExICsgODAgPj4gMl0gPSAxOwogIGlmICghKGQzID4gMC4wKSkgewogICBpMTEgPSBpMTEgKyAzMiB8IDA7CiAgIGQxMCA9ICtIRUFQRjY0W2kxMSA+PiAzXTsKICAgcmV0dXJuICtkMTA7CiAgfQogfSBlbHNlIGlmICghKGQzID4gMC4wID8gKEhFQVAzMltpMTEgKyA4MCA+PiAyXSB8IDApID09IDEgOiAwKSkgewogIGkxMSA9IGkxMSArIDMyIHwgMDsKICBkMTAgPSArSEVBUEY2NFtpMTEgPj4gM107CiAgcmV0dXJuICtkMTA7CiB9CiBkMTAgPSBkMyAqIGQxMDsKIEhFQVBGNjRbaTQgPj4gM10gPSBkMTA7CiBIRUFQRjY0W2kxMSArIDMyID4+IDNdID0gZDEwICogZDk7CiBpMTEgPSBpMTEgKyAzMiB8IDA7CiBkMTAgPSArSEVBUEY2NFtpMTEgPj4gM107CiByZXR1cm4gK2QxMDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRW52MmFyRWRkZGxpKGk5LCBkNywgZDIsIGQ4LCBpNSwgaTEwKSB7CiBpOSA9IGk5IHwgMDsKIGQ3ID0gK2Q3OwogZDIgPSArZDI7CiBkOCA9ICtkODsKIGk1ID0gaTUgfCAwOwogaTEwID0gaTEwIHwgMDsKIHZhciBpMSA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNiA9IDA7CiBpNiA9IChpMTAgfCAwKSA9PSAxOwogaTMgPSBpOSArIDY4IHwgMDsKIGkxID0gKEhFQVAzMltpMyA+PiAyXSB8IDApID09IDE7CiBpZiAoaTYpIGlmICghaTEpIGlmICgoSEVBUDMyW2k5ICsgODAgPj4gMl0gfCAwKSA9PSAxKSBpMSA9IDY7IGVsc2UgewogIEhFQVAzMltpOSArIDY0ID4+IDJdID0gMDsKICBIRUFQMzJbaTkgKyA4NCA+PiAyXSA9IDA7CiAgSEVBUDMyW2kzID4+IDJdID0gMTsKICBpMSA9IDc7CiB9IGVsc2UgaTEgPSA3OyBlbHNlIGlmIChpMSkgaTEgPSA3OyBlbHNlIGkxID0gNjsKIGlmICgoaTEgfCAwKSA9PSA2KSB7CiAgaTEgPSBpOSArIDQ4IHwgMDsKICBpNCA9IGkxOwogIGQyID0gK0hFQVBGNjRbaTEgPj4gM107CiB9IGVsc2UgaWYgKChpMSB8IDApID09IDcpIHsKICBpNCA9IGk5ICsgNDggfCAwOwogIGQyID0gK0hFQVBGNjRbaTQgPj4gM10gKyBkMjsKICBIRUFQRjY0W2k0ID4+IDNdID0gZDI7CiAgSEVBUEY2NFtpOSArIDggPj4gM10gPSBkMiAqIGQ3OwogfQogaWYgKGQyID49IDEuMCkgewogIEhFQVBGNjRbaTQgPj4gM10gPSAxLjA7CiAgSEVBUDMyW2kzID4+IDJdID0gMDsKICBIRUFQMzJbaTkgKyA4MCA+PiAyXSA9IDE7CiAgZDIgPSAxLjA7CiB9CiBpMyA9IGk5ICsgNjQgfCAwOwogaTEgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogaWYgKChpMSB8IDApIDwgKGk1IHwgMCkgPyAoSEVBUDMyW2k5ICsgODAgPj4gMl0gfCAwKSA9PSAxIDogMCkgewogIEhFQVBGNjRbaTkgKyA4ID4+IDNdID0gZDc7CiAgaTEgPSBpMSArIDEgfCAwOwogIEhFQVAzMltpMyA+PiAyXSA9IGkxOwogfQogaTEgPSAoaTEgfCAwKSA9PSAoaTUgfCAwKTsKIGlmIChpNiAmIGkxKSBIRUFQRjY0W2k5ICsgOCA+PiAzXSA9IGQ3OwogaWYgKChpMTAgfCAwKSAhPSAxICYgaTEpIHsKICBIRUFQMzJbaTkgKyA4MCA+PiAyXSA9IDA7CiAgSEVBUDMyW2k5ICsgODQgPj4gMl0gPSAxOwogIGlmICghKGQyID4gMC4wKSkgewogICBpMTAgPSBpOSArIDggfCAwOwogICBkOCA9ICtIRUFQRjY0W2kxMCA+PiAzXTsKICAgcmV0dXJuICtkODsKICB9CiB9IGVsc2UgaWYgKCEoZDIgPiAwLjAgPyAoSEVBUDMyW2k5ICsgODQgPj4gMl0gfCAwKSA9PSAxIDogMCkpIHsKICBpMTAgPSBpOSArIDggfCAwOwogIGQ4ID0gK0hFQVBGNjRbaTEwID4+IDNdOwogIHJldHVybiArZDg7CiB9CiBkOCA9IGQyICogZDg7CiBIRUFQRjY0W2k0ID4+IDNdID0gZDg7CiBIRUFQRjY0W2k5ICsgOCA+PiAzXSA9IGQ4ICogZDc7CiBpMTAgPSBpOSArIDggfCAwOwogZDggPSArSEVBUEY2NFtpMTAgPj4gM107CiByZXR1cm4gK2Q4Owp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mbzljYW5fY2F0Y2hFUEtOU18xNl9fc2hpbV90eXBlX2luZm9FUlB2KGkxLCBpMiwgaTcpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNyA9IGk3IHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk4ID0gMCwgaTkgPSAwOwogaTkgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyA2NCB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTggPSBpOTsKIEhFQVAzMltpNyA+PiAyXSA9IEhFQVAzMltIRUFQMzJbaTcgPj4gMl0gPj4gMl07CiBpZiAoISgoaTEgfCAwKSA9PSAoaTIgfCAwKSB8IChpMiB8IDApID09IDE2MDU2KSkgaWYgKCgoaTIgfCAwKSAhPSAwID8gKGkzID0gX19fZHluYW1pY19jYXN0KGkyLCAxNTk2OCwgMTYwMTYsIDApIHwgMCwgKGkzIHwgMCkgIT0gMCkgOiAwKSA/IChIRUFQMzJbaTMgKyA4ID4+IDJdICYgfkhFQVAzMltpMSArIDggPj4gMl0gfCAwKSA9PSAwIDogMCkgewogIGkyID0gSEVBUDMyW2kxICsgMTIgPj4gMl0gfCAwOwogIGkxID0gaTMgKyAxMiB8IDA7CiAgaWYgKCEoKGkyIHwgMCkgPT0gMTYwNDggPyAxIDogKGkyIHwgMCkgPT0gKEhFQVAzMltpMSA+PiAyXSB8IDApKSkgaWYgKCgoKGkyIHwgMCkgIT0gMCA/IChpNSA9IF9fX2R5bmFtaWNfY2FzdChpMiwgMTU5NjgsIDE1OTg0LCAwKSB8IDAsIChpNSB8IDApICE9IDApIDogMCkgPyAoaTQgPSBIRUFQMzJbaTEgPj4gMl0gfCAwLCAoaTQgfCAwKSAhPSAwKSA6IDApID8gKGk2ID0gX19fZHluYW1pY19jYXN0KGk0LCAxNTk2OCwgMTU5ODQsIDApIHwgMCwgKGk2IHwgMCkgIT0gMCkgOiAwKSB7CiAgIGkxID0gaTg7CiAgIGkyID0gaTEgKyA1NiB8IDA7CiAgIGRvIHsKICAgIEhFQVAzMltpMSA+PiAyXSA9IDA7CiAgICBpMSA9IGkxICsgNCB8IDA7CiAgIH0gd2hpbGUgKChpMSB8IDApIDwgKGkyIHwgMCkpOwogICBIRUFQMzJbaTggPj4gMl0gPSBpNjsKICAgSEVBUDMyW2k4ICsgOCA+PiAyXSA9IGk1OwogICBIRUFQMzJbaTggKyAxMiA+PiAyXSA9IC0xOwogICBIRUFQMzJbaTggKyA0OCA+PiAyXSA9IDE7CiAgIEZVTkNUSU9OX1RBQkxFX3ZpaWlpW0hFQVAzMlsoSEVBUDMyW2k2ID4+IDJdIHwgMCkgKyAyOCA+PiAyXSAmIDYzXShpNiwgaTgsIEhFQVAzMltpNyA+PiAyXSB8IDAsIDEpOwogICBpZiAoKEhFQVAzMltpOCArIDI0ID4+IDJdIHwgMCkgPT0gMSkgewogICAgSEVBUDMyW2k3ID4+IDJdID0gSEVBUDMyW2k4ICsgMTYgPj4gMl07CiAgICBpMSA9IDE7CiAgIH0gZWxzZSBpMSA9IDA7CiAgfSBlbHNlIGkxID0gMDsgZWxzZSBpMSA9IDE7CiB9IGVsc2UgaTEgPSAwOyBlbHNlIGkxID0gMTsKIFNUQUNLVE9QID0gaTk7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlNHBsYXlFZGRkUmQoaTgsIGQ1LCBkNywgZDEsIGk2KSB7CiBpOCA9IGk4IHwgMDsKIGQ1ID0gK2Q1OwogZDcgPSArZDc7CiBkMSA9ICtkMTsKIGk2ID0gaTYgfCAwOwogdmFyIGQyID0gMC4wLCBpMyA9IDAsIGk0ID0gMCwgaTkgPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTMgPSBIRUFQMzJbaTggKyAxMDggPj4gMl0gfCAwOwogaTQgPSBpMyArIC0xIHwgMDsKIGQyID0gISgrKGkzIHwgMCkgPD0gZDEpID8gZDEgOiArKGk0IHwgMCk7CiBkMSA9ICtIRUFQRjY0W2k2ID4+IDNdOwogaWYgKCEoZDUgPiAwLjApKSB7CiAgaWYgKGQxIDw9IGQ3KSB7CiAgIEhFQVBGNjRbaTYgPj4gM10gPSBkMjsKICAgZDEgPSBkMjsKICB9CiAgZDcgPSBkMSAtIChkMiAtIGQ3KSAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gLSgrSEVBUEYzMls1MDgyXSAqIGQ1KSk7CiAgSEVBUEY2NFtpNiA+PiAzXSA9IGQ3OwogIGQ1ID0gK01hdGhfZmxvb3IoK2Q3KTsKICBkNyA9IGQ3IC0gZDU7CiAgaTMgPSB+fmQ1OwogIGk2ID0gaTMgKyAtMiB8IDA7CiAgaTQgPSBIRUFQMzJbaTggKyAxMjggPj4gMl0gfCAwOwogIGQ3ID0gKCgtMS4wIC0gZDcpICogKyhIRUFQMTZbaTQgKyAoKChpMyB8IDApID4gMCA/IGkzICsgLTEgfCAwIDogMCkgPDwgMSkgPj4gMV0gfCAwKSArIGQ3ICogKyhIRUFQMTZbaTQgKyAoKChpNiB8IDApIDwgMCA/IDAgOiBpNikgPDwgMSkgPj4gMV0gfCAwKSkgLyAzMjc2Ny4wOwogIEhFQVBGNjRbaTggKyA2NCA+PiAzXSA9IGQ3OwogIHJldHVybiArZDc7CiB9CiBpZiAoZDEgPCBkNykgewogIEhFQVBGNjRbaTYgPj4gM10gPSBkNzsKICBkMSA9IGQ3OwogfQogaWYgKGQxID49IGQyKSB7CiAgSEVBUEY2NFtpNiA+PiAzXSA9IGQ3OwogIGQxID0gZDc7CiB9CiBkNyA9IChkMiAtIGQ3KSAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gKCtIRUFQRjMyWzUwODJdICogZDUpKSArIGQxOwogSEVBUEY2NFtpNiA+PiAzXSA9IGQ3OwogZDUgPSArTWF0aF9mbG9vcigrZDcpOwogZDcgPSBkNyAtIGQ1OwogaTEwID0gfn5kNTsKIGkxMSA9IGkxMCArIDEgfCAwOwogaTYgPSBpMTAgKyAyIHwgMDsKIGk5ID0gSEVBUDMyW2k4ICsgMTI4ID4+IDJdIHwgMDsKIGQ3ID0gKCgxLjAgLSBkNykgKiArKEhFQVAxNltpOSArICgoKGkxMSB8IDApIDwgKGkzIHwgMCkgPyBpMTEgOiBpMTAgKyAtMSB8IDApIDw8IDEpID4+IDFdIHwgMCkgKyBkNyAqICsoSEVBUDE2W2k5ICsgKCgoaTYgfCAwKSA8IChpMyB8IDApID8gaTYgOiBpNCkgPDwgMSkgPj4gMV0gfCAwKSkgLyAzMjc2Ny4wOwogSEVBUEY2NFtpOCArIDY0ID4+IDNdID0gZDc7CiByZXR1cm4gK2Q3Owp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk5bWF4aVNuYXJlSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgZDQgPSAwLjAsIGQ1ID0gMC4wOwogaTIgPSBfX1pud2ooNTI4KSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kyID4+IDJdID0gMjI0ODA7CiBpMyA9IGkyICsgMjQgfCAwOwogSEVBUDhbaTIgKyA0OCA+PiAwXSA9IDA7CiBIRUFQOFtpMiArIDQ5ID4+IDBdID0gMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTIgPj4gMl0gPSAwOwogSEVBUDhbaTIgKyA1MCA+PiAwXSA9IDE7CiBIRUFQRjY0W2kyICsgNTYgPj4gM10gPSAwLjA7CiBIRUFQOFtpMiArIDY0ID4+IDBdID0gMDsKIEhFQVBGNjRbaTIgKyA4OCA+PiAzXSA9IDEuMDsKIEhFQVBGNjRbaTIgKyAxMDQgPj4gM10gPSAwLjA7CiBIRUFQRjY0W2kyICsgMTUyID4+IDNdID0gMC4wOwogaTMgPSBpMiArIDQ4MCB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDE2ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDIwID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDI0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDI4ID4+IDJdID0gMDsKIGQ0ID0gKyhIRUFQMzJbNTA4M10gfCAwKTsKIGQ1ID0gMS4wIC0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoZDQgKiAwLjAgKiAuMDAxKSkpOwogSEVBUEY2NFtpMiArIDIwOCA+PiAzXSA9IGQ1OwogaTMgPSBpMiArIDE2IHwgMDsKIEhFQVBGNjRbaTMgPj4gM10gPSA4MDAuMDsKIGQ1ID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoZDQgKiAyMC4wICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyAyMTYgPj4gM10gPSBkNTsKIEhFQVBGNjRbaTIgKyAyMjQgPj4gM10gPSAuMDU7CiBkNCA9ICtNYXRoX3BvdyguMDEsICsoMS4wIC8gKGQ0ICogMzAwLjAgKiAuMDAxKSkpOwogSEVBUEY2NFtpMiArIDIzMiA+PiAzXSA9IGQ0OwogSEVBUDMyW2kyICsgMjUyID4+IDJdID0gMTsKIEhFQVAzMltpMiArIDI0OCA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSBpMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRThfX2FwcGVuZEVqKGkxMSwgaTEwKSB7CiBpMTEgPSBpMTEgfCAwOwogaTEwID0gaTEwIHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTIgPSAwOwogaTggPSBpMTEgKyA4IHwgMDsKIGkzID0gSEVBUDMyW2k4ID4+IDJdIHwgMDsKIGk5ID0gaTExICsgNCB8IDA7CiBpMSA9IEhFQVAzMltpOSA+PiAyXSB8IDA7CiBpMiA9IGkxOwogaWYgKGkzIC0gaTIgPj4gMiA+Pj4gMCA+PSBpMTAgPj4+IDApIHsKICBfbWVtc2V0KGkxIHwgMCwgMCwgaTEwIDw8IDIgfCAwKSB8IDA7CiAgSEVBUDMyW2k5ID4+IDJdID0gaTEgKyAoaTEwIDw8IDIpOwogIHJldHVybjsKIH0KIGkxID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiBpNCA9IGkxOwogaTUgPSAoaTIgLSBpNCA+PiAyKSArIGkxMCB8IDA7CiBpZiAoaTUgPj4+IDAgPiAxMDczNzQxODIzKSB7CiAgX19aTktTdDNfXzEyMF9fdmVjdG9yX2Jhc2VfY29tbW9uSUxiMUVFMjBfX3Rocm93X2xlbmd0aF9lcnJvckV2KGkxMSk7CiAgaTQgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKICBpMyA9IEhFQVAzMltpOCA+PiAyXSB8IDA7CiAgaTcgPSBpNDsKIH0gZWxzZSBpNyA9IGkxOwogaTIgPSBpNzsKIGkxID0gaTMgLSBpMiB8IDA7CiBpZiAoaTEgPj4gMiA+Pj4gMCA8IDUzNjg3MDkxMSkgewogIGkxID0gaTEgPj4gMTsKICBpMSA9IGkxID4+PiAwIDwgaTUgPj4+IDAgPyBpNSA6IGkxOwogIGkzID0gKEhFQVAzMltpOSA+PiAyXSB8IDApIC0gaTIgfCAwOwogIGkyID0gaTMgPj4gMjsKICBpZiAoIWkxKSB7CiAgIGk2ID0gMDsKICAgaTUgPSAwOwogICBpMSA9IGkzOwogIH0gZWxzZSBpMTIgPSA4OwogfSBlbHNlIHsKICBpMyA9IChIRUFQMzJbaTkgPj4gMl0gfCAwKSAtIGkyIHwgMDsKICBpMSA9IDEwNzM3NDE4MjM7CiAgaTIgPSBpMyA+PiAyOwogIGkxMiA9IDg7CiB9CiBpZiAoKGkxMiB8IDApID09IDgpIHsKICBpNiA9IGkxOwogIGk1ID0gX19abndqKGkxIDw8IDIpIHwgMDsKICBpMSA9IGkzOwogfQogX21lbXNldChpNSArIChpMiA8PCAyKSB8IDAsIDAsIGkxMCA8PCAyIHwgMCkgfCAwOwogX21lbWNweShpNSB8IDAsIGk3IHwgMCwgaTEgfCAwKSB8IDA7CiBIRUFQMzJbaTExID4+IDJdID0gaTU7CiBIRUFQMzJbaTkgPj4gMl0gPSBpNSArIChpMiArIGkxMCA8PCAyKTsKIEhFQVAzMltpOCA+PiAyXSA9IGk1ICsgKGk2IDw8IDIpOwogaWYgKCFpNCkgcmV0dXJuOwogX19aZGxQdihpNCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWkwyNWRlZmF1bHRfdGVybWluYXRlX2hhbmRsZXJ2KCkgewogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyA0OCB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTcgPSBpMSArIDMyIHwgMDsKIGkzID0gaTEgKyAyNCB8IDA7CiBpOCA9IGkxICsgMTYgfCAwOwogaTYgPSBpMTsKIGk1ID0gaTEgKyAzNiB8IDA7CiBpMSA9IF9fX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkgfCAwOwogaWYgKChpMSB8IDApICE9IDAgPyAoaTQgPSBIRUFQMzJbaTEgPj4gMl0gfCAwLCAoaTQgfCAwKSAhPSAwKSA6IDApIHsKICBpMSA9IGk0ICsgNDggfCAwOwogIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICBpMSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogIGlmICghKChpMiAmIC0yNTYgfCAwKSA9PSAxMTI2OTAyNTI4ICYgKGkxIHwgMCkgPT0gMTEyOTA3NDI0NykpIHsKICAgSEVBUDMyW2kzID4+IDJdID0gSEVBUDMyWzU5MzRdOwogICBfYWJvcnRfbWVzc2FnZSg0MDAwNSwgaTMpOwogIH0KICBpZiAoKGkyIHwgMCkgPT0gMTEyNjkwMjUyOSAmIChpMSB8IDApID09IDExMjkwNzQyNDcpIGkxID0gSEVBUDMyW2k0ICsgNDQgPj4gMl0gfCAwOyBlbHNlIGkxID0gaTQgKyA4MCB8IDA7CiAgSEVBUDMyW2k1ID4+IDJdID0gaTE7CiAgaTQgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogIGkxID0gSEVBUDMyW2k0ICsgNCA+PiAyXSB8IDA7CiAgaWYgKEZVTkNUSU9OX1RBQkxFX2lpaWlbSEVBUDMyWyhIRUFQMzJbMTU5NTIgPj4gMl0gfCAwKSArIDE2ID4+IDJdICYgMTVdKDE1OTUyLCBpNCwgaTUpIHwgMCkgewogICBpOCA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgIGk1ID0gSEVBUDMyWzU5MzRdIHwgMDsKICAgaTggPSBGVU5DVElPTl9UQUJMRV9paVtIRUFQMzJbKEhFQVAzMltpOCA+PiAyXSB8IDApICsgOCA+PiAyXSAmIDEyN10oaTgpIHwgMDsKICAgSEVBUDMyW2k2ID4+IDJdID0gaTU7CiAgIEhFQVAzMltpNiArIDQgPj4gMl0gPSBpMTsKICAgSEVBUDMyW2k2ICsgOCA+PiAyXSA9IGk4OwogICBfYWJvcnRfbWVzc2FnZSgzOTkxOSwgaTYpOwogIH0gZWxzZSB7CiAgIEhFQVAzMltpOCA+PiAyXSA9IEhFQVAzMls1OTM0XTsKICAgSEVBUDMyW2k4ICsgNCA+PiAyXSA9IGkxOwogICBfYWJvcnRfbWVzc2FnZSgzOTk2NCwgaTgpOwogIH0KIH0KIF9hYm9ydF9tZXNzYWdlKDQwMDQzLCBpNyk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWNOU185YWxsb2NhdG9ySWNFRUU5cHVzaF9iYWNrRVJLYyhpMTIsIGkxMSkgewogaTEyID0gaTEyIHwgMDsKIGkxMSA9IGkxMSB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTEzID0gMDsKIGk5ID0gaTEyICsgNCB8IDA7CiBpMSA9IEhFQVAzMltpOSA+PiAyXSB8IDA7CiBpMTAgPSBpMTIgKyA4IHwgMDsKIGlmICgoaTEgfCAwKSAhPSAoSEVBUDMyW2kxMCA+PiAyXSB8IDApKSB7CiAgSEVBUDhbaTEgPj4gMF0gPSBIRUFQOFtpMTEgPj4gMF0gfCAwOwogIEhFQVAzMltpOSA+PiAyXSA9IChIRUFQMzJbaTkgPj4gMl0gfCAwKSArIDE7CiAgcmV0dXJuOwogfQogaTIgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKIGkzID0gaTI7CiBpNCA9IGkxIC0gaTMgKyAxIHwgMDsKIGlmICgoaTQgfCAwKSA8IDApIHsKICBfX1pOS1N0M19fMTIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUUyMF9fdGhyb3dfbGVuZ3RoX2Vycm9yRXYoaTEyKTsKICBpMyA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogIGkxID0gSEVBUDMyW2kxMCA+PiAyXSB8IDA7CiAgaTIgPSBpMzsKIH0KIGk4ID0gaTI7CiBpMSA9IGkxIC0gaTggfCAwOwogaWYgKGkxID4+PiAwIDwgMTA3Mzc0MTgyMykgewogIGkxID0gaTEgPDwgMTsKICBpMSA9IGkxID4+PiAwIDwgaTQgPj4+IDAgPyBpNCA6IGkxOwogIGk1ID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsKICBpNCA9IGk1IC0gaTggfCAwOwogIGlmICghaTEpIHsKICAgaTcgPSAwOwogICBpNiA9IDA7CiAgIGkxID0gaTU7CiAgfSBlbHNlIGkxMyA9IDg7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsKICBpMSA9IDIxNDc0ODM2NDc7CiAgaTUgPSBpNDsKICBpNCA9IGk0IC0gaTggfCAwOwogIGkxMyA9IDg7CiB9CiBpZiAoKGkxMyB8IDApID09IDgpIHsKICBpNyA9IGkxOwogIGk2ID0gX19abndqKGkxKSB8IDA7CiAgaTEgPSBpNTsKIH0KIEhFQVA4W2k2ICsgaTQgPj4gMF0gPSBIRUFQOFtpMTEgPj4gMF0gfCAwOwogaTExID0gaTEgLSBpOCB8IDA7CiBpMTMgPSBpNiArIChpNCAtIGkxMSkgfCAwOwogX21lbWNweShpMTMgfCAwLCBpMiB8IDAsIGkxMSB8IDApIHwgMDsKIEhFQVAzMltpMTIgPj4gMl0gPSBpMTM7CiBIRUFQMzJbaTkgPj4gMl0gPSBpNiArIChpNCArIDEpOwogSEVBUDMyW2kxMCA+PiAyXSA9IGk2ICsgaTc7CiBpZiAoIWkzKSByZXR1cm47CiBfX1pkbFB2KGkzKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJOG1heGlLaWNrSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgZDQgPSAwLjAsIGQ1ID0gMC4wOwogaTIgPSBfX1pud2ooNDgwKSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kyID4+IDJdID0gMjIzOTI7CiBpMyA9IGkyICsgMjQgfCAwOwogSEVBUDhbaTIgKyA0OCA+PiAwXSA9IDA7CiBIRUFQOFtpMiArIDQ5ID4+IDBdID0gMDsKIEhFQVA4W2kyICsgNTAgPj4gMF0gPSAwOwogSEVBUEY2NFtpMiArIDU2ID4+IDNdID0gMC4wOwogSEVBUDhbaTIgKyA2NCA+PiAwXSA9IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gMDsKIEhFQVBGNjRbaTIgKyA4OCA+PiAzXSA9IDEuMDsKIEhFQVBGNjRbaTIgKyAxMDQgPj4gM10gPSAwLjA7CiBpMyA9IGkyICsgNDMyIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTIgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTYgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMjAgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMjQgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMjggPj4gMl0gPSAwOwogZDQgPSArKEhFQVAzMls1MDgzXSB8IDApOwogZDUgPSAxLjAgLSArTWF0aF9wb3coLjAxLCArKDEuMCAvIChkNCAqIDAuMCAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMTYwID4+IDNdID0gZDU7CiBpMyA9IGkyICsgMTYgfCAwOwogSEVBUEY2NFtpMyA+PiAzXSA9IDIwMC4wOwogZDUgPSArTWF0aF9wb3coLjAxLCArKDEuMCAvIChkNCAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMTY4ID4+IDNdID0gZDU7CiBIRUFQRjY0W2kyICsgMTc2ID4+IDNdID0gMS4wOwogZDQgPSArTWF0aF9wb3coLjAxLCArKDEuMCAvIChkNCAqIDUwMC4wICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyAxODQgPj4gM10gPSBkNDsKIEhFQVAzMltpMiArIDIwNCA+PiAyXSA9IDE7CiBIRUFQMzJbaTIgKyAyMDAgPj4gMl0gPSAwOwogSEVBUDMyW2kxID4+IDJdID0gaTM7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVDMkVSS1MzXyhpNywgaTQpIHsKIGk3ID0gaTcgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk4ID0gMCwgaTkgPSAwOwogSEVBUDMyW2k3ID4+IDJdID0gMDsKIGk4ID0gaTcgKyA0IHwgMDsKIEhFQVAzMltpOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTcgKyA4ID4+IDJdID0gMDsKIGk2ID0gaTQgKyA0IHwgMDsKIGkyID0gKEhFQVAzMltpNiA+PiAyXSB8IDApIC0gKEhFQVAzMltpNCA+PiAyXSB8IDApIHwgMDsKIGkzID0gaTIgPj4gMjsKIGlmICghaTMpIHJldHVybjsKIGlmICghKGkzID4+PiAwID4gMTA3Mzc0MTgyMyA/IChfX1RIUkVXX18gPSAwLCBpbnZva2VfdmkoMjk2LCBpNyB8IDApLCBpOSA9IF9fVEhSRVdfXywgX19USFJFV19fID0gMCwgaTkgJiAxKSA6IDApKSBpNSA9IDQ7CiBpZiAoKGk1IHwgMCkgPT0gNCA/IChfX1RIUkVXX18gPSAwLCBpMSA9IGludm9rZV9paSg5MSwgaTIgfCAwKSB8IDAsIGk5ID0gX19USFJFV19fLCBfX1RIUkVXX18gPSAwLCAhKGk5ICYgMSkpIDogMCkgewogIEhFQVAzMltpOCA+PiAyXSA9IGkxOwogIEhFQVAzMltpNyA+PiAyXSA9IGkxOwogIEhFQVAzMltpNyArIDggPj4gMl0gPSBpMSArIChpMyA8PCAyKTsKICBpMiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgaTMgPSBIRUFQMzJbaTYgPj4gMl0gfCAwOwogIGlmICgoaTIgfCAwKSA9PSAoaTMgfCAwKSkgcmV0dXJuOwogIGk0ID0gaTEgKyAoKChpMyArIC00IC0gaTIgfCAwKSA+Pj4gMikgKyAxIDw8IDIpIHwgMDsKICB3aGlsZSAoMSkgewogICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTIgPj4gMl07CiAgIGkyID0gaTIgKyA0IHwgMDsKICAgaWYgKChpMiB8IDApID09IChpMyB8IDApKSBicmVhazsgZWxzZSBpMSA9IGkxICsgNCB8IDA7CiAgfQogIEhFQVAzMltpOCA+PiAyXSA9IGk0OwogIHJldHVybjsKIH0KIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpNyA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTMgfCAwKTsKIGkyID0gSEVBUDMyW2k4ID4+IDJdIHwgMDsKIGlmICgoaTIgfCAwKSAhPSAoaTEgfCAwKSkgSEVBUDMyW2k4ID4+IDJdID0gaTIgKyAofigoaTIgKyAtNCAtIGkxIHwgMCkgPj4+IDIpIDw8IDIpOwogX19aZGxQdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTMgfCAwKTsKfQoKZnVuY3Rpb24gX19aTjIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyNXNldHVwRWZpaShpMTAsIGQyLCBpNCwgaTEpIHsKIGkxMCA9IGkxMCB8IDA7CiBkMiA9ICtkMjsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwLCBkNSA9IDAuMCwgZDYgPSAwLjAsIGk3ID0gMCwgZDggPSAwLjAsIGk5ID0gMDsKIGkzID0gaTEwICsgNCB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSBpNDsKIGQ4ID0gZDIgKiAuNSAvICsoaTQgfCAwKTsKIEhFQVBGMzJbaTEwICsgMTYgPj4gMl0gPSBkODsKIGk5ID0gaTEwICsgOCB8IDA7CiBIRUFQMzJbaTkgPj4gMl0gPSBpNDsKIGQ2ID0gK19leHAyKChpMSB8IDApID09IDAgPyAxLjAgOiAxLjAgLyArKGkxIHwgMCkpOwogSEVBUEYzMltpMTAgKyAyNCA+PiAyXSA9IGQ2OwogSEVBUEYzMltpMTAgKyAyMCA+PiAyXSA9IDU1LjA7CiBpNyA9IF9fWm5haihpNCA+Pj4gMCA+IDEwNzM3NDE4MjMgPyAtMSA6IGk0IDw8IDIpIHwgMDsKIEhFQVAzMltpMTAgKyA0OCA+PiAyXSA9IGk3OwogaWYgKChpNCB8IDApID4gMCkgewogIGkzID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICBkMiA9IDU1LjA7CiAgaTEgPSAwOwogIGQ1ID0gZDg7CiAgaTQgPSAwOwogIHdoaWxlICgxKSB7CiAgIGlmIChkNSA+IGQyKSBkbyB7CiAgICBpMSA9IGkxICsgMSB8IDA7CiAgICBkMiA9IGQyICogZDY7CiAgIH0gd2hpbGUgKGQ1ID4gZDIpOwogICBIRUFQMzJbaTcgKyAoaTQgPDwgMikgPj4gMl0gPSBpMTsKICAgaTQgPSBpNCArIDEgfCAwOwogICBpZiAoKGk0IHwgMCkgPj0gKGkzIHwgMCkpIGJyZWFrOyBlbHNlIGQ1ID0gZDUgKyBkODsKICB9CiB9IGVsc2UgaTEgPSAwOwogSEVBUDMyW2k5ID4+IDJdID0gaTE7CiBpOSA9IGkxID4+PiAwID4gMTA3Mzc0MTgyMyA/IC0xIDogaTEgPDwgMjsKIGk3ID0gX19abmFqKGk5KSB8IDA7CiBIRUFQMzJbaTEwICsgMjggPj4gMl0gPSBpNzsKIGk3ID0gX19abmFqKGk5KSB8IDA7CiBIRUFQMzJbaTEwICsgMzIgPj4gMl0gPSBpNzsKIGk5ID0gX19abmFqKGk5KSB8IDA7CiBIRUFQMzJbaTEwICsgMzYgPj4gMl0gPSBpOTsKIEhFQVAzMltpMTAgKyA0MCA+PiAyXSA9IDA7CiBIRUFQRjMyW2kxMCArIDQ0ID4+IDJdID0gLjg5OTk5OTk3NjE1ODE0MjE7CiBIRUFQRjMyW2kxMCArIDU2ID4+IDJdID0gMS4wOwogSEVBUEYzMltpMTAgKyA1MiA+PiAyXSA9IDAuMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEybWF4aUVudmVsb3BlNGxpbmVFaVJOU3QzX18xNnZlY3RvcklkTlMwXzlhbGxvY2F0b3JJZEVFRUUoaTEwLCBpOSwgaTIpIHsKIGkxMCA9IGkxMCB8IDA7CiBpOSA9IGk5IHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGQxID0gMC4wLCBkMyA9IDAuMCwgZDQgPSAwLjAsIGk1ID0gMCwgZDYgPSAwLjAsIGk3ID0gMCwgaTggPSAwOwogaWYgKChIRUFQMzJbaTEwICsgNDAgPj4gMl0gfCAwKSAhPSAxKSB7CiAgSEVBUEY2NFtpMTAgKyA4ID4+IDNdID0gMC4wOwogIGQ2ID0gMC4wOwogIHJldHVybiArZDY7CiB9CiBpNyA9IGkxMCArIDQ0IHwgMDsKIGk4ID0gSEVBUDMyW2k3ID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGQzID0gNC4wIC8gKCtIRUFQRjY0W2k1ICsgKGk4ICsgMSA8PCAzKSA+PiAzXSAqIC4wMDQ0KTsKIEhFQVBGNjRbaTEwID4+IDNdID0gZDM7CiBpMiA9IGk4ICsgMiB8IDA7CiBIRUFQRjY0W2kxMCArIDMyID4+IDNdID0gK0hFQVBGNjRbaTUgKyAoaTIgPDwgMykgPj4gM107CiBkNCA9ICtIRUFQRjY0W2k1ICsgKGk4IDw8IDMpID4+IDNdOwogSEVBUEY2NFtpMTAgKyAyNCA+PiAzXSA9IGQ0OwogaTUgPSBpMTAgKyA0OCB8IDA7CiBkMSA9ICtIRUFQRjY0W2k1ID4+IDNdOwogZDYgPSBkNCAtIGQxOwogZG8gaWYgKCEoZDYgPiAxLjBlLTA3ICYgKGk4IHwgMCkgPCAoaTkgfCAwKSkpIHsKICBpZiAoZDYgPCAtMS4wZS0wNyAmIChpOCB8IDApIDwgKGk5IHwgMCkpIHsKICAgZDEgPSBkMSAtIC0oZDQgLSArSEVBUEY2NFtpMTAgKyAxNiA+PiAzXSkgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvIGQzKTsKICAgSEVBUEY2NFtpNSA+PiAzXSA9IGQxOwogICBicmVhazsKICB9CiAgaWYgKChpOCB8IDApID4gKGk5ICsgLTEgfCAwKSkgewogICBIRUFQMzJbaTcgPj4gMl0gPSBpOSArIC0yOwogICBicmVhazsKICB9IGVsc2UgewogICBIRUFQMzJbaTcgPj4gMl0gPSBpMjsKICAgSEVBUEY2NFtpMTAgKyAxNiA+PiAzXSA9IGQ0OwogICBicmVhazsKICB9CiB9IGVsc2UgewogIGQxID0gZDEgKyAoZDQgLSArSEVBUEY2NFtpMTAgKyAxNiA+PiAzXSkgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvIGQzKTsKICBIRUFQRjY0W2k1ID4+IDNdID0gZDE7CiB9IHdoaWxlICgwKTsKIEhFQVBGNjRbaTEwICsgOCA+PiAzXSA9IGQxOwogZDYgPSBkMTsKIHJldHVybiArZDY7Cn0KCmZ1bmN0aW9uIF9tZW1jaHIoaTEsIGk1LCBpMikgewogaTEgPSBpMSB8IDA7CiBpNSA9IGk1IHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk2ID0gaTUgJiAyNTU7CiBpMyA9IChpMiB8IDApICE9IDA7CiBMMSA6IGRvIGlmIChpMyAmIChpMSAmIDMgfCAwKSAhPSAwKSB7CiAgaTQgPSBpNSAmIDI1NTsKICB3aGlsZSAoMSkgewogICBpZiAoKEhFQVA4W2kxID4+IDBdIHwgMCkgPT0gaTQgPDwgMjQgPj4gMjQpIHsKICAgIGk3ID0gNjsKICAgIGJyZWFrIEwxOwogICB9CiAgIGkxID0gaTEgKyAxIHwgMDsKICAgaTIgPSBpMiArIC0xIHwgMDsKICAgaTMgPSAoaTIgfCAwKSAhPSAwOwogICBpZiAoIShpMyAmIChpMSAmIDMgfCAwKSAhPSAwKSkgewogICAgaTcgPSA1OwogICAgYnJlYWs7CiAgIH0KICB9CiB9IGVsc2UgaTcgPSA1OyB3aGlsZSAoMCk7CiBpZiAoKGk3IHwgMCkgPT0gNSkgaWYgKGkzKSBpNyA9IDY7IGVsc2UgaTIgPSAwOwogTDggOiBkbyBpZiAoKGk3IHwgMCkgPT0gNikgewogIGk0ID0gaTUgJiAyNTU7CiAgaWYgKChIRUFQOFtpMSA+PiAwXSB8IDApICE9IGk0IDw8IDI0ID4+IDI0KSB7CiAgIGkzID0gTWF0aF9pbXVsKGk2LCAxNjg0MzAwOSkgfCAwOwogICBMMTEgOiBkbyBpZiAoaTIgPj4+IDAgPiAzKSB3aGlsZSAoMSkgewogICAgaTYgPSBIRUFQMzJbaTEgPj4gMl0gXiBpMzsKICAgIGlmICgoaTYgJiAtMjEzOTA2MjE0NCBeIC0yMTM5MDYyMTQ0KSAmIGk2ICsgLTE2ODQzMDA5KSBicmVhazsKICAgIGkxID0gaTEgKyA0IHwgMDsKICAgIGkyID0gaTIgKyAtNCB8IDA7CiAgICBpZiAoaTIgPj4+IDAgPD0gMykgewogICAgIGk3ID0gMTE7CiAgICAgYnJlYWsgTDExOwogICAgfQogICB9IGVsc2UgaTcgPSAxMTsgd2hpbGUgKDApOwogICBpZiAoKGk3IHwgMCkgPT0gMTEpIGlmICghaTIpIHsKICAgIGkyID0gMDsKICAgIGJyZWFrOwogICB9CiAgIHdoaWxlICgxKSB7CiAgICBpZiAoKEhFQVA4W2kxID4+IDBdIHwgMCkgPT0gaTQgPDwgMjQgPj4gMjQpIGJyZWFrIEw4OwogICAgaTEgPSBpMSArIDEgfCAwOwogICAgaTIgPSBpMiArIC0xIHwgMDsKICAgIGlmICghaTIpIHsKICAgICBpMiA9IDA7CiAgICAgYnJlYWs7CiAgICB9CiAgIH0KICB9CiB9IHdoaWxlICgwKTsKIHJldHVybiAoKGkyIHwgMCkgIT0gMCA/IGkxIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pON21heGlEeW44Y29tcHJlc3NFZChpNywgZDYpIHsKIGk3ID0gaTcgfCAwOwogZDYgPSArZDY7CiB2YXIgZDEgPSAwLjAsIGkyID0gMCwgaTMgPSAwLCBkNCA9IDAuMCwgaTUgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMDsKIGQ0ID0gK01hdGhfYWJzKCtkNik7CiBpNSA9IGk3ICsgNzIgfCAwOwogaTIgPSAoSEVBUDMyW2k1ID4+IDJdIHwgMCkgPT0gMTsKIGlmIChkNCA+ICtIRUFQRjY0W2k3ICsgMjQgPj4gM10pIGlmICghaTIgPyAoSEVBUDMyW2k3ICsgNjggPj4gMl0gPSAwLCBIRUFQMzJbaTcgKyA4MCA+PiAyXSA9IDAsIEhFQVAzMltpNSA+PiAyXSA9IDEsIGkzID0gaTcgKyAxNiB8IDAsICtIRUFQRjY0W2kzID4+IDNdID09IDAuMCkgOiAwKSB7CiAgSEVBUEY2NFtpMyA+PiAzXSA9ICtIRUFQRjY0W2k3ICsgOCA+PiAzXTsKICBpOCA9IDc7CiB9IGVsc2UgaTggPSA3OyBlbHNlIGlmIChpMikgaTggPSA3OyBlbHNlIHsKICBpOSA9IGk3ICsgMTYgfCAwOwogIGkxMCA9IGk3ICsgOCB8IDA7CiAgaTIgPSBpMTA7CiAgaTMgPSBpOTsKICBkNCA9ICtIRUFQRjY0W2kxMCA+PiAzXTsKICBkMSA9ICtIRUFQRjY0W2k5ID4+IDNdOwogfQogaWYgKChpOCB8IDApID09IDcpIHsKICBpMyA9IGk3ICsgMTYgfCAwOwogIGQxID0gK0hFQVBGNjRbaTMgPj4gM107CiAgaTIgPSBpNyArIDggfCAwOwogIGQ0ID0gK0hFQVBGNjRbaTIgPj4gM107CiAgaWYgKGQxIDwgZDQgKyAtMS4wKSB7CiAgIGQxID0gZDEgKiAoK0hFQVBGNjRbaTcgKyA0MCA+PiAzXSArIDEuMCk7CiAgIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKICB9CiB9CiBpZiAoIShkMSA+PSBkNCArIC0xLjApKSB7CiAgaWYgKGQxID4gMC4wID8gKEhFQVAzMltpNyArIDgwID4+IDJdIHwgMCkgPT0gMSA6IDApIGk4ID0gMTI7CiB9IGVsc2UgewogIEhFQVAzMltpNSA+PiAyXSA9IDA7CiAgSEVBUDMyW2k3ICsgODAgPj4gMl0gPSAxOwogIGlmIChkMSA+IDAuMCkgaTggPSAxMjsKIH0KIGlmICgoaTggfCAwKSA9PSAxMikgewogIGQxID0gZDEgKiArSEVBUEY2NFtpNyArIDQ4ID4+IDNdOwogIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIH0KIGQ2ID0gZDYgLyAoZDEgKyAxLjApOwogSEVBUEY2NFtpNyArIDMyID4+IDNdID0gZDY7CiByZXR1cm4gKyhkNiAqICgrTWF0aF9sb2coKygrSEVBUEY2NFtpMiA+PiAzXSkpICsgMS4wKSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlTYW1wbGU0cGxheUVkKGk3LCBkMikgewogaTcgPSBpNyB8IDA7CiBkMiA9ICtkMjsKIHZhciBkMSA9IDAuMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwLCBkOCA9IDAuMCwgZDkgPSAwLjAsIGQxMCA9IDAuMDsKIGkzID0gaTcgKyA0MCB8IDA7CiBkMSA9ICtIRUFQRjY0W2kzID4+IDNdICsgK0hFQVBGMzJbNTA4Ml0gKiBkMiAvICsoKEhFQVAzMls1MDgzXSB8IDApIC8gKEhFQVAzMltpNyArIDEwNCA+PiAyXSB8IDApIHwgMCB8IDApOwogSEVBUEY2NFtpMyA+PiAzXSA9IGQxOwogaTQgPSB+fmQxOwogaWYgKCEoZDIgPj0gMC4wKSkgewogIGlmICgoaTQgfCAwKSA8IDApIHsKICAgZDEgPSArKEhFQVAzMltpNyArIDEwOCA+PiAyXSB8IDApOwogICBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiAgfQogIGQ4ID0gZDEgLSArTWF0aF9mbG9vcigrZDEpOwogIGQ5ID0gZDEgKyAtMS4wOwogIGQyID0gZDEgKyAtMi4wOwogIGk2ID0gSEVBUDMyW2k3ICsgMTI4ID4+IDJdIHwgMDsKICBkMiA9ICgoLTEuMCAtIGQ4KSAqICsoSEVBUDE2W2k2ICsgKCghKGQ5ID49IDAuMCkgPyAwIDogfn5kOSkgPDwgMSkgPj4gMV0gfCAwKSArIGQ4ICogKyhIRUFQMTZbaTYgKyAoKCEoZDIgPj0gMC4wKSA/IDAgOiB+fmQyKSA8PCAxKSA+PiAxXSB8IDApKSAvIDMyNzY3LjA7CiAgSEVBUEY2NFtpNyArIDY0ID4+IDNdID0gZDI7CiAgcmV0dXJuICtkMjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbaTcgKyAxMDggPj4gMl0gfCAwOwogIGk2ID0gaTUgKyAtMSB8IDA7CiAgaWYgKChpNCB8IDApID49IChpNiB8IDApKSB7CiAgIEhFQVBGNjRbaTMgPj4gM10gPSAxLjA7CiAgIGQxID0gMS4wOwogIH0KICBkMiA9IGQxIC0gK01hdGhfZmxvb3IoK2QxKTsKICBkMTAgPSBkMSArIDEuMDsKICBkOCA9ICsoaTUgfCAwKTsKICBkOSA9IGQxICsgMi4wOwogIGk1ID0gSEVBUDMyW2k3ICsgMTI4ID4+IDJdIHwgMDsKICBkOSA9ICgoMS4wIC0gZDIpICogKyhIRUFQMTZbaTUgKyAoKGQxMCA8IGQ4ID8gfn5kMTAgOiBpNikgPDwgMSkgPj4gMV0gfCAwKSArIGQyICogKyhIRUFQMTZbaTUgKyAoKGQ5IDwgZDggPyB+fmQ5IDogaTYpIDw8IDEpID4+IDFdIHwgMCkpIC8gMzI3NjcuMDsKICBIRUFQRjY0W2k3ICsgNjQgPj4gM10gPSBkOTsKICByZXR1cm4gK2Q5OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU03bWF4aUZGVEZ2TlN0M19fMTZ2ZWN0b3JJZk5TM185YWxsb2NhdG9ySWZFRUVFRUUzc2V0SVMyX0VFdlJLUzlfUlRfUFM3XyhpMiwgaTMsIGk0KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTEgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwOwogaTYgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTUgPSBpNjsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk3ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk3ID4+IDEpIHwgMDsKIGlmIChpNyAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIF9fWk5TdDNfXzE2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVDMkVSS1MzXyhpNSwgaTQpOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoaTEgfCAwLCBpMiB8IDAsIGk1IHwgMCk7CiBpNyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTcgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBpNCA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgaWYgKCFpNCkgX19fcmVzdW1lRXhjZXB0aW9uKGkzIHwgMCk7CiAgaTEgPSBpNSArIDQgfCAwOwogIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKICBpZiAoKGkyIHwgMCkgIT0gKGk0IHwgMCkpIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgKH4oKGkyICsgLTQgLSBpNCB8IDApID4+PiAyKSA8PCAyKTsKICBfX1pkbFB2KGk0KTsKICBfX19yZXN1bWVFeGNlcHRpb24oaTMgfCAwKTsKIH0gZWxzZSB7CiAgaTMgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogIGlmICghaTMpIHsKICAgU1RBQ0tUT1AgPSBpNjsKICAgcmV0dXJuOwogIH0KICBpMSA9IGk1ICsgNCB8IDA7CiAgaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogIGlmICgoaTIgfCAwKSAhPSAoaTMgfCAwKSkgSEVBUDMyW2kxID4+IDJdID0gaTIgKyAofigoaTIgKyAtNCAtIGkzIHwgMCkgPj4+IDIpIDw8IDIpOwogIF9fWmRsUHYoaTMpOwogIFNUQUNLVE9QID0gaTY7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVM1X0VFRTR0eXBlRURwT1QwXyhpNSkgewogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBfX1pud2ooNTYpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMzQ3NjsKIGk0ID0gfn4oKyhIRUFQMzJbNTA4M10gfCAwKSAqIC41KSA+Pj4gMDsKIEhFQVAzMltpMiArIDMyID4+IDJdID0gaTQ7CiBpMSA9IF9tYWxsb2MoaTQgPDwgMikgfCAwOwogaTMgPSBpMiArIDM2IHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IGkxOwogaWYgKCgoKCgoKChpNCB8IDApICE9IDAgPyAoSEVBUDMyW2kxID4+IDJdID0gMCwgaTQgPj4+IDAgPiAxKSA6IDApID8gKEhFQVAzMltpMSArIDQgPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSAyKSA6IDApID8gKEhFQVAzMltpMSArIDggPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSAzKSA6IDApID8gKEhFQVAzMltpMSArIDEyID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gNCkgOiAwKSA/IChIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IDAsIChpNCB8IDApICE9IDUpIDogMCkgPyAoSEVBUDMyW2kxICsgMjAgPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSA2KSA6IDApID8gKEhFQVAzMltpMSArIDI0ID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gNykgOiAwKSB7CiAgaTEgPSA3OwogIGRvIHsKICAgSEVBUDMyWyhIRUFQMzJbaTMgPj4gMl0gfCAwKSArIChpMSA8PCAyKSA+PiAyXSA9IDA7CiAgIGkxID0gaTEgKyAxIHwgMDsKICB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTQgfCAwKSk7CiB9CiBpNCA9IGkyICsgMTYgfCAwOwogSEVBUEY2NFtpNCA+PiAzXSA9IDAuMDsKIGkzID0gaTIgKyA0MCB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gMDsKIEhFQVAzMltpNSA+PiAyXSA9IGk0OwogSEVBUDMyW2k1ICsgNCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlRDJFdihpNykgewogaTcgPSBpNyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTggPSAwOwogaTggPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpNyArIDEyOCB8IDA7CiBpMSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpNiA9IGk3ICsgMTMyIHwgMDsKIGkyID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKIGlmICgoaTIgfCAwKSAhPSAoaTEgfCAwKSkgSEVBUDMyW2k2ID4+IDJdID0gaTIgKyAofigoaTIgKyAtMiAtIGkxIHwgMCkgPj4+IDEpIDw8IDEpOwogaTQgPSBpNyArIDExNiB8IDA7CiBpMSA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBpNSA9IGk3ICsgMTIwIHwgMDsKIGkyID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKIGlmICgoaTIgfCAwKSAhPSAoaTEgfCAwKSkgSEVBUDMyW2k1ID4+IDJdID0gaTIgKyAofigoaTIgKyAtOCAtIGkxIHwgMCkgPj4+IDMpIDw8IDMpOwogX3ByaW50ZigyNTg4OCwgaTgpIHwgMDsKIGkxID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKIGkyID0gaTE7CiBpZiAoaTEpIHsKICBpMyA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiAgaWYgKChpMyB8IDApICE9IChpMSB8IDApKSBIRUFQMzJbaTYgPj4gMl0gPSBpMyArICh+KChpMyArIC0yIC0gaTIgfCAwKSA+Pj4gMSkgPDwgMSk7CiAgX19aZGxQdihpMSk7CiB9CiBpMSA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSB7CiAgX19aTlN0M19fMTEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUQyRXYoaTcpOwogIFNUQUNLVE9QID0gaTg7CiAgcmV0dXJuOwogfQogaTIgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApICE9IChpMSB8IDApKSBIRUFQMzJbaTUgPj4gMl0gPSBpMiArICh+KChpMiArIC04IC0gaTEgfCAwKSA+Pj4gMykgPDwgMyk7CiBfX1pkbFB2KGkxKTsKIF9fWk5TdDNfXzExMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVEMkV2KGk3KTsKIFNUQUNLVE9QID0gaTg7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUUyMV9fcHVzaF9iYWNrX3Nsb3dfcGF0aElSS2RFRXZPVF8oaTExLCBpMTApIHsKIGkxMSA9IGkxMSB8IDA7CiBpMTAgPSBpMTAgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMiA9IDA7CiBpOSA9IGkxMSArIDQgfCAwOwogaTEgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKIGkyID0gaTE7CiBpNSA9ICgoSEVBUDMyW2k5ID4+IDJdIHwgMCkgLSBpMiA+PiAzKSArIDEgfCAwOwogaWYgKGk1ID4+PiAwID4gNTM2ODcwOTExKSB7CiAgX19aTktTdDNfXzEyMF9fdmVjdG9yX2Jhc2VfY29tbW9uSUxiMUVFMjBfX3Rocm93X2xlbmd0aF9lcnJvckV2KGkxMSk7CiAgaTIgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKICBpMSA9IGkyOwogfQogaTggPSBpMTEgKyA4IHwgMDsKIGk0ID0gaTE7CiBpMyA9IChIRUFQMzJbaTggPj4gMl0gfCAwKSAtIGk0IHwgMDsKIGlmIChpMyA+PiAzID4+PiAwIDwgMjY4NDM1NDU1KSB7CiAgaTMgPSBpMyA+PiAyOwogIGkzID0gaTMgPj4+IDAgPCBpNSA+Pj4gMCA/IGk1IDogaTM7CiAgaTUgPSAoSEVBUDMyW2k5ID4+IDJdIHwgMCkgLSBpNCB8IDA7CiAgaTQgPSBpNSA+PiAzOwogIGlmICghaTMpIHsKICAgaTcgPSAwOwogICBpNiA9IDA7CiAgIGkzID0gaTU7CiAgfSBlbHNlIGkxMiA9IDY7CiB9IGVsc2UgewogIGk1ID0gKEhFQVAzMltpOSA+PiAyXSB8IDApIC0gaTQgfCAwOwogIGkzID0gNTM2ODcwOTExOwogIGk0ID0gaTUgPj4gMzsKICBpMTIgPSA2OwogfQogaWYgKChpMTIgfCAwKSA9PSA2KSB7CiAgaTcgPSBpMzsKICBpNiA9IF9fWm53aihpMyA8PCAzKSB8IDA7CiAgaTMgPSBpNTsKIH0KIEhFQVBGNjRbaTYgKyAoaTQgPDwgMykgPj4gM10gPSArSEVBUEY2NFtpMTAgPj4gM107CiBfbWVtY3B5KGk2IHwgMCwgaTEgfCAwLCBpMyB8IDApIHwgMDsKIEhFQVAzMltpMTEgPj4gMl0gPSBpNjsKIEhFQVAzMltpOSA+PiAyXSA9IGk2ICsgKGk0ICsgMSA8PCAzKTsKIEhFQVAzMltpOCA+PiAyXSA9IGk2ICsgKGk3IDw8IDMpOwogaWYgKCFpMikgcmV0dXJuOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWlOU185YWxsb2NhdG9ySWlFRUUyMV9fcHVzaF9iYWNrX3Nsb3dfcGF0aElSS2lFRXZPVF8oaTExLCBpMTApIHsKIGkxMSA9IGkxMSB8IDA7CiBpMTAgPSBpMTAgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGkxMiA9IDA7CiBpOSA9IGkxMSArIDQgfCAwOwogaTEgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKIGkyID0gaTE7CiBpNSA9ICgoSEVBUDMyW2k5ID4+IDJdIHwgMCkgLSBpMiA+PiAyKSArIDEgfCAwOwogaWYgKGk1ID4+PiAwID4gMTA3Mzc0MTgyMykgewogIF9fWk5LU3QzX18xMjBfX3ZlY3Rvcl9iYXNlX2NvbW1vbklMYjFFRTIwX190aHJvd19sZW5ndGhfZXJyb3JFdihpMTEpOwogIGkyID0gSEVBUDMyW2kxMSA+PiAyXSB8IDA7CiAgaTEgPSBpMjsKIH0KIGk4ID0gaTExICsgOCB8IDA7CiBpNCA9IGkxOwogaTMgPSAoSEVBUDMyW2k4ID4+IDJdIHwgMCkgLSBpNCB8IDA7CiBpZiAoaTMgPj4gMiA+Pj4gMCA8IDUzNjg3MDkxMSkgewogIGkzID0gaTMgPj4gMTsKICBpMyA9IGkzID4+PiAwIDwgaTUgPj4+IDAgPyBpNSA6IGkzOwogIGk1ID0gKEhFQVAzMltpOSA+PiAyXSB8IDApIC0gaTQgfCAwOwogIGk0ID0gaTUgPj4gMjsKICBpZiAoIWkzKSB7CiAgIGk3ID0gMDsKICAgaTYgPSAwOwogICBpMyA9IGk1OwogIH0gZWxzZSBpMTIgPSA2OwogfSBlbHNlIHsKICBpNSA9IChIRUFQMzJbaTkgPj4gMl0gfCAwKSAtIGk0IHwgMDsKICBpMyA9IDEwNzM3NDE4MjM7CiAgaTQgPSBpNSA+PiAyOwogIGkxMiA9IDY7CiB9CiBpZiAoKGkxMiB8IDApID09IDYpIHsKICBpNyA9IGkzOwogIGk2ID0gX19abndqKGkzIDw8IDIpIHwgMDsKICBpMyA9IGk1OwogfQogSEVBUDMyW2k2ICsgKGk0IDw8IDIpID4+IDJdID0gSEVBUDMyW2kxMCA+PiAyXTsKIF9tZW1jcHkoaTYgfCAwLCBpMSB8IDAsIGkzIHwgMCkgfCAwOwogSEVBUDMyW2kxMSA+PiAyXSA9IGk2OwogSEVBUDMyW2k5ID4+IDJdID0gaTYgKyAoaTQgKyAxIDw8IDIpOwogSEVBUDMyW2k4ID4+IDJdID0gaTYgKyAoaTcgPDwgMik7CiBpZiAoIWkyKSByZXR1cm47CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTIxX19wdXNoX2JhY2tfc2xvd19wYXRoSVJLZkVFdk9UXyhpMTEsIGkxMCkgewogaTExID0gaTExIHwgMDsKIGkxMCA9IGkxMCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEyID0gMDsKIGk5ID0gaTExICsgNCB8IDA7CiBpMSA9IEhFQVAzMltpMTEgPj4gMl0gfCAwOwogaTIgPSBpMTsKIGk1ID0gKChIRUFQMzJbaTkgPj4gMl0gfCAwKSAtIGkyID4+IDIpICsgMSB8IDA7CiBpZiAoaTUgPj4+IDAgPiAxMDczNzQxODIzKSB7CiAgX19aTktTdDNfXzEyMF9fdmVjdG9yX2Jhc2VfY29tbW9uSUxiMUVFMjBfX3Rocm93X2xlbmd0aF9lcnJvckV2KGkxMSk7CiAgaTIgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKICBpMSA9IGkyOwogfQogaTggPSBpMTEgKyA4IHwgMDsKIGk0ID0gaTE7CiBpMyA9IChIRUFQMzJbaTggPj4gMl0gfCAwKSAtIGk0IHwgMDsKIGlmIChpMyA+PiAyID4+PiAwIDwgNTM2ODcwOTExKSB7CiAgaTMgPSBpMyA+PiAxOwogIGkzID0gaTMgPj4+IDAgPCBpNSA+Pj4gMCA/IGk1IDogaTM7CiAgaTUgPSAoSEVBUDMyW2k5ID4+IDJdIHwgMCkgLSBpNCB8IDA7CiAgaTQgPSBpNSA+PiAyOwogIGlmICghaTMpIHsKICAgaTcgPSAwOwogICBpNiA9IDA7CiAgIGkzID0gaTU7CiAgfSBlbHNlIGkxMiA9IDY7CiB9IGVsc2UgewogIGk1ID0gKEhFQVAzMltpOSA+PiAyXSB8IDApIC0gaTQgfCAwOwogIGkzID0gMTA3Mzc0MTgyMzsKICBpNCA9IGk1ID4+IDI7CiAgaTEyID0gNjsKIH0KIGlmICgoaTEyIHwgMCkgPT0gNikgewogIGk3ID0gaTM7CiAgaTYgPSBfX1pud2ooaTMgPDwgMikgfCAwOwogIGkzID0gaTU7CiB9CiBIRUFQMzJbaTYgKyAoaTQgPDwgMikgPj4gMl0gPSBIRUFQMzJbaTEwID4+IDJdOwogX21lbWNweShpNiB8IDAsIGkxIHwgMCwgaTMgfCAwKSB8IDA7CiBIRUFQMzJbaTExID4+IDJdID0gaTY7CiBIRUFQMzJbaTkgPj4gMl0gPSBpNiArIChpNCArIDEgPDwgMik7CiBIRUFQMzJbaTggPj4gMl0gPSBpNiArIChpNyA8PCAyKTsKIGlmICghaTIpIHJldHVybjsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTNV9FRUU0dHlwZUVEcE9UMF8oaTUpIHsKIGk1ID0gaTUgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gX19abndqKDcyKSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kyID4+IDJdID0gMjMzNjQ7CiBpNCA9IH5+KCsoSEVBUDMyWzUwODNdIHwgMCkgKiAuNSkgPj4+IDA7CiBIRUFQMzJbaTIgKyAzMiA+PiAyXSA9IGk0OwogaTEgPSBfbWFsbG9jKGk0IDw8IDIpIHwgMDsKIGkzID0gaTIgKyAzNiB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSBpMTsKIGlmICgoKCgoKCgoaTQgfCAwKSAhPSAwID8gKEhFQVAzMltpMSA+PiAyXSA9IDAsIGk0ID4+PiAwID4gMSkgOiAwKSA/IChIRUFQMzJbaTEgKyA0ID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gMikgOiAwKSA/IChIRUFQMzJbaTEgKyA4ID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gMykgOiAwKSA/IChIRUFQMzJbaTEgKyAxMiA+PiAyXSA9IDAsIChpNCB8IDApICE9IDQpIDogMCkgPyAoSEVBUDMyW2kxICsgMTYgPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSA1KSA6IDApID8gKEhFQVAzMltpMSArIDIwID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gNikgOiAwKSA/IChIRUFQMzJbaTEgKyAyNCA+PiAyXSA9IDAsIChpNCB8IDApICE9IDcpIDogMCkgewogIGkxID0gNzsKICBkbyB7CiAgIEhFQVAzMlsoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyAoaTEgPDwgMikgPj4gMl0gPSAwOwogICBpMSA9IGkxICsgMSB8IDA7CiAgfSB3aGlsZSAoKGkxIHwgMCkgIT0gKGk0IHwgMCkpOwogfQogSEVBUEY2NFtpMiArIDQwID4+IDNdID0gMC4wOwogSEVBUDMyW2kyICsgNDggPj4gMl0gPSAwOwogaTQgPSBpMiArIDE2IHwgMDsKIEhFQVBGNjRbaTQgPj4gM10gPSAwLjA7CiBIRUFQRjY0W2kyICsgNjQgPj4gM10gPSAwLjA7CiBIRUFQMzJbaTUgPj4gMl0gPSBpNDsKIEhFQVAzMltpNSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX2V4cDIoZDEpIHsKIGQxID0gK2QxOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGQ1ID0gMC4wLCBkNiA9IDAuMDsKIEhFQVBGNjRbdGVtcERvdWJsZVB0ciA+PiAzXSA9IGQxOwogaTIgPSBIRUFQMzJbdGVtcERvdWJsZVB0ciArIDQgPj4gMl0gfCAwOwogaTMgPSBpMiAmIDIxNDc0ODM2NDc7CiBkbyBpZiAoaTMgPj4+IDAgPiAxMDgzMTc0OTExKSB7CiAgaTIgPSAoaTIgfCAwKSA+IC0xIHwgKGkyIHwgMCkgPT0gLTEgJiAoSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gfCAwKSA+Pj4gMCA+IDQyOTQ5NjcyOTU7CiAgaWYgKGkyICYgaTMgPj4+IDAgPiAxMDgzMTc5MDA3KSB7CiAgIGQxID0gZDEgKiA4OTg4NDY1Njc0MzExNTc5NTM4NjQ2NTI1LjBlMjgzOwogICBicmVhazsKICB9CiAgaWYgKGkzID4+PiAwIDw9IDIxNDY0MzUwNzEpIGlmICghKGQxIDw9IC0xMDc1LjApIHwgaTIpIHsKICAgaTQgPSA5OwogICBicmVhazsKICB9IGVsc2UgewogICBkMSA9IDAuMDsKICAgYnJlYWs7CiAgfSBlbHNlIHsKICAgZDEgPSAtMS4wIC8gZDE7CiAgIGJyZWFrOwogIH0KIH0gZWxzZSBpZiAoaTMgPj4+IDAgPCAxMDE2MDcwMTQ0KSBkMSA9IGQxICsgMS4wOyBlbHNlIGk0ID0gOTsgd2hpbGUgKDApOwogaWYgKChpNCB8IDApID09IDkpIHsKICBkNiA9IGQxICsgMjYzODgyNzkwNjY2MjQuMDsKICBIRUFQRjY0W3RlbXBEb3VibGVQdHIgPj4gM10gPSBkNjsKICBpNCA9IChIRUFQMzJbdGVtcERvdWJsZVB0ciA+PiAyXSB8IDApICsgMTI4IHwgMDsKICBpMyA9IGk0IDw8IDEgJiA1MTA7CiAgZDUgPSArSEVBUEY2NFsxNjE5MiArIChpMyA8PCAzKSA+PiAzXTsKICBkMSA9IGQxIC0gKGQ2ICsgLTI2Mzg4Mjc5MDY2NjI0LjApIC0gK0hFQVBGNjRbMTYxOTIgKyAoKGkzIHwgMSkgPDwgMykgPj4gM107CiAgZDEgPSArX3NjYWxibihkNSArIGQ1ICogZDEgKiAoZDEgKiAoZDEgKiAoZDEgKiAoZDEgKiAxLjMzMzM1NTkxNjQ2MzAyMjNlLTAzICsgLjAwOTYxODEyOTg0MjEyNjA2NikgKyAuMDU1NTA0MTA4NjY0ODIxNCkgKyAuMjQwMjI2NTA2OTU5MSkgKyAuNjkzMTQ3MTgwNTU5OTQ1MyksIChpNCAmIC0yNTYgfCAwKSAvIDI1NiB8IDApOwogfQogcmV0dXJuICtkMTsKfQoKZnVuY3Rpb24gX19aTjhtYXhpSUZGVDVzZXR1cEVpaWkoaTQsIGkyLCBpNSwgaTMpIHsKIGk0ID0gaTQgfCAwOwogaTIgPSBpMiB8IDA7CiBpNSA9IGk1IHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGQxID0gMC4wLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAsIGQxMCA9IDAuMDsKIGk4ID0gX19abndqKDI0KSB8IDA7CiBIRUFQMzJbaTggPj4gMl0gPSBpMjsKIGk3ID0gKGkyIHwgMCkgLyAyIHwgMDsKIEhFQVAzMltpOCArIDQgPj4gMl0gPSBpNzsKIGk2ID0gaTIgPDwgMjsKIGk5ID0gX21hbGxvYyhpNikgfCAwOwogSEVBUDMyW2k4ICsgOCA+PiAyXSA9IGk5OwogaTkgPSBfbWFsbG9jKGk2KSB8IDA7CiBIRUFQMzJbaTggKyAxNiA+PiAyXSA9IGk5OwogaTkgPSBfbWFsbG9jKGk2KSB8IDA7CiBIRUFQMzJbaTggKyAxMiA+PiAyXSA9IGk5OwogaTkgPSBfbWFsbG9jKGk2KSB8IDA7CiBIRUFQMzJbaTggKyAyMCA+PiAyXSA9IGk5OwogSEVBUDMyW2k0ICsgMzYgPj4gMl0gPSBpODsKIEhFQVAzMltpNCArIDMyID4+IDJdID0gaTI7CiBIRUFQMzJbaTQgKyAxMiA+PiAyXSA9IGk1OwogSEVBUDMyW2k0ICsgMTYgPj4gMl0gPSBpNzsKIEhFQVAzMltpNCArIDIwID4+IDJdID0gaTM7CiBpMyA9IF9tYWxsb2MoaTYpIHwgMDsKIEhFQVAzMltpNCArIDQgPj4gMl0gPSBpMzsKIGkyID0gX21hbGxvYyhpNikgfCAwOwogSEVBUDMyW2k0ID4+IDJdID0gaTI7CiBfbWVtc2V0KGkzIHwgMCwgMCwgaTUgPDwgMiB8IDApIHwgMDsKIEhFQVAzMltpNCArIDI0ID4+IDJdID0gMDsKIGkzID0gX21hbGxvYyhpNikgfCAwOwogSEVBUDMyW2k0ICsgOCA+PiAyXSA9IGkzOwogX21lbXNldChpMyB8IDAsIDAsIGk2IHwgMCkgfCAwOwogaWYgKChpNSB8IDApIDw9IDApIHJldHVybjsKIGQxID0gKyhpNSArIC0xIHwgMCk7CiBpMiA9IDA7CiBkbyB7CiAgZDEwID0gLjUgLSArTWF0aF9jb3MoKygrKGkyIHwgMCkgKiA2LjI4MzE4NTMwNzE3OTU4NiAvIGQxKSkgKiAuNTsKICBIRUFQRjMyW2kzICsgKGkyIDw8IDIpID4+IDJdID0gZDEwOwogIGkyID0gaTIgKyAxIHwgMDsKIH0gd2hpbGUgKChpMiB8IDApICE9IChpNSB8IDApKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVM1X0VFRTR0eXBlRURwT1QwXyhpNSkgewogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBfX1pud2ooNTYpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMzQyMDsKIGk0ID0gfn4oKyhIRUFQMzJbNTA4M10gfCAwKSAqIC41KSA+Pj4gMDsKIEhFQVAzMltpMiArIDM2ID4+IDJdID0gaTQ7CiBpMSA9IF9tYWxsb2MoaTQgPDwgMikgfCAwOwogaTMgPSBpMiArIDQwIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IGkxOwogaWYgKCgoKCgoKChpNCB8IDApICE9IDAgPyAoSEVBUDMyW2kxID4+IDJdID0gMCwgaTQgPj4+IDAgPiAxKSA6IDApID8gKEhFQVAzMltpMSArIDQgPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSAyKSA6IDApID8gKEhFQVAzMltpMSArIDggPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSAzKSA6IDApID8gKEhFQVAzMltpMSArIDEyID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gNCkgOiAwKSA/IChIRUFQMzJbaTEgKyAxNiA+PiAyXSA9IDAsIChpNCB8IDApICE9IDUpIDogMCkgPyAoSEVBUDMyW2kxICsgMjAgPj4gMl0gPSAwLCAoaTQgfCAwKSAhPSA2KSA6IDApID8gKEhFQVAzMltpMSArIDI0ID4+IDJdID0gMCwgKGk0IHwgMCkgIT0gNykgOiAwKSB7CiAgaTEgPSA3OwogIGRvIHsKICAgSEVBUDMyWyhIRUFQMzJbaTMgPj4gMl0gfCAwKSArIChpMSA8PCAyKSA+PiAyXSA9IDA7CiAgIGkxID0gaTEgKyAxIHwgMDsKICB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTQgfCAwKSk7CiB9CiBpNCA9IGkyICsgMTYgfCAwOwogSEVBUEY2NFtpNCA+PiAzXSA9IDAuMDsKIEhFQVAzMltpMiArIDI0ID4+IDJdID0gMDsKIEhFQVBGNjRbaTIgKyA0OCA+PiAzXSA9IDAuMDsKIEhFQVAzMltpNSA+PiAyXSA9IGk0OwogSEVBUDMyW2k1ICsgNCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlEeW4xMGNvbXByZXNzb3JFZGRkZGQoaTEwLCBkOCwgZDksIGQxLCBkNSwgZDcpIHsKIGkxMCA9IGkxMCB8IDA7CiBkOCA9ICtkODsKIGQ5ID0gK2Q5OwogZDEgPSArZDE7CiBkNSA9ICtkNTsKIGQ3ID0gK2Q3OwogdmFyIGkyID0gMCwgZDMgPSAwLjAsIGk0ID0gMCwgaTYgPSAwLCBpMTEgPSAwLCBpMTIgPSAwOwogaTEyID0gK01hdGhfYWJzKCtkOCkgPiBkMTsKIGk2ID0gaTEwICsgNzIgfCAwOwogaTIgPSAoSEVBUDMyW2k2ID4+IDJdIHwgMCkgPT0gMTsKIGlmIChpMTIpIGlmICghaTIgPyAoSEVBUDMyW2kxMCArIDY4ID4+IDJdID0gMCwgSEVBUDMyW2kxMCArIDgwID4+IDJdID0gMCwgSEVBUDMyW2k2ID4+IDJdID0gMSwgaTQgPSBpMTAgKyAxNiB8IDAsICtIRUFQRjY0W2k0ID4+IDNdID09IDAuMCkgOiAwKSB7CiAgSEVBUEY2NFtpNCA+PiAzXSA9IGQ5OwogIGkxMSA9IDc7CiB9IGVsc2UgaTExID0gNzsgZWxzZSBpZiAoaTIpIGkxMSA9IDc7IGVsc2UgewogIGkxMiA9IGkxMCArIDE2IHwgMDsKICBpMiA9IGkxMjsKICBkMyA9IGQ5ICsgLTEuMDsKICBkMSA9ICtIRUFQRjY0W2kxMiA+PiAzXTsKIH0KIGlmICgoaTExIHwgMCkgPT0gNykgewogIGkyID0gaTEwICsgMTYgfCAwOwogIGQxID0gK0hFQVBGNjRbaTIgPj4gM107CiAgZDMgPSBkOSArIC0xLjA7CiAgaWYgKGQxIDwgZDMpIHsKICAgZDEgPSAoZDUgKyAxLjApICogZDE7CiAgIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKICB9CiB9CiBpZiAoIShkMSA+PSBkMykpIHsKICBpZiAoZDEgPiAwLjAgPyAoSEVBUDMyW2kxMCArIDgwID4+IDJdIHwgMCkgPT0gMSA6IDApIGkxMSA9IDEyOwogfSBlbHNlIHsKICBIRUFQMzJbaTYgPj4gMl0gPSAwOwogIEhFQVAzMltpMTAgKyA4MCA+PiAyXSA9IDE7CiAgaWYgKGQxID4gMC4wKSBpMTEgPSAxMjsKIH0KIGlmICgoaTExIHwgMCkgPT0gMTIpIHsKICBkMSA9IGQxICogZDc7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogfQogZDggPSBkOCAvIChkMSArIDEuMCk7CiBIRUFQRjY0W2kxMCArIDMyID4+IDNdID0gZDg7CiByZXR1cm4gKyhkOCAqICgrTWF0aF9sb2coK2Q5KSArIDEuMCkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOOW1heGlHcmFpbkkxNGhhbm5XaW5GdW5jdG9yRTRwbGF5RXYoaTkpIHsKIGk5ID0gaTkgfCAwOwogdmFyIGQxID0gMC4wLCBpMiA9IDAsIGQzID0gMC4wLCBpNCA9IDAsIGQ1ID0gMC4wLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpMTAgPSAwLCBpMTEgPSAwOwogaTYgPSBpOSArIDQgfCAwOwogaTcgPSBpOSArIDM2IHwgMDsKIGk4ID0gSEVBUDMyW2k3ID4+IDJdIHwgMDsKIGlmICghKEhFQVA4W2k2ID4+IDBdIHwgMCkpIHsKICBkNSA9ICtIRUFQRjY0WyhIRUFQMzJbaTkgKyA4MCA+PiAyXSB8IDApICsgKGk4IDw8IDMpID4+IDNdOwogIEhFQVBGNjRbaTkgKyA4OCA+PiAzXSA9IGQ1OwogIGkyID0gaTkgKyAxNiB8IDA7CiAgZDEgPSArSEVBUEY2NFtpOSArIDY0ID4+IDNdICsgK0hFQVBGNjRbaTIgPj4gM107CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTkgKyA4ID4+IDJdIHwgMCkgKyAxMDggPj4gMl0gfCAwOwogIGQzID0gKyhpNCB8IDApOwogIGlmICghKGQxID49IGQzKSkgewogICBpZiAoZDEgPCAwLjApIHsKICAgIGQxID0gZDEgKyBkMzsKICAgIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKICAgfQogIH0gZWxzZSB7CiAgIGQxID0gZDEgLSBkMzsKICAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogIH0KICBpMTEgPSB+fitNYXRoX2Zsb29yKCtkMSk7CiAgZDEgPSBkMSAtICsoaTExIHwgMCk7CiAgaTIgPSBpMTEgKyAxIHwgMDsKICBpMTAgPSBIRUFQMzJbaTkgKyA4NCA+PiAyXSB8IDA7CiAgZDEgPSAoKDEuMCAtIGQxKSAqICsoSEVBUDE2W2kxMCArIChpMTEgPDwgMSkgPj4gMV0gfCAwKSArIGQxICogKyhIRUFQMTZbaTEwICsgKCgoaTIgfCAwKSA+PSAoaTQgfCAwKSA/IDAgOiBpMikgPDwgMSkgPj4gMV0gfCAwKSkgLyAzMjc2Ny4wICogZDU7CiB9IGVsc2UgZDEgPSAwLjA7CiBpMTEgPSBpOCArIDEgfCAwOwogSEVBUDMyW2k3ID4+IDJdID0gaTExOwogaWYgKChpMTEgfCAwKSAhPSAoSEVBUDMyW2k5ICsgNDAgPj4gMl0gfCAwKSkgcmV0dXJuICtkMTsKIEhFQVA4W2k2ID4+IDBdID0gMTsKIHJldHVybiArZDE7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlNRkNDQW5hbHlzZXJJZEVFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aURpc3RvcnRpb25FRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURlbGF5bGluZUVFRTExdmFsX2RlbGV0ZXJjbEVQS3YoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gX19lbXZhbF9jYWxsKEhFQVAzMltpMiA+PiAyXSB8IDAsIDAsIDIwNjg0LCBpMSB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpMyB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTIgPj4gMl0gfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMSk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSAxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTsKICAgcmV0dXJuOwogIH0KIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTNtYXhpRENCbG9ja2VyRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlMYWdFeHBJZEVFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEybWF4aUVudmVsb3BlRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUZpbHRlckVFRTExdmFsX2RlbGV0ZXJjbEVQS3YoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gX19lbXZhbF9jYWxsKEhFQVAzMltpMiA+PiAyXSB8IDAsIDAsIDIwNjg0LCBpMSB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpMyB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTIgPj4gMl0gfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMSk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSAxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTsKICAgcmV0dXJuOwogIH0KIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpQ2hvcnVzRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aVNuYXJlRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aUNsb2NrRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUtpY2tFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRTExdmFsX2RlbGV0ZXJjbEVQS3YoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gX19lbXZhbF9jYWxsKEhFQVAzMltpMiA+PiAyXSB8IDAsIDAsIDIwNjg0LCBpMSB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpMyB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTIgPj4gMl0gfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMSk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSAxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTsKICAgcmV0dXJuOwogIH0KIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aVNWRkVFRTExdmFsX2RlbGV0ZXJjbEVQS3YoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gX19lbXZhbF9jYWxsKEhFQVAzMltpMiA+PiAyXSB8IDAsIDAsIDIwNjg0LCBpMSB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpMyB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTIgPj4gMl0gfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMSk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSAxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTsKICAgcmV0dXJuOwogIH0KIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlPc2NFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWl4RUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1hcEVFRTExdmFsX2RlbGV0ZXJjbEVQS3YoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gX19lbXZhbF9jYWxsKEhFQVAzMltpMiA+PiAyXSB8IDAsIDAsIDIwNjg0LCBpMSB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpMyB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTIgPj4gMl0gfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMSk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSAxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTsKICAgcmV0dXJuOwogIH0KIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRW52RUVFMTF2YWxfZGVsZXRlcmNsRVBLdihpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBfX2VtdmFsX2NhbGwoSEVBUDMyW2kyID4+IDJdIHwgMCwgMCwgMjA2ODQsIGkxIHwgMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIGkzIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMiA+PiAyXSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAxKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkxIHwgMCk7CiB9IGVsc2UgewogIEhFQVAzMltpMiA+PiAyXSA9IDE7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgewogICBTVEFDS1RPUCA9IGkxOwogICByZXR1cm47CiAgfQogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUR5bkVFRTExdmFsX2RlbGV0ZXJjbEVQS3YoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGkzID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gX19lbXZhbF9jYWxsKEhFQVAzMltpMiA+PiAyXSB8IDAsIDAsIDIwNjg0LCBpMSB8IDApIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBpMyB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTIgPj4gMl0gfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMSA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMSk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMSB8IDApOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSAxOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHsKICAgU1RBQ0tUT1AgPSBpMTsKICAgcmV0dXJuOwogIH0KIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUUxMXZhbF9kZWxldGVyY2xFUEt2KGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IF9fZW12YWxfY2FsbChIRUFQMzJbaTIgPj4gMl0gfCAwLCAwLCAyMDY4NCwgaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgaTMgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kyID4+IDJdIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDEpOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTEgfCAwKTsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gMTsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSB7CiAgIFNUQUNLVE9QID0gaTE7CiAgIHJldHVybjsKICB9CiB9Cn0KCmZ1bmN0aW9uIF9fX2Z3cml0ZXgoaTMsIGk0LCBpNikgewogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpNSA9IDAsIGk3ID0gMDsKIGkxID0gaTYgKyAxNiB8IDA7CiBpMiA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpZiAoIWkyKSBpZiAoIShfX190b3dyaXRlKGk2KSB8IDApKSB7CiAgaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogIGk1ID0gNDsKIH0gZWxzZSBpMSA9IDA7IGVsc2UgaTUgPSA0OwogTDQgOiBkbyBpZiAoKGk1IHwgMCkgPT0gNCkgewogIGk3ID0gaTYgKyAyMCB8IDA7CiAgaTUgPSBIRUFQMzJbaTcgPj4gMl0gfCAwOwogIGlmICgoaTIgLSBpNSB8IDApID4+PiAwIDwgaTQgPj4+IDApIHsKICAgaTEgPSBGVU5DVElPTl9UQUJMRV9paWlpW0hFQVAzMltpNiArIDM2ID4+IDJdICYgMTVdKGk2LCBpMywgaTQpIHwgMDsKICAgYnJlYWs7CiAgfQogIEw5IDogZG8gaWYgKChIRUFQOFtpNiArIDc1ID4+IDBdIHwgMCkgPiAtMSkgewogICBpMSA9IGk0OwogICB3aGlsZSAoMSkgewogICAgaWYgKCFpMSkgewogICAgIGkyID0gaTU7CiAgICAgaTEgPSAwOwogICAgIGJyZWFrIEw5OwogICAgfQogICAgaTIgPSBpMSArIC0xIHwgMDsKICAgIGlmICgoSEVBUDhbaTMgKyBpMiA+PiAwXSB8IDApID09IDEwKSBicmVhazsgZWxzZSBpMSA9IGkyOwogICB9CiAgIGlmICgoRlVOQ1RJT05fVEFCTEVfaWlpaVtIRUFQMzJbaTYgKyAzNiA+PiAyXSAmIDE1XShpNiwgaTMsIGkxKSB8IDApID4+PiAwIDwgaTEgPj4+IDApIGJyZWFrIEw0OwogICBpNCA9IGk0IC0gaTEgfCAwOwogICBpMyA9IGkzICsgaTEgfCAwOwogICBpMiA9IEhFQVAzMltpNyA+PiAyXSB8IDA7CiAgfSBlbHNlIHsKICAgaTIgPSBpNTsKICAgaTEgPSAwOwogIH0gd2hpbGUgKDApOwogIF9tZW1jcHkoaTIgfCAwLCBpMyB8IDAsIGk0IHwgMCkgfCAwOwogIEhFQVAzMltpNyA+PiAyXSA9IChIRUFQMzJbaTcgPj4gMl0gfCAwKSArIGk0OwogIGkxID0gaTEgKyBpNCB8IDA7CiB9IHdoaWxlICgwKTsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXJlZ2lzdGVyX3ZlY3RvcklmRUVOU182Y2xhc3NfSU5TdDNfXzE2dmVjdG9ySVRfTlMyXzlhbGxvY2F0b3JJUzRfRUVFRU5TXzhpbnRlcm5hbDExTm9CYXNlQ2xhc3NFRUVQS2MoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTM0NDAsIDEzNDY0LCAxMzQ4MCwgMCwgMjYxMjksIDg4LCAyNjEzMiwgMCwgMjYxMzIsIDAsIGkyIHwgMCwgMjYxMzQsIDI4NCk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxMzQ0MCwgMSwgMjA1NDgsIDI2MTI5LCA4OSwgMjYpOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjU7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNDQwLCAyNTkwNywgMywgMjA1NTIsIDI2NjY0LCAxNCwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDE0OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzQ0MCwgMjU5MTcsIDQsIDIwNTY0LCAyNjY2OSwgMywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDkwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzQ0MCwgMjU5MjQsIDIsIDIwNTgwLCAyNjE0OCwgNjIsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig0KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA2MzsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzNDQwLCAyNTkyOSwgMywgMjA1ODgsIDI2MTcxLCAxMywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDQpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDE0OwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTM0NDAsIDI1OTMzLCA0LCAyMDYwMCwgMjY2NzUsIDIsIGkyIHwgMCwgMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXJlZ2lzdGVyX3ZlY3RvckljRUVOU182Y2xhc3NfSU5TdDNfXzE2dmVjdG9ySVRfTlMyXzlhbGxvY2F0b3JJUzRfRUVFRU5TXzhpbnRlcm5hbDExTm9CYXNlQ2xhc3NFRUVQS2MoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTMzNjAsIDEzMzg0LCAxMzQwMCwgMCwgMjYxMjksIDg1LCAyNjEzMiwgMCwgMjYxMzIsIDAsIGkyIHwgMCwgMjYxMzQsIDI4Myk7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxMzM2MCwgMSwgMjA0ODAsIDI2MTI5LCA4NiwgMjUpOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjQ7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzMzYwLCAyNTkwNywgMywgMjA0ODQsIDI2MTM3LCAxMiwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDEzOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzM2MCwgMjU5MTcsIDQsIDIwNDk2LCAyNjE0MiwgNywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDg3OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzM2MCwgMjU5MjQsIDIsIDIwNTEyLCAyNjE0OCwgNjAsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig0KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA2MTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzMzYwLCAyNTkyOSwgMywgMjA1MjAsIDI2MTcxLCAxMSwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDQpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDEyOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTMzNjAsIDI1OTMzLCA0LCAyMDUzMiwgMjYxNzYsIDIsIGkyIHwgMCwgMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXJlZ2lzdGVyX3ZlY3RvcklkRUVOU182Y2xhc3NfSU5TdDNfXzE2dmVjdG9ySVRfTlMyXzlhbGxvY2F0b3JJUzRfRUVFRU5TXzhpbnRlcm5hbDExTm9CYXNlQ2xhc3NFRUVQS2MoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTMyODAsIDEzMzA0LCAxMzMyMCwgMCwgMjYxMjksIDgyLCAyNjEzMiwgMCwgMjYxMzIsIDAsIGkyIHwgMCwgMjYxMzQsIDI4Mik7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcigxMzI4MCwgMSwgMjA0MTIsIDI2MTI5LCA4MywgMjQpOwogaTIgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMjM7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzMjgwLCAyNTkwNywgMywgMjA0MTYsIDI2MzM3LCAxMywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDExOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzI4MCwgMjU5MTcsIDQsIDIwNDI4LCAyNjM0MiwgMiwgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDg0OwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzI4MCwgMjU5MjQsIDIsIDIwNDQ0LCAyNjE0OCwgNTgsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig0KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA1OTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uKDEzMjgwLCAyNTkyOSwgMywgMjA0NTIsIDI2MTcxLCA5LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooNCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gMTA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzI4MCwgMjU5MzMsIDQsIDIwNDY0LCAyNjM0OCwgMSwgaTIgfCAwLCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1cmVnaXN0ZXJfdmVjdG9ySWlFRU5TXzZjbGFzc19JTlN0M19fMTZ2ZWN0b3JJVF9OUzJfOWFsbG9jYXRvcklTNF9FRUVFTlNfOGludGVybmFsMTFOb0Jhc2VDbGFzc0VFRVBLYyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzcygxMzE5MiwgMTMyMTYsIDEzMjMyLCAwLCAyNjEyOSwgNzksIDI2MTMyLCAwLCAyNjEzMiwgMCwgaTIgfCAwLCAyNjEzNCwgMjgxKTsKIF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yKDEzMTkyLCAxLCAyMDM0NCwgMjYxMjksIDgwLCAyMyk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMjsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTMxOTIsIDI1OTA3LCAzLCAyMDM0OCwgMjYxMzcsIDksIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAxMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTMxOTIsIDI1OTE3LCA0LCAyMDM2MCwgMjYxNDIsIDYsIGkyIHwgMCwgMCk7CiBpMiA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSA4MTsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTMxOTIsIDI1OTI0LCAyLCAyMDM3NiwgMjYxNDgsIDU2LCBpMiB8IDAsIDApOwogaTIgPSBfX1pud2ooNCkgfCAwOwogSEVBUDMyW2kyID4+IDJdID0gNTc7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzE5MiwgMjU5MjksIDMsIDIwMzg0LCAyNjE3MSwgNywgaTIgfCAwLCAwKTsKIGkyID0gX19abndqKDQpIHwgMDsKIEhFQVAzMltpMiA+PiAyXSA9IDg7CiBfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbigxMzE5MiwgMjU5MzMsIDQsIDIwMzk2LCAyNjE3NiwgMSwgaTIgfCAwLCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU03bWF4aUZGVEtGTlN0M19fMTZ2ZWN0b3JJZk5TM185YWxsb2NhdG9ySWZFRUVFdkVFM2dldElTMl9FRVBTN19SS1M5X1JLVF8oaTIsIGkzKSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGkxID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMDsKIGk0ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk1ID0gaTQ7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNiA+PiAxKSB8IDA7CiBpZiAoaTYgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlbaTEgJiAxMjddKGk1LCBpMik7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDEyKSB8IDA7CiBpNiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNiAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2k1ID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTUgKyA0ID4+IDJdOwogIEhFQVAzMltpMSArIDggPj4gMl0gPSBIRUFQMzJbaTUgKyA4ID4+IDJdOwogIFNUQUNLVE9QID0gaTQ7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpNCA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiBpZiAoIWk0KSBfX19yZXN1bWVFeGNlcHRpb24oaTMgfCAwKTsKIGkxID0gaTUgKyA0IHwgMDsKIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGlmICgoaTIgfCAwKSAhPSAoaTQgfCAwKSkgSEVBUDMyW2kxID4+IDJdID0gaTIgKyAofigoaTIgKyAtNCAtIGk0IHwgMCkgPj4+IDIpIDw8IDIpOwogX19aZGxQdihpNCk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTMgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk3bWF4aVNWRkpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGQ0ID0gMC4wLCBkNSA9IDAuMCwgZDYgPSAwLjA7CiBpMiA9IF9fWm53aigxMjApIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMjI5MjsKIGkzID0gaTIgKyAxNiB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDE2ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDIwID4+IDJdID0gMDsKIEhFQVBGNjRbaTIgKyAxMDQgPj4gM10gPSAxLjBlMzsKIEhFQVBGNjRbaTIgKyAxMTIgPj4gM10gPSAxLjA7CiBkNSA9ICtNYXRoX3RhbigrKDMxNDEuNTkyNjUzNTg5NzkzIC8gKyhIRUFQMzJbNTA4M10gfCAwKSkpOwogSEVBUEY2NFtpMiArIDQwID4+IDNdID0gZDU7CiBIRUFQRjY0W2kyICsgNDggPj4gM10gPSAxLjA7CiBIRUFQRjY0W2kyICsgNTYgPj4gM10gPSAxLjA7CiBkNiA9IGQ1ICsgMS4wOwogZDQgPSBkNSAvIChkNSAqIGQ2ICsgMS4wKTsKIEhFQVBGNjRbaTIgKyA2NCA+PiAzXSA9IGQ0OwogSEVBUEY2NFtpMiArIDcyID4+IDNdID0gZDQ7CiBIRUFQRjY0W2kyICsgODAgPj4gM10gPSBkNCAqIChkNiAqIDIuMCk7CiBIRUFQRjY0W2kyICsgODggPj4gM10gPSBkNSAqIGQ0OwogSEVBUEY2NFtpMiArIDk2ID4+IDNdID0gZDQgKiAyLjA7CiBIRUFQMzJbaTEgPj4gMl0gPSBpMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpTWl4OWFtYmlzb25pY0VkUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWRkZChpMywgZDIsIGkxLCBkNCwgZDUsIGQ2KSB7CiBpMyA9IGkzIHwgMDsKIGQyID0gK2QyOwogaTEgPSBpMSB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiB2YXIgZDcgPSAwLjAsIGQ4ID0gMC4wLCBkOSA9IDAuMCwgZDEwID0gMC4wOwogZDkgPSBkNCA+IDEuMCA/IDEuMCA6IGQ0OwogZDkgPSBkOSA8IDAuMCA/IDAuMCA6IGQ5OwogZDQgPSBkNSA+IDEuMCA/IDEuMCA6IGQ1OwogZDQgPSBkNiA8IDAuMCA/IDAuMCA6IGQ2ID4gMS4wID8gMS4wIDogZDQgPCAwLjAgPyAwLjAgOiBkNDsKIGQ3ID0gMS4wIC0gZDk7CiBkOCA9ICtNYXRoX3NxcnQoKyhkNyAqIGQ0KSk7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBIRUFQRjY0W2kzID4+IDNdID0gKGQ4IC0gZDYpICogZDI7CiBkNSA9IDEuMCAtIGQ0OwogZDcgPSArTWF0aF9zcXJ0KCsoZDcgKiBkNSkpOwogSEVBUEY2NFtpMyArIDggPj4gM10gPSAoZDcgLSBkNikgKiBkMjsKIGQ0ID0gZDkgKiBkNDsKIGQxMCA9ICgrTWF0aF9zcXJ0KCtkNCkgLSBkNikgKiBkMjsKIEhFQVBGNjRbaTMgKyAxNiA+PiAzXSA9IGQxMDsKIGQ1ID0gZDkgKiBkNTsKIGQ5ID0gKCtNYXRoX3NxcnQoK2Q1KSAtIGQ2KSAqIGQyOwogSEVBUEY2NFtpMyArIDI0ID4+IDNdID0gZDk7CiBIRUFQRjY0W2kzICsgMzIgPj4gM10gPSBkOCAqIGQ2ICogZDI7CiBIRUFQRjY0W2kzICsgNDAgPj4gM10gPSBkNyAqIGQ2ICogZDI7CiBkNCA9ICtNYXRoX3NxcnQoKyhkNCAqIGQ2KSkgKiBkMjsKIEhFQVBGNjRbaTMgKyA0OCA+PiAzXSA9IGQ0OwogZDYgPSArTWF0aF9zcXJ0KCsoZDUgKiBkNikpICogZDI7CiBIRUFQRjY0W2kzICsgNTYgPj4gM10gPSBkNjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTksxMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvMjlwcm9jZXNzX3N0YXRpY190eXBlX2Fib3ZlX2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdlM0X2koaTIsIGk1LCBpMywgaTEsIGk0KSB7CiBpMiA9IGkyIHwgMDsKIGk1ID0gaTUgfCAwOwogaTMgPSBpMyB8IDA7CiBpMSA9IGkxIHwgMDsKIGk0ID0gaTQgfCAwOwogSEVBUDhbaTUgKyA1MyA+PiAwXSA9IDE7CiBkbyBpZiAoKEhFQVAzMltpNSArIDQgPj4gMl0gfCAwKSA9PSAoaTEgfCAwKSkgewogIEhFQVA4W2k1ICsgNTIgPj4gMF0gPSAxOwogIGkxID0gaTUgKyAxNiB8IDA7CiAgaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogIGlmICghaTIpIHsKICAgSEVBUDMyW2kxID4+IDJdID0gaTM7CiAgIEhFQVAzMltpNSArIDI0ID4+IDJdID0gaTQ7CiAgIEhFQVAzMltpNSArIDM2ID4+IDJdID0gMTsKICAgaWYgKCEoKGk0IHwgMCkgPT0gMSA/IChIRUFQMzJbaTUgKyA0OCA+PiAyXSB8IDApID09IDEgOiAwKSkgYnJlYWs7CiAgIEhFQVA4W2k1ICsgNTQgPj4gMF0gPSAxOwogICBicmVhazsKICB9CiAgaWYgKChpMiB8IDApICE9IChpMyB8IDApKSB7CiAgIGk0ID0gaTUgKyAzNiB8IDA7CiAgIEhFQVAzMltpNCA+PiAyXSA9IChIRUFQMzJbaTQgPj4gMl0gfCAwKSArIDE7CiAgIEhFQVA4W2k1ICsgNTQgPj4gMF0gPSAxOwogICBicmVhazsKICB9CiAgaTIgPSBpNSArIDI0IHwgMDsKICBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgaWYgKChpMSB8IDApID09IDIpIHsKICAgSEVBUDMyW2kyID4+IDJdID0gaTQ7CiAgIGkxID0gaTQ7CiAgfQogIGlmICgoaTEgfCAwKSA9PSAxID8gKEhFQVAzMltpNSArIDQ4ID4+IDJdIHwgMCkgPT0gMSA6IDApIEhFQVA4W2k1ICsgNTQgPj4gMF0gPSAxOwogfSB3aGlsZSAoMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVEMkV2KGk0KSB7CiBpNCA9IGk0IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMDsKIGkzID0gSEVBUDMyW2k0ICsgMTIgPj4gMl0gfCAwOwogaWYgKGkzKSB7CiAgaTIgPSBpMyArIDggfCAwOwogIGlmICgoSEVBUDMyW2kyID4+IDJdIHwgMCkgIT0gMCA/IChpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwLCBpNSA9IChIRUFQMzJbaTMgPj4gMl0gfCAwKSArIDQgfCAwLCBpNiA9IEhFQVAzMltpMSA+PiAyXSB8IDAsIEhFQVAzMltpNiArIDQgPj4gMl0gPSBIRUFQMzJbaTUgPj4gMl0sIEhFQVAzMltIRUFQMzJbaTUgPj4gMl0gPj4gMl0gPSBpNiwgSEVBUDMyW2kyID4+IDJdID0gMCwgKGkxIHwgMCkgIT0gKGkzIHwgMCkpIDogMCkgZG8gewogICBpNiA9IGkxOwogICBpMSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogICBfX1pkbFB2KGk2KTsKICB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTMgfCAwKSk7CiAgX19aZGxQdihpMyk7CiB9CiBpNSA9IGk0ICsgMTYgfCAwOwogaTEgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogaTQgPSBpNCArIDIwIHwgMDsKIGlmICghaTEpIHsKICBpNiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX2ZyZWUoaTYpOwogIHJldHVybjsKIH0gZWxzZSBpMyA9IDA7CiBkbyB7CiAgaTIgPSBIRUFQMzJbKEhFQVAzMltpNCA+PiAyXSB8IDApICsgKGkzIDw8IDIpID4+IDJdIHwgMDsKICBpZiAoaTIpIHsKICAgX2ZyZWUoaTIpOwogICBpMSA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgfQogIGkzID0gaTMgKyAxIHwgMDsKIH0gd2hpbGUgKGkzID4+PiAwIDwgaTEgPj4+IDApOwogaTYgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogX2ZyZWUoaTYpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVEMkV2KGk0KSB7CiBpNCA9IGk0IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMDsKIGkzID0gSEVBUDMyW2k0ICsgMTIgPj4gMl0gfCAwOwogaWYgKGkzKSB7CiAgaTIgPSBpMyArIDggfCAwOwogIGlmICgoSEVBUDMyW2kyID4+IDJdIHwgMCkgIT0gMCA/IChpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwLCBpNSA9IChIRUFQMzJbaTMgPj4gMl0gfCAwKSArIDQgfCAwLCBpNiA9IEhFQVAzMltpMSA+PiAyXSB8IDAsIEhFQVAzMltpNiArIDQgPj4gMl0gPSBIRUFQMzJbaTUgPj4gMl0sIEhFQVAzMltIRUFQMzJbaTUgPj4gMl0gPj4gMl0gPSBpNiwgSEVBUDMyW2kyID4+IDJdID0gMCwgKGkxIHwgMCkgIT0gKGkzIHwgMCkpIDogMCkgZG8gewogICBpNiA9IGkxOwogICBpMSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogICBfX1pkbFB2KGk2KTsKICB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTMgfCAwKSk7CiAgX19aZGxQdihpMyk7CiB9CiBpNSA9IGk0ICsgMTYgfCAwOwogaTEgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogaTQgPSBpNCArIDIwIHwgMDsKIGlmICghaTEpIHsKICBpNiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiAgX2ZyZWUoaTYpOwogIHJldHVybjsKIH0gZWxzZSBpMyA9IDA7CiBkbyB7CiAgaTIgPSBIRUFQMzJbKEhFQVAzMltpNCA+PiAyXSB8IDApICsgKGkzIDw8IDIpID4+IDJdIHwgMDsKICBpZiAoaTIpIHsKICAgX2ZyZWUoaTIpOwogICBpMSA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiAgfQogIGkzID0gaTMgKyAxIHwgMDsKIH0gd2hpbGUgKGkzID4+PiAwIDwgaTEgPj4+IDApOwogaTYgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogX2ZyZWUoaTYpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUQyRXYoaTQpIHsKIGk0ID0gaTQgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk1ID0gMCwgaTYgPSAwOwogaTMgPSBIRUFQMzJbaTQgKyAxNiA+PiAyXSB8IDA7CiBpZiAoaTMpIHsKICBpMiA9IGkzICsgOCB8IDA7CiAgaWYgKChIRUFQMzJbaTIgPj4gMl0gfCAwKSAhPSAwID8gKGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDAsIGk1ID0gKEhFQVAzMltpMyA+PiAyXSB8IDApICsgNCB8IDAsIGk2ID0gSEVBUDMyW2kxID4+IDJdIHwgMCwgSEVBUDMyW2k2ICsgNCA+PiAyXSA9IEhFQVAzMltpNSA+PiAyXSwgSEVBUDMyW0hFQVAzMltpNSA+PiAyXSA+PiAyXSA9IGk2LCBIRUFQMzJbaTIgPj4gMl0gPSAwLCAoaTEgfCAwKSAhPSAoaTMgfCAwKSkgOiAwKSBkbyB7CiAgIGk2ID0gaTE7CiAgIGkxID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiAgIF9fWmRsUHYoaTYpOwogIH0gd2hpbGUgKChpMSB8IDApICE9IChpMyB8IDApKTsKICBfX1pkbFB2KGkzKTsKIH0KIGk1ID0gaTQgKyAyMCB8IDA7CiBpMSA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiBpNCA9IGk0ICsgMjQgfCAwOwogaWYgKCFpMSkgewogIGk2ID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKICBfZnJlZShpNik7CiAgcmV0dXJuOwogfSBlbHNlIGkzID0gMDsKIGRvIHsKICBpMiA9IEhFQVAzMlsoSEVBUDMyW2k0ID4+IDJdIHwgMCkgKyAoaTMgPDwgMikgPj4gMl0gfCAwOwogIGlmIChpMikgewogICBfZnJlZShpMik7CiAgIGkxID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKICB9CiAgaTMgPSBpMyArIDEgfCAwOwogfSB3aGlsZSAoaTMgPj4+IDAgPCBpMSA+Pj4gMCk7CiBpNiA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBfZnJlZShpNik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckU5c2V0U2FtcGxlRVAxMG1heGlTYW1wbGUoaTYsIGk1KSB7CiBpNiA9IGk2IHwgMDsKIGk1ID0gaTUgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTcgPSAwLCBpOCA9IDA7CiBpMyA9IGk2ICsgMTIgfCAwOwogaTQgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogaWYgKGk0KSB7CiAgaTIgPSBpNCArIDggfCAwOwogIGlmICgoSEVBUDMyW2kyID4+IDJdIHwgMCkgIT0gMCA/IChpMSA9IEhFQVAzMltpNCArIDQgPj4gMl0gfCAwLCBpNyA9IChIRUFQMzJbaTQgPj4gMl0gfCAwKSArIDQgfCAwLCBpOCA9IEhFQVAzMltpMSA+PiAyXSB8IDAsIEhFQVAzMltpOCArIDQgPj4gMl0gPSBIRUFQMzJbaTcgPj4gMl0sIEhFQVAzMltIRUFQMzJbaTcgPj4gMl0gPj4gMl0gPSBpOCwgSEVBUDMyW2kyID4+IDJdID0gMCwgKGkxIHwgMCkgIT0gKGk0IHwgMCkpIDogMCkgZG8gewogICBpOCA9IGkxOwogICBpMSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogICBfX1pkbFB2KGk4KTsKICB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTQgfCAwKSk7CiAgX19aZGxQdihpNCk7CiAgSEVBUDMyW2kzID4+IDJdID0gMDsKIH0KIEhFQVAzMltpNiArIDggPj4gMl0gPSBpNTsKIGk4ID0gX19abndqKDE2KSB8IDA7CiBIRUFQMzJbaTggPj4gMl0gPSBpODsKIEhFQVAzMltpOCArIDQgPj4gMl0gPSBpODsKIEhFQVAzMltpOCArIDggPj4gMl0gPSAwOwogSEVBUDMyW2k4ICsgMTIgPj4gMl0gPSBpNTsKIEhFQVAzMltpMyA+PiAyXSA9IGk4OwogaTggPSBIRUFQMzJbaTUgKyAxMDggPj4gMl0gfCAwOwogSEVBUDMyW2k2ICsgMzYgPj4gMl0gPSBpODsKIEhFQVAzMltpNiArIDQwID4+IDJdID0gaTg7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzljYW5fY2F0Y2hFUEtOU18xNl9fc2hpbV90eXBlX2luZm9FUlB2KGk2LCBpMSwgaTQpIHsKIGk2ID0gaTYgfCAwOwogaTEgPSBpMSB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTUgPSAwLCBpNyA9IDA7CiBpNyA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDY0IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpNSA9IGk3OwogaWYgKChpNiB8IDApICE9IChpMSB8IDApKSBpZiAoKGkxIHwgMCkgIT0gMCA/IChpMyA9IF9fX2R5bmFtaWNfY2FzdChpMSwgMTU5NjgsIDE1OTg0LCAwKSB8IDAsIChpMyB8IDApICE9IDApIDogMCkgewogIGkxID0gaTU7CiAgaTIgPSBpMSArIDU2IHwgMDsKICBkbyB7CiAgIEhFQVAzMltpMSA+PiAyXSA9IDA7CiAgIGkxID0gaTEgKyA0IHwgMDsKICB9IHdoaWxlICgoaTEgfCAwKSA8IChpMiB8IDApKTsKICBIRUFQMzJbaTUgPj4gMl0gPSBpMzsKICBIRUFQMzJbaTUgKyA4ID4+IDJdID0gaTY7CiAgSEVBUDMyW2k1ICsgMTIgPj4gMl0gPSAtMTsKICBIRUFQMzJbaTUgKyA0OCA+PiAyXSA9IDE7CiAgRlVOQ1RJT05fVEFCTEVfdmlpaWlbSEVBUDMyWyhIRUFQMzJbaTMgPj4gMl0gfCAwKSArIDI4ID4+IDJdICYgNjNdKGkzLCBpNSwgSEVBUDMyW2k0ID4+IDJdIHwgMCwgMSk7CiAgaWYgKChIRUFQMzJbaTUgKyAyNCA+PiAyXSB8IDApID09IDEpIHsKICAgSEVBUDMyW2k0ID4+IDJdID0gSEVBUDMyW2k1ICsgMTYgPj4gMl07CiAgIGkxID0gMTsKICB9IGVsc2UgaTEgPSAwOwogfSBlbHNlIGkxID0gMDsgZWxzZSBpMSA9IDE7CiBTVEFDS1RPUCA9IGk3OwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTksxMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mbzI3aGFzX3VuYW1iaWd1b3VzX3B1YmxpY19iYXNlRVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUHZpKGkxLCBpNSwgaTQsIGk2KSB7CiBpMSA9IGkxIHwgMDsKIGk1ID0gaTUgfCAwOwogaTQgPSBpNCB8IDA7CiBpNiA9IGk2IHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIEwxIDogZG8gaWYgKChpMSB8IDApICE9IChIRUFQMzJbaTUgKyA4ID4+IDJdIHwgMCkpIHsKICBpMyA9IEhFQVAzMltpMSArIDEyID4+IDJdIHwgMDsKICBpMiA9IGkxICsgMTYgKyAoaTMgPDwgMykgfCAwOwogIF9fWk5LMTBfX2N4eGFiaXYxMjJfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvMjdoYXNfdW5hbWJpZ3VvdXNfcHVibGljX2Jhc2VFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQdmkoaTEgKyAxNiB8IDAsIGk1LCBpNCwgaTYpOwogIGlmICgoaTMgfCAwKSA+IDEpIHsKICAgaTMgPSBpNSArIDU0IHwgMDsKICAgaTEgPSBpMSArIDI0IHwgMDsKICAgZG8gewogICAgX19aTksxMF9fY3h4YWJpdjEyMl9fYmFzZV9jbGFzc190eXBlX2luZm8yN2hhc191bmFtYmlndW91c19wdWJsaWNfYmFzZUVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVB2aShpMSwgaTUsIGk0LCBpNik7CiAgICBpZiAoSEVBUDhbaTMgPj4gMF0gfCAwKSBicmVhayBMMTsKICAgIGkxID0gaTEgKyA4IHwgMDsKICAgfSB3aGlsZSAoaTEgPj4+IDAgPCBpMiA+Pj4gMCk7CiAgfQogfSBlbHNlIF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzI0cHJvY2Vzc19mb3VuZF9iYXNlX2NsYXNzRVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUHZpKDAsIGk1LCBpNCwgaTYpOyB3aGlsZSAoMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTEwbWF4aVNhbXBsZUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gX19abndqKDE2MCkgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIxMzQ0OwogaTMgPSBpMiArIDE2IHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSAwOwogaTQgPSBpMiArIDU2IHwgMDsKIEhFQVAzMltpNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTQgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpNCArIDggPj4gMl0gPSAwOwogSEVBUDMyW2k0ICsgMTIgPj4gMl0gPSAwOwogSEVBUEY2NFtpMiArIDg4ID4+IDNdID0gLjU7CiBIRUFQRjY0W2kyICsgOTYgPj4gM10gPSAuNTsKIEhFQVBGNjRbaTIgKyAxMDQgPj4gM10gPSAwLjA7CiBIRUFQMTZbaTIgKyAxMTYgPj4gMV0gPSAxOwogSEVBUDMyW2kyICsgMTIwID4+IDJdID0gSEVBUDMyWzUwODNdOwogaTQgPSBpMiArIDEzMiB8IDA7CiBIRUFQMzJbaTQgPj4gMl0gPSAwOwogSEVBUDMyW2k0ICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTQgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpNCArIDEyID4+IDJdID0gMDsKIEhFQVAzMltpNCArIDE2ID4+IDJdID0gMDsKIEhFQVAzMltpNCArIDIwID4+IDJdID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IGkzOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm8xNnNlYXJjaF9iZWxvd19kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZpYihpNiwgaTQsIGkzLCBpNSwgaTcpIHsKIGk2ID0gaTYgfCAwOwogaTQgPSBpNCB8IDA7CiBpMyA9IGkzIHwgMDsKIGk1ID0gaTUgfCAwOwogaTcgPSBpNyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDA7CiBkbyBpZiAoKGk2IHwgMCkgPT0gKEhFQVAzMltpNCArIDggPj4gMl0gfCAwKSkgewogIGlmICgoSEVBUDMyW2k0ICsgNCA+PiAyXSB8IDApID09IChpMyB8IDApID8gKGkyID0gaTQgKyAyOCB8IDAsIChIRUFQMzJbaTIgPj4gMl0gfCAwKSAhPSAxKSA6IDApIEhFQVAzMltpMiA+PiAyXSA9IGk1OwogfSBlbHNlIGlmICgoaTYgfCAwKSA9PSAoSEVBUDMyW2k0ID4+IDJdIHwgMCkpIHsKICBpZiAoKEhFQVAzMltpNCArIDE2ID4+IDJdIHwgMCkgIT0gKGkzIHwgMCkgPyAoaTEgPSBpNCArIDIwIHwgMCwgKEhFQVAzMltpMSA+PiAyXSB8IDApICE9IChpMyB8IDApKSA6IDApIHsKICAgSEVBUDMyW2k0ICsgMzIgPj4gMl0gPSBpNTsKICAgSEVBUDMyW2kxID4+IDJdID0gaTM7CiAgIGk3ID0gaTQgKyA0MCB8IDA7CiAgIEhFQVAzMltpNyA+PiAyXSA9IChIRUFQMzJbaTcgPj4gMl0gfCAwKSArIDE7CiAgIGlmICgoSEVBUDMyW2k0ICsgMzYgPj4gMl0gfCAwKSA9PSAxID8gKEhFQVAzMltpNCArIDI0ID4+IDJdIHwgMCkgPT0gMiA6IDApIEhFQVA4W2k0ICsgNTQgPj4gMF0gPSAxOwogICBIRUFQMzJbaTQgKyA0NCA+PiAyXSA9IDQ7CiAgIGJyZWFrOwogIH0KICBpZiAoKGk1IHwgMCkgPT0gMSkgSEVBUDMyW2k0ICsgMzIgPj4gMl0gPSAxOwogfSB3aGlsZSAoMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF93Y3J0b21iKGkxLCBpMywgaTIpIHsKIGkxID0gaTEgfCAwOwogaTMgPSBpMyB8IDA7CiBpMiA9IGkyIHwgMDsKIGRvIGlmIChpMSkgewogIGlmIChpMyA+Pj4gMCA8IDEyOCkgewogICBIRUFQOFtpMSA+PiAwXSA9IGkzOwogICBpMSA9IDE7CiAgIGJyZWFrOwogIH0KICBpZiAoaTMgPj4+IDAgPCAyMDQ4KSB7CiAgIEhFQVA4W2kxID4+IDBdID0gaTMgPj4+IDYgfCAxOTI7CiAgIEhFQVA4W2kxICsgMSA+PiAwXSA9IGkzICYgNjMgfCAxMjg7CiAgIGkxID0gMjsKICAgYnJlYWs7CiAgfQogIGlmIChpMyA+Pj4gMCA8IDU1Mjk2IHwgKGkzICYgLTgxOTIgfCAwKSA9PSA1NzM0NCkgewogICBIRUFQOFtpMSA+PiAwXSA9IGkzID4+PiAxMiB8IDIyNDsKICAgSEVBUDhbaTEgKyAxID4+IDBdID0gaTMgPj4+IDYgJiA2MyB8IDEyODsKICAgSEVBUDhbaTEgKyAyID4+IDBdID0gaTMgJiA2MyB8IDEyODsKICAgaTEgPSAzOwogICBicmVhazsKICB9CiAgaWYgKChpMyArIC02NTUzNiB8IDApID4+PiAwIDwgMTA0ODU3NikgewogICBIRUFQOFtpMSA+PiAwXSA9IGkzID4+PiAxOCB8IDI0MDsKICAgSEVBUDhbaTEgKyAxID4+IDBdID0gaTMgPj4+IDEyICYgNjMgfCAxMjg7CiAgIEhFQVA4W2kxICsgMiA+PiAwXSA9IGkzID4+PiA2ICYgNjMgfCAxMjg7CiAgIEhFQVA4W2kxICsgMyA+PiAwXSA9IGkzICYgNjMgfCAxMjg7CiAgIGkxID0gNDsKICAgYnJlYWs7CiAgfSBlbHNlIHsKICAgaTEgPSBfX19lcnJub19sb2NhdGlvbigpIHwgMDsKICAgSEVBUDMyW2kxID4+IDJdID0gODQ7CiAgIGkxID0gLTE7CiAgIGJyZWFrOwogIH0KIH0gZWxzZSBpMSA9IDE7IHdoaWxlICgwKTsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMW1heGlGbGFuZ2VyNmZsYW5nZUVkamRkZChpOCwgZDcsIGkyLCBkNiwgZDQsIGQ1KSB7CiBpOCA9IGk4IHwgMDsKIGQ3ID0gK2Q3OwogaTIgPSBpMiB8IDA7CiBkNiA9ICtkNjsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiB2YXIgaTEgPSAwLCBkMyA9IDAuMDsKIGkxID0gaTggKyA3MDU2NDggfCAwOwogZDMgPSArSEVBUEY2NFtpMSA+PiAzXTsKIGlmIChkMyA+PSAxLjApIHsKICBkMyA9IGQzICsgLTEuMDsKICBIRUFQRjY0W2kxID4+IDNdID0gZDM7CiB9CiBkNCA9IGQzICsgMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkNCk7CiBIRUFQRjY0W2kxID4+IDNdID0gZDQ7CiBkNCA9ICgoIShkNCA8PSAuNSkgPyAxLjAgLSBkNCA6IGQ0KSArIC0uMjUpICogNC4wOwogSEVBUEY2NFtpOCArIDcwNTY3MiA+PiAzXSA9IGQ0OwogZDMgPSArKGkyID4+PiAwKTsKIGkyID0gaTggKyA4IHwgMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGlmICgoaTEgfCAwKSA+PSAofn4oZDMgKyBkMyAqIChkNCAqIGQ1KSArIDEuMCkgfCAwKSkgewogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgaTEgPSAwOwogfQogaTEgPSBpOCArIDQwICsgKGkxIDw8IDMpIHwgMDsKIGk4ID0gaTggKyAzMiB8IDA7CiBIRUFQRjY0W2k4ID4+IDNdID0gK0hFQVBGNjRbaTEgPj4gM107CiBIRUFQRjY0W2kxID4+IDNdID0gZDcgKiBkNiAqIC41ICsgK0hFQVBGNjRbaTEgPj4gM10gKiBkNjsKIEhFQVAzMltpMiA+PiAyXSA9IChIRUFQMzJbaTIgPj4gMl0gfCAwKSArIDE7CiBkNiA9ICtIRUFQRjY0W2k4ID4+IDNdOwogcmV0dXJuICsoKGQ2ICogKDEuMCAtICtNYXRoX2FicygrZDYpKSArIGQ3KSAqIC41KTsKfQoKZnVuY3Rpb24gX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFOXNldFNhbXBsZUVQMTBtYXhpU2FtcGxlKGk2LCBpNSkgewogaTYgPSBpNiB8IDA7CiBpNSA9IGk1IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk3ID0gMCwgaTggPSAwOwogaTMgPSBpNiArIDEyIHwgMDsKIGk0ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKIGlmIChpNCkgewogIGkyID0gaTQgKyA4IHwgMDsKICBpZiAoKEhFQVAzMltpMiA+PiAyXSB8IDApICE9IDAgPyAoaTEgPSBIRUFQMzJbaTQgKyA0ID4+IDJdIHwgMCwgaTcgPSAoSEVBUDMyW2k0ID4+IDJdIHwgMCkgKyA0IHwgMCwgaTggPSBIRUFQMzJbaTEgPj4gMl0gfCAwLCBIRUFQMzJbaTggKyA0ID4+IDJdID0gSEVBUDMyW2k3ID4+IDJdLCBIRUFQMzJbSEVBUDMyW2k3ID4+IDJdID4+IDJdID0gaTgsIEhFQVAzMltpMiA+PiAyXSA9IDAsIChpMSB8IDApICE9IChpNCB8IDApKSA6IDApIGRvIHsKICAgaTggPSBpMTsKICAgaTEgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKICAgX19aZGxQdihpOCk7CiAgfSB3aGlsZSAoKGkxIHwgMCkgIT0gKGk0IHwgMCkpOwogIF9fWmRsUHYoaTQpOwogIEhFQVAzMltpMyA+PiAyXSA9IDA7CiB9CiBIRUFQMzJbaTYgKyA4ID4+IDJdID0gaTU7CiBpOCA9IF9fWm53aigxNikgfCAwOwogSEVBUDMyW2k4ID4+IDJdID0gaTg7CiBIRUFQMzJbaTggKyA0ID4+IDJdID0gaTg7CiBIRUFQMzJbaTggKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpOCArIDEyID4+IDJdID0gaTU7CiBIRUFQMzJbaTMgPj4gMl0gPSBpODsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckU5c2V0U2FtcGxlRVAxMG1heGlTYW1wbGUoaTYsIGk1KSB7CiBpNiA9IGk2IHwgMDsKIGk1ID0gaTUgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTcgPSAwLCBpOCA9IDA7CiBpMyA9IGk2ICsgMTYgfCAwOwogaTQgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogaWYgKGk0KSB7CiAgaTIgPSBpNCArIDggfCAwOwogIGlmICgoSEVBUDMyW2kyID4+IDJdIHwgMCkgIT0gMCA/IChpMSA9IEhFQVAzMltpNCArIDQgPj4gMl0gfCAwLCBpNyA9IChIRUFQMzJbaTQgPj4gMl0gfCAwKSArIDQgfCAwLCBpOCA9IEhFQVAzMltpMSA+PiAyXSB8IDAsIEhFQVAzMltpOCArIDQgPj4gMl0gPSBIRUFQMzJbaTcgPj4gMl0sIEhFQVAzMltIRUFQMzJbaTcgPj4gMl0gPj4gMl0gPSBpOCwgSEVBUDMyW2kyID4+IDJdID0gMCwgKGkxIHwgMCkgIT0gKGk0IHwgMCkpIDogMCkgZG8gewogICBpOCA9IGkxOwogICBpMSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogICBfX1pkbFB2KGk4KTsKICB9IHdoaWxlICgoaTEgfCAwKSAhPSAoaTQgfCAwKSk7CiAgX19aZGxQdihpNCk7CiAgSEVBUDMyW2kzID4+IDJdID0gMDsKIH0KIEhFQVAzMltpNiArIDEyID4+IDJdID0gaTU7CiBpOCA9IF9fWm53aigxNikgfCAwOwogSEVBUDMyW2k4ID4+IDJdID0gaTg7CiBIRUFQMzJbaTggKyA0ID4+IDJdID0gaTg7CiBIRUFQMzJbaTggKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpOCArIDEyID4+IDJdID0gaTU7CiBIRUFQMzJbaTMgPj4gMl0gPSBpODsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19fb3ZlcmZsb3coaTgsIGk2KSB7CiBpOCA9IGk4IHwgMDsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNyA9IDAsIGk5ID0gMDsKIGk5ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk3ID0gaTk7CiBpNSA9IGk2ICYgMjU1OwogSEVBUDhbaTcgPj4gMF0gPSBpNTsKIGkyID0gaTggKyAxNiB8IDA7CiBpMyA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpZiAoIWkzKSBpZiAoIShfX190b3dyaXRlKGk4KSB8IDApKSB7CiAgaTMgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogIGk0ID0gNDsKIH0gZWxzZSBpMSA9IC0xOyBlbHNlIGk0ID0gNDsKIGRvIGlmICgoaTQgfCAwKSA9PSA0KSB7CiAgaTIgPSBpOCArIDIwIHwgMDsKICBpNCA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgaWYgKGk0ID4+PiAwIDwgaTMgPj4+IDAgPyAoaTEgPSBpNiAmIDI1NSwgKGkxIHwgMCkgIT0gKEhFQVA4W2k4ICsgNzUgPj4gMF0gfCAwKSkgOiAwKSB7CiAgIEhFQVAzMltpMiA+PiAyXSA9IGk0ICsgMTsKICAgSEVBUDhbaTQgPj4gMF0gPSBpNTsKICAgYnJlYWs7CiAgfQogIGlmICgoRlVOQ1RJT05fVEFCTEVfaWlpaVtIRUFQMzJbaTggKyAzNiA+PiAyXSAmIDE1XShpOCwgaTcsIDEpIHwgMCkgPT0gMSkgaTEgPSBIRUFQVThbaTcgPj4gMF0gfCAwOyBlbHNlIGkxID0gLTE7CiB9IHdoaWxlICgwKTsKIFNUQUNLVE9QID0gaTk7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZOU18zdmFsRVJLTlN0M19fMTZ2ZWN0b3JJaU5TM185YWxsb2NhdG9ySWlFRUVFakVTMl9TOV9KakVFNmludm9rZUVQU0JfUFM3X2ooaTIsIGkzLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGkxID0gaTEgfCAwOwogaTEgPSBGVU5DVElPTl9UQUJMRV9paWlbSEVBUDMyW2kyID4+IDJdICYgMTI3XShpMywgaTEpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpMSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpMSB8IDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIH0gZWxzZSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpMSB8IDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSByZXR1cm4gaTEgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNUZ1bmN0aW9uSW52b2tlcklQRk5TXzN2YWxFUktOU3QzX18xNnZlY3RvcklmTlMzXzlhbGxvY2F0b3JJZkVFRUVqRVMyX1M5X0pqRUU2aW52b2tlRVBTQl9QUzdfaihpMiwgaTMsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTEgPSBpMSB8IDA7CiBpMSA9IEZVTkNUSU9OX1RBQkxFX2lpaVtIRUFQMzJbaTIgPj4gMl0gJiAxMjddKGkzLCBpMSkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODUsIGkxIHwgMCk7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGkxIHwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogfSBlbHNlIHsKICBfX1RIUkVXX18gPSAwOwogIGludm9rZV92aSgyODYsIGkxIHwgMCk7CiAgaTMgPSBfX1RIUkVXX187CiAgX19USFJFV19fID0gMDsKICBpZiAoaTMgJiAxKSB7CiAgIGkzID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMyk7CiAgfSBlbHNlIHJldHVybiBpMSB8IDA7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGTlNfM3ZhbEVSS05TdDNfXzE2dmVjdG9ySWROUzNfOWFsbG9jYXRvcklkRUVFRWpFUzJfUzlfSmpFRTZpbnZva2VFUFNCX1BTN19qKGkyLCBpMywgaTEpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpMSA9IGkxIHwgMDsKIGkxID0gRlVOQ1RJT05fVEFCTEVfaWlpW0hFQVAzMltpMiA+PiAyXSAmIDEyN10oaTMsIGkxKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NSwgaTEgfCAwKTsKIGkzID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMyAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTEgfCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiB9IGVsc2UgewogIF9fVEhSRVdfXyA9IDA7CiAgaW52b2tlX3ZpKDI4NiwgaTEgfCAwKTsKICBpMyA9IF9fVEhSRVdfXzsKICBfX1RIUkVXX18gPSAwOwogIGlmIChpMyAmIDEpIHsKICAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkzKTsKICB9IGVsc2UgcmV0dXJuIGkxIHwgMDsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZOU18zdmFsRVJLTlN0M19fMTZ2ZWN0b3JJY05TM185YWxsb2NhdG9ySWNFRUVFakVTMl9TOV9KakVFNmludm9rZUVQU0JfUFM3X2ooaTIsIGkzLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGkxID0gaTEgfCAwOwogaTEgPSBGVU5DVElPTl9UQUJMRV9paWlbSEVBUDMyW2kyID4+IDJdICYgMTI3XShpMywgaTEpIHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg1LCBpMSB8IDApOwogaTMgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkzICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpMSB8IDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIH0gZWxzZSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmkoMjg2LCBpMSB8IDApOwogIGkzID0gX19USFJFV19fOwogIF9fVEhSRVdfXyA9IDA7CiAgaWYgKGkzICYgMSkgewogICBpMyA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogIH0gZWxzZSByZXR1cm4gaTEgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlGaWx0ZXI4YmFuZHBhc3NFZGRkKGk3LCBkNSwgZDMsIGQ2KSB7CiBpNyA9IGk3IHwgMDsKIGQ1ID0gK2Q1OwogZDMgPSArZDM7CiBkNiA9ICtkNjsKIHZhciBkMSA9IDAuMCwgaTIgPSAwLCBkNCA9IDAuMCwgaTggPSAwOwogaTIgPSBpNyArIDIyNCB8IDA7CiBIRUFQRjY0W2kyID4+IDNdID0gZDM7CiBkNCA9ICsoSEVBUDMyWzUwODNdIHwgMCk7CiBkMSA9IGQ0ICogLjU7CiBpZiAoZDEgPCBkMykgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOyBlbHNlIGQxID0gZDM7CiBkNiA9ICEoZDYgPj0gMS4wKSA/IGQ2IDogLjk5OTk5OTsKIGQzID0gK01hdGhfY29zKCsoZDEgKiA2LjI4MzE4NTMwNzE3OTU4NiAvIGQ0KSk7CiBIRUFQRjY0W2k3ICsgMjA4ID4+IDNdID0gZDM7CiBkMSA9ICgxLjAgLSBkNikgKiArTWF0aF9zcXJ0KCsoZDYgKiAoZDYgLSBkMyAqIGQzICogNC4wICsgMi4wKSArIDEuMCkpOwogSEVBUEY2NFtpNyArIDI0ID4+IDNdID0gZDE7CiBkMyA9IGQ2ICogKGQzICogMi4wKTsKIEhFQVBGNjRbaTcgKyAzMiA+PiAzXSA9IGQzOwogZDYgPSBkNiAqIGQ2OwogSEVBUEY2NFtpNyArIDQwID4+IDNdID0gZDY7CiBpMiA9IGk3ICsgMTEyIHwgMDsKIGQ0ID0gK0hFQVBGNjRbaTIgPj4gM107CiBpOCA9IGk3ICsgMTIwIHwgMDsKIGQ2ID0gZDEgKiBkNSArIGQzICogZDQgKyBkNiAqICtIRUFQRjY0W2k4ID4+IDNdOwogSEVBUEY2NFtpNyArIDE2ID4+IDNdID0gZDY7CiBIRUFQRjY0W2k4ID4+IDNdID0gZDQ7CiBIRUFQRjY0W2kyID4+IDNdID0gZDY7CiByZXR1cm4gK2Q2Owp9CgpmdW5jdGlvbiBfcGFkKGk2LCBpMiwgaTUsIGk0LCBpMSkgewogaTYgPSBpNiB8IDA7CiBpMiA9IGkyIHwgMDsKIGk1ID0gaTUgfCAwOwogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIHZhciBpMyA9IDAsIGk3ID0gMCwgaTggPSAwOwogaTggPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAyNTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk3ID0gaTg7CiBkbyBpZiAoKGk1IHwgMCkgPiAoaTQgfCAwKSAmIChpMSAmIDczNzI4IHwgMCkgPT0gMCkgewogIGkxID0gaTUgLSBpNCB8IDA7CiAgX21lbXNldChpNyB8IDAsIGkyIHwgMCwgKGkxID4+PiAwID4gMjU2ID8gMjU2IDogaTEpIHwgMCkgfCAwOwogIGkyID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKICBpMyA9IChpMiAmIDMyIHwgMCkgPT0gMDsKICBpZiAoaTEgPj4+IDAgPiAyNTUpIHsKICAgaTQgPSBpNSAtIGk0IHwgMDsKICAgZG8gewogICAgaWYgKGkzKSB7CiAgICAgX19fZndyaXRleChpNywgMjU2LCBpNikgfCAwOwogICAgIGkyID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKICAgIH0KICAgIGkxID0gaTEgKyAtMjU2IHwgMDsKICAgIGkzID0gKGkyICYgMzIgfCAwKSA9PSAwOwogICB9IHdoaWxlIChpMSA+Pj4gMCA+IDI1NSk7CiAgIGlmIChpMykgaTEgPSBpNCAmIDI1NTsgZWxzZSBicmVhazsKICB9IGVsc2UgaWYgKCFpMykgYnJlYWs7CiAgX19fZndyaXRleChpNywgaTEsIGk2KSB8IDA7CiB9IHdoaWxlICgwKTsKIFNUQUNLVE9QID0gaTg7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlGaWx0ZXI1aGlyZXNFZGRkKGk2LCBkNCwgZDEsIGQ1KSB7CiBpNiA9IGk2IHwgMDsKIGQ0ID0gK2Q0OwogZDEgPSArZDE7CiBkNSA9ICtkNTsKIHZhciBpMiA9IDAsIGQzID0gMC4wLCBpNyA9IDAsIGQ4ID0gMC4wOwogaTIgPSBpNiArIDIyNCB8IDA7CiBkMSA9IGQxIDwgMTAuMCA/IDEwLjAgOiBkMTsKIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKIGQzID0gKyhIRUFQMzJbNTA4M10gfCAwKTsKIGlmIChkMSA+IGQzKSB7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQzOwogIGQxID0gZDM7CiB9CiBkOCA9ICtNYXRoX2NvcygrKGQxICogNi4yODMxODUzMDcxNzk1ODYgLyBkMykpOwogSEVBUEY2NFtpNiArIDIwOCA+PiAzXSA9IGQ4OwogZDMgPSAyLjAgLSBkOCAqIDIuMDsKIEhFQVBGNjRbaTYgKyAyMTYgPj4gM10gPSBkMzsKIGQ4ID0gZDggKyAtMS4wOwogZDEgPSAoZDUgPCAxLjAgPyAxLjAgOiBkNSkgKiBkODsKIGQxID0gKGQxICsgK01hdGhfc3FydCgrLStNYXRoX3BvdygrZDgsIDMuMCkpICogMS40MTQyMTM1NjIzNzMwOTUxKSAvIGQxOwogaTIgPSBpNiArIDE5MiB8IDA7CiBpNyA9IGk2ICsgMjAwIHwgMDsKIGQ1ID0gK0hFQVBGNjRbaTcgPj4gM107CiBkMyA9ICtIRUFQRjY0W2kyID4+IDNdICsgZDMgKiAoZDQgLSBkNSk7CiBkNSA9IGQ1ICsgZDM7CiBIRUFQRjY0W2k3ID4+IDNdID0gZDU7CiBIRUFQRjY0W2kyID4+IDNdID0gZDEgKiBkMzsKIGQ1ID0gZDQgLSBkNTsKIEhFQVBGNjRbaTYgKyAxNiA+PiAzXSA9IGQ1OwogcmV0dXJuICtkNTsKfQoKZnVuY3Rpb24gX2ZwdXRjKGk1LCBpNikgewogaTUgPSBpNSB8IDA7CiBpNiA9IGk2IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk3ID0gMDsKIGlmICgoSEVBUDMyW2k2ICsgNzYgPj4gMl0gfCAwKSA+PSAwID8gKF9fX2xvY2tmaWxlKGk2KSB8IDApICE9IDAgOiAwKSB7CiAgaWYgKChIRUFQOFtpNiArIDc1ID4+IDBdIHwgMCkgIT0gKGk1IHwgMCkgPyAoaTIgPSBpNiArIDIwIHwgMCwgaTMgPSBIRUFQMzJbaTIgPj4gMl0gfCAwLCBpMyA+Pj4gMCA8IChIRUFQMzJbaTYgKyAxNiA+PiAyXSB8IDApID4+PiAwKSA6IDApIHsKICAgSEVBUDMyW2kyID4+IDJdID0gaTMgKyAxOwogICBIRUFQOFtpMyA+PiAwXSA9IGk1OwogICBpMSA9IGk1ICYgMjU1OwogIH0gZWxzZSBpMSA9IF9fX292ZXJmbG93KGk2LCBpNSkgfCAwOwogIF9fX3VubG9ja2ZpbGUoaTYpOwogfSBlbHNlIGk3ID0gMzsKIGRvIGlmICgoaTcgfCAwKSA9PSAzKSB7CiAgaWYgKChIRUFQOFtpNiArIDc1ID4+IDBdIHwgMCkgIT0gKGk1IHwgMCkgPyAoaTQgPSBpNiArIDIwIHwgMCwgaTEgPSBIRUFQMzJbaTQgPj4gMl0gfCAwLCBpMSA+Pj4gMCA8IChIRUFQMzJbaTYgKyAxNiA+PiAyXSB8IDApID4+PiAwKSA6IDApIHsKICAgSEVBUDMyW2k0ID4+IDJdID0gaTEgKyAxOwogICBIRUFQOFtpMSA+PiAwXSA9IGk1OwogICBpMSA9IGk1ICYgMjU1OwogICBicmVhazsKICB9CiAgaTEgPSBfX19vdmVyZmxvdyhpNiwgaTUpIHwgMDsKIH0gd2hpbGUgKDApOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwbWF4aUZpbHRlcjVsb3Jlc0VkZGQoaTYsIGQ0LCBkMSwgZDUpIHsKIGk2ID0gaTYgfCAwOwogZDQgPSArZDQ7CiBkMSA9ICtkMTsKIGQ1ID0gK2Q1OwogdmFyIGkyID0gMCwgZDMgPSAwLjAsIGk3ID0gMCwgZDggPSAwLjA7CiBpMiA9IGk2ICsgMjI0IHwgMDsKIGQxID0gZDEgPCAxMC4wID8gMTAuMCA6IGQxOwogSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogZDMgPSArKEhFQVAzMls1MDgzXSB8IDApOwogaWYgKGQxID4gZDMpIHsKICBIRUFQRjY0W2kyID4+IDNdID0gZDM7CiAgZDEgPSBkMzsKIH0KIGQ4ID0gK01hdGhfY29zKCsoZDEgKiA2LjI4MzE4NTMwNzE3OTU4NiAvIGQzKSk7CiBIRUFQRjY0W2k2ICsgMjA4ID4+IDNdID0gZDg7CiBkMSA9IDIuMCAtIGQ4ICogMi4wOwogSEVBUEY2NFtpNiArIDIxNiA+PiAzXSA9IGQxOwogZDggPSBkOCArIC0xLjA7CiBkMyA9IChkNSA8IDEuMCA/IDEuMCA6IGQ1KSAqIGQ4OwogZDMgPSAoZDMgKyArTWF0aF9zcXJ0KCstK01hdGhfcG93KCtkOCwgMy4wKSkgKiAxLjQxNDIxMzU2MjM3MzA5NTEpIC8gZDM7CiBpMiA9IGk2ICsgMTkyIHwgMDsKIGk3ID0gaTYgKyAyMDAgfCAwOwogZDUgPSArSEVBUEY2NFtpNyA+PiAzXTsKIGQ0ID0gK0hFQVBGNjRbaTIgPj4gM10gKyBkMSAqIChkNCAtIGQ1KTsKIGQ1ID0gZDUgKyBkNDsKIEhFQVBGNjRbaTcgPj4gM10gPSBkNTsKIEhFQVBGNjRbaTIgPj4gM10gPSBkMyAqIGQ0OwogSEVBUEY2NFtpNiArIDE2ID4+IDNdID0gZDU7CiByZXR1cm4gK2Q1Owp9CgpmdW5jdGlvbiBfZmZsdXNoKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDAsIGkzID0gMDsKIGRvIGlmIChpMikgewogIGlmICgoSEVBUDMyW2kyICsgNzYgPj4gMl0gfCAwKSA8PSAtMSkgewogICBpMSA9IF9fX2ZmbHVzaF91bmxvY2tlZChpMikgfCAwOwogICBicmVhazsKICB9CiAgaTMgPSAoX19fbG9ja2ZpbGUoaTIpIHwgMCkgPT0gMDsKICBpMSA9IF9fX2ZmbHVzaF91bmxvY2tlZChpMikgfCAwOwogIGlmICghaTMpIF9fX3VubG9ja2ZpbGUoaTIpOwogfSBlbHNlIHsKICBpZiAoIShIRUFQMzJbNTk0OF0gfCAwKSkgaTEgPSAwOyBlbHNlIGkxID0gX2ZmbHVzaChIRUFQMzJbNTk0OF0gfCAwKSB8IDA7CiAgX19fbG9jaygyMzc2OCk7CiAgaTIgPSBIRUFQMzJbNTk0MV0gfCAwOwogIGlmIChpMikgZG8gewogICBpZiAoKEhFQVAzMltpMiArIDc2ID4+IDJdIHwgMCkgPiAtMSkgaTMgPSBfX19sb2NrZmlsZShpMikgfCAwOyBlbHNlIGkzID0gMDsKICAgaWYgKChIRUFQMzJbaTIgKyAyMCA+PiAyXSB8IDApID4+PiAwID4gKEhFQVAzMltpMiArIDI4ID4+IDJdIHwgMCkgPj4+IDApIGkxID0gX19fZmZsdXNoX3VubG9ja2VkKGkyKSB8IDAgfCBpMTsKICAgaWYgKGkzKSBfX191bmxvY2tmaWxlKGkyKTsKICAgaTIgPSBIRUFQMzJbaTIgKyA1NiA+PiAyXSB8IDA7CiAgfSB3aGlsZSAoKGkyIHwgMCkgIT0gMCk7CiAgX19fdW5sb2NrKDIzNzY4KTsKIH0gd2hpbGUgKDApOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19fcmVtZGkzKGkxLCBpMiwgaTMsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpNSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaTggPSBpNSB8IDA7CiBpNyA9IGkyID4+IDMxIHwgKChpMiB8IDApIDwgMCA/IC0xIDogMCkgPDwgMTsKIGk2ID0gKChpMiB8IDApIDwgMCA/IC0xIDogMCkgPj4gMzEgfCAoKGkyIHwgMCkgPCAwID8gLTEgOiAwKSA8PCAxOwogaTEwID0gaTQgPj4gMzEgfCAoKGk0IHwgMCkgPCAwID8gLTEgOiAwKSA8PCAxOwogaTkgPSAoKGk0IHwgMCkgPCAwID8gLTEgOiAwKSA+PiAzMSB8ICgoaTQgfCAwKSA8IDAgPyAtMSA6IDApIDw8IDE7CiBpMSA9IF9pNjRTdWJ0cmFjdChpNyBeIGkxLCBpNiBeIGkyLCBpNywgaTYpIHwgMDsKIGkyID0gdGVtcFJldDA7CiBfX191ZGl2bW9kZGk0KGkxLCBpMiwgX2k2NFN1YnRyYWN0KGkxMCBeIGkzLCBpOSBeIGk0LCBpMTAsIGk5KSB8IDAsIHRlbXBSZXQwLCBpOCkgfCAwOwogaTQgPSBfaTY0U3VidHJhY3QoSEVBUDMyW2k4ID4+IDJdIF4gaTcsIEhFQVAzMltpOCArIDQgPj4gMl0gXiBpNiwgaTcsIGk2KSB8IDA7CiBpMyA9IHRlbXBSZXQwOwogU1RBQ0tUT1AgPSBpNTsKIHJldHVybiAodGVtcFJldDAgPSBpMywgaTQpIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVKRUU2aW52b2tlRVBGUzdfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVKRUU2aW52b2tlRVBGUzdfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVFRUpFRTZpbnZva2VFUEZTN192RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBGVU5DVElPTl9UQUJMRV92aVtpMSAmIDUxMV0oaTMpOwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCA4KSB8IDA7CiBpNCA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTMgKyA0ID4+IDJdOwogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogaWYgKCFpMSkgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJFRUpFRTZpbnZva2VFUEZTNV92RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBGVU5DVElPTl9UQUJMRV92aVtpMSAmIDUxMV0oaTMpOwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCA4KSB8IDA7CiBpNCA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTMgKyA0ID4+IDJdOwogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogaWYgKCFpMSkgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpTUZDQ0FuYWx5c2VySWRFRUVKRUU2aW52b2tlRVBGUzZfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9zY2FsYm4oZDEsIGkzKSB7CiBkMSA9ICtkMTsKIGkzID0gaTMgfCAwOwogdmFyIGkyID0gMDsKIGlmICgoaTMgfCAwKSA+IDEwMjMpIHsKICBkMSA9IGQxICogODk4ODQ2NTY3NDMxMTU3OTUzODY0NjUyNS4wZTI4MzsKICBpMiA9IGkzICsgLTEwMjMgfCAwOwogIGlmICgoaTIgfCAwKSA+IDEwMjMpIHsKICAgaTIgPSBpMyArIC0yMDQ2IHwgMDsKICAgaTIgPSAoaTIgfCAwKSA+IDEwMjMgPyAxMDIzIDogaTI7CiAgIGQxID0gZDEgKiA4OTg4NDY1Njc0MzExNTc5NTM4NjQ2NTI1LjBlMjgzOwogIH0KIH0gZWxzZSBpZiAoKGkzIHwgMCkgPCAtMTAyMikgewogIGQxID0gZDEgKiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsKICBpMiA9IGkzICsgMTAyMiB8IDA7CiAgaWYgKChpMiB8IDApIDwgLTEwMjIpIHsKICAgaTIgPSBpMyArIDIwNDQgfCAwOwogICBpMiA9IChpMiB8IDApIDwgLTEwMjIgPyAtMTAyMiA6IGkyOwogICBkMSA9IGQxICogMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7CiAgfQogfSBlbHNlIGkyID0gaTM7CiBpMiA9IF9iaXRzaGlmdDY0U2hsKGkyICsgMTAyMyB8IDAsIDAsIDUyKSB8IDA7CiBpMyA9IHRlbXBSZXQwOwogSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gPSBpMjsKIEhFQVAzMlt0ZW1wRG91YmxlUHRyICsgNCA+PiAyXSA9IGkzOwogcmV0dXJuICsoZDEgKiArSEVBUEY2NFt0ZW1wRG91YmxlUHRyID4+IDNdKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUpFRTZpbnZva2VFUEZTNV92RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBGVU5DVElPTl9UQUJMRV92aVtpMSAmIDUxMV0oaTMpOwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCA4KSB8IDA7CiBpNCA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTMgKyA0ID4+IDJdOwogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogaWYgKCFpMSkgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTNtYXhpRENCbG9ja2VyRUVKRUU2aW52b2tlRVBGUzVfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUxhZ0V4cElkRUVFSkVFNmludm9rZUVQRlM2X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxMm1heGlFbnZlbG9wZUVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVKRUU2aW52b2tlRVBGUzVfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aVNhbXBsZUVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlGaWx0ZXJFRUpFRTZpbnZva2VFUEZTNV92RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBGVU5DVElPTl9UQUJMRV92aVtpMSAmIDUxMV0oaTMpOwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCA4KSB8IDA7CiBpNCA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTMgKyA0ID4+IDJdOwogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogaWYgKCFpMSkgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpQ2hvcnVzRUVKRUU2aW52b2tlRVBGUzVfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUpFRTZpbnZva2VFUEZTNV92RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBGVU5DVElPTl9UQUJMRV92aVtpMSAmIDUxMV0oaTMpOwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCA4KSB8IDA7CiBpNCA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTMgKyA0ID4+IDJdOwogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogaWYgKCFpMSkgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJOW1heGlDbG9ja0VFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUtpY2tFRUpFRTZpbnZva2VFUEZTNV92RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBGVU5DVElPTl9UQUJMRV92aVtpMSAmIDUxMV0oaTMpOwogX19USFJFV19fID0gMDsKIGkxID0gaW52b2tlX2lpKDkxLCA4KSB8IDA7CiBpNCA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgSEVBUDMyW2kxID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSArIDQgPj4gMl0gPSBIRUFQMzJbaTMgKyA0ID4+IDJdOwogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuIGkxIHwgMDsKIH0KIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goKSB8IDA7CiBpMSA9IEhFQVAzMltpMyArIDQgPj4gMl0gfCAwOwogaWYgKCFpMSkgX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19fcmVzdW1lRXhjZXB0aW9uKGkyIHwgMCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlJRkZURUVKRUU2aW52b2tlRVBGUzVfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMiA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGkyOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiA1MTFdKGkzKTsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9paSg5MSwgOCkgfCAwOwogaTQgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKCEoaTQgJiAxKSkgewogIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKICBIRUFQMzJbaTEgKyA0ID4+IDJdID0gSEVBUDMyW2kzICsgNCA+PiAyXTsKICBTVEFDS1RPUCA9IGkyOwogIHJldHVybiBpMSB8IDA7CiB9CiBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKCkgfCAwOwogaTEgPSBIRUFQMzJbaTMgKyA0ID4+IDJdIHwgMDsKIGlmICghaTEpIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fX3Jlc3VtZUV4Y2VwdGlvbihpMiB8IDApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSGF0c0VFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aVNWRkVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU9zY0VFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1hcEVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUZGVEVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUR5bkVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3Y29udmVydEVFSkVFNmludm9rZUVQRlM1X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTMgPSBpMjsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kxICYgNTExXShpMyk7CiBfX1RIUkVXX18gPSAwOwogaTEgPSBpbnZva2VfaWkoOTEsIDgpIHwgMDsKIGk0ID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmICghKGk0ICYgMSkpIHsKICBIRUFQMzJbaTEgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxICsgNCA+PiAyXSA9IEhFQVAzMltpMyArIDQgPj4gMl07CiAgU1RBQ0tUT1AgPSBpMjsKICByZXR1cm4gaTEgfCAwOwogfQogaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgpIHwgMDsKIGkxID0gSEVBUDMyW2kzICsgNCA+PiAyXSB8IDA7CiBpZiAoIWkxKSBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX19yZXN1bWVFeGNlcHRpb24oaTIgfCAwKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfZnJleHAoZDEsIGk1KSB7CiBkMSA9ICtkMTsKIGk1ID0gaTUgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBIRUFQRjY0W3RlbXBEb3VibGVQdHIgPj4gM10gPSBkMTsKIGkyID0gSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gfCAwOwogaTMgPSBIRUFQMzJbdGVtcERvdWJsZVB0ciArIDQgPj4gMl0gfCAwOwogaTQgPSBfYml0c2hpZnQ2NExzaHIoaTIgfCAwLCBpMyB8IDAsIDUyKSB8IDA7CiBpNCA9IGk0ICYgMjA0NzsKIHN3aXRjaCAoaTQgfCAwKSB7CiBjYXNlIDA6CiAgewogICBpZiAoZDEgIT0gMC4wKSB7CiAgICBkMSA9ICtfZnJleHAoZDEgKiAxODQ0Njc0NDA3MzcwOTU1MTYxNi4wLCBpNSk7CiAgICBpMiA9IChIRUFQMzJbaTUgPj4gMl0gfCAwKSArIC02NCB8IDA7CiAgIH0gZWxzZSBpMiA9IDA7CiAgIEhFQVAzMltpNSA+PiAyXSA9IGkyOwogICBicmVhazsKICB9CiBjYXNlIDIwNDc6CiAgYnJlYWs7CiBkZWZhdWx0OgogIHsKICAgSEVBUDMyW2k1ID4+IDJdID0gaTQgKyAtMTAyMjsKICAgSEVBUDMyW3RlbXBEb3VibGVQdHIgPj4gMl0gPSBpMjsKICAgSEVBUDMyW3RlbXBEb3VibGVQdHIgKyA0ID4+IDJdID0gaTMgJiAtMjE0NjQzNTA3MyB8IDEwNzE2NDQ2NzI7CiAgIGQxID0gK0hFQVBGNjRbdGVtcERvdWJsZVB0ciA+PiAzXTsKICB9CiB9CiByZXR1cm4gK2QxOwp9CgpmdW5jdGlvbiBfX1pTdDExX190ZXJtaW5hdGVQRnZ2RShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogX19USFJFV19fID0gMDsKIGludm9rZV92KGkxIHwgMCk7CiBpMSA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoIShpMSAmIDEpKSB7CiAgX19USFJFV19fID0gMDsKICBpbnZva2VfdmlpKDY5LCAzOTcyNiwgaTIgfCAwKTsKICBfX1RIUkVXX18gPSAwOwogfQogaTEgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiBfX19jeGFfYmVnaW5fY2F0Y2goaTEgfCAwKSB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2OSwgMzk3NjYsIGkyICsgOCB8IDApOwogX19USFJFV19fID0gMDsKIGkxID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92KDMpOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMSk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTEwbWF4aUNob3J1c0pFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDA7CiBpMiA9IF9fWm53aigxNDExNTg0KSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kyID4+IDJdID0gMjIxMjg7CiBfbWVtc2V0KGkyICsgNTYgfCAwLCAwLCA3MDU2MDApIHwgMDsKIF9tZW1zZXQoaTIgKyA3MDU2OTYgfCAwLCAwLCA3MDU2MDApIHwgMDsKIEhFQVBGNjRbaTIgKyAxNDExMzA0ID4+IDNdID0gMC4wOwogaTMgPSBpMiArIDE0MTE1MzYgfCAwOwogSEVBUDMyW2kzID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyAxMiA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyAxNiA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyAyMCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyAyNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyAyOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSBpMiArIDE2OwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pONDdFbXNjcmlwdGVuQmluZGluZ0luaXRpYWxpemVyX215X21vZHVsZV9tYXhpTUZDQ0MyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3MoMTU0MTYsIDE1NDI0LCAxNTQ0MCwgMCwgMjYxMjksIDEwOSwgMjYxMzIsIDAsIDI2MTMyLCAwLCAzNTQ4NiwgMjYxMzQsIDI5Nyk7CiBfX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIoMTU0NTYsIDE1NDE2LCAzNTQ5NSwgMiwgMjYxMjksIDExMCwgMjcwNDQsIDMwLCAyNjE0OCwgNzMsIDI2MTM0LCAyOTgpOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IoMTU0MTYsIDEsIDIzMDQ0LCAyNjEyOSwgMTExLCAyOTkpOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMTsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTU0MTYsIDM1NTE2LCA4LCAyMzA0OCwgMzU1MjIsIDEsIGkxIHwgMCwgMCk7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAxOTsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24oMTU0MTYsIDM1NTMyLCA0LCAyMzA4MCwgMjYxNDIsIDMzLCBpMSB8IDAsIDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlREMkV2KGk1KSB7CiBpNSA9IGk1IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpMSA9IEhFQVAzMltpNSArIDY0ID4+IDJdIHwgMDsKIGlmIChpMSkgewogIGkyID0gSEVBUDMyW2kxICsgOCA+PiAyXSB8IDA7CiAgaWYgKGkyKSBfX1pkYVB2KGkyKTsKICBfX1pkbFB2KGkxKTsKIH0KIGkxID0gSEVBUDMyW2k1ICsgNDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pkYVB2KGkxKTsKIGkxID0gSEVBUDMyW2k1ICsgMTYgPj4gMl0gfCAwOwogaTIgPSBpMTsKIGlmIChpMSkgewogIGkzID0gaTUgKyAyMCB8IDA7CiAgaTQgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogIGlmICgoaTQgfCAwKSAhPSAoaTEgfCAwKSkgSEVBUDMyW2kzID4+IDJdID0gaTQgKyAofigoaTQgKyAtNCAtIGkyIHwgMCkgPj4+IDIpIDw8IDIpOwogIF9fWmRsUHYoaTEpOwogfQogaTMgPSBIRUFQMzJbaTUgKyA0ID4+IDJdIHwgMDsKIGlmICghaTMpIHJldHVybjsKIGkxID0gaTUgKyA4IHwgMDsKIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGlmICgoaTIgfCAwKSAhPSAoaTMgfCAwKSkgSEVBUDMyW2kxID4+IDJdID0gaTIgKyAofigoaTIgKyAtNCAtIGkzIHwgMCkgPj4+IDIpIDw8IDIpOwogX19aZGxQdihpMyk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fX2ZmbHVzaF91bmxvY2tlZChpNykgewogaTcgPSBpNyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMDsKIGkxID0gaTcgKyAyMCB8IDA7CiBpNSA9IGk3ICsgMjggfCAwOwogaWYgKChIRUFQMzJbaTEgPj4gMl0gfCAwKSA+Pj4gMCA+IChIRUFQMzJbaTUgPj4gMl0gfCAwKSA+Pj4gMCA/IChGVU5DVElPTl9UQUJMRV9paWlpW0hFQVAzMltpNyArIDM2ID4+IDJdICYgMTVdKGk3LCAwLCAwKSB8IDAsIChIRUFQMzJbaTEgPj4gMl0gfCAwKSA9PSAwKSA6IDApIGkxID0gLTE7IGVsc2UgewogIGk2ID0gaTcgKyA0IHwgMDsKICBpMiA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiAgaTMgPSBpNyArIDggfCAwOwogIGk0ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICBpZiAoaTIgPj4+IDAgPCBpNCA+Pj4gMCkgRlVOQ1RJT05fVEFCTEVfaWlpaVtIRUFQMzJbaTcgKyA0MCA+PiAyXSAmIDE1XShpNywgaTIgLSBpNCB8IDAsIDEpIHwgMDsKICBIRUFQMzJbaTcgKyAxNiA+PiAyXSA9IDA7CiAgSEVBUDMyW2k1ID4+IDJdID0gMDsKICBIRUFQMzJbaTEgPj4gMl0gPSAwOwogIEhFQVAzMltpMyA+PiAyXSA9IDA7CiAgSEVBUDMyW2k2ID4+IDJdID0gMDsKICBpMSA9IDA7CiB9CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pON21heGlPc2M4c2luZWJ1ZjRFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiB2YXIgZDMgPSAwLjAsIGQ0ID0gMC4wLCBkNSA9IDAuMCwgZDYgPSAwLjAsIGk3ID0gMDsKIGk3ID0gaTIgKyA4IHwgMDsKIGQxID0gNTEyLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvIGQxKSArICtIRUFQRjY0W2k3ID4+IDNdOwogZDEgPSAhKGQxID49IDUxMS4wKSA/IGQxIDogZDEgKyAtNTEyLjA7CiBIRUFQRjY0W2k3ID4+IDNdID0gZDE7CiBkNiA9IGQxIC0gK01hdGhfZmxvb3IoK2QxKTsKIGk3ID0gfn5kMTsKIGQxID0gK0hFQVBGNjRbKGQxID09IDAuMCA/IDQxMDQgOiA4ICsgKGk3ICsgLTEgPDwgMykgfCAwKSA+PiAzXTsKIGQ1ID0gK0hFQVBGNjRbOCArIChpNyA8PCAzKSA+PiAzXTsKIGQ0ID0gK0hFQVBGNjRbOCArIChpNyArIDEgPDwgMykgPj4gM107CiBkMyA9ICtIRUFQRjY0WzggKyAoaTcgKyAyIDw8IDMpID4+IDNdOwogZDEgPSBkNSArIGQ2ICogKChkNCAtIGQxKSAqIC41ICsgZDYgKiAoZDEgLSBkNSAqIDIuNSArIGQ0ICogMi4wIC0gZDMgKiAuNSArIGQ2ICogKChkNSAtIGQ0KSAqIDEuNSArIChkMyAtIGQxKSAqIC41KSkpOwogSEVBUEY2NFtpMiArIDMyID4+IDNdID0gZDE7CiByZXR1cm4gK2QxOwp9CgpmdW5jdGlvbiBfX1pON21heGlTVkY0cGxheUVkZGRkZChpNSwgZDYsIGQzLCBkMSwgZDIsIGQ0KSB7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDMgPSArZDM7CiBkMSA9ICtkMTsKIGQyID0gK2QyOwogZDQgPSArZDQ7CiB2YXIgZDcgPSAwLjAsIGQ4ID0gMC4wLCBpOSA9IDAsIGQxMCA9IDAuMCwgZDExID0gMC4wLCBpMTIgPSAwOwogaTEyID0gaTUgKyA4IHwgMDsKIGQ3ID0gK0hFQVBGNjRbaTEyID4+IDNdOwogaTkgPSBpNSArIDE2IHwgMDsKIGQxMSA9ICtIRUFQRjY0W2k5ID4+IDNdOwogZDEwID0gK0hFQVBGNjRbaTUgPj4gM10gKyBkNiAtIGQxMSAqIDIuMDsKIGQ4ID0gZDcgKyAoK0hFQVBGNjRbaTUgKyA1NiA+PiAzXSAqIGQxMCAtIGQ3ICogK0hFQVBGNjRbaTUgKyA2NCA+PiAzXSk7CiBIRUFQRjY0W2kxMiA+PiAzXSA9IGQ4OwogZDcgPSBkMTEgKyAoZDEwICogK0hFQVBGNjRbaTUgKyA3MiA+PiAzXSArIGQ3ICogK0hFQVBGNjRbaTUgKyA4MCA+PiAzXSk7CiBIRUFQRjY0W2k5ID4+IDNdID0gZDc7CiBIRUFQRjY0W2k1ID4+IDNdID0gZDY7CiBkNiA9IGQ2IC0gZDggKiArSEVBUEY2NFtpNSArIDQwID4+IDNdOwogcmV0dXJuICsoZDYgKiBkNCArIChkNyAqIGQzICsgZDggKiBkMSArIChkNiAtIGQ3KSAqIGQyKSk7Cn0KCmZ1bmN0aW9uIF9tZW1jcHkoaTEsIGk0LCBpMikgewogaTEgPSBpMSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMDsKIGlmICgoaTIgfCAwKSA+PSA0MDk2KSByZXR1cm4gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhpMSB8IDAsIGk0IHwgMCwgaTIgfCAwKSB8IDA7CiBpMyA9IGkxIHwgMDsKIGlmICgoaTEgJiAzKSA9PSAoaTQgJiAzKSkgewogIHdoaWxlIChpMSAmIDMpIHsKICAgaWYgKCFpMikgcmV0dXJuIGkzIHwgMDsKICAgSEVBUDhbaTEgPj4gMF0gPSBIRUFQOFtpNCA+PiAwXSB8IDA7CiAgIGkxID0gaTEgKyAxIHwgMDsKICAgaTQgPSBpNCArIDEgfCAwOwogICBpMiA9IGkyIC0gMSB8IDA7CiAgfQogIHdoaWxlICgoaTIgfCAwKSA+PSA0KSB7CiAgIEhFQVAzMltpMSA+PiAyXSA9IEhFQVAzMltpNCA+PiAyXTsKICAgaTEgPSBpMSArIDQgfCAwOwogICBpNCA9IGk0ICsgNCB8IDA7CiAgIGkyID0gaTIgLSA0IHwgMDsKICB9CiB9CiB3aGlsZSAoKGkyIHwgMCkgPiAwKSB7CiAgSEVBUDhbaTEgPj4gMF0gPSBIRUFQOFtpNCA+PiAwXSB8IDA7CiAgaTEgPSBpMSArIDEgfCAwOwogIGk0ID0gaTQgKyAxIHwgMDsKICBpMiA9IGkyIC0gMSB8IDA7CiB9CiByZXR1cm4gaTMgfCAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2NiwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDY4LCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2NywgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX19kaXZkaTMoaTEsIGkyLCBpMywgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGk1ID0gMCwgaTYgPSAwLCBpNyA9IDAsIGk4ID0gMCwgaTkgPSAwLCBpMTAgPSAwOwogaTEwID0gaTIgPj4gMzEgfCAoKGkyIHwgMCkgPCAwID8gLTEgOiAwKSA8PCAxOwogaTkgPSAoKGkyIHwgMCkgPCAwID8gLTEgOiAwKSA+PiAzMSB8ICgoaTIgfCAwKSA8IDAgPyAtMSA6IDApIDw8IDE7CiBpNiA9IGk0ID4+IDMxIHwgKChpNCB8IDApIDwgMCA/IC0xIDogMCkgPDwgMTsKIGk1ID0gKChpNCB8IDApIDwgMCA/IC0xIDogMCkgPj4gMzEgfCAoKGk0IHwgMCkgPCAwID8gLTEgOiAwKSA8PCAxOwogaTggPSBfaTY0U3VidHJhY3QoaTEwIF4gaTEsIGk5IF4gaTIsIGkxMCwgaTkpIHwgMDsKIGk3ID0gdGVtcFJldDA7CiBpMSA9IGk2IF4gaTEwOwogaTIgPSBpNSBeIGk5OwogcmV0dXJuIF9pNjRTdWJ0cmFjdCgoX19fdWRpdm1vZGRpNChpOCwgaTcsIF9pNjRTdWJ0cmFjdChpNiBeIGkzLCBpNSBeIGk0LCBpNiwgaTUpIHwgMCwgdGVtcFJldDAsIDApIHwgMCkgXiBpMSwgdGVtcFJldDAgXiBpMiwgaTEsIGkyKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzI0cHJvY2Vzc19mb3VuZF9iYXNlX2NsYXNzRVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUHZpKGkxLCBpNCwgaTMsIGk1KSB7CiBpMSA9IGkxIHwgMDsKIGk0ID0gaTQgfCAwOwogaTMgPSBpMyB8IDA7CiBpNSA9IGk1IHwgMDsKIHZhciBpMiA9IDA7CiBpMSA9IGk0ICsgMTYgfCAwOwogaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogZG8gaWYgKGkyKSB7CiAgaWYgKChpMiB8IDApICE9IChpMyB8IDApKSB7CiAgIGk1ID0gaTQgKyAzNiB8IDA7CiAgIEhFQVAzMltpNSA+PiAyXSA9IChIRUFQMzJbaTUgPj4gMl0gfCAwKSArIDE7CiAgIEhFQVAzMltpNCArIDI0ID4+IDJdID0gMjsKICAgSEVBUDhbaTQgKyA1NCA+PiAwXSA9IDE7CiAgIGJyZWFrOwogIH0KICBpMSA9IGk0ICsgMjQgfCAwOwogIGlmICgoSEVBUDMyW2kxID4+IDJdIHwgMCkgPT0gMikgSEVBUDMyW2kxID4+IDJdID0gaTU7CiB9IGVsc2UgewogIEhFQVAzMltpMSA+PiAyXSA9IGkzOwogIEhFQVAzMltpNCArIDI0ID4+IDJdID0gaTU7CiAgSEVBUDMyW2k0ICsgMzYgPj4gMl0gPSAxOwogfSB3aGlsZSAoMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAyMW1heGlGRlRPY3RhdmVBbmFseXplck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpMSA9IGkyICsgMTYgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNTksIGkxIHwgMCwgSEVBUDMyW2kyICsgMTIgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJN21heGlGRlRKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8oaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwOwogaTIgPSBfX1pud2ooODQpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMjk5NjsKIGkzID0gaTIgKyAxNiB8IDA7CiBIRUFQMzJbaTIgKyA3NiA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA2MCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA1NiA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDE2ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDIwID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDI0ID4+IDJdID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgMTI7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlTYW1wbGU4cGxheU9uY2VFZChpMywgZDEpIHsKIGkzID0gaTMgfCAwOwogZDEgPSArZDE7CiB2YXIgaTIgPSAwLCBpNCA9IDA7CiBpMiA9IGkzICsgNDAgfCAwOwogZDEgPSArSEVBUEY2NFtpMiA+PiAzXSArICtIRUFQRjMyWzUwODJdICogZDEgLyArKChIRUFQMzJbNTA4M10gfCAwKSAvIChIRUFQMzJbaTMgKyAxMDQgPj4gMl0gfCAwKSB8IDAgfCAwKTsKIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKIGkyID0gfn5kMTsKIGQxID0gZDEgLSArKGkyIHwgMCk7CiBpZiAoKGkyIHwgMCkgPj0gKEhFQVAzMltpMyArIDEwOCA+PiAyXSB8IDApKSB7CiAgZDEgPSAwLjA7CiAgaTMgPSBpMyArIDY0IHwgMDsKICBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiAgcmV0dXJuICtkMTsKIH0KIGk0ID0gSEVBUDMyW2kzICsgMTI4ID4+IDJdIHwgMDsKIGQxID0gKCgxLjAgLSBkMSkgKiArKEhFQVAxNltpNCArIChpMiArIDEgPDwgMSkgPj4gMV0gfCAwKSArIGQxICogKyhIRUFQMTZbaTQgKyAoaTIgKyAyIDw8IDEpID4+IDFdIHwgMCkpIC8gMzI3NjcuMDsKIGkzID0gaTMgKyA2NCB8IDA7CiBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiByZXR1cm4gK2QxOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTZtYXhpTUZDQ0FuYWx5c2VySWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2MiwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlNaXg0cXVhZEVkUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWRkKGkzLCBkMiwgaTEsIGQ0LCBkNSkgewogaTMgPSBpMyB8IDA7CiBkMiA9ICtkMjsKIGkxID0gaTEgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIHZhciBkNiA9IDAuMCwgZDcgPSAwLjA7CiBkNCA9IGQ0ID4gMS4wID8gMS4wIDogZDQ7CiBkNCA9IGQ0IDwgMC4wID8gMC4wIDogZDQ7CiBkNiA9IGQ1ID4gMS4wID8gMS4wIDogZDU7CiBkNiA9IGQ2IDwgMC4wID8gMC4wIDogZDY7CiBkNyA9IDEuMCAtIGQ0OwogZDUgPSArTWF0aF9zcXJ0KCsoZDcgKiBkNikpICogZDI7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBIRUFQRjY0W2kzID4+IDNdID0gZDU7CiBkNSA9IDEuMCAtIGQ2OwogZDcgPSArTWF0aF9zcXJ0KCsoZDcgKiBkNSkpICogZDI7CiBIRUFQRjY0W2kzICsgOCA+PiAzXSA9IGQ3OwogZDYgPSArTWF0aF9zcXJ0KCsoZDQgKiBkNikpICogZDI7CiBIRUFQRjY0W2kzICsgMTYgPj4gM10gPSBkNjsKIGQ1ID0gK01hdGhfc3FydCgrKGQ0ICogZDUpKSAqIGQyOwogSEVBUEY2NFtpMyArIDI0ID4+IDNdID0gZDU7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlEaXN0b3J0aW9uTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzNywgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRGVsYXlsaW5lTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgyOCwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRENCbG9ja2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg0MCwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpTGFnRXhwSWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzMSwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTJtYXhpRW52ZWxvcGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDI3LCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMW1heGlGbGFuZ2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzOCwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpU2FtcGxlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzMiwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpRmlsdGVyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgyOSwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpQ2hvcnVzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzOSwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlTbmFyZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpMSA9IGkyICsgMTYgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNDMsIGkxIHwgMCwgSEVBUDMyW2kyICsgMTIgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDltYXhpQ2xvY2tOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDQ1LCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUtpY2tOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDQyLCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUlGRlROMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDYwLCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUhhdHNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDQ0LCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aVNWRk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpMSA9IGkyICsgMTYgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoNDEsIGkxIHwgMCwgSEVBUDMyW2kyICsgMTIgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpT3NjTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgyNiwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNaXhOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDMwLCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU1hcE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpMSA9IGkyICsgMTYgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzMsIGkxIHwgMCwgSEVBUDMyW2kyICsgMTIgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSg2MSwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlFbnZOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaTEgPSBpMiArIDE2IHwgMDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmlpKDM1LCBpMSB8IDAsIEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfQogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUR5bk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpMSA9IGkyICsgMTYgfCAwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aWkoMzQsIGkxIHwgMCwgSEVBUDMyW2kyICsgMTIgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdjb252ZXJ0TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gaTIgKyAxNiB8IDA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpaSgzNiwgaTEgfCAwLCBIRUFQMzJbaTIgKyAxMiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0KIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgcmV0dXJuOwp9CgpmdW5jdGlvbiBfZm10X3UoaTIsIGkzLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGkxID0gaTEgfCAwOwogdmFyIGk0ID0gMDsKIGlmIChpMyA+Pj4gMCA+IDAgfCAoaTMgfCAwKSA9PSAwICYgaTIgPj4+IDAgPiA0Mjk0OTY3Mjk1KSB3aGlsZSAoMSkgewogIGk0ID0gX19fdXJlbWRpMyhpMiB8IDAsIGkzIHwgMCwgMTAsIDApIHwgMDsKICBpMSA9IGkxICsgLTEgfCAwOwogIEhFQVA4W2kxID4+IDBdID0gaTQgfCA0ODsKICBpNCA9IF9fX3VkaXZkaTMoaTIgfCAwLCBpMyB8IDAsIDEwLCAwKSB8IDA7CiAgaWYgKGkzID4+PiAwID4gOSB8IChpMyB8IDApID09IDkgJiBpMiA+Pj4gMCA+IDQyOTQ5NjcyOTUpIHsKICAgaTIgPSBpNDsKICAgaTMgPSB0ZW1wUmV0MDsKICB9IGVsc2UgewogICBpMiA9IGk0OwogICBicmVhazsKICB9CiB9CiBpZiAoaTIpIHdoaWxlICgxKSB7CiAgaTEgPSBpMSArIC0xIHwgMDsKICBIRUFQOFtpMSA+PiAwXSA9IChpMiA+Pj4gMCkgJSAxMCB8IDAgfCA0ODsKICBpZiAoaTIgPj4+IDAgPCAxMCkgYnJlYWs7IGVsc2UgaTIgPSAoaTIgPj4+IDApIC8gMTAgfCAwOwogfQogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjltYXhpQ2xvY2s2dGlja2VyRXYoaTYpIHsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgZDIgPSAwLjAsIGQzID0gMC4wLCBpNCA9IDAsIGQ1ID0gMC4wOwogaTEgPSBpNiArIDg0IHwgMDsKIEhFQVA4W2kxID4+IDBdID0gMDsKIGQzID0gK0hFQVBGNjRbaTYgKyA2NCA+PiAzXTsKIGk0ID0gaTYgKyA4IHwgMDsKIGQ1ID0gK0hFQVBGNjRbaTQgPj4gM107CiBIRUFQRjY0W2k2ICsgMzIgPj4gM10gPSBkNTsKIGlmICghKGQ1ID49IDEuMCkpIGQyID0gZDU7IGVsc2UgewogIGQyID0gZDUgKyAtMS4wOwogIEhFQVBGNjRbaTQgPj4gM10gPSBkMjsKIH0KIEhFQVBGNjRbaTQgPj4gM10gPSBkMiArIDEuMCAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gZDMpOwogaTQgPSB+fitNYXRoX2Zsb29yKCtkNSk7CiBIRUFQMzJbaTYgKyA0OCA+PiAyXSA9IGk0OwogaWYgKChIRUFQMzJbaTYgKyA1MiA+PiAyXSB8IDApID09IChpNCB8IDApKSByZXR1cm47CiBIRUFQOFtpMSA+PiAwXSA9IDE7CiBpNiA9IGk2ICsgNTYgfCAwOwogSEVBUDMyW2k2ID4+IDJdID0gKEhFQVAzMltpNiA+PiAyXSB8IDApICsgMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJaU5TMl85YWxsb2NhdG9ySWlFRUVFRnZqUktpRXZQUzZfSmpTOF9FRTZpbnZva2VFUktTQV9TQl9qaShpMiwgaTMsIGk1LCBpNikgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk1ID0gaTUgfCAwOwogaTYgPSBpNiB8IDA7CiB2YXIgaTEgPSAwLCBpNCA9IDAsIGk3ID0gMCwgaTggPSAwOwogaTcgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTQgPSBpNzsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk4ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk4ID4+IDEpIHwgMDsKIGlmIChpOCAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIEhFQVAzMltpNCA+PiAyXSA9IGk2OwogRlVOQ1RJT05fVEFCTEVfdmlpaVtpMSAmIDMxXShpMiwgaTUsIGk0KTsKIFNUQUNLVE9QID0gaTc7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUZ2alJLY0V2UFM2X0pqUzhfRUU2aW52b2tlRVJLU0FfU0JfamMoaTIsIGkzLCBpNSwgaTYpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNSA9IGk1IHwgMDsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgaTQgPSAwLCBpNyA9IDAsIGk4ID0gMDsKIGk3ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTc7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpOCA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpOCA+PiAxKSB8IDA7CiBpZiAoaTggJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBIRUFQOFtpNCA+PiAwXSA9IGk2OwogRlVOQ1RJT05fVEFCTEVfdmlpaVtpMSAmIDMxXShpMiwgaTUsIGk0KTsKIFNUQUNLVE9QID0gaTc7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUZ2alJLZkV2UFM2X0pqUzhfRUU2aW52b2tlRVJLU0FfU0JfamYoaTIsIGkzLCBpNSwgZDYpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogdmFyIGkxID0gMCwgaTQgPSAwLCBpNyA9IDAsIGk4ID0gMDsKIGk3ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTc7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpOCA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpOCA+PiAxKSB8IDA7CiBpZiAoaTggJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBIRUFQRjMyW2k0ID4+IDJdID0gZDY7CiBGVU5DVElPTl9UQUJMRV92aWlpW2kxICYgMzFdKGkyLCBpNSwgaTQpOwogU1RBQ0tUT1AgPSBpNzsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFRnZqUktkRXZQUzZfSmpTOF9FRTZpbnZva2VFUktTQV9TQl9qZChpMiwgaTMsIGk1LCBkNikgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk1ID0gaTUgfCAwOwogZDYgPSArZDY7CiB2YXIgaTEgPSAwLCBpNCA9IDAsIGk3ID0gMCwgaTggPSAwOwogaTcgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTQgPSBpNzsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk4ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk4ID4+IDEpIHwgMDsKIGlmIChpOCAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIEhFQVBGNjRbaTQgPj4gM10gPSBkNjsKIEZVTkNUSU9OX1RBQkxFX3ZpaWlbaTEgJiAzMV0oaTIsIGk1LCBpNCk7CiBTVEFDS1RPUCA9IGk3OwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlTVkYxMnNldFJlc29uYW5jZUVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIHZhciBkMyA9IDAuMCwgZDQgPSAwLjA7CiBkMyA9ICtIRUFQRjY0W2kyICsgODggPj4gM107CiBIRUFQRjY0W2kyICsgOTYgPj4gM10gPSBkMTsKIGQzID0gK01hdGhfdGFuKCsoZDMgKiAzLjE0MTU5MjY1MzU4OTc5MyAvICsoSEVBUDMyWzUwODNdIHwgMCkpKTsKIEhFQVBGNjRbaTIgKyAyNCA+PiAzXSA9IGQzOwogZDQgPSBkMSA9PSAwLjAgPyAwLjAgOiAxLjAgLyBkMTsKIEhFQVBGNjRbaTIgKyAzMiA+PiAzXSA9IGQ0OwogSEVBUEY2NFtpMiArIDQwID4+IDNdID0gZDQ7CiBkNCA9IGQzICsgZDQ7CiBkMSA9IGQzIC8gKGQzICogZDQgKyAxLjApOwogSEVBUEY2NFtpMiArIDQ4ID4+IDNdID0gZDE7CiBIRUFQRjY0W2kyICsgNTYgPj4gM10gPSBkMTsKIEhFQVBGNjRbaTIgKyA2NCA+PiAzXSA9IGQxICogKGQ0ICogMi4wKTsKIEhFQVBGNjRbaTIgKyA3MiA+PiAzXSA9IGQzICogZDE7CiBIRUFQRjY0W2kyICsgODAgPj4gM10gPSBkMSAqIDIuMDsKIHJldHVybiBpMiB8IDA7Cn0KCmZ1bmN0aW9uIF9zdHJsZW4oaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpNCA9IGkxOwogTDEgOiBkbyBpZiAoIShpNCAmIDMpKSBpMyA9IDQ7IGVsc2UgewogIGkyID0gaTE7CiAgaTEgPSBpNDsKICB3aGlsZSAoMSkgewogICBpZiAoIShIRUFQOFtpMiA+PiAwXSB8IDApKSBicmVhayBMMTsKICAgaTIgPSBpMiArIDEgfCAwOwogICBpMSA9IGkyOwogICBpZiAoIShpMSAmIDMpKSB7CiAgICBpMSA9IGkyOwogICAgaTMgPSA0OwogICAgYnJlYWs7CiAgIH0KICB9CiB9IHdoaWxlICgwKTsKIGlmICgoaTMgfCAwKSA9PSA0KSB7CiAgd2hpbGUgKDEpIHsKICAgaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogICBpZiAoISgoaTIgJiAtMjEzOTA2MjE0NCBeIC0yMTM5MDYyMTQ0KSAmIGkyICsgLTE2ODQzMDA5KSkgaTEgPSBpMSArIDQgfCAwOyBlbHNlIGJyZWFrOwogIH0KICBpZiAoKGkyICYgMjU1KSA8PCAyNCA+PiAyNCkgZG8gaTEgPSBpMSArIDEgfCAwOyB3aGlsZSAoKEhFQVA4W2kxID4+IDBdIHwgMCkgIT0gMCk7CiB9CiByZXR1cm4gaTEgLSBpNCB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aVNWRjlzZXRDdXRvZmZFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiB2YXIgZDMgPSAwLjAsIGQ0ID0gMC4wOwogZDQgPSArSEVBUEY2NFtpMiArIDk2ID4+IDNdOwogSEVBUEY2NFtpMiArIDg4ID4+IDNdID0gZDE7CiBkMyA9ICtNYXRoX3RhbigrKGQxICogMy4xNDE1OTI2NTM1ODk3OTMgLyArKEhFQVAzMls1MDgzXSB8IDApKSk7CiBIRUFQRjY0W2kyICsgMjQgPj4gM10gPSBkMzsKIGQ0ID0gZDQgPT0gMC4wID8gMC4wIDogMS4wIC8gZDQ7CiBIRUFQRjY0W2kyICsgMzIgPj4gM10gPSBkNDsKIEhFQVBGNjRbaTIgKyA0MCA+PiAzXSA9IGQ0OwogZDQgPSBkMyArIGQ0OwogZDEgPSBkMyAvIChkMyAqIGQ0ICsgMS4wKTsKIEhFQVBGNjRbaTIgKyA0OCA+PiAzXSA9IGQxOwogSEVBUEY2NFtpMiArIDU2ID4+IDNdID0gZDE7CiBIRUFQRjY0W2kyICsgNjQgPj4gM10gPSBkMSAqIChkNCAqIDIuMCk7CiBIRUFQRjY0W2kyICsgNzIgPj4gM10gPSBkMyAqIGQxOwogSEVBUEY2NFtpMiArIDgwID4+IDNdID0gZDEgKiAyLjA7CiByZXR1cm4gaTIgfCAwOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQ4bWFnc1RvREJFdihpNikgewogaTYgPSBpNiB8IDA7CiB2YXIgZDEgPSAwLjAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMDsKIGkyID0gSEVBUDMyW2k2ICsgNCA+PiAyXSB8IDA7CiBpMyA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMlsoSEVBUDMyW2k2ICsgNjQgPj4gMl0gfCAwKSArIDQgPj4gMl0gfCAwOwogaWYgKChpNCB8IDApID4gMCkgaTUgPSAwOyBlbHNlIHsKICBpNiA9IGkzOwogIGQxID0gK0hFQVBGMzJbaTYgPj4gMl07CiAgcmV0dXJuICtkMTsKIH0KIGRvIHsKICBkMSA9ICtIRUFQRjMyW2kyICsgKGk1IDw8IDIpID4+IDJdOwogIGlmIChkMSA8IDEuMGUtMDYpIGQxID0gMC4wOyBlbHNlIGQxID0gK19sb2cxMChkMSArIDEuMCkgKiAyMC4wOwogIEhFQVBGMzJbaTMgKyAoaTUgPDwgMikgPj4gMl0gPSBkMTsKICBpNSA9IGk1ICsgMSB8IDA7CiB9IHdoaWxlICgoaTUgfCAwKSAhPSAoaTQgfCAwKSk7CiBpNiA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiBkMSA9ICtIRUFQRjMyW2k2ID4+IDJdOwogcmV0dXJuICtkMTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTBtYXhpRmlsdGVySkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIGkyID0gX19abndqKDI1NikgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIxMDIwOwogaTMgPSBpMiArIDIwOCB8IDA7CiBIRUFQMzJbaTMgPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDEyID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDE2ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDIwID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDI0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDI4ID4+IDJdID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgMTY7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUZGVDE2c3BlY3RyYWxGbGF0bmVzc0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBkMiA9IDAuMCwgZDMgPSAwLjAsIGQ0ID0gMC4wLCBpNSA9IDAsIGk2ID0gMDsKIGk2ID0gSEVBUDMyW2kxICsgNDAgPj4gMl0gfCAwOwogaWYgKChpNiB8IDApID4gMCkgewogIGkxID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiAgZDIgPSAwLjA7CiAgZDQgPSAwLjA7CiAgaTUgPSAwOwogIGRvIHsKICAgZDMgPSArSEVBUEYzMltpMSArIChpNSA8PCAyKSA+PiAyXTsKICAgaWYgKGQzICE9IDAuMCkgZDQgPSBkNCArICtNYXRoX2xvZygrZDMpOwogICBkMiA9IGQyICsgZDM7CiAgIGk1ID0gaTUgKyAxIHwgMDsKICB9IHdoaWxlICgoaTUgfCAwKSA8IChpNiB8IDApKTsKIH0gZWxzZSB7CiAgZDIgPSAwLjA7CiAgZDQgPSAwLjA7CiB9CiBkMyA9ICsoaTYgfCAwKTsKIGQyID0gZDIgLyBkMzsKIGlmICghKGQyICE9IDAuMCkpIHsKICBkNCA9IDAuMDsKICByZXR1cm4gK2Q0OwogfQogZDQgPSArTWF0aF9leHAoKyhkNCAvIGQzKSkgLyBkMjsKIHJldHVybiArZDQ7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRUZ2UktpRXZQUzZfSlM4X0VFNmludm9rZUVSS1NBX1NCX2koaTIsIGkzLCBpNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk1ID0gaTUgfCAwOwogdmFyIGkxID0gMCwgaTQgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk2ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTY7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNyA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNyA+PiAxKSB8IDA7CiBpZiAoaTcgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBIRUFQMzJbaTQgPj4gMl0gPSBpNTsKIEZVTkNUSU9OX1RBQkxFX3ZpaVtpMSAmIDEyN10oaTIsIGk0KTsKIFNUQUNLVE9QID0gaTY7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUZ2UktjRXZQUzZfSlM4X0VFNmludm9rZUVSS1NBX1NCX2MoaTIsIGkzLCBpNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk1ID0gaTUgfCAwOwogdmFyIGkxID0gMCwgaTQgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk2ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTY7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNyA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNyA+PiAxKSB8IDA7CiBpZiAoaTcgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBIRUFQOFtpNCA+PiAwXSA9IGk1OwogRlVOQ1RJT05fVEFCTEVfdmlpW2kxICYgMTI3XShpMiwgaTQpOwogU1RBQ0tUT1AgPSBpNjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJZk5TMl85YWxsb2NhdG9ySWZFRUVFRnZSS2ZFdlBTNl9KUzhfRUU2aW52b2tlRVJLU0FfU0JfZihpMiwgaTMsIGQ1KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDUgPSArZDU7CiB2YXIgaTEgPSAwLCBpNCA9IDAsIGk2ID0gMCwgaTcgPSAwOwogaTYgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTQgPSBpNjsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk3ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk3ID4+IDEpIHwgMDsKIGlmIChpNyAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIEhFQVBGMzJbaTQgPj4gMl0gPSBkNTsKIEZVTkNUSU9OX1RBQkxFX3ZpaVtpMSAmIDEyN10oaTIsIGk0KTsKIFNUQUNLVE9QID0gaTY7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUZ2UktkRXZQUzZfSlM4X0VFNmludm9rZUVSS1NBX1NCX2QoaTIsIGkzLCBkNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGQ1ID0gK2Q1OwogdmFyIGkxID0gMCwgaTQgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk2ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTY7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNyA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNyA+PiAxKSB8IDA7CiBpZiAoaTcgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBIRUFQRjY0W2k0ID4+IDNdID0gZDU7CiBGVU5DVElPTl9UQUJMRV92aWlbaTEgJiAxMjddKGkyLCBpNCk7CiBTVEFDS1RPUCA9IGk2OwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlPc2M0c2F3bkVkKGk0LCBkMykgewogaTQgPSBpNCB8IDA7CiBkMyA9ICtkMzsKIHZhciBkMSA9IDAuMCwgaTIgPSAwLCBkNSA9IDAuMDsKIGkyID0gaTQgKyA4IHwgMDsKIGQxID0gK0hFQVBGNjRbaTIgPj4gM107CiBpZiAoZDEgPj0gLjUpIHsKICBkMSA9IGQxICsgLTEuMDsKICBIRUFQRjY0W2kyID4+IDNdID0gZDE7CiB9CiBkMSA9IDEuMCAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gZDMpICsgZDE7CiBIRUFQRjY0W2kyID4+IDNdID0gZDE7CiBkNSA9IDg4MjAuMjIgLyBkMyAqIGQxOwogZDUgPSBkNSA8IC0uNSA/IC0uNSA6IGQ1OwogZDUgPSBkNSA+IC41ID8gMS4wZTMgOiBkNSAqIDEuMGUzICsgNTAwLjA7CiBkMyA9IGQ1IC0gK01hdGhfZmxvb3IoK2Q1KTsKIGkyID0gfn5kNTsKIGQzID0gK0hFQVBGNjRbNDEyMCArIChpMiArIDEgPDwgMykgPj4gM10gKiBkMyArICtIRUFQRjY0WzQxMjAgKyAoaTIgPDwgMykgPj4gM10gKiAoMS4wIC0gZDMpIC0gZDE7CiBIRUFQRjY0W2k0ICsgMzIgPj4gM10gPSBkMzsKIHJldHVybiArZDM7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUZGVDE2c3BlY3RyYWxDZW50cm9pZEV2KGk2KSB7CiBpNiA9IGk2IHwgMDsKIHZhciBkMSA9IDAuMCwgZDIgPSAwLjAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGQ3ID0gMC4wOwogaTMgPSBIRUFQMzJbaTYgKyA0MCA+PiAyXSB8IDA7CiBpZiAoKGkzIHwgMCkgPD0gMCkgewogIGQyID0gMC4wOwogIHJldHVybiArZDI7CiB9CiBpNCA9IEhFQVAzMltpNiArIDQgPj4gMl0gfCAwOwogaTUgPSAwOwogZDIgPSAwLjA7CiBkMSA9IDAuMDsKIGRvIHsKICBkNyA9ICtNYXRoX2FicygrKCtIRUFQRjMyW2k0ICsgKGk1IDw8IDIpID4+IDJdKSk7CiAgZDIgPSBkMiArICsoaTUgfCAwKSAqIGQ3OwogIGQxID0gZDEgKyBkNzsKICBpNSA9IGk1ICsgMSB8IDA7CiB9IHdoaWxlICgoaTUgfCAwKSA8IChpMyB8IDApKTsKIGlmICghKGQxICE9IDAuMCkpIHsKICBkNyA9IDAuMDsKICByZXR1cm4gK2Q3OwogfQogZDcgPSBkMiAvIGQxICogKCsoSEVBUDMyWzUwODNdIHwgMCkgLyArKEhFQVAzMltpNiArIDYwID4+IDJdIHwgMCkpOwogcmV0dXJuICtkNzsKfQoKZnVuY3Rpb24gX21lbXNldChpMiwgaTYsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGk2ID0gaTYgfCAwOwogaTEgPSBpMSB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDAsIGk1ID0gMCwgaTcgPSAwOwogaTMgPSBpMiArIGkxIHwgMDsKIGlmICgoaTEgfCAwKSA+PSAyMCkgewogIGk2ID0gaTYgJiAyNTU7CiAgaTUgPSBpMiAmIDM7CiAgaTcgPSBpNiB8IGk2IDw8IDggfCBpNiA8PCAxNiB8IGk2IDw8IDI0OwogIGk0ID0gaTMgJiB+MzsKICBpZiAoaTUpIHsKICAgaTUgPSBpMiArIDQgLSBpNSB8IDA7CiAgIHdoaWxlICgoaTIgfCAwKSA8IChpNSB8IDApKSB7CiAgICBIRUFQOFtpMiA+PiAwXSA9IGk2OwogICAgaTIgPSBpMiArIDEgfCAwOwogICB9CiAgfQogIHdoaWxlICgoaTIgfCAwKSA8IChpNCB8IDApKSB7CiAgIEhFQVAzMltpMiA+PiAyXSA9IGk3OwogICBpMiA9IGkyICsgNCB8IDA7CiAgfQogfQogd2hpbGUgKChpMiB8IDApIDwgKGkzIHwgMCkpIHsKICBIRUFQOFtpMiA+PiAwXSA9IGk2OwogIGkyID0gaTIgKyAxIHwgMDsKIH0KIHJldHVybiBpMiAtIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19fc3RkaW9fc2VlayhpMSwgaTIsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTMgPSAwLCBpNSA9IDAsIGk2ID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMzIgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk2ID0gaTU7CiBpMyA9IGk1ICsgMjAgfCAwOwogSEVBUDMyW2k2ID4+IDJdID0gSEVBUDMyW2kxICsgNjAgPj4gMl07CiBIRUFQMzJbaTYgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpNiArIDggPj4gMl0gPSBpMjsKIEhFQVAzMltpNiArIDEyID4+IDJdID0gaTM7CiBIRUFQMzJbaTYgKyAxNiA+PiAyXSA9IGk0OwogaWYgKChfX19zeXNjYWxsX3JldChfX19zeXNjYWxsMTQwKDE0MCwgaTYgfCAwKSB8IDApIHwgMCkgPCAwKSB7CiAgSEVBUDMyW2kzID4+IDJdID0gLTE7CiAgaTEgPSAtMTsKIH0gZWxzZSBpMSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBTVEFDS1RPUCA9IGk1OwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTZtYXhpTUZDQ0FuYWx5c2VySWRFRnZSTlN0M19fMTZ2ZWN0b3JJZk5TNF85YWxsb2NhdG9ySWZFRUVFUk5TNV9JZE5TNl9JZEVFRUVFdlBTM19KUzlfU0NfRUU2aW52b2tlRVJLU0VfU0ZfUFM4X1BTQl8oaTEsIGkyLCBpNCwgaTUpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIGk1ID0gaTUgfCAwOwogdmFyIGkzID0gMCwgaTYgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTYgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTYgPj4gMSkgfCAwOwogaWYgKCEoaTYgJiAxKSkgewogIGk2ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpaVtpNiAmIDMxXShpMSwgaTQsIGk1KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk2ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlpW2k2ICYgMzFdKGkxLCBpNCwgaTUpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlTVkZGUlMyX2RFUzNfUFMyX0pkRUU2aW52b2tlRVJLUzVfUzZfZChpMiwgaTMsIGQ1KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDUgPSArZDU7CiB2YXIgaTEgPSAwLCBpNCA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNCA+PiAxKSB8IDA7CiBpZiAoaTQgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBpMyA9IEZVTkNUSU9OX1RBQkxFX2lpZFtpMSAmIDNdKGkyLCBkNSkgfCAwOwogaTEgPSBfX1pud2ooMTA0KSB8IDA7CiBpMiA9IGkxOwogaTQgPSBpMiArIDEwNCB8IDA7CiBkbyB7CiAgSEVBUDMyW2kyID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIGkyID0gaTIgKyA0IHwgMDsKICBpMyA9IGkzICsgNCB8IDA7CiB9IHdoaWxlICgoaTIgfCAwKSA8IChpNCB8IDApKTsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xM21heGlEZWxheWxpbmUyZGxFZGlkaShpNywgZDQsIGk2LCBkMywgaTUpIHsKIGk3ID0gaTcgfCAwOwogZDQgPSArZDQ7CiBpNiA9IGk2IHwgMDsKIGQzID0gK2QzOwogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGk4ID0gMDsKIGkyID0gaTcgKyA4IHwgMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGlmICgoaTEgfCAwKSA+PSAoaTYgfCAwKSkgewogIEhFQVAzMltpMiA+PiAyXSA9IDA7CiAgaTEgPSAwOwogfQogaTggPSBpNyArIDMyIHwgMDsKIEhFQVBGNjRbaTggPj4gM10gPSArSEVBUEY2NFtpNyArIDQwICsgKCgoaTUgfCAwKSA8IChpNiB8IDApID8gaTUgOiAwKSA8PCAzKSA+PiAzXTsKIGk3ID0gaTcgKyA0MCArIChpMSA8PCAzKSB8IDA7CiBIRUFQRjY0W2k3ID4+IDNdID0gK0hFQVBGNjRbaTcgPj4gM10gKiBkMyArIGQ0ICogZDMgKiArSEVBUEYzMls1MDgyXTsKIEhFQVAzMltpMiA+PiAyXSA9IChIRUFQMzJbaTIgPj4gMl0gfCAwKSArIDE7CiByZXR1cm4gKygrSEVBUEY2NFtpOCA+PiAzXSk7Cn0KCmZ1bmN0aW9uIF9fWlN0OXRlcm1pbmF0ZXYoKSB7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMDsKIF9fVEhSRVdfXyA9IDA7CiBpMSA9IGludm9rZV9pKDM0KSB8IDA7CiBpMyA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTMgJiAxKSB7CiAgaTMgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTMpOwogfQogaWYgKCgoaTEgfCAwKSAhPSAwID8gKGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMCwgKGkyIHwgMCkgIT0gMCkgOiAwKSA/IChpMyA9IGkyICsgNDggfCAwLCAoSEVBUDMyW2kzID4+IDJdICYgLTI1NiB8IDApID09IDExMjY5MDI1MjggPyAoSEVBUDMyW2kzICsgNCA+PiAyXSB8IDApID09IDExMjkwNzQyNDcgOiAwKSA6IDApIF9fWlN0MTFfX3Rlcm1pbmF0ZVBGdnZFKEhFQVAzMltpMiArIDEyID4+IDJdIHwgMCk7CiBpMyA9IEhFQVAzMls1ODgxXSB8IDA7CiBIRUFQMzJbNTg4MV0gPSBpMyArIDA7CiBfX1pTdDExX190ZXJtaW5hdGVQRnZ2RShpMyk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlZlY3RvckFjY2Vzc0lOU3QzX18xNnZlY3RvcklkTlMyXzlhbGxvY2F0b3JJZEVFRUVFM2dldEVSS1M2X2ooaTQsIGkzKSB7CiBpNCA9IGk0IHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpNSA9IDA7CiBpNSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMiA9IGk1OwogaTEgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogaWYgKChIRUFQMzJbaTQgKyA0ID4+IDJdIHwgMCkgLSBpMSA+PiAzID4+PiAwIDw9IGkzID4+PiAwKSB7CiAgaTQgPSAxOwogIFNUQUNLVE9QID0gaTU7CiAgcmV0dXJuIGk0IHwgMDsKIH0KIEhFQVBGNjRbaTIgPj4gM10gPSArSEVBUEY2NFtpMSArIChpMyA8PCAzKSA+PiAzXTsKIGk0ID0gX19lbXZhbF90YWtlX3ZhbHVlKDE2MTUyLCBpMiB8IDApIHwgMDsKIFNUQUNLVE9QID0gaTU7CiByZXR1cm4gaTQgfCAwOwp9CgpmdW5jdGlvbiBfc3RyZXJyb3IoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwOwogaTIgPSAwOwogd2hpbGUgKDEpIHsKICBpZiAoKEhFQVBVOFs0MDA2NCArIGkyID4+IDBdIHwgMCkgPT0gKGkxIHwgMCkpIHsKICAgaTMgPSAyOwogICBicmVhazsKICB9CiAgaTIgPSBpMiArIDEgfCAwOwogIGlmICgoaTIgfCAwKSA9PSA4NykgewogICBpMiA9IDg3OwogICBpMSA9IDQwMTUyOwogICBpMyA9IDU7CiAgIGJyZWFrOwogIH0KIH0KIGlmICgoaTMgfCAwKSA9PSAyKSBpZiAoIWkyKSBpMSA9IDQwMTUyOyBlbHNlIHsKICBpMSA9IDQwMTUyOwogIGkzID0gNTsKIH0KIGlmICgoaTMgfCAwKSA9PSA1KSB3aGlsZSAoMSkgewogIGkzID0gaTE7CiAgd2hpbGUgKDEpIHsKICAgaTEgPSBpMyArIDEgfCAwOwogICBpZiAoIShIRUFQOFtpMyA+PiAwXSB8IDApKSBicmVhazsgZWxzZSBpMyA9IGkxOwogIH0KICBpMiA9IGkyICsgLTEgfCAwOwogIGlmICghaTIpIGJyZWFrOyBlbHNlIGkzID0gNTsKIH0KIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlZlY3RvckFjY2Vzc0lOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVFM2dldEVSS1M2X2ooaTQsIGkzKSB7CiBpNCA9IGk0IHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpNSA9IDA7CiBpNSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMiA9IGk1OwogaTEgPSBIRUFQMzJbaTQgPj4gMl0gfCAwOwogaWYgKChIRUFQMzJbaTQgKyA0ID4+IDJdIHwgMCkgLSBpMSA+PiAyID4+PiAwIDw9IGkzID4+PiAwKSB7CiAgaTQgPSAxOwogIFNUQUNLVE9QID0gaTU7CiAgcmV0dXJuIGk0IHwgMDsKIH0KIEhFQVAzMltpMiA+PiAyXSA9IEhFQVAzMltpMSArIChpMyA8PCAyKSA+PiAyXTsKIGk0ID0gX19lbXZhbF90YWtlX3ZhbHVlKDE2MTEyLCBpMiB8IDApIHwgMDsKIFNUQUNLVE9QID0gaTU7CiByZXR1cm4gaTQgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJWZWN0b3JBY2Nlc3NJTlN0M19fMTZ2ZWN0b3JJZk5TMl85YWxsb2NhdG9ySWZFRUVFRTNnZXRFUktTNl9qKGk0LCBpMykgewogaTQgPSBpNCB8IDA7CiBpMyA9IGkzIHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTUgPSAwOwogaTUgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTIgPSBpNTsKIGkxID0gSEVBUDMyW2k0ID4+IDJdIHwgMDsKIGlmICgoSEVBUDMyW2k0ICsgNCA+PiAyXSB8IDApIC0gaTEgPj4gMiA+Pj4gMCA8PSBpMyA+Pj4gMCkgewogIGk0ID0gMTsKICBTVEFDS1RPUCA9IGk1OwogIHJldHVybiBpNCB8IDA7CiB9CiBIRUFQMzJbaTIgPj4gMl0gPSBIRUFQMzJbaTEgKyAoaTMgPDwgMikgPj4gMl07CiBpNCA9IF9fZW12YWxfdGFrZV92YWx1ZSgxNjE0NCwgaTIgfCAwKSB8IDA7CiBTVEFDS1RPUCA9IGk1OwogcmV0dXJuIGk0IHwgMDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpT3NjNXB1bHNlRWRkKGk1LCBkMywgZDIpIHsKIGk1ID0gaTUgfCAwOwogZDMgPSArZDM7CiBkMiA9ICtkMjsKIHZhciBpMSA9IDAsIGQ0ID0gMC4wOwogZDQgPSBkMiA8IDAuMCA/IDAuMCA6IGQyOwogZDQgPSBkNCA+IDEuMCA/IDEuMCA6IGQ0OwogaTEgPSBpNSArIDggfCAwOwogZDIgPSArSEVBUEY2NFtpMSA+PiAzXTsKIGlmIChkMiA+PSAxLjApIHsKICBkMiA9IGQyICsgLTEuMDsKICBIRUFQRjY0W2kxID4+IDNdID0gZDI7CiB9CiBkMiA9IDEuMCAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gZDMpICsgZDI7CiBIRUFQRjY0W2kxID4+IDNdID0gZDI7CiBpZiAoZDIgPCBkNCkgSEVBUEY2NFtpNSArIDMyID4+IDNdID0gLTEuMDsKIGkxID0gaTUgKyAzMiB8IDA7CiBpZiAoZDIgPiBkNCkgewogIEhFQVBGNjRbaTEgPj4gM10gPSAxLjA7CiAgZDQgPSAxLjA7CiAgcmV0dXJuICtkNDsKIH0gZWxzZSB7CiAgZDQgPSArSEVBUEY2NFtpMSA+PiAzXTsKICByZXR1cm4gK2Q0OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJaU5TXzlhbGxvY2F0b3JJaUVFRTZyZXNpemVFalJLaShpNSwgaTMsIGk0KSB7CiBpNSA9IGk1IHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGk2ID0gMCwgaTcgPSAwOwogaTYgPSBpNSArIDQgfCAwOwogaTcgPSBIRUFQMzJbaTYgPj4gMl0gfCAwOwogaTEgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogaTIgPSBpNyAtIGkxID4+IDI7CiBpZiAoaTIgPj4+IDAgPCBpMyA+Pj4gMCkgewogIF9fWk5TdDNfXzE2dmVjdG9ySWlOU185YWxsb2NhdG9ySWlFRUU4X19hcHBlbmRFalJLaShpNSwgaTMgLSBpMiB8IDAsIGk0KTsKICByZXR1cm47CiB9CiBpZiAoaTIgPj4+IDAgPD0gaTMgPj4+IDApIHJldHVybjsKIGkxID0gaTEgKyAoaTMgPDwgMikgfCAwOwogaWYgKChpNyB8IDApID09IChpMSB8IDApKSByZXR1cm47CiBIRUFQMzJbaTYgPj4gMl0gPSBpNyArICh+KChpNyArIC00IC0gaTEgfCAwKSA+Pj4gMikgPDwgMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUU2cmVzaXplRWpSS2YoaTUsIGkzLCBpNCkgewogaTUgPSBpNSB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk2ID0gaTUgKyA0IHwgMDsKIGk3ID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKIGkxID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKIGkyID0gaTcgLSBpMSA+PiAyOwogaWYgKGkyID4+PiAwIDwgaTMgPj4+IDApIHsKICBfX1pOU3QzX18xNnZlY3RvcklmTlNfOWFsbG9jYXRvcklmRUVFOF9fYXBwZW5kRWpSS2YoaTUsIGkzIC0gaTIgfCAwLCBpNCk7CiAgcmV0dXJuOwogfQogaWYgKGkyID4+PiAwIDw9IGkzID4+PiAwKSByZXR1cm47CiBpMSA9IGkxICsgKGkzIDw8IDIpIHwgMDsKIGlmICgoaTcgfCAwKSA9PSAoaTEgfCAwKSkgcmV0dXJuOwogSEVBUDMyW2k2ID4+IDJdID0gaTcgKyAofigoaTcgKyAtNCAtIGkxIHwgMCkgPj4+IDIpIDw8IDIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xNnZlY3RvcklkTlNfOWFsbG9jYXRvcklkRUVFNnJlc2l6ZUVqUktkKGk1LCBpMywgaTQpIHsKIGk1ID0gaTUgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTYgPSAwLCBpNyA9IDA7CiBpNiA9IGk1ICsgNCB8IDA7CiBpNyA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiBpMSA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiBpMiA9IGk3IC0gaTEgPj4gMzsKIGlmIChpMiA+Pj4gMCA8IGkzID4+PiAwKSB7CiAgX19aTlN0M19fMTZ2ZWN0b3JJZE5TXzlhbGxvY2F0b3JJZEVFRThfX2FwcGVuZEVqUktkKGk1LCBpMyAtIGkyIHwgMCwgaTQpOwogIHJldHVybjsKIH0KIGlmIChpMiA+Pj4gMCA8PSBpMyA+Pj4gMCkgcmV0dXJuOwogaTEgPSBpMSArIChpMyA8PCAzKSB8IDA7CiBpZiAoKGk3IHwgMCkgPT0gKGkxIHwgMCkpIHJldHVybjsKIEhFQVAzMltpNiA+PiAyXSA9IGk3ICsgKH4oKGk3ICsgLTggLSBpMSB8IDApID4+PiAzKSA8PCAzKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyVmVjdG9yQWNjZXNzSU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUUzZ2V0RVJLUzZfaihpNCwgaTMpIHsKIGk0ID0gaTQgfCAwOwogaTMgPSBpMyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGk1ID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkyID0gaTU7CiBpMSA9IEhFQVAzMltpNCA+PiAyXSB8IDA7CiBpZiAoKChIRUFQMzJbaTQgKyA0ID4+IDJdIHwgMCkgLSBpMSB8IDApID4+PiAwIDw9IGkzID4+PiAwKSB7CiAgaTQgPSAxOwogIFNUQUNLVE9QID0gaTU7CiAgcmV0dXJuIGk0IHwgMDsKIH0KIEhFQVAzMltpMiA+PiAyXSA9IEhFQVA4W2kxICsgaTMgPj4gMF07CiBpNCA9IF9fZW12YWxfdGFrZV92YWx1ZSgxNjA3MiwgaTIgfCAwKSB8IDA7CiBTVEFDS1RPUCA9IGk1OwogcmV0dXJuIGk0IHwgMDsKfQoKZnVuY3Rpb24gX19aTksxMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYWJvdmVfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2UzRfaWIoaTUsIGkzLCBpMiwgaTEsIGk0LCBpNikgewogaTUgPSBpNSB8IDA7CiBpMyA9IGkzIHwgMDsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBpNCA9IGk0IHwgMDsKIGk2ID0gaTYgfCAwOwogaWYgKChpNSB8IDApID09IChIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMCkpIF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzI5cHJvY2Vzc19zdGF0aWNfdHlwZV9hYm92ZV9kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZTNF9pKDAsIGkzLCBpMiwgaTEsIGk0KTsgZWxzZSB7CiAgaTUgPSBIRUFQMzJbaTUgKyA4ID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlpaWlpW0hFQVAzMlsoSEVBUDMyW2k1ID4+IDJdIHwgMCkgKyAyMCA+PiAyXSAmIDNdKGk1LCBpMywgaTIsIGkxLCBpNCwgaTYpOwogfQogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk5bWF4aUNsb2NrSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aigxMDQpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMjY1NjsKIEhFQVBGNjRbaTIgKyAyNCA+PiAzXSA9IDAuMDsKIEhFQVAzMltpMiArIDcyID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDY0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDY4ID4+IDJdID0gMDsKIEhFQVBGNjRbaTIgKyA4OCA+PiAzXSA9IDEyMC4wOwogSEVBUDMyW2kyICsgOTYgPj4gMl0gPSAxOwogSEVBUEY2NFtpMiArIDgwID4+IDNdID0gMi4wOwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxNjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpU2FtcGxlRnZSTlN0M19fMTZ2ZWN0b3JJZE5TM185YWxsb2NhdG9ySWRFRUVFaUV2UFMyX0pTOF9pRUU2aW52b2tlRVJLU0FfU0JfUFM3X2koaTEsIGkyLCBpNCwgaTUpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIGk1ID0gaTUgfCAwOwogdmFyIGkzID0gMCwgaTYgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTYgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTYgPj4gMSkgfCAwOwogaWYgKCEoaTYgJiAxKSkgewogIGk2ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpaVtpNiAmIDMxXShpMSwgaTQsIGk1KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk2ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlpW2k2ICYgMzFdKGkxLCBpNCwgaTUpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19fc3Rkb3V0X3dyaXRlKGkyLCBpMSwgaTMpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBpMyA9IGkzIHwgMDsKIHZhciBpNCA9IDAsIGk1ID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgODAgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTU7CiBIRUFQMzJbaTIgKyAzNiA+PiAyXSA9IDQ7CiBpZiAoKEhFQVAzMltpMiA+PiAyXSAmIDY0IHwgMCkgPT0gMCA/IChIRUFQMzJbaTQgPj4gMl0gPSBIRUFQMzJbaTIgKyA2MCA+PiAyXSwgSEVBUDMyW2k0ICsgNCA+PiAyXSA9IDIxNTA1LCBIRUFQMzJbaTQgKyA4ID4+IDJdID0gaTUgKyAxMiwgKF9fX3N5c2NhbGw1NCg1NCwgaTQgfCAwKSB8IDApICE9IDApIDogMCkgSEVBUDhbaTIgKyA3NSA+PiAwXSA9IC0xOwogaTQgPSBfX19zdGRpb193cml0ZShpMiwgaTEsIGkzKSB8IDA7CiBTVEFDS1RPUCA9IGk1OwogcmV0dXJuIGk0IHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlFbnZGZGRkZGRkbGlFZFBTMl9KZGRkZGRsaUVFNmludm9rZUVSS1M0X1M1X2RkZGRkbGkoaTIsIGkzLCBkNCwgZDUsIGQ2LCBkNywgZDgsIGk5LCBpMTApIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIGQ4ID0gK2Q4OwogaTkgPSBpOSB8IDA7CiBpMTAgPSBpMTAgfCAwOwogdmFyIGkxID0gMCwgaTExID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGkxMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpMTEgPj4gMSkgfCAwOwogaWYgKGkxMSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkZGRkaWlbaTEgJiAxXShpMiwgZDQsIGQ1LCBkNiwgZDcsIGQ4LCBpOSwgaTEwKSk7Cn0KCmZ1bmN0aW9uIF9fWk5LMTBfX2N4eGFiaXYxMjJfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYWJvdmVfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2UzRfaWIoaTcsIGk1LCBpNCwgaTMsIGk2LCBpOCkgewogaTcgPSBpNyB8IDA7CiBpNSA9IGk1IHwgMDsKIGk0ID0gaTQgfCAwOwogaTMgPSBpMyB8IDA7CiBpNiA9IGk2IHwgMDsKIGk4ID0gaTggfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwOwogaTIgPSBIRUFQMzJbaTcgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgPj4gODsKIGlmIChpMiAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTMgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIGk3ID0gSEVBUDMyW2k3ID4+IDJdIHwgMDsKIEZVTkNUSU9OX1RBQkxFX3ZpaWlpaWlbSEVBUDMyWyhIRUFQMzJbaTcgPj4gMl0gfCAwKSArIDIwID4+IDJdICYgM10oaTcsIGk1LCBpNCwgaTMgKyBpMSB8IDAsIChpMiAmIDIgfCAwKSAhPSAwID8gaTYgOiAyLCBpOCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyS0ZmaUVmUEtTMl9KaUVFNmludm9rZUVSS1M0X1M2X2koaTEsIGkyLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkzID0gMCwgaTUgPSAwLCBkNiA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIGQ2ID0gK0ZVTkNUSU9OX1RBQkxFX2RpaVtpNSAmIDMxXShpMSwgaTQpOwogIHJldHVybiArZDY7CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBkNiA9ICtGVU5DVElPTl9UQUJMRV9kaWlbaTUgJiAzMV0oaTEsIGk0KTsKICByZXR1cm4gK2Q2OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdlJOU3QzX18xNnZlY3RvcklmTlMzXzlhbGxvY2F0b3JJZkVFRUVFdlBTMl9KUzhfRUU2aW52b2tlRVJLU0FfU0JfUFM3XyhpMSwgaTIsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTZtYXhpTUZDQ0FuYWx5c2VySWRFRnZqampkZGpFdlBTM19KampqZGRqRUU2aW52b2tlRVJLUzVfUzZfampqZGRqKGkyLCBpMywgaTQsIGk1LCBpNiwgZDcsIGQ4LCBpOSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiBpNiA9IGk2IHwgMDsKIGQ3ID0gK2Q3OwogZDggPSArZDg7CiBpOSA9IGk5IHwgMDsKIHZhciBpMSA9IDAsIGkxMCA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpMTAgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTEwID4+IDEpIHwgMDsKIGlmIChpMTAgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlpaWRkaVtpMSAmIDFdKGkyLCBpNCwgaTUsIGk2LCBkNywgZDgsIGk5KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlNaXhGdmRSTlN0M19fMTZ2ZWN0b3JJZE5TM185YWxsb2NhdG9ySWRFRUVFZGRkRXZQUzJfSmRTOF9kZGRFRTZpbnZva2VFUktTQV9TQl9kUFM3X2RkZChpMiwgaTMsIGQ0LCBpNSwgZDYsIGQ3LCBkOCkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogaTUgPSBpNSB8IDA7CiBkNiA9ICtkNjsKIGQ3ID0gK2Q3OwogZDggPSArZDg7CiB2YXIgaTEgPSAwLCBpOSA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpOSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpOSA+PiAxKSB8IDA7CiBpZiAoaTkgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWRpZGRkW2kxICYgMV0oaTIsIGQ0LCBpNSwgZDYsIGQ3LCBkOCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aVNhbXBsZUZ2Uk5TdDNfXzE2dmVjdG9ySWROUzNfOWFsbG9jYXRvcklkRUVFRUV2UFMyX0pTOF9FRTZpbnZva2VFUktTQV9TQl9QUzdfKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGdlAxMG1heGlTYW1wbGVFdlBTNF9KUzZfRUU2aW52b2tlRVJLUzhfUzlfUzZfKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU1OU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVLRmp2RWpQS1M2X0pFRTZpbnZva2VFUktTOF9TQV8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUtGanZFalBLUzZfSkVFNmludm9rZUVSS1M4X1NBXyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFS0ZqdkVqUEtTNl9KRUU2aW52b2tlRVJLUzhfU0FfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGk0ID0gRlVOQ1RJT05fVEFCTEVfaWlbaTQgJiAxMjddKGkxKSB8IDA7CiAgcmV0dXJuIGk0IHwgMDsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGk0ID0gRlVOQ1RJT05fVEFCTEVfaWlbaTQgJiAxMjddKGkxKSB8IDA7CiAgcmV0dXJuIGk0IHwgMDsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU1OU3QzX18xNnZlY3RvckljTlMyXzlhbGxvY2F0b3JJY0VFRUVLRmp2RWpQS1M2X0pFRTZpbnZva2VFUktTOF9TQV8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRnZQMTBtYXhpU2FtcGxlRXZQUzRfSlM2X0VFNmludm9rZUVSS1M4X1M5X1M2XyhpMSwgaTIsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUZ2UDEwbWF4aVNhbXBsZUV2UFM0X0pTNl9FRTZpbnZva2VFUktTOF9TOV9TNl8oaTEsIGkyLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzM5MjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICBfX1pkbFB2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRkZURmZpRWZQUzJfSmlFRTZpbnZva2VFUktTNF9TNV9pKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMCwgZDYgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBkNiA9ICtGVU5DVElPTl9UQUJMRV9kaWlbaTUgJiAzMV0oaTEsIGk0KTsKICByZXR1cm4gK2Q2OwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDYgPSArRlVOQ1RJT05fVEFCTEVfZGlpW2k1ICYgMzFdKGkxLCBpNCk7CiAgcmV0dXJuICtkNjsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdjb252ZXJ0RmRpRWRQUzJfSmlFRTZpbnZva2VFUktTNF9TNV9pKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMCwgZDYgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBkNiA9ICtGVU5DVElPTl9UQUJMRV9kaWlbaTUgJiAzMV0oaTEsIGk0KTsKICByZXR1cm4gK2Q2OwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDYgPSArRlVOQ1RJT05fVEFCTEVfZGlpW2k1ICYgMzFdKGkxLCBpNCk7CiAgcmV0dXJuICtkNjsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIzNTA0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzQ0ODsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICBfX1pkbFB2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZkdkVkUFM0X0pFRTZpbnZva2VFUktTNl9TN18oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBkNSA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZkdkVkUFM0X0pFRTZpbnZva2VFUktTNl9TN18oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBkNSA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGZGRkZGlkRWRQUzRfSmRkZGlkRUU2aW52b2tlRVJLUzZfUzdfZGRkaWQoaTIsIGkzLCBkNCwgZDUsIGQ2LCBpNywgZDgpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBpNyA9IGk3IHwgMDsKIGQ4ID0gK2Q4OwogdmFyIGkxID0gMCwgaTkgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTkgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTkgPj4gMSkgfCAwOwogaWYgKGk5ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGRkaWRbaTEgJiAxXShpMiwgZDQsIGQ1LCBkNiwgaTcsIGQ4KSk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWNOU185YWxsb2NhdG9ySWNFRUU2cmVzaXplRWpSS2MoaTUsIGkzLCBpNCkgewogaTUgPSBpNSB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpNiA9IDAsIGk3ID0gMDsKIGk2ID0gaTUgKyA0IHwgMDsKIGk3ID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKIGkxID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKIGkyID0gaTcgLSBpMSB8IDA7CiBpZiAoaTIgPj4+IDAgPCBpMyA+Pj4gMCkgewogIF9fWk5TdDNfXzE2dmVjdG9ySWNOU185YWxsb2NhdG9ySWNFRUU4X19hcHBlbmRFalJLYyhpNSwgaTMgLSBpMiB8IDAsIGk0KTsKICByZXR1cm47CiB9CiBpZiAoaTIgPj4+IDAgPD0gaTMgPj4+IDApIHJldHVybjsKIGkxID0gaTEgKyBpMyB8IDA7CiBpZiAoKGk3IHwgMCkgPT0gKGkxIHwgMCkpIHJldHVybjsKIEhFQVAzMltpNiA+PiAyXSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTIyX19iYXNlX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2JlbG93X2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdmliKGk2LCBpNCwgaTMsIGk1LCBpNykgewogaTYgPSBpNiB8IDA7CiBpNCA9IGk0IHwgMDsKIGkzID0gaTMgfCAwOwogaTUgPSBpNSB8IDA7CiBpNyA9IGk3IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMDsKIGkyID0gSEVBUDMyW2k2ICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyID4+IDg7CiBpZiAoaTIgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlpaWlbSEVBUDMyWyhIRUFQMzJbaTYgPj4gMl0gfCAwKSArIDI0ID4+IDJdICYgN10oaTYsIGk0LCBpMyArIGkxIHwgMCwgKGkyICYgMiB8IDApICE9IDAgPyBpNSA6IDIsIGk3KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTRtYXhpRGlzdG9ydGlvbkZkZEVkUFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBkNCA9ICtGVU5DVElPTl9UQUJMRV9kaWRbaTUgJiAxNV0oaTEsIGQ0KTsKICByZXR1cm4gK2Q0OwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDQgPSArRlVOQ1RJT05fVEFCTEVfZGlkW2k1ICYgMTVdKGkxLCBkNCk7CiAgcmV0dXJuICtkNDsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEybWF4aUVudmVsb3BlRnZpZEV2UFMyX0ppZEVFNmludm9rZUVSS1M0X1M1X2lkKGkxLCBpMiwgaTQsIGQ1KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIHZhciBpMyA9IDAsIGk2ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk2ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk2ID4+IDEpIHwgMDsKIGlmICghKGk2ICYgMSkpIHsKICBpNiA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpaWRbaTYgJiAzMV0oaTEsIGk0LCBkNSk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNiA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlpZFtpNiAmIDMxXShpMSwgaTQsIGQ1KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aVNhbXBsZUZkZEVkUFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBkNCA9ICtGVU5DVElPTl9UQUJMRV9kaWRbaTUgJiAxNV0oaTEsIGQ0KTsKICByZXR1cm4gK2Q0OwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDQgPSArRlVOQ1RJT05fVEFCTEVfZGlkW2k1ICYgMTVdKGkxLCBkNCk7CiAgcmV0dXJuICtkNDsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAyMW1heGlGRlRPY3RhdmVBbmFseXplck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyOTEyOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlPc2NGZGRFZFBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QoaTEsIGkyLCBkNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQ0ID0gK2Q0OwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgZDQgPSArRlVOQ1RJT05fVEFCTEVfZGlkW2k1ICYgMTVdKGkxLCBkNCk7CiAgcmV0dXJuICtkNDsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGQ0ID0gK0ZVTkNUSU9OX1RBQkxFX2RpZFtpNSAmIDE1XShpMSwgZDQpOwogIHJldHVybiArZDQ7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aUR5bkZkZEVkUFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBkNCA9ICtGVU5DVElPTl9UQUJMRV9kaWRbaTUgJiAxNV0oaTEsIGQ0KTsKICByZXR1cm4gK2Q0OwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDQgPSArRlVOQ1RJT05fVEFCTEVfZGlkW2k1ICYgMTVdKGkxLCBkNCk7CiAgcmV0dXJuICtkNDsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aUxhZ0V4cElkRUZ2ZGRFdlBTM19KZGRFRTZpbnZva2VFUktTNV9TNl9kZChpMSwgaTIsIGQ0LCBkNSkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiB2YXIgaTMgPSAwLCBpNiA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNiA+PiAxKSB8IDA7CiBpZiAoIShpNiAmIDEpKSB7CiAgaTYgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRkW2k2ICYgMV0oaTEsIGQ0LCBkNSk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNiA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlkZFtpNiAmIDFdKGkxLCBkNCwgZDUpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTksxMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvMjdoYXNfdW5hbWJpZ3VvdXNfcHVibGljX2Jhc2VFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQdmkoaTQsIGkyLCBpMSwgaTMpIHsKIGk0ID0gaTQgfCAwOwogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkzID0gaTMgfCAwOwogaWYgKChpNCB8IDApID09IChIRUFQMzJbaTIgKyA4ID4+IDJdIHwgMCkpIF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzI0cHJvY2Vzc19mb3VuZF9iYXNlX2NsYXNzRVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUHZpKDAsIGkyLCBpMSwgaTMpOyBlbHNlIHsKICBpNCA9IEhFQVAzMltpNCArIDggPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpaWlpW0hFQVAzMlsoSEVBUDMyW2k0ID4+IDJdIHwgMCkgKyAyOCA+PiAyXSAmIDYzXShpNCwgaTIsIGkxLCBpMyk7CiB9CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzM5MjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlNRkNDQW5hbHlzZXJJZEVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMyX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMl9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzEzMjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICBfX1pkbFB2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIzNTA0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlNaXhGdmRSTlN0M19fMTZ2ZWN0b3JJZE5TM185YWxsb2NhdG9ySWRFRUVFZGRFdlBTMl9KZFM4X2RkRUU2aW52b2tlRVJLU0FfU0JfZFBTN19kZChpMiwgaTMsIGQ0LCBpNSwgZDYsIGQ3KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiB2YXIgaTEgPSAwLCBpOCA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpOCA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpOCA+PiAxKSB8IDA7CiBpZiAoaTggJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWRpZGRbaTEgJiAxXShpMiwgZDQsIGk1LCBkNiwgZDcpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyS0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjM0NDg7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTIyX19iYXNlX2NsYXNzX3R5cGVfaW5mbzI3aGFzX3VuYW1iaWd1b3VzX3B1YmxpY19iYXNlRVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUHZpKGk2LCBpNCwgaTMsIGk1KSB7CiBpNiA9IGk2IHwgMDsKIGk0ID0gaTQgfCAwOwogaTMgPSBpMyB8IDA7CiBpNSA9IGk1IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMDsKIGkyID0gSEVBUDMyW2k2ICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyID4+IDg7CiBpZiAoaTIgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpNiA+PiAyXSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlpaVtIRUFQMzJbKEhFQVAzMltpNiA+PiAyXSB8IDApICsgMjggPj4gMl0gJiA2M10oaTYsIGk0LCBpMyArIGkxIHwgMCwgKGkyICYgMiB8IDApICE9IDAgPyBpNSA6IDIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGdmRFdlBTNF9KZEVFNmludm9rZUVSS1M2X1M3X2QoaTEsIGkyLCBkNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQ0ID0gK2Q0OwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlkW2k1ICYgNjNdKGkxLCBkNCk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlkW2k1ICYgNjNdKGkxLCBkNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyS0ZmdkVFM2dldElTMl9FRWZSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBkNSA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZ2ZEV2UFM0X0pkRUU2aW52b2tlRVJLUzZfUzdfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fX3Rvd3JpdGUoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMCwgaTMgPSAwOwogaTEgPSBpMiArIDc0IHwgMDsKIGkzID0gSEVBUDhbaTEgPj4gMF0gfCAwOwogSEVBUDhbaTEgPj4gMF0gPSBpMyArIDI1NSB8IGkzOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaWYgKCEoaTEgJiA4KSkgewogIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogIGkxID0gSEVBUDMyW2kyICsgNDQgPj4gMl0gfCAwOwogIEhFQVAzMltpMiArIDI4ID4+IDJdID0gaTE7CiAgSEVBUDMyW2kyICsgMjAgPj4gMl0gPSBpMTsKICBIRUFQMzJbaTIgKyAxNiA+PiAyXSA9IGkxICsgKEhFQVAzMltpMiArIDQ4ID4+IDJdIHwgMCk7CiAgaTEgPSAwOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSBpMSB8IDMyOwogIGkxID0gLTE7CiB9CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpRGlzdG9ydGlvbk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxOTIwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURlbGF5bGluZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIwODg0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURDQmxvY2tlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyMTg0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aUxhZ0V4cElkRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzJfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMyX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxMjE2OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpTGFnRXhwSWRFS0ZkdkVkUEtTM19KRUU2aW52b2tlRVJLUzVfUzdfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMCwgZDUgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEybWF4aUVudmVsb3BlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjA3OTI7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTFtYXhpRmxhbmdlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyMDA4OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aVNhbXBsZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxMzEyOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aUZpbHRlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIwOTg4OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aUNob3J1c04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyMDk2OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGYlJOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVqUktpRWJTN19KalM5X0VFNmludm9rZUVQU0JfUFM2X2ppKGkzLCBpNCwgaTEsIGkyKSB7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpNSA9IDAsIGk2ID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk2ID0gaTU7CiBpMyA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBIRUFQMzJbaTYgPj4gMl0gPSBpMjsKIGk0ID0gRlVOQ1RJT05fVEFCTEVfaWlpaVtpMyAmIDE1XShpNCwgaTEsIGk2KSB8IDA7CiBTVEFDS1RPUCA9IGk1OwogcmV0dXJuIGk0IHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpU2FtcGxlRmJ2RWJQUzJfSkVFNmludm9rZUVSS1M0X1M1XyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGYlJOU3QzX18xNnZlY3RvckljTlMyXzlhbGxvY2F0b3JJY0VFRUVqUktjRWJTN19KalM5X0VFNmludm9rZUVQU0JfUFM2X2pjKGkzLCBpNCwgaTEsIGkyKSB7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpNSA9IDAsIGk2ID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk2ID0gaTU7CiBpMyA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBIRUFQOFtpNiA+PiAwXSA9IGkyOwogaTQgPSBGVU5DVElPTl9UQUJMRV9paWlpW2kzICYgMTVdKGk0LCBpMSwgaTYpIHwgMDsKIFNUQUNLVE9QID0gaTU7CiByZXR1cm4gaTQgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTEybWF4aVNldHRpbmdzS0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNMTJtYXhpRW52ZWxvcGVLRml2RUUzZ2V0SVMyX0VFaVJLUzRfUktUXyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gY29weVRlbXBEb3VibGUoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDhbdGVtcERvdWJsZVB0ciA+PiAwXSA9IEhFQVA4W2kxID4+IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDEgPj4gMF0gPSBIRUFQOFtpMSArIDEgPj4gMF07CiBIRUFQOFt0ZW1wRG91YmxlUHRyICsgMiA+PiAwXSA9IEhFQVA4W2kxICsgMiA+PiAwXTsKIEhFQVA4W3RlbXBEb3VibGVQdHIgKyAzID4+IDBdID0gSEVBUDhbaTEgKyAzID4+IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDQgPj4gMF0gPSBIRUFQOFtpMSArIDQgPj4gMF07CiBIRUFQOFt0ZW1wRG91YmxlUHRyICsgNSA+PiAwXSA9IEhFQVA4W2kxICsgNSA+PiAwXTsKIEhFQVA4W3RlbXBEb3VibGVQdHIgKyA2ID4+IDBdID0gSEVBUDhbaTEgKyA2ID4+IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDcgPj4gMF0gPSBIRUFQOFtpMSArIDcgPj4gMF07Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aVNuYXJlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI0NDg7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlDbG9ja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyNjI0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGYlJOU3QzX18xNnZlY3RvcklmTlMyXzlhbGxvY2F0b3JJZkVFRUVqUktmRWJTN19KalM5X0VFNmludm9rZUVQU0JfUFM2X2pmKGkzLCBpNCwgaTEsIGQyKSB7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIHZhciBpNSA9IDAsIGk2ID0gMDsKIGk1ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk2ID0gaTU7CiBpMyA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBIRUFQRjMyW2k2ID4+IDJdID0gZDI7CiBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpaWlbaTMgJiAxNV0oaTQsIGkxLCBpNikgfCAwOwogU1RBQ0tUT1AgPSBpNTsKIHJldHVybiBpNCB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNUZ1bmN0aW9uSW52b2tlcklQRmJSTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFalJLZEViUzdfSmpTOV9FRTZpbnZva2VFUFNCX1BTNl9qZChpMywgaTQsIGkxLCBkMikgewogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiB2YXIgaTUgPSAwLCBpNiA9IDA7CiBpNSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpNiA9IGk1OwogaTMgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogSEVBUEY2NFtpNiA+PiAzXSA9IGQyOwogaTQgPSBGVU5DVElPTl9UQUJMRV9paWlpW2kzICYgMTVdKGk0LCBpMSwgaTYpIHwgMDsKIFNUQUNLVE9QID0gaTU7CiByZXR1cm4gaTQgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU05bWF4aUNsb2NrRmJ2RWJQUzJfSkVFNmludm9rZUVSS1M0X1M1XyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpU2FtcGxlRmR2RWRQUzJfSkVFNmludm9rZUVSS1M0X1M1XyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDAsIGQ1ID0gMC4wOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNMTBtYXhpTGFnRXhwSWRFS0ZkdkVFM2dldElTM19FRWRSS1M1X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBkNSA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlLaWNrTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjIzNjA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlJRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI5Njg7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlIYXRzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI1MzY7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTNtYXhpRGVsYXlsaW5lMmRsRWRpZChpNiwgZDUsIGkyLCBkNCkgewogaTYgPSBpNiB8IDA7CiBkNSA9ICtkNTsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTEgPSAwLCBpMyA9IDA7CiBpMyA9IGk2ICsgOCB8IDA7CiBpMSA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiBpZiAoKGkxIHwgMCkgPj0gKGkyIHwgMCkpIHsKICBIRUFQMzJbaTMgPj4gMl0gPSAwOwogIGkxID0gMDsKIH0KIGkyID0gaTYgKyA0MCArIChpMSA8PCAzKSB8IDA7CiBpNiA9IGk2ICsgMzIgfCAwOwogSEVBUEY2NFtpNiA+PiAzXSA9ICtIRUFQRjY0W2kyID4+IDNdOwogSEVBUEY2NFtpMiA+PiAzXSA9IGQ1ICogZDQgKiAuNSArICtIRUFQRjY0W2kyID4+IDNdICogZDQ7CiBIRUFQMzJbaTMgPj4gMl0gPSAoSEVBUDMyW2kzID4+IDJdIHwgMCkgKyAxOwogcmV0dXJuICsoK0hFQVBGNjRbaTYgPj4gM10pOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMW1heGlGbGFuZ2VyRmRkamRkZEVkUFMyX0pkamRkZEVFNmludm9rZUVSS1M0X1M1X2RqZGRkKGkyLCBpMywgZDQsIGk1LCBkNiwgZDcsIGQ4KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiBkOCA9ICtkODsKIHZhciBpMSA9IDAsIGk5ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk5ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk5ID4+IDEpIHwgMDsKIGlmIChpOSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRpZGRkW2kxICYgM10oaTIsIGQ0LCBpNSwgZDYsIGQ3LCBkOCkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTEybWF4aUVudmVsb3BlS0ZkdkVFM2dldElTMl9FRWRSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBkNSA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlTVkZOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMjI2MDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICBfX1pkbFB2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU9zY04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIwNjY0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWl4TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjEwODQ7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNYXBOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMTQ1NjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICBfX1pkbFB2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIzMDI0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRW52TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjE2OTY7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgX19aZGxQdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlEeW5OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMTU1NjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICBfX1pkbFB2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3Y29udmVydE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxODQ4OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIF9fWmRsUHYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI5MTI7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU05bWF4aVNuYXJlRmR2RWRQUzJfSkVFNmludm9rZUVSS1M0X1M1XyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDAsIGQ1ID0gMC4wOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRmRkZGlkRWRQUzRfSmRkaWRFRTZpbnZva2VFUktTNl9TN19kZGlkKGkyLCBpMywgZDQsIGQ1LCBpNiwgZDcpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogaTYgPSBpNiB8IDA7CiBkNyA9ICtkNzsKIHZhciBpMSA9IDAsIGk4ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk4ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk4ID4+IDEpIHwgMDsKIGlmIChpOCAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkaWRbaTEgJiAzXShpMiwgZDQsIGQ1LCBpNiwgZDcpKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpQ2hvcnVzRmRkamRkZEVkUFMyX0pkamRkZEVFNmludm9rZUVSS1M0X1M1X2RqZGRkKGkyLCBpMywgZDQsIGk1LCBkNiwgZDcsIGQ4KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiBkOCA9ICtkODsKIHZhciBpMSA9IDAsIGk5ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk5ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk5ID4+IDEpIHwgMDsKIGlmIChpOSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRpZGRkW2kxICYgM10oaTIsIGQ0LCBpNSwgZDYsIGQ3LCBkOCkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU04bWF4aUtpY2tGZHZFZFBTMl9KRUU2aW52b2tlRVJLUzRfUzVfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMCwgZDUgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlIYXRzRmR2RWRQUzJfSkVFNmludm9rZUVSS1M0X1M1XyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDAsIGQ1ID0gMC4wOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0KIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRW52RmRkZGRsaUVkUFMyX0pkZGRsaUVFNmludm9rZUVSS1M0X1M1X2RkZGxpKGkyLCBpMywgZDQsIGQ1LCBkNiwgaTcsIGk4KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogaTcgPSBpNyB8IDA7CiBpOCA9IGk4IHwgMDsKIHZhciBpMSA9IDAsIGk5ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk5ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk5ID4+IDEpIHwgMDsKIGlmIChpOSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkZGlpW2kxICYgMV0oaTIsIGQ0LCBkNSwgZDYsIGk3LCBpOCkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRmRkZGlkRWRQUzRfSmRkaWRFRTZpbnZva2VFUktTNl9TN19kZGlkKGkyLCBpMywgZDQsIGQ1LCBpNiwgZDcpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogaTYgPSBpNiB8IDA7CiBkNyA9ICtkNzsKIHZhciBpMSA9IDAsIGk4ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk4ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk4ID4+IDEpIHwgMDsKIGlmIChpOCAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkaWRbaTEgJiAzXShpMiwgZDQsIGQ1LCBpNiwgZDcpKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU05bWF4aUNsb2NrS0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNOW1heGlDbG9ja0tGYnZFRTNnZXRJUzJfRUViUktTNF9SS1RfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGk0ID0gRlVOQ1RJT05fVEFCTEVfaWlbaTQgJiAxMjddKGkxKSB8IDA7CiAgcmV0dXJuIGk0IHwgMDsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGk0ID0gRlVOQ1RJT05fVEFCTEVfaWlbaTQgJiAxMjddKGkxKSB8IDA7CiAgcmV0dXJuIGk0IHwgMDsKIH0KIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTEwbWF4aUZpbHRlcktGZHZFRTNnZXRJUzJfRUVkUktTNF9SS1RfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMCwgZDUgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aU1GQ0NBbmFseXNlcklkRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzJfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMyX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIzMTMyOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlPc2NGZHZFZFBTMl9KRUU2aW52b2tlRVJLUzRfUzVfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMCwgZDUgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlGRlRGZnZFZlBTMl9KRUU2aW52b2tlRVJLUzRfUzVfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMCwgZDUgPSAwLjA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBkNSA9ICtGVU5DVElPTl9UQUJMRV9kaVtpNCAmIDMxXShpMSk7CiAgcmV0dXJuICtkNTsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfQogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU05bWF4aUNsb2NrS0ZkdkVFM2dldElTMl9FRWRSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBkNSA9IDAuMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIGQ1ID0gK0ZVTkNUSU9OX1RBQkxFX2RpW2k0ICYgMzFdKGkxKTsKICByZXR1cm4gK2Q1OwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgZDUgPSArRlVOQ1RJT05fVEFCTEVfZGlbaTQgJiAzMV0oaTEpOwogIHJldHVybiArZDU7CiB9CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTdtYXhpRkZUS0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgaTQgPSBGVU5DVElPTl9UQUJMRV9paVtpNCAmIDEyN10oaTEpIHwgMDsKICByZXR1cm4gaTQgfCAwOwogfQogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNN21heGlFbnZLRml2RUUzZ2V0SVMyX0VFaVJLUzRfUktUXyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBpNCA9IEZVTkNUSU9OX1RBQkxFX2lpW2k0ICYgMTI3XShpMSkgfCAwOwogIHJldHVybiBpNCB8IDA7CiB9CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlEeW5GZGRkbGRkRWRQUzJfSmRkbGRkRUU2aW52b2tlRVJLUzRfUzVfZGRsZGQoaTIsIGkzLCBkNCwgZDUsIGk2LCBkNywgZDgpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogaTYgPSBpNiB8IDA7CiBkNyA9ICtkNzsKIGQ4ID0gK2Q4OwogdmFyIGkxID0gMCwgaTkgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTkgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTkgPj4gMSkgfCAwOwogaWYgKGk5ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGRpZGRbaTEgJiAxXShpMiwgZDQsIGQ1LCBpNiwgZDcsIGQ4KSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdmlFRTNzZXRJUzJfRUV2UktTNF9SVF9pKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpRGlzdG9ydGlvbk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxOTIwOwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlTVkZGZGRkZGRkRWRQUzJfSmRkZGRkRUU2aW52b2tlRVJLUzRfUzVfZGRkZGQoaTIsIGkzLCBkNCwgZDUsIGQ2LCBkNywgZDgpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIGQ4ID0gK2Q4OwogdmFyIGkxID0gMCwgaTkgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTkgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTkgPj4gMSkgfCAwOwogaWYgKGk5ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGRkZGRbaTEgJiAzXShpMiwgZDQsIGQ1LCBkNiwgZDcsIGQ4KSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRHluRmRkZGRkZEVkUFMyX0pkZGRkZEVFNmludm9rZUVSS1M0X1M1X2RkZGRkKGkyLCBpMywgZDQsIGQ1LCBkNiwgZDcsIGQ4KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiBkOCA9ICtkODsKIHZhciBpMSA9IDAsIGk5ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk5ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk5ID4+IDEpIHwgMDsKIGlmIChpOSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkZGRkW2kxICYgM10oaTIsIGQ0LCBkNSwgZDYsIGQ3LCBkOCkpOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRGVsYXlsaW5lTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjA4ODQ7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRENCbG9ja2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjIxODQ7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpTGFnRXhwSWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjEyMTY7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTJtYXhpRW52ZWxvcGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMDc5MjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdmZFRTNzZXRJUzJfRUV2UktTNF9SVF9mKGkxLCBpMiwgZDQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkNCA9ICtkNDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDExbWF4aUZsYW5nZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMjAwODsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlTYW1wbGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMTMxMjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMDk4ODsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlDaG9ydXNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMjA5NjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTEzbWF4aURDQmxvY2tlckpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDA7CiBpMiA9IF9fWm53aigzMikgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIyMjE2OwogaTMgPSBpMiArIDE2IHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTMgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMyArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kzICsgMTIgPj4gMl0gPSAwOwogSEVBUDMyW2kxID4+IDJdID0gaTM7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTltYXhpQ2xvY2tGdmlFdlBTMl9KaUVFNmludm9rZUVSS1M0X1M1X2koaTEsIGkyLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpTWl4RnZkUk5TdDNfXzE2dmVjdG9ySWROUzNfOWFsbG9jYXRvcklkRUVFRWRFdlBTMl9KZFM4X2RFRTZpbnZva2VFUktTQV9TQl9kUFM3X2QoaTIsIGkzLCBkNCwgaTUsIGQ2KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogdmFyIGkxID0gMCwgaTcgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTcgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTcgPj4gMSkgfCAwOwogaWYgKGk3ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlkaWRbaTEgJiAxXShpMiwgZDQsIGk1LCBkNik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aUxhZ0V4cElkRUZ2ZEV2UFMzX0pkRUU2aW52b2tlRVJLUzVfUzZfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aVNuYXJlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI0NDg7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlDbG9ja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyNjI0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU0xMm1heGlTZXR0aW5nc0Z2aUVFM3NldElTMl9FRXZSS1M0X1JUX2koaTEsIGkyLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMTJtYXhpRW52ZWxvcGVGdmlFRTNzZXRJUzJfRUV2UktTNF9SVF9pKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlLaWNrTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjIzNjA7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlJRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI5Njg7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlIYXRzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjI1MzY7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlTVkZOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMjI2MDsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU9zY04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIwNjY0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWl4TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjEwODQ7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNYXBOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMTQ1NjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIzMDI0OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRW52TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogSEVBUDMyW2kxID4+IDJdID0gMjE2OTY7CiBfX1RIUkVXX18gPSAwOwogaW52b2tlX3ZpKDI4NiwgSEVBUDMyW2kxICsgMTYgPj4gMl0gfCAwKTsKIGkyID0gX19USFJFV19fOwogX19USFJFV19fID0gMDsKIGlmIChpMiAmIDEpIHsKICBpMiA9IF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoKDApIHwgMDsKICBfX19jbGFuZ19jYWxsX3Rlcm1pbmF0ZShpMik7CiB9IGVsc2UgewogIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlEeW5OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMTU1NjsKIF9fVEhSRVdfXyA9IDA7CiBpbnZva2VfdmkoMjg2LCBIRUFQMzJbaTEgKyAxNiA+PiAyXSB8IDApOwogaTIgPSBfX1RIUkVXX187CiBfX1RIUkVXX18gPSAwOwogaWYgKGkyICYgMSkgewogIGkyID0gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2goMCkgfCAwOwogIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkyKTsKIH0gZWxzZSB7CiAgX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3Y29udmVydE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxODQ4OwogX19USFJFV19fID0gMDsKIGludm9rZV92aSgyODYsIEhFQVAzMltpMSArIDE2ID4+IDJdIHwgMCk7CiBpMiA9IF9fVEhSRVdfXzsKIF9fVEhSRVdfXyA9IDA7CiBpZiAoaTIgJiAxKSB7CiAgaTIgPSBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCgwKSB8IDA7CiAgX19fY2xhbmdfY2FsbF90ZXJtaW5hdGUoaTIpOwogfSBlbHNlIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlJRkZUTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkzKSB7CiBpMyA9IGkzIHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMDsKIEhFQVAzMltpMyA+PiAyXSA9IDIyOTQwOwogaTEgPSBIRUFQMzJbaTMgKyA0OCA+PiAyXSB8IDA7CiBpZiAoaTEpIHsKICBpMiA9IEhFQVAzMltpMSArIDggPj4gMl0gfCAwOwogIGlmIChpMikgX19aZGFQdihpMik7CiAgX19aZGxQdihpMSk7CiB9CiBpMSA9IEhFQVAzMltpMyArIDEyID4+IDJdIHwgMDsKIGlmICghaTEpIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTMpOwogIF9fWmRsUHYoaTMpOwogIHJldHVybjsKIH0KIF9fWmRhUHYoaTEpOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkzKTsKIF9fWmRsUHYoaTMpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU05bWF4aVNuYXJlRnZkRXZQUzJfSmRFRTZpbnZva2VFUktTNF9TNV9kKGkxLCBpMiwgZDQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkNCA9ICtkNDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOW1heGlDbG9ja0Z2ZEV2UFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTThtYXhpS2lja0Z2ZEV2UFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTThtYXhpSGF0c0Z2ZEV2UFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEzbWF4aURlbGF5bGluZUZkZGlkaUVkUFMyX0pkaWRpRUU2aW52b2tlRVJLUzRfUzVfZGlkaShpMiwgaTMsIGQ0LCBpNSwgZDYsIGk3KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogaTcgPSBpNyB8IDA7CiB2YXIgaTEgPSAwLCBpOCA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpOCA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpOCA+PiAxKSB8IDA7CiBpZiAoaTggJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGlkaWRpW2kxICYgMV0oaTIsIGQ0LCBpNSwgZDYsIGk3KSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNOW1heGlDbG9ja0Z2aUVFM3NldElTMl9FRXZSS1M0X1JUX2koaTEsIGkyLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMTBtYXhpTGFnRXhwSWRFRnZkRUUzc2V0SVMzX0VFdlJLUzVfUlRfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpT3NjRnZkRXZQUzJfSmRFRTZpbnZva2VFUktTNF9TNV9kKGkxLCBpMiwgZDQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkNCA9ICtkNDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlFbnZGdmRFdlBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QoaTEsIGkyLCBkNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQ0ID0gK2Q0OwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlkW2k1ICYgNjNdKGkxLCBkNCk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlkW2k1ICYgNjNdKGkxLCBkNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aUR5bkZ2ZEV2UFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZChpMSwgaTIsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDQgPSArZDQ7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNSA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNSA+PiAxKSB8IDA7CiBpZiAoIShpNSAmIDEpKSB7CiAgaTUgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWRbaTUgJiA2M10oaTEsIGQ0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMTJtYXhpRW52ZWxvcGVGdmRFRTNzZXRJUzJfRUV2UktTNF9SVF9kKGkxLCBpMiwgZDQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkNCA9ICtkNDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpZFtpNSAmIDYzXShpMSwgZDQpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU03bWF4aUZGVEZ2aUVFM3NldElTMl9FRXZSS1M0X1JUX2koaTEsIGkyLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGk0ID0gaTQgfCAwOwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlpW2k1ICYgMTI3XShpMSwgaTQpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTUgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNN21heGlFbnZGdmlFRTNzZXRJUzJfRUV2UktTNF9SVF9pKGkxLCBpMiwgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMyA9IDAsIGk1ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk1ID4+IDEpIHwgMDsKIGlmICghKGk1ICYgMSkpIHsKICBpNSA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpaVtpNSAmIDEyN10oaTEsIGk0KTsKICByZXR1cm47CiB9IGVsc2UgewogIGk1ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aWlbaTUgJiAxMjddKGkxLCBpNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJTZXR0ZXJQb2xpY3lJTTEwbWF4aUZpbHRlckZ2ZEVFM3NldElTMl9FRXZSS1M0X1JUX2QoaTEsIGkyLCBkNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQ0ID0gK2Q0OwogdmFyIGkzID0gMCwgaTUgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTUgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTUgPj4gMSkgfCAwOwogaWYgKCEoaTUgJiAxKSkgewogIGk1ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlkW2k1ICYgNjNdKGkxLCBkNCk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNSA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlkW2k1ICYgNjNdKGkxLCBkNCk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU04bWF4aUlGRlRGZlJOU3QzX18xNnZlY3RvcklmTlMzXzlhbGxvY2F0b3JJZkVFRUVTOF9FZlBTMl9KUzhfUzhfRUU2aW52b2tlRVJLU0FfU0JfUFM3X1NGXyhpMiwgaTMsIGk0LCBpNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpNiA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNiA+PiAxKSB8IDA7CiBpZiAoaTYgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGlpaVtpMSAmIDddKGkyLCBpNCwgaTUpKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGZGRkaUVkUFM0X0pkZGlFRTZpbnZva2VFUktTNl9TN19kZGkoaTIsIGkzLCBkNCwgZDUsIGk2KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgaTcgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTcgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTcgPj4gMSkgfCAwOwogaWYgKGk3ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGRpW2kxICYgMV0oaTIsIGQ0LCBkNSwgaTYpKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTJtYXhpRW52ZWxvcGVGZGlSTlN0M19fMTZ2ZWN0b3JJZE5TM185YWxsb2NhdG9ySWRFRUVFRWRQUzJfSmlTOF9FRTZpbnZva2VFUktTQV9TQl9pUFM3XyhpMiwgaTMsIGk0LCBpNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpNiA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNiA+PiAxKSB8IDA7CiBpZiAoaTYgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGlpaVtpMSAmIDddKGkyLCBpNCwgaTUpKTsKfQoKZnVuY3Rpb24gX19aTjdtYXhpT3NjN3NpbmVidWZFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiB2YXIgaTMgPSAwLCBkNCA9IDAuMDsKIGkzID0gaTIgKyA4IHwgMDsKIGQ0ID0gNTEyLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvICgrSEVBUEYzMls1MDgyXSAqIGQxKSkgKyArSEVBUEY2NFtpMyA+PiAzXTsKIGQ0ID0gIShkNCA+PSA1MTEuMCkgPyBkNCA6IGQ0ICsgLTUxMi4wOwogSEVBUEY2NFtpMyA+PiAzXSA9IGQ0OwogZDEgPSBkNCAtICtNYXRoX2Zsb29yKCtkNCk7CiBpMyA9IH5+ZDQ7CiBkMSA9ICtIRUFQRjY0WzggKyAoaTMgKyAyIDw8IDMpID4+IDNdICogZDEgKyArSEVBUEY2NFs4ICsgKGkzICsgMSA8PCAzKSA+PiAzXSAqICgxLjAgLSBkMSk7CiBIRUFQRjY0W2kyICsgMzIgPj4gM10gPSBkMTsKIHJldHVybiArZDE7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTEwbWF4aUxhZ0V4cElkRUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVM0X0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDA7CiBpMiA9IF9fWm53aig0MCkgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIxMjQ4OwogaTMgPSBpMiArIDE2IHwgMDsKIEhFQVBGNjRbaTMgPj4gM10gPSAuNTsKIEhFQVBGNjRbaTIgKyAyNCA+PiAzXSA9IC41OwogSEVBUEY2NFtpMiArIDMyID4+IDNdID0gMC4wOwogSEVBUDMyW2kxID4+IDJdID0gaTM7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTE2bWF4aU1GQ0NBbmFseXNlcklkRUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVM0X0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDA7CiBpMiA9IF9fWm53aig2NCkgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIzMTA0OwogaTMgPSBpMiArIDE2IHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA1MiA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA2MCA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSBpMzsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdmZpaUV2UFMyX0pmaWlFRTZpbnZva2VFUktTNF9TNV9maWkoaTIsIGkzLCBkNCwgaTUsIGk2KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgaTcgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTcgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTcgPj4gMSkgfCAwOwogaWYgKGk3ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlkaWlbaTEgJiAxXShpMiwgZDQsIGk1LCBpNik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlTYW1wbGU4cGxheU9uY2VFdihpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwLCBkMyA9IDAuMDsKIGkxID0gaTIgKyA0MCB8IDA7CiBkMyA9ICtIRUFQRjY0W2kxID4+IDNdICsgMS4wOwogSEVBUEY2NFtpMSA+PiAzXSA9IGQzOwogaTEgPSB+fmQzOwogaWYgKChpMSB8IDApID49IChIRUFQMzJbaTIgKyAxMDggPj4gMl0gfCAwKSkgewogIGQzID0gMC4wOwogIGkyID0gaTIgKyA2NCB8IDA7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQzOwogIHJldHVybiArZDM7CiB9CiBkMyA9ICsoSEVBUDE2WyhIRUFQMzJbaTIgKyAxMjggPj4gMl0gfCAwKSArIChpMSA8PCAxKSA+PiAxXSB8IDApIC8gMzI3NjcuMDsKIGkyID0gaTIgKyA2NCB8IDA7CiBIRUFQRjY0W2kyID4+IDNdID0gZDM7CiByZXR1cm4gK2QzOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlTYW1wbGVGdnZFdlBTMl9KRUU2aW52b2tlRVJLUzRfUzVfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpW2k0ICYgNTExXShpMSk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlbaTQgJiA1MTFdKGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTltYXhpU25hcmVGdnZFdlBTMl9KRUU2aW52b2tlRVJLUzRfUzVfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpW2k0ICYgNTExXShpMSk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlbaTQgJiA1MTFdKGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTltYXhpQ2xvY2tGdnZFdlBTMl9KRUU2aW52b2tlRVJLUzRfUzVfKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMDsKIGkzID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGk0ID0gSEVBUDMyW2kxICsgNCA+PiAyXSB8IDA7CiBpMSA9IGkyICsgKGk0ID4+IDEpIHwgMDsKIGlmICghKGk0ICYgMSkpIHsKICBpNCA9IGkzOwogIEZVTkNUSU9OX1RBQkxFX3ZpW2k0ICYgNTExXShpMSk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBpNCA9IEhFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyBpMyA+PiAyXSB8IDA7CiAgRlVOQ1RJT05fVEFCTEVfdmlbaTQgJiA1MTFdKGkxKTsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTThtYXhpS2lja0Z2dkV2UFMyX0pFRTZpbnZva2VFUktTNF9TNV8oaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTQgPSBIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMDsKIGkxID0gaTIgKyAoaTQgPj4gMSkgfCAwOwogaWYgKCEoaTQgJiAxKSkgewogIGk0ID0gaTM7CiAgRlVOQ1RJT05fVEFCTEVfdmlbaTQgJiA1MTFdKGkxKTsKICByZXR1cm47CiB9IGVsc2UgewogIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIGkzID4+IDJdIHwgMDsKICBGVU5DVElPTl9UQUJMRV92aVtpNCAmIDUxMV0oaTEpOwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlIYXRzRnZ2RXZQUzJfSkVFNmludm9rZUVSS1M0X1M1XyhpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiB2YXIgaTMgPSAwLCBpNCA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpNCA9IEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwogaTEgPSBpMiArIChpNCA+PiAxKSB8IDA7CiBpZiAoIShpNCAmIDEpKSB7CiAgaTQgPSBpMzsKICBGVU5DVElPTl9UQUJMRV92aVtpNCAmIDUxMV0oaTEpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgaTQgPSBIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgaTMgPj4gMl0gfCAwOwogIEZVTkNUSU9OX1RBQkxFX3ZpW2k0ICYgNTExXShpMSk7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xM21heGlEZWxheWxpbmVGZGRpZEVkUFMyX0pkaWRFRTZpbnZva2VFUktTNF9TNV9kaWQoaTIsIGkzLCBkNCwgaTUsIGQ2KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogdmFyIGkxID0gMCwgaTcgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTcgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTcgPj4gMSkgfCAwOwogaWYgKGk3ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGlkW2kxICYgMV0oaTIsIGQ0LCBpNSwgZDYpKTsKfQoKZnVuY3Rpb24gX19fY3hhX2Nhbl9jYXRjaChpMSwgaTIsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTQgPSBpNCB8IDA7CiB2YXIgaTMgPSAwLCBpNSA9IDA7CiBpNSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpMyA9IGk1OwogSEVBUDMyW2kzID4+IDJdID0gSEVBUDMyW2k0ID4+IDJdOwogaTEgPSBGVU5DVElPTl9UQUJMRV9paWlpW0hFQVAzMlsoSEVBUDMyW2kxID4+IDJdIHwgMCkgKyAxNiA+PiAyXSAmIDE1XShpMSwgaTIsIGkzKSB8IDA7CiBpZiAoaTEpIEhFQVAzMltpNCA+PiAyXSA9IEhFQVAzMltpMyA+PiAyXTsKIFNUQUNLVE9QID0gaTU7CiByZXR1cm4gaTEgJiAxIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlJRkZUTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkzKSB7CiBpMyA9IGkzIHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMDsKIEhFQVAzMltpMyA+PiAyXSA9IDIyOTQwOwogaTEgPSBIRUFQMzJbaTMgKyA0OCA+PiAyXSB8IDA7CiBpZiAoaTEpIHsKICBpMiA9IEhFQVAzMltpMSArIDggPj4gMl0gfCAwOwogIGlmIChpMikgX19aZGFQdihpMik7CiAgX19aZGxQdihpMSk7CiB9CiBpMSA9IEhFQVAzMltpMyArIDEyID4+IDJdIHwgMDsKIGlmICghaTEpIHsKICBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTMpOwogIHJldHVybjsKIH0KIF9fWmRhUHYoaTEpOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkzKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlJRkZURnZpaWlFdlBTMl9KaWlpRUU2aW52b2tlRVJLUzRfUzVfaWlpKGkyLCBpMywgaTQsIGk1LCBpNikgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiBpNiA9IGk2IHwgMDsKIHZhciBpMSA9IDAsIGk3ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk3ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk3ID4+IDEpIHwgMDsKIGlmIChpNyAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIEZVTkNUSU9OX1RBQkxFX3ZpaWlpW2kxICYgNjNdKGkyLCBpNCwgaTUsIGk2KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlGRlRGdmlpaUV2UFMyX0ppaWlFRTZpbnZva2VFUktTNF9TNV9paWkoaTIsIGkzLCBpNCwgaTUsIGk2KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiBpNSA9IGk1IHwgMDsKIGk2ID0gaTYgfCAwOwogdmFyIGkxID0gMCwgaTcgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTcgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTcgPj4gMSkgfCAwOwogaWYgKGk3ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlpaWlbaTEgJiA2M10oaTIsIGk0LCBpNSwgaTYpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQxM3NldE1hZ25pdHVkZXNFTlN0M19fMTZ2ZWN0b3JJZk5TMF85YWxsb2NhdG9ySWZFRUVFKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgKyA0IHwgMDsKIGlmICgoaTEgfCAwKSA9PSAoaTIgfCAwKSkgcmV0dXJuOwogX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTZhc3NpZ25JUGZFRU5TXzllbmFibGVfaWZJWGFhc3IyMV9faXNfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlc3IxNmlzX2NvbnN0cnVjdGlibGVJZk5TXzE1aXRlcmF0b3JfdHJhaXRzSVM3X0U5cmVmZXJlbmNlRUVFNXZhbHVlRXZFNHR5cGVFUzdfUzdfKGkxLCBIRUFQMzJbaTIgPj4gMl0gfCAwLCBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWm53aihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogaTIgPSAoaTEgfCAwKSA9PSAwID8gMSA6IGkxOwogaTEgPSBfbWFsbG9jKGkyKSB8IDA7CiBMMSA6IGRvIGlmICghaTEpIHsKICB3aGlsZSAoMSkgewogICBpMSA9IF9fWlN0MTVnZXRfbmV3X2hhbmRsZXJ2KCkgfCAwOwogICBpZiAoIWkxKSBicmVhazsKICAgRlVOQ1RJT05fVEFCTEVfdltpMSAmIDddKCk7CiAgIGkxID0gX21hbGxvYyhpMikgfCAwOwogICBpZiAoaTEpIGJyZWFrIEwxOwogIH0KICBpMiA9IF9fX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24oNCkgfCAwOwogIEhFQVAzMltpMiA+PiAyXSA9IDIzNTM2OwogIF9fX2N4YV90aHJvdyhpMiB8IDAsIDE1OTM2LCAyMDApOwogfSB3aGlsZSAoMCk7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlTYW1wbGVGZGRkZEVkUFMyX0pkZGRFRTZpbnZva2VFUktTNF9TNV9kZGQoaTIsIGkzLCBkNCwgZDUsIGQ2KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogdmFyIGkxID0gMCwgaTcgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTcgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTcgPj4gMSkgfCAwOwogaWYgKGk3ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGRkW2kxICYgN10oaTIsIGQ0LCBkNSwgZDYpKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpRmlsdGVyRmRkZGRFZFBTMl9KZGRkRUU2aW52b2tlRVJLUzRfUzVfZGRkKGkyLCBpMywgZDQsIGQ1LCBkNikgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIHZhciBpMSA9IDAsIGk3ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk3ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk3ID4+IDEpIHwgMDsKIGlmIChpNyAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkZFtpMSAmIDddKGkyLCBkNCwgZDUsIGQ2KSk7Cn0KCmZ1bmN0aW9uIF9fX211bGRzaTMoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMDsKIGk2ID0gaTEgJiA2NTUzNTsKIGk1ID0gaTIgJiA2NTUzNTsKIGkzID0gTWF0aF9pbXVsKGk1LCBpNikgfCAwOwogaTQgPSBpMSA+Pj4gMTY7CiBpMSA9IChpMyA+Pj4gMTYpICsgKE1hdGhfaW11bChpNSwgaTQpIHwgMCkgfCAwOwogaTUgPSBpMiA+Pj4gMTY7CiBpMiA9IE1hdGhfaW11bChpNSwgaTYpIHwgMDsKIHJldHVybiAodGVtcFJldDAgPSAoaTEgPj4+IDE2KSArIChNYXRoX2ltdWwoaTUsIGk0KSB8IDApICsgKCgoaTEgJiA2NTUzNSkgKyBpMiB8IDApID4+PiAxNikgfCAwLCBpMSArIGkyIDw8IDE2IHwgaTMgJiA2NTUzNSB8IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpT3NjNnBoYXNvckVkZGQoaTIsIGQ2LCBkNywgZDUpIHsKIGkyID0gaTIgfCAwOwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIGQ1ID0gK2Q1OwogdmFyIGQxID0gMC4wLCBpMyA9IDAsIGQ0ID0gMC4wOwogaTMgPSBpMiArIDggfCAwOwogZDQgPSArSEVBUEY2NFtpMyA+PiAzXTsKIEhFQVBGNjRbaTIgKyAzMiA+PiAzXSA9IGQ0OwogaWYgKGQ0IDwgZDcpIHsKICBIRUFQRjY0W2kzID4+IDNdID0gZDc7CiAgZDEgPSBkNzsKIH0gZWxzZSBkMSA9IGQ0OwogaWYgKGQxID49IGQ1KSB7CiAgSEVBUEY2NFtpMyA+PiAzXSA9IGQ3OwogIGQxID0gZDc7CiB9CiBIRUFQRjY0W2kzID4+IDNdID0gKGQ1IC0gZDcpIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkNikgKyBkMTsKIHJldHVybiArZDQ7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUZGVDlzZXRQaGFzZXNFTlN0M19fMTZ2ZWN0b3JJZk5TMF85YWxsb2NhdG9ySWZFRUVFKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgKyAxNiB8IDA7CiBpZiAoKGkxIHwgMCkgPT0gKGkyIHwgMCkpIHJldHVybjsKIF9fWk5TdDNfXzE2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUU2YXNzaWduSVBmRUVOU185ZW5hYmxlX2lmSVhhYXNyMjFfX2lzX2ZvcndhcmRfaXRlcmF0b3JJVF9FRTV2YWx1ZXNyMTZpc19jb25zdHJ1Y3RpYmxlSWZOU18xNWl0ZXJhdG9yX3RyYWl0c0lTN19FOXJlZmVyZW5jZUVFRTV2YWx1ZUV2RTR0eXBlRVM3X1M3XyhpMSwgSEVBUDMyW2kyID4+IDJdIHwgMCwgSEVBUDMyW2kyICsgNCA+PiAyXSB8IDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aU9zY0ZkZGRkRWRQUzJfSmRkZEVFNmludm9rZUVSS1M0X1M1X2RkZChpMiwgaTMsIGQ0LCBkNSwgZDYpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiB2YXIgaTEgPSAwLCBpNyA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNyA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNyA+PiAxKSB8IDA7CiBpZiAoaTcgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGlkZGRbaTEgJiA3XShpMiwgZDQsIGQ1LCBkNikpOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxMW1heGlGbGFuZ2VySkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aig3MDU3MDQpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMjA0MDsKIF9tZW1zZXQoaTIgKyA1NiB8IDAsIDAsIDcwNTYwMCkgfCAwOwogSEVBUEY2NFtpMiArIDcwNTY2NCA+PiAzXSA9IDAuMDsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgMTY7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzE2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUU5cHVzaF9iYWNrRVJLZChpNCwgaTMpIHsKIGk0ID0gaTQgfCAwOwogaTMgPSBpMyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDA7CiBpMSA9IGk0ICsgNCB8IDA7CiBpMiA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpZiAoKGkyIHwgMCkgPT0gKEhFQVAzMltpNCArIDggPj4gMl0gfCAwKSkgewogIF9fWk5TdDNfXzE2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUUyMV9fcHVzaF9iYWNrX3Nsb3dfcGF0aElSS2RFRXZPVF8oaTQsIGkzKTsKICByZXR1cm47CiB9IGVsc2UgewogIEhFQVBGNjRbaTIgPj4gM10gPSArSEVBUEY2NFtpMyA+PiAzXTsKICBIRUFQMzJbaTEgPj4gMl0gPSBpMiArIDg7CiAgcmV0dXJuOwogfQp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVFRXZQVF8oaTUpIHsKIGk1ID0gaTUgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwLCBpMyA9IDAsIGk0ID0gMDsKIGlmICghaTUpIHJldHVybjsKIGkxID0gSEVBUDMyW2k1ID4+IDJdIHwgMDsKIGkyID0gaTE7CiBpZiAoaTEpIHsKICBpMyA9IGk1ICsgNCB8IDA7CiAgaTQgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogIGlmICgoaTQgfCAwKSAhPSAoaTEgfCAwKSkgSEVBUDMyW2kzID4+IDJdID0gaTQgKyAofigoaTQgKyAtNCAtIGkyIHwgMCkgPj4+IDIpIDw8IDIpOwogIF9fWmRsUHYoaTEpOwogfQogX19aZGxQdihpNSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUVFdlBUXyhpNSkgewogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMCwgaTQgPSAwOwogaWYgKCFpNSkgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTUgPj4gMl0gfCAwOwogaTIgPSBpMTsKIGlmIChpMSkgewogIGkzID0gaTUgKyA0IHwgMDsKICBpNCA9IEhFQVAzMltpMyA+PiAyXSB8IDA7CiAgaWYgKChpNCB8IDApICE9IChpMSB8IDApKSBIRUFQMzJbaTMgPj4gMl0gPSBpNCArICh+KChpNCArIC00IC0gaTIgfCAwKSA+Pj4gMikgPDwgMik7CiAgX19aZGxQdihpMSk7CiB9CiBfX1pkbFB2KGk1KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFRUV2UFRfKGk1KSB7CiBpNSA9IGk1IHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMCwgaTMgPSAwLCBpNCA9IDA7CiBpZiAoIWk1KSByZXR1cm47CiBpMSA9IEhFQVAzMltpNSA+PiAyXSB8IDA7CiBpMiA9IGkxOwogaWYgKGkxKSB7CiAgaTMgPSBpNSArIDQgfCAwOwogIGk0ID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKICBpZiAoKGk0IHwgMCkgIT0gKGkxIHwgMCkpIEhFQVAzMltpMyA+PiAyXSA9IGk0ICsgKH4oKGk0ICsgLTggLSBpMiB8IDApID4+PiAzKSA8PCAzKTsKICBfX1pkbFB2KGkxKTsKIH0KIF9fWmRsUHYoaTUpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xNnZlY3RvcklpTlNfOWFsbG9jYXRvcklpRUVFOXB1c2hfYmFja0VSS2koaTQsIGkzKSB7CiBpNCA9IGk0IHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwOwogaTEgPSBpNCArIDQgfCAwOwogaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApID09IChIRUFQMzJbaTQgKyA4ID4+IDJdIHwgMCkpIHsKICBfX1pOU3QzX18xNnZlY3RvcklpTlNfOWFsbG9jYXRvcklpRUVFMjFfX3B1c2hfYmFja19zbG93X3BhdGhJUktpRUV2T1RfKGk0LCBpMyk7CiAgcmV0dXJuOwogfSBlbHNlIHsKICBIRUFQMzJbaTIgPj4gMl0gPSBIRUFQMzJbaTMgPj4gMl07CiAgSEVBUDMyW2kxID4+IDJdID0gaTIgKyA0OwogIHJldHVybjsKIH0KfQoKZnVuY3Rpb24gX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTlwdXNoX2JhY2tFUktmKGk0LCBpMykgewogaTQgPSBpNCB8IDA7CiBpMyA9IGkzIHwgMDsKIHZhciBpMSA9IDAsIGkyID0gMDsKIGkxID0gaTQgKyA0IHwgMDsKIGkyID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIGlmICgoaTIgfCAwKSA9PSAoSEVBUDMyW2k0ICsgOCA+PiAyXSB8IDApKSB7CiAgX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTIxX19wdXNoX2JhY2tfc2xvd19wYXRoSVJLZkVFdk9UXyhpNCwgaTMpOwogIHJldHVybjsKIH0gZWxzZSB7CiAgSEVBUDMyW2kyID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgNDsKICByZXR1cm47CiB9Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE0bWF4aURpc3RvcnRpb25GZGRkRWRQUzJfSmRkRUU2aW52b2tlRVJLUzRfUzVfZGQoaTIsIGkzLCBkNCwgZDUpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogdmFyIGkxID0gMCwgaTYgPSAwOwogaTEgPSBIRUFQMzJbaTIgPj4gMl0gfCAwOwogaTYgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGkyID0gaTMgKyAoaTYgPj4gMSkgfCAwOwogaWYgKGk2ICYgMSkgaTEgPSBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMl0gfCAwOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RpZGRbaTEgJiA3XShpMiwgZDQsIGQ1KSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEzbWF4aURDQmxvY2tlckZkZGRFZFBTMl9KZGRFRTZpbnZva2VFUktTNF9TNV9kZChpMiwgaTMsIGQ0LCBkNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiB2YXIgaTEgPSAwLCBpNiA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNiA+PiAxKSB8IDA7CiBpZiAoaTYgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGlkZFtpMSAmIDddKGkyLCBkNCwgZDUpKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpRmlsdGVyRmRkZEVkUFMyX0pkZEVFNmludm9rZUVSS1M0X1M1X2RkKGkyLCBpMywgZDQsIGQ1KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIHZhciBpMSA9IDAsIGk2ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk2ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk2ID4+IDEpIHwgMDsKIGlmIChpNiAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkW2kxICYgN10oaTIsIGQ0LCBkNSkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aUVudkZkZGlFZFBTMl9KZGlFRTZpbnZva2VFUktTNF9TNV9kaShpMiwgaTMsIGQ0LCBpNSkgewogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogaTUgPSBpNSB8IDA7CiB2YXIgaTEgPSAwLCBpNiA9IDA7CiBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiBpNiA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaTIgPSBpMyArIChpNiA+PiAxKSB8IDA7CiBpZiAoaTYgJiAxKSBpMSA9IEhFQVAzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyBpMSA+PiAyXSB8IDA7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGlkaVtpMSAmIDFdKGkyLCBkNCwgaTUpKTsKfQoKZnVuY3Rpb24gX19aTksxMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYWJvdmVfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2UzRfaWIoaTUsIGkzLCBpMiwgaTEsIGk0LCBpNikgewogaTUgPSBpNSB8IDA7CiBpMyA9IGkzIHwgMDsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBpNCA9IGk0IHwgMDsKIGk2ID0gaTYgfCAwOwogaWYgKChpNSB8IDApID09IChIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMCkpIF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzI5cHJvY2Vzc19zdGF0aWNfdHlwZV9hYm92ZV9kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZTNF9pKDAsIGkzLCBpMiwgaTEsIGk0KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX21lbW1vdmUoaTEsIGk0LCBpMikgewogaTEgPSBpMSB8IDA7CiBpNCA9IGk0IHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMDsKIGlmICgoaTQgfCAwKSA8IChpMSB8IDApICYgKGkxIHwgMCkgPCAoaTQgKyBpMiB8IDApKSB7CiAgaTMgPSBpMTsKICBpNCA9IGk0ICsgaTIgfCAwOwogIGkxID0gaTEgKyBpMiB8IDA7CiAgd2hpbGUgKChpMiB8IDApID4gMCkgewogICBpMSA9IGkxIC0gMSB8IDA7CiAgIGk0ID0gaTQgLSAxIHwgMDsKICAgaTIgPSBpMiAtIDEgfCAwOwogICBIRUFQOFtpMSA+PiAwXSA9IEhFQVA4W2k0ID4+IDBdIHwgMDsKICB9CiAgaTEgPSBpMzsKIH0gZWxzZSBfbWVtY3B5KGkxLCBpNCwgaTIpIHwgMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpT3NjRmRkZEVkUFMyX0pkZEVFNmludm9rZUVSS1M0X1M1X2RkKGkyLCBpMywgZDQsIGQ1KSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIHZhciBpMSA9IDAsIGk2ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk2ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk2ID4+IDEpIHwgMDsKIGlmIChpNiAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiArKCtGVU5DVElPTl9UQUJMRV9kaWRkW2kxICYgN10oaTIsIGQ0LCBkNSkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0yMW1heGlGRlRPY3RhdmVBbmFseXplcktGaWlFaVBLUzJfSmlFRTZpbnZva2VFUktTNF9TNl9pKGkyLCBpMywgaTQpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpMSA9IDAsIGk1ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk1ID4+IDEpIHwgMDsKIGlmIChpNSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9paWlbaTEgJiAxMjddKGkyLCBpNCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNm1heGlNRkNDQW5hbHlzZXJJZEVOU185YWxsb2NhdG9ySVMyX0VFRUQwRXYoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIzMTA0OwogaTEgPSBIRUFQMzJbaTIgKyA1MiA+PiAyXSB8IDA7CiBpZiAoaTEpIHsKICBfX1pkYVB2KGkxKTsKICBpMSA9IEhFQVAzMltpMiArIDE2ID4+IDJdIHwgMDsKICBpZiAoaTEpIF9fWmRhUHYoaTEpOwogIGkxID0gSEVBUDMyW2kyICsgNjAgPj4gMl0gfCAwOwogIGlmIChpMSkgX19aZGFQdihpMSk7CiB9CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTIpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aU9zYzZzcXVhcmVFZChpNCwgZDMpIHsKIGk0ID0gaTQgfCAwOwogZDMgPSArZDM7CiB2YXIgZDEgPSAwLjAsIGkyID0gMDsKIGkyID0gaTQgKyA4IHwgMDsKIGQxID0gK0hFQVBGNjRbaTIgPj4gM107CiBpZiAoZDEgPCAuNSkgSEVBUEY2NFtpNCArIDMyID4+IDNdID0gLTEuMDsKIGlmIChkMSA+IC41KSBIRUFQRjY0W2k0ICsgMzIgPj4gM10gPSAxLjA7CiBpZiAoZDEgPj0gMS4wKSB7CiAgZDEgPSBkMSArIC0xLjA7CiAgSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogfQogSEVBUEY2NFtpMiA+PiAzXSA9IDEuMCAvICgrKEhFQVAzMls1MDgzXSB8IDApIC8gZDMpICsgZDE7CiByZXR1cm4gKygrSEVBUEY2NFtpNCArIDMyID4+IDNdKTsKfQoKZnVuY3Rpb24gX2xsdm1fY3R0el9pMzIoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gSEVBUDhbY3R0el9pOCArIChpMiAmIDI1NSkgPj4gMF0gfCAwOwogaWYgKChpMSB8IDApIDwgOCkgcmV0dXJuIGkxIHwgMDsKIGkxID0gSEVBUDhbY3R0el9pOCArIChpMiA+PiA4ICYgMjU1KSA+PiAwXSB8IDA7CiBpZiAoKGkxIHwgMCkgPCA4KSByZXR1cm4gaTEgKyA4IHwgMDsKIGkxID0gSEVBUDhbY3R0el9pOCArIChpMiA+PiAxNiAmIDI1NSkgPj4gMF0gfCAwOwogaWYgKChpMSB8IDApIDwgOCkgcmV0dXJuIGkxICsgMTYgfCAwOwogcmV0dXJuIChIRUFQOFtjdHR6X2k4ICsgKGkyID4+PiAyNCkgPj4gMF0gfCAwKSArIDI0IHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZtYXhpTUZDQ0FuYWx5c2VySWRFTlNfOWFsbG9jYXRvcklTMl9FRUVEMkV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMzEwNDsKIGkxID0gSEVBUDMyW2kyICsgNTIgPj4gMl0gfCAwOwogaWYgKGkxKSB7CiAgX19aZGFQdihpMSk7CiAgaTEgPSBIRUFQMzJbaTIgKyAxNiA+PiAyXSB8IDA7CiAgaWYgKGkxKSBfX1pkYVB2KGkxKTsKICBpMSA9IEhFQVAzMltpMiArIDYwID4+IDJdIHwgMDsKICBpZiAoaTEpIF9fWmRhUHYoaTEpOwogfQogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTNtYXhpRGVsYXlsaW5lSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aig3MDU2NTYpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMDkxNjsKIF9tZW1zZXQoaTIgKyA1NiB8IDAsIDAsIDcwNTYwMCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxNjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpT3NjOHRyaWFuZ2xlRWQoaTQsIGQzKSB7CiBpNCA9IGk0IHwgMDsKIGQzID0gK2QzOwogdmFyIGQxID0gMC4wLCBpMiA9IDA7CiBpMiA9IGk0ICsgOCB8IDA7CiBkMSA9ICtIRUFQRjY0W2kyID4+IDNdOwogaWYgKGQxID49IDEuMCkgewogIGQxID0gZDEgKyAtMS4wOwogIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKIH0KIGQzID0gMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkMykgKyBkMTsKIEhFQVBGNjRbaTIgPj4gM10gPSBkMzsKIGQzID0gKCghKGQzIDw9IC41KSA/IDEuMCAtIGQzIDogZDMpICsgLS4yNSkgKiA0LjA7CiBIRUFQRjY0W2k0ICsgMzIgPj4gM10gPSBkMzsKIHJldHVybiArZDM7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRkZURmJmRWJQUzJfSmZFRTZpbnZva2VFUktTNF9TNV9mKGkyLCBpMywgZDQpIHsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIHZhciBpMSA9IDAsIGk1ID0gMDsKIGkxID0gSEVBUDMyW2kyID4+IDJdIHwgMDsKIGk1ID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpMiA9IGkzICsgKGk1ID4+IDEpIHwgMDsKIGlmIChpNSAmIDEpIGkxID0gSEVBUDMyWyhIRUFQMzJbaTIgPj4gMl0gfCAwKSArIGkxID4+IDJdIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9paWRbaTEgJiAzXShpMiwgZDQpIHwgMDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpTWl4NnN0ZXJlb0VkUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWQoaTIsIGQxLCBpMywgZDQpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogdmFyIGQ1ID0gMC4wOwogZDQgPSBkNCA+IDEuMCA/IDEuMCA6IGQ0OwogZDQgPSBkNCA8IDAuMCA/IDAuMCA6IGQ0OwogZDUgPSArTWF0aF9zcXJ0KCsoMS4wIC0gZDQpKSAqIGQxOwogaTMgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogSEVBUEY2NFtpMyA+PiAzXSA9IGQ1OwogZDQgPSArTWF0aF9zcXJ0KCtkNCkgKiBkMTsKIEhFQVBGNjRbaTMgKyA4ID4+IDNdID0gZDQ7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aU9zYzhzaW5ld2F2ZUVkKGkyLCBkNSkgewogaTIgPSBpMiB8IDA7CiBkNSA9ICtkNTsKIHZhciBkMSA9IDAuMCwgaTMgPSAwLCBkNCA9IDAuMDsKIGkzID0gaTIgKyA4IHwgMDsKIGQxID0gK0hFQVBGNjRbaTMgPj4gM107CiBkNCA9ICtNYXRoX3NpbigrKGQxICogNi4yODMxODUzMDcxNzk1ODYpKTsKIEhFQVBGNjRbaTIgKyAzMiA+PiAzXSA9IGQ0OwogaWYgKGQxID49IDEuMCkgewogIGQxID0gZDEgKyAtMS4wOwogIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIH0KIEhFQVBGNjRbaTMgPj4gM10gPSAxLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAvIGQ1KSArIGQxOwogcmV0dXJuICtkNDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpT3NjN2Nvc3dhdmVFZChpMiwgZDUpIHsKIGkyID0gaTIgfCAwOwogZDUgPSArZDU7CiB2YXIgZDEgPSAwLjAsIGkzID0gMCwgZDQgPSAwLjA7CiBpMyA9IGkyICsgOCB8IDA7CiBkMSA9ICtIRUFQRjY0W2kzID4+IDNdOwogZDQgPSArTWF0aF9jb3MoKyhkMSAqIDYuMjgzMTg1MzA3MTc5NTg2KSk7CiBIRUFQRjY0W2kyICsgMzIgPj4gM10gPSBkNDsKIGlmIChkMSA+PSAxLjApIHsKICBkMSA9IGQxICsgLTEuMDsKICBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiB9CiBIRUFQRjY0W2kzID4+IDNdID0gMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkNSkgKyBkMTsKIHJldHVybiArZDQ7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpT3NjSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aig2NCkgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIwNjk2OwogSEVBUEY2NFtpMiArIDI0ID4+IDNdID0gMC4wOwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxNjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJOG1heGlJRkZUSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aig1MikgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIyOTQwOwogSEVBUDMyW2kyICsgNDggPj4gMl0gPSAwOwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxMjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJN21heGlFbnZKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8oaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIGkyID0gX19abndqKDEwNCkgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIxNzI4OwogSEVBUDMyW2kyICsgNzYgPj4gMl0gPSAxOwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxNjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTExc2V0UG9zaXRpb25FZChpMywgZDEpIHsKIGkzID0gaTMgfCAwOwogZDEgPSArZDE7CiB2YXIgZDIgPSAwLjAsIGk0ID0gMDsKIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMCkgKyAxMDggPj4gMl0gfCAwOwogZDEgPSArKGk0IHwgMCkgKiBkMTsKIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIGQyID0gKyhpNCArIC0xIHwgMCk7CiBpZiAoIShkMSA+IGQyKSkgewogIGlmIChkMSA8IDAuMCkgZDEgPSAwLjA7CiB9IGVsc2UgZDEgPSBkMjsKIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX3JhbmQoKSB7CiB2YXIgaTEgPSAwLCBpMiA9IDAsIGkzID0gMDsKIGkyID0gMjAyODg7CiBpMiA9IF9fX211bGRpMyhIRUFQMzJbaTIgPj4gMl0gfCAwLCBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMCwgMTI4NDg2NTgzNywgMTQ4MTc2NTkzMykgfCAwOwogaTIgPSBfaTY0QWRkKGkyIHwgMCwgdGVtcFJldDAgfCAwLCAxLCAwKSB8IDA7CiBpMSA9IHRlbXBSZXQwOwogaTMgPSAyMDI4ODsKIEhFQVAzMltpMyA+PiAyXSA9IGkyOwogSEVBUDMyW2kzICsgNCA+PiAyXSA9IGkxOwogaTEgPSBfYml0c2hpZnQ2NExzaHIoaTIgfCAwLCBpMSB8IDAsIDMzKSB8IDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm8yN2hhc191bmFtYmlndW91c19wdWJsaWNfYmFzZUVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVB2aShpNCwgaTIsIGkxLCBpMykgewogaTQgPSBpNCB8IDA7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogaTMgPSBpMyB8IDA7CiBpZiAoKGk0IHwgMCkgPT0gKEhFQVAzMltpMiArIDggPj4gMl0gfCAwKSkgX19aTksxMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvMjRwcm9jZXNzX2ZvdW5kX2Jhc2VfY2xhc3NFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQdmkoMCwgaTIsIGkxLCBpMyk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTExc2V0UG9zaXRpb25FZChpMywgZDEpIHsKIGkzID0gaTMgfCAwOwogZDEgPSArZDE7CiB2YXIgZDIgPSAwLjAsIGk0ID0gMDsKIGk0ID0gSEVBUDMyWyhIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMCkgKyAxMDggPj4gMl0gfCAwOwogZDEgPSArKGk0IHwgMCkgKiBkMTsKIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIGQyID0gKyhpNCArIC0xIHwgMCk7CiBpZiAoIShkMSA+IGQyKSkgewogIGlmIChkMSA8IDAuMCkgZDEgPSAwLjA7CiB9IGVsc2UgZDEgPSBkMjsKIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8oaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIGkyID0gX19abndqKDcyKSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kyID4+IDJdID0gMjI4ODQ7CiBIRUFQMzJbaTEgPj4gMl0gPSBpMiArIDEyOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlNHBsYXlFdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgZDIgPSAwLjAsIGkzID0gMDsKIGkzID0gaTEgKyA0MCB8IDA7CiBkMiA9ICtIRUFQRjY0W2kzID4+IDNdICsgMS4wOwogZDIgPSAofn5kMiB8IDApIDwgKEhFQVAzMltpMSArIDEwOCA+PiAyXSB8IDApID8gZDIgOiAwLjA7CiBIRUFQRjY0W2kzID4+IDNdID0gZDI7CiBkMiA9ICsoSEVBUDE2WyhIRUFQMzJbaTEgKyAxMjggPj4gMl0gfCAwKSArICh+fmQyIDw8IDEpID4+IDFdIHwgMCkgLyAzMjc2Ny4wOwogSEVBUEY2NFtpMSArIDY0ID4+IDNdID0gZDI7CiByZXR1cm4gK2QyOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNm1heGlNRkNDQW5hbHlzZXJJZEVOU185YWxsb2NhdG9ySVMyX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpMSA9IEhFQVAzMltpMiArIDUyID4+IDJdIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRhUHYoaTEpOwogaTEgPSBIRUFQMzJbaTIgKyAxNiA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWmRhUHYoaTEpOwogaTEgPSBIRUFQMzJbaTIgKyA2MCA+PiAyXSB8IDA7CiBpZiAoIWkxKSByZXR1cm47CiBfX1pkYVB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTRtYXhpRGlzdG9ydGlvbkpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyhpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogaTIgPSBfX1pud2ooMTYpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMTk1MjsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgMTI7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkgewogdmFyIGkxID0gMCwgaTIgPSAwOwogaTEgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaWYgKCEoX3B0aHJlYWRfb25jZSgyMzczMiwgNCkgfCAwKSkgewogIGkyID0gX3B0aHJlYWRfZ2V0c3BlY2lmaWMoSEVBUDMyWzU5MzJdIHwgMCkgfCAwOwogIFNUQUNLVE9QID0gaTE7CiAgcmV0dXJuIGkyIHwgMDsKIH0gZWxzZSBfYWJvcnRfbWVzc2FnZSgzOTY2MiwgaTEpOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aU9zYzZwaGFzb3JFZChpMiwgZDUpIHsKIGkyID0gaTIgfCAwOwogZDUgPSArZDU7CiB2YXIgZDEgPSAwLjAsIGkzID0gMCwgZDQgPSAwLjA7CiBpMyA9IGkyICsgOCB8IDA7CiBkNCA9ICtIRUFQRjY0W2kzID4+IDNdOwogSEVBUEY2NFtpMiArIDMyID4+IDNdID0gZDQ7CiBpZiAoIShkNCA+PSAxLjApKSBkMSA9IGQ0OyBlbHNlIHsKICBkMSA9IGQ0ICsgLTEuMDsKICBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiB9CiBIRUFQRjY0W2kzID4+IDNdID0gMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkNSkgKyBkMTsKIHJldHVybiArZDQ7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTEybWF4aUVudmVsb3BlSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aig3MikgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIwODI0OwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxNjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlJRkZUTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMykgewogaTMgPSBpMyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDA7CiBpMSA9IEhFQVAzMltpMyArIDQ4ID4+IDJdIHwgMDsKIGlmIChpMSkgewogIGkyID0gSEVBUDMyW2kxICsgOCA+PiAyXSB8IDA7CiAgaWYgKGkyKSBfX1pkYVB2KGkyKTsKICBfX1pkbFB2KGkxKTsKIH0KIGkxID0gSEVBUDMyW2kzICsgMTIgPj4gMl0gfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGFQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aU9zYzNzYXdFZChpMiwgZDUpIHsKIGkyID0gaTIgfCAwOwogZDUgPSArZDU7CiB2YXIgZDEgPSAwLjAsIGkzID0gMCwgZDQgPSAwLjA7CiBpMyA9IGkyICsgOCB8IDA7CiBkNCA9ICtIRUFQRjY0W2kzID4+IDNdOwogSEVBUEY2NFtpMiArIDMyID4+IDNdID0gZDQ7CiBpZiAoIShkNCA+PSAxLjApKSBkMSA9IGQ0OyBlbHNlIHsKICBkMSA9IGQ0ICsgLTIuMDsKICBIRUFQRjY0W2kzID4+IDNdID0gZDE7CiB9CiBIRUFQRjY0W2kzID4+IDNdID0gMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgLyBkNSkgKyBkMTsKIHJldHVybiArZDQ7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyAzNiA+PiAyXSB8IDA7CiBpZiAoaTEpIHsKICBfX1pkYVB2KGkxKTsKICBpMSA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgaWYgKGkxKSBfX1pkYVB2KGkxKTsKICBpMSA9IEhFQVAzMltpMiArIDQ0ID4+IDJdIHwgMDsKICBpZiAoaTEpIF9fWmRhUHYoaTEpOwogfQogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpTWl4SkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aigxMzYpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMTExNjsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgMTY7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpRHluSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aigxMDQpIHwgMDsKIEhFQVAzMltpMiArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgPj4gMl0gPSAyMTU4ODsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgMTY7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gaTI7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpTWFwSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpMiA9IF9fWm53aigxNikgfCAwOwogSEVBUDMyW2kyICsgNCA+PiAyXSA9IDA7CiBIRUFQMzJbaTIgKyA4ID4+IDJdID0gMDsKIEhFQVAzMltpMiA+PiAyXSA9IDIxNDg4OwogSEVBUDMyW2kxID4+IDJdID0gaTIgKyAxMjsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTExbWFrZV9zaGFyZWRJN2NvbnZlcnRKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8oaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMDsKIGkyID0gX19abndqKDE2KSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMiArIDggPj4gMl0gPSAwOwogSEVBUDMyW2kyID4+IDJdID0gMjE4ODA7CiBIRUFQMzJbaTEgPj4gMl0gPSBpMiArIDEyOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xNnZlY3RvckljTlMyXzlhbGxvY2F0b3JJY0VFRUVFRXZQVF8oaTMpIHsKIGkzID0gaTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwOwogaWYgKCFpMykgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTMgPj4gMl0gfCAwOwogaWYgKGkxKSB7CiAgaTIgPSBpMyArIDQgfCAwOwogIGlmICgoSEVBUDMyW2kyID4+IDJdIHwgMCkgIT0gKGkxIHwgMCkpIEhFQVAzMltpMiA+PiAyXSA9IGkxOwogIF9fWmRsUHYoaTEpOwogfQogX19aZGxQdihpMyk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySThtYXhpSUZGVEVFdlBUXyhpMykgewogaTMgPSBpMyB8IDA7CiB2YXIgaTEgPSAwLCBpMiA9IDA7CiBpZiAoIWkzKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMyArIDM2ID4+IDJdIHwgMDsKIGlmIChpMSkgewogIGkyID0gSEVBUDMyW2kxICsgOCA+PiAyXSB8IDA7CiAgaWYgKGkyKSBfX1pkYVB2KGkyKTsKICBfX1pkbFB2KGkxKTsKIH0KIGkxID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKIGlmIChpMSkgX19aZGFQdihpMSk7CiBfX1pkbFB2KGkzKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwX19jeHhhYml2MTEyX0dMT0JBTF9fTl8xOWRlc3RydWN0X0VQdihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogaTIgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogX2ZyZWUoaTEpOwogaWYgKCEoX3B0aHJlYWRfc2V0c3BlY2lmaWMoSEVBUDMyWzU5MzJdIHwgMCwgMCkgfCAwKSkgewogIFNUQUNLVE9QID0gaTI7CiAgcmV0dXJuOwogfSBlbHNlIF9hYm9ydF9tZXNzYWdlKDM5ODY2LCBpMik7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzNjMzOSA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX191cmVtZGkzKGkxLCBpMiwgaTMsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpNSA9IDAsIGk2ID0gMDsKIGk2ID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaTUgPSBpNiB8IDA7CiBfX191ZGl2bW9kZGk0KGkxLCBpMiwgaTMsIGk0LCBpNSkgfCAwOwogU1RBQ0tUT1AgPSBpNjsKIHJldHVybiAodGVtcFJldDAgPSBIRUFQMzJbaTUgKyA0ID4+IDJdIHwgMCwgSEVBUDMyW2k1ID4+IDJdIHwgMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzNzM2OCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8oaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuICgoSEVBUDMyW2kxICsgNCA+PiAyXSB8IDApID09IDM2ODU5ID8gaTIgKyAxNiB8IDAgOiAwKSB8IDA7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlpZGRkZGRpaShpMTAsIGkxLCBpMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBpOCwgaTkpIHsKIGkxMCA9IGkxMCB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIGk4ID0gaTggfCAwOwogaTkgPSBpOSB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWRkZGRkaWlbaTEwICYgMV0oaTEgfCAwLCBpMiB8IDAsICtkMywgK2Q0LCArZDUsICtkNiwgK2Q3LCBpOCB8IDAsIGk5IHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk4xMXZlY3RvclRvb2xzMTZjbGVhclZlY3RvckZsb2F0RVJOU3QzX18xNnZlY3RvcklmTlMwXzlhbGxvY2F0b3JJZkVFRUUoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGkyID0gMCwgaTMgPSAwOwogaTMgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaTEgPSBpMSArIDQgfCAwOwogaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApID09IChpMyB8IDApKSByZXR1cm47CiBIRUFQMzJbaTEgPj4gMl0gPSBpMiArICh+KChpMiArIC00IC0gaTMgfCAwKSA+Pj4gMikgPDwgMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fX3N0ZGlvX2Nsb3NlKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGkzID0gaTI7CiBIRUFQMzJbaTMgPj4gMl0gPSBIRUFQMzJbaTEgKyA2MCA+PiAyXTsKIGkxID0gX19fc3lzY2FsbF9yZXQoX19fc3lzY2FsbDYoNiwgaTMgfCAwKSB8IDApIHwgMDsKIFNUQUNLVE9QID0gaTI7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTF2ZWN0b3JUb29sczE0Y2xlYXJWZWN0b3JEYmxFUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwLCBpMyA9IDA7CiBpMyA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpMSA9IGkxICsgNCB8IDA7CiBpMiA9IEhFQVAzMltpMSA+PiAyXSB8IDA7CiBpZiAoKGkyIHwgMCkgPT0gKGkzIHwgMCkpIHJldHVybjsKIEhFQVAzMltpMSA+PiAyXSA9IGkyICsgKH4oKGkyICsgLTggLSBpMyB8IDApID4+PiAzKSA8PCAzKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX2Fib3J0X21lc3NhZ2UoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwOwogaTMgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTQgPSBpMzsKIEhFQVAzMltpNCA+PiAyXSA9IGkyOwogaTMgPSBIRUFQMzJbNTk0Nl0gfCAwOwogX3ZmcHJpbnRmKGkzLCBpMSwgaTQpIHwgMDsKIF9mcHV0YygxMCwgaTMpIHwgMDsKIF9hYm9ydCgpOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIGkzID0gaTEgKyA0IHwgMDsKIGkyID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IGkyICsgLTE7CiBpZiAoIWkyKSB7CiAgRlVOQ1RJT05fVEFCTEVfdmlbSEVBUDMyWyhIRUFQMzJbaTEgPj4gMl0gfCAwKSArIDggPj4gMl0gJiA1MTFdKGkxKTsKICBpMSA9IDE7CiB9IGVsc2UgaTEgPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAyMW1heGlGRlRPY3RhdmVBbmFseXplck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMzQ0NzEgPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX2ZwcmludGYoaTEsIGkyLCBpMykgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGk0ID0gMCwgaTUgPSAwOwogaTQgPSBTVEFDS1RPUDsKIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyAxNiB8IDA7CiBpZiAoKFNUQUNLVE9QIHwgMCkgPj0gKFNUQUNLX01BWCB8IDApKSBhYm9ydCgpOwogaTUgPSBpNDsKIEhFQVAzMltpNSA+PiAyXSA9IGkzOwogaTMgPSBfdmZwcmludGYoaTEsIGkyLCBpNSkgfCAwOwogU1RBQ0tUT1AgPSBpNDsKIHJldHVybiBpMyB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTZtYXhpTUZDQ0FuYWx5c2VySWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzNTYxMCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfcHJpbnRmKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHZhciBpMyA9IDAsIGk0ID0gMDsKIGkzID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgMTYgfCAwOwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIGk0ID0gaTM7CiBIRUFQMzJbaTQgPj4gMl0gPSBpMjsKIGkyID0gX3ZmcHJpbnRmKEhFQVAzMls1OTQ3XSB8IDAsIGkxLCBpNCkgfCAwOwogU1RBQ0tUT1AgPSBpMzsKIHJldHVybiBpMiB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpRGlzdG9ydGlvbk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMzA4ODggPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxM21heGlEZWxheWxpbmVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8oaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuICgoSEVBUDMyW2kxICsgNCA+PiAyXSB8IDApID09IDI3Njg4ID8gaTIgKyAxNiB8IDAgOiAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRENCbG9ja2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMTk5MCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aUxhZ0V4cElkRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzJfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMyX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMjg3ODIgPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX19fbXVsZGkzKGkxLCBpMiwgaTMsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIHZhciBpNSA9IDAsIGk2ID0gMDsKIGk1ID0gaTE7CiBpNiA9IGkzOwogaTMgPSBfX19tdWxkc2kzKGk1LCBpNikgfCAwOwogaTEgPSB0ZW1wUmV0MDsKIHJldHVybiAodGVtcFJldDAgPSAoTWF0aF9pbXVsKGkyLCBpNikgfCAwKSArIChNYXRoX2ltdWwoaTQsIGk1KSB8IDApICsgaTEgfCBpMSAmIDAsIGkzIHwgMCB8IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMm1heGlFbnZlbG9wZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMjczMTAgPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMW1heGlGbGFuZ2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMTI1OCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aVNhbXBsZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMjkxNTEgPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8oaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuICgoSEVBUDMyW2kxICsgNCA+PiAyXSB8IDApID09IDI4MDY2ID8gaTIgKyAxNiB8IDAgOiAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpQ2hvcnVzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMTYyNCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX3ZpaWlpaWRkaShpOSwgaTEsIGkyLCBpMywgaTQsIGk1LCBkNiwgZDcsIGk4KSB7CiBpOSA9IGk5IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiBkNiA9ICtkNjsKIGQ3ID0gK2Q3OwogaTggPSBpOCB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlpaWlkZGlbaTkgJiAxXShpMSB8IDAsIGkyIHwgMCwgaTMgfCAwLCBpNCB8IDAsIGk1IHwgMCwgK2Q2LCArZDcsIGk4IHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlTbmFyZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMzMwMDkgPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aUNsb2NrTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMzY4MiA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpS2lja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgPT0gMzI2NzIgPyBpMiArIDE2IHwgMCA6IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUlGRlROMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8oaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuICgoSEVBUDMyW2kxICsgNCA+PiAyXSB8IDApID09IDM0ODg4ID8gaTIgKyAxNiB8IDAgOiAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlIYXRzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMzM0NSA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpU1ZGTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMjMzNyA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpT3NjTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAyNjkzNiA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWl4TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAyODQwNCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWFwTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAyOTQ4OSA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzNTIyMCA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRW52TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMDE3MyA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRHluTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAyOTgyOSA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdjb252ZXJ0TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSA9PSAzMDUyNSA/IGkyICsgMTYgfCAwIDogMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFMTJzZXRMb29wU3RhcnRFZChpMSwgZDIpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiB2YXIgaTMgPSAwOwogaTMgPSB+figrKEhFQVAzMlsoSEVBUDMyW2kxICsgOCA+PiAyXSB8IDApICsgMTA4ID4+IDJdIHwgMCkgKiBkMik7CiBIRUFQMzJbaTEgKyAzMiA+PiAyXSA9IGkzOwogSEVBUDMyW2kxICsgNDAgPj4gMl0gPSAoSEVBUDMyW2kxICsgMzYgPj4gMl0gfCAwKSAtIGkzOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBfX2N4eGFiaXYxMTJfR0xPQkFMX19OXzExMGNvbnN0cnVjdF9FdigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IFNUQUNLVE9QOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE2IHwgMDsKIGlmICgoU1RBQ0tUT1AgfCAwKSA+PSAoU1RBQ0tfTUFYIHwgMCkpIGFib3J0KCk7CiBpZiAoIShfcHRocmVhZF9rZXlfY3JlYXRlKDIzNzI4LCAzMDkpIHwgMCkpIHsKICBTVEFDS1RPUCA9IGkxOwogIHJldHVybjsKIH0gZWxzZSBfYWJvcnRfbWVzc2FnZSgzOTgxNiwgaTEpOwp9CgpmdW5jdGlvbiBfX1pOMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFMTBzZXRMb29wRW5kRWQoaTEsIGQyKSB7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogdmFyIGkzID0gMDsKIGkzID0gfn4oKyhIRUFQMzJbKEhFQVAzMltpMSArIDggPj4gMl0gfCAwKSArIDEwOCA+PiAyXSB8IDApICogZDIpOwogSEVBUDMyW2kxICsgMzYgPj4gMl0gPSBpMzsKIEhFQVAzMltpMSArIDQwID4+IDJdID0gaTMgLSAoSEVBUDMyW2kxICsgMzIgPj4gMl0gfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkyMW1heGlGRlRPY3RhdmVBbmFseXplckVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpTUZDQ0FuYWx5c2VySWRFRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTlNfOWFsbG9jYXRvcklTM19FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIzMzY0OwogX19aTjE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUQyRXYoaTEgKyAxNiB8IDApOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpZGRkZGRpaShpOSwgaTEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgaTcsIGk4KSB7CiBpOSA9IGk5IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIGk3ID0gaTcgfCAwOwogaTggPSBpOCB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpZGRkZGRpaVtpOSAmIDFdKGkxIHwgMCwgK2QyLCArZDMsICtkNCwgK2Q1LCArZDYsIGk3IHwgMCwgaTggfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMjM0NzY7CiBfX1pOMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVEMkV2KGkxICsgMTYgfCAwKTsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlEaXN0b3J0aW9uRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURDQmxvY2tlckVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpTGFnRXhwSWRFRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzQyMDsKIF9fWk4xNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRDJFdihpMSArIDE2IHwgMCk7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTJtYXhpRW52ZWxvcGVFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTExbWF4aUZsYW5nZXJFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aVNhbXBsZUVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlDaG9ydXNFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTRfX3JlbGVhc2Vfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIGkzID0gaTEgKyA4IHwgMDsKIGkyID0gSEVBUDMyW2kzID4+IDJdIHwgMDsKIEhFQVAzMltpMyA+PiAyXSA9IGkyICsgLTE7CiBpZiAoIWkyKSBGVU5DVElPTl9UQUJMRV92aVtIRUFQMzJbKEhFQVAzMltpMSA+PiAyXSB8IDApICsgMTYgPj4gMl0gJiA1MTFdKGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aVNuYXJlRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aUNsb2NrRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUtpY2tFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwbWF4aVNhbXBsZTVjbGVhckV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMDsKIGkzID0gSEVBUDMyW2kxICsgMTI4ID4+IDJdIHwgMDsKIGkxID0gaTEgKyAxMzIgfCAwOwogaTIgPSBIRUFQMzJbaTEgPj4gMl0gfCAwOwogaWYgKChpMiB8IDApID09IChpMyB8IDApKSByZXR1cm47CiBIRUFQMzJbaTEgPj4gMl0gPSBpMiArICh+KChpMiArIC0yIC0gaTMgfCAwKSA+Pj4gMSkgPDwgMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNUZ1bmN0aW9uSW52b2tlcklQRmRkZGRkZEVkZEpkZGRkRUU2aW52b2tlRVBTM19kZGRkZChpNSwgZDYsIGQxLCBkMiwgZDMsIGQ0KSB7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDEgPSArZDE7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiByZXR1cm4gKygrRlVOQ1RJT05fVEFCTEVfZGRkZGRkW0hFQVAzMltpNSA+PiAyXSAmIDNdKGQ2LCBkMSwgZDIsIGQzLCBkNCkpOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpU1ZGRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU9zY0VFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlNaXhFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUZGVEVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlFbnZFRUVFdlBUXyhpMikgewogaTIgPSBpMiB8IDA7CiB2YXIgaTEgPSAwOwogaWYgKCFpMikgcmV0dXJuOwogaTEgPSBIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMDsKIGlmIChpMSkgX19aTlN0M19fMTE5X19zaGFyZWRfd2Vha19jb3VudDE2X19yZWxlYXNlX3NoYXJlZEV2KGkxKTsKIF9fWmRsUHYoaTIpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRHluRUVFRXZQVF8oaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGlmICghaTIpIHJldHVybjsKIGkxID0gSEVBUDMyW2kyICsgNCA+PiAyXSB8IDA7CiBpZiAoaTEpIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSk7CiBfX1pkbFB2KGkyKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk3Y29udmVydEVFRUV2UFRfKGkyKSB7CiBpMiA9IGkyIHwgMDsKIHZhciBpMSA9IDA7CiBpZiAoIWkyKSByZXR1cm47CiBpMSA9IEhFQVAzMltpMiArIDQgPj4gMl0gfCAwOwogaWYgKGkxKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTZfX3JlbGVhc2Vfc2hhcmVkRXYoaTEpOwogX19aZGxQdihpMik7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMzM2NDsKIF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVEMkV2KGkxICsgMTYgfCAwKTsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlGaWx0ZXI2aGlwYXNzRWRkKGkzLCBkMiwgZDEpIHsKIGkzID0gaTMgfCAwOwogZDIgPSArZDI7CiBkMSA9ICtkMTsKIHZhciBpNCA9IDAsIGQ1ID0gMC4wOwogaTQgPSBpMyArIDEwNCB8IDA7CiBkNSA9ICtIRUFQRjY0W2k0ID4+IDNdOwogZDIgPSBkMiAtIChkNSArIChkMiAtIGQ1KSAqIGQxKTsKIEhFQVBGNjRbaTMgKyAxNiA+PiAzXSA9IGQyOwogSEVBUEY2NFtpNCA+PiAzXSA9IGQyOwogcmV0dXJuICtkMjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMjM0NzY7CiBfX1pOMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVEMkV2KGkxICsgMTYgfCAwKTsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlpZGRkaWkoaTgsIGkxLCBpMiwgZDMsIGQ0LCBkNSwgaTYsIGk3KSB7CiBpOCA9IGk4IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBpNiA9IGk2IHwgMDsKIGk3ID0gaTcgfCAwOwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWlkZGRpaVtpOCAmIDFdKGkxIHwgMCwgaTIgfCAwLCArZDMsICtkNCwgK2Q1LCBpNiB8IDAsIGk3IHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMjM0MjA7CiBfX1pOMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUQyRXYoaTEgKyAxNiB8IDApOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlpaWRkaShpOCwgaTEsIGkyLCBpMywgaTQsIGQ1LCBkNiwgaTcpIHsKIGk4ID0gaTggfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogaTcgPSBpNyB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlpaWRkaVtpOCAmIDFdKGkxIHwgMCwgaTIgfCAwLCBpMyB8IDAsIGk0IHwgMCwgK2Q1LCArZDYsIGk3IHwgMCk7Cn0KCmZ1bmN0aW9uIGNvcHlUZW1wRmxvYXQoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDhbdGVtcERvdWJsZVB0ciA+PiAwXSA9IEhFQVA4W2kxID4+IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDEgPj4gMF0gPSBIRUFQOFtpMSArIDEgPj4gMF07CiBIRUFQOFt0ZW1wRG91YmxlUHRyICsgMiA+PiAwXSA9IEhFQVA4W2kxICsgMiA+PiAwXTsKIEhFQVA4W3RlbXBEb3VibGVQdHIgKyAzID4+IDBdID0gSEVBUDhbaTEgKyAzID4+IDBdOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpRmlsdGVyNmxvcGFzc0VkZChpMywgZDIsIGQxKSB7CiBpMyA9IGkzIHwgMDsKIGQyID0gK2QyOwogZDEgPSArZDE7CiB2YXIgaTQgPSAwLCBkNSA9IDAuMDsKIGk0ID0gaTMgKyAxMDQgfCAwOwogZDUgPSArSEVBUEY2NFtpNCA+PiAzXTsKIGQyID0gZDUgKyAoZDIgLSBkNSkgKiBkMTsKIEhFQVBGNjRbaTMgKyAxNiA+PiAzXSA9IGQyOwogSEVBUEY2NFtpNCA+PiAzXSA9IGQyOwogcmV0dXJuICtkMjsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkaWRkZChpOCwgaTEsIGkyLCBkMywgaTQsIGQ1LCBkNiwgZDcpIHsKIGk4ID0gaTggfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWRpZGRkW2k4ICYgM10oaTEgfCAwLCBpMiB8IDAsICtkMywgaTQgfCAwLCArZDUsICtkNiwgK2Q3KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkZGlkZChpOCwgaTEsIGkyLCBkMywgZDQsIGk1LCBkNiwgZDcpIHsKIGk4ID0gaTggfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWRkaWRkW2k4ICYgMV0oaTEgfCAwLCBpMiB8IDAsICtkMywgK2Q0LCBpNSB8IDAsICtkNiwgK2Q3KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkZGRpZChpOCwgaTEsIGkyLCBkMywgZDQsIGQ1LCBpNiwgZDcpIHsKIGk4ID0gaTggfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGk2ID0gaTYgfCAwOwogZDcgPSArZDc7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWRkZGlkW2k4ICYgMV0oaTEgfCAwLCBpMiB8IDAsICtkMywgK2Q0LCArZDUsIGk2IHwgMCwgK2Q3KTsKfQoKZnVuY3Rpb24gX2JpdHNoaWZ0NjRBc2hyKGkzLCBpMiwgaTEpIHsKIGkzID0gaTMgfCAwOwogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIGlmICgoaTEgfCAwKSA8IDMyKSB7CiAgdGVtcFJldDAgPSBpMiA+PiBpMTsKICByZXR1cm4gaTMgPj4+IGkxIHwgKGkyICYgKDEgPDwgaTEpIC0gMSkgPDwgMzIgLSBpMTsKIH0KIHRlbXBSZXQwID0gKGkyIHwgMCkgPCAwID8gLTEgOiAwOwogcmV0dXJuIGkyID4+IGkxIC0gMzIgfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpaWRkZGRkKGk4LCBpMSwgaTIsIGQzLCBkNCwgZDUsIGQ2LCBkNykgewogaTggPSBpOCB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlpZGRkZGRbaTggJiAzXShpMSB8IDAsIGkyIHwgMCwgK2QzLCArZDQsICtkNSwgK2Q2LCArZDcpOwp9CgpmdW5jdGlvbiBkeW5DYWxsX3ZpaWRpZGRkKGk4LCBpMSwgaTIsIGQzLCBpNCwgZDUsIGQ2LCBkNykgewogaTggPSBpOCB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBpNCA9IGk0IHwgMDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIEZVTkNUSU9OX1RBQkxFX3ZpaWRpZGRkW2k4ICYgMV0oaTEgfCAwLCBpMiB8IDAsICtkMywgaTQgfCAwLCArZDUsICtkNiwgK2Q3KTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyVmVjdG9yQWNjZXNzSU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUUzc2V0RVJTNl9qUktkKGkyLCBpMSwgaTMpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBpMyA9IGkzIHwgMDsKIEhFQVBGNjRbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgKGkxIDw8IDMpID4+IDNdID0gK0hFQVBGNjRbaTMgPj4gM107CiByZXR1cm4gMTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfdmlpaWlpaShpNywgaTEsIGkyLCBpMywgaTQsIGk1LCBpNikgewogaTcgPSBpNyB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGk1ID0gaTUgfCAwOwogaTYgPSBpNiB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWlpaWlpW2k3ICYgM10oaTEgfCAwLCBpMiB8IDAsIGkzIHwgMCwgaTQgfCAwLCBpNSB8IDAsIGk2IHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xM21heGlEQ0Jsb2NrZXI0cGxheUVkZChpMywgZDIsIGQxKSB7CiBpMyA9IGkzIHwgMDsKIGQyID0gK2QyOwogZDEgPSArZDE7CiB2YXIgaTQgPSAwOwogaTQgPSBpMyArIDggfCAwOwogZDEgPSBkMiAtICtIRUFQRjY0W2kzID4+IDNdICsgK0hFQVBGNjRbaTQgPj4gM10gKiBkMTsKIEhFQVBGNjRbaTQgPj4gM10gPSBkMTsKIEhFQVBGNjRbaTMgPj4gM10gPSBkMjsKIHJldHVybiArZDE7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlZlY3RvckFjY2Vzc0lOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVFM3NldEVSUzZfalJLaShpMiwgaTEsIGkzKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogaTMgPSBpMyB8IDA7CiBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgKGkxIDw8IDIpID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogcmV0dXJuIDE7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlZlY3RvckFjY2Vzc0lOU3QzX18xNnZlY3RvcklmTlMyXzlhbGxvY2F0b3JJZkVFRUVFM3NldEVSUzZfalJLZihpMiwgaTEsIGkzKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogaTMgPSBpMyB8IDA7CiBIRUFQMzJbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgKGkxIDw8IDIpID4+IDJdID0gSEVBUDMyW2kzID4+IDJdOwogcmV0dXJuIDE7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX2JpdHNoaWZ0NjRTaGwoaTMsIGkyLCBpMSkgewogaTMgPSBpMyB8IDA7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogaWYgKChpMSB8IDApIDwgMzIpIHsKICB0ZW1wUmV0MCA9IGkyIDw8IGkxIHwgKGkzICYgKDEgPDwgaTEpIC0gMSA8PCAzMiAtIGkxKSA+Pj4gMzIgLSBpMTsKICByZXR1cm4gaTMgPDwgaTE7CiB9CiB0ZW1wUmV0MCA9IGkzIDw8IGkxIC0gMzI7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpTWFwNmV4cGxpbkVkZGRkZChkNSwgZDIsIGQxLCBkNCwgZDMpIHsKIGQ1ID0gK2Q1OwogZDIgPSArZDI7CiBkMSA9ICtkMTsKIGQ0ID0gK2Q0OwogZDMgPSArZDM7CiBkNSA9IGQxIDwgZDUgPyBkMSA6IGQ1OwogcmV0dXJuICsoKGQzIC0gZDQpICogKCtNYXRoX2xvZygrKChkNSA8IGQyID8gZDIgOiBkNSkgLyBkMikpIC8gK01hdGhfbG9nKCsoZDEgLyBkMikpKSArIGQ0KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkaWRpKGk3LCBpMSwgaTIsIGQzLCBpNCwgZDUsIGk2KSB7CiBpNyA9IGk3IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiBpNiA9IGk2IHwgMDsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlpZGlkaVtpNyAmIDFdKGkxIHwgMCwgaTIgfCAwLCArZDMsIGk0IHwgMCwgK2Q1LCBpNiB8IDApOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJWZWN0b3JBY2Nlc3NJTlN0M19fMTZ2ZWN0b3JJY05TMl85YWxsb2NhdG9ySWNFRUVFRTNzZXRFUlM2X2pSS2MoaTIsIGkxLCBpMykgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkzID0gaTMgfCAwOwogSEVBUDhbKEhFQVAzMltpMiA+PiAyXSB8IDApICsgaTEgPj4gMF0gPSBIRUFQOFtpMyA+PiAwXSB8IDA7CiByZXR1cm4gMTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRUpFRUVQVF9EcE9UMF8oKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooMTIpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUpFRUVQVF9EcE9UMF8oKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooMTIpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUpFRUVQVF9EcE9UMF8oKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooMTIpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUpFRUVQVF9EcE9UMF8oKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooMTIpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDggPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX2JpdHNoaWZ0NjRMc2hyKGkzLCBpMiwgaTEpIHsKIGkzID0gaTMgfCAwOwogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIGlmICgoaTEgfCAwKSA8IDMyKSB7CiAgdGVtcFJldDAgPSBpMiA+Pj4gaTE7CiAgcmV0dXJuIGkzID4+PiBpMSB8IChpMiAmICgxIDw8IGkxKSAtIDEpIDw8IDMyIC0gaTE7CiB9CiB0ZW1wUmV0MCA9IDA7CiByZXR1cm4gaTIgPj4+IGkxIC0gMzIgfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpaWRkaWQoaTcsIGkxLCBpMiwgZDMsIGQ0LCBpNSwgZDYpIHsKIGk3ID0gaTcgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWlkZGlkW2k3ICYgM10oaTEgfCAwLCBpMiB8IDAsICtkMywgK2Q0LCBpNSB8IDAsICtkNik7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlkZGRpaShpNywgaTEsIGQyLCBkMywgZDQsIGk1LCBpNikgewogaTcgPSBpNyB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogaTYgPSBpNiB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpZGRkaWlbaTcgJiAxXShpMSB8IDAsICtkMiwgK2QzLCArZDQsIGk1IHwgMCwgaTYgfCAwKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFMTRjb25zdHJ1Y3RfbnVsbEV2KCkgewogdmFyIGkxID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAyMW1heGlGRlRPY3RhdmVBbmFseXplck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFMTRjb25zdHJ1Y3RfbnVsbEV2KCkgewogdmFyIGkxID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aVNhbXBsZU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMTM0NDsKIF9fWk4xMG1heGlTYW1wbGVEMkV2KGkxICsgMTYgfCAwKTsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUVFRTE0Y29uc3RydWN0X251bGxFdigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTZtYXhpTUZDQ0FuYWx5c2VySWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gcnVuUG9zdFNldHMoKSB7fQpmdW5jdGlvbiBfaTY0U3VidHJhY3QoaTEsIGkyLCBpMywgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTQgPSBpMiAtIGk0IC0gKGkzID4+PiAwID4gaTEgPj4+IDAgfCAwKSA+Pj4gMDsKIHJldHVybiAodGVtcFJldDAgPSBpNCwgaTEgLSBpMyA+Pj4gMCB8IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTjdtYXhpTWFwNmxpbmV4cEVkZGRkZChkNSwgZDIsIGQxLCBkNCwgZDMpIHsKIGQ1ID0gK2Q1OwogZDIgPSArZDI7CiBkMSA9ICtkMTsKIGQ0ID0gK2Q0OwogZDMgPSArZDM7CiBkNSA9IGQxIDwgZDUgPyBkMSA6IGQ1OwogcmV0dXJuICsoK01hdGhfcG93KCsoZDMgLyBkNCksICsoKChkNSA8IGQyID8gZDIgOiBkNSkgLSBkMikgLyAoZDEgLSBkMikpKSAqIGQ0KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWRpZGRkKGk3LCBpMSwgZDIsIGkzLCBkNCwgZDUsIGQ2KSB7CiBpNyA9IGk3IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlkaWRkZFtpNyAmIDNdKGkxIHwgMCwgK2QyLCBpMyB8IDAsICtkNCwgK2Q1LCArZDYpOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpZGRpZGQoaTcsIGkxLCBkMiwgZDMsIGk0LCBkNSwgZDYpIHsKIGk3ID0gaTcgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWRkaWRkW2k3ICYgMV0oaTEgfCAwLCArZDIsICtkMywgaTQgfCAwLCArZDUsICtkNik7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlkZGRpZChpNywgaTEsIGQyLCBkMywgZDQsIGk1LCBkNikgewogaTcgPSBpNyB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogZDYgPSArZDY7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpZGRkaWRbaTcgJiAxXShpMSB8IDAsICtkMiwgK2QzLCArZDQsIGk1IHwgMCwgK2Q2KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlkaWRkKGk3LCBpMSwgaTIsIGQzLCBpNCwgZDUsIGQ2KSB7CiBpNyA9IGk3IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIEZVTkNUSU9OX1RBQkxFX3ZpaWRpZGRbaTcgJiAxXShpMSB8IDAsIGkyIHwgMCwgK2QzLCBpNCB8IDAsICtkNSwgK2Q2KTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE0bWF4aURpc3RvcnRpb25OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRGVsYXlsaW5lTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURDQmxvY2tlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlMYWdFeHBJZEVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMyX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMl9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTJtYXhpRW52ZWxvcGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUZGVE5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAyMjk5NjsKIF9fWk43bWF4aUZGVEQyRXYoaTEgKyAxMiB8IDApOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZkZGRkRWRkSmRkRUU2aW52b2tlRVBTM19kZGQoaTMsIGQ0LCBkMSwgZDIpIHsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkMSA9ICtkMTsKIGQyID0gK2QyOwogcmV0dXJuICsoK0ZVTkNUSU9OX1RBQkxFX2RkZGRbSEVBUDMyW2kzID4+IDJdICYgMV0oZDQsIGQxLCBkMikpOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpZGRkZGQoaTcsIGkxLCBkMiwgZDMsIGQ0LCBkNSwgZDYpIHsKIGk3ID0gaTcgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWRkZGRkW2k3ICYgM10oaTEgfCAwLCArZDIsICtkMywgK2Q0LCArZDUsICtkNik7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMW1heGlGbGFuZ2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aVNhbXBsZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpQ2hvcnVzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWRpZGRkKGk3LCBpMSwgZDIsIGkzLCBkNCwgZDUsIGQ2KSB7CiBpNyA9IGk3IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIEZVTkNUSU9OX1RBQkxFX3ZpZGlkZGRbaTcgJiAxXShpMSB8IDAsICtkMiwgaTMgfCAwLCArZDQsICtkNSwgK2Q2KTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDltYXhpU25hcmVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlDbG9ja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUtpY2tOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOG1heGlJRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSGF0c04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTjE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUQyRXYoaTEgKyAxNiB8IDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlNRkNDQW5hbHlzZXJJZEVFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpU1ZGTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpT3NjTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWl4TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWFwTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRW52TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRHluTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdjb252ZXJ0TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpU2FtcGxlTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIxMzQ0OwogX19aTjEwbWF4aVNhbXBsZUQyRXYoaTEgKyAxNiB8IDApOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpTWFwNmxpbmxpbkVkZGRkZChkNSwgZDIsIGQxLCBkNCwgZDMpIHsKIGQ1ID0gK2Q1OwogZDIgPSArZDI7CiBkMSA9ICtkMTsKIGQ0ID0gK2Q0OwogZDMgPSArZDM7CiBkNSA9IGQxIDwgZDUgPyBkMSA6IGQ1OwogcmV0dXJuICsoKGQzIC0gZDQpICogKCgoZDUgPCBkMiA/IGQyIDogZDUpIC0gZDIpIC8gKGQxIC0gZDIpKSArIGQ0KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlpaWkoaTYsIGkxLCBpMiwgaTMsIGk0LCBpNSkgewogaTYgPSBpNiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGk1ID0gaTUgfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlpaWlpW2k2ICYgN10oaTEgfCAwLCBpMiB8IDAsIGkzIHwgMCwgaTQgfCAwLCBpNSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRDJFdihpMSArIDE2IHwgMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExOV9fc2hhcmVkX3dlYWtfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoX19aTlN0M19fMTE0X19zaGFyZWRfY291bnQxNl9fcmVsZWFzZV9zaGFyZWRFdihpMSkgfCAwKSBfX1pOU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTRfX3JlbGVhc2Vfd2Vha0V2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVEMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpTGFnRXhwSWRFOWFkZFNhbXBsZUVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIHZhciBpMyA9IDA7CiBpMyA9IGkyICsgMTYgfCAwOwogSEVBUEY2NFtpMyA+PiAzXSA9ICtIRUFQRjY0W2kyID4+IDNdICogZDEgKyArSEVBUEY2NFtpMiArIDggPj4gM10gKiArSEVBUEY2NFtpMyA+PiAzXTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTjE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVEMkV2KGkxICsgMTYgfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFRTE0Y29uc3RydWN0X251bGxFdigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpaWRpZChpNiwgaTEsIGkyLCBkMywgaTQsIGQ1KSB7CiBpNiA9IGk2IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWRpZFtpNiAmIDFdKGkxIHwgMCwgaTIgfCAwLCArZDMsIGk0IHwgMCwgK2Q1KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkZGkoaTYsIGkxLCBpMiwgZDMsIGQ0LCBpNSkgewogaTYgPSBpNiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWlkZGlbaTYgJiAxXShpMSB8IDAsIGkyIHwgMCwgK2QzLCArZDQsIGk1IHwgMCk7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlkaWRpKGk2LCBpMSwgZDIsIGkzLCBkNCwgaTUpIHsKIGk2ID0gaTYgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlkaWRpW2k2ICYgMV0oaTEgfCAwLCArZDIsIGkzIHwgMCwgK2Q0LCBpNSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWk4xNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTNtYXhpRGVsYXlsaW5lRUVFMTRjb25zdHJ1Y3RfbnVsbEV2KCkgewogdmFyIGkxID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURDQmxvY2tlckVFRTE0Y29uc3RydWN0X251bGxFdigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlMYWdFeHBJZEVFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gYjQ0KGkxLCBpMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBpOCwgaTkpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIGQ3ID0gK2Q3OwogaTggPSBpOCB8IDA7CiBpOSA9IGk5IHwgMDsKIG51bGxGdW5jX2RpaWRkZGRkaWkoNDQpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTJtYXhpRW52ZWxvcGVFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlkaWkoaTYsIGkxLCBpMiwgZDMsIGk0LCBpNSkgewogaTYgPSBpNiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBpNCA9IGk0IHwgMDsKIGk1ID0gaTUgfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlpZGlpW2k2ICYgMV0oaTEgfCAwLCBpMiB8IDAsICtkMywgaTQgfCAwLCBpNSB8IDApOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFMTRjb25zdHJ1Y3RfbnVsbEV2KCkgewogdmFyIGkxID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRkZUTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDIyOTk2OwogX19aTjdtYXhpRkZURDJFdihpMSArIDEyIHwgMCk7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFMTRjb25zdHJ1Y3RfbnVsbEV2KCkgewogdmFyIGkxID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUNob3J1c0VFRTE0Y29uc3RydWN0X251bGxFdigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiByZXR1cm4gaTEgfCAwOwp9CmZ1bmN0aW9uIHN0YWNrQWxsb2MoaTIpIHsKIGkyID0gaTIgfCAwOwogdmFyIGkxID0gMDsKIGkxID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgaTIgfCAwOwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDE1ICYgLTE2OwogaWYgKChTVEFDS1RPUCB8IDApID49IChTVEFDS19NQVggfCAwKSkgYWJvcnQoKTsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkZGQoaTYsIGkxLCBpMiwgZDMsIGQ0LCBkNSkgewogaTYgPSBpNiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWlkZGRbaTYgJiAzXShpMSB8IDAsIGkyIHwgMCwgK2QzLCArZDQsICtkNSk7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlkZGlkKGk2LCBpMSwgZDIsIGQzLCBpNCwgZDUpIHsKIGk2ID0gaTYgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlkZGlkW2k2ICYgM10oaTEgfCAwLCArZDIsICtkMywgaTQgfCAwLCArZDUpOwp9CmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpQ2xvY2tFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlLaWNrRUVFMTRjb25zdHJ1Y3RfbnVsbEV2KCkgewogdmFyIGkxID0gMDsKIGkxID0gX19abndqKDgpIHwgMDsKIEhFQVAzMltpMSA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyA0ID4+IDJdID0gMDsKIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRTE0Y29uc3RydWN0X251bGxFdigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IF9fWm53aig4KSB8IDA7CiBIRUFQMzJbaTEgPj4gMl0gPSAwOwogSEVBUDMyW2kxICsgNCA+PiAyXSA9IDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUhhdHNFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySXZKaWlpRUU2aW52b2tlRVBGdmlpaUVpaWkoaTQsIGkxLCBpMiwgaTMpIHsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlpaVtpNCAmIDMxXShpMSwgaTIsIGkzKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlPc2NFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlNaXhFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlNYXBFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlFbnZFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlEeW5FRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUUxNGNvbnN0cnVjdF9udWxsRXYoKSB7CiB2YXIgaTEgPSAwOwogaTEgPSBfX1pud2ooOCkgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlkaWQoaTYsIGkxLCBpMiwgZDMsIGk0LCBkNSkgewogaTYgPSBpNiB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBpNCA9IGk0IHwgMDsKIGQ1ID0gK2Q1OwogRlVOQ1RJT05fVEFCTEVfdmlpZGlkW2k2ICYgMV0oaTEgfCAwLCBpMiB8IDAsICtkMywgaTQgfCAwLCArZDUpOwp9CgpmdW5jdGlvbiBfX19zdHJkdXAoaTMpIHsKIGkzID0gaTMgfCAwOwogdmFyIGkxID0gMCwgaTIgPSAwOwogaTIgPSAoX3N0cmxlbihpMykgfCAwKSArIDEgfCAwOwogaTEgPSBfbWFsbG9jKGkyKSB8IDA7CiBpZiAoIWkxKSBpMSA9IDA7IGVsc2UgX21lbWNweShpMSB8IDAsIGkzIHwgMCwgaTIgfCAwKSB8IDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTRtYXhpRGlzdG9ydGlvbjEyZmFzdEF0YW5EaXN0RWRkKGkzLCBkMSwgZDIpIHsKIGkzID0gaTMgfCAwOwogZDEgPSArZDE7CiBkMiA9ICtkMjsKIGQxID0gZDEgKiBkMjsKIHJldHVybiArKDEuMCAvIChkMiAvIChkMiAqIGQyICogLjI4ICsgMS4wKSkgKiAoZDEgLyAoZDEgKiBkMSAqIC4yOCArIDEuMCkpKTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9paWlpaShpNSwgaTEsIGkyLCBpMywgaTQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaWlpaWlbaTUgJiAzXShpMSB8IDAsIGkyIHwgMCwgaTMgfCAwLCBpNCB8IDApIHwgMDsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWRpZGQoaTYsIGkxLCBkMiwgaTMsIGQ0LCBkNSkgewogaTYgPSBpNiB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogRlVOQ1RJT05fVEFCTEVfdmlkaWRkW2k2ICYgMV0oaTEgfCAwLCArZDIsIGkzIHwgMCwgK2Q0LCArZDUpOwp9CgpmdW5jdGlvbiBfaTY0QWRkKGkxLCBpMiwgaTMsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGkzID0gaTEgKyBpMyA+Pj4gMDsKIHJldHVybiAodGVtcFJldDAgPSBpMiArIGk0ICsgKGkzID4+PiAwIDwgaTEgPj4+IDAgfCAwKSA+Pj4gMCwgaTMgfCAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk45bWF4aUNsb2NrMTVzZXRUaWNrc1BlckJlYXRFaShpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBIRUFQMzJbaTEgKyA4MCA+PiAyXSA9IGkyOwogSEVBUEY2NFtpMSArIDY0ID4+IDNdID0gKyhpMiB8IDApICogKCtIRUFQRjY0W2kxICsgNzIgPj4gM10gLyA2MC4wKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlpaShpNSwgaTEsIGkyLCBpMywgaTQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWlpW2k1ICYgM10oaTEgfCAwLCBpMiB8IDAsIGkzIHwgMCwgaTQgfCAwKTsKfQoKZnVuY3Rpb24gX19aTjEybWF4aUVudmVsb3BlN3RyaWdnZXJFaWQoaTMsIGkyLCBkMSkgewogaTMgPSBpMyB8IDA7CiBpMiA9IGkyIHwgMDsKIGQxID0gK2QxOwogSEVBUDMyW2kzICsgNDAgPj4gMl0gPSAxOwogSEVBUDMyW2kzICsgNDQgPj4gMl0gPSBpMjsKIEhFQVBGNjRbaTMgKyA0OCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlN3RyaWdnZXJFdihpMSkgewogaTEgPSBpMSB8IDA7CiBpMSA9IGkxICsgNDAgfCAwOwogSEVBUDMyW2kxID4+IDJdID0gMDsKIEhFQVAzMltpMSArIDQgPj4gMl0gPSAwOwogSEVBUDMyW2kxICsgOCA+PiAyXSA9IDA7CiBIRUFQMzJbaTEgKyAxMiA+PiAyXSA9IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlckl2SlJOU3QzX18xNnZlY3RvcklmTlMyXzlhbGxvY2F0b3JJZkVFRUVFRTZpbnZva2VFUEZ2UzdfRVBTNl8oaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlbaTIgJiA1MTFdKGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySXZKUk5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUVFNmludm9rZUVQRnZTN19FUFM2XyhpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBGVU5DVElPTl9UQUJMRV92aVtpMiAmIDUxMV0oaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RkZGRkZChpNiwgZDEsIGQyLCBkMywgZDQsIGQ1KSB7CiBpNiA9IGk2IHwgMDsKIGQxID0gK2QxOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RkZGRkZFtpNiAmIDNdKCtkMSwgK2QyLCArZDMsICtkNCwgK2Q1KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9paWlpZChpNSwgaTEsIGkyLCBpMywgZDQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaWlpaWRbaTUgJiAzXShpMSB8IDAsIGkyIHwgMCwgaTMgfCAwLCArZDQpIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwbWF4aUxhZ0V4cElkRTRpbml0RWRkKGkzLCBkMSwgZDIpIHsKIGkzID0gaTMgfCAwOwogZDEgPSArZDE7CiBkMiA9ICtkMjsKIEhFQVBGNjRbaTMgPj4gM10gPSBkMTsKIEhFQVBGNjRbaTMgKyA4ID4+IDNdID0gMS4wIC0gZDE7CiBIRUFQRjY0W2kzICsgMTYgPj4gM10gPSBkMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gYjE0KGkxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGk3LCBpOCkgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogaTcgPSBpNyB8IDA7CiBpOCA9IGk4IHwgMDsKIG51bGxGdW5jX2RpZGRkZGRpaSgxNCk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpaWRpKGk1LCBpMSwgaTIsIGQzLCBpNCkgewogaTUgPSBpNSB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBpNCA9IGk0IHwgMDsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlpZGlbaTUgJiAxXShpMSB8IDAsIGkyIHwgMCwgK2QzLCBpNCB8IDApOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm85Y2FuX2NhdGNoRVBLTlNfMTZfX3NoaW1fdHlwZV9pbmZvRVJQdihpMiwgaTMsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKGkyIHwgMCkgPT0gKGkzIHwgMCkgfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX3ZpaWlpKGk1LCBpMSwgaTIsIGkzLCBpNCkgewogaTUgPSBpNSB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIEZVTkNUSU9OX1RBQkxFX3ZpaWlpW2k1ICYgNjNdKGkxIHwgMCwgaTIgfCAwLCBpMyB8IDAsIGk0IHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUVudjlzZXRBdHRhY2tFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBkMSA9IDEuMCAtICtNYXRoX3BvdyguMDEsICsoMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgKiBkMSAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMTYgPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTIxZ2V0Tm9ybWFsaXNlZFBvc2l0aW9uRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGNjRbaTEgPj4gM10gLyArKEhFQVAzMlsoSEVBUDMyW2kxICsgOCA+PiAyXSB8IDApICsgMTA4ID4+IDJdIHwgMCkpOwp9CgpmdW5jdGlvbiBfX1pOOW1heGlTbmFyZTEwc2V0UmVsZWFzZUVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIGQxID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAqIGQxICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyAyMTYgPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFMjFnZXROb3JtYWxpc2VkUG9zaXRpb25FdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEY2NFtpMSA+PiAzXSAvICsoSEVBUDMyWyhIRUFQMzJbaTEgKyA4ID4+IDJdIHwgMCkgKyAxMDggPj4gMl0gfCAwKSk7Cn0KCmZ1bmN0aW9uIF9fX3N5c2NhbGxfcmV0KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHZhciBpMiA9IDA7CiBpZiAoaTEgPj4+IDAgPiA0Mjk0OTYzMjAwKSB7CiAgaTIgPSBfX19lcnJub19sb2NhdGlvbigpIHwgMDsKICBIRUFQMzJbaTIgPj4gMl0gPSAwIC0gaTE7CiAgaTEgPSAtMTsKIH0KIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk44bWF4aUtpY2sxMHNldFJlbGVhc2VFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBkMSA9ICtNYXRoX3BvdyguMDEsICsoMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgKiBkMSAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMTY4ID4+IDNdID0gZDE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk44bWF4aUhhdHMxMHNldFJlbGVhc2VFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBkMSA9ICtNYXRoX3BvdyguMDEsICsoMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgKiBkMSAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgMjE2ID4+IDNdID0gZDE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGIyKGkxLCBpMiwgaTMsIGk0LCBpNSwgZDYsIGQ3LCBpOCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogZDcgPSArZDc7CiBpOCA9IGk4IHwgMDsKIG51bGxGdW5jX3ZpaWlpaWRkaSgyKTsKfQoKZnVuY3Rpb24gX19fZXJybm9fbG9jYXRpb24oKSB7CiB2YXIgaTEgPSAwOwogaWYgKCEoSEVBUDMyWzU5MzVdIHwgMCkpIGkxID0gMjM3OTY7IGVsc2UgewogIGkxID0gKF9wdGhyZWFkX3NlbGYoKSB8IDApICsgNjAgfCAwOwogIGkxID0gSEVBUDMyW2kxID4+IDJdIHwgMDsKIH0KIHJldHVybiBpMSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUVudjEwc2V0UmVsZWFzZUVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIGQxID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAqIGQxICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyA0MCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlEeW4xMHNldFJlbGVhc2VFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBkMSA9ICtNYXRoX3BvdyguMDEsICsoMS4wIC8gKCsoSEVBUDMyWzUwODNdIHwgMCkgKiBkMSAqIC4wMDEpKSk7CiBIRUFQRjY0W2kyICsgNDggPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlkZChpNSwgaTEsIGkyLCBkMywgZDQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpaWRkW2k1ICYgN10oaTEgfCAwLCBpMiB8IDAsICtkMywgK2Q0KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWRpZChpNSwgaTEsIGQyLCBpMywgZDQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpZGlkW2k1ICYgMV0oaTEgfCAwLCArZDIsIGkzIHwgMCwgK2Q0KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWRkaShpNSwgaTEsIGQyLCBkMywgaTQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpZGRpW2k1ICYgMV0oaTEgfCAwLCArZDIsICtkMywgaTQgfCAwKTsKfQoKZnVuY3Rpb24gX19aTjltYXhpQ2xvY2s4c2V0VGVtcG9FZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyICsgNzIgPj4gM10gPSBkMTsKIEhFQVBGNjRbaTIgKyA2NCA+PiAzXSA9IGQxIC8gNjAuMCAqICsoSEVBUDMyW2kyICsgODAgPj4gMl0gfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRHluOXNldEF0dGFja0VkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIGQxID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAqIGQxICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyA0MCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBkeW5DYWxsX3ZpaWlkKGk1LCBpMSwgaTIsIGkzLCBkNCkgewogaTUgPSBpNSB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIEZVTkNUSU9OX1RBQkxFX3ZpaWlkW2k1ICYgM10oaTEgfCAwLCBpMiB8IDAsIGkzIHwgMCwgK2Q0KTsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWRpaShpNSwgaTEsIGQyLCBpMywgaTQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiBGVU5DVElPTl9UQUJMRV92aWRpaVtpNSAmIDFdKGkxIHwgMCwgK2QyLCBpMyB8IDAsIGk0IHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUVudjhzZXREZWNheUVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIGQxID0gK01hdGhfcG93KC4wMSwgKygxLjAgLyAoKyhIRUFQMzJbNTA4M10gfCAwKSAqIGQxICogLjAwMSkpKTsKIEhFQVBGNjRbaTIgKyAyNCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyMW1heGlGRlRPY3RhdmVBbmFseXplck5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlTYW1wbGU0cGxheUVkZGQoaTQsIGQyLCBkMywgZDEpIHsKIGk0ID0gaTQgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGQxID0gK2QxOwogcmV0dXJuICsoK19fWk4xMG1heGlTYW1wbGU0cGxheUVkZGRSZChpNCwgZDIsIGQzLCBkMSwgaTQgKyA0MCB8IDApKTsKfQoKZnVuY3Rpb24gYjQyKGkxLCBpMiwgZDMsIGQ0LCBkNSwgaTYsIGk3KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogaTYgPSBpNiB8IDA7CiBpNyA9IGk3IHwgMDsKIG51bGxGdW5jX2RpaWRkZGlpKDQyKTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlkZGQoaTUsIGkxLCBkMiwgZDMsIGQ0KSB7CiBpNSA9IGk1IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWRkZFtpNSAmIDddKGkxIHwgMCwgK2QyLCArZDMsICtkNCk7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlkZChpNSwgaTEsIGkyLCBkMywgZDQpIHsKIGk1ID0gaTUgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBGVU5DVElPTl9UQUJMRV92aWlkZFtpNSAmIDFdKGkxIHwgMCwgaTIgfCAwLCArZDMsICtkNCk7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfdmlkaWQoaTUsIGkxLCBkMiwgaTMsIGQ0KSB7CiBpNSA9IGk1IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogRlVOQ1RJT05fVEFCTEVfdmlkaWRbaTUgJiAxXShpMSB8IDAsICtkMiwgaTMgfCAwLCArZDQpOwp9CgpmdW5jdGlvbiBiNTAoaTEsIGkyLCBkMywgZDQsIGQ1LCBpNiwgZDcpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBpNiA9IGk2IHwgMDsKIGQ3ID0gK2Q3OwogbnVsbEZ1bmNfZGlpZGRkaWQoNTApOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gYjE5KGkxLCBpMiwgZDMsIGQ0LCBpNSwgZDYsIGQ3KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIG51bGxGdW5jX2RpaWRkaWRkKDE5KTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTlNfOWFsbG9jYXRvcklTM19FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoSEVBUDhbaTEgPj4gMF0gJiAxKSBfX1pkbFB2KEhFQVAzMltpMSArIDggPj4gMl0gfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpT3NjNW5vaXNlRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogdmFyIGQyID0gMC4wOwogZDIgPSArKF9yYW5kKCkgfCAwKSAqIDQuNjU2NjEyODczMDc3MzkzZS0xMCAqIDIuMCArIC0xLjA7CiBIRUFQRjY0W2kxICsgMzIgPj4gM10gPSBkMjsKIHJldHVybiArZDI7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGI3KGkxLCBpMiwgZDMsIGk0LCBkNSwgZDYsIGQ3KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBpNCA9IGk0IHwgMDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIG51bGxGdW5jX2RpaWRpZGRkKDcpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gYjQwKGkxLCBpMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBkNyA9ICtkNzsKIG51bGxGdW5jX2RpaWRkZGRkKDQwKTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0bWF4aURpc3RvcnRpb25OU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTJtYXhpU2V0dGluZ3M1c2V0dXBFaWlpKGkzLCBpMiwgaTEpIHsKIGkzID0gaTMgfCAwOwogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMls1MDgzXSA9IGkzOwogSEVBUDMyWzUwODRdID0gaTI7CiBIRUFQMzJbNTA4NV0gPSBpMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF9paWlpKGk0LCBpMSwgaTIsIGkzKSB7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9paWlpW2k0ICYgMTVdKGkxIHwgMCwgaTIgfCAwLCBpMyB8IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTNtYXhpRGVsYXlsaW5lTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTNtYXhpRENCbG9ja2VyTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpTGFnRXhwSWRFTlNfOWFsbG9jYXRvcklTMl9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFM2dldEVSS1M2XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTJtYXhpRW52ZWxvcGVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVFRTNnZXRFUktTNl8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTExbWF4aUZsYW5nZXJOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMG1heGlTYW1wbGVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk4xMG1heGlTYW1wbGVEMkV2KGkxICsgMTYgfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTksyMW1heGlGRlRPY3RhdmVBbmFseXplcjE1Z2V0UGVha0hvbGRUaW1lRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMlsoSEVBUDMyW2kyICsgMzYgPj4gMl0gfCAwKSArIChpMSA8PCAyKSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQTlN0M19fMTZ2ZWN0b3JJaU5TMl85YWxsb2NhdG9ySWlFRUVFSkVFNmludm9rZUVQRlM3X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9pW2kxICYgNjNdKCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJUE5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUpFRTZpbnZva2VFUEZTN192RShpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaVtpMSAmIDYzXSgpIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySVBOU3QzX18xNnZlY3RvcklkTlMyXzlhbGxvY2F0b3JJZEVFRUVKRUU2aW52b2tlRVBGUzdfdkUoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEZVTkNUSU9OX1RBQkxFX2lbaTEgJiA2M10oKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQTlN0M19fMTZ2ZWN0b3JJY05TMl85YWxsb2NhdG9ySWNFRUVFSkVFNmludm9rZUVQRlM3X3ZFKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9pW2kxICYgNjNdKCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVFM2dldEVSS1M2XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpRmlsdGVyTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpQ2hvcnVzTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWlpKGk0LCBpMSwgaTIsIGkzKSB7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlpaVtpNCAmIDddKGkxIHwgMCwgaTIgfCAwLCBpMyB8IDApOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMG1heGlTYW1wbGVFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aTjEwbWF4aVNhbXBsZUQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGI5KGkxLCBpMiwgaTMsIGk0LCBkNSwgZDYsIGk3KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBpNyA9IGk3IHwgMDsKIG51bGxGdW5jX3ZpaWlpZGRpKDkpOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk5bWF4aVNuYXJlTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOW1heGlDbG9ja05TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThtYXhpS2lja05TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThtYXhpSGF0c05TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxMGdldEF2ZXJhZ2VFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMlsoSEVBUDMyW2kyICsgMjggPj4gMl0gfCAwKSArIChpMSA8PCAyKSA+PiAyXSk7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aU1hcDVjbGFtcElkRUVUX1MxX1MxX1MxXyhkMywgZDIsIGQxKSB7CiBkMyA9ICtkMzsKIGQyID0gK2QyOwogZDEgPSArZDE7CiBpZiAoIShkMyA+IGQxKSkgaWYgKGQzIDwgZDIpIGQxID0gZDI7IGVsc2UgZDEgPSBkMzsKIHJldHVybiArZDE7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfaWlpZChpNCwgaTEsIGkyLCBkMykgewogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaWlpZFtpNCAmIDNdKGkxIHwgMCwgaTIgfCAwLCArZDMpIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlTVkZOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU9zY05TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpTWl4TlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlNYXBOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUVudk5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRHluTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSk7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN2NvbnZlcnROU185YWxsb2NhdG9ySVMxX0VFRUQwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aTlN0M19fMTE0X19zaGFyZWRfY291bnREMkV2KGkxKTsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTBnZXRTcGUyQXZnRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMlsoSEVBUDMyW2kyICsgNDggPj4gMl0gfCAwKSArIChpMSA8PCAyKSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBiMzcoaTEsIGkyLCBkMywgaTQsIGQ1LCBkNiwgZDcpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIGQ3ID0gK2Q3OwogbnVsbEZ1bmNfdmlpZGlkZGQoMzcpOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpaWQoaTQsIGkxLCBpMiwgZDMpIHsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWlkW2k0ICYgN10oaTEgfCAwLCBpMiB8IDAsICtkMyk7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlkaShpNCwgaTEsIGQyLCBpMykgewogaTQgPSBpNCB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogaTMgPSBpMyB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpZGlbaTQgJiAxXShpMSB8IDAsICtkMiwgaTMgfCAwKTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlGRlROU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWk43bWF4aUZGVEQyRXYoaTEgKyAxMiB8IDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNm1heGlNRkNDQW5hbHlzZXJJZEVOU185YWxsb2NhdG9ySVMyX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXI3Z2V0UGVha0VpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjMyWyhIRUFQMzJbaTIgKyAzMiA+PiAyXSB8IDApICsgKGkxIDw8IDIpID4+IDJdKTsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlpKGk0LCBpMSwgaTIsIGkzKSB7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIEZVTkNUSU9OX1RBQkxFX3ZpaWlbaTQgJiAzMV0oaTEgfCAwLCBpMiB8IDAsIGkzIHwgMCk7Cn0KCmZ1bmN0aW9uIGI0KGkxLCBpMiwgZDMsIGk0LCBkNSwgaTYpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiBpNiA9IGk2IHwgMDsKIG51bGxGdW5jX2RpaWRpZGkoNCk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOSzdtYXhpRkZUMTNnZXRNYWduaXR1ZGVzRXYoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRUMyRVJLUzNfKGkxLCBpMiArIDQgfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjE0bWF4aURpc3RvcnRpb244YXRhbkRpc3RFZGQoaTMsIGQxLCBkMikgewogaTMgPSBpMyB8IDA7CiBkMSA9ICtkMTsKIGQyID0gK2QyOwogcmV0dXJuICsoMS4wIC8gK01hdGhfYXRhbigrZDIpICogK01hdGhfYXRhbigrKGQxICogZDIpKSk7Cn0KCmZ1bmN0aW9uIGI1NyhpMSwgZDIsIGQzLCBkNCwgaTUsIGk2KSB7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogaTYgPSBpNiB8IDA7CiBudWxsRnVuY19kaWRkZGlpKDU3KTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIGIyMyhpMSwgaTIsIGQzLCBkNCwgaTUsIGQ2KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogZDYgPSArZDY7CiBudWxsRnVuY19kaWlkZGlkKDIzKTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpRkZURUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWk43bWF4aUZGVEQyRXYoaTEpOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fX2N4YV9pc19wb2ludGVyX3R5cGUoaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgaTEgPSAwOyBlbHNlIGkxID0gKF9fX2R5bmFtaWNfY2FzdChpMSwgMTU5NjgsIDE2MDE2LCAwKSB8IDApICE9IDA7CiByZXR1cm4gaTEgJiAxIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBiNDUoaTEsIGQyLCBkMywgZDQsIGk1LCBkNikgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBpNSA9IGk1IHwgMDsKIGQ2ID0gK2Q2OwogbnVsbEZ1bmNfZGlkZGRpZCg0NSk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBiMjQoaTEsIGQyLCBpMywgZDQsIGQ1LCBkNikgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBkNSA9ICtkNTsKIGQ2ID0gK2Q2OwogbnVsbEZ1bmNfZGlkaWRkZCgyNCk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNG1heGlEaXN0b3J0aW9uTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzdtYXhpRkZUOWdldFBoYXNlc0V2KGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIF9fWk5TdDNfXzE2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVDMkVSS1MzXyhpMSwgaTIgKyAxNiB8IDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlNRkNDQW5hbHlzZXJJZEVFRUUzZ2V0RVJLUzVfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RpZGQoaTQsIGkxLCBkMiwgZDMpIHsKIGk0ID0gaTQgfCAwOwogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWRkW2k0ICYgN10oaTEgfCAwLCArZDIsICtkMyk7Cn0KCmZ1bmN0aW9uIGIyNihpMSwgaTIsIGkzLCBpNCwgaTUsIGk2KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIGk1ID0gaTUgfCAwOwogaTYgPSBpNiB8IDA7CiBudWxsRnVuY192aWlpaWlpKDI2KTsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTNtYXhpRGVsYXlsaW5lTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxM21heGlEQ0Jsb2NrZXJOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aUxhZ0V4cElkRU5TXzlhbGxvY2F0b3JJUzJfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWlkKGk0LCBpMSwgaTIsIGQzKSB7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIEZVTkNUSU9OX1RBQkxFX3ZpaWRbaTQgJiAzMV0oaTEgfCAwLCBpMiB8IDAsICtkMyk7Cn0KCmZ1bmN0aW9uIGIwKGkxLCBkMiwgZDMsIGk0LCBkNSwgZDYpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIG51bGxGdW5jX2RpZGRpZGQoMCk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMm1heGlFbnZlbG9wZU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gYjIwKGkxLCBkMiwgZDMsIGQ0LCBkNSwgZDYpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIG51bGxGdW5jX2RpZGRkZGQoMjApOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTFtYXhpRmxhbmdlck5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpU2FtcGxlTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMG1heGlGaWx0ZXJOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aUNob3J1c05TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzE2dmVjdG9ySWlOU185YWxsb2NhdG9ySWlFRUU0c2l6ZUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoSEVBUDMyW2kxICsgNCA+PiAyXSB8IDApIC0gKEhFQVAzMltpMSA+PiAyXSB8IDApID4+IDIgfCAwOwp9CgpmdW5jdGlvbiBfX1pOS1N0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTRzaXplRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIChIRUFQMzJbaTEgKyA0ID4+IDJdIHwgMCkgLSAoSEVBUDMyW2kxID4+IDJdIHwgMCkgPj4gMiB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xNnZlY3RvcklkTlNfOWFsbG9jYXRvcklkRUVFNHNpemVFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSAtIChIRUFQMzJbaTEgPj4gMl0gfCAwKSA+PiAzIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aURpc3RvcnRpb25FRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk5bWF4aVNuYXJlTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk5bWF4aUNsb2NrTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQxMmdldE1hZ25pdHVkZUVpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjMyWyhIRUFQMzJbaTIgKyA0ID4+IDJdIHwgMCkgKyAoaTEgPDwgMikgPj4gMl0pOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEQ0Jsb2NrZXJFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlMYWdFeHBJZEVFRUUzZ2V0RVJLUzVfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX2RkZGQoaTQsIGQxLCBkMiwgZDMpIHsKIGk0ID0gaTQgfCAwOwogZDEgPSArZDE7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kZGRkW2k0ICYgMV0oK2QxLCArZDIsICtkMyk7Cn0KCmZ1bmN0aW9uIF9fX3VkaXZkaTMoaTEsIGkyLCBpMywgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogcmV0dXJuIF9fX3VkaXZtb2RkaTQoaTEsIGkyLCBpMywgaTQsIDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlLaWNrTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUlGRlROU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThtYXhpSGF0c05TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTJtYXhpRW52ZWxvcGVFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aVNWRk5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlPc2NOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpTWl4TlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU1hcE5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlGRlROU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRW52TlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUR5bk5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN2NvbnZlcnROU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUZGVDE0Z2V0TWFnbml0dWRlREJFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMlsoSEVBUDMyW2kyID4+IDJdIHwgMCkgKyAoaTEgPDwgMikgPj4gMl0pOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWRkKGk0LCBpMSwgZDIsIGQzKSB7CiBpNCA9IGk0IHwgMDsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIEZVTkNUSU9OX1RBQkxFX3ZpZGRbaTQgJiAxXShpMSB8IDAsICtkMiwgK2QzKTsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzE2dmVjdG9ySWNOU185YWxsb2NhdG9ySWNFRUU0c2l6ZUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoSEVBUDMyW2kxICsgNCA+PiAyXSB8IDApIC0gKEhFQVAzMltpMSA+PiAyXSB8IDApIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySVAxMm1heGlTZXR0aW5nc0pFRTZpbnZva2VFUEZTM192RShpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaVtpMSAmIDYzXSgpIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpU2FtcGxlRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpQ2hvcnVzRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gYjYwKGkxLCBpMiwgZDMsIGk0LCBkNSwgZDYpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogZDUgPSArZDU7CiBkNiA9ICtkNjsKIG51bGxGdW5jX3ZpaWRpZGQoNjApOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQ4Z2V0UGhhc2VFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMlsoSEVBUDMyW2kyICsgMTYgPj4gMl0gfCAwKSArIChpMSA8PCAyKSA+PiAyXSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQMTF2ZWN0b3JUb29sc0pFRTZpbnZva2VFUEZTM192RShpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaVtpMSAmIDYzXSgpIHwgMDsKfQoKZnVuY3Rpb24gX19aTktTdDNfXzEyMF9fdmVjdG9yX2Jhc2VfY29tbW9uSUxiMUVFMjBfX3Rocm93X2xlbmd0aF9lcnJvckV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fX2Fzc2VydF9mYWlsKDM5NTEyLCAzOTUzNSwgMzAzLCAzOTY0MSk7Cn0KCmZ1bmN0aW9uIF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjIwc2V0UGVha0hvbGRUaW1lVG90YWxFaShpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBIRUFQMzJbaTEgKyA0MCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aVNuYXJlRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOW1heGlDbG9ja0VFRTNnZXRFUktTNF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfaWlpKGkzLCBpMSwgaTIpIHsKIGkzID0gaTMgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9paWlbaTMgJiAxMjddKGkxIHwgMCwgaTIgfCAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTE0bWF4aURpc3RvcnRpb25FRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpS2lja0VFRTNnZXRFUktTNF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRTNnZXRFUktTNF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSGF0c0VFRTNnZXRFUktTNF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIGI2MShpMSwgZDIsIGkzLCBkNCwgaTUpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBpMyA9IGkzIHwgMDsKIGQ0ID0gK2Q0OwogaTUgPSBpNSB8IDA7CiBudWxsRnVuY19kaWRpZGkoNjEpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gYjU0KGkxLCBpMiwgZDMsIGk0LCBkNSkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIG51bGxGdW5jX2RpaWRpZCg1NCk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBiMzkoaTEsIGkyLCBkMywgZDQsIGk1KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGk1ID0gaTUgfCAwOwogbnVsbEZ1bmNfZGlpZGRpKDM5KTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIGIxMShpMSwgZDIsIGkzLCBkNCwgZDUsIGQ2KSB7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogZDYgPSArZDY7CiBudWxsRnVuY192aWRpZGRkKDExKTsKfQoKZnVuY3Rpb24gX19aTjIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMThzZXROQXZlcmFnZXNQZXJPY3RFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTIgKyAxMiA+PiAyXSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNXNldFNhbXBsaW5nUmF0ZUVpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEhFQVBGMzJbaTIgPj4gMl0gPSArKGkxIHwgMCk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTEzbWF4aURlbGF5bGluZUVFdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoIWkxKSByZXR1cm47CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTNtYXhpRENCbG9ja2VyRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMG1heGlMYWdFeHBJZEVFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpU1ZGRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlPc2NFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVFRTNnZXRFUktTNF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVFRTNnZXRFUktTNF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRHluRUVFM2dldEVSS1M0XyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUUzZ2V0RVJLUzRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMm1heGlTZXR0aW5nc0VFdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoIWkxKSByZXR1cm47CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTJtYXhpRW52ZWxvcGVFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTExdmVjdG9yVG9vbHNFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTExbWF4aUZsYW5nZXJFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfZGlpKGkzLCBpMSwgaTIpIHsKIGkzID0gaTMgfCAwOwogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIHJldHVybiArRlVOQ1RJT05fVEFCTEVfZGlpW2kzICYgMzFdKGkxIHwgMCwgaTIgfCAwKTsKfQoKZnVuY3Rpb24gYjUzKGkxLCBkMiwgZDMsIGk0LCBkNSkgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIG51bGxGdW5jX2RpZGRpZCg1Myk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBiMzEoaTEsIGkyLCBkMywgZDQsIGQ1KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogbnVsbEZ1bmNfZGlpZGRkKDMxKTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjE3c2V0TGluRVFJbnRlcmNlcHRFZihpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjMyW2kyICsgNTYgPj4gMl0gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTBtYXhpRmlsdGVyRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMG1heGlDaG9ydXNFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjE2c2V0UGVha0RlY2F5UmF0ZUVmKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIEhFQVBGMzJbaTIgKyA0NCA+PiAyXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpU2FtcGxlOWdldExlbmd0aEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMltpMSArIDEwOCA+PiAyXSA9IH5+KCsoSEVBUDMyW2kxICsgOTYgPj4gMl0gfCAwKSAqIC41KTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUlOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTMxOTI7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJTlN0M19fMTZ2ZWN0b3JJZk5TMl85YWxsb2NhdG9ySWZFRUVFRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDEzNDQwOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUVFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxMzI4MDsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUlOU3QzX18xNnZlY3RvckljTlMyXzlhbGxvY2F0b3JJY0VFRUVFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTMzNjA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDE1NTkyOwp9CgpmdW5jdGlvbiBfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNXNldFNwZWNGcmVxU3BhbkVmKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIEhFQVBGMzJbaTIgKyAxNiA+PiAyXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNXNldEZpcnN0T2N0RnJlcUVmKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIEhFQVBGMzJbaTIgKyAyMCA+PiAyXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk5bWF4aVNuYXJlRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk5bWF4aUNsb2NrRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDE1NDk2Owp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNG1heGlEaXN0b3J0aW9uTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjE0c2V0QXZnRnJlcUluY3JFZihpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjMyW2kyICsgMjQgPj4gMl0gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJOG1heGlLaWNrRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk4bWF4aUhhdHNFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUVFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxNTU0NDsKfQoKZnVuY3Rpb24gZHluQ2FsbF9paWQoaTMsIGkxLCBkMikgewogaTMgPSBpMyB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogcmV0dXJuIEZVTkNUSU9OX1RBQkxFX2lpZFtpMyAmIDNdKGkxIHwgMCwgK2QyKSB8IDA7Cn0KCmZ1bmN0aW9uIGIxNShpMSwgaTIsIGkzLCBpNCwgaTUpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiBudWxsRnVuY192aWlpaWkoMTUpOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxM21heGlEZWxheWxpbmVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTNtYXhpRENCbG9ja2VyTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aUxhZ0V4cElkRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxM3NldExpbkVRU2xvcGVFZihpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjMyW2kyICsgNTIgPj4gMl0gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTJzZXROU3BlY3RydW1FaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTIgKyA0ID4+IDJdID0gaTE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjEyc2V0TkF2ZXJhZ2VzRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kyICsgOCA+PiAyXSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk3bWF4aVNWRkVFdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoIWkxKSByZXR1cm47CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJN21heGlPc2NFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpTWl4RUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk3bWF4aU1hcEVFdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoIWkxKSByZXR1cm47CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJN21heGlFbnZFRXZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogaWYgKCFpMSkgcmV0dXJuOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpRHluRUV2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghaTEpIHJldHVybjsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk3Y29udmVydEVFdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiBpZiAoIWkxKSByZXR1cm47CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTJtYXhpRW52ZWxvcGVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaWQoaTMsIGkxLCBkMikgewogaTMgPSBpMyB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogcmV0dXJuICtGVU5DVElPTl9UQUJMRV9kaWRbaTMgJiAxNV0oaTEgfCAwLCArZDIpOwp9CgpmdW5jdGlvbiBiMjUoZDEsIGQyLCBkMywgZDQsIGQ1KSB7CiBkMSA9ICtkMTsKIGQyID0gK2QyOwogZDMgPSArZDM7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogbnVsbEZ1bmNfZGRkZGRkKDI1KTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTExbWF4aUZsYW5nZXJOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWkoaTMsIGkxLCBpMikgewogaTMgPSBpMyB8IDA7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlpW2kzICYgMTI3XShpMSB8IDAsIGkyIHwgMCk7Cn0KCmZ1bmN0aW9uIGIzMChpMSwgaTIsIGQzLCBpNCwgaTUpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGk0ID0gaTQgfCAwOwogaTUgPSBpNSB8IDA7CiBudWxsRnVuY192aWlkaWkoMzApOwp9CgpmdW5jdGlvbiBfd2N0b21iKGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGlmICghaTEpIGkxID0gMDsgZWxzZSBpMSA9IF93Y3J0b21iKGkxLCBpMiwgMCkgfCAwOwogcmV0dXJuIGkxIHwgMDsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpRmlsdGVyTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aUNob3J1c05TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX2VtdmFsX3Rha2VfdmFsdWVfX3dyYXBwZXIoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogcmV0dXJuIF9fZW12YWxfdGFrZV92YWx1ZShpMSB8IDAsIGkyIHwgMCkgfCAwOwp9CgpmdW5jdGlvbiBfX1pOOW1heGlDbG9jazdzZXRUaWNrRWkoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogSEVBUDhbaTEgKyA4NCA+PiAwXSA9IChpMiB8IDApICE9IDAgJiAxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpTGFnRXhwSWRFMThzZXRBbHBoYVJlY2lwcm9jYWxFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyICsgOCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk5bWF4aVNuYXJlTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTltYXhpQ2xvY2tOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gYjU2KGkxLCBpMiwgZDMsIGk0LCBkNSkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBkNSA9ICtkNTsKIG51bGxGdW5jX3ZpaWRpZCg1Nik7Cn0KCmZ1bmN0aW9uIGIyNyhpMSwgaTIsIGkzLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogaTQgPSBpNCB8IDA7CiBudWxsRnVuY19kaWlpaSgyNyk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUtpY2tOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlIYXRzTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aVNWRk5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU9zY05TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU1peE5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU1hcE5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUVudk5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUR5bk5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3Y29udmVydE5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBiMTgoaTEsIGkyLCBpMywgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogbnVsbEZ1bmNfaWlpaWkoMTgpOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIGI1MShpMSwgaTIsIGQzLCBpNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBudWxsRnVuY19kaWlkaSg1MSk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBiMTcoaTEsIGQyLCBpMywgZDQsIGQ1KSB7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIGQ1ID0gK2Q1OwogbnVsbEZ1bmNfdmlkaWRkKDE3KTsKfQoKZnVuY3Rpb24gX19aTjltYXhpQ2xvY2sxNXNldEN1cnJlbnRDb3VudEVpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMltpMiArIDQ4ID4+IDJdID0gaTE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMm1heGlFbnZlbG9wZTExc2V0VmFsaW5kZXhFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTIgKyA0NCA+PiAyXSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX0dMT0JBTF9fc3ViX0lfbWF4aUdyYWluc19jcHAoKSB7CiBfX1pONDlFbXNjcmlwdGVuQmluZGluZ0luaXRpYWxpemVyX215X21vZHVsZV9tYXhpR3JhaW5zQzJFdigwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gZHluQ2FsbF92aWQoaTMsIGkxLCBkMikgewogaTMgPSBpMyB8IDA7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogRlVOQ1RJT05fVEFCTEVfdmlkW2kzICYgNjNdKGkxIHwgMCwgK2QyKTsKfQoKZnVuY3Rpb24gX19aTjEybWF4aUVudmVsb3BlMTJzZXRBbXBsaXR1ZGVFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyICsgNDggPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkyMW1heGlGRlRPY3RhdmVBbmFseXplckVFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxNTI3MjsKfQoKZnVuY3Rpb24gYjYyKGkxLCBpMiwgaTMsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIG51bGxGdW5jX2lpaWlkKDYyKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMjBnZXRQZWFrSG9sZFRpbWVUb3RhbEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgKyA0MCA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk45bWF4aUNsb2NrNnNldEJwc0VpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEhFQVBGNjRbaTIgKyA2NCA+PiAzXSA9ICsoaTEgfCAwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjltYXhpQ2xvY2s2c2V0QnBtRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogSEVBUEY2NFtpMiArIDcyID4+IDNdID0gKyhpMSB8IDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpRmlsdGVyMTJzZXRSZXNvbmFuY2VFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyICsgMjMyID4+IDNdID0gZDE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fR0xPQkFMX19zdWJfSV9iaW5kX2NwcCgpIHsKIF9fWk41M0Vtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzQzJFdigwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gc2V0VGhyZXcoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaWYgKCFfX1RIUkVXX18pIHsKICBfX1RIUkVXX18gPSBpMTsKICB0aHJld1ZhbHVlID0gaTI7CiB9Cn0KCmZ1bmN0aW9uIGIzNihpMSwgZDIsIGkzLCBkNCkgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBudWxsRnVuY19kaWRpZCgzNik7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBiMzQoaTEsIGkyLCBkMywgZDQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogbnVsbEZ1bmNfZGlpZGQoMzQpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTjltYXhpQ2xvY2sxMnNldExhc3RDb3VudEVpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMltpMiArIDUyID4+IDJdID0gaTE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aU9zYzRyZWN0RWRkKGkzLCBkMiwgZDEpIHsKIGkzID0gaTMgfCAwOwogZDIgPSArZDI7CiBkMSA9ICtkMTsKIHJldHVybiArKCtIRUFQRjY0W2kzICsgMzIgPj4gM10pOwp9CgpmdW5jdGlvbiBfX1pOMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFMTFnZXRQb3NpdGlvbkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjY0W2kxID4+IDNdKTsKfQoKZnVuY3Rpb24gX19aTjE0bWF4aURpc3RvcnRpb244ZmFzdGF0YW5FZChpMSwgZDIpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiByZXR1cm4gKyhkMiAvIChkMiAqIGQyICogLjI4ICsgMS4wKSk7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTZtYXhpTUZDQ0FuYWx5c2VySWRFRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDE1NDE2Owp9CgpmdW5jdGlvbiBfX1pTdDE1Z2V0X25ld19oYW5kbGVydigpIHsKIHZhciBpMSA9IDA7CiBpMSA9IEhFQVAzMls1ODg3XSB8IDA7CiBIRUFQMzJbNTg4N10gPSBpMSArIDA7CiByZXR1cm4gaTEgfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMThnZXROQXZlcmFnZXNQZXJPY3RFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxICsgMTIgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTdnZXRMaW5FUUludGVyY2VwdEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjMyW2kxICsgNTYgPj4gMl0pOwp9CgpmdW5jdGlvbiBfX1pOOW1heGlDbG9jazExc2V0UGxheUhlYWRFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTIgKyA1NiA+PiAyXSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pON21heGlGRlQxM3NldFdpbmRvd1NpemVFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBIRUFQMzJbaTIgKyAzMiA+PiAyXSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckUxMWdldFBvc2l0aW9uRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGNjRbaTEgPj4gM10pOwp9CgpmdW5jdGlvbiBfX0dMT0JBTF9fc3ViX0lfbWF4aU1GQ0NfY3BwKCkgewogX19aTjQ3RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9teV9tb2R1bGVfbWF4aU1GQ0NDMkV2KDApOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBiMShpMSwgZDIsIGQzLCBpNCkgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogaTQgPSBpNCB8IDA7CiBudWxsRnVuY19kaWRkaSgxKTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNmdldFBlYWtEZWNheVJhdGVFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMltpMSArIDQ0ID4+IDJdKTsKfQoKZnVuY3Rpb24gX19aTjEybWF4aVNldHRpbmdzMTRzZXROdW1DaGFubmVsc0VpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEhFQVAzMls1MDg0XSA9IGkxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTVnZXRTcGVjRnJlcVNwYW5FdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMltpMSArIDE2ID4+IDJdKTsKfQoKZnVuY3Rpb24gX19aTksyMW1heGlGRlRPY3RhdmVBbmFseXplcjE1Z2V0Rmlyc3RPY3RGcmVxRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGMzJbaTEgKyAyMCA+PiAyXSk7Cn0KCmZ1bmN0aW9uIF9fWk43Y29udmVydDRtdG9mRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGNjRbMTIxMjggKyAoaTEgPDwgMykgPj4gM10pOwp9CgpmdW5jdGlvbiBfX1pOMTJtYXhpU2V0dGluZ3MxM3NldFNhbXBsZVJhdGVFaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiBIRUFQMzJbNTA4M10gPSBpMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEybWF4aVNldHRpbmdzMTNzZXRCdWZmZXJTaXplRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogSEVBUDMyWzUwODVdID0gaTE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlGaWx0ZXI5c2V0Q3V0b2ZmRWQoaTIsIGQxKSB7CiBpMiA9IGkyIHwgMDsKIGQxID0gK2QxOwogSEVBUEY2NFtpMiArIDIyNCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX0dMT0JBTF9fc3ViX0lfbWF4aUZGVF9jcHAoKSB7CiBfX1pONDZFbXNjcmlwdGVuQmluZGluZ0luaXRpYWxpemVyX215X21vZHVsZV9tYXhpRkZUQzJFdigwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTksyMW1heGlGRlRPY3RhdmVBbmFseXplcjE0Z2V0QXZnRnJlcUluY3JFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMltpMSArIDI0ID4+IDJdKTsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRkZUMTBzZXROdW1CaW5zRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kyICsgNDAgPj4gMl0gPSBpMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRkZUMTBzZXRIb3BTaXplRWkoaTIsIGkxKSB7CiBpMiA9IGkyIHwgMDsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kyICsgMzYgPj4gMl0gPSBpMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRW52MTBzZXRUcmlnZ2VyRWkoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogSEVBUDMyW2kxICsgNTYgPj4gMl0gPSBpMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRHluMTJzZXRUaHJlc2hvbGRFZChpMSwgZDIpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBIRUFQRjY0W2kxICsgMjQgPj4gM10gPSBkMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwbWF4aUxhZ0V4cElkRTZzZXRWYWxFZChpMSwgZDIpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBIRUFQRjY0W2kxICsgMTYgPj4gM10gPSBkMjsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19HTE9CQUxfX3N1Yl9JX21heGlfZW1zY3JfbmV3X2NwcCgpIHsKIF9fWk4zOEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfbXlfbW9kdWxlQzJFdigwKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gYjgoaTEsIGQyLCBkMywgZDQpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIGQ0ID0gK2Q0OwogbnVsbEZ1bmNfZGlkZGQoOCk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTVnZXRTYW1wbGluZ1JhdGVFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gfn4rSEVBUEYzMltpMSA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxM2dldExpbkVRU2xvcGVFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEYzMltpMSArIDUyID4+IDJdKTsKfQoKZnVuY3Rpb24gX19aTjltYXhpQ2xvY2s4c2V0VGlja3NFaShpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBIRUFQMzJbaTEgKyA4MCA+PiAyXSA9IGkyOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTE0bWF4aURpc3RvcnRpb25FRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQ0NTY7Cn0KCmZ1bmN0aW9uIF9fWk43bWF4aUVudjEwc2V0U3VzdGFpbkVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIEhFQVBGNjRbaTIgKyAzMiA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEzbWF4aURlbGF5bGluZUVFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxMzczNjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxM21heGlEQ0Jsb2NrZXJFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQ2OTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTBtYXhpTGFnRXhwSWRFRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDEzOTc2Owp9CgpmdW5jdGlvbiBiNjMoaTEsIGkyLCBpMywgaTQpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIGk0ID0gaTQgfCAwOwogbnVsbEZ1bmNfdmlpaWkoNjMpOwp9CgpmdW5jdGlvbiBfX1pON21heGlPc2MxMHBoYXNlUmVzZXRFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyICsgOCA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBtYXhpTGFnRXhwSWRFOHNldEFscGhhRWQoaTIsIGQxKSB7CiBpMiA9IGkyIHwgMDsKIGQxID0gK2QxOwogSEVBUEY2NFtpMiA+PiAzXSA9IGQxOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEybWF4aVNldHRpbmdzRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDEzNTM2Owp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEybWF4aUVudmVsb3BlRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDEzNjU2Owp9CgpmdW5jdGlvbiBkeW5DYWxsX2lpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9paVtpMiAmIDEyN10oaTEgfCAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fX2NsYW5nX2NhbGxfdGVybWluYXRlKGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fX2N4YV9iZWdpbl9jYXRjaChpMSB8IDApIHwgMDsKIF9fWlN0OXRlcm1pbmF0ZXYoKTsKfQoKZnVuY3Rpb24gX19aTksyMW1heGlGRlRPY3RhdmVBbmFseXplcjEyZ2V0TlNwZWN0cnVtRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSArIDQgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTJnZXROQXZlcmFnZXNFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxICsgOCA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTF2ZWN0b3JUb29sc0VFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxMzQ5NjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxMW1heGlGbGFuZ2VyRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDE0NTM2Owp9CgpmdW5jdGlvbiBfX1pOSzEwbWF4aUxhZ0V4cElkRTE4Z2V0QWxwaGFSZWNpcHJvY2FsRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGNjRbaTEgKyA4ID4+IDNdKTsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxMG1heGlTYW1wbGVFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQwNTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTBtYXhpRmlsdGVyRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDEzODE2Owp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEwbWF4aUNob3J1c0VFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxNDYxNjsKfQoKZnVuY3Rpb24gYjU1KGkxLCBpMiwgaTMsIGQ0KSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBkNCA9ICtkNDsKIG51bGxGdW5jX3ZpaWlkKDU1KTsKfQoKZnVuY3Rpb24gYjE2KGkxLCBkMiwgaTMsIGk0KSB7CiBpMSA9IGkxIHwgMDsKIGQyID0gK2QyOwogaTMgPSBpMyB8IDA7CiBpNCA9IGk0IHwgMDsKIG51bGxGdW5jX3ZpZGlpKDE2KTsKfQoKZnVuY3Rpb24gX19aTjdtYXhpRHluOHNldFJhdGlvRWQoaTIsIGQxKSB7CiBpMiA9IGkyIHwgMDsKIGQxID0gK2QxOwogSEVBUEY2NFtpMiArIDggPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk5bWF4aVNuYXJlRUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDE0OTM2Owp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTltYXhpQ2xvY2tFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTUwOTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMm9wZXJhdG9yX25ld0kxMm1heGlTZXR0aW5nc0pFRUVQVF9EcE9UMF8oKSB7CiByZXR1cm4gX19abndqKDEpIHwgMDsKfQoKZnVuY3Rpb24gZHluQ2FsbF9kaShpMiwgaTEpIHsKIGkyID0gaTIgfCAwOwogaTEgPSBpMSB8IDA7CiByZXR1cm4gK0ZVTkNUSU9OX1RBQkxFX2RpW2kyICYgMzFdKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9jbGVhbnVwMzkyKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGlmICghKEhFQVAzMltpMSArIDY4ID4+IDJdIHwgMCkpIF9fX3VubG9ja2ZpbGUoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOOW1heGlTbmFyZThzZXRQaXRjaEVkKGkyLCBkMSkgewogaTIgPSBpMiB8IDA7CiBkMSA9ICtkMTsKIEhFQVBGNjRbaTIgPj4gM10gPSBkMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk4bWF4aUtpY2tFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQ4NTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJOG1heGlJRkZURUVQS3ZQVF8oaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIDE1MjI0Owp9CgpmdW5jdGlvbiBfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSThtYXhpSGF0c0VFUEt2UFRfKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAxNTAxNjsKfQoKZnVuY3Rpb24gX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3STExdmVjdG9yVG9vbHNKRUVFUFRfRHBPVDBfKCkgewogcmV0dXJuIF9fWm53aigxKSB8IDA7Cn0KCmZ1bmN0aW9uIGI0MShpMSwgaTIsIGkzKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBudWxsRnVuY19kaWlpKDQxKTsKIHJldHVybiAwLjA7Cn0KCmZ1bmN0aW9uIGIxMyhpMSwgaTIsIGQzLCBkNCkgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogZDQgPSArZDQ7CiBudWxsRnVuY192aWlkZCgxMyk7Cn0KCmZ1bmN0aW9uIGIxMihpMSwgZDIsIGkzLCBkNCkgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGkzID0gaTMgfCAwOwogZDQgPSArZDQ7CiBudWxsRnVuY192aWRpZCgxMik7Cn0KCmZ1bmN0aW9uIF9fWk44bWF4aUtpY2s4c2V0UGl0Y2hFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyID4+IDNdID0gZDE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk44bWF4aUhhdHM4c2V0UGl0Y2hFZChpMiwgZDEpIHsKIGkyID0gaTIgfCAwOwogZDEgPSArZDE7CiBIRUFQRjY0W2kyID4+IDNdID0gZDE7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlTVkZFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQ3NzY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlPc2NFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTM1NzY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlNaXhFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTM4OTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlNYXBFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQxMzY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlGRlRFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTUxNzY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlFbnZFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQyOTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlEeW5FRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQyMTY7Cn0KCmZ1bmN0aW9uIF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN2NvbnZlcnRFRVBLdlBUXyhpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMTQzNzY7Cn0KCmZ1bmN0aW9uIF9fWk4xMG1heGlTYW1wbGU3aXNSZWFkeUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoSEVBUDMyW2kxICsgMTA4ID4+IDJdIHwgMCkgPiAwIHwgMDsKfQoKZnVuY3Rpb24gZXN0YWJsaXNoU3RhY2tTcGFjZShpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBTVEFDS1RPUCA9IGkxOwogU1RBQ0tfTUFYID0gaTI7Cn0KCmZ1bmN0aW9uIGIyMihpMSwgaTIsIGkzKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogaTMgPSBpMyB8IDA7CiBudWxsRnVuY19paWlpKDIyKTsKIHJldHVybiAwOwp9CgpmdW5jdGlvbiBfX1pOSzEybWF4aUVudmVsb3BlMTJnZXRBbXBsaXR1ZGVFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEY2NFtpMSArIDQ4ID4+IDNdKTsKfQoKZnVuY3Rpb24gYjQ5KGkxLCBkMiwgaTMpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBpMyA9IGkzIHwgMDsKIG51bGxGdW5jX2RpZGkoNDkpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gYjMzKGkxLCBpMiwgZDMpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIG51bGxGdW5jX2RpaWQoMzMpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gX19aTks5bWF4aUNsb2NrN2dldFRpY2tFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKEhFQVA4W2kxICsgODQgPj4gMF0gfCAwKSAhPSAwIHwgMDsKfQoKZnVuY3Rpb24gX19aTksxMG1heGlGaWx0ZXIxMmdldFJlc29uYW5jZUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjY0W2kxICsgMjMyID4+IDNdKTsKfQoKZnVuY3Rpb24gX19aTks5bWF4aUNsb2NrMTVnZXRDdXJyZW50Q291bnRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxICsgNDggPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzEybWF4aUVudmVsb3BlMTFnZXRWYWxpbmRleEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgKyA0NCA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRDBFdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gYjUyKGkxLCBpMiwgZDMpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBkMyA9ICtkMzsKIG51bGxGdW5jX2lpaWQoNTIpOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk45bWF4aUNsb2NrNmlzVGlja0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiAoSEVBUDhbaTEgKyA4NCA+PiAwXSB8IDApICE9IDAgfCAwOwp9CgpmdW5jdGlvbiBkeW5DYWxsX3ZpKGkyLCBpMSkgewogaTIgPSBpMiB8IDA7CiBpMSA9IGkxIHwgMDsKIEZVTkNUSU9OX1RBQkxFX3ZpW2kyICYgNTExXShpMSB8IDApOwp9CgpmdW5jdGlvbiBiNDMoaTEsIGQyLCBkMykgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogbnVsbEZ1bmNfZGlkZCg0Myk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9EMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzltYXhpQ2xvY2sxMmdldExhc3RDb3VudEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgKyA1MiA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LMTBtYXhpRmlsdGVyOWdldEN1dG9mZkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjY0W2kxICsgMjI0ID4+IDNdKTsKfQoKZnVuY3Rpb24gX19aTjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9EMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOSzltYXhpQ2xvY2sxMWdldFBsYXlIZWFkRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSArIDU2ID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTks3bWF4aUZGVDEzZ2V0V2luZG93U2l6ZUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgKyAzMiA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9EMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBiMzUoZDEsIGQyLCBkMykgewogZDEgPSArZDE7CiBkMiA9ICtkMjsKIGQzID0gK2QzOwogbnVsbEZ1bmNfZGRkZCgzNSk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfX1pOSzEybWF4aVNldHRpbmdzMTRnZXROdW1DaGFubmVsc0V2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbNTA4NF0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzEwbWF4aUxhZ0V4cElkRTV2YWx1ZUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtIRUFQRjY0W2kxICsgMTYgPj4gM10pOwp9CgpmdW5jdGlvbiBfX19nZXRUeXBlTmFtZShpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gX19fc3RyZHVwKEhFQVAzMltpMSArIDQgPj4gMl0gfCAwKSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LMTJtYXhpU2V0dGluZ3MxM2dldFNhbXBsZVJhdGVFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyWzUwODNdIHwgMDsKfQoKZnVuY3Rpb24gX19aTksxMm1heGlTZXR0aW5nczEzZ2V0QnVmZmVyU2l6ZUV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbNTA4NV0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0QwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LN21heGlGRlQxMGdldE51bUJpbnNFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gSEVBUDMyW2kxICsgMzYgPj4gMl0gfCAwOwp9CgpmdW5jdGlvbiBfX1pOSzdtYXhpRkZUMTBnZXRIb3BTaXplRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSArIDM2ID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTks3bWF4aUVudjEwZ2V0VHJpZ2dlckV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBIRUFQMzJbaTEgKyA1NiA+PiAyXSB8IDA7Cn0KCmZ1bmN0aW9uIF9fWk5LMTBtYXhpTGFnRXhwSWRFOGdldEFscGhhRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGNjRbaTEgPj4gM10pOwp9CgpmdW5jdGlvbiBfX1pOOW1heGlTbmFyZTd0cmlnZ2VyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kxICsgMjMyID4+IDJdID0gMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTks5bWF4aUNsb2NrOGdldFRpY2tzRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuIEhFQVAzMltpMSArIDgwID4+IDJdIHwgMDsKfQoKZnVuY3Rpb24gX19aTjhtYXhpS2ljazd0cmlnZ2VyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kxICsgMTg0ID4+IDJdID0gMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTjhtYXhpSGF0czd0cmlnZ2VyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogSEVBUDMyW2kxICsgMjMyID4+IDJdID0gMTsKIHJldHVybjsKfQoKZnVuY3Rpb24gYjI4KGkxLCBpMiwgaTMpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkzIHwgMDsKIG51bGxGdW5jX3ZpaWkoMjgpOwp9CgpmdW5jdGlvbiBfX1pOSzltYXhpQ2xvY2s2Z2V0QnBzRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuICsoK0hFQVBGNjRbaTEgKyA2NCA+PiAzXSk7Cn0KCmZ1bmN0aW9uIF9fWk5LOW1heGlDbG9jazZnZXRCcG1FdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gKygrSEVBUEY2NFtpMSArIDcyID4+IDNdKTsKfQoKZnVuY3Rpb24gX19aTjltYXhpR3JhaW5JMTRoYW5uV2luRnVuY3RvckVEMEV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fWmRsUHYoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBiNTkoaTEsIGkyLCBkMykgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGQzID0gK2QzOwogbnVsbEZ1bmNfdmlpZCg1OSk7Cn0KCmZ1bmN0aW9uIGI0NihpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBudWxsRnVuY19kaWkoNDYpOwogcmV0dXJuIDAuMDsKfQoKZnVuY3Rpb24gYjIxKGkxLCBkMiwgZDMpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBkMyA9ICtkMzsKIG51bGxGdW5jX3ZpZGQoMjEpOwp9CgpmdW5jdGlvbiBfX1pOSzEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mbzVub29wMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTksxMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm81bm9vcDFFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIGIzOChpMSwgaTIpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBudWxsRnVuY19paWkoMzgpOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfaShpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gRlVOQ1RJT05fVEFCTEVfaVtpMSAmIDYzXSgpIHwgMDsKfQoKZnVuY3Rpb24gYjQ3KGkxLCBkMikgewogaTEgPSBpMSB8IDA7CiBkMiA9ICtkMjsKIG51bGxGdW5jX2RpZCg0Nyk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBfZnJleHBsKGQyLCBpMSkgewogZDIgPSArZDI7CiBpMSA9IGkxIHwgMDsKIHJldHVybiArKCtfZnJleHAoZDIsIGkxKSk7Cn0KCmZ1bmN0aW9uIGIzMihpMSwgZDIpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBudWxsRnVuY19paWQoMzIpOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fZW12YWxfaW5jcmVmX193cmFwcGVyKGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fZW12YWxfaW5jcmVmKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9fZW12YWxfZGVjcmVmX193cmFwcGVyKGkxKSB7CiBpMSA9IGkxIHwgMDsKIF9fZW12YWxfZGVjcmVmKGkxIHwgMCk7Cn0KCmZ1bmN0aW9uIF9fWk4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9EMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0OWJhZF9hbGxvY0QwRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogX19aZGxQdihpMSk7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDNfXzExNF9fc2hhcmVkX2NvdW50RDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5LU3Q5YmFkX2FsbG9jNHdoYXRFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMzk3MTE7Cn0KCmZ1bmN0aW9uIGR5bkNhbGxfdihpMSkgewogaTEgPSBpMSB8IDA7CiBGVU5DVElPTl9UQUJMRV92W2kxICYgN10oKTsKfQoKZnVuY3Rpb24gYjYoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogbnVsbEZ1bmNfdmlpKDYpOwp9CgpmdW5jdGlvbiBiMyhpMSwgZDIpIHsKIGkxID0gaTEgfCAwOwogZDIgPSArZDI7CiBudWxsRnVuY192aWQoMyk7Cn0KCmZ1bmN0aW9uIGIyOShpMSkgewogaTEgPSBpMSB8IDA7CiBudWxsRnVuY19kaSgyOSk7CiByZXR1cm4gMC4wOwp9CgpmdW5jdGlvbiBiMTAoaTEpIHsKIGkxID0gaTEgfCAwOwogbnVsbEZ1bmNfaWkoMTApOwogcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIF9fWk4xM21heGlHcmFpbkJhc2VEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19fY3hhX2VuZF9jYXRjaF9fd3JhcHBlcigpIHsKIF9fX2N4YV9lbmRfY2F0Y2goKTsKfQoKZnVuY3Rpb24gX19abmFqKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybiBfX1pud2ooaTEpIHwgMDsKfQoKZnVuY3Rpb24gX19aZGFQdihpMSkgewogaTEgPSBpMSB8IDA7CiBfX1pkbFB2KGkxKTsKIHJldHVybjsKfQoKZnVuY3Rpb24gX19aTlN0OXR5cGVfaW5mb0QyRXYoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX1pOU3Q5ZXhjZXB0aW9uRDJFdihpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm47Cn0KCmZ1bmN0aW9uIF9fWk5TdDliYWRfYWxsb2NEMkV2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHJldHVybjsKfQoKZnVuY3Rpb24gc3RhY2tSZXN0b3JlKGkxKSB7CiBpMSA9IGkxIHwgMDsKIFNUQUNLVE9QID0gaTE7Cn0KCmZ1bmN0aW9uIF9fWmRsUHYoaTEpIHsKIGkxID0gaTEgfCAwOwogX2ZyZWUoaTEpOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBzZXRUZW1wUmV0MChpMSkgewogaTEgPSBpMSB8IDA7CiB0ZW1wUmV0MCA9IGkxOwp9CgpmdW5jdGlvbiBfX19jeGFfcmV0aHJvd19fd3JhcHBlcigpIHsKIF9fX2N4YV9yZXRocm93KCk7Cn0KCmZ1bmN0aW9uIF9fX3VubG9ja2ZpbGUoaTEpIHsKIGkxID0gaTEgfCAwOwogcmV0dXJuOwp9CgpmdW5jdGlvbiBfX19sb2NrZmlsZShpMSkgewogaTEgPSBpMSB8IDA7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gYjUoaTEpIHsKIGkxID0gaTEgfCAwOwogbnVsbEZ1bmNfdmkoNSk7Cn0KCmZ1bmN0aW9uIGdldFRlbXBSZXQwKCkgewogcmV0dXJuIHRlbXBSZXQwIHwgMDsKfQoKZnVuY3Rpb24gc3RhY2tTYXZlKCkgewogcmV0dXJuIFNUQUNLVE9QIHwgMDsKfQoKZnVuY3Rpb24gYjQ4KCkgewogbnVsbEZ1bmNfaSg0OCk7CiByZXR1cm4gMDsKfQoKZnVuY3Rpb24gYjU4KCkgewogbnVsbEZ1bmNfdig1OCk7Cn0KCi8vIEVNU0NSSVBURU5fRU5EX0ZVTkNTCnZhciBGVU5DVElPTl9UQUJMRV9kaWRkaWRkID0gW2IwLF9fWk43bWF4aUR5bjRnYXRlRWRkbGRkXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpZGRpID0gW2IxLF9fWk4xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTVwbGF5MkVkZGldOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpaWlpZGRpID0gW2IyLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE2bWF4aU1GQ0NBbmFseXNlcklkRUZ2ampqZGRqRXZQUzNfSmpqamRkakVFNmludm9rZUVSS1M1X1M2X2pqamRkal07CnZhciBGVU5DVElPTl9UQUJMRV92aWQgPSBbYjMsX19aTjdtYXhpT3NjMTBwaGFzZVJlc2V0RWQsX19aTjEybWF4aUVudmVsb3BlMTJzZXRBbXBsaXR1ZGVFZCxfX1pOMTBtYXhpRmlsdGVyOXNldEN1dG9mZkVkLF9fWk4xMG1heGlGaWx0ZXIxMnNldFJlc29uYW5jZUVkLF9fWk4xMG1heGlMYWdFeHBJZEU5YWRkU2FtcGxlRWQsX19aTjEwbWF4aUxhZ0V4cElkRThzZXRBbHBoYUVkLF9fWk4xMG1heGlMYWdFeHBJZEUxOHNldEFscGhhUmVjaXByb2NhbEVkLF9fWk4xMG1heGlMYWdFeHBJZEU2c2V0VmFsRWQsX19aTjdtYXhpRHluOXNldEF0dGFja0VkLF9fWk43bWF4aUR5bjEwc2V0UmVsZWFzZUVkLF9fWk43bWF4aUR5bjEyc2V0VGhyZXNob2xkRWQsX19aTjdtYXhpRHluOHNldFJhdGlvRWQsX19aTjdtYXhpRW52OXNldEF0dGFja0VkLF9fWk43bWF4aUVudjEwc2V0UmVsZWFzZUVkLF9fWk43bWF4aUVudjhzZXREZWNheUVkLF9fWk43bWF4aUVudjEwc2V0U3VzdGFpbkVkLF9fWk44bWF4aUtpY2s4c2V0UGl0Y2hFZCxfX1pOOG1heGlLaWNrMTBzZXRSZWxlYXNlRWQsX19aTjltYXhpU25hcmU4c2V0UGl0Y2hFZCxfX1pOOW1heGlTbmFyZTEwc2V0UmVsZWFzZUVkLF9fWk44bWF4aUhhdHM4c2V0UGl0Y2hFZCxfX1pOOG1heGlIYXRzMTBzZXRSZWxlYXNlRWQsX19aTjltYXhpQ2xvY2s4c2V0VGVtcG9FZCxfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNXNldFNwZWNGcmVxU3BhbkVmLF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjE1c2V0Rmlyc3RPY3RGcmVxRWYsX19aTjIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTRzZXRBdmdGcmVxSW5jckVmLF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjE2c2V0UGVha0RlY2F5UmF0ZUVmLF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjEzc2V0TGluRVFTbG9wZUVmCixfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxN3NldExpbkVRSW50ZXJjZXB0RWYsX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFMTFzZXRQb3NpdGlvbkVkLF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckUxMXNldFBvc2l0aW9uRWQsX19aTjE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTEyc2V0TG9vcFN0YXJ0RWQsX19aTjE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTEwc2V0TG9vcEVuZEVkLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzLGIzCixiMyxiMyxiMyxiMyxiM107CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkaWRpID0gW2I0LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEzbWF4aURlbGF5bGluZUZkZGlkaUVkUFMyX0pkaWRpRUU2aW52b2tlRVJLUzRfUzVfZGlkaV07CnZhciBGVU5DVElPTl9UQUJMRV92aSA9IFtiNSxfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlPc2NOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU9zY04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpT3NjTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpT3NjTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMTRfX3NoYXJlZF9jb3VudEQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlPc2NOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlPc2NOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpT3NjTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMm1heGlFbnZlbG9wZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEybWF4aUVudmVsb3BlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTJtYXhpRW52ZWxvcGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTJtYXhpRW52ZWxvcGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEybWF4aUVudmVsb3BlTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEybWF4aUVudmVsb3BlTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMm1heGlFbnZlbG9wZU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRGVsYXlsaW5lTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRGVsYXlsaW5lTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTNtYXhpRGVsYXlsaW5lTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURlbGF5bGluZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTNtYXhpRGVsYXlsaW5lTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzbWF4aURlbGF5bGluZU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTNtYXhpRGVsYXlsaW5lTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpRmlsdGVyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMG1heGlGaWx0ZXJOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpRmlsdGVyTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdgosX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpRmlsdGVyTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU1peE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWl4TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNaXhOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNaXhOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpTWl4TlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpTWl4TlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU1peE5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpTGFnRXhwSWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFRDJFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpTGFnRXhwSWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpTGFnRXhwSWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aUxhZ0V4cElkRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzJfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMyX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpTGFnRXhwSWRFTlNfOWFsbG9jYXRvcklTMl9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aUxhZ0V4cElkRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpTGFnRXhwSWRFTlNfOWFsbG9jYXRvcklTMl9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlTYW1wbGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlTYW1wbGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlTYW1wbGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpU2FtcGxlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMG1heGlTYW1wbGVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpU2FtcGxlTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwbWF4aVNhbXBsZU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpU2FtcGxlTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU1hcE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWFwTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNYXBOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlNYXBOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpTWFwTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpTWFwTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aU1hcE5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdgosX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRHluTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlEeW5OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUR5bk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUR5bk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlEeW5OU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlEeW5OU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRHluTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUVudk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRW52TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlFbnZOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlFbnZOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRW52TlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRW52TlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUVudk5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN2NvbnZlcnROMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3Y29udmVydE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdjb252ZXJ0TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdjb252ZXJ0TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3Y29udmVydE5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3Y29udmVydE5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN2NvbnZlcnROU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE0bWF4aURpc3RvcnRpb25OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlEaXN0b3J0aW9uTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpRGlzdG9ydGlvbk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlEaXN0b3J0aW9uTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNG1heGlEaXN0b3J0aW9uTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0bWF4aURpc3RvcnRpb25OU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0bWF4aURpc3RvcnRpb25OU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDExbWF4aUZsYW5nZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMW1heGlGbGFuZ2VyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdgosX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDExbWF4aUZsYW5nZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTFtYXhpRmxhbmdlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTFtYXhpRmxhbmdlck5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMW1heGlGbGFuZ2VyTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMW1heGlGbGFuZ2VyTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlDaG9ydXNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlDaG9ydXNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlDaG9ydXNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBtYXhpQ2hvcnVzTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMG1heGlDaG9ydXNOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBtYXhpQ2hvcnVzTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMG1heGlDaG9ydXNOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURDQmxvY2tlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURDQmxvY2tlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEzbWF4aURDQmxvY2tlck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxM21heGlEQ0Jsb2NrZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzbWF4aURDQmxvY2tlck5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxM21heGlEQ0Jsb2NrZXJOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzbWF4aURDQmxvY2tlck5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlTVkZOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aVNWRk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpU1ZGTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpU1ZGTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aVNWRk5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aVNWRk5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN21heGlTVkZOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpS2lja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpS2lja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpS2lja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUtpY2tOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2CixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUtpY2tOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlLaWNrTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUtpY2tOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDltYXhpU25hcmVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aVNuYXJlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlTbmFyZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aVNuYXJlTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk5bWF4aVNuYXJlTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTltYXhpU25hcmVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTltYXhpU25hcmVOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSGF0c04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSGF0c04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSGF0c04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUhhdHNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThtYXhpSGF0c05TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUhhdHNOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThtYXhpSGF0c05TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQOW1heGlDbG9ja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDltYXhpQ2xvY2tOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aUNsb2NrTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDltYXhpQ2xvY2tOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTltYXhpQ2xvY2tOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOW1heGlDbG9ja05TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOW1heGlDbG9ja05TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyMW1heGlGRlRPY3RhdmVBbmFseXplck5TXzlhbGxvY2F0b3JJUzFfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyMW1heGlGRlRPY3RhdmVBbmFseXplck5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJOU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAyMW1heGlGRlRPY3RhdmVBbmFseXplck4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2CixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThtYXhpSUZGVE5TXzlhbGxvY2F0b3JJUzFfRUVFRDJFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUlGRlROU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOG1heGlJRkZUTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4bWF4aUlGRlROU185YWxsb2NhdG9ySVMxX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpSUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUlGRlROMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRkZUTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRkZUTlNfOWFsbG9jYXRvcklTMV9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTdtYXhpRkZUTlNfOWFsbG9jYXRvcklTMV9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk3bWF4aUZGVE5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlGRlROMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpRkZUTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNm1heGlNRkNDQW5hbHlzZXJJZEVOU185YWxsb2NhdG9ySVMyX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZtYXhpTUZDQ0FuYWx5c2VySWRFTlNfOWFsbG9jYXRvcklTMl9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2bWF4aU1GQ0NBbmFseXNlcklkRU5TXzlhbGxvY2F0b3JJUzJfRUVFMTZfX29uX3plcm9fc2hhcmVkRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZtYXhpTUZDQ0FuYWx5c2VySWRFTlNfOWFsbG9jYXRvcklTMl9FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlNRkNDQW5hbHlzZXJJZEVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMyX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMl9FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlNRkNDQW5hbHlzZXJJZEVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMyX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMl9FRUVEMEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlNRkNDQW5hbHlzZXJJZEVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMyX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMl9FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTZtYXhpTUZDQ0FuYWx5c2VySWRFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMl9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzJfRUVFMjFfX29uX3plcm9fc2hhcmVkX3dlYWtFdixfX1pOMTNtYXhpR3JhaW5CYXNlRDJFdixfX1pOOW1heGlHcmFpbkkxNGhhbm5XaW5GdW5jdG9yRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTlNfOWFsbG9jYXRvcklTM19FRUVEMkV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2CixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFTlNfOWFsbG9jYXRvcklTM19FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFTlNfOWFsbG9jYXRvcklTM19FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDJFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRTIxX19vbl96ZXJvX3NoYXJlZF93ZWFrRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRUQwRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOU185YWxsb2NhdG9ySVMzX0VFRTE2X19vbl96ZXJvX3NoYXJlZEV2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTlNfOWFsbG9jYXRvcklTM19FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRUQyRXYsX19aTlN0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTM19FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzNfRUVFRDBFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUxNl9fb25femVyb19zaGFyZWRFdixfX1pOU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUyMV9fb25femVyb19zaGFyZWRfd2Vha0V2LF9fWk5TdDliYWRfYWxsb2NEMkV2LF9fWk5TdDliYWRfYWxsb2NEMEV2LF9fWk4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9EMkV2LF9fWk4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRDBFdixfX1pOSzEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mbzVub29wMUV2LF9fWk5LMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvNW5vb3AyRXYsX19aTjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9EMEV2LF9fWk4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRDBFdixfX1pOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9EMEV2CixfX1pOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRDBFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMXZlY3RvclRvb2xzRUV2UFRfLF9fWk4xMXZlY3RvclRvb2xzMTRjbGVhclZlY3RvckRibEVSTlN0M19fMTZ2ZWN0b3JJZE5TMF85YWxsb2NhdG9ySWRFRUVFLF9fWk4xMXZlY3RvclRvb2xzMTZjbGVhclZlY3RvckZsb2F0RVJOU3QzX18xNnZlY3RvcklmTlMwXzlhbGxvY2F0b3JJZkVFRUUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTJtYXhpU2V0dGluZ3NFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJN21heGlPc2NFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU9zY0VFRUV2UFRfLF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpT3NjSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTEybWF4aUVudmVsb3BlRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTJtYXhpRW52ZWxvcGVFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxMm1heGlFbnZlbG9wZUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxM21heGlEZWxheWxpbmVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxM21heGlEZWxheWxpbmVKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTBtYXhpRmlsdGVyRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTBtYXhpRmlsdGVySkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpTWl4RUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlNaXhFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk3bWF4aU1peEpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMG1heGlMYWdFeHBJZEVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlMYWdFeHBJZEVFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxMG1heGlMYWdFeHBJZEVKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTNF9FRUU0dHlwZUVEcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTBtYXhpU2FtcGxlRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpU2FtcGxlRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTBtYXhpU2FtcGxlSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMG1heGlTYW1wbGU5Z2V0TGVuZ3RoRXYsX19aTjEwbWF4aVNhbXBsZTd0cmlnZ2VyRXYsX19aTjEwbWF4aVNhbXBsZTVjbGVhckV2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpTWFwRUV2UFRfCixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJN21heGlNYXBKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJN21heGlEeW5FRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUR5bkVFRUV2UFRfLF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpRHluSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpRW52RUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlFbnZFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk3bWF4aUVudkpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk3Y29udmVydEVFdlBUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTdjb252ZXJ0RUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJN2NvbnZlcnRKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTRtYXhpRGlzdG9ydGlvbkVFdlBUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aURpc3RvcnRpb25FRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxNG1heGlEaXN0b3J0aW9uSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTExbWF4aUZsYW5nZXJFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTFtYXhpRmxhbmdlckpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxMG1heGlDaG9ydXNFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlDaG9ydXNFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxMG1heGlDaG9ydXNKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTNtYXhpRENCbG9ja2VyRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJMTNtYXhpRENCbG9ja2VyRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTNtYXhpRENCbG9ja2VySkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTdtYXhpU1ZGRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk3bWF4aVNWRkpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3Rvckk4bWF4aUtpY2tFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUtpY2tFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEk4bWF4aUtpY2tKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8sX19aTjhtYXhpS2ljazd0cmlnZ2VyRXYKLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTltYXhpU25hcmVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aVNuYXJlRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJOW1heGlTbmFyZUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOOW1heGlTbmFyZTd0cmlnZ2VyRXYsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJOG1heGlIYXRzRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJOG1heGlIYXRzSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk44bWF4aUhhdHM3dHJpZ2dlckV2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTltYXhpQ2xvY2tFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aUNsb2NrRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJOW1heGlDbG9ja0pFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOOW1heGlDbG9jazZ0aWNrZXJFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFRUV2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUVFdlBUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xNnZlY3RvcklmTlMyXzlhbGxvY2F0b3JJZkVFRUVFRXZQVF8sX19lbXZhbF9pbmNyZWZfX3dyYXBwZXIsX19lbXZhbF9kZWNyZWZfX3dyYXBwZXIsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJN21heGlGRlRFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUZGVEVFRUV2UFRfLF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTdtYXhpRkZUSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzNfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySThtYXhpSUZGVEVFdlBUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRUV2UFRfLF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSThtYXhpSUZGVEpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVMzX0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkyMW1heGlGRlRPY3RhdmVBbmFseXplckVFdlBUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTM19FRUU0dHlwZUVEcE9UMF8sX19aTktTdDNfXzEyMF9fdmVjdG9yX2Jhc2VfY29tbW9uSUxiMUVFMjBfX3Rocm93X2xlbmd0aF9lcnJvckV2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVFdlBUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvcklOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVFRUV2UFRfCixfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxNm1heGlNRkNDQW5hbHlzZXJJZEVKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTNF9FRUU0dHlwZUVEcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVFRUV2UFRfLF9fWk5TdDNfXzExMW1ha2Vfc2hhcmVkSTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFSkVFRU5TXzllbmFibGVfaWZJWG50c3I4aXNfYXJyYXlJVF9FRTV2YWx1ZUVOU18xMHNoYXJlZF9wdHJJUzVfRUVFNHR5cGVFRHBPVDBfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNHJhd19kZXN0cnVjdG9ySTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVFRXZQVF8sX19aTlN0M19fMTExbWFrZV9zaGFyZWRJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUpFRUVOU185ZW5hYmxlX2lmSVhudHNyOGlzX2FycmF5SVRfRUU1dmFsdWVFTlNfMTBzaGFyZWRfcHRySVM1X0VFRTR0eXBlRURwT1QwXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTRyYXdfZGVzdHJ1Y3RvckkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRXZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE0cmF3X2Rlc3RydWN0b3JJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUVFdlBUXyxfX1pOU3QzX18xMTFtYWtlX3NoYXJlZEkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVKRUVFTlNfOWVuYWJsZV9pZklYbnRzcjhpc19hcnJheUlUX0VFNXZhbHVlRU5TXzEwc2hhcmVkX3B0cklTNV9FRUU0dHlwZUVEcE9UMF8sX19aTjEwX19jeHhhYml2MTEyX0dMT0JBTF9fTl8xOWRlc3RydWN0X0VQdixfY2xlYW51cDM5MixiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNQosYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUKLGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1CixiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNQosYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUsYjUKLGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1LGI1CixiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNSxiNQosYjUsYjUsYjVdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpID0gW2I2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlckl2SlJOU3QzX18xNnZlY3RvcklkTlMyXzlhbGxvY2F0b3JJZEVFRUVFRTZpbnZva2VFUEZ2UzdfRVBTNl8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySXZKUk5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUVFNmludm9rZUVQRnZTN19FUFM2XyxfX1pOMTJtYXhpU2V0dGluZ3MxM3NldFNhbXBsZVJhdGVFaSxfX1pOMTJtYXhpU2V0dGluZ3MxNHNldE51bUNoYW5uZWxzRWksX19aTjEybWF4aVNldHRpbmdzMTNzZXRCdWZmZXJTaXplRWksX19aTjEybWF4aUVudmVsb3BlMTFzZXRWYWxpbmRleEVpLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aVNhbXBsZUZ2dkV2UFMyX0pFRTZpbnZva2VFUktTNF9TNV8sX19aTjEwbWF4aVNhbXBsZTlzZXRTYW1wbGVFUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRSxfX1pON21heGlFbnYxMHNldFRyaWdnZXJFaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU04bWF4aUtpY2tGdnZFdlBTMl9KRUU2aW52b2tlRVJLUzRfUzVfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTltYXhpU25hcmVGdnZFdlBTMl9KRUU2aW52b2tlRVJLUzRfUzVfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTThtYXhpSGF0c0Z2dkV2UFMyX0pFRTZpbnZva2VFUktTNF9TNV8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOW1heGlDbG9ja0Z2dkV2UFMyX0pFRTZpbnZva2VFUktTNF9TNV8sX19aTjltYXhpQ2xvY2sxNXNldFRpY2tzUGVyQmVhdEVpLF9fWk45bWF4aUNsb2NrMTVzZXRDdXJyZW50Q291bnRFaSxfX1pOOW1heGlDbG9jazEyc2V0TGFzdENvdW50RWksX19aTjltYXhpQ2xvY2sxMXNldFBsYXlIZWFkRWksX19aTjltYXhpQ2xvY2s2c2V0QnBzRWksX19aTjltYXhpQ2xvY2s2c2V0QnBtRWksX19aTjltYXhpQ2xvY2s3c2V0VGlja0VpLF9fWk45bWF4aUNsb2NrOHNldFRpY2tzRWksX19aTlN0M19fMTZ2ZWN0b3JJaU5TXzlhbGxvY2F0b3JJaUVFRTlwdXNoX2JhY2tFUktpLF9fWk5TdDNfXzE2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUU5cHVzaF9iYWNrRVJLZCxfX1pOU3QzX18xNnZlY3RvckljTlNfOWFsbG9jYXRvckljRUVFOXB1c2hfYmFja0VSS2MsX19aTlN0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTlwdXNoX2JhY2tFUktmLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpT3NjRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMm1heGlFbnZlbG9wZUVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTNtYXhpRGVsYXlsaW5lRUVFMTF2YWxfZGVsZXRlcmNsRVBLdgosX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpTGFnRXhwSWRFRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFRUUxMXZhbF9kZWxldGVyY2xFUEt2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUR5bkVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlFbnZFRUUxMXZhbF9kZWxldGVyY2xFUEt2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdjb252ZXJ0RUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlEaXN0b3J0aW9uRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlDaG9ydXNFRUUxMXZhbF9kZWxldGVyY2xFUEt2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURDQmxvY2tlckVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUUxMXZhbF9kZWxldGVyY2xFUEt2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpS2lja0VFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOW1heGlTbmFyZUVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aUNsb2NrRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pON21heGlGRlQxM3NldFdpbmRvd1NpemVFaSxfX1pON21heGlGRlQxMHNldEhvcFNpemVFaSxfX1pON21heGlGRlQxMHNldE51bUJpbnNFaSxfX1pOSzdtYXhpRkZUMTNnZXRNYWduaXR1ZGVzRXYsX19aTjdtYXhpRkZUMTNzZXRNYWduaXR1ZGVzRU5TdDNfXzE2dmVjdG9ySWZOUzBfOWFsbG9jYXRvcklmRUVFRSxfX1pOSzdtYXhpRkZUOWdldFBoYXNlc0V2LF9fWk43bWF4aUZGVDlzZXRQaGFzZXNFTlN0M19fMTZ2ZWN0b3JJZk5TMF85YWxsb2NhdG9ySWZFRUVFLF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjljYWxjdWxhdGVFUk5TdDNfXzE2dmVjdG9ySWZOUzBfOWFsbG9jYXRvcklmRUVFRSxfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNXNldFNhbXBsaW5nUmF0ZUVpLF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjEyc2V0TlNwZWN0cnVtRWksX19aTjIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTJzZXROQXZlcmFnZXNFaSxfX1pOMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxOHNldE5BdmVyYWdlc1Blck9jdEVpLF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjIwc2V0UGVha0hvbGRUaW1lVG90YWxFaQosX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJFRUUxMXZhbF9kZWxldGVyY2xFUEt2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUUxMXZhbF9kZWxldGVyY2xFUEt2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFOXNldFNhbXBsZUVQMTBtYXhpU2FtcGxlLF9fWk4xNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFOXNldFNhbXBsZUVQMTBtYXhpU2FtcGxlLF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckU5c2V0U2FtcGxlRVAxMG1heGlTYW1wbGUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVFMTF2YWxfZGVsZXRlcmNsRVBLdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVFRTExdmFsX2RlbGV0ZXJjbEVQS3YsX2Fib3J0X21lc3NhZ2UsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYsYjYKLGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2LGI2CixiNixiNixiNixiNixiNixiNixiNixiNixiNl07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkaWRkZCA9IFtiNyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMW1heGlGbGFuZ2VyRmRkamRkZEVkUFMyX0pkamRkZEVFNmludm9rZUVSS1M0X1M1X2RqZGRkLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aUNob3J1c0ZkZGpkZGRFZFBTMl9KZGpkZGRFRTZpbnZva2VFUktTNF9TNV9kamRkZCxiN107CnZhciBGVU5DVElPTl9UQUJMRV9kaWRkZCA9IFtiOCxfX1pON21heGlPc2M2cGhhc29yRWRkZCxfX1pOMTBtYXhpRmlsdGVyNWxvcmVzRWRkZCxfX1pOMTBtYXhpRmlsdGVyNWhpcmVzRWRkZCxfX1pOMTBtYXhpRmlsdGVyOGJhbmRwYXNzRWRkZCxfX1pOMTBtYXhpU2FtcGxlNHBsYXlFZGRkLF9fWk4xMG1heGlTYW1wbGU1cGxheTRFZGRkLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNUZ1bmN0aW9uSW52b2tlcklQRmRkZGRFZGRKZGRFRTZpbnZva2VFUFMzX2RkZF07CnZhciBGVU5DVElPTl9UQUJMRV92aWlpaWRkaSA9IFtiOSxfX1pOMTZtYXhpTUZDQ0FuYWx5c2VySWRFNXNldHVwRWpqamRkal07CnZhciBGVU5DVElPTl9UQUJMRV9paSA9IFtiMTAsX19aTktTdDliYWRfYWxsb2M0d2hhdEV2LF9fX3N0ZGlvX2Nsb3NlLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTF2ZWN0b3JUb29sc0VFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQMTF2ZWN0b3JUb29sc0pFRTZpbnZva2VFUEZTM192RSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEybWF4aVNldHRpbmdzRUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySVAxMm1heGlTZXR0aW5nc0pFRTZpbnZva2VFUEZTM192RSxfX1pOSzEybWF4aVNldHRpbmdzMTNnZXRTYW1wbGVSYXRlRXYsX19aTksxMm1heGlTZXR0aW5nczE0Z2V0TnVtQ2hhbm5lbHNFdixfX1pOSzEybWF4aVNldHRpbmdzMTNnZXRCdWZmZXJTaXplRXYsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk3bWF4aU9zY0VFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpT3NjRUVFM2dldEVSS1M0XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU9zY0VFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTJtYXhpRW52ZWxvcGVFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMm1heGlFbnZlbG9wZUVFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTJtYXhpRW52ZWxvcGVFRUpFRTZpbnZva2VFUEZTNV92RSxfX1pOSzEybWF4aUVudmVsb3BlMTFnZXRWYWxpbmRleEV2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTNtYXhpRGVsYXlsaW5lRUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTNtYXhpRGVsYXlsaW5lRUVFM2dldEVSS1M0XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUpFRTZpbnZva2VFUEZTNV92RSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEwbWF4aUZpbHRlckVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUZpbHRlckVFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk3bWF4aU1peEVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWl4RUVFM2dldEVSS1M0XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTBtYXhpTGFnRXhwSWRFRUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpTGFnRXhwSWRFRUVFM2dldEVSS1M1XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlMYWdFeHBJZEVFRUpFRTZpbnZva2VFUEZTNl92RQosX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxMG1heGlTYW1wbGVFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aVNhbXBsZUVFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk4xMG1heGlTYW1wbGU3aXNSZWFkeUV2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlNYXBFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1hcEVFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlNYXBFRUpFRTZpbnZva2VFUEZTNV92RSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTdtYXhpRHluRUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlEeW5FRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRHluRUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk3bWF4aUVudkVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpRW52RUVFM2dldEVSS1M0XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk5LN21heGlFbnYxMGdldFRyaWdnZXJFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTdjb252ZXJ0RUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTdjb252ZXJ0RUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxNG1heGlEaXN0b3J0aW9uRUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTFtYXhpRmxhbmdlckVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTExbWF4aUZsYW5nZXJFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTExbWF4aUZsYW5nZXJFRUpFRTZpbnZva2VFUEZTNV92RSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTEwbWF4aUNob3J1c0VFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUNob3J1c0VFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpQ2hvcnVzRUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxM21heGlEQ0Jsb2NrZXJFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEQ0Jsb2NrZXJFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTEzbWF4aURDQmxvY2tlckVFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlTVkZFRVBLdlBUXwosX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpU1ZGRUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk4bWF4aUtpY2tFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUtpY2tFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpS2lja0VFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJOW1heGlTbmFyZUVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUUzZ2V0RVJLUzRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUpFRTZpbnZva2VFUEZTNV92RSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSThtYXhpSGF0c0VFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSGF0c0VFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUk5bWF4aUNsb2NrRUVQS3ZQVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOW1heGlDbG9ja0VFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJOW1heGlDbG9ja0VFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk45bWF4aUNsb2NrNmlzVGlja0V2LF9fWk5LOW1heGlDbG9jazE1Z2V0Q3VycmVudENvdW50RXYsX19aTks5bWF4aUNsb2NrMTJnZXRMYXN0Q291bnRFdixfX1pOSzltYXhpQ2xvY2sxMWdldFBsYXlIZWFkRXYsX19aTks5bWF4aUNsb2NrN2dldFRpY2tFdixfX1pOSzltYXhpQ2xvY2s4Z2V0VGlja3NFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSU5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRUVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQTlN0M19fMTZ2ZWN0b3JJaU5TMl85YWxsb2NhdG9ySWlFRUVFSkVFNmludm9rZUVQRlM3X3ZFLF9fWk5LU3QzX18xNnZlY3RvcklpTlNfOWFsbG9jYXRvcklpRUVFNHNpemVFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFSkVFNmludm9rZUVQRlM3X3ZFLF9fWk5LU3QzX18xNnZlY3RvcklkTlNfOWFsbG9jYXRvcklkRUVFNHNpemVFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklQTlN0M19fMTZ2ZWN0b3JJY05TMl85YWxsb2NhdG9ySWNFRUVFSkVFNmludm9rZUVQRlM3X3ZFLF9fWk5LU3QzX18xNnZlY3RvckljTlNfOWFsbG9jYXRvckljRUVFNHNpemVFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUVFUEt2UFRfCixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJUE5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUpFRTZpbnZva2VFUEZTN192RSxfX1pOS1N0M19fMTZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRTRzaXplRXYsX19abndqLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJN21heGlGRlRFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUZGVEVFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUpFRTZpbnZva2VFUEZTNV92RSxfX1pOSzdtYXhpRkZUMTNnZXRXaW5kb3dTaXplRXYsX19aTks3bWF4aUZGVDEwZ2V0SG9wU2l6ZUV2LF9fWk5LN21heGlGRlQxMGdldE51bUJpbnNFdixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSThtYXhpSUZGVEVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpSUZGVEVFRTNnZXRFUktTNF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlJRkZURUVKRUU2aW52b2tlRVBGUzVfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkyMW1heGlGRlRPY3RhdmVBbmFseXplckVFUEt2UFRfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyRUVFM2dldEVSS1M0XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkyMW1heGlGRlRPY3RhdmVBbmFseXplckVFSkVFNmludm9rZUVQRlM1X3ZFLF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNWdldFNhbXBsaW5nUmF0ZUV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxMmdldE5TcGVjdHJ1bUV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxMmdldE5BdmVyYWdlc0V2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxOGdldE5BdmVyYWdlc1Blck9jdEV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIyMGdldFBlYWtIb2xkVGltZVRvdGFsRXYsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxNm1heGlNRkNDQW5hbHlzZXJJZEVFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlNRkNDQW5hbHlzZXJJZEVFRUUzZ2V0RVJLUzVfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlcklOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVFSkVFNmludm9rZUVQRlM2X3ZFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM2dldEFjdHVhbFR5cGVJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVFRTNnZXRFUktTNl8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDdJbnZva2VySU5TdDNfXzExMHNoYXJlZF9wdHJJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUpFRTZpbnZva2VFUEZTN192RSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNnZXRBY3R1YWxUeXBlSTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVFRVBLdlBUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVFM2dldEVSS1M2XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFRUVKRUU2aW52b2tlRVBGUzdfdkUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzZ2V0QWN0dWFsVHlwZUkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRVBLdlBUXwosX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFM2dldEVSS1M2XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsN0ludm9rZXJJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUpFRTZpbnZva2VFUEZTN192RSxiMTAsYjEwLGIxMCxiMTAsYjEwLGIxMCxiMTBdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlkaWRkZCA9IFtiMTEsX19aTjdtYXhpTWl4OWFtYmlzb25pY0VkUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWRkZF07CnZhciBGVU5DVElPTl9UQUJMRV92aWRpZCA9IFtiMTIsX19aTjdtYXhpTWl4NnN0ZXJlb0VkUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWRdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpZGQgPSBbYjEzLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aUxhZ0V4cElkRUZ2ZGRFdlBTM19KZGRFRTZpbnZva2VFUktTNV9TNl9kZF07CnZhciBGVU5DVElPTl9UQUJMRV9kaWRkZGRkaWkgPSBbYjE0LF9fWk43bWF4aUVudjRhZHNyRWRkZGRkbGldOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpaWlpID0gW2IxNSxfX1pOSzEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm8xNnNlYXJjaF9iZWxvd19kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZpYixfX1pOSzEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm8xNnNlYXJjaF9iZWxvd19kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZpYixfX1pOSzEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvMTZzZWFyY2hfYmVsb3dfZHN0RVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUEt2aWIsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlGRlRGdmlpaUV2UFMyX0ppaWlFRTZpbnZva2VFUktTNF9TNV9paWksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlJRkZURnZpaWlFdlBTMl9KaWlpRUU2aW52b2tlRVJLUzRfUzVfaWlpLGIxNSxiMTVdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlkaWkgPSBbYjE2LF9fWk4yMW1heGlGRlRPY3RhdmVBbmFseXplcjVzZXR1cEVmaWldOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlkaWRkID0gW2IxNyxfX1pON21heGlNaXg0cXVhZEVkUk5TdDNfXzE2dmVjdG9ySWROUzBfOWFsbG9jYXRvcklkRUVFRWRkXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2lpaWlpID0gW2IxOCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZiUk5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRWpSS2lFYlM3X0pqUzlfRUU2aW52b2tlRVBTQl9QUzZfamksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGYlJOU3QzX18xNnZlY3RvckljTlMyXzlhbGxvY2F0b3JJY0VFRUVqUktjRWJTN19KalM5X0VFNmludm9rZUVQU0JfUFM2X2pjLGIxOF07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkZGlkZCA9IFtiMTksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlEeW5GZGRkbGRkRWRQUzJfSmRkbGRkRUU2aW52b2tlRVJLUzRfUzVfZGRsZGRdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlkZGRkZCA9IFtiMjAsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGZGRkZGRkRWRkSmRkZGRFRTZpbnZva2VFUFMzX2RkZGRkLF9fWk43bWF4aUR5bjEwY29tcHJlc3NvckVkZGRkZCxfX1pON21heGlTVkY0cGxheUVkZGRkZF07CnZhciBGVU5DVElPTl9UQUJMRV92aWRkID0gW2IyMSxfX1pOMTBtYXhpTGFnRXhwSWRFNGluaXRFZGRdOwp2YXIgRlVOQ1RJT05fVEFCTEVfaWlpaSA9IFtiMjIsX19aTksxMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvOWNhbl9jYXRjaEVQS05TXzE2X19zaGltX3R5cGVfaW5mb0VSUHYsX19aTksxMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvOWNhbl9jYXRjaEVQS05TXzE2X19zaGltX3R5cGVfaW5mb0VSUHYsX19aTksxMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm85Y2FuX2NhdGNoRVBLTlNfMTZfX3NoaW1fdHlwZV9pbmZvRVJQdixfX19zdGRpb193cml0ZSxfX19zdGRpb19zZWVrLF9fX3N0ZG91dF93cml0ZSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZOU18zdmFsRVJLTlN0M19fMTZ2ZWN0b3JJaU5TM185YWxsb2NhdG9ySWlFRUVFakVTMl9TOV9KakVFNmludm9rZUVQU0JfUFM3X2osX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyVmVjdG9yQWNjZXNzSU5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRUUzc2V0RVJTNl9qUktpLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxNUZ1bmN0aW9uSW52b2tlcklQRk5TXzN2YWxFUktOU3QzX18xNnZlY3RvcklkTlMzXzlhbGxvY2F0b3JJZEVFRUVqRVMyX1M5X0pqRUU2aW52b2tlRVBTQl9QUzdfaixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJWZWN0b3JBY2Nlc3NJTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFRTNzZXRFUlM2X2pSS2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGTlNfM3ZhbEVSS05TdDNfXzE2dmVjdG9ySWNOUzNfOWFsbG9jYXRvckljRUVFRWpFUzJfUzlfSmpFRTZpbnZva2VFUFNCX1BTN19qLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlZlY3RvckFjY2Vzc0lOU3QzX18xNnZlY3RvckljTlMyXzlhbGxvY2F0b3JJY0VFRUVFM3NldEVSUzZfalJLYyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZOU18zdmFsRVJLTlN0M19fMTZ2ZWN0b3JJZk5TM185YWxsb2NhdG9ySWZFRUVFakVTMl9TOV9KakVFNmludm9rZUVQU0JfUFM3X2osX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyVmVjdG9yQWNjZXNzSU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUUzc2V0RVJTNl9qUktmLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyS0ZpaUVpUEtTMl9KaUVFNmludm9rZUVSS1M0X1M2X2ldOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlpZGRpZCA9IFtiMjMsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGZGRkaWRFZFBTNF9KZGRpZEVFNmludm9rZUVSS1M2X1M3X2RkaWQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUZkZGRpZEVkUFM0X0pkZGlkRUU2aW52b2tlRVJLUzZfUzdfZGRpZCxiMjNdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlkaWRkZCA9IFtiMjQsX19aTjExbWF4aUZsYW5nZXI2ZmxhbmdlRWRqZGRkLF9fWk4xMG1heGlDaG9ydXM2Y2hvcnVzRWRqZGRkLGIyNF07CnZhciBGVU5DVElPTl9UQUJMRV9kZGRkZGQgPSBbYjI1LF9fWk43bWF4aU1hcDZsaW5saW5FZGRkZGQsX19aTjdtYXhpTWFwNmxpbmV4cEVkZGRkZCxfX1pON21heGlNYXA2ZXhwbGluRWRkZGRkXTsKdmFyIEZVTkNUSU9OX1RBQkxFX3ZpaWlpaWkgPSBbYjI2LF9fWk5LMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2Fib3ZlX2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdlM0X2liLF9fWk5LMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mbzE2c2VhcmNoX2Fib3ZlX2RzdEVQTlNfMTlfX2R5bmFtaWNfY2FzdF9pbmZvRVBLdlM0X2liLF9fWk5LMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm8xNnNlYXJjaF9hYm92ZV9kc3RFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQS3ZTNF9pYl07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlpaSA9IFtiMjcsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTJtYXhpRW52ZWxvcGVGZGlSTlN0M19fMTZ2ZWN0b3JJZE5TM185YWxsb2NhdG9ySWRFRUVFRWRQUzJfSmlTOF9FRTZpbnZva2VFUktTQV9TQl9pUFM3XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU04bWF4aUlGRlRGZlJOU3QzX18xNnZlY3RvcklmTlMzXzlhbGxvY2F0b3JJZkVFRUVTOF9FZlBTMl9KUzhfUzhfRUU2aW52b2tlRVJLU0FfU0JfUFM3X1NGXyxiMjddOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpaSA9IFtiMjgsX19aTjEybWF4aVNldHRpbmdzNXNldHVwRWlpaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJTZXR0ZXJQb2xpY3lJTTEybWF4aVNldHRpbmdzRnZpRUUzc2V0SVMyX0VFdlJLUzRfUlRfaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJTZXR0ZXJQb2xpY3lJTTEybWF4aUVudmVsb3BlRnZpRUUzc2V0SVMyX0VFdlJLUzRfUlRfaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlTYW1wbGVGdlJOU3QzX18xNnZlY3RvcklkTlMzXzlhbGxvY2F0b3JJZEVFRUVFdlBTMl9KUzhfRUU2aW52b2tlRVJLU0FfU0JfUFM3XyxfX1pOMTBtYXhpU2FtcGxlOXNldFNhbXBsZUVSTlN0M19fMTZ2ZWN0b3JJZE5TMF85YWxsb2NhdG9ySWRFRUVFaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJTZXR0ZXJQb2xpY3lJTTdtYXhpRW52RnZpRUUzc2V0SVMyX0VFdlJLUzRfUlRfaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU05bWF4aUNsb2NrRnZpRXZQUzJfSmlFRTZpbnZva2VFUktTNF9TNV9pLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNOW1heGlDbG9ja0Z2aUVFM3NldElTMl9FRXZSS1M0X1JUX2ksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJaU5TMl85YWxsb2NhdG9ySWlFRUVFRnZSS2lFdlBTNl9KUzhfRUU2aW52b2tlRVJLU0FfU0JfaSxfX1pOU3QzX18xNnZlY3RvcklpTlNfOWFsbG9jYXRvcklpRUVFNnJlc2l6ZUVqUktpLF9fWk5TdDNfXzE2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUU2cmVzaXplRWpSS2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJY05TMl85YWxsb2NhdG9ySWNFRUVFRnZSS2NFdlBTNl9KUzhfRUU2aW52b2tlRVJLU0FfU0JfYyxfX1pOU3QzX18xNnZlY3RvckljTlNfOWFsbG9jYXRvckljRUVFNnJlc2l6ZUVqUktjLF9fWk5TdDNfXzE2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUU2cmVzaXplRWpSS2YsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU03bWF4aUZGVEZ2aUVFM3NldElTMl9FRXZSS1M0X1JUX2ksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU03bWF4aUZGVEZ2TlN0M19fMTZ2ZWN0b3JJZk5TM185YWxsb2NhdG9ySWZFRUVFRUUzc2V0SVMyX0VFdlJLUzlfUlRfUFM3XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0yMW1heGlGRlRPY3RhdmVBbmFseXplckZ2Uk5TdDNfXzE2dmVjdG9ySWZOUzNfOWFsbG9jYXRvcklmRUVFRUV2UFMyX0pTOF9FRTZpbnZva2VFUktTQV9TQl9QUzdfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdmlFRTNzZXRJUzJfRUV2UktTNF9SVF9pLF9fWk4xNm1heGlNRkNDQW5hbHlzZXJJZEU0bWZjY0VSTlN0M19fMTZ2ZWN0b3JJZk5TMV85YWxsb2NhdG9ySWZFRUVFUk5TMl9JZE5TM19JZEVFRUUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGdlAxMG1heGlTYW1wbGVFdlBTNF9KUzZfRUU2aW52b2tlRVJLUzhfUzlfUzZfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVGdlAxMG1heGlTYW1wbGVFdlBTNF9KUzZfRUU2aW52b2tlRVJLUzhfUzlfUzZfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZ2UDEwbWF4aVNhbXBsZUV2UFM0X0pTNl9FRTZpbnZva2VFUktTOF9TOV9TNl8sYjI4LGIyOCxiMjgsYjI4LGIyOCxiMjgKLGIyOCxiMjgsYjI4XTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpID0gW2IyOSxfX1pOOW1heGlHcmFpbkkxNGhhbm5XaW5GdW5jdG9yRTRwbGF5RXYsX19aTjdtYXhpT3NjNW5vaXNlRXYsX19aTksxMm1heGlFbnZlbG9wZTEyZ2V0QW1wbGl0dWRlRXYsX19aTksxMG1heGlGaWx0ZXI5Z2V0Q3V0b2ZmRXYsX19aTksxMG1heGlGaWx0ZXIxMmdldFJlc29uYW5jZUV2LF9fWk5LMTBtYXhpTGFnRXhwSWRFNXZhbHVlRXYsX19aTksxMG1heGlMYWdFeHBJZEU4Z2V0QWxwaGFFdixfX1pOSzEwbWF4aUxhZ0V4cElkRTE4Z2V0QWxwaGFSZWNpcHJvY2FsRXYsX19aTjEwbWF4aVNhbXBsZThwbGF5T25jZUV2LF9fWk4xMG1heGlTYW1wbGU0cGxheUV2LF9fWk44bWF4aUtpY2s0cGxheUV2LF9fWk45bWF4aVNuYXJlNHBsYXlFdixfX1pOOG1heGlIYXRzNHBsYXlFdixfX1pOSzltYXhpQ2xvY2s2Z2V0QnBzRXYsX19aTks5bWF4aUNsb2NrNmdldEJwbUV2LF9fWk43bWF4aUZGVDhtYWdzVG9EQkV2LF9fWk43bWF4aUZGVDE2c3BlY3RyYWxGbGF0bmVzc0V2LF9fWk43bWF4aUZGVDE2c3BlY3RyYWxDZW50cm9pZEV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNWdldFNwZWNGcmVxU3BhbkV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNWdldEZpcnN0T2N0RnJlcUV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxNGdldEF2Z0ZyZXFJbmNyRXYsX19aTksyMW1heGlGRlRPY3RhdmVBbmFseXplcjE2Z2V0UGVha0RlY2F5UmF0ZUV2LF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXIxM2dldExpbkVRU2xvcGVFdixfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTdnZXRMaW5FUUludGVyY2VwdEV2LF9fWk4xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRTIxZ2V0Tm9ybWFsaXNlZFBvc2l0aW9uRXYsX19aTjE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFMTFnZXRQb3NpdGlvbkV2LF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckUyMWdldE5vcm1hbGlzZWRQb3NpdGlvbkV2LF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckUxMWdldFBvc2l0aW9uRXYKLGIyOSxiMjksYjI5XTsKdmFyIEZVTkNUSU9OX1RBQkxFX3ZpaWRpaSA9IFtiMzAsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdmZpaUV2UFMyX0pmaWlFRTZpbnZva2VFUktTNF9TNV9maWldOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlpZGRkID0gW2IzMSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aU9zY0ZkZGRkRWRQUzJfSmRkZEVFNmludm9rZUVSS1M0X1M1X2RkZCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlGaWx0ZXJGZGRkZEVkUFMyX0pkZGRFRTZpbnZva2VFUktTNF9TNV9kZGQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpU2FtcGxlRmRkZGRFZFBTMl9KZGRkRUU2aW52b2tlRVJLUzRfUzVfZGRkXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2lpZCA9IFtiMzIsX19aTjdtYXhpU1ZGOXNldEN1dG9mZkVkLF9fWk43bWF4aVNWRjEyc2V0UmVzb25hbmNlRWQsX19aTjdtYXhpRkZUN3Byb2Nlc3NFZl07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkID0gW2IzMyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aU9zY0ZkZEVkUFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlTYW1wbGVGZGRFZFBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlEeW5GZGRFZFBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTRtYXhpRGlzdG9ydGlvbkZkZEVkUFMyX0pkRUU2aW52b2tlRVJLUzRfUzVfZCxiMzMsYjMzLGIzM107CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkZCA9IFtiMzQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlPc2NGZGRkRWRQUzJfSmRkRUU2aW52b2tlRVJLUzRfUzVfZGQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpRmlsdGVyRmRkZEVkUFMyX0pkZEVFNmludm9rZUVSS1M0X1M1X2RkLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE0bWF4aURpc3RvcnRpb25GZGRkRWRQUzJfSmRkRUU2aW52b2tlRVJLUzRfUzVfZGQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTNtYXhpRENCbG9ja2VyRmRkZEVkUFMyX0pkZEVFNmludm9rZUVSS1M0X1M1X2RkLGIzNCxiMzQsYjM0XTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RkZGQgPSBbYjM1LF9fWk43bWF4aU1hcDVjbGFtcElkRUVUX1MxX1MxX1MxX107CnZhciBGVU5DVElPTl9UQUJMRV9kaWRpZCA9IFtiMzYsX19aTjEzbWF4aURlbGF5bGluZTJkbEVkaWRdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpZGlkZGQgPSBbYjM3LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpTWl4RnZkUk5TdDNfXzE2dmVjdG9ySWROUzNfOWFsbG9jYXRvcklkRUVFRWRkZEV2UFMyX0pkUzhfZGRkRUU2aW52b2tlRVJLU0FfU0JfZFBTN19kZGRdOwp2YXIgRlVOQ1RJT05fVEFCTEVfaWlpID0gW2IzOCxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpT3NjTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvLF9fWk5LU3QzX18xMTlfX3NoYXJlZF93ZWFrX2NvdW50MTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvLF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTJtYXhpRW52ZWxvcGVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxM21heGlEZWxheWxpbmVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlGaWx0ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aU1peE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aUxhZ0V4cElkRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzJfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMyX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwbWF4aVNhbXBsZU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdtYXhpTWFwTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvLF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQN21heGlEeW5OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUVudk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDdjb252ZXJ0TjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvLF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTRtYXhpRGlzdG9ydGlvbk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDExbWF4aUZsYW5nZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxMG1heGlDaG9ydXNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxM21heGlEQ0Jsb2NrZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aVNWRk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDhtYXhpS2lja04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDltYXhpU25hcmVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUhhdHNOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA5bWF4aUNsb2NrTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TXzEwc2hhcmVkX3B0cklTMV9FRUUxMXZhbF9kZWxldGVyRU5TXzlhbGxvY2F0b3JJUzFfRUVFMTNfX2dldF9kZWxldGVyRVJLU3Q5dHlwZV9pbmZvLF9fWk5LU3QzX18xMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA4bWF4aUlGRlROMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMxX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTMV9FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVA3bWF4aUZGVE4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzFfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMxX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aU1GQ0NBbmFseXNlcklkRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzJfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMyX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbyxfX1pOS1N0M19fMTIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlNfMTBzaGFyZWRfcHRySVMzX0VFRTExdmFsX2RlbGV0ZXJFTlNfOWFsbG9jYXRvcklTM19FRUUxM19fZ2V0X2RlbGV0ZXJFUktTdDl0eXBlX2luZm8sX19aTktTdDNfXzEyMF9fc2hhcmVkX3B0cl9wb2ludGVySVAxNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRU4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU18xMHNoYXJlZF9wdHJJUzNfRUVFMTF2YWxfZGVsZXRlckVOU185YWxsb2NhdG9ySVMzX0VFRTEzX19nZXRfZGVsZXRlckVSS1N0OXR5cGVfaW5mbwosX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU0xMm1heGlTZXR0aW5nc0tGaXZFRTNnZXRJUzJfRUVpUktTNF9SS1RfLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpT3NjRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEybWF4aUVudmVsb3BlRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNMTJtYXhpRW52ZWxvcGVLRml2RUUzZ2V0SVMyX0VFaVJLUzRfUktUXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWl4RUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUxhZ0V4cElkRUVFRTVzaGFyZUVQUzRfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNMTBtYXhpU2FtcGxlRmJ2RWJQUzJfSkVFNmludm9rZUVSS1M0X1M1XyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1hcEVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUR5bkVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTdtYXhpRW52S0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUNob3J1c0VFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEQ0Jsb2NrZXJFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlLaWNrRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpQ2xvY2tFRUU1c2hhcmVFUFMzX1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOW1heGlDbG9ja0ZidkViUFMyX0pFRTZpbnZva2VFUktTNF9TNV8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU05bWF4aUNsb2NrS0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU05bWF4aUNsb2NrS0ZidkVFM2dldElTMl9FRWJSS1M0X1JLVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJaU5TMl85YWxsb2NhdG9ySWlFRUVFS0ZqdkVqUEtTNl9KRUU2aW52b2tlRVJLUzhfU0FfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlZlY3RvckFjY2Vzc0lOU3QzX18xNnZlY3RvcklpTlMyXzlhbGxvY2F0b3JJaUVFRUVFM2dldEVSS1M2X2osX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFS0ZqdkVqUEtTNl9KRUU2aW52b2tlRVJLUzhfU0FfCixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJWZWN0b3JBY2Nlc3NJTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFRTNnZXRFUktTNl9qLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUtGanZFalBLUzZfSkVFNmludm9rZUVSS1M4X1NBXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJWZWN0b3JBY2Nlc3NJTlN0M19fMTZ2ZWN0b3JJY05TMl85YWxsb2NhdG9ySWNFRUVFRTNnZXRFUktTNl9qLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUtGanZFalBLUzZfSkVFNmludm9rZUVSS1M4X1NBXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJWZWN0b3JBY2Nlc3NJTlN0M19fMTZ2ZWN0b3JJZk5TMl85YWxsb2NhdG9ySWZFRUVFRTNnZXRFUktTNl9qLF9fZW12YWxfdGFrZV92YWx1ZV9fd3JhcHBlcixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUZGVEVFRTVzaGFyZUVQUzNfUE5TXzhpbnRlcm5hbDdfRU1fVkFMRSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTdtYXhpRkZUS0ZpdkVFM2dldElTMl9FRWlSS1M0X1JLVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU03bWF4aUZGVEtGTlN0M19fMTZ2ZWN0b3JJZk5TM185YWxsb2NhdG9ySWZFRUVFdkVFM2dldElTMl9FRVBTN19SS1M5X1JLVF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlJRkZURUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyRUVFNXNoYXJlRVBTM19QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJLRml2RUUzZ2V0SVMyX0VFaVJLUzRfUktUXyxfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTVnZXRQZWFrSG9sZFRpbWVFaSxfX1pOSzIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyMTBnZXRTcGUyQXZnRWksX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpTUZDQ0FuYWx5c2VySWRFRUVFNXNoYXJlRVBTNF9QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFNXNoYXJlRVBTNV9QTlNfOGludGVybmFsN19FTV9WQUxFLF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTE0bWF4aVBpdGNoU2hpZnRJMTRoYW5uV2luRnVuY3RvckVFRUU1c2hhcmVFUFM1X1BOU184aW50ZXJuYWw3X0VNX1ZBTEUsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTZtYXhpUGl0Y2hTdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUVFNXNoYXJlRVBTNV9QTlNfOGludGVybmFsN19FTV9WQUxFLGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4CixiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOAosYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzgsYjM4LGIzOCxiMzhdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlpZGRpID0gW2IzOSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNW1heGlUaW1lc3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZkZGRpRWRQUzRfSmRkaUVFNmludm9rZUVSS1M2X1M3X2RkaV07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkZGRkZCA9IFtiNDAsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlEeW5GZGRkZGRkRWRQUzJfSmRkZGRkRUU2aW52b2tlRVJLUzRfUzVfZGRkZGQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlTVkZGZGRkZGRkRWRQUzJfSmRkZGRkRUU2aW52b2tlRVJLUzRfUzVfZGRkZGQsYjQwXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpaWkgPSBbYjQxLF9fWk4xMm1heGlFbnZlbG9wZTRsaW5lRWlSTlN0M19fMTZ2ZWN0b3JJZE5TMF85YWxsb2NhdG9ySWRFRUVFLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdjb252ZXJ0RmRpRWRQUzJfSmlFRTZpbnZva2VFUktTNF9TNV9pLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRkZURmZpRWZQUzJfSmlFRTZpbnZva2VFUktTNF9TNV9pLF9fWk44bWF4aUlGRlQ3cHJvY2Vzc0VSTlN0M19fMTZ2ZWN0b3JJZk5TMF85YWxsb2NhdG9ySWZFRUVFUzVfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyS0ZmaUVmUEtTMl9KaUVFNmludm9rZUVSS1M0X1M2X2ksYjQxLGI0MV07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkZGRpaSA9IFtiNDIsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlFbnZGZGRkZGxpRWRQUzJfSmRkZGxpRUU2aW52b2tlRVJLUzRfUzVfZGRkbGldOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlkZCA9IFtiNDMsX19aTjdtYXhpT3NjNXB1bHNlRWRkLF9fWk43bWF4aU9zYzRyZWN0RWRkLF9fWk4xMG1heGlGaWx0ZXI2bG9wYXNzRWRkLF9fWk4xMG1heGlGaWx0ZXI2aGlwYXNzRWRkLF9fWk4xNG1heGlEaXN0b3J0aW9uOGF0YW5EaXN0RWRkLF9fWk4xNG1heGlEaXN0b3J0aW9uMTJmYXN0QXRhbkRpc3RFZGQsX19aTjEzbWF4aURDQmxvY2tlcjRwbGF5RWRkXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpaWRkZGRkaWkgPSBbYjQ0LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRW52RmRkZGRkZGxpRWRQUzJfSmRkZGRkbGlFRTZpbnZva2VFUktTNF9TNV9kZGRkZGxpXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpZGRkaWQgPSBbYjQ1LF9fWk4xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckU0cGxheUVkZGRpZF07CnZhciBGVU5DVElPTl9UQUJMRV9kaWkgPSBbYjQ2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpT3NjRmR2RWRQUzJfSkVFNmludm9rZUVSS1M0X1M1XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTEybWF4aUVudmVsb3BlS0ZkdkVFM2dldElTMl9FRWRSS1M0X1JLVF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU0xMG1heGlGaWx0ZXJLRmR2RUUzZ2V0SVMyX0VFZFJLUzRfUktUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlMYWdFeHBJZEVLRmR2RWRQS1MzX0pFRTZpbnZva2VFUktTNV9TN18sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyR2V0dGVyUG9saWN5SU0xMG1heGlMYWdFeHBJZEVLRmR2RUUzZ2V0SVMzX0VFZFJLUzVfUktUXyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xMG1heGlTYW1wbGVGZHZFZFBTMl9KRUU2aW52b2tlRVJLUzRfUzVfLF9fWk43Y29udmVydDRtdG9mRWksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlLaWNrRmR2RWRQUzJfSkVFNmludm9rZUVSS1M0X1M1XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU05bWF4aVNuYXJlRmR2RWRQUzJfSkVFNmludm9rZUVSS1M0X1M1XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU04bWF4aUhhdHNGZHZFZFBTMl9KRUU2aW52b2tlRVJLUzRfUzVfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMkdldHRlclBvbGljeUlNOW1heGlDbG9ja0tGZHZFRTNnZXRJUzJfRUVkUktTNF9SS1RfLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpRkZURmZ2RWZQUzJfSkVFNmludm9rZUVSS1M0X1M1XyxfX1pON21heGlGRlQxMmdldE1hZ25pdHVkZUVpLF9fWk43bWF4aUZGVDE0Z2V0TWFnbml0dWRlREJFaSxfX1pON21heGlGRlQ4Z2V0UGhhc2VFaSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJHZXR0ZXJQb2xpY3lJTTIxbWF4aUZGVE9jdGF2ZUFuYWx5emVyS0ZmdkVFM2dldElTMl9FRWZSS1M0X1JLVF8sX19aTksyMW1heGlGRlRPY3RhdmVBbmFseXplcjEwZ2V0QXZlcmFnZUVpLF9fWk5LMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXI3Z2V0UGVha0VpLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRmR2RWRQUzRfSkVFNmludm9rZUVSS1M2X1M3XyxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVGZHZFZFBTNF9KRUU2aW52b2tlRVJLUzZfUzdfLGI0NixiNDYsYjQ2LGI0NixiNDYsYjQ2LGI0NixiNDYKLGI0NixiNDYsYjQ2XTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpZCA9IFtiNDcsX19aTjdtYXhpT3NjOHNpbmV3YXZlRWQsX19aTjdtYXhpT3NjN2Nvc3dhdmVFZCxfX1pON21heGlPc2M2cGhhc29yRWQsX19aTjdtYXhpT3NjM3Nhd0VkLF9fWk43bWF4aU9zYzh0cmlhbmdsZUVkLF9fWk43bWF4aU9zYzZzcXVhcmVFZCxfX1pON21heGlPc2M3c2luZWJ1ZkVkLF9fWk43bWF4aU9zYzhzaW5lYnVmNEVkLF9fWk43bWF4aU9zYzRzYXduRWQsX19aTjEwbWF4aVNhbXBsZThwbGF5T25jZUVkLF9fWk4xMG1heGlTYW1wbGU0cGxheUVkLF9fWk43bWF4aUR5bjhjb21wcmVzc0VkLF9fWk4xNG1heGlEaXN0b3J0aW9uOGZhc3RhdGFuRWQsYjQ3LGI0N107CnZhciBGVU5DVElPTl9UQUJMRV9pID0gW2I0OCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJvcGVyYXRvcl9uZXdJMTF2ZWN0b3JUb29sc0pFRUVQVF9EcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3STEybWF4aVNldHRpbmdzSkVFRVBUX0RwT1QwXyxfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU9zY0VFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMm1heGlFbnZlbG9wZUVFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTBtYXhpRmlsdGVyRUVFMTRjb25zdHJ1Y3RfbnVsbEV2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWl4RUVFMTRjb25zdHJ1Y3RfbnVsbEV2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUxhZ0V4cElkRUVFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlTYW1wbGVFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlNYXBFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlEeW5FRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlFbnZFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN2NvbnZlcnRFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxMW1heGlGbGFuZ2VyRUVFMTRjb25zdHJ1Y3RfbnVsbEV2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUNob3J1c0VFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEQ0Jsb2NrZXJFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlTVkZFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlLaWNrRUVFMTRjb25zdHJ1Y3RfbnVsbEV2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlIYXRzRUVFMTRjb25zdHJ1Y3RfbnVsbEV2LF9fWk4xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpQ2xvY2tFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRUpFRUVQVF9EcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUpFRUVQVF9EcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWNOUzJfOWFsbG9jYXRvckljRUVFRUpFRUVQVF9EcE9UMF8sX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyb3BlcmF0b3JfbmV3SU5TdDNfXzE2dmVjdG9ySWZOUzJfOWFsbG9jYXRvcklmRUVFRUpFRUVQVF9EcE9UMF8sX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJOG1heGlJRkZURUVFMTRjb25zdHJ1Y3RfbnVsbEV2CixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkyMW1heGlGRlRPY3RhdmVBbmFseXplckVFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlNRkNDQW5hbHlzZXJJZEVFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19aTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SU5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUVFRTE0Y29uc3RydWN0X251bGxFdixfX1pOMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJTlN0M19fMTEwc2hhcmVkX3B0ckkxNm1heGlQaXRjaFN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckVFRUUxNGNvbnN0cnVjdF9udWxsRXYsX19fY3hhX2dldF9nbG9iYWxzX2Zhc3QsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgsYjQ4LGI0OCxiNDgKLGI0OCxiNDgsYjQ4LGI0OCxiNDhdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlkaSA9IFtiNDksX19aTjdtYXhpRW52NGFkc3JFZGldOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlpZGRkaWQgPSBbYjUwLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZkZGRkaWRFZFBTNF9KZGRkaWRFRTZpbnZva2VFUktTNl9TN19kZGRpZF07CnZhciBGVU5DVElPTl9UQUJMRV9kaWlkaSA9IFtiNTEsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlFbnZGZGRpRWRQUzJfSmRpRUU2aW52b2tlRVJLUzRfUzVfZGldOwp2YXIgRlVOQ1RJT05fVEFCTEVfaWlpZCA9IFtiNTIsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlTVkZGUlMyX2RFUzNfUFMyX0pkRUU2aW52b2tlRVJLUzVfUzZfZCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aUZGVEZiZkViUFMyX0pmRUU2aW52b2tlRVJLUzRfUzVfZixiNTJdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlkZGlkID0gW2I1MyxfX1pOMTVtYXhpVGltZXN0cmV0Y2hJMTRoYW5uV2luRnVuY3RvckU0cGxheUVkZGlkLF9fWk4xNG1heGlQaXRjaFNoaWZ0STE0aGFubldpbkZ1bmN0b3JFNHBsYXlFZGRpZCxiNTNdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlpZGlkID0gW2I1NCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xM21heGlEZWxheWxpbmVGZGRpZEVkUFMyX0pkaWRFRTZpbnZva2VFUktTNF9TNV9kaWRdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpaWQgPSBbYjU1LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEybWF4aUVudmVsb3BlRnZpZEV2UFMyX0ppZEVFNmludm9rZUVSS1M0X1M1X2lkLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRUZ2alJLZEV2UFM2X0pqUzhfRUU2aW52b2tlRVJLU0FfU0JfamQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJZk5TMl85YWxsb2NhdG9ySWZFRUVFRnZqUktmRXZQUzZfSmpTOF9FRTZpbnZva2VFUktTQV9TQl9qZl07CnZhciBGVU5DVElPTl9UQUJMRV92aWlkaWQgPSBbYjU2LF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTdtYXhpTWl4RnZkUk5TdDNfXzE2dmVjdG9ySWROUzNfOWFsbG9jYXRvcklkRUVFRWRFdlBTMl9KZFM4X2RFRTZpbnZva2VFUktTQV9TQl9kUFM3X2RdOwp2YXIgRlVOQ1RJT05fVEFCTEVfZGlkZGRpaSA9IFtiNTcsX19aTjdtYXhpRW52MmFyRWRkZGxpXTsKdmFyIEZVTkNUSU9OX1RBQkxFX3YgPSBbYjU4LF9fWkwyNWRlZmF1bHRfdGVybWluYXRlX2hhbmRsZXJ2LF9fX2N4YV9yZXRocm93X193cmFwcGVyLF9fX2N4YV9lbmRfY2F0Y2hfX3dyYXBwZXIsX19aTjEwX19jeHhhYml2MTEyX0dMT0JBTF9fTl8xMTBjb25zdHJ1Y3RfRXYsYjU4LGI1OCxiNThdOwp2YXIgRlVOQ1RJT05fVEFCTEVfdmlpZCA9IFtiNTksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlPc2NGdmRFdlBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEybWF4aUVudmVsb3BlN3RyaWdnZXJFaWQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU0xMm1heGlFbnZlbG9wZUZ2ZEVFM3NldElTMl9FRXZSS1M0X1JUX2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEyU2V0dGVyUG9saWN5SU0xMG1heGlGaWx0ZXJGdmRFRTNzZXRJUzJfRUV2UktTNF9SVF9kLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aUxhZ0V4cElkRUZ2ZEV2UFMzX0pkRUU2aW52b2tlRVJLUzVfUzZfZCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTJTZXR0ZXJQb2xpY3lJTTEwbWF4aUxhZ0V4cElkRUZ2ZEVFM3NldElTM19FRXZSS1M1X1JUX2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlEeW5GdmRFdlBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNN21heGlFbnZGdmRFdlBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlLaWNrRnZkRXZQUzJfSmRFRTZpbnZva2VFUktTNF9TNV9kLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTltYXhpU25hcmVGdmRFdlBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNOG1heGlIYXRzRnZkRXZQUzJfSmRFRTZpbnZva2VFUktTNF9TNV9kLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTltYXhpQ2xvY2tGdmRFdlBTMl9KZEVFNmludm9rZUVSS1M0X1M1X2QsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJZE5TMl85YWxsb2NhdG9ySWRFRUVFRnZSS2RFdlBTNl9KUzhfRUU2aW52b2tlRVJLU0FfU0JfZCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU1OU3QzX18xNnZlY3RvcklmTlMyXzlhbGxvY2F0b3JJZkVFRUVGdlJLZkV2UFM2X0pTOF9FRTZpbnZva2VFUktTQV9TQl9mLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMlNldHRlclBvbGljeUlNMjFtYXhpRkZUT2N0YXZlQW5hbHl6ZXJGdmZFRTNzZXRJUzJfRUV2UktTNF9SVF9mLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRnZkRXZQUzRfSmRFRTZpbnZva2VFUktTNl9TN19kLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUZ2ZEV2UFM0X0pkRUU2aW52b2tlRVJLUzZfUzdfZCxiNTksYjU5LGI1OSxiNTksYjU5LGI1OSxiNTksYjU5LGI1OSxiNTksYjU5CixiNTksYjU5LGI1OV07CnZhciBGVU5DVElPTl9UQUJMRV92aWlkaWRkID0gW2I2MCxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU03bWF4aU1peEZ2ZFJOU3QzX18xNnZlY3RvcklkTlMzXzlhbGxvY2F0b3JJZEVFRUVkZEV2UFMyX0pkUzhfZGRFRTZpbnZva2VFUktTQV9TQl9kUFM3X2RkXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2RpZGlkaSA9IFtiNjEsX19aTjEzbWF4aURlbGF5bGluZTJkbEVkaWRpXTsKdmFyIEZVTkNUSU9OX1RBQkxFX2lpaWlkID0gW2I2MixfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTVGdW5jdGlvbkludm9rZXJJUEZiUk5TdDNfXzE2dmVjdG9ySWROUzJfOWFsbG9jYXRvcklkRUVFRWpSS2RFYlM3X0pqUzlfRUU2aW52b2tlRVBTQl9QUzZfamQsX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDE1RnVuY3Rpb25JbnZva2VySVBGYlJOU3QzX18xNnZlY3RvcklmTlMyXzlhbGxvY2F0b3JJZkVFRUVqUktmRWJTN19KalM5X0VFNmludm9rZUVQU0JfUFM2X2pmLGI2Ml07CnZhciBGVU5DVElPTl9UQUJMRV92aWlpaSA9IFtiNjMsX19aTksxMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvMjdoYXNfdW5hbWJpZ3VvdXNfcHVibGljX2Jhc2VFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQdmksX19aTksxMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvMjdoYXNfdW5hbWJpZ3VvdXNfcHVibGljX2Jhc2VFUE5TXzE5X19keW5hbWljX2Nhc3RfaW5mb0VQdmksX19aTksxMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mbzI3aGFzX3VuYW1iaWd1b3VzX3B1YmxpY19iYXNlRVBOU18xOV9fZHluYW1pY19jYXN0X2luZm9FUHZpLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWw3SW52b2tlckl2SmlpaUVFNmludm9rZUVQRnZpaWlFaWlpLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTTEwbWF4aVNhbXBsZUZ2Uk5TdDNfXzE2dmVjdG9ySWROUzNfOWFsbG9jYXRvcklkRUVFRWlFdlBTMl9KUzhfaUVFNmludm9rZUVSS1NBX1NCX1BTN19pLF9fWk4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxM01ldGhvZEludm9rZXJJTU5TdDNfXzE2dmVjdG9ySWlOUzJfOWFsbG9jYXRvcklpRUVFRUZ2alJLaUV2UFM2X0pqUzhfRUU2aW52b2tlRVJLU0FfU0JfamksX19aTjEwZW1zY3JpcHRlbjhpbnRlcm5hbDEzTWV0aG9kSW52b2tlcklNTlN0M19fMTZ2ZWN0b3JJY05TMl85YWxsb2NhdG9ySWNFRUVFRnZqUktjRXZQUzZfSmpTOF9FRTZpbnZva2VFUktTQV9TQl9qYyxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpT3NjRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFLF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJMTJtYXhpRW52ZWxvcGVFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEZWxheWxpbmVFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlGaWx0ZXJFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aU1peEVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aUxhZ0V4cElkRUVDMklTMl9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzNfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJU0FfUFMyX0VFNXZhbHVlRU5TM181X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTEwbWF4aVNhbXBsZUVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTdtYXhpTWFwRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFLF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlEeW5FQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aUVudkVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTdjb252ZXJ0RUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFLF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpRGlzdG9ydGlvbkVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTExbWF4aUZsYW5nZXJFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxMG1heGlDaG9ydXNFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckkxM21heGlEQ0Jsb2NrZXJFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckk3bWF4aVNWRkVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySThtYXhpS2lja0VDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTltYXhpU25hcmVFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUhhdHNFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckk5bWF4aUNsb2NrRUMySVMxX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTMl9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTOV9QUzFfRUU1dmFsdWVFTlMyXzVfX25hdEVFNHR5cGVFLF9fWk43bWF4aUZGVDVzZXR1cEVpaWkKLF9fWk44bWF4aUlGRlQ1c2V0dXBFaWlpLF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJN21heGlGRlRFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckk4bWF4aUlGRlRFQzJJUzFfTjEwZW1zY3JpcHRlbjE1c21hcnRfcHRyX3RyYWl0SVMyX0UxMXZhbF9kZWxldGVyRUVFUFRfVDBfTlNfOWVuYWJsZV9pZklYc3IxNGlzX2NvbnZlcnRpYmxlSVM5X1BTMV9FRTV2YWx1ZUVOUzJfNV9fbmF0RUU0dHlwZUUsX19aTlN0M19fMTEwc2hhcmVkX3B0ckkyMW1heGlGRlRPY3RhdmVBbmFseXplckVDMklTMV9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzJfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJUzlfUFMxX0VFNXZhbHVlRU5TMl81X19uYXRFRTR0eXBlRSxfX1pOMTBlbXNjcmlwdGVuOGludGVybmFsMTNNZXRob2RJbnZva2VySU0xNm1heGlNRkNDQW5hbHlzZXJJZEVGdlJOU3QzX18xNnZlY3RvcklmTlM0XzlhbGxvY2F0b3JJZkVFRUVSTlM1X0lkTlM2X0lkRUVFRUV2UFMzX0pTOV9TQ19FRTZpbnZva2VFUktTRV9TRl9QUzhfUFNCXyxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aU1GQ0NBbmFseXNlcklkRUVDMklTMl9OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzNfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJU0FfUFMyX0VFNXZhbHVlRU5TM181X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTE1bWF4aVRpbWVzdHJldGNoSTE0aGFubldpbkZ1bmN0b3JFRUMySVMzX04xMGVtc2NyaXB0ZW4xNXNtYXJ0X3B0cl90cmFpdElTNF9FMTF2YWxfZGVsZXRlckVFRVBUX1QwX05TXzllbmFibGVfaWZJWHNyMTRpc19jb252ZXJ0aWJsZUlTQl9QUzNfRUU1dmFsdWVFTlM0XzVfX25hdEVFNHR5cGVFLF9fWk5TdDNfXzExMHNoYXJlZF9wdHJJMTRtYXhpUGl0Y2hTaGlmdEkxNGhhbm5XaW5GdW5jdG9yRUVDMklTM19OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzRfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJU0JfUFMzX0VFNXZhbHVlRU5TNF81X19uYXRFRTR0eXBlRSxfX1pOU3QzX18xMTBzaGFyZWRfcHRySTE2bWF4aVBpdGNoU3RyZXRjaEkxNGhhbm5XaW5GdW5jdG9yRUVDMklTM19OMTBlbXNjcmlwdGVuMTVzbWFydF9wdHJfdHJhaXRJUzRfRTExdmFsX2RlbGV0ZXJFRUVQVF9UMF9OU185ZW5hYmxlX2lmSVhzcjE0aXNfY29udmVydGlibGVJU0JfUFMzX0VFNXZhbHVlRU5TNF81X19uYXRFRTR0eXBlRSxiNjMsYjYzLGI2MyxiNjMsYjYzLGI2MyxiNjMsYjYzLGI2MyxiNjMsYjYzLGI2MyxiNjMsYjYzLGI2MyxiNjMsYjYzLGI2MyxiNjMsYjYzLGI2MwosYjYzLGI2MyxiNjMsYjYzLGI2M107CgogIHJldHVybiB7IF9fX2N4YV9jYW5fY2F0Y2g6IF9fX2N4YV9jYW5fY2F0Y2gsIF9mZmx1c2g6IF9mZmx1c2gsIF9fX2N4YV9pc19wb2ludGVyX3R5cGU6IF9fX2N4YV9pc19wb2ludGVyX3R5cGUsIF9pNjRBZGQ6IF9pNjRBZGQsIF9tZW1tb3ZlOiBfbWVtbW92ZSwgX2k2NFN1YnRyYWN0OiBfaTY0U3VidHJhY3QsIF9tZW1zZXQ6IF9tZW1zZXQsIF9tYWxsb2M6IF9tYWxsb2MsIF9tZW1jcHk6IF9tZW1jcHksIF9fX2dldFR5cGVOYW1lOiBfX19nZXRUeXBlTmFtZSwgX2JpdHNoaWZ0NjRMc2hyOiBfYml0c2hpZnQ2NExzaHIsIF9mcmVlOiBfZnJlZSwgX19fZXJybm9fbG9jYXRpb246IF9fX2Vycm5vX2xvY2F0aW9uLCBfYml0c2hpZnQ2NFNobDogX2JpdHNoaWZ0NjRTaGwsIF9fR0xPQkFMX19zdWJfSV9tYXhpX2Vtc2NyX25ld19jcHA6IF9fR0xPQkFMX19zdWJfSV9tYXhpX2Vtc2NyX25ld19jcHAsIF9fR0xPQkFMX19zdWJfSV9tYXhpRkZUX2NwcDogX19HTE9CQUxfX3N1Yl9JX21heGlGRlRfY3BwLCBfX0dMT0JBTF9fc3ViX0lfbWF4aU1GQ0NfY3BwOiBfX0dMT0JBTF9fc3ViX0lfbWF4aU1GQ0NfY3BwLCBfX0dMT0JBTF9fc3ViX0lfbWF4aUdyYWluc19jcHA6IF9fR0xPQkFMX19zdWJfSV9tYXhpR3JhaW5zX2NwcCwgX19HTE9CQUxfX3N1Yl9JX2JpbmRfY3BwOiBfX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAsIHJ1blBvc3RTZXRzOiBydW5Qb3N0U2V0cywgX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnk6IF9lbXNjcmlwdGVuX3JlcGxhY2VfbWVtb3J5LCBzdGFja0FsbG9jOiBzdGFja0FsbG9jLCBzdGFja1NhdmU6IHN0YWNrU2F2ZSwgc3RhY2tSZXN0b3JlOiBzdGFja1Jlc3RvcmUsIGVzdGFibGlzaFN0YWNrU3BhY2U6IGVzdGFibGlzaFN0YWNrU3BhY2UsIHNldFRocmV3OiBzZXRUaHJldywgc2V0VGVtcFJldDA6IHNldFRlbXBSZXQwLCBnZXRUZW1wUmV0MDogZ2V0VGVtcFJldDAsIGR5bkNhbGxfZGlkZGlkZDogZHluQ2FsbF9kaWRkaWRkLCBkeW5DYWxsX2RpZGRpOiBkeW5DYWxsX2RpZGRpLCBkeW5DYWxsX3ZpaWlpaWRkaTogZHluQ2FsbF92aWlpaWlkZGksIGR5bkNhbGxfdmlkOiBkeW5DYWxsX3ZpZCwgZHluQ2FsbF9kaWlkaWRpOiBkeW5DYWxsX2RpaWRpZGksIGR5bkNhbGxfdmk6IGR5bkNhbGxfdmksIGR5bkNhbGxfdmlpOiBkeW5DYWxsX3ZpaSwgZHluQ2FsbF9kaWlkaWRkZDogZHluQ2FsbF9kaWlkaWRkZCwgZHluQ2FsbF9kaWRkZDogZHluQ2FsbF9kaWRkZCwgZHluQ2FsbF92aWlpaWRkaTogZHluQ2FsbF92aWlpaWRkaSwgZHluQ2FsbF9paTogZHluQ2FsbF9paSwgZHluQ2FsbF92aWRpZGRkOiBkeW5DYWxsX3ZpZGlkZGQsIGR5bkNhbGxfdmlkaWQ6IGR5bkNhbGxfdmlkaWQsIGR5bkNhbGxfdmlpZGQ6IGR5bkNhbGxfdmlpZGQsIGR5bkNhbGxfZGlkZGRkZGlpOiBkeW5DYWxsX2RpZGRkZGRpaSwgZHluQ2FsbF92aWlpaWk6IGR5bkNhbGxfdmlpaWlpLCBkeW5DYWxsX3ZpZGlpOiBkeW5DYWxsX3ZpZGlpLCBkeW5DYWxsX3ZpZGlkZDogZHluQ2FsbF92aWRpZGQsIGR5bkNhbGxfaWlpaWk6IGR5bkNhbGxfaWlpaWksIGR5bkNhbGxfZGlpZGRpZGQ6IGR5bkNhbGxfZGlpZGRpZGQsIGR5bkNhbGxfZGlkZGRkZDogZHluQ2FsbF9kaWRkZGRkLCBkeW5DYWxsX3ZpZGQ6IGR5bkNhbGxfdmlkZCwgZHluQ2FsbF9paWlpOiBkeW5DYWxsX2lpaWksIGR5bkNhbGxfZGlpZGRpZDogZHluQ2FsbF9kaWlkZGlkLCBkeW5DYWxsX2RpZGlkZGQ6IGR5bkNhbGxfZGlkaWRkZCwgZHluQ2FsbF9kZGRkZGQ6IGR5bkNhbGxfZGRkZGRkLCBkeW5DYWxsX3ZpaWlpaWk6IGR5bkNhbGxfdmlpaWlpaSwgZHluQ2FsbF9kaWlpaTogZHluQ2FsbF9kaWlpaSwgZHluQ2FsbF92aWlpOiBkeW5DYWxsX3ZpaWksIGR5bkNhbGxfZGk6IGR5bkNhbGxfZGksIGR5bkNhbGxfdmlpZGlpOiBkeW5DYWxsX3ZpaWRpaSwgZHluQ2FsbF9kaWlkZGQ6IGR5bkNhbGxfZGlpZGRkLCBkeW5DYWxsX2lpZDogZHluQ2FsbF9paWQsIGR5bkNhbGxfZGlpZDogZHluQ2FsbF9kaWlkLCBkeW5DYWxsX2RpaWRkOiBkeW5DYWxsX2RpaWRkLCBkeW5DYWxsX2RkZGQ6IGR5bkNhbGxfZGRkZCwgZHluQ2FsbF9kaWRpZDogZHluQ2FsbF9kaWRpZCwgZHluQ2FsbF92aWlkaWRkZDogZHluQ2FsbF92aWlkaWRkZCwgZHluQ2FsbF9paWk6IGR5bkNhbGxfaWlpLCBkeW5DYWxsX2RpaWRkaTogZHluQ2FsbF9kaWlkZGksIGR5bkNhbGxfZGlpZGRkZGQ6IGR5bkNhbGxfZGlpZGRkZGQsIGR5bkNhbGxfZGlpaTogZHluQ2FsbF9kaWlpLCBkeW5DYWxsX2RpaWRkZGlpOiBkeW5DYWxsX2RpaWRkZGlpLCBkeW5DYWxsX2RpZGQ6IGR5bkNhbGxfZGlkZCwgZHluQ2FsbF9kaWlkZGRkZGlpOiBkeW5DYWxsX2RpaWRkZGRkaWksIGR5bkNhbGxfZGlkZGRpZDogZHluQ2FsbF9kaWRkZGlkLCBkeW5DYWxsX2RpaTogZHluQ2FsbF9kaWksIGR5bkNhbGxfZGlkOiBkeW5DYWxsX2RpZCwgZHluQ2FsbF9pOiBkeW5DYWxsX2ksIGR5bkNhbGxfZGlkaTogZHluQ2FsbF9kaWRpLCBkeW5DYWxsX2RpaWRkZGlkOiBkeW5DYWxsX2RpaWRkZGlkLCBkeW5DYWxsX2RpaWRpOiBkeW5DYWxsX2RpaWRpLCBkeW5DYWxsX2lpaWQ6IGR5bkNhbGxfaWlpZCwgZHluQ2FsbF9kaWRkaWQ6IGR5bkNhbGxfZGlkZGlkLCBkeW5DYWxsX2RpaWRpZDogZHluQ2FsbF9kaWlkaWQsIGR5bkNhbGxfdmlpaWQ6IGR5bkNhbGxfdmlpaWQsIGR5bkNhbGxfdmlpZGlkOiBkeW5DYWxsX3ZpaWRpZCwgZHluQ2FsbF9kaWRkZGlpOiBkeW5DYWxsX2RpZGRkaWksIGR5bkNhbGxfdjogZHluQ2FsbF92LCBkeW5DYWxsX3ZpaWQ6IGR5bkNhbGxfdmlpZCwgZHluQ2FsbF92aWlkaWRkOiBkeW5DYWxsX3ZpaWRpZGQsIGR5bkNhbGxfZGlkaWRpOiBkeW5DYWxsX2RpZGlkaSwgZHluQ2FsbF9paWlpZDogZHluQ2FsbF9paWlpZCwgZHluQ2FsbF92aWlpaTogZHluQ2FsbF92aWlpaSB9Owp9KQovLyBFTVNDUklQVEVOX0VORF9BU00KKE1vZHVsZS5hc21HbG9iYWxBcmcsIE1vZHVsZS5hc21MaWJyYXJ5QXJnLCBidWZmZXIpOwp2YXIgcmVhbF9fX0dMT0JBTF9fc3ViX0lfbWF4aV9lbXNjcl9uZXdfY3BwID0gYXNtWyJfX0dMT0JBTF9fc3ViX0lfbWF4aV9lbXNjcl9uZXdfY3BwIl07CmFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlfZW1zY3JfbmV3X2NwcCJdID0gKGZ1bmN0aW9uKCkgewogYXNzZXJ0KHJ1bnRpbWVJbml0aWFsaXplZCwgInlvdSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBydW50aW1lIHRvIGJlIHJlYWR5IChlLmcuIHdhaXQgZm9yIG1haW4oKSB0byBiZSBjYWxsZWQpIik7CiBhc3NlcnQoIXJ1bnRpbWVFeGl0ZWQsICJ0aGUgcnVudGltZSB3YXMgZXhpdGVkICh1c2UgTk9fRVhJVF9SVU5USU1FIHRvIGtlZXAgaXQgYWxpdmUgYWZ0ZXIgbWFpbigpIGV4aXRzKSIpOwogcmV0dXJuIHJlYWxfX19HTE9CQUxfX3N1Yl9JX21heGlfZW1zY3JfbmV3X2NwcC5hcHBseShudWxsLCBhcmd1bWVudHMpOwp9KTsKdmFyIHJlYWxfX19fY3hhX2Nhbl9jYXRjaCA9IGFzbVsiX19fY3hhX2Nhbl9jYXRjaCJdOwphc21bIl9fX2N4YV9jYW5fY2F0Y2giXSA9IChmdW5jdGlvbigpIHsKIGFzc2VydChydW50aW1lSW5pdGlhbGl6ZWQsICJ5b3UgbmVlZCB0byB3YWl0IGZvciB0aGUgcnVudGltZSB0byBiZSByZWFkeSAoZS5nLiB3YWl0IGZvciBtYWluKCkgdG8gYmUgY2FsbGVkKSIpOwogYXNzZXJ0KCFydW50aW1lRXhpdGVkLCAidGhlIHJ1bnRpbWUgd2FzIGV4aXRlZCAodXNlIE5PX0VYSVRfUlVOVElNRSB0byBrZWVwIGl0IGFsaXZlIGFmdGVyIG1haW4oKSBleGl0cykiKTsKIHJldHVybiByZWFsX19fX2N4YV9jYW5fY2F0Y2guYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19fR0xPQkFMX19zdWJfSV9iaW5kX2NwcCA9IGFzbVsiX19HTE9CQUxfX3N1Yl9JX2JpbmRfY3BwIl07CmFzbVsiX19HTE9CQUxfX3N1Yl9JX2JpbmRfY3BwIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9fX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19mZmx1c2ggPSBhc21bIl9mZmx1c2giXTsKYXNtWyJfZmZsdXNoIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9fZmZsdXNoLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cn0pOwp2YXIgcmVhbF9fX0dMT0JBTF9fc3ViX0lfbWF4aU1GQ0NfY3BwID0gYXNtWyJfX0dMT0JBTF9fc3ViX0lfbWF4aU1GQ0NfY3BwIl07CmFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlNRkNDX2NwcCJdID0gKGZ1bmN0aW9uKCkgewogYXNzZXJ0KHJ1bnRpbWVJbml0aWFsaXplZCwgInlvdSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBydW50aW1lIHRvIGJlIHJlYWR5IChlLmcuIHdhaXQgZm9yIG1haW4oKSB0byBiZSBjYWxsZWQpIik7CiBhc3NlcnQoIXJ1bnRpbWVFeGl0ZWQsICJ0aGUgcnVudGltZSB3YXMgZXhpdGVkICh1c2UgTk9fRVhJVF9SVU5USU1FIHRvIGtlZXAgaXQgYWxpdmUgYWZ0ZXIgbWFpbigpIGV4aXRzKSIpOwogcmV0dXJuIHJlYWxfX19HTE9CQUxfX3N1Yl9JX21heGlNRkNDX2NwcC5hcHBseShudWxsLCBhcmd1bWVudHMpOwp9KTsKdmFyIHJlYWxfX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IGFzbVsiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSJdOwphc21bIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiXSA9IChmdW5jdGlvbigpIHsKIGFzc2VydChydW50aW1lSW5pdGlhbGl6ZWQsICJ5b3UgbmVlZCB0byB3YWl0IGZvciB0aGUgcnVudGltZSB0byBiZSByZWFkeSAoZS5nLiB3YWl0IGZvciBtYWluKCkgdG8gYmUgY2FsbGVkKSIpOwogYXNzZXJ0KCFydW50aW1lRXhpdGVkLCAidGhlIHJ1bnRpbWUgd2FzIGV4aXRlZCAodXNlIE5PX0VYSVRfUlVOVElNRSB0byBrZWVwIGl0IGFsaXZlIGFmdGVyIG1haW4oKSBleGl0cykiKTsKIHJldHVybiByZWFsX19fX2N4YV9pc19wb2ludGVyX3R5cGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19pNjRBZGQgPSBhc21bIl9pNjRBZGQiXTsKYXNtWyJfaTY0QWRkIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9faTY0QWRkLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cn0pOwp2YXIgcmVhbF9fbWVtbW92ZSA9IGFzbVsiX21lbW1vdmUiXTsKYXNtWyJfbWVtbW92ZSJdID0gKGZ1bmN0aW9uKCkgewogYXNzZXJ0KHJ1bnRpbWVJbml0aWFsaXplZCwgInlvdSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBydW50aW1lIHRvIGJlIHJlYWR5IChlLmcuIHdhaXQgZm9yIG1haW4oKSB0byBiZSBjYWxsZWQpIik7CiBhc3NlcnQoIXJ1bnRpbWVFeGl0ZWQsICJ0aGUgcnVudGltZSB3YXMgZXhpdGVkICh1c2UgTk9fRVhJVF9SVU5USU1FIHRvIGtlZXAgaXQgYWxpdmUgYWZ0ZXIgbWFpbigpIGV4aXRzKSIpOwogcmV0dXJuIHJlYWxfX21lbW1vdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19fR0xPQkFMX19zdWJfSV9tYXhpRkZUX2NwcCA9IGFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlGRlRfY3BwIl07CmFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlGRlRfY3BwIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9fX0dMT0JBTF9fc3ViX0lfbWF4aUZGVF9jcHAuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19pNjRTdWJ0cmFjdCA9IGFzbVsiX2k2NFN1YnRyYWN0Il07CmFzbVsiX2k2NFN1YnRyYWN0Il0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9faTY0U3VidHJhY3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19tYWxsb2MgPSBhc21bIl9tYWxsb2MiXTsKYXNtWyJfbWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9fbWFsbG9jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cn0pOwp2YXIgcmVhbF9fX19nZXRUeXBlTmFtZSA9IGFzbVsiX19fZ2V0VHlwZU5hbWUiXTsKYXNtWyJfX19nZXRUeXBlTmFtZSJdID0gKGZ1bmN0aW9uKCkgewogYXNzZXJ0KHJ1bnRpbWVJbml0aWFsaXplZCwgInlvdSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBydW50aW1lIHRvIGJlIHJlYWR5IChlLmcuIHdhaXQgZm9yIG1haW4oKSB0byBiZSBjYWxsZWQpIik7CiBhc3NlcnQoIXJ1bnRpbWVFeGl0ZWQsICJ0aGUgcnVudGltZSB3YXMgZXhpdGVkICh1c2UgTk9fRVhJVF9SVU5USU1FIHRvIGtlZXAgaXQgYWxpdmUgYWZ0ZXIgbWFpbigpIGV4aXRzKSIpOwogcmV0dXJuIHJlYWxfX19fZ2V0VHlwZU5hbWUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19iaXRzaGlmdDY0THNociA9IGFzbVsiX2JpdHNoaWZ0NjRMc2hyIl07CmFzbVsiX2JpdHNoaWZ0NjRMc2hyIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9fYml0c2hpZnQ2NExzaHIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciByZWFsX19mcmVlID0gYXNtWyJfZnJlZSJdOwphc21bIl9mcmVlIl0gPSAoZnVuY3Rpb24oKSB7CiBhc3NlcnQocnVudGltZUluaXRpYWxpemVkLCAieW91IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJ1bnRpbWUgdG8gYmUgcmVhZHkgKGUuZy4gd2FpdCBmb3IgbWFpbigpIHRvIGJlIGNhbGxlZCkiKTsKIGFzc2VydCghcnVudGltZUV4aXRlZCwgInRoZSBydW50aW1lIHdhcyBleGl0ZWQgKHVzZSBOT19FWElUX1JVTlRJTUUgdG8ga2VlcCBpdCBhbGl2ZSBhZnRlciBtYWluKCkgZXhpdHMpIik7CiByZXR1cm4gcmVhbF9fZnJlZS5hcHBseShudWxsLCBhcmd1bWVudHMpOwp9KTsKdmFyIHJlYWxfX19HTE9CQUxfX3N1Yl9JX21heGlHcmFpbnNfY3BwID0gYXNtWyJfX0dMT0JBTF9fc3ViX0lfbWF4aUdyYWluc19jcHAiXTsKYXNtWyJfX0dMT0JBTF9fc3ViX0lfbWF4aUdyYWluc19jcHAiXSA9IChmdW5jdGlvbigpIHsKIGFzc2VydChydW50aW1lSW5pdGlhbGl6ZWQsICJ5b3UgbmVlZCB0byB3YWl0IGZvciB0aGUgcnVudGltZSB0byBiZSByZWFkeSAoZS5nLiB3YWl0IGZvciBtYWluKCkgdG8gYmUgY2FsbGVkKSIpOwogYXNzZXJ0KCFydW50aW1lRXhpdGVkLCAidGhlIHJ1bnRpbWUgd2FzIGV4aXRlZCAodXNlIE5PX0VYSVRfUlVOVElNRSB0byBrZWVwIGl0IGFsaXZlIGFmdGVyIG1haW4oKSBleGl0cykiKTsKIHJldHVybiByZWFsX19fR0xPQkFMX19zdWJfSV9tYXhpR3JhaW5zX2NwcC5hcHBseShudWxsLCBhcmd1bWVudHMpOwp9KTsKdmFyIHJlYWxfX19fZXJybm9fbG9jYXRpb24gPSBhc21bIl9fX2Vycm5vX2xvY2F0aW9uIl07CmFzbVsiX19fZXJybm9fbG9jYXRpb24iXSA9IChmdW5jdGlvbigpIHsKIGFzc2VydChydW50aW1lSW5pdGlhbGl6ZWQsICJ5b3UgbmVlZCB0byB3YWl0IGZvciB0aGUgcnVudGltZSB0byBiZSByZWFkeSAoZS5nLiB3YWl0IGZvciBtYWluKCkgdG8gYmUgY2FsbGVkKSIpOwogYXNzZXJ0KCFydW50aW1lRXhpdGVkLCAidGhlIHJ1bnRpbWUgd2FzIGV4aXRlZCAodXNlIE5PX0VYSVRfUlVOVElNRSB0byBrZWVwIGl0IGFsaXZlIGFmdGVyIG1haW4oKSBleGl0cykiKTsKIHJldHVybiByZWFsX19fX2Vycm5vX2xvY2F0aW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cn0pOwp2YXIgcmVhbF9fYml0c2hpZnQ2NFNobCA9IGFzbVsiX2JpdHNoaWZ0NjRTaGwiXTsKYXNtWyJfYml0c2hpZnQ2NFNobCJdID0gKGZ1bmN0aW9uKCkgewogYXNzZXJ0KHJ1bnRpbWVJbml0aWFsaXplZCwgInlvdSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBydW50aW1lIHRvIGJlIHJlYWR5IChlLmcuIHdhaXQgZm9yIG1haW4oKSB0byBiZSBjYWxsZWQpIik7CiBhc3NlcnQoIXJ1bnRpbWVFeGl0ZWQsICJ0aGUgcnVudGltZSB3YXMgZXhpdGVkICh1c2UgTk9fRVhJVF9SVU5USU1FIHRvIGtlZXAgaXQgYWxpdmUgYWZ0ZXIgbWFpbigpIGV4aXRzKSIpOwogcmV0dXJuIHJlYWxfX2JpdHNoaWZ0NjRTaGwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKfSk7CnZhciBfX0dMT0JBTF9fc3ViX0lfbWF4aV9lbXNjcl9uZXdfY3BwID0gTW9kdWxlWyJfX0dMT0JBTF9fc3ViX0lfbWF4aV9lbXNjcl9uZXdfY3BwIl0gPSBhc21bIl9fR0xPQkFMX19zdWJfSV9tYXhpX2Vtc2NyX25ld19jcHAiXTsKdmFyIF9fX2N4YV9jYW5fY2F0Y2ggPSBNb2R1bGVbIl9fX2N4YV9jYW5fY2F0Y2giXSA9IGFzbVsiX19fY3hhX2Nhbl9jYXRjaCJdOwp2YXIgX19HTE9CQUxfX3N1Yl9JX2JpbmRfY3BwID0gTW9kdWxlWyJfX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAiXSA9IGFzbVsiX19HTE9CQUxfX3N1Yl9JX2JpbmRfY3BwIl07CnZhciBfZmZsdXNoID0gTW9kdWxlWyJfZmZsdXNoIl0gPSBhc21bIl9mZmx1c2giXTsKdmFyIF9fR0xPQkFMX19zdWJfSV9tYXhpTUZDQ19jcHAgPSBNb2R1bGVbIl9fR0xPQkFMX19zdWJfSV9tYXhpTUZDQ19jcHAiXSA9IGFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlNRkNDX2NwcCJdOwp2YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IE1vZHVsZVsiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSJdID0gYXNtWyJfX19jeGFfaXNfcG9pbnRlcl90eXBlIl07CnZhciBfaTY0QWRkID0gTW9kdWxlWyJfaTY0QWRkIl0gPSBhc21bIl9pNjRBZGQiXTsKdmFyIF9tZW1tb3ZlID0gTW9kdWxlWyJfbWVtbW92ZSJdID0gYXNtWyJfbWVtbW92ZSJdOwp2YXIgX19HTE9CQUxfX3N1Yl9JX21heGlGRlRfY3BwID0gTW9kdWxlWyJfX0dMT0JBTF9fc3ViX0lfbWF4aUZGVF9jcHAiXSA9IGFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlGRlRfY3BwIl07CnZhciBfaTY0U3VidHJhY3QgPSBNb2R1bGVbIl9pNjRTdWJ0cmFjdCJdID0gYXNtWyJfaTY0U3VidHJhY3QiXTsKdmFyIF9tZW1zZXQgPSBNb2R1bGVbIl9tZW1zZXQiXSA9IGFzbVsiX21lbXNldCJdOwp2YXIgX21hbGxvYyA9IE1vZHVsZVsiX21hbGxvYyJdID0gYXNtWyJfbWFsbG9jIl07CnZhciBfbWVtY3B5ID0gTW9kdWxlWyJfbWVtY3B5Il0gPSBhc21bIl9tZW1jcHkiXTsKdmFyIF9fX2dldFR5cGVOYW1lID0gTW9kdWxlWyJfX19nZXRUeXBlTmFtZSJdID0gYXNtWyJfX19nZXRUeXBlTmFtZSJdOwp2YXIgcnVuUG9zdFNldHMgPSBNb2R1bGVbInJ1blBvc3RTZXRzIl0gPSBhc21bInJ1blBvc3RTZXRzIl07CnZhciBfYml0c2hpZnQ2NExzaHIgPSBNb2R1bGVbIl9iaXRzaGlmdDY0THNociJdID0gYXNtWyJfYml0c2hpZnQ2NExzaHIiXTsKdmFyIF9mcmVlID0gTW9kdWxlWyJfZnJlZSJdID0gYXNtWyJfZnJlZSJdOwp2YXIgX19HTE9CQUxfX3N1Yl9JX21heGlHcmFpbnNfY3BwID0gTW9kdWxlWyJfX0dMT0JBTF9fc3ViX0lfbWF4aUdyYWluc19jcHAiXSA9IGFzbVsiX19HTE9CQUxfX3N1Yl9JX21heGlHcmFpbnNfY3BwIl07CnZhciBfZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeSA9IE1vZHVsZVsiX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnkiXSA9IGFzbVsiX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnkiXTsKdmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gTW9kdWxlWyJfX19lcnJub19sb2NhdGlvbiJdID0gYXNtWyJfX19lcnJub19sb2NhdGlvbiJdOwp2YXIgX2JpdHNoaWZ0NjRTaGwgPSBNb2R1bGVbIl9iaXRzaGlmdDY0U2hsIl0gPSBhc21bIl9iaXRzaGlmdDY0U2hsIl07CnZhciBkeW5DYWxsX2RpZGRpZGQgPSBNb2R1bGVbImR5bkNhbGxfZGlkZGlkZCJdID0gYXNtWyJkeW5DYWxsX2RpZGRpZGQiXTsKdmFyIGR5bkNhbGxfZGlkZGkgPSBNb2R1bGVbImR5bkNhbGxfZGlkZGkiXSA9IGFzbVsiZHluQ2FsbF9kaWRkaSJdOwp2YXIgZHluQ2FsbF92aWlpaWlkZGkgPSBNb2R1bGVbImR5bkNhbGxfdmlpaWlpZGRpIl0gPSBhc21bImR5bkNhbGxfdmlpaWlpZGRpIl07CnZhciBkeW5DYWxsX3ZpZCA9IE1vZHVsZVsiZHluQ2FsbF92aWQiXSA9IGFzbVsiZHluQ2FsbF92aWQiXTsKdmFyIGR5bkNhbGxfZGlpZGlkaSA9IE1vZHVsZVsiZHluQ2FsbF9kaWlkaWRpIl0gPSBhc21bImR5bkNhbGxfZGlpZGlkaSJdOwp2YXIgZHluQ2FsbF92aSA9IE1vZHVsZVsiZHluQ2FsbF92aSJdID0gYXNtWyJkeW5DYWxsX3ZpIl07CnZhciBkeW5DYWxsX3ZpaSA9IE1vZHVsZVsiZHluQ2FsbF92aWkiXSA9IGFzbVsiZHluQ2FsbF92aWkiXTsKdmFyIGR5bkNhbGxfZGlpZGlkZGQgPSBNb2R1bGVbImR5bkNhbGxfZGlpZGlkZGQiXSA9IGFzbVsiZHluQ2FsbF9kaWlkaWRkZCJdOwp2YXIgZHluQ2FsbF9kaWRkZCA9IE1vZHVsZVsiZHluQ2FsbF9kaWRkZCJdID0gYXNtWyJkeW5DYWxsX2RpZGRkIl07CnZhciBkeW5DYWxsX3ZpaWlpZGRpID0gTW9kdWxlWyJkeW5DYWxsX3ZpaWlpZGRpIl0gPSBhc21bImR5bkNhbGxfdmlpaWlkZGkiXTsKdmFyIGR5bkNhbGxfaWkgPSBNb2R1bGVbImR5bkNhbGxfaWkiXSA9IGFzbVsiZHluQ2FsbF9paSJdOwp2YXIgZHluQ2FsbF92aWRpZGRkID0gTW9kdWxlWyJkeW5DYWxsX3ZpZGlkZGQiXSA9IGFzbVsiZHluQ2FsbF92aWRpZGRkIl07CnZhciBkeW5DYWxsX3ZpZGlkID0gTW9kdWxlWyJkeW5DYWxsX3ZpZGlkIl0gPSBhc21bImR5bkNhbGxfdmlkaWQiXTsKdmFyIGR5bkNhbGxfdmlpZGQgPSBNb2R1bGVbImR5bkNhbGxfdmlpZGQiXSA9IGFzbVsiZHluQ2FsbF92aWlkZCJdOwp2YXIgZHluQ2FsbF9kaWRkZGRkaWkgPSBNb2R1bGVbImR5bkNhbGxfZGlkZGRkZGlpIl0gPSBhc21bImR5bkNhbGxfZGlkZGRkZGlpIl07CnZhciBkeW5DYWxsX3ZpaWlpaSA9IE1vZHVsZVsiZHluQ2FsbF92aWlpaWkiXSA9IGFzbVsiZHluQ2FsbF92aWlpaWkiXTsKdmFyIGR5bkNhbGxfdmlkaWkgPSBNb2R1bGVbImR5bkNhbGxfdmlkaWkiXSA9IGFzbVsiZHluQ2FsbF92aWRpaSJdOwp2YXIgZHluQ2FsbF92aWRpZGQgPSBNb2R1bGVbImR5bkNhbGxfdmlkaWRkIl0gPSBhc21bImR5bkNhbGxfdmlkaWRkIl07CnZhciBkeW5DYWxsX2lpaWlpID0gTW9kdWxlWyJkeW5DYWxsX2lpaWlpIl0gPSBhc21bImR5bkNhbGxfaWlpaWkiXTsKdmFyIGR5bkNhbGxfZGlpZGRpZGQgPSBNb2R1bGVbImR5bkNhbGxfZGlpZGRpZGQiXSA9IGFzbVsiZHluQ2FsbF9kaWlkZGlkZCJdOwp2YXIgZHluQ2FsbF9kaWRkZGRkID0gTW9kdWxlWyJkeW5DYWxsX2RpZGRkZGQiXSA9IGFzbVsiZHluQ2FsbF9kaWRkZGRkIl07CnZhciBkeW5DYWxsX3ZpZGQgPSBNb2R1bGVbImR5bkNhbGxfdmlkZCJdID0gYXNtWyJkeW5DYWxsX3ZpZGQiXTsKdmFyIGR5bkNhbGxfaWlpaSA9IE1vZHVsZVsiZHluQ2FsbF9paWlpIl0gPSBhc21bImR5bkNhbGxfaWlpaSJdOwp2YXIgZHluQ2FsbF9kaWlkZGlkID0gTW9kdWxlWyJkeW5DYWxsX2RpaWRkaWQiXSA9IGFzbVsiZHluQ2FsbF9kaWlkZGlkIl07CnZhciBkeW5DYWxsX2RpZGlkZGQgPSBNb2R1bGVbImR5bkNhbGxfZGlkaWRkZCJdID0gYXNtWyJkeW5DYWxsX2RpZGlkZGQiXTsKdmFyIGR5bkNhbGxfZGRkZGRkID0gTW9kdWxlWyJkeW5DYWxsX2RkZGRkZCJdID0gYXNtWyJkeW5DYWxsX2RkZGRkZCJdOwp2YXIgZHluQ2FsbF92aWlpaWlpID0gTW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWkiXSA9IGFzbVsiZHluQ2FsbF92aWlpaWlpIl07CnZhciBkeW5DYWxsX2RpaWlpID0gTW9kdWxlWyJkeW5DYWxsX2RpaWlpIl0gPSBhc21bImR5bkNhbGxfZGlpaWkiXTsKdmFyIGR5bkNhbGxfdmlpaSA9IE1vZHVsZVsiZHluQ2FsbF92aWlpIl0gPSBhc21bImR5bkNhbGxfdmlpaSJdOwp2YXIgZHluQ2FsbF9kaSA9IE1vZHVsZVsiZHluQ2FsbF9kaSJdID0gYXNtWyJkeW5DYWxsX2RpIl07CnZhciBkeW5DYWxsX3ZpaWRpaSA9IE1vZHVsZVsiZHluQ2FsbF92aWlkaWkiXSA9IGFzbVsiZHluQ2FsbF92aWlkaWkiXTsKdmFyIGR5bkNhbGxfZGlpZGRkID0gTW9kdWxlWyJkeW5DYWxsX2RpaWRkZCJdID0gYXNtWyJkeW5DYWxsX2RpaWRkZCJdOwp2YXIgZHluQ2FsbF9paWQgPSBNb2R1bGVbImR5bkNhbGxfaWlkIl0gPSBhc21bImR5bkNhbGxfaWlkIl07CnZhciBkeW5DYWxsX2RpaWQgPSBNb2R1bGVbImR5bkNhbGxfZGlpZCJdID0gYXNtWyJkeW5DYWxsX2RpaWQiXTsKdmFyIGR5bkNhbGxfZGlpZGQgPSBNb2R1bGVbImR5bkNhbGxfZGlpZGQiXSA9IGFzbVsiZHluQ2FsbF9kaWlkZCJdOwp2YXIgZHluQ2FsbF9kZGRkID0gTW9kdWxlWyJkeW5DYWxsX2RkZGQiXSA9IGFzbVsiZHluQ2FsbF9kZGRkIl07CnZhciBkeW5DYWxsX2RpZGlkID0gTW9kdWxlWyJkeW5DYWxsX2RpZGlkIl0gPSBhc21bImR5bkNhbGxfZGlkaWQiXTsKdmFyIGR5bkNhbGxfdmlpZGlkZGQgPSBNb2R1bGVbImR5bkNhbGxfdmlpZGlkZGQiXSA9IGFzbVsiZHluQ2FsbF92aWlkaWRkZCJdOwp2YXIgZHluQ2FsbF9paWkgPSBNb2R1bGVbImR5bkNhbGxfaWlpIl0gPSBhc21bImR5bkNhbGxfaWlpIl07CnZhciBkeW5DYWxsX2RpaWRkaSA9IE1vZHVsZVsiZHluQ2FsbF9kaWlkZGkiXSA9IGFzbVsiZHluQ2FsbF9kaWlkZGkiXTsKdmFyIGR5bkNhbGxfZGlpZGRkZGQgPSBNb2R1bGVbImR5bkNhbGxfZGlpZGRkZGQiXSA9IGFzbVsiZHluQ2FsbF9kaWlkZGRkZCJdOwp2YXIgZHluQ2FsbF9kaWlpID0gTW9kdWxlWyJkeW5DYWxsX2RpaWkiXSA9IGFzbVsiZHluQ2FsbF9kaWlpIl07CnZhciBkeW5DYWxsX2RpaWRkZGlpID0gTW9kdWxlWyJkeW5DYWxsX2RpaWRkZGlpIl0gPSBhc21bImR5bkNhbGxfZGlpZGRkaWkiXTsKdmFyIGR5bkNhbGxfZGlkZCA9IE1vZHVsZVsiZHluQ2FsbF9kaWRkIl0gPSBhc21bImR5bkNhbGxfZGlkZCJdOwp2YXIgZHluQ2FsbF9kaWlkZGRkZGlpID0gTW9kdWxlWyJkeW5DYWxsX2RpaWRkZGRkaWkiXSA9IGFzbVsiZHluQ2FsbF9kaWlkZGRkZGlpIl07CnZhciBkeW5DYWxsX2RpZGRkaWQgPSBNb2R1bGVbImR5bkNhbGxfZGlkZGRpZCJdID0gYXNtWyJkeW5DYWxsX2RpZGRkaWQiXTsKdmFyIGR5bkNhbGxfZGlpID0gTW9kdWxlWyJkeW5DYWxsX2RpaSJdID0gYXNtWyJkeW5DYWxsX2RpaSJdOwp2YXIgZHluQ2FsbF9kaWQgPSBNb2R1bGVbImR5bkNhbGxfZGlkIl0gPSBhc21bImR5bkNhbGxfZGlkIl07CnZhciBkeW5DYWxsX2kgPSBNb2R1bGVbImR5bkNhbGxfaSJdID0gYXNtWyJkeW5DYWxsX2kiXTsKdmFyIGR5bkNhbGxfZGlkaSA9IE1vZHVsZVsiZHluQ2FsbF9kaWRpIl0gPSBhc21bImR5bkNhbGxfZGlkaSJdOwp2YXIgZHluQ2FsbF9kaWlkZGRpZCA9IE1vZHVsZVsiZHluQ2FsbF9kaWlkZGRpZCJdID0gYXNtWyJkeW5DYWxsX2RpaWRkZGlkIl07CnZhciBkeW5DYWxsX2RpaWRpID0gTW9kdWxlWyJkeW5DYWxsX2RpaWRpIl0gPSBhc21bImR5bkNhbGxfZGlpZGkiXTsKdmFyIGR5bkNhbGxfaWlpZCA9IE1vZHVsZVsiZHluQ2FsbF9paWlkIl0gPSBhc21bImR5bkNhbGxfaWlpZCJdOwp2YXIgZHluQ2FsbF9kaWRkaWQgPSBNb2R1bGVbImR5bkNhbGxfZGlkZGlkIl0gPSBhc21bImR5bkNhbGxfZGlkZGlkIl07CnZhciBkeW5DYWxsX2RpaWRpZCA9IE1vZHVsZVsiZHluQ2FsbF9kaWlkaWQiXSA9IGFzbVsiZHluQ2FsbF9kaWlkaWQiXTsKdmFyIGR5bkNhbGxfdmlpaWQgPSBNb2R1bGVbImR5bkNhbGxfdmlpaWQiXSA9IGFzbVsiZHluQ2FsbF92aWlpZCJdOwp2YXIgZHluQ2FsbF92aWlkaWQgPSBNb2R1bGVbImR5bkNhbGxfdmlpZGlkIl0gPSBhc21bImR5bkNhbGxfdmlpZGlkIl07CnZhciBkeW5DYWxsX2RpZGRkaWkgPSBNb2R1bGVbImR5bkNhbGxfZGlkZGRpaSJdID0gYXNtWyJkeW5DYWxsX2RpZGRkaWkiXTsKdmFyIGR5bkNhbGxfdiA9IE1vZHVsZVsiZHluQ2FsbF92Il0gPSBhc21bImR5bkNhbGxfdiJdOwp2YXIgZHluQ2FsbF92aWlkID0gTW9kdWxlWyJkeW5DYWxsX3ZpaWQiXSA9IGFzbVsiZHluQ2FsbF92aWlkIl07CnZhciBkeW5DYWxsX3ZpaWRpZGQgPSBNb2R1bGVbImR5bkNhbGxfdmlpZGlkZCJdID0gYXNtWyJkeW5DYWxsX3ZpaWRpZGQiXTsKdmFyIGR5bkNhbGxfZGlkaWRpID0gTW9kdWxlWyJkeW5DYWxsX2RpZGlkaSJdID0gYXNtWyJkeW5DYWxsX2RpZGlkaSJdOwp2YXIgZHluQ2FsbF9paWlpZCA9IE1vZHVsZVsiZHluQ2FsbF9paWlpZCJdID0gYXNtWyJkeW5DYWxsX2lpaWlkIl07CnZhciBkeW5DYWxsX3ZpaWlpID0gTW9kdWxlWyJkeW5DYWxsX3ZpaWlpIl0gPSBhc21bImR5bkNhbGxfdmlpaWkiXTsKUnVudGltZS5zdGFja0FsbG9jID0gYXNtWyJzdGFja0FsbG9jIl07ClJ1bnRpbWUuc3RhY2tTYXZlID0gYXNtWyJzdGFja1NhdmUiXTsKUnVudGltZS5zdGFja1Jlc3RvcmUgPSBhc21bInN0YWNrUmVzdG9yZSJdOwpSdW50aW1lLmVzdGFibGlzaFN0YWNrU3BhY2UgPSBhc21bImVzdGFibGlzaFN0YWNrU3BhY2UiXTsKUnVudGltZS5zZXRUZW1wUmV0MCA9IGFzbVsic2V0VGVtcFJldDAiXTsKUnVudGltZS5nZXRUZW1wUmV0MCA9IGFzbVsiZ2V0VGVtcFJldDAiXTsKZnVuY3Rpb24gRXhpdFN0YXR1cyhzdGF0dXMpIHsKIHRoaXMubmFtZSA9ICJFeGl0U3RhdHVzIjsKIHRoaXMubWVzc2FnZSA9ICJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIgKyBzdGF0dXMgKyAiKSI7CiB0aGlzLnN0YXR1cyA9IHN0YXR1czsKfQpFeGl0U3RhdHVzLnByb3RvdHlwZSA9IG5ldyBFcnJvcjsKRXhpdFN0YXR1cy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFeGl0U3RhdHVzOwp2YXIgaW5pdGlhbFN0YWNrVG9wOwp2YXIgcHJlbG9hZFN0YXJ0VGltZSA9IG51bGw7CnZhciBjYWxsZWRNYWluID0gZmFsc2U7CmRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IGZ1bmN0aW9uIHJ1bkNhbGxlcigpIHsKIGlmICghTW9kdWxlWyJjYWxsZWRSdW4iXSkgcnVuKCk7CiBpZiAoIU1vZHVsZVsiY2FsbGVkUnVuIl0pIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bkNhbGxlcjsKfTsKTW9kdWxlWyJjYWxsTWFpbiJdID0gTW9kdWxlLmNhbGxNYWluID0gZnVuY3Rpb24gY2FsbE1haW4oYXJncykgewogYXNzZXJ0KHJ1bkRlcGVuZGVuY2llcyA9PSAwLCAiY2Fubm90IGNhbGwgbWFpbiB3aGVuIGFzeW5jIGRlcGVuZGVuY2llcyByZW1haW4hIChsaXN0ZW4gb24gX19BVE1BSU5fXykiKTsKIGFzc2VydChfX0FUUFJFUlVOX18ubGVuZ3RoID09IDAsICJjYW5ub3QgY2FsbCBtYWluIHdoZW4gcHJlUnVuIGZ1bmN0aW9ucyByZW1haW4gdG8gYmUgY2FsbGVkIik7CiBhcmdzID0gYXJncyB8fCBbXTsKIGVuc3VyZUluaXRSdW50aW1lKCk7CiB2YXIgYXJnYyA9IGFyZ3MubGVuZ3RoICsgMTsKIGZ1bmN0aW9uIHBhZCgpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IDQgLSAxOyBpKyspIHsKICAgYXJndi5wdXNoKDApOwogIH0KIH0KIHZhciBhcmd2ID0gWyBhbGxvY2F0ZShpbnRBcnJheUZyb21TdHJpbmcoTW9kdWxlWyJ0aGlzUHJvZ3JhbSJdKSwgImk4IiwgQUxMT0NfTk9STUFMKSBdOwogcGFkKCk7CiBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ2MgLSAxOyBpID0gaSArIDEpIHsKICBhcmd2LnB1c2goYWxsb2NhdGUoaW50QXJyYXlGcm9tU3RyaW5nKGFyZ3NbaV0pLCAiaTgiLCBBTExPQ19OT1JNQUwpKTsKICBwYWQoKTsKIH0KIGFyZ3YucHVzaCgwKTsKIGFyZ3YgPSBhbGxvY2F0ZShhcmd2LCAiaTMyIiwgQUxMT0NfTk9STUFMKTsKIHRyeSB7CiAgdmFyIHJldCA9IE1vZHVsZVsiX21haW4iXShhcmdjLCBhcmd2LCAwKTsKICBleGl0KHJldCwgdHJ1ZSk7CiB9IGNhdGNoIChlKSB7CiAgaWYgKGUgaW5zdGFuY2VvZiBFeGl0U3RhdHVzKSB7CiAgIHJldHVybjsKICB9IGVsc2UgaWYgKGUgPT0gIlNpbXVsYXRlSW5maW5pdGVMb29wIikgewogICBNb2R1bGVbIm5vRXhpdFJ1bnRpbWUiXSA9IHRydWU7CiAgIHJldHVybjsKICB9IGVsc2UgewogICBpZiAoZSAmJiB0eXBlb2YgZSA9PT0gIm9iamVjdCIgJiYgZS5zdGFjaykgTW9kdWxlLnByaW50RXJyKCJleGNlcHRpb24gdGhyb3duOiAiICsgWyBlLCBlLnN0YWNrIF0pOwogICB0aHJvdyBlOwogIH0KIH0gZmluYWxseSB7CiAgY2FsbGVkTWFpbiA9IHRydWU7CiB9Cn07CmZ1bmN0aW9uIHJ1bihhcmdzKSB7CiBhcmdzID0gYXJncyB8fCBNb2R1bGVbImFyZ3VtZW50cyJdOwogaWYgKHByZWxvYWRTdGFydFRpbWUgPT09IG51bGwpIHByZWxvYWRTdGFydFRpbWUgPSBEYXRlLm5vdygpOwogaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHsKICBNb2R1bGUucHJpbnRFcnIoInJ1bigpIGNhbGxlZCwgYnV0IGRlcGVuZGVuY2llcyByZW1haW4sIHNvIG5vdCBydW5uaW5nIik7CiAgcmV0dXJuOwogfQogcHJlUnVuKCk7CiBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkgcmV0dXJuOwogaWYgKE1vZHVsZVsiY2FsbGVkUnVuIl0pIHJldHVybjsKIGZ1bmN0aW9uIGRvUnVuKCkgewogIGlmIChNb2R1bGVbImNhbGxlZFJ1biJdKSByZXR1cm47CiAgTW9kdWxlWyJjYWxsZWRSdW4iXSA9IHRydWU7CiAgaWYgKEFCT1JUKSByZXR1cm47CiAgZW5zdXJlSW5pdFJ1bnRpbWUoKTsKICBwcmVNYWluKCk7CiAgaWYgKEVOVklST05NRU5UX0lTX1dFQiAmJiBwcmVsb2FkU3RhcnRUaW1lICE9PSBudWxsKSB7CiAgIE1vZHVsZS5wcmludEVycigicHJlLW1haW4gcHJlcCB0aW1lOiAiICsgKERhdGUubm93KCkgLSBwcmVsb2FkU3RhcnRUaW1lKSArICIgbXMiKTsKICB9CiAgaWYgKE1vZHVsZVsib25SdW50aW1lSW5pdGlhbGl6ZWQiXSkgTW9kdWxlWyJvblJ1bnRpbWVJbml0aWFsaXplZCJdKCk7CiAgaWYgKE1vZHVsZVsiX21haW4iXSAmJiBzaG91bGRSdW5Ob3cpIE1vZHVsZVsiY2FsbE1haW4iXShhcmdzKTsKICBwb3N0UnVuKCk7CiB9CiBpZiAoTW9kdWxlWyJzZXRTdGF0dXMiXSkgewogIE1vZHVsZVsic2V0U3RhdHVzIl0oIlJ1bm5pbmcuLi4iKTsKICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICBNb2R1bGVbInNldFN0YXR1cyJdKCIiKTsKICAgfSksIDEpOwogICBkb1J1bigpOwogIH0pLCAxKTsKIH0gZWxzZSB7CiAgZG9SdW4oKTsKIH0KfQpNb2R1bGVbInJ1biJdID0gTW9kdWxlLnJ1biA9IHJ1bjsKZnVuY3Rpb24gZXhpdChzdGF0dXMsIGltcGxpY2l0KSB7CiBpZiAoaW1wbGljaXQgJiYgTW9kdWxlWyJub0V4aXRSdW50aW1lIl0pIHsKICBNb2R1bGUucHJpbnRFcnIoImV4aXQoIiArIHN0YXR1cyArICIpIGltcGxpY2l0bHkgY2FsbGVkIGJ5IGVuZCBvZiBtYWluKCksIGJ1dCBub0V4aXRSdW50aW1lLCBzbyBub3QgZXhpdGluZyB0aGUgcnVudGltZSAoeW91IGNhbiB1c2UgZW1zY3JpcHRlbl9mb3JjZV9leGl0LCBpZiB5b3Ugd2FudCB0byBmb3JjZSBhIHRydWUgc2h1dGRvd24pIik7CiAgcmV0dXJuOwogfQogaWYgKE1vZHVsZVsibm9FeGl0UnVudGltZSJdKSB7CiAgTW9kdWxlLnByaW50RXJyKCJleGl0KCIgKyBzdGF0dXMgKyAiKSBjYWxsZWQsIGJ1dCBub0V4aXRSdW50aW1lLCBzbyBoYWx0aW5nIGV4ZWN1dGlvbiBidXQgbm90IGV4aXRpbmcgdGhlIHJ1bnRpbWUgb3IgcHJldmVudGluZyBmdXJ0aGVyIGFzeW5jIGV4ZWN1dGlvbiAoeW91IGNhbiB1c2UgZW1zY3JpcHRlbl9mb3JjZV9leGl0LCBpZiB5b3Ugd2FudCB0byBmb3JjZSBhIHRydWUgc2h1dGRvd24pIik7CiB9IGVsc2UgewogIEFCT1JUID0gdHJ1ZTsKICBFWElUU1RBVFVTID0gc3RhdHVzOwogIFNUQUNLVE9QID0gaW5pdGlhbFN0YWNrVG9wOwogIGV4aXRSdW50aW1lKCk7CiAgaWYgKE1vZHVsZVsib25FeGl0Il0pIE1vZHVsZVsib25FeGl0Il0oc3RhdHVzKTsKIH0KIGlmIChFTlZJUk9OTUVOVF9JU19OT0RFKSB7CiAgcHJvY2Vzc1sic3Rkb3V0Il1bIm9uY2UiXSgiZHJhaW4iLCAoZnVuY3Rpb24oKSB7CiAgIHByb2Nlc3NbImV4aXQiXShzdGF0dXMpOwogIH0pKTsKICBjb25zb2xlLmxvZygiICIpOwogIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICBwcm9jZXNzWyJleGl0Il0oc3RhdHVzKTsKICB9KSwgNTAwKTsKIH0gZWxzZSBpZiAoRU5WSVJPTk1FTlRfSVNfU0hFTEwgJiYgdHlwZW9mIHF1aXQgPT09ICJmdW5jdGlvbiIpIHsKICBxdWl0KHN0YXR1cyk7CiB9CiB0aHJvdyBuZXcgRXhpdFN0YXR1cyhzdGF0dXMpOwp9Ck1vZHVsZVsiZXhpdCJdID0gTW9kdWxlLmV4aXQgPSBleGl0Owp2YXIgYWJvcnREZWNvcmF0b3JzID0gW107CmZ1bmN0aW9uIGFib3J0KHdoYXQpIHsKIGlmICh3aGF0ICE9PSB1bmRlZmluZWQpIHsKICBNb2R1bGUucHJpbnQod2hhdCk7CiAgTW9kdWxlLnByaW50RXJyKHdoYXQpOwogIHdoYXQgPSBKU09OLnN0cmluZ2lmeSh3aGF0KTsKIH0gZWxzZSB7CiAgd2hhdCA9ICIiOwogfQogQUJPUlQgPSB0cnVlOwogRVhJVFNUQVRVUyA9IDE7CiB2YXIgZXh0cmEgPSAiIjsKIHZhciBvdXRwdXQgPSAiYWJvcnQoIiArIHdoYXQgKyAiKSBhdCAiICsgc3RhY2tUcmFjZSgpICsgZXh0cmE7CiBpZiAoYWJvcnREZWNvcmF0b3JzKSB7CiAgYWJvcnREZWNvcmF0b3JzLmZvckVhY2goKGZ1bmN0aW9uKGRlY29yYXRvcikgewogICBvdXRwdXQgPSBkZWNvcmF0b3Iob3V0cHV0LCB3aGF0KTsKICB9KSk7CiB9CiB0aHJvdyBvdXRwdXQ7Cn0KTW9kdWxlWyJhYm9ydCJdID0gTW9kdWxlLmFib3J0ID0gYWJvcnQ7CmlmIChNb2R1bGVbInByZUluaXQiXSkgewogaWYgKHR5cGVvZiBNb2R1bGVbInByZUluaXQiXSA9PSAiZnVuY3Rpb24iKSBNb2R1bGVbInByZUluaXQiXSA9IFsgTW9kdWxlWyJwcmVJbml0Il0gXTsKIHdoaWxlIChNb2R1bGVbInByZUluaXQiXS5sZW5ndGggPiAwKSB7CiAgTW9kdWxlWyJwcmVJbml0Il0ucG9wKCkoKTsKIH0KfQp2YXIgc2hvdWxkUnVuTm93ID0gdHJ1ZTsKaWYgKE1vZHVsZVsibm9Jbml0aWFsUnVuIl0pIHsKIHNob3VsZFJ1bk5vdyA9IGZhbHNlOwp9CnJ1bigpOwp2YXIgbWF4aW1KcyA9IHt9OwptYXhpbUpzLm1heGlTZXR0aW5ncyA9IE1vZHVsZS5tYXhpU2V0dGluZ3M7Cm1heGltSnMubWF4aU9zYyA9IE1vZHVsZS5tYXhpT3NjOwptYXhpbUpzLm1heGlFbnZlbG9wZSA9IE1vZHVsZS5tYXhpRW52ZWxvcGU7Cm1heGltSnMubWF4aURlbGF5bGluZSA9IE1vZHVsZS5tYXhpRGVsYXlsaW5lOwptYXhpbUpzLm1heGlGaWx0ZXIgPSBNb2R1bGUubWF4aUZpbHRlcjsKbWF4aW1Kcy5tYXhpTWl4ID0gTW9kdWxlLm1heGlNaXg7Cm1heGltSnMubWF4aUxhZ0V4cCA9IE1vZHVsZS5tYXhpTGFnRXhwOwptYXhpbUpzLm1heGlTYW1wbGUgPSBNb2R1bGUubWF4aVNhbXBsZTsKbWF4aW1Kcy5tYXhpTWFwID0gTW9kdWxlLm1heGlNYXA7Cm1heGltSnMubWF4aUR5biA9IE1vZHVsZS5tYXhpRHluOwptYXhpbUpzLm1heGlFbnYgPSBNb2R1bGUubWF4aUVudjsKbWF4aW1Kcy5jb252ZXJ0ID0gTW9kdWxlLmNvbnZlcnQ7Cm1heGltSnMubWF4aURpc3RvcnRpb24gPSBNb2R1bGUubWF4aURpc3RvcnRpb247Cm1heGltSnMubWF4aUZsYW5nZXIgPSBNb2R1bGUubWF4aUZsYW5nZXI7Cm1heGltSnMubWF4aUNob3J1cyA9IE1vZHVsZS5tYXhpQ2hvcnVzOwptYXhpbUpzLm1heGlEQ0Jsb2NrZXIgPSBNb2R1bGUubWF4aURDQmxvY2tlcjsKbWF4aW1Kcy5tYXhpU1ZGID0gTW9kdWxlLm1heGlTVkY7Cm1heGltSnMubWF4aUVudmVsb3BlRm9sbG93ZXIgPSBNb2R1bGUubWF4aUVudmVsb3BlRm9sbG93ZXI7Cm1heGltSnMubWF4aUtpY2sgPSBNb2R1bGUubWF4aUtpY2s7Cm1heGltSnMubWF4aVNuYXJlID0gTW9kdWxlLm1heGlTbmFyZTsKbWF4aW1Kcy5tYXhpSGF0cyA9IE1vZHVsZS5tYXhpSGF0czsKbWF4aW1Kcy5tYXhpQ2xvY2sgPSBNb2R1bGUubWF4aUNsb2NrOwptYXhpbUpzLm1heGlGRlQgPSBNb2R1bGUubWF4aUZGVDsKbWF4aW1Kcy5tYXhpSUZGVCA9IE1vZHVsZS5tYXhpSUZGVDsKbWF4aW1Kcy5tYXhpTUZDQyA9IE1vZHVsZS5tYXhpTUZDQzsKbWF4aW1Kcy5tYXhpRkZUT2N0YXZlQW5hbHl6ZXIgPSBNb2R1bGUubWF4aUZGVE9jdGF2ZUFuYWx5emVyOwptYXhpbUpzLm1heGlUaW1lc3RyZXRjaCA9IE1vZHVsZS5tYXhpVGltZXN0cmV0Y2g7Cm1heGltSnMubWF4aVBpdGNoU2hpZnQgPSBNb2R1bGUubWF4aVBpdGNoU2hpZnQ7Cm1heGltSnMubWF4aVBpdGNoU3RyZXRjaCA9IE1vZHVsZS5tYXhpUGl0Y2hTdHJldGNoOwptYXhpbUpzLm1heGlBcnJheSA9IGZ1bmN0aW9uIG1heGlBcnJheSgpIHsKIHRoaXMubGVuZ3RoID0gMDsKIHZhciB2ZWMgPSBuZXcgTW9kdWxlLlZlY3RvckRvdWJsZTsKfTsKbWF4aW1Kcy5tYXhpQXJyYXkucHJvdG90eXBlLmFzVmVjdG9yID0gKGZ1bmN0aW9uKGFycmF5SW4pIHsKIHJldHVybiB0aGlzLnZlYzsKfSk7Cm1heGltSnMubWF4aUFycmF5LnByb3RvdHlwZS5hc0pzQXJyYXkgPSAoZnVuY3Rpb24oYXJyYXlJbikgewogdmFyIGFycmF5T3V0ID0gW107CiBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICBhcnJheS5wdXNoKHRoaXMudmVjLmdldChpKSk7CiB9CiByZXR1cm4gYXJyYXlPdXQ7Cn0pOwptYXhpbUpzLm1heGlBcnJheS5wcm90b3R5cGUuc2V0ID0gKGZ1bmN0aW9uKGFycmF5SW4pIHsKIHRoaXMuY2xlYXIoKTsKIHRoaXMudmVjID0gR2V0QXJyYXlBc1ZlY3RvckRibChhcnJheUluKTsKIHRoaXMubGVuZ3RoID0gdGhpcy52ZWMuc2l6ZSgpOwogdGhpcy5TZXRTcUJyYWNrZXRzKHRydWUpOwp9KTsKbWF4aW1Kcy5tYXhpQXJyYXkucHJvdG90eXBlLnB1c2ggPSAoZnVuY3Rpb24obnVtKSB7CiB0aGlzLnZlYy5wdXNoX2JhY2sobnVtKTsKIHRoaXNbdGhpcy5sZW5ndGhdID0gbnVtOwogdGhpcy5sZW5ndGgrKzsKfSk7Cm1heGltSnMubWF4aUFycmF5LnByb3RvdHlwZS5TZXRTcUJyYWNrZXRzID0gKGZ1bmN0aW9uKHVzZVNxKSB7CiBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICBpZiAodXNlU3EpIHsKICAgdGhpc1tpXSA9IHRoaXMudmVjLmdldChpKTsKICB9IGVsc2UgewogICBkZWxldGUgdGhpc1tpXTsKICB9CiB9Cn0pOwptYXhpbUpzLm1heGlBcnJheS5wcm90b3R5cGUuY2xlYXIgPSAoZnVuY3Rpb24odXNlU3EpIHsKIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogIGRlbGV0ZSB0aGlzW2ldOwogfQogTW9kdWxlLnZlY3RvclRvb2xzLmNsZWFyVmVjdG9yRGJsKHRoaXMudmVjKTsKIHRoaXMubGVuZ3RoID0gMDsKfSk7Cm1heGltSnMubWF4aVRvb2xzID0gKGZ1bmN0aW9uKCkge30pOwptYXhpbUpzLm1heGlUb29scy5nZXRBcnJheUFzVmVjdG9yRGJsID0gKGZ1bmN0aW9uKGFycmF5SW4pIHsKIHZhciB2ZWNPdXQgPSBuZXcgTW9kdWxlLlZlY3RvckRvdWJsZTsKIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlJbi5sZW5ndGg7IGkrKykgewogIHZlY091dC5wdXNoX2JhY2soYXJyYXlJbltpXSk7CiB9CiByZXR1cm4gdmVjT3V0Owp9KTsKbWF4aW1Kcy5tYXhpVG9vbHMuZ2V0QmFzZTY0ID0gKGZ1bmN0aW9uKHN0cikgewogaWYgKHN0ci5pbmRleE9mKCI7YmFzZTY0LCIpICE9IC0xKSB7CiAgdmFyIGRhdGFTdGFydCA9IHN0ci5pbmRleE9mKCI7YmFzZTY0LCIpICsgODsKICByZXR1cm4gc3RyLnNsaWNlKGRhdGFTdGFydCkubWF0Y2goL14oW0EtWmEtejAtOStcL117NH0pKihbQS1aYS16MC05K1wvXXs0fXxbQS1aYS16MC05K1wvXXszfT18W0EtWmEtejAtOStcL117Mn09PSkkLykgPyBzdHIuc2xpY2UoZGF0YVN0YXJ0KSA6IGZhbHNlOwogfSBlbHNlIHJldHVybiBmYWxzZTsKfSk7Cm1heGltSnMubWF4aVRvb2xzLl9rZXlTdHIgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOwptYXhpbUpzLm1heGlUb29scy5yZW1vdmVQYWRkaW5nRnJvbUJhc2U2NCA9IChmdW5jdGlvbihpbnB1dCkgewogdmFyIGxrZXkgPSBtYXhpbUpzLm1heGlUb29scy5fa2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGlucHV0Lmxlbmd0aCAtIDEpKTsKIGlmIChsa2V5ID09IDY0KSB7CiAgcmV0dXJuIGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSAxKTsKIH0KIHJldHVybiBpbnB1dDsKfSk7Cm1heGltSnMubWF4aUF1ZGlvID0gKGZ1bmN0aW9uKCkgewogdGhpcy5udW1DaGFubmVscyA9IDI7CiB0aGlzLm91dHB1dCA9IDA7CiB0aGlzLmNvbnRleHQgPSBudWxsOwogdGhpcy5zb3VyY2UgPSBudWxsOwogdGhpcy5hbmFseXNlciA9IG51bGw7CiB0aGlzLmpzUHJvY2Vzc29yID0gbnVsbDsKIHRoaXMuYnVmZmVyU2l6ZSA9IDEwMjQ7CiB0aGlzLmluaXREb25lID0gZmFsc2U7Cn0pOwptYXhpbUpzLm1heGlBdWRpby5wbGF5ID0gKGZ1bmN0aW9uKCkge30pOwptYXhpbUpzLm1heGlBdWRpby5zZXR1cCA9IChmdW5jdGlvbigpIHsKIGNvbnNvbGUubG9nKCJub24tb3ZlcnJpZGVkIHNldHVwIik7Cn0pOwptYXhpbUpzLm1heGlBdWRpby5wcm90b3R5cGUuZ2V0TnVtQ2hhbm5lbHMgPSAoZnVuY3Rpb24oKSB7CiByZXR1cm4gdGhpcy5udW1DaGFubmVsczsKfSk7Cm1heGltSnMubWF4aUF1ZGlvLnByb3RvdHlwZS5zZXROdW1DaGFubmVscyA9IChmdW5jdGlvbihpc0FycmF5LCBudW1DaGFubmVsc18pIHsKIHRoaXMubnVtQ2hhbm5lbHMgPSBudW1DaGFubmVsc187CiB0aGlzLm91dHB1dElzQXJyYXkoaXNBcnJheSwgbnVtQ2hhbm5lbHNfKTsKIHRoaXMucmVzZXRBdWRpbygpOwp9KTsKbWF4aW1Kcy5tYXhpQXVkaW8ucHJvdG90eXBlLnNldEJ1ZmZlclNpemUgPSAoZnVuY3Rpb24obmV3QnVmZmVyU2l6ZSkgewogdGhpcy5idWZmZXJTaXplID0gbmV3QnVmZmVyU2l6ZTsKIHRoaXMucmVzZXRBdWRpbygpOwp9KTsKbWF4aW1Kcy5tYXhpQXVkaW8ucHJvdG90eXBlLm91dHB1dElzQXJyYXkgPSAoZnVuY3Rpb24oaXNBcnJheSkgewogaWYgKGlzQXJyYXkpIHsKICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheSh0aGlzLm51bUNoYW5uZWxzKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtQ2hhbm5lbHM7IGkrKykgewogICB0aGlzLm91dHB1dFtpXSA9IDA7CiAgfQogfSBlbHNlIHsKICB0aGlzLm91dHB1dCA9IDA7CiB9Cn0pOwptYXhpbUpzLm1heGlBdWRpby5wcm90b3R5cGUuaW5pdCA9IChmdW5jdGlvbigpIHsKIHRoaXMuY29udGV4dCA9IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KTsKIHRoaXMuc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwogdGhpcy5qc1Byb2Nlc3NvciA9IHRoaXMuY29udGV4dC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IodGhpcy5idWZmZXJTaXplLCB0aGlzLm51bUNoYW5uZWxzLCB0aGlzLm51bUNoYW5uZWxzKTsKIHRoaXMuanNQcm9jZXNzb3Iub25hdWRpb3Byb2Nlc3MgPSAoZnVuY3Rpb24oZXZlbnQpIHsKICB2YXIgbnVtQ2hhbm5lbHMgPSBldmVudC5vdXRwdXRCdWZmZXIubnVtYmVyT2ZDaGFubmVsczsKICB2YXIgb3V0cHV0TGVuZ3RoID0gZXZlbnQub3V0cHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApLmxlbmd0aDsKICBmb3IgKHZhciBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgKytpKSB7CiAgIHRoaXMucGxheSgpOwogICBpZiAodGhpcy5vdXRwdXQgaW5zdGFuY2VvZiBBcnJheSkgewogICAgZm9yICh2YXIgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgY2hhbm5lbCsrKSB7CiAgICAgZXZlbnQub3V0cHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpW2ldID0gdGhpcy5vdXRwdXRbY2hhbm5lbF07CiAgICB9CiAgIH0gZWxzZSB7CiAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG51bUNoYW5uZWxzOyBjaGFubmVsKyspIHsKICAgICBldmVudC5vdXRwdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbClbaV0gPSB0aGlzLm91dHB1dDsKICAgIH0KICAgfQogIH0KIH0pLmJpbmQodGhpcyk7CiB0aGlzLmFuYWx5c2VyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7CiB0aGlzLmFuYWx5c2VyLmZmdFNpemUgPSAyMDQ4OwogdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmpzUHJvY2Vzc29yKTsKIHRoaXMuanNQcm9jZXNzb3IuY29ubmVjdCh0aGlzLmFuYWx5c2VyKTsKIHRoaXMuYW5hbHlzZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pOwogdGhpcy5pbml0RG9uZSA9IHRydWU7Cn0pOwptYXhpbUpzLm1heGlBdWRpby5wcm90b3R5cGUucmVzZXRBdWRpbyA9IChmdW5jdGlvbigpIHsKIGlmICh0aGlzLmluaXREb25lKSB7CiAgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCgpOwogIHRoaXMuanNQcm9jZXNzb3IuZGlzY29ubmVjdCgpOwogIHRoaXMuYW5hbHlzZXIuZGlzY29ubmVjdCgpOwogfQogdGhpcy5pbml0KCk7Cn0pOwptYXhpbUpzLm1heGlBdWRpby5wcm90b3R5cGUubG9hZFNhbXBsZSA9IChmdW5jdGlvbih1cmwsIHNhbXBsZVBsYXllciwgY29udGV4dEluKSB7CiB2YXIgZGF0YSA9IFtdOwogdmFyIGNvbnRleHQ7CiBpZiAoIWNvbnRleHRJbikgewogIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CiB9IGVsc2UgewogIGNvbnRleHQgPSBjb250ZXh0SW47CiB9CiBzYW1wbGVQbGF5ZXIuY2xlYXIoKTsKIHZhciBiNjQgPSBtYXhpbUpzLm1heGlUb29scy5nZXRCYXNlNjQodXJsKTsKIGlmIChiNjQpIHsKICB2YXIgYWJfYnl0ZXMgPSBiNjQubGVuZ3RoIC8gNCAqIDM7CiAgdmFyIGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGFiX2J5dGVzKTsKICBiNjQgPSBtYXhpbUpzLm1heGlUb29scy5yZW1vdmVQYWRkaW5nRnJvbUJhc2U2NChtYXhpbUpzLm1heGlUb29scy5yZW1vdmVQYWRkaW5nRnJvbUJhc2U2NChiNjQpKTsKICB2YXIgYnl0ZXMgPSBwYXJzZUludChiNjQubGVuZ3RoIC8gNCAqIDMsIDEwKTsKICB2YXIgdWFycmF5OwogIHZhciBjaHIxLCBjaHIyLCBjaHIzOwogIHZhciBlbmMxLCBlbmMyLCBlbmMzLCBlbmM0OwogIHZhciBpID0gMDsKICB2YXIgaiA9IDA7CiAgdWFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpOwogIGI2NCA9IGI2NC5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywgIiIpOwogIGZvciAoaSA9IDA7IGkgPCBieXRlczsgaSArPSAzKSB7CiAgIGVuYzEgPSBtYXhpbUpzLm1heGlUb29scy5fa2V5U3RyLmluZGV4T2YoYjY0LmNoYXJBdChqKyspKTsKICAgZW5jMiA9IG1heGltSnMubWF4aVRvb2xzLl9rZXlTdHIuaW5kZXhPZihiNjQuY2hhckF0KGorKykpOwogICBlbmMzID0gbWF4aW1Kcy5tYXhpVG9vbHMuX2tleVN0ci5pbmRleE9mKGI2NC5jaGFyQXQoaisrKSk7CiAgIGVuYzQgPSBtYXhpbUpzLm1heGlUb29scy5fa2V5U3RyLmluZGV4T2YoYjY0LmNoYXJBdChqKyspKTsKICAgY2hyMSA9IGVuYzEgPDwgMiB8IGVuYzIgPj4gNDsKICAgY2hyMiA9IChlbmMyICYgMTUpIDw8IDQgfCBlbmMzID4+IDI7CiAgIGNocjMgPSAoZW5jMyAmIDMpIDw8IDYgfCBlbmM0OwogICB1YXJyYXlbaV0gPSBjaHIxOwogICBpZiAoZW5jMyAhPSA2NCkgdWFycmF5W2kgKyAxXSA9IGNocjI7CiAgIGlmIChlbmM0ICE9IDY0KSB1YXJyYXlbaSArIDJdID0gY2hyMzsKICB9CiAgY29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIsIChmdW5jdGlvbihidWZmZXIpIHsKICAgZGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKICAgaWYgKGRhdGEpIHsKICAgIHZhciBteUJ1ZmZlckRhdGEgPSBuZXcgTW9kdWxlLlZlY3RvckRvdWJsZTsKICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZGF0YS5sZW5ndGg7IG4rKykgewogICAgIG15QnVmZmVyRGF0YS5wdXNoX2JhY2soZGF0YVtuXSk7CiAgICB9CiAgICBzYW1wbGVQbGF5ZXIuc2V0U2FtcGxlKG15QnVmZmVyRGF0YSk7CiAgIH0KICB9KSwgKGZ1bmN0aW9uKGJ1ZmZlcikgewogICBjb25zb2xlLmxvZygiRXJyb3IgZGVjb2Rpbmcgc291cmNlISIpOwogIH0pKTsKIH0gZWxzZSB7CiAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CiAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgKGZ1bmN0aW9uKGV2dCkgewogICBjb25zb2xlLmxvZygiVGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiIpOwogIH0pKTsKICByZXF1ZXN0Lm9wZW4oIkdFVCIsIHVybCwgdHJ1ZSk7CiAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAiYXJyYXlidWZmZXIiOwogIHJlcXVlc3Qub25sb2FkID0gKGZ1bmN0aW9uKCkgewogICBjb250ZXh0LmRlY29kZUF1ZGlvRGF0YShyZXF1ZXN0LnJlc3BvbnNlLCAoZnVuY3Rpb24oYnVmZmVyKSB7CiAgICBkYXRhID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwogICAgaWYgKGRhdGEpIHsKICAgICB2YXIgbXlCdWZmZXJEYXRhID0gbmV3IE1vZHVsZS5WZWN0b3JEb3VibGU7CiAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBkYXRhLmxlbmd0aDsgbisrKSB7CiAgICAgIG15QnVmZmVyRGF0YS5wdXNoX2JhY2soZGF0YVtuXSk7CiAgICAgfQogICAgIHNhbXBsZVBsYXllci5zZXRTYW1wbGUobXlCdWZmZXJEYXRhKTsKICAgIH0KICAgfSksIChmdW5jdGlvbihidWZmZXIpIHsKICAgIGNvbnNvbGUubG9nKCJFcnJvciBkZWNvZGluZyBzb3VyY2UhIik7CiAgIH0pKTsKICB9KTsKICByZXF1ZXN0LnNlbmQoKTsKIH0KfSk7CgoKCgo="></script> + <!-- The Canvas tag sets up a screen in the browser that we can draw to. --> + <canvas></canvas> + <button onclick="randomize()">randomize</button> + <h3>modulator parameters</h3> + <form> + <label for="modFreqSlider">frequency:</label> + <input id="modFreqSlider" name="cfSlider" min="1" max="4096" step="0.5" value="4" type="range" autocomplete="off" oninput="mfOutput.value = modFreqSlider.value"> + <output id="mfOutput">4</output> + <br> + <label for="mdSlider">depth:</label> + <input id="mdSlider" name="qSlider" min="0" max="1" step="0.01" value="0.2" type="range" autocomplete="off" oninput="mdOutput.value = mdSlider.value"> + <output id="mdOutput">2</output> + </form> + <h3>filter parameters</h3> + <form> + <label for="cfSlider">center frequency:</label> + <input id="cfSlider" name="cfSlider" min="256" max="4096" step="0.5" value="512" type="range" autocomplete="off" oninput="cfOutput.value = cfSlider.value"> + <output id="cfOutput">512</output> + <br> + <label for="qSlider">resonance:</label> + <input id="qSlider" name="qSlider" min="0" max="40" step="0.5" value="2" type="range" autocomplete="off" oninput="qOutput.value = qSlider.value"> + <output id="qOutput">2</output> + </form> +</body> + +<script src="http://doc.gold.ac.uk/~mzbys001/RapidMixLib.js"></script> + +<script> +/*jshint esnext: true */ +/*globals */ + +alert("Record mouse positions associated with filter parameters."); +/////////////////////////////////////////MAXI +var myMod = 0; +var myFreq = 256; +function makeNoise(rOut) { + myFreq = 256 + (1024 * rOut); +} + +var maxiAudio = new maximJs.maxiAudio(); +var myWave = new maximJs.maxiOsc(); +var myLFO01 = new maximJs.maxiOsc(); +var myFilter = new maximJs.maxiFilter(); +maxiAudio.init(); + +var mfSlider = document.getElementById("modFreqSlider"); +var mfOutput = document.getElementById("mfOutput"); +var mdSlider = document.getElementById("mdSlider"); +var mdOutput = document.getElementById("mfOutput"); +var cfSlider = document.getElementById("cfSlider"); +var cfOutput = document.getElementById("cfOutput"); +var qSlider = document.getElementById("qSlider"); +var qOutput = document.getElementById("qOutput"); + +maxiAudio.play = function() { + var LFO01 = (( myLFO01.sinewave(parseFloat(mfSlider.value)) + 1.0 )/ 2.0) * (mdSlider.value) + (1 - mdSlider.value); + var oscOutput = myWave.pulse(83, LFO01); + var cFreq = parseFloat(cfSlider.value); + var res = parseFloat(qSlider.value); + var myFilteredOutput = myFilter.lores(oscOutput, cFreq, res); + this.output = myFilteredOutput; +}; + +////////////////////////////////////RAPID API + + //Create a regression object + var rapidMix = window.RapidLib(); + var myRegression = new rapidMix.Regression(); + + var myTrainingSet = []; + + var trained = false; + function trainMe() { + console.log('regression trained: ', myRegression.train(myTrainingSet)); + trained = true; + } + + var regressionOutput; + var classificationOutput; + function process(input) { + regressionOutput = myRegression.process(input); + mfSlider.value = regressionOutput[0]; + mdSlider.value = regressionOutput[1]; + cfSlider.value = regressionOutput[2]; + qSlider.value = regressionOutput[3]; + updateOutputs(); + } +////////////////////////////////////CONTROLS AND INPUT + + + // This is where we are going to store the mouse information + var mouseX; + var mouseY; + var myOutput = '(use number keys)'; + + // This gets a reference to the canvas in the browser + var canvas = document.querySelector("canvas"); + + // This sets the width and height to the document window + canvas.width = window.innerWidth; + canvas.height = window.innerHeight - 300; + // Be aware that when you resize the window, you will need to call (do) this again + + // This creates a 2d drawing 'context' in your canvas + // All your drawing will be done in this canvas + var context = canvas.getContext("2d"); + //This tells the browser to get the mouse information from the function we've called getMouse + canvas.addEventListener('mousemove', getMouse, false); + + function getMouse(mousePosition) { + if (mousePosition.layerX || mousePosition.layerX === 0) { + mouseX = mousePosition.layerX / canvas.width; + mouseY = mousePosition.layerY / canvas.height; + } else if (mousePosition.offsetX || mousePosition.offsetX === 0) { + mouseX = mousePosition.offsetX / canvas.width; + mouseY = mousePosition.offsetY / canvas.height; + } + + if (recordState) { + var rapidInput = [mouseX, mouseY]; + var rapidOutput = [(mfSlider.value), (mdSlider.value), (cfSlider.value), (qSlider.value)]; + myTrainingSet.push({ + input: rapidInput, + output: rapidOutput + }); + + } + + if (runState) { + var rapidInput = [mouseX, mouseY]; + process(rapidInput); + } + } + + window.addEventListener('keydown',this.check,false); + function check(e) { + //console.log(e.keyCode); + switch (e.keyCode) { + case 88: + togRecord(); + break; + case 82: + togRun(); + break; + case 84: + trainMe(); + break; + default: + myOutput = e.keyCode - 48; + } + } + + var recordState; + function togRecord() { + recordState = !recordState; + if (recordState) { + console.warn("recording!"); + } else { + console.log("stopped recording"); + } + } + + var runState; + function togRun() { + runState = !runState; + console.log("running"); + } + + function randomize() { + mfSlider.value = 4096 * Math.random(); + mdSlider.value = 1.0 * Math.random(); + cfSlider.value = 4096 * Math.random(); + qSlider.value = 40 * Math.random(); + updateOutputs(); + } + + function updateOutputs() { + mfOutput.value = mfSlider.value; + mdOutput.value = mdSlider.value; + cfOutput.value = cfSlider.value; + qOutput.value = qSlider.value; + } + +/////////////////Drawing + function draw() { + context.clearRect(0,0, canvas.width, canvas.height); + //record state + context.fillStyle = "#00FF00"; + context.font="24px Verdana"; + if (recordState) { + context.fillText('RECORDING! (x)', 20, 100); + } else { + context.fillText('x = record', 20, 100); + } + if (trained) { + context.fillText('(T)RAINED!', 20, 125); + } else { + context.fillText('t = train', 20, 125); + } + if (runState) { + context.fillText('(R)UNNING!', 20, 150); + } else { + context.fillText('r = run', 20, 150); + } + + + //mouse coordinates + context.font="12px Verdana"; + context.fillText('(' + mouseX + ', ' + mouseY + ')' , 20, canvas.height - 50); + + + + window.requestAnimationFrame(draw); + } + window.requestAnimationFrame(draw); + + + + +</script> +</html> \ No newline at end of file diff --git a/examples/ofx/rapidAPI006/Makefile b/examples/ofx/rapidAPI006/Makefile new file mode 100644 index 0000000..d42bc57 --- /dev/null +++ b/examples/ofx/rapidAPI006/Makefile @@ -0,0 +1,13 @@ + # Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../..) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/examples/ofx/rapidAPI006/Project.xcconfig b/examples/ofx/rapidAPI006/Project.xcconfig new file mode 100644 index 0000000..e570b15 --- /dev/null +++ b/examples/ofx/rapidAPI006/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../.. + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/examples/ofx/rapidAPI006/addons.make b/examples/ofx/rapidAPI006/addons.make new file mode 100644 index 0000000..328952e --- /dev/null +++ b/examples/ofx/rapidAPI006/addons.make @@ -0,0 +1,2 @@ +ofxMaxim +ofxOsc diff --git a/examples/ofx/rapidAPI006/config.make b/examples/ofx/rapidAPI006/config.make new file mode 100644 index 0000000..df10f64 --- /dev/null +++ b/examples/ofx/rapidAPI006/config.make @@ -0,0 +1,142 @@ +################################################################################ +# CONFIGURE PROJECT MAKEFILE (optional) +# This file is where we make project specific configurations. +################################################################################ + +################################################################################ +# OF ROOT +# The location of your root openFrameworks installation +# (default) OF_ROOT = ../../.. +################################################################################ +# OF_ROOT = ../../.. + +################################################################################ +# PROJECT ROOT +# The location of the project - a starting place for searching for files +# (default) PROJECT_ROOT = . (this directory) +# +################################################################################ +# PROJECT_ROOT = . + +################################################################################ +# PROJECT SPECIFIC CHECKS +# This is a project defined section to create internal makefile flags to +# conditionally enable or disable the addition of various features within +# this makefile. For instance, if you want to make changes based on whether +# GTK is installed, one might test that here and create a variable to check. +################################################################################ +# None + +################################################################################ +# PROJECT EXTERNAL SOURCE PATHS +# These are fully qualified paths that are not within the PROJECT_ROOT folder. +# Like source folders in the PROJECT_ROOT, these paths are subject to +# exlclusion via the PROJECT_EXLCUSIONS list. +# +# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXTERNAL_SOURCE_PATHS = + +################################################################################ +# PROJECT EXCLUSIONS +# These makefiles assume that all folders in your current project directory +# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations +# to look for source code. The any folders or files that match any of the +# items in the PROJECT_EXCLUSIONS list below will be ignored. +# +# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete +# string unless teh user adds a wildcard (%) operator to match subdirectories. +# GNU make only allows one wildcard for matching. The second wildcard (%) is +# treated literally. +# +# (default) PROJECT_EXCLUSIONS = (blank) +# +# Will automatically exclude the following: +# +# $(PROJECT_ROOT)/bin% +# $(PROJECT_ROOT)/obj% +# $(PROJECT_ROOT)/%.xcodeproj +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXCLUSIONS = + +################################################################################ +# PROJECT LINKER FLAGS +# These flags will be sent to the linker when compiling the executable. +# +# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ + +# Currently, shared libraries that are needed are copied to the +# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to +# add a runtime path to search for those shared libraries, since they aren't +# incorporated directly into the final executable application binary. +# TODO: should this be a default setting? +# PROJECT_LDFLAGS=-Wl,-rpath=./libs + +################################################################################ +# PROJECT DEFINES +# Create a space-delimited list of DEFINES. The list will be converted into +# CFLAGS with the "-D" flag later in the makefile. +# +# (default) PROJECT_DEFINES = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_DEFINES = + +################################################################################ +# PROJECT CFLAGS +# This is a list of fully qualified CFLAGS required when compiling for this +# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS +# defined in your platform specific core configuration files. These flags are +# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. +# +# (default) PROJECT_CFLAGS = (blank) +# +# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in +# your platform specific configuration file will be applied by default and +# further flags here may not be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CFLAGS = + +################################################################################ +# PROJECT OPTIMIZATION CFLAGS +# These are lists of CFLAGS that are target-specific. While any flags could +# be conditionally added, they are usually limited to optimization flags. +# These flags are added BEFORE the PROJECT_CFLAGS. +# +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) +# +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) +# +# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the +# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration +# file will be applied by default and further optimization flags here may not +# be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = + +################################################################################ +# PROJECT COMPILERS +# Custom compilers can be set for CC and CXX +# (default) PROJECT_CXX = (blank) +# (default) PROJECT_CC = (blank) +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CXX = +# PROJECT_CC = diff --git a/examples/ofx/rapidAPI006/openFrameworks-Info.plist b/examples/ofx/rapidAPI006/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/examples/ofx/rapidAPI006/openFrameworks-Info.plist @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIdentifier</key> + <string>cc.openFrameworks.ofapp</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>CFBundleIconFile</key> + <string>${ICON}</string> +</dict> +</plist> diff --git a/examples/ofx/rapidAPI006/rapidAPI_006 copy-Info.plist b/examples/ofx/rapidAPI006/rapidAPI_006 copy-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/examples/ofx/rapidAPI006/rapidAPI_006 copy-Info.plist @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIdentifier</key> + <string>cc.openFrameworks.ofapp</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>CFBundleIconFile</key> + <string>${ICON}</string> +</dict> +</plist> diff --git a/examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.pbxproj b/examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.pbxproj new file mode 100644 index 0000000..441ed9d --- /dev/null +++ b/examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.pbxproj @@ -0,0 +1,889 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0546D1A38E13BD319CC9755B /* OscReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */; }; + 083FB2094A4DE99F5A60397A /* maxiMFCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 440B2B891BD019685EF360B8 /* maxiMFCC.cpp */; }; + 0FCED26D40D46CF89A58E54C /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3C78E7AB53E01022E9374A3 /* fft.cpp */; }; + 22F21CE3B902225374BA1CA2 /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 87D3A0051CCB2C0F0ECA139E /* maximilian.cpp */; }; + 4ADB88E2FB52E76A471065DE /* ofxOscParameterSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */; }; + 510CAFE035E576A4E1502D52 /* UdpSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */; }; + 5864AD82E20F15536D054EA3 /* ofxOscMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */; }; + 5C4A4AA5D4784DF23EA43038 /* maxiAtoms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EFA3ACBB8D16CC0DA1E79C6 /* maxiAtoms.cpp */; }; + 62545D179C94265CA1389D4A /* OscOutboundPacketStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */; }; + 640279EE111671BD026CB013 /* ofxOscReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */; }; + 67FE4C7B15C2F0478C8126C2 /* NetworkingUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */; }; + 72A929D3561B8232A182ABFC /* ofxOscBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */; }; + 879A251454401BC0B6E4F238 /* OscTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */; }; + 8F5205AEF8861EF234F0651A /* ofxOscSender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */; }; + 9514C2D90467055B1447D074 /* stb_vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 80CD68E0DDF2C60D2715CC78 /* stb_vorbis.c */; }; + 96084990AF216648B8B98E00 /* maxiFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A4EE0E35ED739A31CD0153E /* maxiFFT.cpp */; }; + ABA8875AF0C06690CC0B92B1 /* maxiBark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B9936002B519C1290F25FEC /* maxiBark.cpp */; }; + ADE367465D2A8EBAD4C7A8D9 /* IpEndpointName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADD194746185E2DA11468377 /* IpEndpointName.cpp */; }; + AF0580829426DC6BCA135A5C /* maxiGrains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D2FB19B70632A6F86622D94 /* maxiGrains.cpp */; }; + BEA1D4581DA53F03001FC2DF /* neuralNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA1D4571DA53F03001FC2DF /* neuralNetwork.cpp */; }; + BEA1D45B1DA53F2A001FC2DF /* regression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA1D45A1DA53F2A001FC2DF /* regression.cpp */; }; + BEA1D45D1DA53F5F001FC2DF /* modelSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA1D45C1DA53F5F001FC2DF /* modelSet.cpp */; }; + BEA1D4651DA54BB1001FC2DF /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; + BEA1D4661DA54BB1001FC2DF /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; + BEA1D4671DA54BB1001FC2DF /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3C78E7AB53E01022E9374A3 /* fft.cpp */; }; + BEA1D4681DA54BB1001FC2DF /* maxiAtoms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EFA3ACBB8D16CC0DA1E79C6 /* maxiAtoms.cpp */; }; + BEA1D4691DA54BB1001FC2DF /* maxiBark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B9936002B519C1290F25FEC /* maxiBark.cpp */; }; + BEA1D46A1DA54BB1001FC2DF /* maxiFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A4EE0E35ED739A31CD0153E /* maxiFFT.cpp */; }; + BEA1D46B1DA54BB1001FC2DF /* modelSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA1D45C1DA53F5F001FC2DF /* modelSet.cpp */; }; + BEA1D46C1DA54BB1001FC2DF /* maxiGrains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D2FB19B70632A6F86622D94 /* maxiGrains.cpp */; }; + BEA1D46D1DA54BB1001FC2DF /* maxiMFCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 440B2B891BD019685EF360B8 /* maxiMFCC.cpp */; }; + BEA1D46E1DA54BB1001FC2DF /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 87D3A0051CCB2C0F0ECA139E /* maximilian.cpp */; }; + BEA1D46F1DA54BB1001FC2DF /* stb_vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 80CD68E0DDF2C60D2715CC78 /* stb_vorbis.c */; }; + BEA1D4701DA54BB1001FC2DF /* ofxOscBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */; }; + BEA1D4711DA54BB1001FC2DF /* ofxOscMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */; }; + BEA1D4721DA54BB1001FC2DF /* ofxOscParameterSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */; }; + BEA1D4731DA54BB1001FC2DF /* ofxOscReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */; }; + BEA1D4741DA54BB1001FC2DF /* ofxOscSender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */; }; + BEA1D4751DA54BB1001FC2DF /* IpEndpointName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADD194746185E2DA11468377 /* IpEndpointName.cpp */; }; + BEA1D4761DA54BB1001FC2DF /* regression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA1D45A1DA53F2A001FC2DF /* regression.cpp */; }; + BEA1D4771DA54BB1001FC2DF /* NetworkingUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */; }; + BEA1D4781DA54BB1001FC2DF /* neuralNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA1D4571DA53F03001FC2DF /* neuralNetwork.cpp */; }; + BEA1D4791DA54BB1001FC2DF /* UdpSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */; }; + BEA1D47A1DA54BB1001FC2DF /* OscOutboundPacketStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */; }; + BEA1D47B1DA54BB1001FC2DF /* OscPrintReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */; }; + BEA1D47C1DA54BB1001FC2DF /* OscReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */; }; + BEA1D47D1DA54BB1001FC2DF /* OscTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */; }; + BEA1D47F1DA54BB1001FC2DF /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + C4782ECC372420ACE0615B74 /* OscPrintReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */; }; + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + BEA1D4631DA54BB1001FC2DF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = E4B27C1410CBEB8E00536013; + remoteInfo = openFrameworks; + }; + E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E4B27C1510CBEB8E00536013; + remoteInfo = openFrameworks; + }; + E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = E4B27C1410CBEB8E00536013; + remoteInfo = openFrameworks; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + BEA1D4811DA54BB1001FC2DF /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E4C2427710CC5ABF004149E2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 00D6D32B84B099226431108C /* ofxOsc.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOsc.h; path = ../../../addons/ofxOsc/src/ofxOsc.h; sourceTree = SOURCE_ROOT; }; + 029684CF678F70F6D3537A29 /* OscOutboundPacketStream.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscOutboundPacketStream.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscOutboundPacketStream.h; sourceTree = SOURCE_ROOT; }; + 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscParameterSync.cpp; path = ../../../addons/ofxOsc/src/ofxOscParameterSync.cpp; sourceTree = SOURCE_ROOT; }; + 1EFA3ACBB8D16CC0DA1E79C6 /* maxiAtoms.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiAtoms.cpp; path = ../../../addons/ofxMaxim/libs/maxiAtoms.cpp; sourceTree = SOURCE_ROOT; }; + 20F35AFADAF0068B067E713F /* OscReceivedElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscReceivedElements.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscReceivedElements.h; sourceTree = SOURCE_ROOT; }; + 23640F57DF6C4BB6BFC5DA4C /* PacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = PacketListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/PacketListener.h; sourceTree = SOURCE_ROOT; }; + 2FD4B0329909D3527F003494 /* UdpSocket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = UdpSocket.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/UdpSocket.h; sourceTree = SOURCE_ROOT; }; + 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = NetworkingUtils.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/posix/NetworkingUtils.cpp; sourceTree = SOURCE_ROOT; }; + 440B2B891BD019685EF360B8 /* maxiMFCC.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiMFCC.cpp; path = ../../../addons/ofxMaxim/libs/maxiMFCC.cpp; sourceTree = SOURCE_ROOT; }; + 444657A12E59D0ED86981498 /* TimerListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TimerListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/TimerListener.h; sourceTree = SOURCE_ROOT; }; + 48974F980F51769171D0B2F5 /* IpEndpointName.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = IpEndpointName.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/IpEndpointName.h; sourceTree = SOURCE_ROOT; }; + 4CFB659E40D3D3DC5A3E9478 /* maxiGrains.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiGrains.h; path = ../../../addons/ofxMaxim/libs/maxiGrains.h; sourceTree = SOURCE_ROOT; }; + 4E95FB446A9C9C6F0DE12D75 /* OscPrintReceivedElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscPrintReceivedElements.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscPrintReceivedElements.h; sourceTree = SOURCE_ROOT; }; + 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscOutboundPacketStream.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscOutboundPacketStream.cpp; sourceTree = SOURCE_ROOT; }; + 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscBundle.cpp; path = ../../../addons/ofxOsc/src/ofxOscBundle.cpp; sourceTree = SOURCE_ROOT; }; + 6A4EE0E35ED739A31CD0153E /* maxiFFT.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiFFT.cpp; path = ../../../addons/ofxMaxim/libs/maxiFFT.cpp; sourceTree = SOURCE_ROOT; }; + 6B65E6930994CC4B2D2B8B33 /* OscPacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscPacketListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscPacketListener.h; sourceTree = SOURCE_ROOT; }; + 7689F8A0F3D0B7635A8C3104 /* ofxOscArg.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscArg.h; path = ../../../addons/ofxOsc/src/ofxOscArg.h; sourceTree = SOURCE_ROOT; }; + 7D2CBAA6529BCE46CA661E02 /* maxiAtoms.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiAtoms.h; path = ../../../addons/ofxMaxim/libs/maxiAtoms.h; sourceTree = SOURCE_ROOT; }; + 80CD68E0DDF2C60D2715CC78 /* stb_vorbis.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 30; name = stb_vorbis.c; path = ../../../addons/ofxMaxim/libs/stb_vorbis.c; sourceTree = SOURCE_ROOT; }; + 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscSender.cpp; path = ../../../addons/ofxOsc/src/ofxOscSender.cpp; sourceTree = SOURCE_ROOT; }; + 87D3A0051CCB2C0F0ECA139E /* maximilian.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maximilian.cpp; path = ../../../addons/ofxMaxim/libs/maximilian.cpp; sourceTree = SOURCE_ROOT; }; + 8B30E93FD3D3475EED522A0E /* ofxOscBundle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscBundle.h; path = ../../../addons/ofxOsc/src/ofxOscBundle.h; sourceTree = SOURCE_ROOT; }; + 8C75AFC8774A62495DD53464 /* ofxOscReceiver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscReceiver.h; path = ../../../addons/ofxOsc/src/ofxOscReceiver.h; sourceTree = SOURCE_ROOT; }; + 9312F3864ED05FC3E847FF69 /* ofxMaxim.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxMaxim.h; path = ../../../addons/ofxMaxim/src/ofxMaxim.h; sourceTree = SOURCE_ROOT; }; + 95C3AC11BE0AC7EC464D2A36 /* maximilian.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maximilian.h; path = ../../../addons/ofxMaxim/libs/maximilian.h; sourceTree = SOURCE_ROOT; }; + 9B9936002B519C1290F25FEC /* maxiBark.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiBark.cpp; path = ../../../addons/ofxMaxim/libs/maxiBark.cpp; sourceTree = SOURCE_ROOT; }; + 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscReceivedElements.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscReceivedElements.cpp; sourceTree = SOURCE_ROOT; }; + 9D2FB19B70632A6F86622D94 /* maxiGrains.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiGrains.cpp; path = ../../../addons/ofxMaxim/libs/maxiGrains.cpp; sourceTree = SOURCE_ROOT; }; + 9F7986DC4EB05E75FCE2C777 /* ofxOscSender.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscSender.h; path = ../../../addons/ofxOsc/src/ofxOscSender.h; sourceTree = SOURCE_ROOT; }; + A2AAA8CA403479E6FCDF920E /* OscHostEndianness.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscHostEndianness.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscHostEndianness.h; sourceTree = SOURCE_ROOT; }; + A67372B9CAED43269F8D42D3 /* maxiBark.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiBark.h; path = ../../../addons/ofxMaxim/libs/maxiBark.h; sourceTree = SOURCE_ROOT; }; + ADD194746185E2DA11468377 /* IpEndpointName.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = IpEndpointName.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/IpEndpointName.cpp; sourceTree = SOURCE_ROOT; }; + AE335EB4709BFD4671EEAC84 /* MessageMappingOscPacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MessageMappingOscPacketListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/MessageMappingOscPacketListener.h; sourceTree = SOURCE_ROOT; }; + B2F326FA07783558EF3CDD2A /* stb_vorbis.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = stb_vorbis.h; path = ../../../addons/ofxMaxim/libs/stb_vorbis.h; sourceTree = SOURCE_ROOT; }; + B31C608870ECEB2490A93736 /* ofxOscParameterSync.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscParameterSync.h; path = ../../../addons/ofxOsc/src/ofxOscParameterSync.h; sourceTree = SOURCE_ROOT; }; + B34D3539DB6F889A78540F7C /* sineTable.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = sineTable.h; path = ../../../addons/ofxMaxim/libs/sineTable.h; sourceTree = SOURCE_ROOT; }; + BA5114869056DFF1A50CFA4A /* fft.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = fft.h; path = ../../../addons/ofxMaxim/libs/fft.h; sourceTree = SOURCE_ROOT; }; + BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscPrintReceivedElements.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscPrintReceivedElements.cpp; sourceTree = SOURCE_ROOT; }; + BEA1D4541DA53E5B001FC2DF /* regression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regression.h; sourceTree = "<group>"; }; + BEA1D4561DA53EF3001FC2DF /* baseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = baseModel.h; sourceTree = "<group>"; }; + BEA1D4571DA53F03001FC2DF /* neuralNetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = neuralNetwork.cpp; sourceTree = "<group>"; }; + BEA1D4591DA53F16001FC2DF /* modelSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modelSet.h; sourceTree = "<group>"; }; + BEA1D45A1DA53F2A001FC2DF /* regression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regression.cpp; sourceTree = "<group>"; }; + BEA1D45C1DA53F5F001FC2DF /* modelSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = modelSet.cpp; sourceTree = "<group>"; }; + BEA1D45E1DA53F7C001FC2DF /* neuralNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = neuralNetwork.h; sourceTree = "<group>"; }; + BEA1D4861DA54BB1001FC2DF /* rapidAPI_006.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = rapidAPI_006.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEA1D4871DA54BB1001FC2DF /* rapidAPI_006 copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "rapidAPI_006 copy-Info.plist"; sourceTree = "<group>"; }; + C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscReceiver.cpp; path = ../../../addons/ofxOsc/src/ofxOscReceiver.cpp; sourceTree = SOURCE_ROOT; }; + C58862C6D212C8E8A83810F4 /* ofxOscMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscMessage.h; path = ../../../addons/ofxOsc/src/ofxOscMessage.h; sourceTree = SOURCE_ROOT; }; + C6937888E126BADC8777423B /* OscTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscTypes.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscTypes.h; sourceTree = SOURCE_ROOT; }; + D1C864AE2FE539BE7FD1F628 /* maxiMFCC.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiMFCC.h; path = ../../../addons/ofxMaxim/libs/maxiMFCC.h; sourceTree = SOURCE_ROOT; }; + D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscTypes.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscTypes.cpp; sourceTree = SOURCE_ROOT; }; + DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscMessage.cpp; path = ../../../addons/ofxOsc/src/ofxOscMessage.cpp; sourceTree = SOURCE_ROOT; }; + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; + E4B69B5B0A3A1756003C02F2 /* rapidAPI_006Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = rapidAPI_006Debug.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = "<group>"; }; + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = "<group>"; }; + E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = UdpSocket.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/posix/UdpSocket.cpp; sourceTree = SOURCE_ROOT; }; + EFA729F2F65D97F65DB52E44 /* maxiFFT.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiFFT.h; path = ../../../addons/ofxMaxim/libs/maxiFFT.h; sourceTree = SOURCE_ROOT; }; + F3C78E7AB53E01022E9374A3 /* fft.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = fft.cpp; path = ../../../addons/ofxMaxim/libs/fft.cpp; sourceTree = SOURCE_ROOT; }; + F4F5B6B8BA2BD52C646ED908 /* OscException.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscException.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscException.h; sourceTree = SOURCE_ROOT; }; + F7FBC56859535E597B24BB91 /* NetworkingUtils.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = NetworkingUtils.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/NetworkingUtils.h; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BEA1D47E1DA54BB1001FC2DF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BEA1D47F1DA54BB1001FC2DF /* openFrameworksDebug.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E4B69B590A3A1756003C02F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 30CB364908817057B430D528 /* osc */ = { + isa = PBXGroup; + children = ( + AE335EB4709BFD4671EEAC84 /* MessageMappingOscPacketListener.h */, + F4F5B6B8BA2BD52C646ED908 /* OscException.h */, + A2AAA8CA403479E6FCDF920E /* OscHostEndianness.h */, + 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */, + 029684CF678F70F6D3537A29 /* OscOutboundPacketStream.h */, + 6B65E6930994CC4B2D2B8B33 /* OscPacketListener.h */, + BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */, + 4E95FB446A9C9C6F0DE12D75 /* OscPrintReceivedElements.h */, + 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */, + 20F35AFADAF0068B067E713F /* OscReceivedElements.h */, + D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */, + C6937888E126BADC8777423B /* OscTypes.h */, + ); + name = osc; + sourceTree = "<group>"; + }; + 38871A5825686AE018EC2BF0 /* libs */ = { + isa = PBXGroup; + children = ( + 86D2677079A3AF4A5A88E29A /* oscpack */, + ); + name = libs; + sourceTree = "<group>"; + }; + 4ACC32F17B7623DA048865D1 /* libs */ = { + isa = PBXGroup; + children = ( + F3C78E7AB53E01022E9374A3 /* fft.cpp */, + BA5114869056DFF1A50CFA4A /* fft.h */, + 1EFA3ACBB8D16CC0DA1E79C6 /* maxiAtoms.cpp */, + 7D2CBAA6529BCE46CA661E02 /* maxiAtoms.h */, + 9B9936002B519C1290F25FEC /* maxiBark.cpp */, + A67372B9CAED43269F8D42D3 /* maxiBark.h */, + 6A4EE0E35ED739A31CD0153E /* maxiFFT.cpp */, + EFA729F2F65D97F65DB52E44 /* maxiFFT.h */, + 9D2FB19B70632A6F86622D94 /* maxiGrains.cpp */, + 4CFB659E40D3D3DC5A3E9478 /* maxiGrains.h */, + 440B2B891BD019685EF360B8 /* maxiMFCC.cpp */, + D1C864AE2FE539BE7FD1F628 /* maxiMFCC.h */, + 87D3A0051CCB2C0F0ECA139E /* maximilian.cpp */, + 95C3AC11BE0AC7EC464D2A36 /* maximilian.h */, + B34D3539DB6F889A78540F7C /* sineTable.h */, + 80CD68E0DDF2C60D2715CC78 /* stb_vorbis.c */, + B2F326FA07783558EF3CDD2A /* stb_vorbis.h */, + ); + name = libs; + sourceTree = "<group>"; + }; + 6234D3BCE87D1C3BA2230F19 /* ofxMaxim */ = { + isa = PBXGroup; + children = ( + 8F6BFB59AB6D0A458C2F3C53 /* src */, + 4ACC32F17B7623DA048865D1 /* libs */, + ); + name = ofxMaxim; + sourceTree = "<group>"; + }; + 641362CA659FAFEE4E81001B /* posix */ = { + isa = PBXGroup; + children = ( + 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */, + E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */, + ); + name = posix; + sourceTree = "<group>"; + }; + 6948EE371B920CB800B5AC1A /* local_addons */ = { + isa = PBXGroup; + children = ( + ); + name = local_addons; + sourceTree = "<group>"; + }; + 86D2677079A3AF4A5A88E29A /* oscpack */ = { + isa = PBXGroup; + children = ( + D27B2221A225CA523C019676 /* src */, + ); + name = oscpack; + sourceTree = "<group>"; + }; + 8F6BFB59AB6D0A458C2F3C53 /* src */ = { + isa = PBXGroup; + children = ( + 9312F3864ED05FC3E847FF69 /* ofxMaxim.h */, + ); + name = src; + sourceTree = "<group>"; + }; + BB4B014C10F69532006C3DED /* addons */ = { + isa = PBXGroup; + children = ( + 6234D3BCE87D1C3BA2230F19 /* ofxMaxim */, + E6053AB7FEC63D5F83825B88 /* ofxOsc */, + ); + name = addons; + sourceTree = "<group>"; + }; + BD2F1A9F8D0C05EDB29122D0 /* src */ = { + isa = PBXGroup; + children = ( + 00D6D32B84B099226431108C /* ofxOsc.h */, + 7689F8A0F3D0B7635A8C3104 /* ofxOscArg.h */, + 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */, + 8B30E93FD3D3475EED522A0E /* ofxOscBundle.h */, + DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */, + C58862C6D212C8E8A83810F4 /* ofxOscMessage.h */, + 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */, + B31C608870ECEB2490A93736 /* ofxOscParameterSync.h */, + C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */, + 8C75AFC8774A62495DD53464 /* ofxOscReceiver.h */, + 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */, + 9F7986DC4EB05E75FCE2C777 /* ofxOscSender.h */, + ); + name = src; + sourceTree = "<group>"; + }; + D27B2221A225CA523C019676 /* src */ = { + isa = PBXGroup; + children = ( + FF8CDF57858E9B94E3237115 /* ip */, + 30CB364908817057B430D528 /* osc */, + ); + name = src; + sourceTree = "<group>"; + }; + E4328144138ABC890047C5CB /* Products */ = { + isa = PBXGroup; + children = ( + E4328148138ABC890047C5CB /* openFrameworksDebug.a */, + ); + name = Products; + sourceTree = "<group>"; + }; + E4B69B4A0A3A1720003C02F2 = { + isa = PBXGroup; + children = ( + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, + E4B69E1C0A3A1BDC003C02F2 /* src */, + E4EEC9E9138DF44700A80321 /* openFrameworks */, + BB4B014C10F69532006C3DED /* addons */, + 6948EE371B920CB800B5AC1A /* local_addons */, + E4B69B5B0A3A1756003C02F2 /* rapidAPI_006Debug.app */, + BEA1D4861DA54BB1001FC2DF /* rapidAPI_006.app */, + BEA1D4871DA54BB1001FC2DF /* rapidAPI_006 copy-Info.plist */, + ); + sourceTree = "<group>"; + }; + E4B69E1C0A3A1BDC003C02F2 /* src */ = { + isa = PBXGroup; + children = ( + BEA1D45E1DA53F7C001FC2DF /* neuralNetwork.h */, + BEA1D4561DA53EF3001FC2DF /* baseModel.h */, + BEA1D4591DA53F16001FC2DF /* modelSet.h */, + BEA1D45C1DA53F5F001FC2DF /* modelSet.cpp */, + BEA1D4571DA53F03001FC2DF /* neuralNetwork.cpp */, + BEA1D4541DA53E5B001FC2DF /* regression.h */, + BEA1D45A1DA53F2A001FC2DF /* regression.cpp */, + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, + ); + path = src; + sourceTree = SOURCE_ROOT; + }; + E4EEC9E9138DF44700A80321 /* openFrameworks */ = { + isa = PBXGroup; + children = ( + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, + ); + name = openFrameworks; + sourceTree = "<group>"; + }; + E6053AB7FEC63D5F83825B88 /* ofxOsc */ = { + isa = PBXGroup; + children = ( + BD2F1A9F8D0C05EDB29122D0 /* src */, + 38871A5825686AE018EC2BF0 /* libs */, + ); + name = ofxOsc; + sourceTree = "<group>"; + }; + FF8CDF57858E9B94E3237115 /* ip */ = { + isa = PBXGroup; + children = ( + ADD194746185E2DA11468377 /* IpEndpointName.cpp */, + 48974F980F51769171D0B2F5 /* IpEndpointName.h */, + F7FBC56859535E597B24BB91 /* NetworkingUtils.h */, + 23640F57DF6C4BB6BFC5DA4C /* PacketListener.h */, + 641362CA659FAFEE4E81001B /* posix */, + 444657A12E59D0ED86981498 /* TimerListener.h */, + 2FD4B0329909D3527F003494 /* UdpSocket.h */, + ); + name = ip; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BEA1D4611DA54BB1001FC2DF /* rapidAPI_006 */ = { + isa = PBXNativeTarget; + buildConfigurationList = BEA1D4831DA54BB1001FC2DF /* Build configuration list for PBXNativeTarget "rapidAPI_006" */; + buildPhases = ( + BEA1D4641DA54BB1001FC2DF /* Sources */, + BEA1D47E1DA54BB1001FC2DF /* Frameworks */, + BEA1D4801DA54BB1001FC2DF /* ShellScript */, + BEA1D4811DA54BB1001FC2DF /* CopyFiles */, + BEA1D4821DA54BB1001FC2DF /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + BEA1D4621DA54BB1001FC2DF /* PBXTargetDependency */, + ); + name = rapidAPI_006; + productName = myOFApp; + productReference = BEA1D4861DA54BB1001FC2DF /* rapidAPI_006.app */; + productType = "com.apple.product-type.application"; + }; + E4B69B5A0A3A1756003C02F2 /* granular0_92 */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "granular0_92" */; + buildPhases = ( + E4B69B580A3A1756003C02F2 /* Sources */, + E4B69B590A3A1756003C02F2 /* Frameworks */, + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, + E4C2427710CC5ABF004149E2 /* CopyFiles */, + 8466F1851C04CA0E00918B1C /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, + ); + name = granular0_92; + productName = myOFApp; + productReference = E4B69B5B0A3A1756003C02F2 /* rapidAPI_006Debug.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4B69B4C0A3A1720003C02F2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0600; + }; + buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "rapidAPI_006" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = E4B69B4A0A3A1720003C02F2; + productRefGroup = E4B69B4A0A3A1720003C02F2; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = E4328144138ABC890047C5CB /* Products */; + ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + E4B69B5A0A3A1756003C02F2 /* granular0_92 */, + BEA1D4611DA54BB1001FC2DF /* rapidAPI_006 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = openFrameworksDebug.a; + remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXShellScriptBuildPhase section */ + 8466F1851C04CA0E00918B1C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# ---- Code Sign App Package ----\n \n# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY!\n\n# Verify that $CODE_SIGN_IDENTITY is set\nif [ -z \"${CODE_SIGN_IDENTITY}\" ] ; then\necho \"CODE_SIGN_IDENTITY needs to be set for framework code-signing\"\nexit 0\nfi\n\nif [ -z \"${CODE_SIGN_ENTITLEMENTS}\" ] ; then\necho \"CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!\"\n\nif [ \"${CONFIGURATION}\" = \"Release\" ] ; then\nexit 1\nelse\n# Code-signing is optional for non-release builds.\nexit 0\nfi\nfi\n\nITEMS=\"\"\n\nFRAMEWORKS_DIR=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\necho \"$FRAMEWORKS_DIR\"\nif [ -d \"$FRAMEWORKS_DIR\" ] ; then\nFRAMEWORKS=$(find \"${FRAMEWORKS_DIR}\" -depth -type d -name \"*.framework\" -or -name \"*.dylib\" -or -name \"*.bundle\" | sed -e \"s/\\(.*framework\\)/\\1\\/Versions\\/A\\//\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${FRAMEWORKS}\"\nfi\n\nLOGINITEMS_DIR=\"${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/\"\nif [ -d \"$LOGINITEMS_DIR\" ] ; then\nLOGINITEMS=$(find \"${LOGINITEMS_DIR}\" -depth -type d -name \"*.app\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${ITEMS}\"$'\\n'\"${LOGINITEMS}\"\nfi\n\n# Prefer the expanded name, if available.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\nif [ \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" = \"\" ] ; then\n# Fall back to old behavior.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${CODE_SIGN_IDENTITY}\"\nfi\n\necho \"Identity:\"\necho \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\"\n\necho \"Entitlements:\"\necho \"${CODE_SIGN_ENTITLEMENTS}\"\n\necho \"Found:\"\necho \"${ITEMS}\"\n\n# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.\nSAVED_IFS=$IFS\nIFS=$(echo -en \"\\n\\b\")\n\n# Loop through all items.\nfor ITEM in $ITEMS;\ndo\necho \"Signing '${ITEM}'\"\ncodesign --force --verbose --sign \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" \"${ITEM}\"\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\necho \"Failed to sign '${ITEM}'.\"\nIFS=$SAVED_IFS\nexit 1\nfi\ndone\n\n# Restore $IFS.\nIFS=$SAVED_IFS\n"; + }; + BEA1D4801DA54BB1001FC2DF /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy default icon file into App/Resources\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\";\ninstall_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\n# Copy GLUT framework (must remove for AppStore submissions)\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\"\n"; + }; + BEA1D4821DA54BB1001FC2DF /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# ---- Code Sign App Package ----\n \n# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY!\n\n# Verify that $CODE_SIGN_IDENTITY is set\nif [ -z \"${CODE_SIGN_IDENTITY}\" ] ; then\necho \"CODE_SIGN_IDENTITY needs to be set for framework code-signing\"\nexit 0\nfi\n\nif [ -z \"${CODE_SIGN_ENTITLEMENTS}\" ] ; then\necho \"CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!\"\n\nif [ \"${CONFIGURATION}\" = \"Release\" ] ; then\nexit 1\nelse\n# Code-signing is optional for non-release builds.\nexit 0\nfi\nfi\n\nITEMS=\"\"\n\nFRAMEWORKS_DIR=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\necho \"$FRAMEWORKS_DIR\"\nif [ -d \"$FRAMEWORKS_DIR\" ] ; then\nFRAMEWORKS=$(find \"${FRAMEWORKS_DIR}\" -depth -type d -name \"*.framework\" -or -name \"*.dylib\" -or -name \"*.bundle\" | sed -e \"s/\\(.*framework\\)/\\1\\/Versions\\/A\\//\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${FRAMEWORKS}\"\nfi\n\nLOGINITEMS_DIR=\"${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/\"\nif [ -d \"$LOGINITEMS_DIR\" ] ; then\nLOGINITEMS=$(find \"${LOGINITEMS_DIR}\" -depth -type d -name \"*.app\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${ITEMS}\"$'\\n'\"${LOGINITEMS}\"\nfi\n\n# Prefer the expanded name, if available.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\nif [ \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" = \"\" ] ; then\n# Fall back to old behavior.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${CODE_SIGN_IDENTITY}\"\nfi\n\necho \"Identity:\"\necho \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\"\n\necho \"Entitlements:\"\necho \"${CODE_SIGN_ENTITLEMENTS}\"\n\necho \"Found:\"\necho \"${ITEMS}\"\n\n# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.\nSAVED_IFS=$IFS\nIFS=$(echo -en \"\\n\\b\")\n\n# Loop through all items.\nfor ITEM in $ITEMS;\ndo\necho \"Signing '${ITEM}'\"\ncodesign --force --verbose --sign \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" \"${ITEM}\"\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\necho \"Failed to sign '${ITEM}'.\"\nIFS=$SAVED_IFS\nexit 1\nfi\ndone\n\n# Restore $IFS.\nIFS=$SAVED_IFS\n"; + }; + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy default icon file into App/Resources\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\";\ninstall_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\n# Copy GLUT framework (must remove for AppStore submissions)\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BEA1D4641DA54BB1001FC2DF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEA1D4651DA54BB1001FC2DF /* main.cpp in Sources */, + BEA1D4661DA54BB1001FC2DF /* ofApp.cpp in Sources */, + BEA1D4671DA54BB1001FC2DF /* fft.cpp in Sources */, + BEA1D4681DA54BB1001FC2DF /* maxiAtoms.cpp in Sources */, + BEA1D4691DA54BB1001FC2DF /* maxiBark.cpp in Sources */, + BEA1D46A1DA54BB1001FC2DF /* maxiFFT.cpp in Sources */, + BEA1D46B1DA54BB1001FC2DF /* modelSet.cpp in Sources */, + BEA1D46C1DA54BB1001FC2DF /* maxiGrains.cpp in Sources */, + BEA1D46D1DA54BB1001FC2DF /* maxiMFCC.cpp in Sources */, + BEA1D46E1DA54BB1001FC2DF /* maximilian.cpp in Sources */, + BEA1D46F1DA54BB1001FC2DF /* stb_vorbis.c in Sources */, + BEA1D4701DA54BB1001FC2DF /* ofxOscBundle.cpp in Sources */, + BEA1D4711DA54BB1001FC2DF /* ofxOscMessage.cpp in Sources */, + BEA1D4721DA54BB1001FC2DF /* ofxOscParameterSync.cpp in Sources */, + BEA1D4731DA54BB1001FC2DF /* ofxOscReceiver.cpp in Sources */, + BEA1D4741DA54BB1001FC2DF /* ofxOscSender.cpp in Sources */, + BEA1D4751DA54BB1001FC2DF /* IpEndpointName.cpp in Sources */, + BEA1D4761DA54BB1001FC2DF /* regression.cpp in Sources */, + BEA1D4771DA54BB1001FC2DF /* NetworkingUtils.cpp in Sources */, + BEA1D4781DA54BB1001FC2DF /* neuralNetwork.cpp in Sources */, + BEA1D4791DA54BB1001FC2DF /* UdpSocket.cpp in Sources */, + BEA1D47A1DA54BB1001FC2DF /* OscOutboundPacketStream.cpp in Sources */, + BEA1D47B1DA54BB1001FC2DF /* OscPrintReceivedElements.cpp in Sources */, + BEA1D47C1DA54BB1001FC2DF /* OscReceivedElements.cpp in Sources */, + BEA1D47D1DA54BB1001FC2DF /* OscTypes.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E4B69B580A3A1756003C02F2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, + 0FCED26D40D46CF89A58E54C /* fft.cpp in Sources */, + 5C4A4AA5D4784DF23EA43038 /* maxiAtoms.cpp in Sources */, + ABA8875AF0C06690CC0B92B1 /* maxiBark.cpp in Sources */, + 96084990AF216648B8B98E00 /* maxiFFT.cpp in Sources */, + BEA1D45D1DA53F5F001FC2DF /* modelSet.cpp in Sources */, + AF0580829426DC6BCA135A5C /* maxiGrains.cpp in Sources */, + 083FB2094A4DE99F5A60397A /* maxiMFCC.cpp in Sources */, + 22F21CE3B902225374BA1CA2 /* maximilian.cpp in Sources */, + 9514C2D90467055B1447D074 /* stb_vorbis.c in Sources */, + 72A929D3561B8232A182ABFC /* ofxOscBundle.cpp in Sources */, + 5864AD82E20F15536D054EA3 /* ofxOscMessage.cpp in Sources */, + 4ADB88E2FB52E76A471065DE /* ofxOscParameterSync.cpp in Sources */, + 640279EE111671BD026CB013 /* ofxOscReceiver.cpp in Sources */, + 8F5205AEF8861EF234F0651A /* ofxOscSender.cpp in Sources */, + ADE367465D2A8EBAD4C7A8D9 /* IpEndpointName.cpp in Sources */, + BEA1D45B1DA53F2A001FC2DF /* regression.cpp in Sources */, + 67FE4C7B15C2F0478C8126C2 /* NetworkingUtils.cpp in Sources */, + BEA1D4581DA53F03001FC2DF /* neuralNetwork.cpp in Sources */, + 510CAFE035E576A4E1502D52 /* UdpSocket.cpp in Sources */, + 62545D179C94265CA1389D4A /* OscOutboundPacketStream.cpp in Sources */, + C4782ECC372420ACE0615B74 /* OscPrintReceivedElements.cpp in Sources */, + 0546D1A38E13BD319CC9755B /* OscReceivedElements.cpp in Sources */, + 879A251454401BC0B6E4F238 /* OscTypes.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + BEA1D4621DA54BB1001FC2DF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = openFrameworks; + targetProxy = BEA1D4631DA54BB1001FC2DF /* PBXContainerItemProxy */; + }; + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = openFrameworks; + targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + BEA1D4841DA54BB1001FC2DF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../addons/ofxMaxim/libs, + ../../../addons/ofxMaxim/src, + ../../../addons/ofxOsc/libs, + ../../../addons/ofxOsc/libs/oscpack, + ../../../addons/ofxOsc/libs/oscpack/src, + ../../../addons/ofxOsc/libs/oscpack/src/ip, + ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../addons/ofxOsc/libs/oscpack/src/osc, + ../../../addons/ofxOsc/src, + ); + ICON = "$(ICON_NAME_DEBUG)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "rapidAPI_006 copy-Info.plist"; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + BEA1D4851DA54BB1001FC2DF /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../addons/ofxMaxim/libs, + ../../../addons/ofxMaxim/src, + ../../../addons/ofxOsc/libs, + ../../../addons/ofxOsc/libs/oscpack, + ../../../addons/ofxOsc/libs/oscpack/src, + ../../../addons/ofxOsc/libs/oscpack/src/ip, + ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../addons/ofxOsc/libs/oscpack/src/osc, + ../../../addons/ofxOsc/src, + ); + ICON = "$(ICON_NAME_RELEASE)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "rapidAPI_006 copy-Info.plist"; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + baseConfigurationReference = E4EB6923138AFD0F00A09F29; + }; + name = Release; + }; + E4B69B4E0A3A1720003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../addons/ofxMaxim/libs, + ../../../addons/ofxMaxim/src, + ../../../addons/ofxOsc/libs, + ../../../addons/ofxOsc/libs/oscpack, + ../../../addons/ofxOsc/libs/oscpack/src, + ../../../addons/ofxOsc/libs/oscpack/src/ip, + ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../addons/ofxOsc/libs/oscpack/src/osc, + ../../../addons/ofxOsc/src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Debug; + }; + E4B69B4F0A3A1720003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = YES; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_UNROLL_LOOPS = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../addons/ofxMaxim/libs, + ../../../addons/ofxMaxim/src, + ../../../addons/ofxOsc/libs, + ../../../addons/ofxOsc/libs/oscpack, + ../../../addons/ofxOsc/libs/oscpack/src, + ../../../addons/ofxOsc/libs/oscpack/src/ip, + ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../addons/ofxOsc/libs/oscpack/src/osc, + ../../../addons/ofxOsc/src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.8; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Release; + }; + E4B69B600A3A1757003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../addons/ofxMaxim/libs, + ../../../addons/ofxMaxim/src, + ../../../addons/ofxOsc/libs, + ../../../addons/ofxOsc/libs/oscpack, + ../../../addons/ofxOsc/libs/oscpack/src, + ../../../addons/ofxOsc/libs/oscpack/src/ip, + ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../addons/ofxOsc/libs/oscpack/src/osc, + ../../../addons/ofxOsc/src, + ); + ICON = "$(ICON_NAME_DEBUG)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_NAME = rapidAPI_006Debug; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + E4B69B610A3A1757003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../addons/ofxMaxim/libs, + ../../../addons/ofxMaxim/src, + ../../../addons/ofxOsc/libs, + ../../../addons/ofxOsc/libs/oscpack, + ../../../addons/ofxOsc/libs/oscpack/src, + ../../../addons/ofxOsc/libs/oscpack/src/ip, + ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../addons/ofxOsc/libs/oscpack/src/osc, + ../../../addons/ofxOsc/src, + ); + ICON = "$(ICON_NAME_RELEASE)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_NAME = rapidAPI_006Debug; + WRAPPER_EXTENSION = app; + baseConfigurationReference = E4EB6923138AFD0F00A09F29; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BEA1D4831DA54BB1001FC2DF /* Build configuration list for PBXNativeTarget "rapidAPI_006" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BEA1D4841DA54BB1001FC2DF /* Debug */, + BEA1D4851DA54BB1001FC2DF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "rapidAPI_006" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B4E0A3A1720003C02F2 /* Debug */, + E4B69B4F0A3A1720003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "granular0_92" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B600A3A1757003C02F2 /* Debug */, + E4B69B610A3A1757003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; +} diff --git a/examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..8316fe0 --- /dev/null +++ b/examples/ofx/rapidAPI006/rapidAPI_006.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:/Users/mzed/GIT/openFrameworks/apps/mzApps/rapidAPI006/rapidAPI_006.xcodeproj"> + </FileRef> +</Workspace> diff --git a/examples/ofx/rapidAPI006/src/main.cpp b/examples/ofx/rapidAPI006/src/main.cpp new file mode 100644 index 0000000..e57370b --- /dev/null +++ b/examples/ofx/rapidAPI006/src/main.cpp @@ -0,0 +1,13 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp(new ofApp()); + +} diff --git a/examples/ofx/rapidAPI006/src/ofApp.cpp b/examples/ofx/rapidAPI006/src/ofApp.cpp new file mode 100644 index 0000000..3a6101f --- /dev/null +++ b/examples/ofx/rapidAPI006/src/ofApp.cpp @@ -0,0 +1,206 @@ + +#include "ofApp.h" +#include "time.h" +#include <random> + + +//-------------------------------------------------------------- +void ofApp::setup(){ + + sender.setup(HOST, SENDPORT); + receiver.setup(RECEIVEPORT); + + ofEnableAlphaBlending(); + ofSetupScreen(); + ofBackground(0, 0, 0); + ofSetFrameRate(60); + + modulationFrequency = 4.1; + modulationDepth = 0.2; + centerFrequency = 512; + resonance = 2; + + trained = false; + recording = false; + + sampleRate = 44100; /* Sampling Rate */ + bufferSize = 512; /* Buffer Size. you have to fill this buffer with sound using the for loop in the audioOut method */ + + + fft.setup(1024, 512, 256); + oct.setup(44100, 1024, 10); + + int current = 0; + ofxMaxiSettings::setup(sampleRate, 2, initialBufferSize); + + ofSetVerticalSync(true); + ofEnableAlphaBlending(); + ofEnableSmoothing(); + + ofSetSphereResolution(5); + + ofBackground(0,0,0); + + ofSoundStreamSetup(2,2,this, sampleRate, bufferSize, 4); /* this has to happen at the end of setup - it switches on the DAC */ + + +} + +//-------------------------------------------------------------- +void ofApp::exit(){ + ofSoundStreamStop(); + ofSoundStreamClose(); +} + + +//-------------------------------------------------------------- +void ofApp::update(){ + +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + ofSetColor(160, 255, 240, 150); + ofDrawBitmapString(":: RapidMix Regression example ::", 10,20); + ofDrawBitmapString("Press space to randomize parameters. Hold 'R' to record mouse positions associated with current params.", 10,40); + ofDrawBitmapString("Press 'T' to train models.", 10,60); + ofDrawBitmapString("Click and drag to run model", 10,80); + + stringstream s; + s << "mod frequency: " << modulationFrequency; + ofDrawBitmapString(s.str(), 10,735); + s.str(""); + s << "mod depth: " << modulationDepth; + ofDrawBitmapString(s.str(), 10,750); + s.str(""); + s << "center frequency: " << centerFrequency; + ofDrawBitmapString(s.str(), 400,735); + s.str(""); + s << "resonance: " << resonance; + ofDrawBitmapString(s.str(), 400,750); + s.str(""); + s << "trained: " << trained; + ofDrawBitmapString(s.str(), 800,735); + s.str(""); + s << "recording: " << recording; + ofDrawBitmapString(s.str(), 800,750); + s.str(""); + + ofNoFill(); + for(int i=0; i < oct.nAverages; i++) { + ofSetColor(160,255, 240, + oct.averages[i] / 20.0 * 255.0); + // ofCircle(ofGetWidth() / 2, ofGetHeight()/2, i * 5); + glPushMatrix(); + glTranslatef(ofGetWidth()/2,ofGetHeight()/2, 0); + //glRotatef(0.01 * ofGetFrameNum() * speed * i, 0.01 * ofGetFrameNum() * speed * i,0.01 * ofGetFrameNum() * speed * i, 0); + // glutWireSphere(i * 5, 2 + (10 - (fabs(speed) * 10)), 2 + (fabs(speed) * 10)); + ofDrawSphere(0, 0, i * 5); + glPopMatrix(); + } + + + + +} + +//-------------------------------------------------------------- +void ofApp::audioOut(float * output, int bufferSize, int nChannels) { + for (int i = 0; i < bufferSize; i++){ + double LFO01 = (( myLFO01.sinewave(modulationFrequency) + 1.0 )/ 2.0) * modulationDepth + (1 - modulationDepth); + double oscOutput = myWave.pulse(83, LFO01); + double myFilteredOutput = myFilter.lores(oscOutput, centerFrequency, resonance); + + if (fft.process(myFilteredOutput)) { + oct.calculate(fft.magnitudes); + } + + //play result + mymix.stereo(myFilteredOutput, outputs, 0.5); + output[i*nChannels ] = outputs[0]; + output[i*nChannels + 1] = outputs[1]; + + } + +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + switch (key) { + case 114: + recording = true; + break; + case 116: + trained = myRegression.train(trainingSet); + break; + case 32: + std::random_device rd; + std::default_random_engine generator(rd()); + std::uniform_real_distribution<double> distribution(0.0, 1.0); + + modulationFrequency = 4096 * distribution(generator); + modulationDepth = distribution(generator); + centerFrequency = 4096 * distribution(generator); + resonance = 40 * distribution(generator); + break; + } + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + switch (key) { + case 114: + recording = false; + break; + } +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y){ + if (recording) { + trainingExample tempExample; + tempExample.input = {double(x)/1024, double(y)/768}; + tempExample.output = {modulationFrequency, modulationDepth, centerFrequency, resonance}; + trainingSet.push_back(tempExample); + } +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + if (trained) { + std::vector<double> input; + input.push_back (double(x)/1024.0); + input.push_back (double(y)/768.0); + std::vector<double> output = myRegression.process(input); + modulationFrequency = output[0]; + modulationDepth = output[1]; + centerFrequency = output[2]; + resonance = output[3]; + } +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + mouseDragged(x, y, button); +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/examples/ofx/rapidAPI006/src/ofApp.h b/examples/ofx/rapidAPI006/src/ofApp.h new file mode 100644 index 0000000..8574564 --- /dev/null +++ b/examples/ofx/rapidAPI006/src/ofApp.h @@ -0,0 +1,65 @@ +#pragma once + +#include "ofMain.h" +#include "ofxMaxim.h" +#include "ofxMaxim.h" +#include "maxiGrains.h" +#include "ofxOsc.h" +#include "regression.h" +#include <sys/time.h> + +#define HOST "localhost" +#define RECEIVEPORT 12000 +#define SENDPORT 6448 + +class ofApp : public ofBaseApp{ + +public: + void setup(); + void exit(); + void update(); + void draw(); + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + // + double modulationFrequency, modulationDepth; + double centerFrequency, resonance; + + void audioOut(float * output, int bufferSize, int nChannels); + + int bufferSize; + + int initialBufferSize; /* buffer size */ + int sampleRate; + ofxMaxiFFT fft; + ofxMaxiFFTOctaveAnalyzer oct; + int current; + double pos; + + double oscOutput, outputs[2]; + ofxMaxiOsc myWave, myLFO01; + ofxMaxiFilter myFilter; + maxiMix mymix; + + regression myRegression; + std::vector<trainingExample> trainingSet; + bool recording; + bool trained; + + //osc + ofxOscSender sender; + ofxOscReceiver receiver; + + bool isTraining; + +}; + + diff --git a/src/rapidMix.js b/src/rapidMix.js index 5543253..ae77937 100644 --- a/src/rapidMix.js +++ b/src/rapidMix.js @@ -127,107 +127,107 @@ Module.ModelSet = function () { /** * Trains the models using the input. Clears previous training set. - * @param {string} JSON_string - JSON loaded from a model set description document. + * @param {string} url - JSON loaded from a model set description document. * @returns {Boolean} true indicates successful training */ -Module.ModelSet.prototype.loadJSON = function (JSON_string) { - /* - var that = this; - var request = new XMLHttpRequest(); - request.open("GET", url, true); - request.responseType = "json"; - request.onload = function () { - */ - console.log("loaded", JSON.stringify(this.response)); - var modelSet = JSON_string; - var allInputs = modelSet.metadata.inputNames; - modelSet.modelSet.forEach(function (value) { - var numInputs = value.numInputs; - var whichInputs = new Module.VectorInt(); - switch (value.modelType) { - case 'kNN classification': - var neighbours = new Module.TrainingSet(); - var numExamples = value.numExamples; - var k = value.k; - var numClasses = value.numClasses; +Module.ModelSet.prototype.loadJSON = function (url) { + var that = this; + console.log('url ', url); + var request = new XMLHttpRequest(); + request.open("GET", 'modelSetDescription.json', true); + request.responseType = "jsonp"; + request.onload = function () { + console.log("req", this); + console.log("loaded", this.response); + var modelSet = this.responseText; + var allInputs = modelSet.metadata.inputNames; + modelSet.modelSet.forEach(function (value) { + var numInputs = value.numInputs; + var whichInputs = new Module.VectorInt(); + switch (value.modelType) { + case 'kNN classification': + var neighbours = new Module.TrainingSet(); + var numExamples = value.numExamples; + var k = value.k; + var numClasses = value.numClasses; - for (var i = 0; i < allInputs.length; ++i) { - if (value.inputNames.includes(allInputs[i])) { - whichInputs.push_back(i); + for (var i = 0; i < allInputs.length; ++i) { + if (value.inputNames.includes(allInputs[i])) { + whichInputs.push_back(i); + } } - } - var myKnn = new Module.KnnClassification(numInputs, whichInputs, neighbours, k); - value.examples.forEach(function (value) { - var features = new Module.VectorDouble(); - for (var i = 0; i < numInputs; ++i) { - features.push_back(parseFloat(value.features[i])); - } - myKnn.addNeighbour(parseInt(value.class), features); - }); - that.addkNNModel(myKnn); - break; - case 'Neural Network': - var numLayers = value.numHiddenLayers; - var numNodes = value.numHiddenNodes; - var weights = new Module.VectorDouble(); - var wHiddenOutput = new Module.VectorDouble(); - var inMax = new Module.VectorDouble(); - var inMin = new Module.VectorDouble(); - var outMax = value.outMax; - var outMin = value.outMin; + var myKnn = new Module.KnnClassification(numInputs, whichInputs, neighbours, k); + value.examples.forEach(function (value) { + var features = new Module.VectorDouble(); + for (var i = 0; i < numInputs; ++i) { + features.push_back(parseFloat(value.features[i])); + } + myKnn.addNeighbour(parseInt(value.class), features); + }); + that.addkNNModel(myKnn); + break; + case 'Neural Network': + var numLayers = value.numHiddenLayers; + var numNodes = value.numHiddenNodes; + var weights = new Module.VectorDouble(); + var wHiddenOutput = new Module.VectorDouble(); + var inMax = new Module.VectorDouble(); + var inMin = new Module.VectorDouble(); + var outMax = value.outMax; + var outMin = value.outMin; - var localWhichInputs = []; - for (var i = 0; i < allInputs.length; ++i) { - //console.log('allInputs[', i, '] = ', allInputs[i]); - //console.log(value.inputNames); - if (value.inputNames.includes(allInputs[i])) { - whichInputs.push_back(i); - localWhichInputs.push(i); + var localWhichInputs = []; + for (var i = 0; i < allInputs.length; ++i) { + //console.log('allInputs[', i, '] = ', allInputs[i]); + //console.log(value.inputNames); + if (value.inputNames.includes(allInputs[i])) { + whichInputs.push_back(i); + localWhichInputs.push(i); + } } - } - var currentLayer = 0; - value.nodes.forEach(function (value, i) { - if (value.name === 'Linear Node 0') { //Output Node - for (var j = 1; j <= numNodes; ++j) { - var whichNode = 'Node ' + (j + (numNodes * (numLayers - 1))); - wHiddenOutput.push_back(parseFloat(value[whichNode])); - //console.log("pushing output ", value[whichNode]); - } - wHiddenOutput.push_back(parseFloat(value.Threshold)); - } else { - currentLayer = Math.floor((i - 1) / numNodes); - if (currentLayer < 1) { //Nodes connected to input - for (var j = 0; j < numInputs; ++j) { - //console.log('j ', j, 'whichInputs ', localWhichInputs[j]); - //console.log("pushing", value['Attrib ' + allInputs[j]]); - weights.push_back(parseFloat(value['Attrib ' + allInputs[localWhichInputs[j]]])); - } - } else { //Hidden Layers + var currentLayer = 0; + value.nodes.forEach(function (value, i) { + if (value.name === 'Linear Node 0') { //Output Node for (var j = 1; j <= numNodes; ++j) { - weights.push_back(parseFloat(value['Node ' + (j + (numNodes * (currentLayer - 1)))])); + var whichNode = 'Node ' + (j + (numNodes * (numLayers - 1))); + wHiddenOutput.push_back(parseFloat(value[whichNode])); + //console.log("pushing output ", value[whichNode]); + } + wHiddenOutput.push_back(parseFloat(value.Threshold)); + } else { + currentLayer = Math.floor((i - 1) / numNodes); + if (currentLayer < 1) { //Nodes connected to input + for (var j = 0; j < numInputs; ++j) { + //console.log('j ', j, 'whichInputs ', localWhichInputs[j]); + //console.log("pushing", value['Attrib ' + allInputs[j]]); + weights.push_back(parseFloat(value['Attrib ' + allInputs[localWhichInputs[j]]])); + } + } else { //Hidden Layers + for (var j = 1; j <= numNodes; ++j) { + weights.push_back(parseFloat(value['Node ' + (j + (numNodes * (currentLayer - 1)))])); + } } + weights.push_back(parseFloat(value.Threshold)); } - weights.push_back(parseFloat(value.Threshold)); - } - }); + }); - for (var j = 0; j < numInputs; ++j) { - inMin.push_back(value.inMins[j]); - inMax.push_back(value.inMaxes[j]); - } + for (var j = 0; j < numInputs; ++j) { + inMin.push_back(value.inMins[j]); + inMax.push_back(value.inMaxes[j]); + } - var myNN = new Module.NeuralNetwork(numInputs, whichInputs, numLayers, numNodes, weights, wHiddenOutput, inMax, inMin, outMax, outMin); - that.addNNModel(myNN); - break; - default: - console.warn('unknown model type ', value.modelType); - break; - } - }); - //}; - //request.send(null); + var myNN = new Module.NeuralNetwork(numInputs, whichInputs, numLayers, numNodes, weights, wHiddenOutput, inMax, inMin, outMax, outMin); + that.addNNModel(myNN); + break; + default: + console.warn('unknown model type ', value.modelType); + break; + } + }); + }; + request.send(null); return true; //TODO: make sure this is true; }; -- GitLab