question
American Citizen <[email protected]> Thu, 30 Jul 2026 19:43:46 -0700
| Newsgroups | gmane.comp.mathematics.pari.user |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------V78Wbnr6nyixGx3THBBg1uRU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Does anyone have an up to date 2026 version of Denis Simon's 2011 script "ell.gp" ?? I attach it here, but it is crashing, sorry to say, in the bnfell2descent routines. I am trying to do some 2-cover optimizations for congruent number elliptic curves. I am current running version 2.17.4 Sorry if this is too cryptic. Randall --------------V78Wbnr6nyixGx3THBBg1uRU Content-Type: application/x-gnuplot; name="ell.gp" Content-Disposition: attachment; filename="ell.gp" Content-Transfer-Encoding: base64 XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFwKXFwgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIERlbmlzIFNpbW9uClxc ClxcIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgKEdQTCkKXFwKXFwgICAgVGhpcyBjb2RlIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsClxcICAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mClxcICAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VClxcICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KXFwKXFwgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgR1BMIGlzIGF2YWlsYWJsZSBhdDoK XFwKXFwgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8KXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFwKCi8qCiAgQXV0ZXVyIDoKICBEZW5pcyBTSU1PTiAtPiBzaW1vbkBtYXRoLnVu aWNhZW4uZnIKICBhZHJlc3NlIGR1IGZpY2hpZXIgOgogIHd3dy5tYXRoLnVuaWNhZW4uZnIv fnNpbW9uL2VsbC5ncAoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKICAqICAgICAgICAgIFZFUlNJT04gMDYvMDQvMjAxMSAgICAgICAgICAgICAg ICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAg XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXAogIFxcICAg IENvbW1lbnQgdXRpbGlzZXIgY2UgcHJvZ3JhbW1lID8gICAgICAgXFwKICBcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcCgogIFByb2dyYW1tZSBkZSBj YWxjdWwgZHUgcmFuZyBkZXMgY291cmJlcyBlbGxpcHRpcXVlcwogIGRhbnMgbGVzIGNvcnBz IGRlIG5vbWJyZXMuCiAgbGFuZ2FnZTogR1AKICBwb3VyIGwndXRpbGlzZXIsIGxhbmNlciBn cCwgcHVpcyB0YXBlcgogIFxyICIvaG9tZS9vd25lci9tYXRoL3BhcmkvZWxsLmdwIgoKICBc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcCiAgXFwgIERl c2NyaXB0aW9uIGRlcyBwcmluY2lwYWxlcyBmb25jdGlvbnMgICBcXAogIFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwKCiAgRXhwbGljYXRpb25zIHN1 Y2NpbnRlcyA6CiAgZGVmaW5pdGlvbiBkdSBjb3JwcyA6CiAgYm5mPWJuZmluaXQoeV4yKzEp OwogIChpbCBlc3QgaW5kaXNwZW5zYWJsZSBxdWUgbGEgdmFyaWFibGUgc29pdCB5KS4KICBv biBwZXV0IGVuc3VpdGUgcG9zZXIgOgogIFggPSBNb2QoeSxibmYucG9sKTsKCiAgTGEgZm9u Y3Rpb24gYm5mZWxscmFuaygpIGFjY2VwdGUgdG91dGVzIGxlcyBjb3VyYmVzIHNvdXMgbGEg Zm9ybWUKICBbYTEsYTIsYTMsYTQsYTZdCiAgTGVzIGNvZWZmaWNpZW50cyBwZXV2ZW50IGV0 cmUgZW50aWVycyBvdSBub24uCiAgTCdhbGdvcml0aG1lIHV0aWxpc2UgZXN0IGNlbHVpIGRl IGxhIDItZGVzY2VudGUuCiAgTGEgMi10b3JzaW9uIHBldXQgZXRyZSBxdWVsY29ucXVlLgog IElsIHN1ZmZpdCBkZSB0YXBlciA6CgogIGdwID4gZWxsID0gW2ExLGEyLGEzLGE0LGE2XTsK ICBncCA+IGJuZmVsbHJhbmsoYm5mLGVsbCkKCiAgUmV0b3VybmUgdW4gdmVjdGV1ciBbcixz LHZlY10KICBvdSByIGVzdCBsZSByYW5nIHByb2JhYmxlIChjJ2VzdCB0b3Vqb3VycyB1bmUg bWlub3JhdGlvbiBkdSByYW5nKSwKICBzIGVzdCBsZSAyLXJhbmcgZHUgZ3JvdXBlIGRlIFNl bG1lciwKICB2ZWMgZXN0IHVuZSBsaXN0ZSBkZSBwb2ludHMgZGFucyBFKEspLzJFKEspLgoK ICBDb3VyYmVzIGF2ZWMgI0VbMl0oSykgPj0gMjoKICBlbGwgZG9pdCBldHJlIHNvdXMgbGEg Zm9ybWUKICB5XjIgPSB4XjMgKyBBKl4yICsgQip4CiAgYXZlYyBBIGV0IEIgZW50aWVycyBh bGdlYnJpcXVlcwogIGdwID4gZWxsID0gWzAsQSwwLEIsMF0KICBncCA+IGJuZmVsbDJkZXNj ZW50X3ZpYWlzb2coZWxsKQogID0gYWxnb3JpdGhtZSBkZSBsYSAyLWRlc2NlbnRlIHBhciBp c29nZW5pZXMKICBBdHRlbnRpb24gQSBldCBCIGRvaXZlbnQgZXRyZSBlbnRpZXJzCgogIENv dXJiZXMgYXZlYyAjRVsyXShLKSA9IDQ6IHleMiA9ICh4LWUxKSooeC1lMikqKHgtZTMpCiAg LT4gYm5mZWxsMmRlc2NlbnRfY29tcGxldGUoYm5mLGUxLGUyLGUzKTsKICA9IGFsZ29yaXRo bWUgZGUgbGEgMi1kZXNjZW50ZSBjb21wbGV0ZQogIEF0dGVudGlvbjogbGVzIGVpIGRvaXZl bnQgZXRyZSBlbnRpZXJzIGFsZ2VicmlxdWVzLgoKCiAgXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXAogIFxcICAgICAgIEFmZmljaGFnZSBkZXMgY2Fs Y3VscyAgICAgICAgICAgICAgXFwKICBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcCgogIE9uIHBldXQgYXZvaXIgcGx1cyBvdSBtb2lucyBkZSBkZXRh aWxzIGRlIGNhbGN1bHMgYXZlYwogIERFQlVHTEVWRUxfZWxsID0gMDsKICBERUJVR0xFVkVM X2VsbCA9IDE7IDI7IDM7Li4uCgoqLwoKewpcXApcXCBVc3VhbCBnbG9iYWwgdmFyaWFibGVz ClxcCgpnbG9iYWwoREVCVUdMRVZFTF9lbGwsIExJTTEsIExJTTMsIExJTVRSSVYpOnNtYWxs OwoKICBERUJVR0xFVkVMX2VsbCA9IDA7IFxcIEZyb20gMCB0byA1IDogY2hvb3NlIGEgaGln aGVyIHZhbHVlIHRvIGhhdmUKICAgICAgICAgICAgICAgICAgICAgIFxcIG1vcmUgZGV0YWls cyBwcmludGVkLgogIExJTTEgPSAyOyAgICAgICAgICAgXFwgTGltaXQgZm9yIHRoZSBzZWFy Y2ggb2YgdHJpdmlhbCBwb2ludHMgb24gcXVhcnRpY3MKICBMSU0zID0gNDsgICAgICAgICAg IFxcIExpbWl0IGZvciB0aGUgc2VhcmNoIG9mIHBvaW50cyBvbiBFTFMgcXVhcnRpY3MKICBM SU1UUklWID0gMjsgICAgICAgIFxcIExpbWl0IGZvciB0aGUgc2VhcmNoIG9mIHRyaXZpYWwg cG9pbnRzIG9uIHRoZSBlbGxpcHRpYyBjdXJ2ZQoKXFwKXFwgIFRlY2huaWNhbCBnbG9iYWwg dmFyaWFibGVzClxcCgpnbG9iYWwoTUFYUFJPQiwgTElNQklHUFJJTUUpOnNtYWxsOwoKICBN QVhQUk9CID0gMjA7CiAgTElNQklHUFJJTUUgPSAzMDsgXFwgZm9yIHByaW1lcyBsYXJnZXIg dGhhbiB0aGlzIGxpbWl0OiB1c2UgYSBwcm9iYWJpbGlzdGljIHRlc3QKICAgICAgICAgICAg ICAgICAgICBcXCBMSU1CSUdQUklNRSA9IDAgbWVhbnM6IG9ubHkgZGV0ZXJtaW5pc3RpYyB0 ZXN0cwp9CgpcXCBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcClxcICAgICAgICAgIFNDUklQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwK XFwgXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXAoKXFwg XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXApcXCAgICBN QU5JUFVMQVRJT04gT0YgR0xPQkFMIFZBUklBQkxFUyAgICAgICAgIFxcClxcIFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwKCntkZWZhdWx0X2VsbCgK ICBERUJVR0xFVkVMX2VsbF92YWw6c21hbGwgPSAwLAogIExJTTFfdmFsOnNtYWxsID0gMiwK ICBMSU0zX3ZhbDpzbWFsbCA9IDQsCiAgTElNVFJJVl92YWw6c21hbGwgPSAyLAogIE1BWFBS T0JfdmFsOnNtYWxsID0gMjAsCiAgTElNQklHUFJJTUVfdmFsOnNtYWxsID0gMzAKICApID0K CiAgREVCVUdMRVZFTF9lbGwgPSBERUJVR0xFVkVMX2VsbF92YWw7CiAgcHJpbnQoIiAgREVC VUdMRVZFTF9lbGwgPSAiLERFQlVHTEVWRUxfZWxsKTsKCiAgTElNMSA9IExJTTFfdmFsOwog IHByaW50KCIgIExJTTEgPSAiLExJTTEpOwoKICBMSU0zID0gTElNM192YWw7CiAgcHJpbnQo IiAgTElNMyA9ICIsTElNMyk7CgogIExJTVRSSVYgPSBMSU1UUklWX3ZhbDsKICBwcmludCgi ICBMSU1UUklWID0gIixMSU1UUklWKTsKCiAgTUFYUFJPQiA9IE1BWFBST0JfdmFsOwogIHBy aW50KCIgIE1BWFBST0IgPSAiLE1BWFBST0IpOwoKICBMSU1CSUdQUklNRSA9IExJTUJJR1BS SU1FX3ZhbDsKICBwcmludCgiICBMSU1CSUdQUklNRSA9ICIsTElNQklHUFJJTUUpOwp9Cgpc XCBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcClxcICAg IENPTU1PTiBGVU5DVElPTlMgVE8gZWxsLmdwIEFORCBlbGxRLmdwICAgXFwKXFwgXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXAoKe2VsbGNvbXBvc2V1 cnN0KHVyc3QxLHVyc3QyKSA9Cm15KHUxID0gdXJzdDFbMV0sIHIxID0gdXJzdDFbMl0sIHMx ID0gdXJzdDFbM10sIHQxID0gdXJzdDFbNF0sCiAgICAgIHUyID0gdXJzdDJbMV0sIHIyID0g dXJzdDJbMl0sIHMyID0gdXJzdDJbM10sIHQyID0gdXJzdDJbNF0pOwogIFt1MSp1Mix1MV4y KnIyK3IxLHUxKnMyK3MxLHUxXjMqdDIrczEqdTFeMipyMit0MV07Cn0Ke2VsbGludmVydHVy c3QodXJzdCkgPQpteSh1ID0gdXJzdFsxXSwgciA9IHVyc3RbMl0sIHMgPSB1cnN0WzNdLCB0 ID0gdXJzdFs0XSk7CiAgWzEvdSwtci91XjIsLXMvdSwocipzLXQpL3VeM107Cn0Ke215c3Vi c3QocG9sc3Usc3Vic3gpID0KICBpZiggdHlwZShsaWZ0KHBvbHN1KSkgPT0gInRfUE9MIiwK ICAgIHJldHVybihzaW1wbGlmeShzdWJzdChsaWZ0KHBvbHN1KSx2YXJpYWJsZShsaWZ0KHBv bHN1KSksc3Vic3gpKSkKICAsIHJldHVybihzaW1wbGlmeShsaWZ0KHBvbHN1KSkpKTsKfQp7 ZGVncmUoaWRlZ3JlKSA9Cm15KGlkZWcgPSBpZGVncmUsIGpkZWcgPSAwKTsKCiAgd2hpbGUo IGlkZWcgPj49IDEsIGpkZWcrKyk7CiAgcmV0dXJuKGpkZWcpOwp9CntuZmlzc3F1YXJlKG5m LCBhKSA9ICNuZnNxcnQobmYsYSkgPiAwOwp9CntuZnNxcnQoIG5mLCBhKSA9ClxcIGlmIGEg aXMgYSBzcXVhcmUgaW4gdGhlIG51bWJlciBmaWVsZCBuZiByZXR1cm5zIFtzcXJ0KGEpXSwg b3RoZXJ3aXNlIFtdLgpteShhbGlmdCx0YSxweSxwZmFjdCk7CgppZiggREVCVUdMRVZFTF9l bGwgPj0gNSwgcHJpbnQoIiAgICAgc3RhcnRpbmcgbmZzcXJ0ICIsYSkpOwogIGlmKCBhPT0w IHx8IGE9PTEsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2Yg bmZzcXJ0ICIsYSkpOwogICAgcmV0dXJuKFthXSkpOwoKICBhbGlmdCA9IGxpZnQoYSk7CiAg dGEgPSB0eXBlKGEpOwogIGlmKCAhcG9sZGVncmVlKGFsaWZ0KSwgYWxpZnQgPSBwb2xjb2Vm ZihhbGlmdCwwKSk7CgogIGlmKCB0eXBlKGFsaWZ0KSAhPSAidF9QT0wiLAogICAgaWYoIGlz c3F1YXJlKGFsaWZ0KSwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVu ZCBvZiBuZnNxcnQgIixzcXJ0cmF0KGFsaWZ0KSkpOwogICAgICByZXR1cm4oW3NxcnRyYXQo YWxpZnQpXSkpKTsKCiAgaWYoIHBvbGRlZ3JlZShuZi5wb2wpIDw9IDEsCmlmKCBERUJVR0xF VkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZzcXJ0ICIsW10pKTsKICAgIHJl dHVybihbXSkpOwogIGlmKCB0YSA9PSAidF9QT0wiLCBhID0gTW9kKGEsbmYucG9sKSk7Cgpc XCB0aGUgbm9ybSBzaG91bGQgYmUgYSBzcXVhcmUKCiAgaWYoICFpc3NxdWFyZShub3JtKGEp KSwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBuZnNxcnQg IixbXSkpOwogICAgICByZXR1cm4oW10pKTsKClxcIHRoZSByZWFsIGVtYmVkZGluZ3MgbXVz dCBhbGwgYmUgPjAKCiAgZm9yKCBpID0gMSwgbmYucjEsCiAgICBpZiggbmZyZWFsc2lnbihu ZixhLGkpIDwgMCwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBv ZiBuZnNxcnQgIixbXSkpOwogICAgICByZXR1cm4oW10pKSk7CgpcXCBmYWN0b3JpemF0aW9u IG92ZXIgbmYgb2YgdGhlIHBvbHlub21pYWwgWF4yLWEKCiAgaWYoIHZhcmlhYmxlKG5mLnBv bCkgPT0gJ3gsCiAgICBweSA9IHN1YnN0KG5mLnBvbCwneCwneSk7CiAgICBwZmFjdCA9IGxp ZnQoZmFjdG9ybmYoJ3heMi1teXN1YnN0KGFsaWZ0LE1vZCgneSxweSkpLHB5KVsxLDFdKQog ICwKICAgIHBmYWN0ID0gbGlmdChmYWN0b3JuZigneF4yLWEsbmYucG9sKVsxLDFdKSk7CiAg aWYoIHBvbGRlZ3JlZShwZmFjdCkgPT0gMiwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHBy aW50KCIgICAgIGVuZCBvZiBuZnNxcnQgIixbXSkpOwogICAgcmV0dXJuKFtdKSk7CmlmKCBE RUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZzcXJ0ICIscGZhY3Qp KTsKICByZXR1cm4oW3N1YnN0KHBvbGNvZWZmKHBmYWN0LDApLCd5LE1vZCh2YXJpYWJsZShu Zi5wb2wpLG5mLnBvbCkpXSk7Cn0Ke25mcmVhbHNpZ24obmYsYSxpKSA9ClxcIHJldHVybiB0 aGUgc2lnbiBvZiB0aGUgYWxnZWJyYWljIG51bWJlciBhIGluIHRoZSBpLXRoIHJlYWwgZW1i ZWRkaW5nLgpteShuZl9yb290cyxheSxwcmVjMCk7CgogIGlmKCBhID09IDAsIHJldHVybigw KSk7CgogIGEgPSBsaWZ0KGEpOwogIGlmKCB0eXBlKGEpICE9ICJ0X1BPTCIsCiAgICByZXR1 cm4oc2lnbihhKSkpOwoKICBuZl9yb290cyA9IG5mLnJvb3RzOwogIHByZWMwID0gZGVmYXVs dChyZWFscHJlY2lzaW9uKTsKCiAgYXkgPSAwOwogIHdoaWxlKCBheSA9PSAwIHx8IHByZWNp c2lvbihheSkgPCAxMCwKCiAgICBheSA9IHN1YnN0KGEsdmFyaWFibGUoYSksbmZfcm9vdHNb aV0pOwoKICAgIGlmKCBheSA9PSAwIHx8IHByZWNpc2lvbihheSkgPCAxMCwKaWYoIERFQlVH TEVWRUxfZWxsID49IDMsCiAgcHJpbnQoIiAqKioqIFdhcm5pbmc6IGRvdWJsaW5nIHRoZSBy ZWFsIHByZWNpc2lvbiBpbiBuZnJlYWxzaWduICoqKiogIiwKICAgICAgICAyKmRlZmF1bHQo cmVhbHByZWNpc2lvbikpKTsKICAgICAgZGVmYXVsdChyZWFscHJlY2lzaW9uLDIqZGVmYXVs dChyZWFscHJlY2lzaW9uKSk7CiAgICAgIG5mX3Jvb3RzID0gcmVhbChwb2xyb290cyhuZi5w b2wpKQogICAgKQogICk7CiAgZGVmYXVsdChyZWFscHJlY2lzaW9uLHByZWMwKTsKCiAgcmV0 dXJuKHNpZ24oYXkpKTsKfQp7c3FydHJhdChhKSA9CiAgc3FydGludChudW1lcmF0b3IoYSkp L3NxcnRpbnQoZGVub21pbmF0b3IoYSkpOwp9CgpcXCBcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcClxcICAgICAgRlVOQ1RJT05TIFNQRUNJRklDIFRP IGVsbC5ncCAgICAgICAgICBcXApcXCBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcCgp7bmZwb2xyYXRyb290cyhuZixwb2wpID0KbXkoZixhbnMpOwog IGYgPSBuZmZhY3RvcihuZixsaWZ0KHBvbCkpWywxXTsKICBhbnMgPSBbXTsKICBmb3IoIGog PSAxLCAjZiwKICAgIGlmKCBwb2xkZWdyZWUoZltqXSkgPT0gMSwKICAgICAgYW5zID0gY29u Y2F0KGFucyxbLXBvbGNvZWZmKGZbal0sMCkvcG9sY29lZmYoZltqXSwxKV0pKSk7CiAgcmV0 dXJuKGFucyk7Cn0Ke215bmZoaWxiZXJ0MihuZixhLGIscCkgPQpcXCBwIGlzIGEgcHJpbWUg b3V0cHV0IGJ5IGlkZWFscHJpbWVkZWMoKSBhYm92ZSAyCm15KHYscmVzKTsKCmlmKCBERUJV R0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBzdGFydGluZyBteW5maGlsYmVydDIiKSk7 CiAgdiA9IGlkZWFsdmFsKG5mLGEscClcMjsKICBpZiggdiwgYSAqPSBuZmJhc2lzdG9hbGco bmYscFsyXSleKC0yKnYpKTsKCiAgdiA9IGlkZWFsdmFsKG5mLGIscClcMjsKICBpZiggdiwg YiAqPSBuZmJhc2lzdG9hbGcobmYscFsyXSleKC0yKnYpKTsKCiAgaWYoIG5mcXBfc29sdWJs ZShuZixhKid4XjIrYixpbml0cChuZixwKSksIHJlcyA9IDEsIHJlcyA9IC0xKTsKaWYoIERF QlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBteW5maGlsYmVydDIiLHJl cykpOwogIHJldHVybihyZXMpOwp9CntteW5maGlsYmVydHAobmYsYSxiLHApID0KXFwgY2Fs Y3VsZSBsZSBzeW1ib2xlIGRlIEhpbGJlcnQgcXVhZHJhdGlxdWUgbG9jYWwgKGEsYilfcApc XCAqIGVuIGwnaWRlYWwgcHJlbWllciBwIGR1IGNvcnBzIG5mLApcXCAqIGEgZXQgYiBzb250 IGRlcyBlbGVtZW50cyBub24gbnVscyBkZSBuZiwgc291cyBsYSBmb3JtZQpcXCAqIGRlIHBv bG1vZHMgb3UgZGUgcG9seW5vbWVzLCBldCBwIHJlbnZveWUgcGFyIGlkZWFscHJpbWVkZWMo KS4KCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBzdGFydGluZyBteW5m aGlsYmVydHAgYXQgIixwKSk7CiAgaWYoIGEgPT0gMCB8fCBiID09IDAsIGVycm9yKCJteW5m aGlsYmVydHA6IGFyZ3VtZW50ID0gMCIpKTsKICBpZiggcC5wID09IDIsCmlmKCBERUJVR0xF VkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbXluZmhpbGJlcnRwIikpOwogICAg cmV0dXJuKG15bmZoaWxiZXJ0MihuZixhLGIscCkpKTsKICBpZiggdHlwZShhKSAhPSAidF9Q T0xNT0QiLCBhID0gTW9kKGEsbmYucG9sKSk7CiAgaWYoIHR5cGUoYikgIT0gInRfUE9MTU9E IiwgYiA9IE1vZChiLG5mLnBvbCkpOwpyZXR1cm4obmZoaWxiZXJ0KG5mLGEsYixwKSk7Cn0K e2lkZWFsbGlzdGZhY3RvcihuZixsaXN0ZmFjdCkgPQpteShTbGlzdCxTMSx0ZXN0LGspOwoK aWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIHN0YXJ0aW5nIGlkZWFsbGlz dGZhY3RvciIpKTsKICBTbGlzdCA9IFtdOyB0ZXN0ID0gMTsKICBmb3IoIGkgPSAxLCAjbGlz dGZhY3QsCiAgICBpZiggbGlzdGZhY3RbaV0gPT0gMCwgbmV4dCk7CiAgICBTMSA9IGlkZWFs ZmFjdG9yKG5mLGxpc3RmYWN0W2ldKVssMV07CiAgICBmb3IoIGogPSAxLCAjUzEsIGsgPSAj U2xpc3Q7IGs9azsKICAgICAgZm9yKCBrID0gMSwgI1NsaXN0LAogICAgICAgIGlmKCBTbGlz dFtrXSA9PSBTMVtqXSwgdGVzdCA9IDA7IGJyZWFrKSk7CiAgICAgIGlmKCB0ZXN0LCBTbGlz dCA9IGNvbmNhdChTbGlzdCxbUzFbal1dKSwgdGVzdCA9IDEpOwogICAgICkpOwppZiggREVC VUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgZW5kIG9mIGlkZWFsbGlzdGZhY3RvciIp KTsKICByZXR1cm4oU2xpc3QpOwp9CntteW5maGlsYmVydChuZixhLGIpID0KXFwgY2FsY3Vs ZSBsZSBzeW1ib2xlIGRlIEhpbGJlcnQgcXVhZHJhdGlxdWUgZ2xvYmFsIChhLGIpOgpcXCA9 MSBzaSBsJ2VxdWF0aW9uIFheMi1hWV4yLWJaXjI9MCBhIHVuZSBzb2x1dGlvbiBub24gdHJp dmlhbGUsClxcID0tMSBzaW5vbiwKXFwgYSBldCBiIGRvaXZlbnQgZXRyZSBub24gbnVscy4K bXkoYWwsYmwsUyk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBzdGFy dGluZyBteW5maGlsYmVydCAiLFthLGJdKSk7CiAgaWYoIGEgPT0gMCB8fCBiID09IDAsIGVy cm9yKCJteW5maGlsYmVydCA6IGFyZ3VtZW50ID0gMCIpKTsKICBhbCA9IGxpZnQoYSk7IGJs ID0gbGlmdChiKTsKClxcIHNvbHV0aW9ucyBsb2NhbGVzIGF1eCBwbGFjZXMgcmVlbGxlcwoK ICBmb3IoIGkgPSAxLCBuZi5yMSwKICAgIGlmKCBuZnJlYWxzaWduKG5mLGFsLGkpIDwgMCAm JiBuZnJlYWxzaWduKG5mLGJsLGkpIDwgMCwKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHBy aW50KCIgICBteW5maGlsYmVydDogbm8gc29sdXRpb24gYXQgaW5maW5pdHkiKSk7CmlmKCBE RUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIGVuZCBvZiBteW5maGlsYmVydCIpKTsK ICAgICAgcmV0dXJuKC0xKSkKICApOwoKICBpZiggdHlwZShhKSAhPSAidF9QT0xNT0QiLCBh ID0gTW9kKGEsbmYucG9sKSk7CiAgaWYoIHR5cGUoYikgIT0gInRfUE9MTU9EIiwgYiA9IE1v ZChiLG5mLnBvbCkpOwoKXFwgIHNvbHV0aW9ucyBsb2NhbGVzIGF1eCBwbGFjZXMgZmluaWVz IChjZWxsZXMgcXVpIGRpdmlzZW50IDJhYikKCiAgUyA9IGlkZWFsbGlzdGZhY3RvcihuZixb MixhLGJdKTsKICBmb3JzdGVwICggaSA9ICNTLCAyLCAtMSwKXFwgZCdhcHJlcyBsYSBmb3Jt dWxlIGR1IHByb2R1aXQgb24gcGV1dCBldml0ZXIgdW4gcHJlbWllcgogICAgaWYoIG15bmZo aWxiZXJ0cChuZixhLGIsIFNbaV0pID09IC0xLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMywg cHJpbnQoIiAgIG15bmZoaWxiZXJ0OiBubyBzb2x1dGlvbiBhdDogIixTW2ldKSk7CmlmKCBE RUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIGVuZCBvZiBteW5maGlsYmVydCIpKTsK ICAgICAgcmV0dXJuKC0xKSkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAg ICBlbmQgb2YgbXluZmhpbGJlcnQiKSk7CiAgcmV0dXJuKDEpOwp9Cntpbml0cCggbmYsIHAp ID0KXFwgICBwcFsxXSBlc3QgbCdpZGVhbCBzb3VzIGZvcm1lIHJlZHVpdGUKXFwgICBwcFsy XSBlc3QgdW4gZW50aWVyIGRlIFprIGF2ZWMgdW5lIHZhbHVhdGlvbiAxIGVuIHAKXFwgICBw cFszXSBlc3QgbGEgdmFsdWF0aW9uIGRlIDIgZW4gcApcXCAgIHBwWzRdIHNlcnQgYSBkZXRl Y3RlciBsZXMgY2FycmVzIGRhbnMgUXAKXFwgICAgIHNpIHB8MiBpbCBmYXV0IGxhIHN0cnVj dHVyZSBkZSBaay9wXigxKzJ2KSBkJ2FwcmVzIEhlbnNlbApcXCAgICAgc2lub24gaWwgc3Vm Zml0IGRlIGNhbGN1bGVyIHheKE4ocCktMSkvMgpcXCAgIHBwWzVdIGVzdCB1biBzeXN0ZW1l IGRlIHJlcHJlc2VudGFudHMgZGUgWmsvcApcXCAgICAgYydlc3QgZG9uYyB1biBlbnNlbWJs ZSBkZSBjYXJkaW5hbCBwXmYgLgpteShpZHZhbCxwcCk7CgppZiggREVCVUdMRVZFTF9lbGwg Pj0gNSwgcHJpbnQoIiAgICAgc3RhcnRpbmcgaW5pdHAgZm9yIHAgPSAiLHApKTsKICBpZHZh bCA9IGlkZWFsdmFsKG5mLDIscCk7CiAgcHA9WyBwLCBuZmJhc2lzdG9hbGcobmYscFsyXSks IGlkdmFsLCAwLCByZXByZXMobmYscCkgXTsKICBpZiggaWR2YWwsCiAgICBwcFs0XSA9IGlk ZWFsc3RhcihuZixpZGVhbHBvdyhuZixwLDErMippZHZhbCkpLAogICAgcHBbNF0gPSBwLnBe cC5mXDIgKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBp bml0cCIpKTsKICByZXR1cm4ocHApOwp9CntkZW5vKG51bSkgPQpcXCBjYWxjdWxlIHVuIGRl bm9taW5hdGV1ciBkdSBwb2x5bm9tZSBudW0KCiAgaWYoIG51bSA9PSAwLCByZXR1cm4oMSkp OwogIGlmKCB0eXBlKG51bSkgPT0gInRfUE9MIiwKICAgICByZXR1cm4oZGVub21pbmF0b3Io Y29udGVudChudW0pKSkpOwogIHJldHVybihkZW5vbWluYXRvcihudW0pKTsKfQp7bmZyYXRw b2ludChuZixwb2wsbGltLHNpbmdsZXBvaW50PTEpID0KXFwgU2kgc2luZ2xlcG9pbnQgPT0g MSwgY2hlcmNoZSB1biBzZXVsIHBvaW50LCBzaW5vbiBwbHVzaWV1cnMuCm15KGNvbXB0MSxj b21wdDIsZGVnLG4sQUEscG9pbnQsbGlzdHBvaW50cyx2ZWN0eCxldnBvbCxzcSx4cG9sKTsK CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LAogIHByaW50KCIgICAgc3RhcnRpbmcgbmZyYXRw b2ludCB3aXRoIHBvbCA9ICIscG9sKTsKICBwcmludCgiICAgIGxpbSA9ICIsbGltKSk7Cgog IGNvbXB0MSA9IDA7IGNvbXB0MiA9IDA7CiAgZGVnID0gcG9sZGVncmVlKHBvbCk7IG4gPSBw b2xkZWdyZWUobmYucG9sKTsKICBBQSA9IGxpbTw8MTsKICBpZiggIXNpbmdsZXBvaW50LCBs aXN0cG9pbnRzID0gW10pOwoKXFwgY2FzIHRyaXZpYXV4CiAgc3EgPSBuZnNxcnQobmYscG9s Y29lZmYocG9sLDApKTsKICBpZiggc3EhPSBbXSwKICAgIHBvaW50ID0gWyAwLCBzcVsxXSwg MV07CiAgICBpZiggc2luZ2xlcG9pbnQsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmlu dCgiICAgIGVuZCBvZiBuZnJhdHBvaW50IikpOwogICAgICByZXR1cm4ocG9pbnQpKTsKICAg IGxpc3Rwb2ludHMgPSBjb25jYXQobGlzdHBvaW50cyxbcG9pbnRdKQogICk7CiAgc3EgPSBu ZnNxcnQobmYscG9sbGVhZChwb2wpKTsKICBpZiggc3EgIT0gW10sCiAgICBwb2ludCA9IFsg MSwgc3FbMV0sIDBdOwogICAgaWYoIHNpbmdsZXBvaW50LAppZiggREVCVUdMRVZFTF9lbGwg Pj0gNCwgcHJpbnQoIiAgICBlbmQgb2YgbmZyYXRwb2ludCIpKTsKICAgICAgcmV0dXJuKHBv aW50KSk7CiAgICBsaXN0cG9pbnRzID0gY29uY2F0KGxpc3Rwb2ludHMsW3BvaW50XSkKICAp OwoKXFwgYm91Y2xlIGdlbmVyYWxlCiAgcG9pbnQgPSBbXTsKICB2ZWN0eCA9IHZlY3Rvcihu LGksWy1saW0sbGltXSk7CiAgZm9yKCBkZW5veiA9IDEsIGxpbSwKICAgIGlmKCBwb2xkZWdy ZWUocG9sKSUyID09IDAgJiYKICAgICAgICFpc3NxdWFyZShNb2Qobm9ybShwb2xsZWFkKHBv bCkpLGRlbm96KSksIG5leHQpOwogICAgZm9ydmVjKCB4eCA9IHZlY3R4LAogICAgICBpZigg ZGVub3ogPT0gMSB8fCBnY2QoY29udGVudCh4eCksZGVub3opID09IDEsCiAgICAgICAgeHBv bCA9IG5mYmFzaXN0b2FsZyhuZix4eH4pOwogICAgICAgIGV2cG9sID0gc3Vic3QocG9sLCd4 LHhwb2wvZGVub3opOwogICAgICAgIHNxID0gbmZzcXJ0KG5mLGV2cG9sKTsKICAgICAgICBp Ziggc3EgIT0gW10sCiAgICAgICAgICBwb2ludCA9IFt4cG9sL2Rlbm96LCBzcVsxXSwgMV07 CiAgICAgICAgICBpZiggc2luZ2xlcG9pbnQsIGJyZWFrKDIpKTsKICAgICAgICAgIGxpc3Rw b2ludHMgPSBjb25jYXQobGlzdHBvaW50cyxbcG9pbnRdKSkpOwogICkpOwoKICBpZiggc2lu Z2xlcG9pbnQsIGxpc3Rwb2ludHMgPSBwb2ludCk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAz LCBwcmludCgiICAgcG9pbnRzIGZvdW5kIGJ5IG5mcmF0cG9pbnQgPSAiLGxpc3Rwb2ludHMp KTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgZW5kIG9mIG5mcmF0cG9p bnQiKSk7CiAgcmV0dXJuKFZlYyhsaXN0cG9pbnRzKSk7Cn0Ke3JlcHJlcyhuZixwKSA9Clxc IGNhbGN1bGUgdW4gc3lzdGVtZSBkZSByZXByZXNlbnRhbnRzIFprL3AKbXkoZm9uZCxtYXQs ZixyZXAscHAscHBpLHBwMixqcHBpLGdqZik7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwg cHJpbnQoIiAgICAgc3RhcnRpbmcgcmVwcmVzIikpOwogIGZvbmQgPSBbXTsKICBtYXQgPSBp ZGVhbGhuZihuZixwKTsKICBmb3IoIGkgPSAxLCAjbWF0LAogICAgaWYoIG1hdFtpLGldICE9 IDEsIGZvbmQgPSBjb25jYXQoZm9uZCxuZi5uZls3XVtpXSkpKTsKICBmID0gI2ZvbmQ7CiAg cHAgPSBwLnA7CiAgcmVwID0gdmVjdG9yKHBwXmYsaSwwKTsKICByZXBbMV0gPSAwOwogIHBw aSA9IDE7CiAgcHAyID0gcHBcMjsKICBmb3IoIGkgPSAxLCBmLAogICAgZm9yKCBqID0gMSwg cHAtMSwKICAgICAgaWYoIGogPD0gcHAyLCBnamYgPSBqKmZvbmRbaV0sIGdqZiA9IChqLXBw KSpmb25kW2ldKTsKICAgICAganBwaSA9IGoqcHBpOwogICAgICBmb3IoIGsgPSAwLCBwcGkt MSwgcmVwW2pwcGkraysxXSA9IHJlcFtrKzFdK2dqZiApKTsKICAgIHBwaSAqPSBwcCk7Cmlm KCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgcmVwcmVzIikpOwog IHJldHVybihNb2QocmVwLG5mLnBvbCkpOwp9Cnt2YWwobmYsbnVtLHApID0KICBpZiggbnVt ID09IDAsIDMyMDAwLCBpZGVhbHZhbChuZixsaWZ0KG51bSkscCkpOwp9CntuZmlzc3F1YXJl bW9kcG9kZCggbmYsIGEsIHApID0KXFwgUmV0dXJuIDEgaWYgYSBpcyBhIHAtYWRpYyBzcXVh cmUsIDAgb3RoZXJ3aXNlLgpcXCBPbmx5IGZvciBhIHByaW1lIGlkZWFsIHAgY29wcmltZSB0 byAyLgpcXCBhID0gdF9QT0xNT0QKbXkodixhcCxub3JtZSxkZW4pOwoKaWYoIERFQlVHTEVW RUxfZWxsID49IDUsIHByaW50KCIgICAgIHN0YXJ0aW5nIG5maXNzcXVhcmVtb2Rwb2RkIikp OwogIGlmKCBhID09IDAsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBl bmQgb2YgbmZpc3NxdWFyZW1vZHBvZGQiKSk7CiAgICByZXR1cm4oMSkpOwogIHYgPSBpZGVh bHZhbChuZixsaWZ0KGEpLHApOwogIGlmKCB2JTIsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1 LCBwcmludCgiICAgICBlbmQgb2YgbmZpc3NxdWFyZW1vZHBvZGQiKSk7CiAgICByZXR1cm4o MCkpOwogIGFwID0gYS9uZmJhc2lzdG9hbGcobmYscFsyXSledjsKCiAgbm9ybWUgPSAocC5w XnAuZi0xKS8yOwogIGRlbiA9IGRlbm9taW5hdG9yKGNvbnRlbnQobGlmdChhcCkpKSVwLnA7 CiAgaWYoIHNpZ24oZGVuKSwgYXAgKj0gTW9kKDEscC5wKSk7CiAgYXAgPSBhcF5ub3JtZS0x OwogIGlmKCBhcCA9PSAwLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAg ZW5kIG9mIG5maXNzcXVhcmVtb2Rwb2RkIikpOwogICAgcmV0dXJuKDEpKTsKICBhcCA9IGxp ZnQobGlmdChhcCkpOwogIGlmKCBpZGVhbHZhbChuZixhcCxwKSA+IDAsCmlmKCBERUJVR0xF VkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZpc3NxdWFyZW1vZHBvZGQiKSk7 CiAgICByZXR1cm4oMSkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAg ZW5kIG9mIG5maXNzcXVhcmVtb2Rwb2RkIikpOwogIHJldHVybigwKTsKfQp7bmZpc3NxdWFy ZW1vZHAoIG5mLCBhLCBwLCB6aW5pdCkgPQpcXCBhIGlzIGFuIGFsZ2VicmFpYyBpbnRlZ2Vy IG9mIG5mClxcIHJldHVybnMgMSBpZiBhIGlzIGEgc3F1YXJlIG1vZHVsbyB0aGUgcHJpbWUg aWRlYWwgcCwgMCBvdGhlcndpc2UKXFwgYSA9IHRfUE9MTU9ECm15KHZhbGFwLHpsb2cpOwoK aWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIHN0YXJ0aW5nIG5maXNzcXVh cmVtb2RwICIsW2EscCx6aW5pdF0pKTsKICBpZiggYSA9PSAwLAppZiggREVCVUdMRVZFTF9l bGwgPj0gNSwgcHJpbnQoIiAgICAgZW5kIG9mIG5maXNzcXVhcmVtb2RwIikpOwogICAgcmV0 dXJuKDEpKTsKCiAgaWYoIHAucCAhPSAyLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJp bnQoIiAgICAgZW5kIG9mIG5maXNzcXVhcmVtb2RwIikpOwogICAgcmV0dXJuKG5maXNzcXVh cmVtb2Rwb2RkKG5mLGEscCkpKTsKCiAgdmFsYXAgPSBpZGVhbHZhbChuZixhLHApOwogIGlm KCB2YWxhcCUyLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgZW5kIG9m IG5maXNzcXVhcmVtb2RwIikpOwogICAgcmV0dXJuKDApKTsKICBpZiggdmFsYXAsCiAgICB6 bG9nID0gaWRlYWxsb2cobmYsYSoobmZiYXNpc3RvYWxnKG5mLHBbNV0pL3AucCledmFsYXAs emluaXQpCiAgLAogICAgemxvZyA9IGlkZWFsbG9nKG5mLGEsemluaXQpKTsKICBmb3IoIGkg PSAxLCAjemluaXRbMl1bMl0sCiAgICBpZiggISh6aW5pdFsyXVsyXVtpXSUyKSAmJiAoemxv Z1tpXSUyKSwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBu Zmlzc3F1YXJlbW9kcCIpKTsKICAgICAgcmV0dXJuKDApKSk7CmlmKCBERUJVR0xFVkVMX2Vs bCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZpc3NxdWFyZW1vZHAiKSk7CiAgcmV0dXJu KDEpOwp9CntuZmlzc3F1YXJlbW9kcHEoIG5mLCBhLCBwLCBxKSA9ClxcIGNldHRlIGZvbmN0 aW9uIHJlbnZvaWUgMSBzaSBhIGVzdCB1biBjYXJyZQpcXCA/aW52ZXJzaWJsZT8gbW9kdWxv IFBecSBldCAwIHNpbm9uLgpcXCBQIGRpdmlzZSAyLCBldCA/KGEscCk9MT8uCm15KHZhbGEs emluaXQsemxvZyk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgc3Rh cnRpbmcgbmZpc3NxdWFyZW1vZHBxICIsW2EscCxxXSkpOwogIGlmKCBhID09IDAsCmlmKCBE RUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZpc3NxdWFyZW1vZHBx IikpOwogICAgcmV0dXJuKDEpKTsKICB2YWxhID0gaWRlYWx2YWwobmYsYSxwKTsKICBpZigg dmFsYSA+PSBxLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgZW5kIG9m IG5maXNzcXVhcmVtb2RwcSIpKTsKICAgIHJldHVybigxKSk7CiAgaWYoIHZhbGElMiwKaWYo IERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBuZmlzc3F1YXJlbW9k cHEiKSk7CiAgICByZXR1cm4oMCkpOwogIHppbml0ID0gaWRlYWxzdGFyKG5mLGlkZWFscG93 KG5mLHAscS12YWxhKSwyKTsKICB6bG9nID0gaWRlYWxsb2cobmYsYSpuZmJhc2lzdG9hbGco bmYscFs1XS8yKV52YWxhLHppbml0KTsKICBmb3IoIGkgPSAxLCAjemluaXRbMl1bMl0sCiAg ICBpZiggISh6aW5pdFsyXVsyXVtpXSUyKSAmJiAoemxvZ1tpXSUyKSwKaWYoIERFQlVHTEVW RUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBuZmlzc3F1YXJlbW9kcHEiKSk7CiAg ICAgIHJldHVybigwKSkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAg ZW5kIG9mIG5maXNzcXVhcmVtb2RwcSIpKTsKICByZXR1cm4oMSk7Cn0Ke25mc3FydG1vZHBx KG5mLGEscCxxKSA9ClxcIHN1cHBvc2UgcXVlIGEgZXN0IHVuIGNhcnJlIG1vZHVsbyBwXnEK XFwgZXQgcmVudm9pZSB4IHRlbCBxdWUgIHheMiA9IGEgbW9kIHBecS4KbXkocF9obmYsZixh YWEscXEsZSx4eCx5eSxyLGF1eCxiLG0sdnAsaW52MngsemluaXQsemxvZyxleHBvLHBfaW5p LG5vbl9zcSxpZCk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICBzdGFy dGluZyBuZnNxcnRtb2RwcSAiLGEscCxxKSk7CiAgaWYoIGEgPT0gMCB8fCBhID09IDEsCmlm KCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgIGVuZCBvZiBuZnNxcnRtb2RwcSIp KTsKICAgIHJldHVybihhKSk7CiAgZiA9IGlkZWFsdmFsKG5mLGEscCk7CiAgaWYoIGYgPj0g cSwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGVuZCBvZiBuZnNxcnRt b2RwcSIpKTsKICAgIHJldHVybigwKSk7CmlmKCBmJTIsIGVycm9yKCJuZnNxcnRtb2RwcTog YSBpcyBub3QgYSBzcXVhcmUsIG9kZCB2YWx1YXRpb24iKSk7CiAgYSA9IG5mYWxndG9iYXNp cyhuZixhKTsKICBpZiggZiwgYWFhID0gbmZlbHRwb3cobmYsbmZlbHRkaXYobmYsYSxwWzVd L3AucCksZiksIGFhYSA9IGEpOwogIHBfaG5mID0gaWRlYWxobmYobmYscCk7CiAgcF9pbmkg PSBuZm1vZHByaW5pdChuZixwKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIg ICAgIHBfaG5mID0gIixwX2huZikpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQo IiAgICAgcF9pbmkgPSAiLHBfaW5pKSk7CgogIGlmKCBwLnAgIT0gMiwKXFwgZmlyc3QgY2Fz ZSA6IHAgaXMgb2RkCgpcXCBTaGFua3Mgc3FydCBhbGdvcml0aG0KaWYoIERFQlVHTEVWRUxf ZWxsID49IDUsIHByaW50KCIgICAgIFNoYW5rcyBzcXJ0IGFsZ29yaXRobSIpKTsKICAgIG5v bl9zcSA9IG5mcmFuZGludG1vZGlkKG5mLHBfaG5mKTsKICAgIHdoaWxlKCBuZmlzc3F1YXJl bW9kcG9kZChuZixub25fc3EscCksIG5vbl9zcSA9IG5mcmFuZGludG1vZGlkKG5mLHBfaG5m KSk7CiAgICBub25fc3EgPSBuZmFsZ3RvYmFzaXMobmYsbm9uX3NxKTsKICAgIHFxID0gKCBw LnBecC5mIC0xKSBcIDI7CiAgICBlID0gMTsgd2hpbGUoICEocXElMiksIGUrKzsgcXEgXD0g Mik7CiAgICBub25fc3EgPSBuZmVsdHBvd21vZHByKG5mLG5vbl9zcSxxcSxwX2luaSk7CiAg ICB5eSA9IG5vbl9zcTsgciA9IGU7CiAgICB4eCAgPSBuZmVsdHBvd21vZHByKG5mLGFhYSxx cVwyLHBfaW5pKTsKICAgIGF1eCA9IG5mZWx0bXVsbW9kcHIobmYsYWFhLHh4LHBfaW5pKTsK ICAgIGIgICA9IG5mZWx0bXVsbW9kcHIobmYsYXV4LHh4LHBfaW5pKTsKICAgIHh4ID0gYXV4 OwogICAgYXV4ID0gYjsgbSA9IDA7CiAgICB3aGlsZSggIXZhbChuZixuZmJhc2lzdG9hbGco bmYsYXV4KS0xLHApLAogICAgICAgbSsrOwogICAgICAgYXV4ID0gbmZlbHRwb3dtb2Rwcihu ZixhdXgsMixwX2luaSkKICAgICk7CiAgICB3aGlsZSggbSwKICAgICAgaWYoIG0gPT0gciwg ZXJyb3IoIm5mc3FydG1vZHBxOiBtID0gciIpKTsKICAgICAgYXV4ID0gbmZlbHRwb3dtb2Rw cihuZix5eSwxPDwoci1tLTEpLHBfaW5pKTsKICAgICAgeXkgID0gbmZlbHRwb3dtb2Rwcihu ZixhdXgsMixwX2luaSk7CiAgICAgIHIgPSBtOwogICAgICB4eCA9IG5mZWx0bXVsbW9kcHIo bmYseHgsYXV4LHBfaW5pKTsKICAgICAgYiAgPSBuZmVsdG11bG1vZHByKG5mLGIseXkscF9p bmkpOwogICAgICBhdXggPSBiO20gPSAwOwogICAgICB3aGlsZSggIXZhbChuZixuZmJhc2lz dG9hbGcobmYsYXV4KS0xLHApLAogICAgICAgIG0rKzsKICAgICAgICBhdXggPSBuZmVsdHBv d21vZHByKG5mLGF1eCwyLHBfaW5pKQogICAgICApCiAgICApOwoKXFwgbGlmdCBkZSBIZW5z ZWwKXFwKCiAgICB4eCA9IG5mYmFzaXN0b2FsZyhuZix4eCk7CiAgICBhYWE9IG5mYmFzaXN0 b2FsZyhuZixhYWEpOwogICAgaWYoIHEgPiAxLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwg cHJpbnQoIiAgICAgSGVuc2VsIGxpZnRpbmciKSk7CiAgICAgIHZwID0gaWRlYWx2YWwobmYs eHheMi1hYWEscCk7CiAgICAgIGlmKCB2cCA8IHEtZiwKICAgICAgICB5eSA9IDIqeHg7CiAg ICAgICAgaW52MnggPSBuZmJhc2lzdG9hbGcobmYsaWRlYWxhZGR0b29uZShuZix5eSxwKVsx XSkveXk7CiAgICAgICAgd2hpbGUoIHZwIDwgcSwgdnArKzsgeHggLT0gKHh4XjItYWFhKSpp bnYyeCk7CiAgICAgICk7CiAgICAgIGlmKCBmLCB4eCAqPSBuZmJhc2lzdG9hbGcobmYscFsy XSleKGZcMikpOwogICAgKTsKICAgIHh4ID0gbXluZmVsdHJlZHVjZShuZix4eCxpZGVhbHBv dyhuZixwLHEpKQogICwKXFwgY2FzIG91IHAgZGl2aXNlIDIgKi8KICAgIGlmKCBxLWYgPiAx LCBpZCA9IGlkZWFscG93KG5mLHAscS1mKSwgaWQgPSBwX2huZik7CiAgICB6aW5pdCA9IGlk ZWFsc3RhcihuZixpZCwyKTsKICAgIHpsb2cgPSBpZGVhbGxvZyhuZixhYWEsemluaXQpOwog ICAgeHggPSAxOwogICAgZm9yKCBpID0gMSwgI3psb2csCiAgICAgIGV4cG8gPSB6bG9nW2ld OwogICAgICBpZiggZXhwbywKICAgICAgICBpZiggIWV4cG8lMiwKICAgICAgICAgIGV4cG8g PSBleHBvPj4xCiAgICAgICAgLCBhdXggPSB6aW5pdFsyXVtpXTsKICAgICAgICAgIGV4cG8g PSBleHBvKigoYXV4KzEpPj4xKSVhdXgKICAgICAgICApOwogICAgICAgIHh4ICo9IG5mYmFz aXN0b2FsZyhuZix6aW5pdFsyXVszXVtpXSleZXhwbwogICAgICApCiAgICApOwogICAgaWYo IGYsCiAgICAgIHh4ICo9IG5mYmFzaXN0b2FsZyhuZixwWzJdKV4oZj4+MSk7CiAgICAgIGlk ID0gaWRlYWxwb3cobmYscCxxKSk7CiAgICB4eCA9IG15bmZlbHRyZWR1Y2UobmYseHgsaWQp OwogICk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgIGVuZCBvZiBuZnNx cnRtb2RwcSAiLHh4KSk7CiAgcmV0dXJuKHh4KTsKfQp7bmZsZW1tYTYoIG5mLCBwb2wsIHAs IG51LCB4eCkgPQpteShneCxncHgsbGFtYmRhLG11KTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+ PSA1LCBwcmludCgiICAgICBzdGFydGluZyBuZmxlbW1hNiIpKTsKICBneCA9IHN1YnN0KCBw b2wsICd4LCB4eCk7CiAgaWYoIG5maXNzcXVhcmVtb2Rwb2RkKG5mLGd4LHApLAppZiggREVC VUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgZW5kIG9mIG5mbGVtbWE2IikpOwogICAg cmV0dXJuKDEpKTsKICBncHggPSBzdWJzdCggcG9sJywgJ3gsIHh4KTsKICBsYW1iZGEgPSB2 YWwobmYsZ3gscCk7bXUgPSB2YWwobmYsZ3B4LHApOwoKICBpZiggbGFtYmRhPjIqbXUsCmlm KCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZsZW1tYTYiKSk7 CiAgICByZXR1cm4oMSkpOwogIGlmKCAobGFtYmRhID49IDIqbnUpICAmJiAobXUgPj0gbnUp LAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgZW5kIG9mIG5mbGVtbWE2 IikpOwogICAgcmV0dXJuKDApKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIg ICAgIGVuZCBvZiBuZmxlbW1hNiIpKTsKICByZXR1cm4oLTEpOwp9CntuZmxlbW1hNyggbmYs IHBvbCwgcCwgbnUsIHh4LCB6aW5pdCkgPQpteShneCxncHgsdixsYW1iZGEsbXUscSk7Cgpp ZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoImVudHJlZSBkYW5zIG5mbGVtbWE3ICIs W3h4LG51XSkpOwogIGd4ID0gc3Vic3QoIHBvbCwgJ3gsIHh4KTsKICBpZiggbmZpc3NxdWFy ZW1vZHAobmYsZ3gscCx6aW5pdCksCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgi ZmluIGRlIG5mbGVtbWE3IikpOwogICAgcmV0dXJuKDEpKTsKICBncHggPSBzdWJzdCggcG9s JywgJ3gsIHh4KTsKICB2ID0gcFszXTsKICBsYW1iZGEgPSB2YWwobmYsZ3gscCk7bXUgPSB2 YWwobmYsZ3B4LHApOwogIGlmKCBsYW1iZGE+MiptdSwKaWYoIERFQlVHTEVWRUxfZWxsID49 IDUsIHByaW50KCJmaW4gZGUgbmZsZW1tYTciKSk7CiAgICByZXR1cm4oMSkpOwogIGlmKCBu dSA+IG11LAogICAgaWYoIGxhbWJkYSUyLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJp bnQoImZpbiBkZSBuZmxlbW1hNyIpKTsKICAgICAgcmV0dXJuKC0xKSk7CiAgICBxID0gbXUr bnUtbGFtYmRhOwogICAgaWYoIHEgPiAyKnYsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBw cmludCgiZmluIGRlIG5mbGVtbWE3IikpOwogICAgICByZXR1cm4oLTEpKTsKICAgIGlmKCBu Zmlzc3F1YXJlbW9kcHEobmYsZ3gqbmZiYXNpc3RvYWxnKG5mLHBbNV0vMilebGFtYmRhLHAs cSksCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiZmluIGRlIG5mbGVtbWE3Iikp OwogICAgICByZXR1cm4oMSkpCiAgLAogICAgaWYoIGxhbWJkYSA+PSAyKm51LAppZiggREVC VUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoImZpbiBkZSBuZmxlbW1hNyIpKTsKICAgICAgcmV0 dXJuKDApKTsKICAgIGlmKCBsYW1iZGElMiwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHBy aW50KCJmaW4gZGUgbmZsZW1tYTciKSk7CiAgICAgIHJldHVybigtMSkpOwogICAgcSA9IDIq bnUtbGFtYmRhOwogICAgaWYoIHEgPiAyKnYsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBw cmludCgiZmluIGRlIG5mbGVtbWE3IikpOwogICAgICByZXR1cm4oLTEpKTsKICAgIGlmKCBu Zmlzc3F1YXJlbW9kcHEobmYsZ3gqbmZiYXNpc3RvYWxnKG5mLHBbNV0vMilebGFtYmRhLHAs cSksCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiZmluIGRlIG5mbGVtbWE3Iikp OwogICAgICByZXR1cm4oMCkpCiAgKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50 KCJmaW4gZGUgbmZsZW1tYTciKSk7CiAgcmV0dXJuKC0xKTsKfQp7bmZ6cF9zb2x1YmxlKCBu ZiwgcG9sLCBwLCBudSwgcG51LCB4MCkgPQpteShyZXN1bHQscG51cCxscmVwKTsKCmlmKCBE RUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiZW50cmVlIGRhbnMgbmZ6cF9zb2x1YmxlICIs W2xpZnQoeDApLG51XSkpOwogIGlmKCBwWzNdID09IDAsCiAgICByZXN1bHQgPSBuZmxlbW1h NihuZixwb2wscFsxXSxudSx4MCksCiAgICByZXN1bHQgPSBuZmxlbW1hNyhuZixwb2wscFsx XSxudSx4MCxwWzRdKSk7CiAgaWYoIHJlc3VsdCA9PSArMSwKaWYoIERFQlVHTEVWRUxfZWxs ID49IDUsIHByaW50KCJmaW4gZGUgbmZ6cF9zb2x1YmxlIikpOwogICAgcmV0dXJuKDEpKTsK ICBpZiggcmVzdWx0ID09IC0xLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoImZp biBkZSBuZnpwX3NvbHVibGUiKSk7CiAgICByZXR1cm4oMCkpOwogIHBudXAgPSBwbnUqcFsy XTsKICBscmVwID0gI3BbNV07CiAgbnUrKzsKICBmb3IoIGkgPSAxLCBscmVwLAogICAgaWYo IG5menBfc29sdWJsZShuZixwb2wscCxudSxwbnVwLHgwK3BudSpwWzVdW2ldKSwKaWYoIERF QlVHTEVWRUxfZWxsID49IDUsIHByaW50KCJmaW4gZGUgbmZ6cF9zb2x1YmxlIikpOwogICAg ICByZXR1cm4oMSkpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCJmaW4gZGUg bmZ6cF9zb2x1YmxlIikpOwogIHJldHVybigwKTsKfQp7bXluZmVsdG1vZChuZixhLGIpID0K bXkocXJlZCk7CgogIHFyZWQgPSByb3VuZChuZmFsZ3RvYmFzaXMobmYsYS9iKSk7CiAgcXJl ZCA9IGEtYipuZmJhc2lzdG9hbGcobmYscXJlZCk7CiAgcmV0dXJuKHFyZWQpOwp9CntteW5m ZWx0cmVkdWNlKG5mLGEsaWQpID0KICBuZmJhc2lzdG9hbGcobmYsbmZlbHRyZWR1Y2UobmYs bmZhbGd0b2Jhc2lzKG5mLGEpLGlkKSk7Cn0Ke25mcmFuZGludG1vZGlkKCBuZiwgaWQpID0K bXkocmVzKTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiZW50cmVlIGRhbnMg bmZyYW5kaW50bW9kaWQiKSk7CiAgcmVzID0gMDsKICB3aGlsZSggIXJlcywKICAgIHJlcyA9 IG5mcmFuZGludChuZiwwKTsKICAgIHJlcyA9IG15bmZlbHRyZWR1Y2UobmYscmVzLGlkKSk7 CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiZmluIGRlIG5mcmFuZGludG1vZGlk IikpOwogIHJldHVybihyZXMpOwp9CntuZnJhbmRpbnQoIG5mLCBib3JuZSkgPQpteShkLHJl cyk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgc3RhcnRpbmcgbmZy YW5kaW50IikpOwogIGQgPSBwb2xkZWdyZWUobmYucG9sKTsKICByZXMgPSB2ZWN0b3J2KGQs aSxpZiggYm9ybmUsIHJhbmRvbShib3JuZTw8MSktYm9ybmUsIHJhbmRvbSgpKSk7CiAgcmVz ID0gbmZiYXNpc3RvYWxnKG5mLHJlcyk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmlu dCgiICAgICBlbmQgb2YgbmZyYW5kaW50IikpOwogIHJldHVybihyZXMpOwp9CntuZnFwX3Nv bHVibGViaWcoIG5mLCBwb2wsIHAsYXA9MCxiPTEpID0KbXkoZGVnLHh4LHosUHgsY29udCxw aSxwb2wyLFJvb3RzKTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIHN0 YXJ0aW5nIG5mcXBfc29sdWJsZWJpZyBhdmVjICIscC5wKSk7CiAgZGVnID0gcG9sZGVncmVl KHBvbCk7CgogIGlmKCBuZmlzc3F1YXJlbW9kcG9kZChuZixwb2xjb2VmZihwb2wsMCkscCks CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIGVuZCBvZiBuZnFwX3NvbHVi bGViaWciKSk7CiAgICByZXR1cm4oMSkpOwogIGlmKCBuZmlzc3F1YXJlbW9kcG9kZChuZixw b2xsZWFkKHBvbCkscCksCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIGVu ZCBvZiBuZnFwX3NvbHVibGViaWciKSk7CiAgICByZXR1cm4oMSkpOwoKXFwgb24gdGllbnQg Y29tcHRlIGR1IGNvbnRlbnUgZGUgcG9sCiAgY29udCA9IGlkZWFsdmFsKG5mLHBvbGNvZWZm KHBvbCwwKSxwKTsKICBmb3IoIGkgPSAxLCBkZWcsCiAgICBpZiggY29udCwgY29udCA9IG1p bihjb250LGlkZWFsdmFsKG5mLHBvbGNvZWZmKHBvbCxpKSxwKSkpKTsKICBpZiggY29udCwg cGkgPSBuZmJhc2lzdG9hbGcobmYscFs1XS9wLnApKTsKICBpZiggY29udCA+IDEsIHBvbCAq PSBwaV4oMiooY29udFwyKSkpOwoKXFwgT24gZXNzYXllIGRlcyB2YWxldXJzIGRlIHggYXUg aGFzYXJkCiAgaWYoIGNvbnQlMiwKICAgIHBvbDIgPSBwb2wqcGkKICAsIHBvbDIgPSBwb2w7 CiAgICBmb3IoIGkgPSAxLCBNQVhQUk9CLAogICAgICB4eCA9IG5mcmFuZGludChuZiwwKTsK ICAgICAgeiA9IDA7IHdoaWxlKCAheiwgeiA9IHJhbmRvbSgpKTsKICAgICAgeHggPSAtYXAq eitiKnh4OwogICAgICBQeD1wb2xjb2VmZihwb2wsZGVnKTsKICAgICAgZm9yc3RlcCAoaj1k ZWctMSwwLC0xLFB4PVB4Knh4K3BvbGNvZWZmKHBvbCxqKSk7CiAgICAgIFB4ICo9IHpeZGVn OwogICAgICBpZiggbmZpc3NxdWFyZW1vZHBvZGQobmYsUHgscCksCmlmKCBERUJVR0xFVkVM X2VsbCA+PSA0LCBwcmludCgiICAgIGVuZCBvZiBuZnFwX3NvbHVibGViaWciKSk7CiAgICAg ICAgcmV0dXJuKDEpKTsKICAgICkKICApOwoKXFwgT24gZXNzYXllIGxlcyByYWNpbmVzIGRl IHBvbAogIFJvb3RzID0gbmZwb2xyb290c21vZChuZixwb2wyLHApOwogIHBpID0gbmZiYXNp c3RvYWxnKG5mLHBbMl0pOwogIGZvciggaSA9IDEsICNSb290cywKICAgIGlmKCBuZnFwX3Nv bHVibGViaWcobmYsc3Vic3QocG9sLCd4LHBpKid4K1Jvb3RzW2ldKSxwKSwKaWYoIERFQlVH TEVWRUxfZWxsID49IDQsIHByaW50KCJmaW4gZGUgbmZxcF9zb2x1YmxlYmlnIikpOwogICAg ICByZXR1cm4oMSkpKTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIGVu ZCBvZiBuZnFwX3NvbHVibGViaWciKSk7CiAgcmV0dXJuKDApOwp9CntuZnBvbHJvb3RzbW9k KG5mLHBvbCxwKSA9ClxcIGNhbGN1bGUgbGVzIHJhY2luZXMgbW9kdWxvIGwnaWRlYWwgcCBk dSBwb2x5bm9tZSBwb2wuClxcIHAgZXN0IHVuIGlkZWFsIHByZW1pZXIgZGUgbmYsIHNvdXMg bGEgZm9ybWUgaWRlYWxwcmltZWRlYwpteShmYWN0bGlzdCxzb2wpOwoKICBmYWN0bGlzdCA9 IG5mZmFjdG9ybW9kKG5mLHBvbCxwKVssMV07CiAgc29sID0gW107CiAgZm9yKCBpID0gMSwg I2ZhY3RsaXN0LAogICAgaWYoIHBvbGRlZ3JlZShmYWN0bGlzdFtpXSkgPT0gMSwKICAgICAg c29sID0gY29uY2F0KHNvbCwgWy1wb2xjb2VmZihmYWN0bGlzdFtpXSwwKS9wb2xjb2VmZihm YWN0bGlzdFtpXSwxKV0pKSk7CiAgcmV0dXJuKHNvbCk7Cn0Ke25mcXBfc29sdWJsZSggbmYs IHBvbCwgcCkgPQpcXCBwIGlzIGEgcHJpbWUgb3V0cHV0IGJ5IGluaXRwKCkKXFwgcmV0dXJu IDEgaWYgcG9sKHgpID0geV4yIGhhcyBhIHAtYWRpYyByYXRpb25hbCBzb2x1dGlvbgpcXCAo cG9zc2libHkgb28pClxcIGNvZWZmIG9mIG5mcWZzb2x1YmxlIG11c3QgYmUgaW50ZWdlcnMu CgppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgc3RhcnRpbmcgbmZxcF9z b2x1YmxlICIscCkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgcG9s ID0gIixwb2wpKTsKICBpZiggbmZpc3NxdWFyZW1vZHAobmYscG9sbGVhZChwb2wpLHBbMV0s cFs0XSksCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZx cF9zb2x1YmxlIikpOwogICAgcmV0dXJuKDEpKTsKICBpZiggbmZpc3NxdWFyZW1vZHAobmYs cG9sY29lZmYocG9sLDApLHBbMV0scFs0XSksCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBw cmludCgiICAgICBlbmQgb2YgbmZxcF9zb2x1YmxlIikpOwogICAgcmV0dXJuKDEpKTsKICBp ZiggbmZ6cF9zb2x1YmxlKG5mLHBvbCxwLDAsMSwwKSwKaWYoIERFQlVHTEVWRUxfZWxsID49 IDUsIHByaW50KCIgICAgIGVuZCBvZiBuZnFwX3NvbHVibGUiKSk7CiAgICByZXR1cm4oMSkp OwogIGlmKCBuZnpwX3NvbHVibGUobmYscG9scmVjaXAocG9sKSxwLDEsIHBbMl0sMCksCmlm KCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgbmZxcF9zb2x1Ymxl IikpOwogICAgcmV0dXJuKDEpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIg ICAgIGVuZCBvZiBuZnFwX3NvbHVibGUiKSk7CiAgcmV0dXJuKDApOwp9CntuZmxvY2FsbHlz b2x1YmxlKCBuZiwgcG9sLCByPTAsYT0xLGI9MSkgPQpcXCBUZXN0IHdoZXRoZXIgWV4yID0g cG9sIGlzIEV2ZXJ5d2hlcmUgTG9jYWxseSBTb2x1YmxlCm15KHBvbDAscGxpc3QsYWRkLGZm LHAsRGVsdGEsdmVjcG9sLHZlY3BvbHIsU3R1cm1yKTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+ PSA0LCBwcmludCgiICAgIHN0YXJ0aW5nIG5mbG9jYWxseXNvbHVibGUgIixbcG9sLHIsYSxi XSkpOwogIHBvbDAgPSBwb2w7CgpcXCBwbGFjZXMgZmluaWVzCgogIHBvbCAqPSBkZW5vKGNv bnRlbnQobGlmdChwb2wpKSleMjsKICBmb3IoIGlpID0gMSwgMywKICAgIGlmKCBpaSA9PSAx LCBwbGlzdCA9IGlkZWFscHJpbWVkZWMobmYsMikpOwogICAgaWYoIGlpID09IDIgJiYgciwg cGxpc3QgPSBpZGVhbGZhY3RvcihuZixwb2xkaXNjKHBvbDAvcG9sbGVhZChwb2wwKSkvcG9s bGVhZChwb2wwKV42LzJeMTIpWywxXSk7CiAgICBpZiggaWkgPT0gMiAmJiAhciwgcGxpc3Qg PSBpZGVhbGZhY3RvcihuZixwb2xkaXNjKHBvbDApKVssMV0pOwogICAgaWYoIGlpID09IDMs CiAgICAgIGFkZCA9IGlkZWFsYWRkKG5mLGEsYik7CiAgICAgIGZmID0gZmFjdG9yKGlkZWFs bm9ybShuZixhZGQpKVssMV07CiAgICAgIGFkZHByaW1lcyhmZik7CmlmKCBERUJVR0xFVkVM X2VsbCA+PSA0LCBwcmludCgiICAgIGxpc3Qgb2YgcHJpbWVzID0gIixmZikpOwogICAgICBw bGlzdCA9IGlkZWFsZmFjdG9yKG5mLGFkZClbLDFdKTsKICAgICAgZm9yKCBpID0gMSwgI3Bs aXN0LAogICAgICAgIHAgPSAgcGxpc3RbaV07CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBw cmludCgiICAgcCA9ICIscCkpOwogICAgICAgIGlmKCBwLnAgPCBMSU1CSUdQUklNRSB8fCAh TElNQklHUFJJTUUsCiAgICAgICAgICBpZiggIW5mcXBfc29sdWJsZShuZixwb2wsaW5pdHAo bmYscCkpLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQoIiAgbm90IEVMUyBhdCAi LHApKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgZW5kIG9mIG5mbG9j YWxseXNvbHVibGUiKSk7CiAgICAgICAgICAgIHJldHVybigwKSksCiAgICAgICAgICBpZigg IW5mcXBfc29sdWJsZWJpZyhuZixwb2wscCxyL2EsYiksCmlmKCBERUJVR0xFVkVMX2VsbCA+ PSAyLCBwcmludCgiICBub3QgRUxTIGF0ICIscC5wLCIgKCA9IGJpZyBwcmltZSApIikpOwpp ZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBlbmQgb2YgbmZsb2NhbGx5c29s dWJsZSIpKTsKICAgICAgICAgICAgcmV0dXJuKDApKSkpOwogICk7CgpcXCBwbGFjZXMgcmVl bGxlcwoKICBpZiggbmYucjEsCiAgICBEZWx0YSA9IHBvbGRpc2MocG9sKTsgdmVjcG9sID0g VmVjKHBvbCk7CiAgICBmb3IoIGkgPSAxLCBuZi5yMSwKICAgICAgaWYoIG5mcmVhbHNpZ24o bmYscG9sbGVhZChwb2wpLGkpID4gMCwgbmV4dCk7CiAgICAgIGlmKCBuZnJlYWxzaWduKG5m LHBvbGNvZWZmKHBvbCwwKSxpKSA+IDAsIG5leHQpOwogICAgICBpZiggbmZyZWFsc2lnbihu ZixEZWx0YSxpKSA8IDAsIG5leHQpOwogICAgICB2ZWNwb2xyID0gdmVjdG9yKCN2ZWNwb2ws aixteXN1YnN0KHZlY3BvbFtqXSxuZi5yb290c1tpXSkpOwogICAgICBTdHVybXIgPSBwb2xz dHVybShQb2wodmVjcG9scikpOwogICAgICBpZiggU3R1cm1yID09IDAsCmlmKCBERUJVR0xF VkVMX2VsbCA+PSAyLCBwcmludCgiICBub3QgRUxTIGF0IGluZmluaXR5IikpOwppZiggREVC VUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBlbmQgb2YgbmZsb2NhbGx5c29sdWJsZSIp KTsKICAgICAgICByZXR1cm4oMCkpOwogICkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwg cHJpbnQoIiAgcXVhcnRpYyBFTFMgIikpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJp bnQoIiAgICBlbmQgb2YgbmZsb2NhbGx5c29sdWJsZSIpKTsKICByZXR1cm4oMSk7Cn0Ke25m ZWxsY291bnQoIG5mLCBjLCBkLCBLUzJnZW4sIHBvaW50c3RyaXYpID0KbXkoZm91bmQsbGlz dGdlbixsaXN0cG9pbnRzY291bnQsbTEsbTIsbGFzdGxvYyxtYXNrLGksZDEsaWF1eCxqLHRy aXYscG9sLHBvaW50LGRldXhwb2ludHMsYXV4LHYpOwoKaWYoIERFQlVHTEVWRUxfZWxsID49 IDQsIHByaW50KCIgICAgc3RhcnRpbmcgbmZlbGxjb3VudCAiLFtjLGRdKSk7CiAgZm91bmQg PSAwOwogIGxpc3RnZW4gPSBLUzJnZW47CiAgbGlzdHBvaW50c2NvdW50ID0gW107CgogIG0x ID0gbTIgPSAwOyBsYXN0bG9jID0gLTE7CgogIG1hc2sgPSAxIDw8ICNLUzJnZW47CiAgaSA9 IDE7CiAgd2hpbGUoIGkgPCBtYXNrLAogICAgZDEgPSAxOyBpYXV4ID0gaTsgaiA9IDE7CiAg ICB3aGlsZSggaWF1eCwKICAgICAgaWYoIGlhdXglMiwgZDEgKj0gbGlzdGdlbltqXSk7CiAg ICAgIGlhdXggPj49IDE7IGorKyk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgi ICBkMSA9ICIsZDEpKTsKICAgIHRyaXYgPSAwOwogICAgZm9yKCBqID0gMSwgI3BvaW50c3Ry aXYsCiAgICAgIGlmKCBwb2ludHN0cml2W2pdWzNdKnBvaW50c3RyaXZbal1bMV0KICAgICAg ICAmJiBuZmlzc3F1YXJlKG5mLGQxKnBvaW50c3RyaXZbal1bMV0qcG9pbnRzdHJpdltqXVsz XSksCiAgICAgICAgbGlzdHBvaW50c2NvdW50ID0gY29uY2F0KGxpc3Rwb2ludHNjb3VudCxb cG9pbnRzdHJpdltqXV0pOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQoIiAgY29t ZXMgZnJvbSBhIHRyaXZpYWwgcG9pbnQiKSk7CiAgICAgICAgdHJpdiA9IDE7IG0xKys7CiAg ICAgICAgaWYoIGRlZ3JlKGkpID4gbGFzdGxvYywgbTIrKyk7CiAgICAgICAgZm91bmQgPSAx OyBsYXN0bG9jID0gLTE7IGJyZWFrCiAgICApKTsKICAgIGlmKCAhdHJpdiwKICAgIHBvbCA9 IFBvbChbZDEsMCxjLDAsZC9kMV0pOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQo IiAgIHF1YXJ0aWM6IHleMiA9ICIscG9sKSk7CiAgICBwb2ludCA9IG5mcmF0cG9pbnQobmYs cG9sLExJTTEsMSk7CiAgICBpZiggcG9pbnQgIT0gW10sCmlmKCBERUJVR0xFVkVMX2VsbCA+ PSAyLCBwcmludCgiICBwb2ludCBvbiB0aGUgcXVhcnRpYyIpKTsKaWYoIERFQlVHTEVWRUxf ZWxsID49IDMsIHByaW50KCIgICAiLHBvaW50KSk7CiAgICAgIG0xKys7CiAgICAgIGlmKCBw b2ludFszXSAhPSAwLAogICAgICAgIGF1eCA9IGQxKnBvaW50WzFdL3BvaW50WzNdXjI7CiAg ICAgICAgZGV1eHBvaW50cyA9IFsgYXV4KnBvaW50WzFdLCBhdXgqcG9pbnRbMl0vcG9pbnRb M10gXQogICAgICAsCiAgICAgICAgZGV1eHBvaW50cyA9IFswXSk7CiAgICAgIGxpc3Rwb2lu dHNjb3VudCA9IGNvbmNhdChsaXN0cG9pbnRzY291bnQsW2RldXhwb2ludHNdKTsKICAgICAg aWYoIGRlZ3JlKGkpID4gbGFzdGxvYywgbTIrKyk7CiAgICAgIGZvdW5kID0gMTsgbGFzdGxv YyA9IC0xCiAgICAsCiAgICAgIGlmKCBuZmxvY2FsbHlzb2x1YmxlKG5mLHBvbCksCiAgICAg ICAgaWYoIGRlZ3JlKGkpID4gbGFzdGxvYywgbTIrKzsgbGFzdGxvYyA9IGRlZ3JlKGkpKTsK ICAgICAgICBwb2ludCA9IG5mcmF0cG9pbnQobmYscG9sLExJTTMsMSk7CiAgICAgICAgaWYo IHBvaW50ICE9IFtdLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQoIiAgcG9pbnQg b24gdGhlIHF1YXJ0aWMiKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmludCgiICAg Iixwb2ludCkpOwogICAgICAgICAgbTErKzsKICAgICAgICAgIGF1eCA9IGQxKnBvaW50WzFd L3BvaW50WzNdXjI7CiAgICAgICAgICBkZXV4cG9pbnRzID0gWyBhdXgqcG9pbnRbMV0sIGF1 eCpwb2ludFsyXS9wb2ludFszXSBdOwogICAgICAgICAgbGlzdHBvaW50c2NvdW50ID0gY29u Y2F0KGxpc3Rwb2ludHNjb3VudCxbZGV1eHBvaW50c10pOwogICAgICAgICAgaWYoIGRlZ3Jl KGkpID4gbGFzdGxvYywgbTIrKyk7CiAgICAgICAgICBmb3VuZCA9IDE7IGxhc3Rsb2MgPSAt MQogICAgICAgICwKaWYoIERFQlVHTEVWRUxfZWxsID49IDIsIHByaW50KCIgIG5vIHBvaW50 IGZvdW5kIG9uIHRoZSBxdWFydGljIikpOwogICAgICAgICAgKSkpKTsKICAgIGlmKCBmb3Vu ZCwKICAgICAgZm91bmQgPSAwOwogICAgICB2ID0gMDsgaWF1eCA9IChpPj4xKTsKICAgICAg d2hpbGUoIGlhdXgsIGlhdXggPj49IDE7IHYrKyk7CiAgICAgIG1hc2sgPj49IDE7CiAgICAg IGxpc3RnZW4gPSB2ZWNleHRyYWN0KGxpc3RnZW4sKDE8PCNsaXN0Z2VuKS0oMTw8diktMSk7 CiAgICAgIGkgPSAoMTw8dikKICAgICwgaSsrKQogICk7CiAgZm9yKCBpID0gMSwgI2xpc3Rw b2ludHNjb3VudCwKICAgaWYoICNsaXN0cG9pbnRzY291bnRbaV0gPiAxLAogICAgaWYoIHN1 YnN0KCd4XjMrYyoneF4yK2QqJ3gsJ3gsbGlzdHBvaW50c2NvdW50W2ldWzFdKS1saXN0cG9p bnRzY291bnRbaV1bMl1eMiAhPSAwLAogICAgICBlcnJvcigibmZlbGxjb3VudDogV1JPTkcg UE9JTlQgPSAiLGxpc3Rwb2ludHNjb3VudFtpXSkpKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+ PSA0LCBwcmludCgiICAgIGVuZCBvZiBuZmVsbGNvdW50IikpOwogIHJldHVybihbbGlzdHBv aW50c2NvdW50LFttMSxtMl1dKTsKfQp7Ym5mZWxsMmRlc2NlbnRfdmlhaXNvZyggYm5mLCBl bGwpID0KXFwgQ2FsY3VsIGR1IHJhbmcgZGVzIGNvdXJiZXMgZWxsaXB0aXF1ZXMgYXZlYyAy LXRvcnNpb24KXFwgZGFucyBsZSBjb3JwcyBkZSBub21icmVzIGJuZgpcXCBwYXIgbGEgbWV0 aG9kZSBkZXMgMi1pc29nZW5pZXMuClxcClxcIGVsbCA9IFthMSxhMixhMyxhNCxhNl0KXFwg eV4yK2ExeHkrYTN5PXheMythMnheMithNHgrYTYKXFwKXFwgZWxsIGRvaXQgZXRyZSBzb3Vz IGxhIGZvcm1lClxcIHleMj14XjMrYXheMitieCAtPiBlbGwgPSBbMCxhLDAsYiwwXQpcXCBh dmVjIGEgZXQgYiBlbnRpZXJzLgpteShQLFBmYWN0LHRvcnMscG9pbnRzdHJpdixhcGluaXQs YnBpbml0LHBsaXN0LEtTMnByb2Qsb2RkY2xhc3MsS1MyZ2VuLGxpc3Rwb2ludHMscG9pbnRn ZW4sbjEsbjIsY2VydGFpbixucDEsbnAyLGxpc3Rwb2ludHMyLGF1eDEsYXV4MixjZXJ0YWlu cCxyYW5nLHN0cmFuZ2UpOwoKaWYoIERFQlVHTEVWRUxfZWxsID49IDIsIHByaW50KCIgIEFs Z29yaXRobSBvZiAyLWRlc2NlbnQgdmlhIGlzb2dlbmllcyIpKTsKaWYoIERFQlVHTEVWRUxf ZWxsID49IDMsIHByaW50KCIgICBzdGFydGluZyBibmZlbGwyZGVzY2VudF92aWFpc29nIikp OwogIGlmKCB2YXJpYWJsZShibmYucG9sKSAhPSAneSwKICAgIGVycm9yKCJibmZlbGwyZGVz Y2VudF92aWFpc29nOiB0aGUgdmFyaWFibGUgb2YgdGhlIG51bWJlciBmaWVsZCBtdXN0IGJl IHkiKSk7CiAgZWxsID0gZWxsaW5pdChNb2QobGlmdChlbGwpLGJuZi5wb2wpLDEpOwoKICBp ZiggZWxsLmRpc2MgPT0gMCwKICAgIGVycm9yKCJibmZlbGwyZGVzY2VudF92aWFpc29nOiBz aW5ndWxhciBjdXJ2ZSAhISIpKTsKICBpZiggZWxsLmExICE9IDAgfHwgZWxsLmEzICE9IDAg fHwgZWxsLmE2ICE9IDAsCiAgICBlcnJvcigiYm5mZWxsMmRlc2NlbnRfdmlhaXNvZzogY3Vy dmUgbm90IG9mIHRoZSBmb3JtIFswLGEsMCxiLDBdIikpOwogIGlmKCBkZW5vbWluYXRvcihu ZmFsZ3RvYmFzaXMoYm5mLGVsbC5hMikpID4gMSB8fCBkZW5vbWluYXRvcihuZmFsZ3RvYmFz aXMoYm5mLGVsbC5hNCkpID4gMSwKICAgIGVycm9yKCJibmZlbGwyZGVzY2VudF92aWFpc29n OiBub24gaW50ZWdyYWwgY29lZmZpY2llbnRzIikpOwoKICBQID0gUG9sKFsxLGVsbC5hMixl bGwuYTRdKSpNb2QoMSxibmYucG9sKTsKICBQZmFjdCA9IGZhY3Rvcm5mKFAsYm5mLnBvbClb LDFdOwogIHRvcnMgPSAjUGZhY3Q7CiAgaWYoICNQZmFjdCA+IDEsCiAgICBwb2ludHN0cml2 ID0gW1swLDAsMV0sWy1wb2xjb2VmZihQZmFjdFsxXSwwKSwwLDFdLFstcG9sY29lZmYoUGZh Y3RbMl0sMCksMCwxXV0KICAsIHBvaW50c3RyaXYgPSBbWzAsMCwxXV0pOwoKICBhcGluaXQg PSAtMiplbGwuYTI7IGJwaW5pdCA9IGVsbC5hMl4yLTQqZWxsLmE0OwoKXFwgY2FsY3VsIGRl cyBpZGVhdXggcHJlbWllcnMgZGUgcGxpc3QKXFwgZXQgZGUgcXVlbHF1ZXMgcmVuc2VpZ25l bWVudHMgYXNzb2NpZXMKICBwbGlzdCA9IGlkZWFsZmFjdG9yKGJuZiw2KmVsbC5kaXNjKVss MV07CgppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgIFNlYXJjaCBmb3IgdHJp dmlhbCBwb2ludHMgb24gdGhlIGN1cnZlIikpOwogIFAgKj0gJ3g7CmlmKCBERUJVR0xFVkVM X2VsbCA+PSAzLCBwcmludCgiICAgWV4yID0gIixQKSk7CiAgcG9pbnRzdHJpdiA9IGNvbmNh dCggcG9pbnRzdHJpdiwgbmZyYXRwb2ludChibmYubmYsUCxMSU1UUklWLDApKTsKaWYoIERF QlVHTEVWRUxfZWxsID49IDEsIHByaW50KCIgdHJpdmlhbCBwb2ludHMgb24gRShLKSA9ICIp OwogIHByaW50KGxpZnQocG9pbnRzdHJpdikpOyBwcmludCgpKTsKCiAgS1MycHJvZCA9IGVs bC5hNDsKICBvZGRjbGFzcyA9IDA7CiAgd2hpbGUoICFvZGRjbGFzcywKICAgIEtTMmdlbiA9 IGJuZnN1bml0KGJuZixpZGVhbGZhY3RvcihibmYsS1MycHJvZClbLDFdfik7CiAgICBvZGRj bGFzcyA9IEtTMmdlbls1XVsxXSUyOwogICAgaWYoICFvZGRjbGFzcywKICAgICAgS1MycHJv ZCA9IGlkZWFsbXVsKGJuZixLUzJwcm9kLChLUzJnZW5bNV1bM11bMV0pKSk7CiApOwogIEtT MmdlbiA9IEtTMmdlblsxXTsKICBmb3IoIGkgPSAxLCAjS1MyZ2VuLAogICAgS1MyZ2VuW2ld ID0gbmZiYXNpc3RvYWxnKGJuZiwgS1MyZ2VuW2ldKSk7CiAgS1MyZ2VuID0gY29uY2F0KE1v ZChsaWZ0KGJuZi50dWZ1KSxibmYucG9sKSxLUzJnZW4pOwppZiggREVCVUdMRVZFTF9lbGwg Pj0gMiwKICBwcmludCgiICAjSyhiLDIpZ2VuICAgICAgICAgID0gIiwjS1MyZ2VuKTsKICBw cmludCgiICBLKGIsMilnZW4gPSAiLEtTMmdlbikpOwoKICBsaXN0cG9pbnRzID0gbmZlbGxj b3VudChibmYubmYsZWxsLmEyLGVsbC5hNCxLUzJnZW4scG9pbnRzdHJpdik7CiAgcG9pbnRn ZW4gPSBsaXN0cG9pbnRzWzFdOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwKICBwcmludCgi IHBvaW50cyBvbiBFKEspID0gIixsaWZ0KHBvaW50Z2VuKSk7CiAgcHJpbnQoKSk7CiAgbjEg PSBsaXN0cG9pbnRzWzJdWzFdOyBuMiA9IGxpc3Rwb2ludHNbMl1bMl07CgogIGNlcnRhaW4g PSAobjEgPT0gbjIpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwKICBpZiggY2VydGFpbiwK ICAgIHByaW50KCJbRShLKTpwaGknKEUnKEspKV0gID0gIiwxPDxuMSk7CiAgICBwcmludCgi I1NeKHBoaScpKEUnL0spICAgICA9ICIsMTw8bjIpOwogICAgcHJpbnQoIiNJSUkoRScvSylb cGhpJ10gICAgPSAxIik7IHByaW50KCkKICAsCiAgICBwcmludCgiW0UoSyk6cGhpJyhFJyhL KSldID49ICIsMTw8bjEpOwogICAgcHJpbnQoIiNTXihwaGknKShFJy9LKSAgICAgPSAiLDE8 PG4yKTsKICAgIHByaW50KCIjSUlJKEUnL0spW3BoaSddICAgPD0gIiwxPDwobjItbjEpKTsg cHJpbnQoKSkKKTsKCiAgS1MycHJvZCA9IGJwaW5pdDsKICBvZGRjbGFzcyA9IDA7CiAgd2hp bGUoICFvZGRjbGFzcywKICAgIEtTMmdlbiA9IGJuZnN1bml0KGJuZixpZGVhbGZhY3Rvcihi bmYsS1MycHJvZClbLDFdfik7CiAgICBvZGRjbGFzcyA9IChLUzJnZW5bNV1bMV0lMik7CiAg ICBpZiggIW9kZGNsYXNzLAogICAgICBLUzJwcm9kID0gaWRlYWxtdWwoYm5mLEtTMnByb2Qs KEtTMmdlbls1XVszXVsxXSkpKSk7CiAgS1MyZ2VuID0gS1MyZ2VuWzFdOwogIGZvciggaSA9 IDEsICNLUzJnZW4sCiAgICBLUzJnZW5baV0gPSBuZmJhc2lzdG9hbGcoYm5mLCBLUzJnZW5b aV0pKTsKICBLUzJnZW4gPSBjb25jYXQoTW9kKGxpZnQoYm5mLnR1ZnUpLGJuZi5wb2wpLEtT Mmdlbik7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAyLAogIHByaW50KCIgICNLKGFeMi00Yiwy KWdlbiAgICAgPSAiLCNLUzJnZW4pOwogIHByaW50KCIgIEsoYV4yLTRiLDIpZ2VuICAgICA9 ICIsS1MyZ2VuKSk7CgogIFAgPSBQb2woWzEsYXBpbml0LGJwaW5pdF0pKk1vZCgxLGJuZi5w b2wpOwogIFBmYWN0PSBmYWN0b3JuZihQLGJuZi5wb2wpWywxXTsKICBpZiggI1BmYWN0ID4g MSwKICAgIHBvaW50c3RyaXY9W1swLDAsMV0sWy1wb2xjb2VmZihQZmFjdFsxXSwwKSwwLDFd LFstcG9sY29lZmYoUGZhY3RbMl0sMCksMCwxXV0KICAsIHBvaW50c3RyaXYgPSBbWzAsMCwx XV0pOwoKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50KCIgICBTZWFyY2ggZm9yIHRy aXZpYWwgcG9pbnRzIG9uIHRoZSBjdXJ2ZSIpKTsKICBQICo9ICd4OwppZiggREVCVUdMRVZF TF9lbGwgPj0gMywgcHJpbnQoIiAgIFleMiA9ICIsUCkpOwogIHBvaW50c3RyaXYgPSBjb25j YXQoIHBvaW50c3RyaXYsIG5mcmF0cG9pbnQoYm5mLm5mLFAsTElNVFJJViwwKSk7CmlmKCBE RUJVR0xFVkVMX2VsbCA+PSAxLCBwcmludCgiIHRyaXZpYWwgcG9pbnRzIG9uIEUnKEspID0g Iik7CiAgcHJpbnQobGlmdChwb2ludHN0cml2KSk7IHByaW50KCkpOwoKICBsaXN0cG9pbnRz ID0gbmZlbGxjb3VudChibmYubmYsYXBpbml0LGJwaW5pdCxLUzJnZW4scG9pbnRzdHJpdik7 CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLCBwcmludCgiIHBvaW50cyBvbiBFJyhLKSA9ICIs bGlmdChsaXN0cG9pbnRzWzFdKSkpOwogIG5wMSA9IGxpc3Rwb2ludHNbMl1bMV07IG5wMiA9 IGxpc3Rwb2ludHNbMl1bMl07CiAgbGlzdHBvaW50czIgPSB2ZWN0b3IoI2xpc3Rwb2ludHNb MV0saSwwKTsKICBmb3IoIGkgPSAxLCAjbGlzdHBvaW50c1sxXSwKICAgIGxpc3Rwb2ludHMy W2ldID0gWzAsMF07CiAgICBhdXgxID0gbGlzdHBvaW50c1sxXVtpXVsxXV4yOwogICAgaWYo IGF1eDEgIT0gMCwKICAgICAgYXV4MiA9IGxpc3Rwb2ludHNbMV1baV1bMl07CiAgICAgIGxp c3Rwb2ludHMyW2ldWzFdID0gYXV4Ml4yL2F1eDEvNDsKICAgICAgbGlzdHBvaW50czJbaV1b Ml0gPSBhdXgyKihicGluaXQtYXV4MSkvYXV4MS84CiAgICAsIGxpc3Rwb2ludHMyW2ldID0g bGlzdHBvaW50c1sxXVtpXSkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwgcHJpbnQoIiBw b2ludHMgb24gRShLKSA9ICIsbGlmdChsaXN0cG9pbnRzMikpOyBwcmludCgpKTsKICBwb2lu dGdlbiA9IGNvbmNhdChwb2ludGdlbixsaXN0cG9pbnRzMik7CgogIGNlcnRhaW5wID0gKG5w MSA9PSBucDIpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwKICBpZiggY2VydGFpbnAsCiAg ICBwcmludCgiW0UnKEspOnBoaShFKEspKV0gICA9ICIsMTw8bnAxKTsKICAgIHByaW50KCIj U14ocGhpKShFL0spICAgICAgID0gIiwxPDxucDIpOwogICAgcHJpbnQoIiNJSUkoRS9LKVtw aGldICAgICAgPSAxIik7IHByaW50KCkKICAsCiAgICBwcmludCgiW0UnKEspOnBoaShFKEsp KV0gID49ICIsMTw8bnAxKTsKICAgIHByaW50KCIjU14ocGhpKShFL0spICAgICAgID0gIiwx PDxucDIpOwogICAgcHJpbnQoIiNJSUkoRS9LKVtwaGldICAgICA8PSAiLDE8PChucDItbnAx KSk7IHByaW50KCkpOwoKICBpZiggIWNlcnRhaW4gJiYgKG5wMj5ucDEpLCBwcmludDEoMTw8 KG5wMi1ucDEpLCIgPD0gIikpOwogIHByaW50MSgiI0lJSShFL0spWzJdICAgICAgICIpOwog IGlmKCBjZXJ0YWluICYmIGNlcnRhaW5wLCBwcmludDEoIiAiKSwgcHJpbnQxKCI8IikpOwog IHByaW50KCI9ICIsMTw8KG4yK25wMi1uMS1ucDEpKTsKCiAgcHJpbnQoIiNFKEspWzJdICAg ICAgICAgICAgPSAiLDE8PHRvcnMpOwopOwogIHJhbmcgPSBuMStucDEtMjsKaWYoIERFQlVH TEVWRUxfZWxsID49IDEsCiAgaWYoIGNlcnRhaW4gJiYgY2VydGFpbnAsCiAgICBwcmludCgi I0UoSykvMkUoSykgICAgICAgICA9ICIsKDE8PChyYW5nK3RvcnMpKSk7CiAgICBwcmludCgi cmFuayAgICAgICAgICAgICAgICA9ICIscmFuZyk7IHByaW50KCkKICAsCiAgICBwcmludCgi I0UoSykvMkUoSykgICAgICAgID49ICIsKDE8PChyYW5nK3RvcnMpKSk7IHByaW50KCk7CiAg ICBwcmludChyYW5nLCIgPD0gcmFuayAgICAgICAgICA8PSAiLG4yK25wMi0yKTsgcHJpbnQo KQogICkpOwoKICBzdHJhbmdlID0gKG4yK25wMi1uMS1ucDEpJTI7CiAgaWYoIHN0cmFuZ2Us CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLAogICAgICBwcmludCgiICEhISBJSUkgc2hvdWxk IGJlIGEgc3F1YXJlICEhISIpOyBwcmludCgiaGVuY2UiKSk7CiAgICBpZiggY2VydGFpbiwK ICAgICAgbnAxKys7CiAgICAgIGNlcnRhaW5wID0gKG5wMSA9PSBucDIpOwppZiggREVCVUdM RVZFTF9lbGwgPj0gMSwKICAgICAgICBpZiggY2VydGFpbnAsCiAgICAgICAgICBwcmludCgi W0UnKEspOnBoaShFKEspKV0gICA9ICIsMTw8bnAxKTsKICAgICAgICAgIHByaW50KCIjU14o cGhpKShFL0spICAgICAgID0gIiwxPDxucDIpOwogICAgICAgICAgcHJpbnQoIiNJSUkoRS9L KVtwaGldICAgICAgPSAxIik7IHByaW50KCkKICAgICAgICAsCiAgICAgICAgICBwcmludCgi W0UnKEspOnBoaShFKEspKV0gID49ICIsMTw8bnAxKTsKICAgICAgICAgIHByaW50KCIjU14o cGhpKShFL0spICAgICAgID0gIiwxPDxucDIpOwogICAgICAgICAgcHJpbnQoIiNJSUkoRS9L KVtwaGldICAgICA8PSAiLDE8PChucDItbnAxKSk7IHByaW50KCkpCiAgICAgICkKICAgICwK ICAgIGlmKCBjZXJ0YWlucCwKICAgICAgbjErKzsKICAgICAgY2VydGFpbiA9ICggbjEgPT0g bjIpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwKICAgICAgICBpZiggY2VydGFpbiwKICAg ICAgICAgIHByaW50KCJbRShLKTpwaGknKEUnKEspKV0gICA9ICIsMTw8bjEpOwogICAgICAg ICAgcHJpbnQoIiNTXihwaGknKShFJy9LKSAgICAgICA9ICIsMTw8bjIpOwogICAgICAgICAg cHJpbnQoIiNJSUkoRScvSylbcGhpJ10gICAgICA9IDEiKTsgcHJpbnQoKQogICAgICAgICwK ICAgICAgICAgIHByaW50KCJbRShLKTpwaGknKEUnKEspKV0gID49ICIsMTw8bjEpOwogICAg ICAgICAgcHJpbnQoIiNTXihwaGknKShFJy9LKSAgICAgID0gIiwxPDxuMik7CiAgICAgICAg ICBwcmludCgiI0lJSShFJy9LKVtwaGknXSAgICA8PSAiLDE8PChuMi1uMSkpOyBwcmludCgp KQogICAgICApCiAgICAsIG4xKyspCiAgKTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLAog IGlmKCAhY2VydGFpbiAmJiAobnAyPm5wMSksIHByaW50MSgxPDwobnAyLW5wMSksIiA8PSAi KSk7CiAgcHJpbnQxKCIjSUlJKEUvSylbMl0gICAgICAgIik7CiAgaWYoIGNlcnRhaW4gJiYg Y2VydGFpbnAsIHByaW50MSgiICIpLCBwcmludDEoIjwiKSk7CiAgcHJpbnQoIj0gIiwxPDwo bjIrbnAyLW4xLW5wMSkpOwogIHByaW50KCIjRShLKVsyXSAgICAgICAgICAgID0gIiwxPDx0 b3JzKTsKKTsKICByYW5nID0gbjErbnAxLTI7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLAog IGlmKCBjZXJ0YWluICYmIGNlcnRhaW5wLAogICAgcHJpbnQoIiNFKEspLzJFKEspICAgICAg ICAgPSAiLCgxPDwocmFuZyt0b3JzKSkpOyBwcmludCgpOwogICAgcHJpbnQoInJhbmsgICAg ICAgICAgICAgICAgPSAiLHJhbmcpOyBwcmludCgpCiAgLAogICAgcHJpbnQoIiNFKEspLzJF KEspICAgICAgICA+PSAiLCgxPDwocmFuZyt0b3JzKSkpOyBwcmludCgpOwogICAgcHJpbnQo cmFuZywiIDw9IHJhbmsgICAgICAgICAgPD0gIixuMitucDItMik7IHByaW50KCkpCiAgKSk7 CgpcXCBlbmQgb2Ygc3RyYW5nZQoKaWYoIERFQlVHTEVWRUxfZWxsID49IDEsIHByaW50KCIg cG9pbnRzID0gIixwb2ludGdlbikpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQo IiAgIGVuZCBvZiBibmZlbGwyZGVzY2VudF92aWFpc29nIikpOwogIHJldHVybihbcmFuZyxu MitucDItMit0b3JzLHBvaW50Z2VuXSk7Cn0Ke25mY2hpbmVzZSggbmYsIGIsIGZhY3QpID0K XFwgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbQpteShsLGZhY3QyKTsKCmlmKCBERUJVR0xF VkVMX2VsbCA+PSA0LCBwcmludCgiICAgIHN0YXJ0aW5nIG5mY2hpbmVzZSIpKTsKICBsID0g I2ZhY3RbLDFdOwogIGZhY3QyID0gdmVjdG9yKGwsaSxpZGVhbGRpdihuZixiLGlkZWFscG93 KG5mLGZhY3RbaSwxXSxmYWN0W2ksMl0pKSk7CiAgZmFjdDIgPSBpZGVhbGFkZHRvb25lKG5m LGZhY3QyKTsKICBmb3IoIGkgPSAxLCBsLAogICAgZmFjdDJbaV0gPSBuZmJhc2lzdG9hbGco bmYsZmFjdDJbaV0pKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgZW5k IG9mIG5mY2hpbmVzZSIpKTsKICByZXR1cm4oZmFjdDIpOwp9CntibmZxZnNvbHZlMihibmYs IGFsZWcsIGJsZWcsIGF1dD1bJ3ldKSA9ClxcIFNvbHZlcyBMZWdlbmRyZSBFcXVhdGlvbiB4 XjItYWxlZypZXjI9YmxlZypaXjIKXFwgVXNpbmcgcXVhZHJhdGljIG5vcm0gZXF1YXRpb25z ClxcIGF1dCBjb250YWlucyB0aGUgR2Fsb2lzIGF1dG9tb3JwaGlzbXMgb2YgYm5mICggYXMg cG9seW5vbWlhbHMgaW4geSkKXFwgd2l0aCBhdXRbMV0gPSB5LgpteShhdXgsc29sdmVwb2xy ZWwsYXV4c29sdmUsc29sdmVwb2xhYnMsZXhwcnh5LHJycm5mLGJiYm5mLFNMMCxTTDEsU0ws c3VuTCxmb25kc3VuTCxub3JtZm9uZHN1bkwsU0ssc3VuSyxmb25kc3VuSyx2ZWNibGVnLG1h dG5vcm0sbWF0bm9ybW1vZCxleHBzb2x1dGlvbixzb2x1dGlvbixyZXN0ZSxjYXJyZSx2ZXJp Zix4MCx4MSk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgIHN0YXJ0aW5n IGJuZnFmc29sdmUyIikpOwogIHNvbHZlcG9scmVsID0gJ3heMi1hbGVnOwppZiggREVCVUdM RVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBhbGVnID0gIixhbGVnKSk7CmlmKCBERUJVR0xF VkVMX2VsbCA+PSA0LCBwcmludCgiICAgIGJsZWcgPSAiLGJsZWcpKTsKCiAgaWYoIG5maXNz cXVhcmUoYm5mLGFsZWcpLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBh bGVnIGlzIGEgc3F1YXJlICEhIikpOwogICAgYWxlZyA9IG5mc3FydChibmYsYWxlZylbMV07 CiAgICByZXR1cm4oW2FsZWcsMSwwXX4pCiAgKTsKCiAgaWYoICNhdXQgPiAxLAppZiggREVC VUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBmYWN0b3JpemF0aW9uIG9mIHRoZSBkaXNj cmltaW5hbnQgdXNpbmcgdGhlIGF1dG9tb3JwaGlzbXMgb2YgYm5mIikpOwogICAgZm9yKCBp ID0gMiwgI2F1dCwKICAgICAgYXV4ID0gYWJzKHBvbHJlc3VsdGFudChsaWZ0KGFsZWcpLXN1 YnN0KGxpZnQoYWxlZyksJ3ksYXV0W2ldKSxibmYucG9sKSk7CiAgICAgIGlmKCBhdXgsIGFk ZHByaW1lcyhmYWN0b3IoYXV4KVssMV0pKSkpOwoKICBhdXhzb2x2ZSA9IHJuZmVxdWF0aW9u KGJuZixzb2x2ZXBvbHJlbCwxKTsKICBzb2x2ZXBvbGFicyA9IGF1eHNvbHZlWzFdOwogIGV4 cHJ4eSA9IGF1eHNvbHZlWzJdOwogIGlmKCBhdXhzb2x2ZVszXSwKaWYoIERFQlVHTEVWRUxf ZWxsID49IDUsIHByaW50KCIgICAgIGNhc2Ugd2l0aCBhdXhzb2x2ZVszXSAhPSAwIikpKTsK aWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgYmJibmZpbml0ICIsc29sdmVw b2xhYnMpKTsKICBycnJuZiA9IHJuZmluaXQoYm5mLHNvbHZlcG9scmVsKTsKICBiYmJuZiA9 IGJuZmluaXQoc29sdmVwb2xhYnMsMSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmlu dCgiICAgIGRvbmUiKSk7CiAgU0wwID0gMTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHBy aW50KCIgICAgYmJibmYuY2xncCA9ICIsYmJibmYuY2xncCkpOwogIGZvciggaSA9IDEsICNi YmJuZi5jbGdwWzJdLAogICAgaWYoIGJiYm5mLmNsZ3BbMl1baV0lMiA9PSAwLAogICAgICBT TDAgPSBpZGVhbG11bChiYmJuZixTTDAsYmJibmYuY2xncFszXVtpXVsxLDFdKSkpOwogIFNM MSA9IGlkZWFsbXVsKGJiYm5mLFNMMCxybmZlbHR1cChycnJuZixibGVnKSk7CiAgU0wgPSBp ZGVhbGZhY3RvcihiYmJuZixTTDEpWywxXX47CiAgc3VuTCA9IGJuZnN1bml0KGJiYm5mLFNM KTsKICBmb25kc3VuTCA9IGNvbmNhdChiYmJuZi5mdXR1LHZlY3Rvcigjc3VuTFsxXSxpLG5m YmFzaXN0b2FsZyhiYmJuZixzdW5MWzFdW2ldKSkpOwogIG5vcm1mb25kc3VuTCA9IG5vcm0o cm5mZWx0YWJzdG9yZWwoIHJycm5mLGZvbmRzdW5MKSk7CiAgU0sgPSBpZGVhbGZhY3Rvcihi bmYsaWRlYWxub3JtKGJiYm5mLFNMMSkpWywxXX47CiAgc3VuSyA9IGJuZnN1bml0KGJuZixT Syk7CiAgZm9uZHN1bksgPSBjb25jYXQoYm5mLmZ1dHUsdmVjdG9yKCNzdW5LWzFdLGksbmZi YXNpc3RvYWxnKGJuZixzdW5LWzFdW2ldKSkpOwogIHZlY2JsZWcgPSBibmZpc3N1bml0KGJu ZixzdW5LLGJsZWcpOwogIG1hdG5vcm0gPSBtYXRyaXgoI2ZvbmRzdW5LLCNub3JtZm9uZHN1 bkwsaSxqLDApOwogIGZvciggaSA9IDEsICNub3JtZm9uZHN1bkwsCiAgICBtYXRub3JtWyxp XSA9IGxpZnQoYm5maXNzdW5pdCggYm5mLHN1bkssbm9ybWZvbmRzdW5MW2ldICkpKTsKICBt YXRub3JtbW9kID0gbWF0bm9ybSpNb2QoMSwyKTsKICBleHBzb2x1dGlvbiA9IGxpZnQobWF0 aW52ZXJzZWltYWdlKCBtYXRub3JtbW9kLCB2ZWNibGVnKk1vZCgxLDIpKSk7CiAgaWYoICFs ZW5ndGgoZXhwc29sdXRpb24pLCBlcnJvcigiYm5mcWZzb2x2ZTIgOiBOTyBTT0xVVElPTiAh ISAiKSk7CiAgc29sdXRpb24gPSBwcm9kKCBpID0gMSwgI2V4cHNvbHV0aW9uLCBmb25kc3Vu TFtpXV5leHBzb2x1dGlvbltpXSk7CiAgc29sdXRpb24gPSBybmZlbHRhYnN0b3JlbChycnJu Zixzb2x1dGlvbik7CiAgcmVzdGUgPSAobGlmdCh2ZWNibGVnKSAtIG1hdG5vcm0qZXhwc29s dXRpb24pLzI7CiAgY2FycmUgPSBwcm9kKCBpID0gMSwgI3ZlY2JsZWcsIGZvbmRzdW5LW2ld XnJlc3RlW2ldKTsKICBzb2x1dGlvbiAqPSBjYXJyZTsKICB4MSA9IHBvbGNvZWZmKGxpZnQo c29sdXRpb24pLDEsJ3gpOwogIHgwID0gcG9sY29lZmYobGlmdChzb2x1dGlvbiksMCwneCk7 CiAgdmVyaWYgPSB4MF4yIC0gYWxlZyp4MV4yLWJsZWc7CmlmKCB2ZXJpZiwgZXJyb3IoImJu ZnFmc29sdmUyOiBXUk9ORyBQT0lOVCIpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHBy aW50KCIgICBlbmQgb2YgYm5mcWZzb2x2ZTIiKSk7CiAgcmV0dXJuKFt4MCx4MSwxXX4pOwp9 CntibmZxZnNvbHZlKGJuZiwgYWxlZywgYmxlZywgZmxhZzMsIGF1dD1bJ3ldKSA9ClxcIGNl dHRlIGZvbmN0aW9uIHJlc291dCBsJ2VxdWF0aW9uIFheMi1hbGVnKlleMj1ibGVnKlpeMgpc XCBkYW5zIGxlIGNvcnBzIGRlIG5vbWJyZXMgbmYuClxcIGxhIHNvbHV0aW9uIGVzdCBbWCxZ LFpdLApcXCBbMCwwLDBdIHNpbm9uLgpteShuZixhYSxiYixuYSxuYixtYXhuYixtYXQscmVz bCx0LHNxLHBvbCx2ZWNyYXQsYWxwaGEseHgseXksYm9ybmUsdGVzdCxzdW4sZmFjdCxzdW5p LGYsbCxhdXgsYWxwaGEyLG1heG5iaXRlcixpZGJiLHJlbSxuYml0ZXIsbWFzayxvbGRuYixu ZXduYixib3IsdGVzdGljaSxkZSx4eHAseXlwLHJhcCx2ZXJpZik7CgppZiggREVCVUdMRVZF TF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgc3RhcnRpbmcgYm5mcWZzb2x2ZSIpKTsKaWYoIERF QlVHTEVWRUxfZWxsID49IDMsIHByaW50KCIgICAoYSxiKSA9ICgiLGFsZWcsIiwiLGJsZWcs IikiKSk7CiAgbmYgPSBibmYubmY7CiAgYWxlZyA9IE1vZChsaWZ0KGFsZWcpLG5mLnBvbCk7 IGFhID0gYWxlZzsKICBibGVnID0gTW9kKGxpZnQoYmxlZyksbmYucG9sKTsgYmIgPSBibGVn OwoKICBpZiggYWEgPT0gMCwKaWYoIERFQlVHTEVWRUxfZWxsID49IDUsIHByaW50KCIgICAg IGVuZCBvZiBibmZxZnNvbHZlIikpOwogICAgcmV0dXJuKFswLDEsMF1+KSk7CiAgaWYoIGJi ID09IDAsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA1LCBwcmludCgiICAgICBlbmQgb2YgYm5m cWZzb2x2ZSIpKTsKICAgIHJldHVybihbMCwwLDFdfikpOwoKICBuYSA9IGFicyhub3JtKGFh KSk7IG5iID0gYWJzKG5vcm0oYmIpKTsKICBpZiggbmEgPiBuYiwgbWF4bmIgPSBuYSwgbWF4 bmIgPSBuYik7CiAgbWF4bmIgPDw9IDIwOwogIG1hdCA9IE1vZChtYXRpZCgzKSxuZi5wb2wp OyBib3JuZSA9IDE7CiAgdGVzdCA9IDA7IG5iaXRlciA9IDA7CgogIHdoaWxlKCAxLAogICAg aWYoIGZsYWczICYmIGJuZi5jbGdwWzFdPjEsIHJlc2wgPSBibmZxZnNvbHZlMihibmYsYWEs YmIsYXV0KTsgYnJlYWspOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICAo bmEsbmIsYSxiKSA9ICIsbGlmdChbbmEsbmIsYWEsYmIsbm9ybShhYSksbm9ybShiYildKSkp OwppZiggREVCVUdMRVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgKioqIixuYiwiKioqICIp KTsKICAgIGlmKCBuYiA+PSBtYXhuYiwKICAgICAgbWF0ID0gTW9kKG1hdGlkKDMpLG5mLnBv bCk7CiAgICAgIGFhID0gYWxlZzsgYmIgPSBibGVnOyBuYSA9IGFicyhub3JtKGFsZWcpKTsg bmIgPSBhYnMobm9ybShibGVnKSkpOwogICAgaWYoIGFhID09IDEsIHJlc2wgPSBbMSwxLDBd fjsgYnJlYWspOwogICAgaWYoIGJiID09IDEsIHJlc2wgPSBbMSwwLDFdfjsgYnJlYWspOwog ICAgaWYoIGFhK2JiID09IDEsIHJlc2wgPSBbMSwxLDFdfjsgYnJlYWspOwogICAgaWYoIGFh K2JiID09IDAsIHJlc2wgPSBbMCwxLDFdfjsgYnJlYWspOwogICAgaWYoIGFhID09IGJiICAm JiBhYSAhPSAxLAogICAgICB0ID0gYWEqbWF0WywxXTsKICAgICAgbWF0WywxXSA9IG1hdFss M107IG1hdFssM10gPSB0OwogICAgICBhYSA9IC0xOyBuYSA9IDEpOwogICAgaWYoIGlzc3F1 YXJlKG5hKSwKICAgICAgc3EgPSBuZnNxcnQobmYsYWEpOwogICAgICBpZiggc3EgIT0gW10s IHJlc2wgPSBbc3FbMV0sMSwwXX47IGJyZWFrKSk7CiAgICBpZiggaXNzcXVhcmUobmIpLAog ICAgICBzcSA9IG5mc3FydChuZixiYik7CiAgICAgIGlmKCBzcSAhPSBbXSwgcmVzbCA9IFtz cVsxXSwwLDFdfjsgYnJlYWspKTsKICAgIGlmKCBuYSA+IG5iLAogICAgICB0ID0gYWE7IGFh ID0gYmI7IGJiID0gdDsKICAgICAgdCA9IG5hOyBuYSA9IG5iOyBuYiA9IHQ7CiAgICAgIHQg PSBtYXRbLDNdOyBtYXRbLDNdID0gbWF0WywyXTsgbWF0WywyXSA9IHQpOwogICAgaWYoIG5i ID09IDEsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIChhLGIpID0gIixs aWZ0KFthYSxiYl0pKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIChu YSxuYikgPSAiLGxpZnQoW25hLG5iXSkpKTsKICAgICAgaWYoIGFsZWcgPT0gYWEgJiYgYmxl ZyA9PSBiYiwgbWF0ID0gTW9kKG1hdGlkKDMpLG5mLnBvbCkpOwogICAgICBpZiggZmxhZzMs IHJlc2wgPSBibmZxZnNvbHZlMihibmYsYWEsYmIsYXV0KTsgYnJlYWspOwogICAgICBwb2wg PSBhYSoneF4yK2JiOwogICAgICB2ZWNyYXQgPSBuZnJhdHBvaW50KG5mLHBvbCxib3JuZSsr LDEpOwogICAgICBpZiggdmVjcmF0ICE9IDAsIHJlc2w9W3ZlY3JhdFsyXSx2ZWNyYXRbMV0s dmVjcmF0WzNdXX47IGJyZWFrKTsKCiAgICAgIGFscGhhID0gMDsKaWYoIERFQlVHTEVWRUxf ZWxsID49IDQsIHByaW50KCIgICAgYm91bmQgPSAiLGJvcm5lKSk7CiAgICAgIHdoaWxlKCBh bHBoYT09MCwKICAgICAgICB4eCA9IG5mcmFuZGludChuZixib3JuZSk7IHl5ID0gbmZyYW5k aW50KG5mLGJvcm5lKTsKICAgICAgICBib3JuZSsrOwogICAgICAgIGFscGhhID0geHheMi1h YSp5eV4yICk7CiAgICAgIGJiICo9IGFscGhhOyBuYiAqPSBhYnMobm9ybShhbHBoYSkpOwog ICAgICB0ID0geHgqbWF0WywxXSt5eSptYXRbLDJdOwogICAgICBtYXRbLDJdID0geHgqbWF0 WywyXSthYSp5eSptYXRbLDFdOwogICAgICBtYXRbLDFdID0gdDsKICAgICAgbWF0WywzXSAq PSBhbHBoYQogICAgLAogICAgICB0ZXN0ID0gMTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQs IHByaW50KCJvbiBmYWN0b3Jpc2UgYmIgPSAiLGJiKSk7CiAgICAgIHN1biA9IGJuZnN1bml0 KGJuZixpZGVhbGZhY3RvcihibmYsYmIpWywxXX4pOwogICAgICBmYWN0ID0gbGlmdChibmZp c3N1bml0KGJuZixzdW4sYmIpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCJm YWN0ID0gIixmYWN0KSk7CiAgICAgIHN1bmkgPSBjb25jYXQoYm5mLmZ1dHUsdmVjdG9yKCNz dW5bMV0saSxuZmJhc2lzdG9hbGcoYm5mLHN1blsxXVtpXSkpKTsKICAgICAgZm9yKCBpID0g MSwgI3N1bmksCiAgICAgICAgaWYoIChmID0gZmFjdFtpXT4+MSksCiAgICAgICAgICB0ZXN0 ID0wOwogICAgICAgICAgZm9yKCBrID0gMSwgMywgbWF0W2ssM10gLz0gc3VuaVtpXV5mKTsK ICAgICAgICAgIG5iIC89IGFicyhub3JtKHN1bmlbaV0pKV4oMipmKTsKICAgICAgICAgIGJi IC89IHN1bmlbaV1eKDIqZikpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIg ICAgZmFjdG9yaXphdGlvbiBvZiBiYiA9ICIsYmIpKTsKICAgICAgZmFjdCA9IGlkZWFsZmFj dG9yKG5mLGJiKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgZmFjdCA9 ICIsZmFjdCkpOwogICAgICBsID0gI2ZhY3RbLDFdOwoKICAgICAgaWYoIHRlc3QsCiAgICAg ICAgYXV4ID0gMTsKICAgICAgICBmb3IoIGkgPSAxLCBsLAogICAgaWYoIChmID0gZmFjdFtp LDJdPj4xKSAmJgogICAgICAgICAhKGZhY3RbaSwxXVsxXSUyKSAmJiAhbmZpc3NxdWFyZW1v ZHBvZGQobmYsYWEsZmFjdFtpLDFdKSwKICAgICAgYXV4PWlkZWFsbXVsKG5mLGF1eCxpZGVh bHBvdyhuZixmYWN0W2ksMV0sZikpKSk7CiAgICAgICAgaWYoIGF1eCAhPSAxLAogICAgdGVz dCA9IDA7CiAgICBhbHBoYSA9IG5mYmFzaXN0b2FsZyhuZixpZGVhbGFwcHIobmYsaWRlYWxp bnYobmYsYXV4KSkpOwogICAgICAgICAgYWxwaGEyID0gYWxwaGFeMjsKICAgICAgICAgIGJi ICo9IGFscGhhMjsgbmIgKj0gYWJzKG5vcm0oYWxwaGEyKSk7CiAgICAgICAgICBtYXRbLDNd ICo9IGFscGhhKSk7CiAgICAgIGlmKCB0ZXN0LAogIG1heG5iaXRlciA9IDE8PGw7CiAgc3Eg PSB2ZWN0b3IobCxpLG5mc3FydG1vZHBxKG5mLGFhLGZhY3RbaSwxXSxmYWN0W2ksMl0pKTsK ICAgICAgICBsID0gI3NxOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwKICBwcmludCgiICAg IHNxID0gIixzcSk7CiAgcHJpbnQoIiAgICBmYWN0ID0gIixmYWN0KTsKICBwcmludCgiICAg IGwgPSAiLGwpKTsKICAgICAgICBpZiggbCA+IDEsCiAgICBpZGJiID0gaWRlYWxobmYobmYs YmIpOwogICAgcmVtID0gbmZjaGluZXNlKG5mLGlkYmIsZmFjdCkpOwogICAgICAgIHRlc3Qg PSAxOyBuYml0ZXIgPSAxOwogICAgICAgIHdoaWxlKCB0ZXN0ICYmIG5iaXRlciA8PSBtYXhu Yml0ZXIsCiAgICBpZiggbCA+IDEsCiAgICAgIG1hc2sgPSBuYml0ZXI7IHh4ID0gMDsKICAg ICAgZm9yKCBpID0gMSwgbCwKICAgICAgICBpZiggbWFzayUyLCB4eCArPSByZW1baV0qc3Fb aV0sIHh4IC09IHJlbVtpXSpzcVtpXSApOyBtYXNrID4+PSAxKQogICAgICAgICAgLAogICAg ICAgICAgICB0ZXN0ID0gMDsgeHggPSBzcVsxXSk7CiAgICAgICAgICB4eCA9IG15bmZlbHRt b2QobmYseHgsYmIpOwogICAgICAgICAgYWxwaGEgPSB4eF4yLWFhOwogICAgICAgICAgaWYo IGFscGhhID09IDAsIHJlc2w9W3h4LDEsMF1+OyBicmVhaygyKSk7CiAgICAgICAgICB0ID0g YWxwaGEvYmI7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIFthbHBoYSxi Yl0gPSAiLFthbHBoYSxiYl0pKTsKICAgICAgICAgIG9sZG5iID0gbmI7CiAgICAgICAgICBu ZXduYiA9IGFicyhub3JtKHQpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIg ICAgW29sZG5iLG5ld25iLG9sZG5iL25ld25iXSA9ICIsW29sZG5iLG5ld25iLG9sZG5iL25l d25iKzAuXSkpOwogICAgICAgICAgd2hpbGUoIG5iID4gbmV3bmIsCiAgICAgICAgICAgIG1h dFssM10gKj0gdDsKICAgICAgICAgICAgYmIgPSB0OyBuYiA9IG5ld25iOwogICAgICAgICAg ICB0ID0geHgqbWF0WywxXSttYXRbLDJdOwogICAgICAgICAgICBtYXRbLDJdID0gYWEqbWF0 WywxXSArIHh4Km1hdFssMl07CiAgICAgICAgICAgIG1hdFssMV0gPSB0OwogICAgICAgICAg ICB4eCA9IG15bmZlbHRtb2QobmYsLXh4LGJiKTsKICAgICAgICAgICAgYWxwaGEgPSB4eF4y LWFhOwogICAgICAgICAgICB0ID0gYWxwaGEvYmI7CiAgICAgICAgICAgIG5ld25iID0gYWJz KG5vcm0odCkpOwogICAgICAgICAgKTsKICAgICAgICBpZiggbmIgPT0gb2xkbmIsIG5iaXRl cisrLCB0ZXN0ID0gMCk7CiAgICAgICAgKTsKICAgICAgICBpZiggbmIgPT0gb2xkbmIsCiAg ICAgICAgICBpZiggZmxhZzMsIHJlc2wgPSBibmZxZnNvbHZlMihibmYsYWEsYmIsYXV0KTsg YnJlYWspOwogICAgICAgICAgcG9sID0gYWEqJ3heMitiYjsKICAgICAgICAgIHZlY3JhdCA9 bmZyYXRwb2ludChuZixwb2wsYm9ybmUrKzw8MSwxKTsKICAgICAgICAgIGlmKCB2ZWNyYXQg IT0gMCwgcmVzbCA9IFt2ZWNyYXRbMl0sdmVjcmF0WzFdLHZlY3JhdFszXV1+OyBicmVhayk7 CgogICAgICAgICAgYm9yID0gMTAwMDsgeXkgPSAxOyB0ZXN0aWNpID0gMTsKICAgICAgICAg IGZvciggaSA9IDEsIDEwMDAwLCBkZSA9IG5mYmFzaXN0b2FsZyhuZix2ZWN0b3J2KHBvbGRl Z3JlZShuZi5wb2wpLGoscmFuZG9tKGJvcikpKTsKICAgICAgICAgICAgaWYoIGlkZWFsYWRk KGJuZixkZSxiYikgIT0gbWF0aWQocG9sZGVncmVlKGJuZi5wb2wpKSxuZXh0KTsKICAgICAg ICAgICAgeHhwID0gbXluZmVsdG1vZChibmYsZGUqeHgsYmIpOyB5eXAgPSBteW5mZWx0bW9k KGJuZixkZSp5eSxiYik7CiAgICAgICAgICAgIHJhcCA9IChub3JtKHh4cF4yLWFhKnl5cF4y KS9uYl4yKzAuKTsKICAgICAgICAgICAgaWYoIGFicyhyYXApIDwgMSwKaWYoIERFQlVHTEVW RUxfZWxsID49IDQsIHByaW50KCIgICAgKioqKioqKioqKiBcbiBcbiBNSVJBQ0xFICIscmFw LCIgXG4gXG4gKioqIikpOwogICAgICAgICAgICAgIHQgPSAoeHhwXjItYWEqeXlwXjIpL2Ji OwogICAgICAgICAgICAgIG1hdFssM10gKj0gdDsKICAgICAgICAgICAgICBiYiA9IHQ7IG5i ID0gYWJzKG5vcm0oYmIpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAg bmV3bmIgPSAiLG5iKSk7CiAgICAgICAgICAgICAgdCA9IHh4cCptYXRbLDFdK3l5cCptYXRb LDJdOwogICAgICAgICAgICAgIG1hdFssMl0gPSBhYSp5eXAqbWF0WywxXSArIHh4cCptYXRb LDJdOwogICAgICAgICAgICAgIG1hdFssMV0gPSB0OwogICAgICAgICAgICAgIHh4ID0geHhw OyB5eSA9IC15eXA7IHRlc3RpY2kgPSAwOwogICAgICAgICAgICAgICkpOwoKICAgICAgICAg IGlmKCB0ZXN0aWNpLAogICAgICAgICAgICBhbHBoYSA9IDA7CiAgICAgICAgICAgIHdoaWxl KCBhbHBoYSA9PSAwLAogICAgICAgICAgICAgIHh4ID0gbmZyYW5kaW50KG5mLDQqYm9ybmUp OyB5eSA9IG5mcmFuZGludChuZiw0KmJvcm5lKTsKICAgICAgICAgICAgICBib3JuZSsrOwog ICAgICAgICAgICAgIGFscGhhID0geHheMi1hYSp5eV4yKTsKICAgICAgICAgICAgYmIgKj0g YWxwaGE7IG5iICo9IGFicyhub3JtKGFscGhhKSk7CiAgICAgICAgICAgIHQgPSB4eCptYXRb LDFdICsgeXkqbWF0WywyXTsKICAgICAgICAgICAgbWF0WywyXSA9IHh4Km1hdFssMl0rYWEq eXkqbWF0WywxXTsKICAgICAgICAgICAgbWF0WywxXSA9IHQ7CiAgICAgICAgICAgIG1hdFss M10gKj0gYWxwaGE7KSkpKSk7CiAgcmVzbCA9IGxpZnQobWF0KnJlc2wpOwppZiggREVCVUdM RVZFTF9lbGwgPj0gNSwgcHJpbnQoIiAgICAgcmVzbDEgPSAiLHJlc2wpKTsKaWYoIERFQlVH TEVWRUxfZWxsID49IDUsIHByaW50KCIgICAgIGNvbnRlbnQgPSAiLGNvbnRlbnQocmVzbCkp KTsKICByZXNsIC89IGNvbnRlbnQocmVzbCk7CiAgcmVzbCA9IE1vZChsaWZ0KHJlc2wpLG5m LnBvbCk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PTUsIHByaW50KCIgICAgIHJlc2wzID0gIixy ZXNsKSk7CiAgZmFjdCA9IGlkZWFsYWRkKG5mLGlkZWFsYWRkKG5mLHJlc2xbMV0scmVzbFsy XSkscmVzbFszXSk7CiAgZmFjdCA9IGJuZmlzcHJpbmNpcGFsKGJuZixmYWN0LDMpOwogIHJl c2wgKj0xL25mYmFzaXN0b2FsZyhuZixmYWN0WzJdKTsKaWYoIERFQlVHTEVWRUxfZWxsID49 IDUsIHByaW50KCIgICAgIHJlc2w0ID0gIixyZXNsKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+ PSAzLCBwcmludCgiICAgcmVzbCA9ICIscmVzbCkpOwogIHZlcmlmID0gKHJlc2xbMV1eMi1h bGVnKnJlc2xbMl1eMi1ibGVnKnJlc2xbM11eMiA9PSAwKTsKICBpZiggIXZlcmlmLCBlcnJv cigiYm5mcWZzb2x2ZTogV1JPTkcgUE9JTlQiKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAz LCBwcmludCgiICAgZW5kIG9mIGJuZnFmc29sdmUiKSk7CiAgcmV0dXJuKHJlc2wpOwp9Cnti bmZyZWRxdWFydGlxdWUoIGJuZiwgcG9sLCByLGEsYikgPQpcXCByZWR1Y3Rpb24gZCd1bmUg cXVhcnRpcXVlIGlzc3VlIGRlIGxhIDItZGVzY2VudGUKXFwgZW4gY29ubmFpc3NhbnQgbGVz IHZhbGV1cnMgZGUgciwgYSBldCBiLgpteShnY2MscHJpbmMscnAscG9sMik7CgppZiggREVC VUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBzdGFydGluZyBibmZyZWRxdWFydGlxdWUi KSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgICIsW3IsYSxiXSkpOwpp ZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgIHJlZHVjdGlvbiBvZiB0aGUgcXVh cnRpYyAiLHBvbCkpOwoKICBpZiggYSA9PSAwLAogICAgcnAgPSAwCiAgLAogICAgZ2NjID0g aWRlYWxhZGQoYm5mLGIsYSk7CiAgICBpZiggZ2NjID09IDEsCiAgICAgIHJwID0gbmZiYXNp c3RvYWxnKGJuZixpZGVhbGFkZHRvb25lKGJuZi5uZixhLGIpWzFdKS9hOwogICAgICBycCA9 IG15bmZlbHRtb2QoYm5mLHIqcnAsYikKICAgICwKICAgICAgcHJpbmMgPSBibmZpc3ByaW5j aXBhbChibmYsZ2NjLDMpOwogICAgICBpZiggcHJpbmNbMV0gPT0gMCwgZ2NjID0gbmZiYXNp c3RvYWxnKGJuZixwcmluY1syXSkKICAgICAgLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMywg cHJpbnQoIiAgIHF1YXJ0aWMgbm90IHJlZHVjZWQiKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+ PSA0LCBwcmludCgiICAgIGVuZCBvZiBibmZyZWRxdWFydGlxdWUiKSk7CiAgICAgICAgcmV0 dXJuKFtwb2wsMCwxXSkpOwogICAgICBycCA9IG5mYmFzaXN0b2FsZyhibmYsaWRlYWxhZGR0 b29uZShibmYubmYsYS9nY2MsYi9nY2MpWzFdKS8oYS9nY2MpOwogICAgICBycCA9IG15bmZl bHRtb2QoYm5mLHIqcnAsYikvZ2NjOwogICAgICBiIC89IGdjYzsKICAgICkKICApOwogIHBv bDIgPSBzdWJzdChwb2wvYiwneCxycCtiKid4KS9iXjM7CmlmKCBERUJVR0xFVkVMX2VsbCA+ PSAzLCBwcmludCgiIHF1YXJ0aWMgcmVkdWNlZDogIixwb2wyKSk7CmlmKCBERUJVR0xFVkVM X2VsbCA+PSA0LCBwcmludCgiICAgIGVuZCBvZiBibmZyZWRxdWFydGlxdWUiKSk7CiAgcmV0 dXJuKFtwb2wyLHJwLGJdKTsKfQp7Ym5mZWxsMmRlc2NlbnRfZ2VuKCBibmYsIGVsbCwgZXh0 LCBoZWxwPVtdLCBiaWdmbGFnPTEsIGZsYWczPTEsIGF1dD1bJ3ldKSA9ClxcIGJuZiBhIHVu IHBvbHlub21lIGVuIHkuClxcIHNpIGVsbD0geV4yPVAoeCksIGFsb3JzIGV4dCBlc3QKXFwg ZXh0WzFdIGVzdCB1bmUgZXF1YXRpb24gcmVsYXRpdmUgZHUgY29ycHMgKD1QKHgpKSwKXFwg ZXh0WzJdIGVzdCBsZSByZXN1bHRhdCBybmZlcXVhdGlvbihibmYsUCwxKTsKXFwgZXh0WzNd IGVzdCBsZSBibmZpbml0IChzdXIgUSkgZGUgbCdleHRlbnNpb24uClxcIGRhbnMgbGEgc3Vp dGUgZXh0IGVzdCBub3RlIEwgPSBLKHRoZXRhKS4KXFwgaGVscCBlc3QgdW5lIGxpc3RlIGRl IHBvaW50cyBkZWphIGNvbm51cyBzdXIgZWxsLgpcXCBzaSBiaWdmbGFnICE9MCBhbG9ycyBv biBhcHBsaXF1ZSBibmZyZWRxdWFydGlxdWUuClxcIHNpIGZsYWczID09MSBhbG9ycyBvbiB1 dGlsaXNlIGJuZnFmc29sdmUyIChlcXVhdGlvbiBhdXggbm9ybWVzKSBwb3VyIHJlc291ZHJl IExlZ2VuZHJlClxcIGF1dCBlc3QgdW5lIGxpc3RlIGQnYXV0b21vcnBoaXNtZXMgY29ubnVz IGRlIGJuZgpcXCAoY2EgcGV1dCBhaWRlciBhIGZhY3RvcmlzZXIgY2VydGFpbnMgZGlzY3Jp bWluaWFudHMpLgpcXCBlbGwgZXN0IGRlIGxhIGZvcm1lIHleMj14XjMrQSp4XjIrQip4K0MK XFwgaWUgZWxsPVswLEEsMCxCLENdLCBhdmVjIEEsQiBldCBDIGVudGllcnMuClxcCm15KG5m LHVubmYsZWxsbmYsQSxCLEMsUyxwbGlzdCxMcm5mLFNMcHJvZCxMUzIsTFMyZ2VuLHBvbHJl bCxhbHBoYSx0dGhldGEsS1MyZ2VuLG5vcm1MUzIsbm9ybWNvb3JkLExTMmNvb3JkdGlsZGEs TFMydGlsZGEsYXV4LGxpc3RnZW4sbGlzdHBvaW50c3RyaXYsbGlzdHBvaW50cyxtMSxtMixs b2MsbGFzdGxvYyxtYXNrd2hpbGUsaXdoaWxlLHpjLGlhdXgsbGlmdHpjLGlzcG9pbnR0cml2 LHBvaW50LGMsYixhLGZvdW5kLGFscGhhYyxyLGRlbmMsZGVuYSxjcCxhbHBoYWNwLGJldGEs bWF0dHIsdmVjLHoxLGNvbnQsZCxlLHBvbG9yaWcscG9sLHJlZHEsdHJhbnNsLG11bHRpcCxV VlcscG9pbnR4eCxwb2ludDIscmFuZyxsaXN0RUxTLGxpc3Rub3RFTFMpOwoKaWYoIERFQlVH TEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgc3RhcnRpbmcgYm5mZWxsMmRlc2NlbnRfZ2Vu IikpOwoKICBuZiA9IGJuZi5uZjsKICB1bm5mID0gTW9kKDEsbmYucG9sKTsKICBlbGxuZiA9 IGVsbCp1bm5mOwogIGlmKCAjZWxsbmYgPD0gNSwgZWxsbmYgPSBlbGxpbml0KGVsbG5mLDEp KTsKCiAgQSA9IGVsbG5mLmEyOyBpZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQoIiAg QSA9ICIsQSkpOwogIEIgPSBlbGxuZi5hNDsgaWYoIERFQlVHTEVWRUxfZWxsID49IDIsIHBy aW50KCIgIEIgPSAiLEIpKTsKICBDID0gZWxsbmYuYTY7IGlmKCBERUJVR0xFVkVMX2VsbCA+ PSAyLCBwcmludCgiICBDID0gIixDKSk7CgpcXCBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXApcXCAgICAgIENvbnN0cnVjdGlvbiBvZiBMKFMsMikgICAgICAgICBc XApcXCBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXAoKaWYoIERFQlVH TEVWRUxfZWxsID49IDIsIHByaW50KCk7IHByaW50KCIgIENvbXB1dGluZyBMKFMsMikiKSk7 CgogIHBvbHJlbCA9IGV4dFsxXTsKICBhbHBoYSA9IE1vZChNb2QoJ3ksbmYucG9sKSxwb2xy ZWwpOyBcXCBhbHBoYSBlc3QgbCdlbGVtZW50IHByaW1pdGlmIGRlIEsKICB0dGhldGEgPSBN b2QoJ3gscG9scmVsKTsgICAgICAgICAgICBcXCB0dGhldGEgZXN0IGxhIHJhY2luZSBkZSBQ KHgpCgogIFMgPSA2KmxpZnQoZWxsbmYuZGlzYyk7CiAgcGxpc3QgPSBpZGVhbGZhY3Rvcihu ZixTKVssMV07CiAgTHJuZiA9IGV4dFszXTsKICBTTHByb2QgPSBzdWJzdChsaWZ0KHBvbHJl bCcpLCd5LGxpZnQoZXh0WzJdWzJdKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmlu dCgiICAgIixleHRbMl0pKTsKCiAgd2hpbGUoIDEsClxcIENvbnN0cnVjdGlvbiBkZXMgUy11 bml0ZXMKICAgIExTMmdlbiA9IGJuZnN1bml0KExybmYsIGlkZWFsZmFjdG9yKExybmYsU0xw cm9kKVssMV1+KTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgTFMyZ2Vu ID0gIixMUzJnZW4pKTsKXFwgc2kgbGUgZ3JvdXBlIGRlIGNsYXNzZXMgZXN0IGltcGFpciwg b24gYSBmaW5pLgogICAgaWYoIExTMmdlbls1XVsxXSUyLCBicmVhayk7CmlmKCBERUJVR0xF VkVMX2VsbCA+PSAzLCBwcmludCgiICAgMi1jbGFzcyBncm91cCAiLExTMmdlbls1XVszXVsx XVsxLDFdKSk7CiAgICBTICo9IExTMmdlbls1XVszXVsxXVsxLDFdOwogICAgU0xwcm9kID0g aWRlYWxtdWwoTHJuZixTTHByb2QsKExTMmdlbls1XVszXVsxXSkpOwogICk7CgogIEtTMmdl biA9IGJuZnN1bml0KGJuZixpZGVhbGZhY3RvcihuZixTKVssMV1+KTsKCmlmKCBERUJVR0xF VkVMX2VsbCA+PSAzLCBwcmludCgiICAgI0tTMmdlbiA9ICIsI0tTMmdlblsxXSkpOwppZigg REVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgICBLUzJnZW4gPSAiLEtTMmdlblsxXSkp OwoKICBMUzJnZW4gPSBMUzJnZW5bMV07CiAgTFMyID0gdmVjdG9yKCNMUzJnZW4saSxsaWZ0 KG5mYmFzaXN0b2FsZyhMcm5mLExTMmdlbltpXSkpKTsKICBMUzIgPSBjb25jYXQobGlmdChM cm5mLmZ1dHUpLExTMik7CgogIExTMiA9IHN1YnN0KExTMiwneCx0dGhldGEpOwogIExTMiA9 IExTMipNb2QoMSxwb2xyZWwpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAg ICNMUzIgPSAiLCNMUzIpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50KCIgICAg TFMyID0gIixMUzIpKTsKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBMKFMs MikgPSAiLExTMikpOwoKXFwgXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XApcXCAgIENvbnN0cnVjdGlvbiBvZiB0aGUgU2VsbWVyIGdyb3VwIFxcClxcIFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAy LCBwcmludCgpOyBwcmludCgiICBDb21wdXRpbmcgdGhlIFNlbG1lciBncm91cCIpKTsKClxc IGRhbnMgTFMyZ2VuLCBvbiBuZSBnYXJkZSBxdWUgY2V1eCBkb250IGxhIG5vcm1lIGVzdCB1 biBjYXJyZS4KCiAgbm9ybUxTMiA9IG5vcm0oTFMyKTsKaWYoIERFQlVHTEVWRUxfZWxsID49 IDQsIHByaW50KCIgICAgbm9ybUxTMiA9ICIsbm9ybUxTMikpOwoKXFwgbWF0cmljZSBkZSBs J2FwcGxpY2F0aW9uIG5vcm1lCgogIG5vcm1jb29yZCA9IG1hdHJpeCgjS1MyZ2VuWzFdKyNi bmZbOF1bNV0rMSwjbm9ybUxTMixpLGosMCk7CiAgZm9yKCBpID0gMSwgI25vcm1MUzIsCiAg ICBub3JtY29vcmRbLGldID0gYm5maXNzdW5pdChibmYsS1MyZ2VuLG5vcm1MUzJbaV0pKTsK aWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgbm9ybWNvb3JkID0gIixub3Jt Y29vcmQpKTsKClxcIGNvbnN0cnVjdGlvbiBkdSBub3lhdSBkZSBsYSBub3JtZQoKICBMUzJj b29yZHRpbGRhID0gbGlmdChtYXRrZXIobm9ybWNvb3JkKk1vZCgxLDIpKSk7CmlmKCBERUJV R0xFVkVMX2VsbCA+PSA0LCBwcmludCgiICAgIExTMmNvb3JkdGlsZGEgPSAiLExTMmNvb3Jk dGlsZGEpKTsKICBMUzJ0aWxkYSA9IHZlY3RvcigjTFMyY29vcmR0aWxkYVsxLF0saSwwKTsK ICBmb3IoIGkgPSAxLCAjTFMyY29vcmR0aWxkYVsxLF0sCiAgICBhdXggPSAxOwogICAgZm9y KCBqID0gMSwgI0xTMmNvb3JkdGlsZGFbLGldLAogICAgICBpZiggc2lnbihMUzJjb29yZHRp bGRhW2osaV0pLAogICAgICAgIGF1eCAqPSBMUzJbal0pKTsKICAgIExTMnRpbGRhW2ldID0g YXV4OwogICk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgIExTMnRpbGRh ID0gIixMUzJ0aWxkYSkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgIG5v cm0oTFMydGlsZGEpID0gIixub3JtKExTMnRpbGRhKSkpOwoKXFwgRmluIGRlIGxhIGNvbnN0 cnVjdGlvbiBkZSBMKFMsMikKCiAgbGlzdGdlbiA9IExTMnRpbGRhOwppZiggREVCVUdMRVZF TF9lbGwgPj0gMiwgcHJpbnQoIiAgI0xTMmdlbiA9ICIsI2xpc3RnZW4pKTsKaWYoIERFQlVH TEVWRUxfZWxsID49IDIsIHByaW50KCIgICBMUzJnZW4gPSAiLGxpc3RnZW4pKTsKCmlmKCBE RUJVR0xFVkVMX2VsbCA+PSAzLCBwcmludCgiICAgKEEsQixDKSA9ICIsW0EsQixDXSkpOwoK XFwgXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwKXFwgICBSZWNoZXJjaGUg ZGUgcG9pbnRzIHRyaXZpYXV4ICAgXFwKXFwgXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFwKCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBTZWFyY2ggZm9y IHRyaXZpYWwgcG9pbnRzIG9uIHRoZSBjdXJ2ZSIpKTsKICBsaXN0cG9pbnRzdHJpdiA9IG5m cmF0cG9pbnQobmYsJ3heMytBKid4XjIrQioneCtDLExJTVRSSVYsMCk7CiAgbGlzdHBvaW50 c3RyaXYgPSBjb25jYXQoaGVscCxsaXN0cG9pbnRzdHJpdik7CmlmKCBERUJVR0xFVkVMX2Vs bCA+PSAxLCBwcmludCgiIFRyaXZpYWwgcG9pbnRzIG9uIHRoZSBjdXJ2ZSA9ICIsbGlzdHBv aW50c3RyaXYpKTsKClxcIFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc ClxcICAgICAgICAgIHBhcmNvdXJzIGRlIEwoUywyKSAgICAgICAgIFxcClxcIFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcCgogIGxpc3Rwb2ludHMgPSBbXTsKICBt MSA9IDA7IG0yID0gMDsgbGFzdGxvYyA9IC0xOwogIG1hc2t3aGlsZSA9IDE8PCNsaXN0Z2Vu OwogIGxpc3RFTFMgPSBbMF07IGxpc3Rub3RFTFMgPSBbXTsKICBpd2hpbGUgPSAxOwoKICB3 aGlsZSggaXdoaWxlIDwgbWFza3doaWxlLAppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwKICBw cmludCgiICAgIGl3aGlsZSA9ICIsaXdoaWxlKTsKICBwcmludCgiICAgIGxpc3RnZW4gPSAi LGxpc3RnZW4pCik7CgpcXCB1dGlsaXNlIGxhIHN0cnVjdHVyZSBkZSBncm91cGUgcG91ciBk ZXRlY3RlciB1bmUgZXZlbnR1ZWxsZSBzb2x1YmlsaXRlIGxvY2FsZS4KICAgIGxvYyA9IDA7 CiAgICBmb3IoIGkgPSAxLCAjbGlzdEVMUywKICAgICAgZm9yKCBqID0gMSwgI2xpc3Rub3RF TFMsCiAgICAgICAgaWYoIGJpdHhvcihsaXN0RUxTW2ldLGxpc3Rub3RFTFNbal0pID09IGl3 aGlsZSwKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50KCIgICBOb3QgRUxTIGZyb20g Z3JvdXAgc3RydWN0dXJlIikpOwogICAgICAgICAgbGlzdG5vdEVMUyA9IGNvbmNhdChsaXN0 bm90RUxTLFtpd2hpbGVdKTsKICAgICAgICAgIGl3aGlsZSsrOwogICAgICAgICAgbmV4dCgz KQogICAgKSkpOwoKICAgIGZvciggaSA9IDEsICNsaXN0RUxTLAogICAgICBmb3IoIGogPSBp KzEsICNsaXN0RUxTLAogICAgICAgIGlmKCBiaXR4b3IobGlzdEVMU1tpXSxsaXN0RUxTW2pd KSA9PSBpd2hpbGUsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmludCgiICAgRUxTIGZy b20gZ3JvdXAgc3RydWN0dXJlIikpOwogICAgICAgICAgbGlzdEVMUyA9IGNvbmNhdChsaXN0 RUxTLFtpd2hpbGVdKTsKICAgICAgICAgIGxvYyA9IDE7CiAgICAgICAgICBicmVhaygyKQog ICAgKSkpOwoKICAgIGlhdXggPSB2ZWN0b3J2KCNsaXN0Z2VuLGksYml0dGVzdChpd2hpbGUs aS0xKSk7CiAgICBpYXV4ID0gKExTMmNvb3JkdGlsZGEqaWF1eCklMjsKICAgIHpjID0gdW5u Zipwcm9kKCBpID0gMSwgI0xTMiwgTFMyW2ldXmlhdXhbaV0pOwoKaWYoIERFQlVHTEVWRUxf ZWxsID49IDIsIHByaW50KCIgIHpjID0gIix6YykpOwogICAgbGlmdHpjID0gbGlmdCh6Yyk7 CgpcXCBFc3QtY2UgdW4gcG9pbnQgdHJpdmlhbCA/CiAgICBmb3VuZCA9IDA7CiAgICBpc3Bv aW50dHJpdiA9IDA7CiAgICBmb3IoIGkgPSAxLCAjbGlzdHBvaW50c3RyaXYsCiAgICAgIHBv aW50ID0gbGlzdHBvaW50c3RyaXZbaV07CiAgICAgIGlmKCAjcG9pbnQgPT0gMiB8fCBwb2lu dFszXSAhPSAwLAogICAgICAgIGlmKCBuZmlzc3F1YXJlKExybmYubmYsc3Vic3QoKGxpZnQo cG9pbnRbMV0pLSd4KSpsaWZ0KGxpZnR6YyksJ3ksbGlmdChleHRbMl1bMl0pKSksCmlmKCBE RUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBjb21lcyBmcm9tIHRoZSB0cml2aWFsIHBv aW50ICIscG9pbnQpKTsKICAgICAgICAgIGxpc3Rwb2ludHMgPSBjb25jYXQobGlzdHBvaW50 cyxbcG9pbnRdKTsKICAgICAgICAgIGZvdW5kID0gMTsgaXNwb2ludHRyaXYgPSAxOyBicmVh awogICAgKSkpOwoKXFwgXFxcXFxcXFxcXFxcXApcXCBPbiBjaGVyY2hlIGEgZWNyaXJlIHpj IHNvdXMgbGEgZm9ybWUgYS1iKnRoZXRhClxcIFxcXFxcXFxcXFxcXFwKCiAgICBpZiggIWZv dW5kLCBcXCBzaSBjZSBuJ2VzdCBwYXMgdW4gcG9pbnQgdHJpdmlhbAogICAgICBhID0gcG9s Y29lZmYobGlmdHpjLDApOwogICAgICBiID0tcG9sY29lZmYobGlmdHpjLDEpOwogICAgICBj ID0gcG9sY29lZmYobGlmdHpjLDIpOwoKICAgICAgaWYoIGMgIT0gMCwKICAgICAgICBhbHBo YWMgPSAoQSpiK0IqYy1hKSpjK2JeMjsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50 KCIgICBhbHBoYWMgPSAiLGFscGhhYykpOwogICAgICAgIHIgPSBuZnNxcnQobmYsbm9ybSh6 YykpWzFdOwogICAgICAgIGlmKCBhbHBoYWMgPT0gMCwKXFwgY2FzIHBhcnRpY3VsaWVyCmlm KCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmludCgiICAgY29udGludWluZyB3aXRoIDEvemMi KSk7CiAgICAgICAgICB6YyA9IG5vcm0oemMpKigxL3pjKTsKaWYoIERFQlVHTEVWRUxfZWxs ID49IDIsIHByaW50KCIgIHpjID0gIix6YykpCiAgICAgICAgLApcXCBJbCBmYXV0IHJlc291 ZHJlIHVuZSBmb3JtZSBxdWFkcmF0aXF1ZQpcXCBFeGlzdGVuY2UgKGxvY2FsZSA9IGdsb2Jh bGUpIGQndW5lIHNvbHV0aW9uIDoKICAgICAgICAgIGRlbmMgPSBkZW5vKGxpZnQoYykpOwog ICAgICAgICAgaWYoIGRlbmMgIT0gMSwgY3AgPSBjKmRlbmNeMiwgY3AgPSBjKTsKICAgICAg ICAgIGRlbmEgPSBkZW5vKGxpZnQoYWxwaGFjKSk7CiAgICAgICAgICBpZiggZGVuYSAhPSAx LCBhbHBoYWNwID0gYWxwaGFjKmRlbmFeMiwgYWxwaGFjcCA9IGFscGhhYyk7CmlmKCBERUJV R0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBIaWxiZXJ0IHN5bWJvbCAoIixhbHBoYWNwLCIs IixjcCwiKSA9ICIpKTsKICAgICAgICAgIGlmKCAhbG9jICYmIG15bmZoaWxiZXJ0KG5mLCBh bHBoYWNwLGNwKSA8IDAsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmludCgiICAgbm8g bG9jYWwgc29sdXRpb24iKSk7CiAgICAgICAgICAgIGxpc3Rub3RFTFMgPSBjb25jYXQobGlz dG5vdEVMUyxbaXdoaWxlXSk7CiAgICAgICAgICAgIGl3aGlsZSsrOwogICAgICAgICAgICBu ZXh0CiAgICAgICAgICApOwpcXCBJY2kgb24gYSBsJ2V4aXN0ZW5jZSBsb2NhbGUKICAgICAg ICAgIGJldGEgPSBBKihBKmIqYytCKmNeMitiXjIpLUMqY14yK2EqYjsKICAgICAgICAgIG1h dHRyID0gbWF0aWQoMyk7CiAgICAgICAgICBtYXR0clsxLDFdID0gYyA7bWF0dHJbMiwyXSA9 IGFscGhhYyA7CiAgICAgICAgICBtYXR0clszLDNdID0gciA7bWF0dHJbMiwzXSA9IC1iZXRh OwogICAgICAgICAgbWF0dHJbMSwyXSA9IC0oYiArQSpjKSA7bWF0dHJbMSwzXSA9IGEtQipj K0EqKEEqYytiKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDIsIHByaW50MSgiICBzb2wgb2Yg cXVhZHJhdGljIGVxdWF0aW9uID0gIikpOwogICAgICAgICAgdmVjID0gYm5mcWZzb2x2ZShi bmYsYWxwaGFjcCxjcCxmbGFnMyxhdXQpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJp bnQobGlmdCh2ZWMpKSk7CiAgICAgICAgICBhdXggPSB2ZWNbMl0qZGVuYTsKICAgICAgICAg IHZlY1syXSA9IHZlY1sxXTt2ZWNbMV0gPSBhdXg7CiAgICAgICAgICB2ZWNbM10gPSB2ZWNb M10qZGVuYzsKICAgICAgICAgIHZlYyA9IChtYXR0cl4oLTEpKSp2ZWM7CiAgICAgICAgICB2 ZWMgLz0gY29udGVudChsaWZ0KHZlYykpOwogICAgICAgICAgejEgPSAodmVjWzNdKnR0aGV0 YSt2ZWNbMl0pKnR0aGV0YSt2ZWNbMV07CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmlu dCgiICAgejEgPSAiLHoxKSk7CiAgICAgICAgICB6YyAqPSB6MV4yOwppZiggREVCVUdMRVZF TF9lbGwgPj0gMiwgcHJpbnQoIiAgemMqejFeMiA9ICIsemMpKTsKICAgICAgICAgKQogICAg ICApCiAgICApOwoKXFwgXFxcXFxcXFxcXApcXCBNYWludGVuYW50IHpjIGVzdCBkZSBsYSBm b3JtZSBhLWIqdGhldGEKXFwgXFxcXFxcXFxcXAoKICAgIGlmKCAhZm91bmQsCgppZiggREVC VUdMRVZFTF9lbGwgPj0gMywgcHJpbnQoIiAgIHpjID0gIix6YykpOwogICAgICBsaWZ0emMg PSBsaWZ0KHpjKTsKICAgICAgYSA9IHBvbGNvZWZmKGxpZnR6YywwKTsKICAgICAgYiA9LXBv bGNvZWZmKGxpZnR6YywxKTsKICAgICAgYyA9IHBvbGNvZWZmKGxpZnR6YywyKTsKaWYoIGMs IGVycm9yKCJibmZlbGwyZGVzY2VudF9nZW4gOiBjIDw+IDAiKSk7CgpcXCByZW1vdmUgZGVu b21pbmF0b3JzIGFuZCB0cnkgdG8gc2ltcGxpZnkgemMKICAgICAgY29udCA9IGlkZWFsYWRk KG5mLGEsYik7CiAgICAgIGlmKCBjb250ICE9IDEsCiAgICAgICAgY29udCA9IGlkZWFsZmFj dG9yKG5mLGNvbnQpOwogICAgICAgIGNvbnRbLDJdIFw9IDI7CiAgICAgICAgYXV4ID0gMTsK ICAgICAgICBmb3IoIGkgPSAxLCAjY29udFssMV0sClxcICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClxcICAgICAg ICAgIGF1eCA9IGlkZWFsbXVsKG5mLGF1eCxpZGVhbHBvdyhuZixjb250W2ksMV0sY29udFtp LDJdKSkKICAgICAgICAgIGF1eCA9IGlkZWFsbXVsKG5mLGF1eCxpZGVhbHBvdyhuZixpZGVh bGhuZihuZixjb250W2ksMV0pLGNvbnRbaSwyXSkpClxcICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAg KTsKICAgICAgICBjb250ID0gbmZiYXNpc3RvYWxnKG5mLGJuZmlzcHJpbmNpcGFsKGJuZixh dXgpWzJdKV4yOwogICAgICAgIGEgLz0gY29udDsKICAgICAgICBiIC89IGNvbnQ7CiAgICAg ICAgemMvPSBjb250OwogICAgICAgIGxpZnR6YyA9IGxpZnQoemMpOwppZiggREVCVUdMRVZF TF9lbGwgPj0gMywgcHJpbnQoIiAgIG5ldyB6YyA9ICIsemMpKTsKICAgICAgKTsKCiAgICAg IGlmKCBuZmlzc3F1YXJlKG5mLGIpLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQo IiAgIGIgaXMgYSBzcXVhcmUiKSk7CiAgICAgICAgcG9pbnQgPSBbYS9iLG5mc3FydChuZiwo YS9iKV4zK0EqKGEvYileMitCKihhL2IpK0MpWzFdXTsKaWYoIERFQlVHTEVWRUxfZWxsID49 IDIsIHByaW50KCIgIHBvaW50IGZvdW5kID0gIixwb2ludCkpOwogICAgICAgIGxpc3Rwb2lu dHMgPSBjb25jYXQobGlzdHBvaW50cyxbcG9pbnRdKTsKICAgICAgICBmb3VuZCA9IDE7IGlz cG9pbnR0cml2ID0gMQogICAgICApCiAgICApOwoKXFwgXFxcXFxcXFxcXFwKXFwgQ29uc3Ry dWN0aW9uIGRlIGxhIHF1YXJ0aXF1ZQpcXCBcXFxcXFxcXFxcXAoKICAgIGlmKCAhZm91bmQs IFxcIHNpIGNlIG4nZXN0IHBhcyB1biBwb2ludCB0cml2aWFsCiAgICAgIHIgPSBuZnNxcnQo bmYsbm9ybSh6YykpWzFdOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJpbnQoIiAgICBy ID0gIixyKSk7CiAgICAgIGMgPSAtMiooQSpiKzMqYSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+ PSA0LCBwcmludCgiICAgIGMgPSAiLGMpKTsKICAgICAgZCA9IDgqcjsKaWYoIERFQlVHTEVW RUxfZWxsID49IDQsIHByaW50KCIgICAgZCA9ICIsZCkpOwogICAgICBlID0gKEFeMipiXjIg LSAyKkEqYSpiLTQqQipiXjItMyphXjIpOwppZiggREVCVUdMRVZFTF9lbGwgPj0gNCwgcHJp bnQoIiAgICBlID0gIixlKSk7CiAgICAgIHBvbG9yaWcgPSBiKigneF40K2MqJ3heMitkKid4 K2UpKnVubmY7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBxdWFydGljOiAo IixsaWZ0KGIpLCIpKlleMiA9ICIsbGlmdChwb2xvcmlnL2IpKSk7CiAgICAgIHBvbCA9IHBv bG9yaWc7CiAgICAgIGlmKCBiaWdmbGFnLAogICAgICAgIHJlZHEgPSBibmZyZWRxdWFydGlx dWUoYm5mLHBvbCxyLGEsYik7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBy ZWR1Y2VkOiBZXjIgPSAiLGxpZnQocmVkcVsxXSkpKTsKICAgICAgICBwb2wgPSByZWRxWzFd OyB0cmFuc2wgPSByZWRxWzJdOyBtdWx0aXAgPSByZWRxWzNdCiAgICAgICk7CgpcXCBTZWFy Y2ggZm9yIGEgcG9pbnQgb24gdGhlIHF1YXJ0aWMKICAgICAgcG9pbnQgPSBuZnJhdHBvaW50 KG5mLHBvbCxMSU0xLDEpOwogICAgICBmb3VuZCA9IHBvaW50ICE9IFtdOwpcXCBJZiBubyBw b2ludCBpcyBmb3VuZCwgY2hlY2sgaWYgaXQgaXMgRUxTCiAgICAgIGlmKCAhZm91bmQgJiYg IWxvYywKICAgICAgICBpZiggYmlnZmxhZywKICAgICAgICAgIGxvYyA9IG5mbG9jYWxseXNv bHVibGUobmYscG9sLHIsYSxiKQogICAgICAgICwgbG9jID0gbmZsb2NhbGx5c29sdWJsZShu Zixwb2wsMCwxLDEpCiAgICAgICkpOwogICAgICBpZiggIWxvYywKICAgICAgICBsaXN0bm90 RUxTID0gY29uY2F0KGxpc3Rub3RFTFMsW2l3aGlsZV0pOwogICAgICAgIGl3aGlsZSsrOwog ICAgICAgIG5leHQKICAgICAgKQogICAgKTsKClxcIElmIG5vIHBvaW50IGlzIGZvdW5kLCBz ZWFyY2ggaGFyZGVyCiAgICBpZiggIWZvdW5kLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwg cHJpbnQoInF1YXJ0aWMgaXMgRUxTIikpOwogICAgICBwb2ludCA9IG5mcmF0cG9pbnQobmYs cG9sLExJTTMsMSk7CiAgICAgIGZvdW5kID0gcG9pbnQgIT0gW10KICAgICk7CgogICAgaWYo IGZvdW5kICYmICFpc3BvaW50dHJpdiwKICAgICAgaWYoIGJpZ2ZsYWcsCiAgICAgICAgcG9p bnRbMV0gPSBwb2ludFsxXSptdWx0aXArdHJhbnNsOwogICAgICAgIHBvaW50WzJdID0gbmZz cXJ0KG5mLHN1YnN0KHBvbG9yaWcsJ3gscG9pbnRbMV0vcG9pbnRbM10pKVsxXSk7CiAgICAg IG1hdHRyID0gbWF0aWQoMyk7CiAgICAgIG1hdHRyWzEsMV0gPSAtMipiXjI7IG1hdHRyWzEs Ml0gPSAoQSpiK2EpKmI7CiAgICAgIG1hdHRyWzEsM10gPSBhXjIrKDIqQi1BXjIpKmJeMjsg bWF0dHJbMiwyXSA9IC1iOwogICAgICBtYXR0clsyLDNdID0gYStBKmI7IG1hdHRyWzMsM10g PXI7CiAgICAgIFVWVyA9IFtwb2ludFsxXV4yLHBvaW50WzNdXjIscG9pbnRbMV0qcG9pbnRb M11dfjsKICAgICAgdmVjID0gKG1hdHRyXigtMSkpKlVWVzsKICAgICAgejEgPSAodmVjWzNd KnR0aGV0YSt2ZWNbMl0pKnR0aGV0YSt2ZWNbMV07CiAgICAgIHpjICo9IHoxXjI7CiAgICAg IHpjIC89IC1wb2xjb2VmZihsaWZ0KHpjKSwxKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMs IHByaW50KCIgICB6Yyp6MV4yID0gIix6YykpOwogICAgICBwb2ludHh4ID0gcG9sY29lZmYo bGlmdCh6YyksMCk7CiAgICAgIHBvaW50MiA9IFsgcG9pbnR4eCwgbmZzcXJ0KG5mLHN1YnN0 KCd4XjMrQSoneF4yK0IqJ3grQywneCxwb2ludHh4KSlbMV1dOwppZiggREVCVUdMRVZFTF9l bGwgPj0gMSwgcHJpbnQoIiAgcG9pbnQgZm91bmQgPSAiLHBvaW50MikpOwogICAgICBsaXN0 cG9pbnRzID0gY29uY2F0KGxpc3Rwb2ludHMsW3BvaW50Ml0pOwogICAgKTsKCiAgICBsaXN0 RUxTID0gY29uY2F0KGxpc3RFTFMsW2l3aGlsZV0pOwogICAgaWYoIGRlZ3JlKGl3aGlsZSkg PiBsYXN0bG9jLCBtMisrOyBsYXN0bG9jID0gZGVncmUoaXdoaWxlKSk7CgogICAgaWYoIGZv dW5kLAogICAgICBtMSsrOwogICAgICBmb3VuZCA9IDA7IGxhc3Rsb2MgPSAtMTsKICAgICAg aXdoaWxlID0gMTw8ZGVncmUoaXdoaWxlKTsKICAgICAgbWFza3doaWxlID4+PSAxOwogICAg ICBMUzJjb29yZHRpbGRhID0gdmVjZXh0cmFjdChMUzJjb29yZHRpbGRhLDE8PCNsaXN0Z2Vu LWl3aGlsZS0xKTsKICAgICAgbGlzdGdlbiA9IHZlY2V4dHJhY3QobGlzdGdlbiwxPDwjbGlz dGdlbi1pd2hpbGUtMSk7CiAgICAgIHdoaWxlKCBsaXN0RUxTWyNsaXN0RUxTXSA+PSBpd2hp bGUsCiAgICAgICAgbGlzdEVMUyA9IHZlY2V4dHJhY3QobGlzdEVMUywxPDwoI2xpc3RFTFMt MSktMSkpOwogICAgICB3aGlsZSggI2xpc3Rub3RFTFMgJiYgbGlzdG5vdEVMU1sjbGlzdG5v dEVMU10gPj0gaXdoaWxlLAogICAgICAgIGxpc3Rub3RFTFMgPSB2ZWNleHRyYWN0KGxpc3Ru b3RFTFMsMTw8KCNsaXN0bm90RUxTLTEpLTEpKQogICAgLCBpd2hpbGUgKysKICAgICkKICAp OwoKaWYoIERFQlVHTEVWRUxfZWxsID49IDIsCiAgcHJpbnQoIiAgbTEgPSAiLG0xKTsKICBw cmludCgiICBtMiA9ICIsbTIpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDEsCiAgcHJpbnQo IiNTKEUvSylbMl0gICAgPSAiLDE8PG0yKSk7CiAgaWYoIG0xID09IG0yLAppZiggREVCVUdM RVZFTF9lbGwgPj0gMSwKICAgIHByaW50KCIjRShLKS8yRShLKSAgID0gIiwxPDxtMSk7CiAg ICBwcmludCgiI0lJSShFL0spWzJdICA9IDEiKTsKICAgIHByaW50KCJyYW5rKEUvSykgICAg ID0gIixtMSkpOwogICAgcmFuZyA9IG0xCiAgLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwK ICAgIHByaW50KCIjRShLKS8yRShLKSAgPj0gIiwxPDxtMSk7CiAgICBwcmludCgiI0lJSShF L0spWzJdIDw9ICIsMTw8KG0yLW0xKSk7CiAgICBwcmludCgicmFuayhFL0spICAgID49ICIs bTEpKTsKICAgIHJhbmcgPSBtMTsKICAgIGlmKCAobTItbTEpJTIsCmlmKCBERUJVR0xFVkVM X2VsbCA+PSAxLAogICAgICBwcmludCgiIElJSSBzaG91bGQgYmUgYSBzcXVhcmUsIGhlbmNl ICIpOwogICAgICBpZiggbTItbTEgPiAxLAogICAgICAgIHByaW50KCIjRShLKS8yRShLKSAg Pj0gIiwxPDwobTErMSkpOwogICAgICAgIHByaW50KCIjSUlJKEUvSylbMl0gPD0gIiwxPDwo bTItbTEtMSkpOwogICAgICAgIHByaW50KCJyYW5rKEUvSykgICAgPj0gIixtMSsxKQogICAg ICAsCiAgICAgICAgcHJpbnQoIiNFKEspLzJFKEspICA9ICIsMTw8KG0xKzEpKTsKICAgICAg ICBwcmludCgiI0lJSShFL0spWzJdID0gMSIpOwogICAgICAgIHByaW50KCJyYW5rKEUvSykg ICAgPSAiLG0xKzEpKSk7CiAgICAgIHJhbmcgPSBtMSsxKQogICk7CgppZiggREVCVUdMRVZF TF9lbGwgPj0gMSwgcHJpbnQoIiBsaXN0cG9pbnRzID0gIixsaXN0cG9pbnRzKSk7CiAgZm9y KCBpID0gMSwgI2xpc3Rwb2ludHMsCiAgICBpZiggI2xpc3Rwb2ludHNbaV0gPT0gMywKICAg ICAgbGlzdHBvaW50c1tpXSA9IHZlY2V4dHJhY3QobGlzdHBvaW50c1tpXSwzKSk7CiAgICBp ZiggIWVsbGlzb25jdXJ2ZShlbGxuZixsaXN0cG9pbnRzW2ldKSwKICAgICAgZXJyb3IoImJu ZmVsbDJkZXNjZW50OiBXUk9ORyBQT0lOVCAiKSkpOwppZiggREVCVUdMRVZFTF9lbGwgPj0g NCwgcHJpbnQoIiAgICBlbmQgb2YgYm5mZWxsMmRlc2NlbnRfZ2VuIikpOwogIHJldHVybihb cmFuZyxtMixsaXN0cG9pbnRzXSk7Cn0Ke2JuZmVsbHJhbmsoYm5mLGVsbCxoZWxwPVtdLGJp Z2ZsYWc9MSxmbGFnMz0xKSA9ClxcIEFsZ29yaXRobWUgZGUgbGEgMi1kZXNjZW50ZSBzdXIg bGEgY291cmJlIGVsbGlwdGlxdWUgZWxsLgpcXCBoZWxwIGVzdCB1bmUgbGlzdGUgZGUgcG9p bnRzIGNvbm51cyBzdXIgZWxsLgoKXFwgYXR0ZW50aW9uIGJuZiBhIHVuIHBvbHlub21lIGVu IHkuClxcIHNpIGJpZ2ZsYWcgIT0wLCBvbiByZWR1aXQgbGVzIHF1YXJ0aXF1ZXMKXFwgc2kg ZmxhZzMgIT0gMCwgb24gdXRpbGlzZSBibmZxZnNvbHZlMgpteSh1cnN0LHVyc3QxLGRlbixm YWN0ZGVuLGVxdGhldGEscm5mZXEsYmJuZixleHQscmFuZyxmKTsKCmlmKCBERUJVR0xFVkVM X2VsbCA+PSAzLCBwcmludCgiICAgc3RhcnRpbmcgYm5mZWxscmFuayIpKTsKICBpZiggI2Vs bCA8PSA1LCBlbGwgPSBlbGxpbml0KGVsbCwxKSk7CgpcXCByZW1vdmVzIHRoZSBjb2VmZmlj aWVudHMgYTEgYW5kIGEzCiAgdXJzdCA9IFsxLDAsMCwwXTsKICBpZiggZWxsLmExICE9IDAg fHwgZWxsLmEzICE9IDAsCiAgICB1cnN0MSA9IFsxLDAsLWVsbC5hMS8yLC1lbGwuYTMvMl07 CiAgICBlbGwgPSBlbGxjaGFuZ2VjdXJ2ZShlbGwsdXJzdDEpOwogICAgdXJzdCA9IGVsbGNv bXBvc2V1cnN0KHVyc3QsdXJzdDEpCiAgKTsKClxcIHJlbW92ZXMgZGVub21pbmF0b3JzCiAg d2hpbGUoIChkZW4gPSBpZGVhbGludihibmYsaWRlYWxhZGQoYm5mLGlkZWFsYWRkKGJuZiwx LGVsbC5hMiksaWRlYWxhZGQoYm5mLGVsbC5hNCxlbGwuYTYpKSkpWzEsMV0gPiAxLAogICAg ZmFjdGRlbiA9IGlkZWFsZmFjdG9yKGJuZixkZW4pWywxXTsKICAgIGRlbiA9IDE7CiAgICBm b3IoIGkgPSAxLCAjZmFjdGRlbiwKICAgICAgZGVuID0gaWRlYWxtdWwoYm5mLGRlbixmYWN0 ZGVuW2ldKSk7CiAgICBkZW4gPSBkZW5bMSwxXTsKICAgIHVyc3QxID0gWzEvZGVuLDAsMCww XTsKICAgIGVsbCA9IGVsbGNoYW5nZWN1cnZlKGVsbCx1cnN0MSk7CiAgICB1cnN0ID0gZWxs Y29tcG9zZXVyc3QodXJzdCx1cnN0MSk7CiAgKTsKCiAgaGVscCA9IGVsbGNoYW5nZXBvaW50 KGhlbHAsdXJzdCk7CgpcXCBjaG9peCBkZSBsJ2FsZ29yaXRobWUgc3VpdmFudCBsYSAyLXRv cnNpb24KICBlbGwgKj0gTW9kKDEsYm5mLnBvbCk7CiAgZXF0aGV0YSA9IFBvbChbMSxlbGwu YTIsZWxsLmE0LGVsbC5hNl0pOwppZiggREVCVUdMRVZFTF9lbGwgPj0gMSwgcHJpbnQoIiBl bGxpcHRpYyBjdXJ2ZTogWV4yID0gIixlcXRoZXRhKSk7CiAgZiA9IG5mcG9scmF0cm9vdHMo Ym5mLGVxdGhldGEpOwoKICBpZiggI2YgPT0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXFwgY2FzIDE6IDItdG9yc2lvbiB0cml2aWFsZQogICAgcm5mZXEgPSBybmZl cXVhdGlvbihibmYsZXF0aGV0YSwxKTsKICAgIHVyc3QxID0gWzEsLXJuZmVxWzNdKk1vZCgn eSxibmYucG9sKSwwLDBdOwogICAgaWYoIHJuZmVxWzNdICE9IDAsCiAgICAgIGVsbCA9IGVs bGNoYW5nZWN1cnZlKGVsbCx1cnN0MSk7CiAgICAgIHVyc3QgPSBlbGxjb21wb3NldXJzdCh1 cnN0LHVyc3QxKTsKICAgICAgZXF0aGV0YSA9IHN1YnN0KGVxdGhldGEsJ3gsJ3gtcm5mZXFb M10qTW9kKCd5LGJuZi5wb2wpKTsKICAgICAgcm5mZXEgPSBybmZlcXVhdGlvbihibmYsZXF0 aGV0YSwxKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDIsIHByaW50KCIgIHRyYW5zbGF0aW9u OiB3b3JraW5nIHdpdGggWV4yID0gIixlcXRoZXRhKSk7CiAgICApOwppZiggREVCVUdMRVZF TF9lbGwgPj0gMywgcHJpbnQxKCIgICBiYm5maW5pdCAiKSk7CiAgICBiYm5mID0gYm5maW5p dChybmZlcVsxXSwxKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50KCIgICBkb25l IikpOwogICAgZXh0ID0gW2VxdGhldGEsIHJuZmVxLCBiYm5mXTsKICAgIHJhbmcgPSBibmZl bGwyZGVzY2VudF9nZW4oYm5mLGVsbCxleHQsaGVscCxiaWdmbGFnLGZsYWczKQogICwKICBp ZiggI2YgPT0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwgY2FzIDI6 IDItdG9yc2lvbiA9IFovMloKICAgIGlmKCBmWzFdICE9IDAsCiAgICAgIHVyc3QxID0gWzEs ZlsxXSwwLDBdOwogICAgICBlbGwgPSBlbGxjaGFuZ2VjdXJ2ZShlbGwsdXJzdDEpOwogICAg ICB1cnN0ID0gZWxsY29tcG9zZXVyc3QodXJzdCx1cnN0MSkKICAgICk7CiAgICByYW5nID0g Ym5mZWxsMmRlc2NlbnRfdmlhaXNvZyhibmYsZWxsKQogICwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcXCBjYXMgMzogMi10b3JzaW9uID0gWi8yWipa LzJaCiAgICByYW5nID0gYm5mZWxsMmRlc2NlbnRfY29tcGxldGUoYm5mLGZbMV0sZlsyXSxm WzNdLGZsYWczKQogICkpOwoKICByYW5nWzNdID0gZWxsY2hhbmdlcG9pbnQocmFuZ1szXSxl bGxpbnZlcnR1cnN0KHVyc3QpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50KCIg ICBlbmQgb2YgYm5mZWxscmFuayIpKTsKCnJldHVybihyYW5nKTsKfQp7Ym5mZWxsMmRlc2Nl bnRfY29tcGxldGUoYm5mLGUxLGUyLGUzLGZsYWczPTEsYXV0PVsneV0pID0KXFwgY2FsY3Vs IGR1IHJhbmcgZCd1bmUgY291cmJlIGVsbGlwdGlxdWUKXFwgcGFyIGxhIG1ldGhvZGUgZGUg Mi1kZXNjZW50ZSBjb21wbGV0ZS4KXFwgWV4yID0gKHgtZTEpKih4LWUyKSooeC1lMyk7Clxc IGVuIHN1aXZhbnQgbGEgbWV0aG9kZSBkZWNyaXRlIHBhciBKLlNpbHZlcm1hbgpcXCBzaSBm bGFnMyA9PTEgYWxvcnMgb24gdXRpbGlzZSBibmZxZnNvbHZlMiAoZXF1YXRpb24gYXV4IG5v cm1lcykKXFwgcG91ciByZXNvdWRyZSBMZWdlbmRyZQpcXCBvbiBwb3VycmEgYWxvcnMgdXRp bGlzZXIgYXV0PW5mZ2Fsb2lzY29uaihibmYucG9sKQoKXFwgZTEsIGUyIGV0IGUzIHNvbnQg ZGVzIGVudGllcnMgYWxnZWJyaXF1ZXMgZGUgYm5mLgoKbXkoS1MycHJvZCxvZGRjbGFzcyxL UzJnZW4sdmVjdCxzZWxtZXIscmFuZyxiMSxiMix2ZWMsejEsejIsZDMxLHF1YXJ0MCxxdWFy dCxjb250LGZhLHBvaW50LHNvbHgsc29seSxsaXN0ZXBvaW50cyxzdHJhbmdlKTsKCmlmKCBE RUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBBbGdvcml0aG0gb2YgY29tcGxldGUgMi1k ZXNjZW50IikpOwoKXFwgY2FsY3VsIGRlIEsoUywyKQoKICBLUzJwcm9kID0gKGUxLWUyKSoo ZTItZTMpKihlMy1lMSkqMjsKICBvZGRjbGFzcyA9IDA7CiAgd2hpbGUoICFvZGRjbGFzcywK ICAgIEtTMmdlbiA9IGJuZnN1bml0KGJuZixpZGVhbGZhY3RvcihibmYsS1MycHJvZClbLDFd fik7CiAgICBvZGRjbGFzcyA9IChLUzJnZW5bNV1bMV0lMik7CiAgICBpZiggIW9kZGNsYXNz LAogICAgICBLUzJwcm9kID0gaWRlYWxtdWwoYm5mLEtTMnByb2QsKEtTMmdlbls1XVszXVsx XSkpKTsKICApOwogIEtTMmdlbiA9IEtTMmdlblsxXTsKICBmb3IoIGkgPSAxLCAjS1MyZ2Vu LAogICAgS1MyZ2VuW2ldID0gbmZiYXNpc3RvYWxnKGJuZiwgS1MyZ2VuW2ldKSk7CiAgS1My Z2VuID0gY29uY2F0KE1vZChsaWZ0KGJuZi50dWZ1KSxibmYucG9sKSxLUzJnZW4pOwppZigg REVCVUdMRVZFTF9lbGwgPj0gMiwKICBwcmludCgiICAjSyhTLDIpZ2VuID0gIiwjS1MyZ2Vu KTsKICBwcmludCgiICAgSyhTLDIpZ2VuID0gIixLUzJnZW4pCik7CgpcXCBwYXJjb3VycyBk ZSBLKFMsMikqSyhTLDIpCgogIHZlY3QgPSB2ZWN0b3IoI0tTMmdlbixpLFswLDFdKTsKICBz ZWxtZXIgPSAwOwogIHJhbmcgPSAwOwogIGxpc3RlcG9pbnRzID0gW107CgogIGZvcnZlYygg WCA9IHZlY3QsCiAgICBiMSA9IHByb2QoIGkgPSAxLCAjS1MyZ2VuLCBLUzJnZW5baV1eWFtp XSk7CiAgICBmb3J2ZWMoIFkgPSB2ZWN0LAogICAgICBiMiA9IHByb2QoIGkgPSAxLCAjS1My Z2VuLCBLUzJnZW5baV1eWVtpXSk7CgppZiggREVCVUdMRVZFTF9lbGwgPj0gMywgcHJpbnQo IiAgIFtiMSxiMl0gPSAiLGxpZnQoW2IxLGIyXSkpKTsKClxcIHBvaW50cyB0cml2aWF1eCBw cm92ZW5hbnQgZGUgbGEgMi10b3JzaW9uCgogICAgICBpZiggYjE9PTEgJiYgYjI9PTEsCmlm KCBERUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICB0cml2aWFsIHBvaW50IFswXSIpKTsK ICAgICAgICBzZWxtZXIrKzsgcmFuZysrOyBuZXh0KTsKICAgICAgaWYoIG5maXNzcXVhcmUo Ym5mLm5mLChlMi1lMSkqYjEpCiAgICAgICAgJiYgbmZpc3NxdWFyZShibmYubmYsKGUyLWUz KSooZTItZTEpKmIyKSwKaWYoIERFQlVHTEVWRUxfZWxsID49IDIsIHByaW50KCIgIHRyaXZp YWwgcG9pbnQgW2UyLDBdIikpOwogICAgICAgIHNlbG1lcisrOyByYW5nKys7IG5leHQpOwog ICAgICBpZiggbmZpc3NxdWFyZShibmYubmYsKGUxLWUyKSpiMikKICAgICAgICAmJiBuZmlz c3F1YXJlKGJuZi5uZiwoZTEtZTMpKihlMS1lMikqYjEpLAppZiggREVCVUdMRVZFTF9lbGwg Pj0gMiwgcHJpbnQoIiAgdHJpdmlhbCBwb2ludCBbZTEsMF0iKSk7CiAgICAgICAgc2VsbWVy Kys7IHJhbmcrKzsgbmV4dCk7CiAgICAgIGlmKCBuZmlzc3F1YXJlKGJuZi5uZiwoZTMtZTEp KmIxKQogICAgICAgICYmIG5maXNzcXVhcmUoYm5mLm5mLChlMy1lMikqYjIpLAppZiggREVC VUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQoIiAgdHJpdmlhbCBwb2ludCBbZTMsMF0iKSk7CiAg ICAgICAgc2VsbWVyKys7IHJhbmcrKzsgbmV4dCk7CgpcXCBwcmVtaWVyIGNyaXRlcmUgbG9j YWwgOiBzdXIgbGVzIGZvcm1lcyBxdWFkcmF0aXF1ZXMKCiAgICAgIGlmKCBteW5maGlsYmVy dChibmYubmYsYjEqYjIsYjEqKGUyLWUxKSkgPCAwCiAgICAgICAgfHwgbXluZmhpbGJlcnQo Ym5mLm5mLGIyLGIxKihlMy1lMSkpIDwgMAogICAgICAgIHx8IG15bmZoaWxiZXJ0KGJuZi5u ZixiMSxiMiooZTMtZTIpKSA8IDAKICAgICAgICAsCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAz LCBwcmludCgiICAgbm90IEVMUyIpKTsKICAgICAgICBuZXh0KTsKCmlmKCBERUJVR0xFVkVM X2VsbCA+PSAyLCBwcmludCgiICBbYjEsYjJdID0gIixsaWZ0KFtiMSxiMl0pKSk7CmlmKCBE RUJVR0xFVkVMX2VsbCA+PSAyLCBwcmludCgiICBxdWFkcmF0aWMgZm9ybXMgbG9jYWxseSBz b2x1YmxlIikpOwoKXFwgc29sdXRpb24gZGUgbGEgcHJlbWllcmUgZm9ybWUgcXVhZHJhdGlx dWUKCiAgICAgIGlmKCBiMSAhPSBiMiwKICAgICAgICB2ZWMgPSBibmZxZnNvbHZlKGJuZixi MSpiMixiMSooZTItZTEpLGZsYWczKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMsIHByaW50 KCIgICBzb2wgcGFydCA9ICIsdmVjKSk7CiAgICAgICAgaWYoIHZlY1szXSA9PSAwLCBlcnJv cigiYm5mZWxsMmRlc2NlbnRfY29tcGxldGU6IEJVRyAhISEgOiB2ZWNbM109MCAiKSk7CiAg ICAgICAgejEgPSB2ZWNbMV0vdmVjWzNdL2IxOyB6MiA9IHZlY1syXS92ZWNbM10KICAgICAg LAogICAgICAgIHoxID0gKDErKGUyLWUxKS9iMSkvMjsgejIgPSB6MS0xCiAgICAgICk7CiAg ICAgIGQzMSA9IGUzLWUxOwogICAgICBxdWFydDAgPSBiMl4yKih6MV4yKmIxIC0gZDMxKSon eF40IC0gNCp6MSpiMl4yKnoyKmIxKid4XjMKICAgICAgICAgICArIDIqYjEqYjIqKHoxXjIq YjEgKyAyKmIyKnoyXjIgKyBkMzEpKid4XjIgLSA0KnoxKmIyKnoyKmIxXjIqJ3gKICAgICAg ICAgICArIGIxXjIqKHoxXjIqYjEgLSBkMzEpOwogICAgICBxdWFydCA9IHF1YXJ0MCpiMSpi MjsKaWYoIERFQlVHTEVWRUxfZWxsID49IDQsIHByaW50KCIgICAgcXVhcnQgPSAiLHF1YXJ0 KSk7CiAgICAgIHF1YXJ0ICo9IGRlbm9taW5hdG9yKHNpbXBsaWZ5KGNvbnRlbnQocXVhcnQp KSleMjsKICAgICAgY29udCA9IHNpbXBsaWZ5KGNvbnRlbnQobGlmdChxdWFydCkpKTsKICAg ICAgZmEgPSBmYWN0b3IoY29udCk7CiAgICAgIGZvciggaSA9IDEsICNmYVssMV0sIHF1YXJ0 IC89IGZhW2ksMV1eKDIqKGZhW2ksMl1cMikpKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDMs IHByaW50KCIgICBxdWFydGljIHJlZHVjZWQgPSAiLHF1YXJ0KSk7CgpcXCBsYSBxdWFydGlx dWUgZXN0LWVsbGUgbG9jYWxlbWVudCBzb2x1YmxlID8KCiAgICAgIGlmKCAhbmZsb2NhbGx5 c29sdWJsZShibmYubmYscXVhcnQpLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQo IiAgcXVhcnRpYyBub3QgRUxTIikpOwogICAgICAgIG5leHQpOwogICAgICBzZWxtZXIrKzsK ClxcIHJlY2hlcmNoZSBkZSBwb2ludHMgc3VyIGxhIHF1YXJ0aXF1ZS4KCiAgICAgIHBvaW50 ID0gbmZyYXRwb2ludChibmYubmYscXVhcnQsTElNMywxKTsKICAgICAgaWYoIHBvaW50ICE9 IFtdLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJpbnQoIiAgcG9pbnQgZm91bmQgb24g dGhlIHF1YXJ0aWMgISEiKSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAzLCBwcmludCgiICAg Iixwb2ludCkpOwogICAgICAgIGlmKCBwb2ludFszXSwKICAgICAgICAgIHBvaW50IC89IHBv aW50WzNdOwogICAgICAgICAgejEgPSAoMipiMipwb2ludFsxXSp6Mi16MSooYjErYjIqcG9p bnRbMV1eMikpLyhiMS1iMipwb2ludFsxXV4yKTsKICAgICAgICAgIHNvbHggPSBiMSp6MV4y K2UxOwogICAgICAgICAgc29seSA9IG5mc3FydChibmYubmYsKHNvbHgtZTEpKihzb2x4LWUy KSooc29seC1lMykpWzFdOwogICAgICAgICAgbGlzdGVwb2ludHMgPSBjb25jYXQobGlzdGVw b2ludHMsW1tzb2x4LHNvbHldXSk7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLCBwcmludCgi IHBvaW50IG9uIHRoZSBlbGxpcHRpYyBjdXJ2ZSA9Iixbc29seCxzb2x5XSkpCiAgICAgICAg KTsKICAgICAgICByYW5nKysKICAgICAgLAppZiggREVCVUdMRVZFTF9lbGwgPj0gMiwgcHJp bnQoIiAgbm8gcG9pbnQgZm91bmQgb24gdGhlIHF1YXJ0aWMiKSkKICAgICAgKQogICAgKQog ICk7CgpcXCBmaW4KCmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLAogIHByaW50KCIjU14oMikg ICAgICA9ICIsc2VsbWVyKSk7CiAgaWYoIHJhbmcgPiBzZWxtZXIvMiwgcmFuZyA9IHNlbG1l cik7CmlmKCBERUJVR0xFVkVMX2VsbCA+PSAxLAogIHN0cmFuZ2UgPSByYW5nICE9IHNlbG1l cjsKICBpZiggc3RyYW5nZSwKICBwcmludCgiI0VbS10vMkVbS10+PSAiLHJhbmcpCiwgcHJp bnQoIiNFW0tdLzJFW0tdID0gIixyYW5nKSk7CiAgcHJpbnQoIiNFWzJdICAgICAgID0gNCIp OwopOwogIHJhbmcgPSBjZWlsKGxvZyhyYW5nKS9sb2coMikpLTI7CiAgc2VsbWVyID0gdmFs dWF0aW9uKHNlbG1lciwyKTsKaWYoIERFQlVHTEVWRUxfZWxsID49IDEsCiAgaWYoIHN0cmFu Z2UsCiAgcHJpbnQoc2VsbWVyLTIsIiA+PSByYW5rICA+PSAiLHJhbmcpCiwgcHJpbnQoInJh bmsgICAgICAgID0gIixyYW5nKSk7CiAgaWYoIHJhbmcsIHByaW50KCJwb2ludHMgPSAiLGxp c3RlcG9pbnRzKSk7Cik7CgpyZXR1cm4oW3Jhbmcsc2VsbWVyLGxpc3RlcG9pbnRzXSk7Cn0K ClxcIFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXApcXCAgICAg ICAgICAgIEhFTFAgTUVTU0FHRVMgICAgICAgICAgICAgICAgXFwKXFwgXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcCgp7CiAgYWRkaGVscChibmZlbGxyYW5r LAogICAgImJuZmVsbHJhbmsoSyxFLGhlbHA9W10pOiBFIGlzIGEgNS1jb21wb25lbnQgdmVj dG9yIGRlZmluaW5nIGFuIGVsbGlwdGljIGN1cnZlIGRlZmluZWQgb3ZlciB0aGUgbnVtYmVy IGZpZWxkIEsgKG91dHB1dCBieSBibmZpbml0KCkpLiBSZXR1cm5zIGEgdmVjdG9yIFtyLHMs dl0sIHdoZXJlIHIgaXMgYSBsb3dlciBib3VuZCBmb3IgdGhlIHJhbmsgb2YgRShLKSwgcyBp cyB0aGUgcmFuayBvZiBpdHMgMi1TZWxtZXIgZ3JvdXAgYW5kIHYgaXMgYSBsaXN0IG9mIGlu ZGVwZW5kYW50IHBvaW50cyBpbiBFKEspLzJFKEspLiBJZiBoZWxwIGlzIGEgdmVjdG9yIG9m IG5vbnRyaXZpYWwgcG9pbnRzIG9uIEUoSyksIHRoZSByZXN1bHQgbWlnaHQgYmUgZmFzdGVy LiBTZWUgYWxzbyA/ZGVmYXVsdF9lbGwiKTsKXFwgICAgICAgICAgICAgICAgICBvdGhlcnMK ICBhZGRoZWxwKGRlZmF1bHRfZWxsLAogICAgImRlZmF1bHRfZWxsKERFQlVHTEVWRUxfZWxs LCBMSU0xLCBMSU0zLCBMSU1UUklWLCBNQVhQUk9CLCBMSU1CSUdQUklNRSk6IG91dHB1dC9z ZXQgdGhlIHZhbHVlIG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzIHVzZWQgZm9yIGVsbHJhbmso KSBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIERFQlVHTEVWRUxfZWxsOiAwLTUgOiBj aG9vc2UgdGhlIHF1YW50aXR5IG9mIGluZm9ybWF0aW9uIHByaW50ZWQgZHVyaW5nIHRoZSBj b21wdXRhdGlvbiAoZGVmYXVsdD0wOiBwcmludCBub3RoaW5nKTsgTElNMSAocmVzcCBMSU0z KTogc2VhcmNoIGxpbWl0IGZvciBlYXN5IChyZXNwIGhhcmQpIHBvaW50cyBvbiBxdWFydGlj czsgTElNVFJJVjogc2VhcmNoIGxpbWl0IGZvciB0cml2aWFsIHBvaW50cyBvbiBlbGxpcHRp YyBjdXJ2ZXM7IE1BWFBST0IsIExJTUJJR1BSSU1FOiB0ZWNobmljYWwuIik7Cn0K --------------V78Wbnr6nyixGx3THBBg1uRU--