# Name: smd_crunchers v0.11 # Type: Library plugin # Library of compression algorithms # Author: Stef Dawson / Devin Doucette / Alexandre Tedeschi # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfY3J1bmNoZXJzIjtzOjY6ImF1dGhvciI7czo0 OToiU3RlZiBEYXdzb24gLyBEZXZpbiBEb3VjZXR0ZSAvIEFsZXhhbmRyZSBUZWRlc2NoaSI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuMTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMzOiJMaWJyYXJ5IG9m IGNvbXByZXNzaW9uIGFsZ29yaXRobXMiO3M6NDoiaGVscCI7czo1NzQyOiI8ZGl2IGlkPSJz bWRfaGVscCI+CgoJPGgxPnNtZF9jcnVuY2hlcnM8L2gxPgoKCTxwIGNsYXNzPSJpbXBvcnRh bnQiPlJlcXVpcmVzIFBIUDUrPC9wPgoKCTxwPkxpYnJhcnkgb2YgY29tcHJlc3Npb24gLyBk ZWNvbXByZXNzaW9uIGFsZ29yaXRobXMgbW9zdGx5IHdyaXR0ZW4gYnkgb3RoZXIgcGVvcGxl LjwvcD4KCgk8cD5BZnRlciBpbnN0YWxsYXRpb24sIGl0IGVuYWJsZXMgYW55b25lIHRvIGVt cGxveSBiaS1kaXJlY3Rpb25hbCBUYXIsIFppcCwgR3ppcCBhbmQgQnppcDIgbWVjaGFuaXNt cywgc29tZSBvZiB3aGljaCB3b3VsZCBvcmRpbmFyaWx5IHJlbHkgb24gcGFydGljdWxhciBj b21wb25lbnRzIGJlaW5nIGNvbXBpbGVkIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4uPC9wPgoKCTxwPldoaWxlIGNlcnRhaW4gY29yZSBsaWJyYXJpZXMgYXJlIHN0aWxs IHJlcXVpcmVkIHRvIGJlIGNvbXBpbGVkIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gKGUuZy4gemxpYiksIHRoaXMgcGx1Z2luIG1pdGlnYXRlcyB0aGUgbmVlZCBmb3Ig YW55IGZ1cnRoZXIgZXh0ZW5zaW9ucyBsaWtlIDxzcGFuIGNsYXNzPSJjYXBzIj5QRUNMPC9z cGFuPiAvIDxzcGFuIGNsYXNzPSJjYXBzIj5QRUFSPC9zcGFuPiB0byBvZmZlciB6aXAgY2Fw YWJpbGl0aWVzLiBJbiBsaW1pdGVkIHNlcnZlciBzZXR1cHMgb3IgcGxhY2VzIHdoZXJlIHVz ZXJzIGRvbiYjODIxNzt0IGhhdmUgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRo aXMgaXMgcmF0aGVyIGhhbmR5LjwvcD4KCgk8aDI+VXNhZ2U8L2gyPgoKCTxkbD4KCQk8ZHQ+ RnVuY3Rpb24gPGNvZGU+c21kX2NydW5jaF9jYXBhYmlsaXRpZXMoIHR5cGUgKTwvY29kZT48 L2R0PgoJCTxkZD5GaW5kIG91dCB3aGljaCBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24g ZmFjaWxpdGllcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHNlcnZlciBzZXR1cC4g VGhlIDxjb2RlPnR5cGU8L2NvZGU+IGFyZ3VtZW50IGNhbiBiZSBlaXRoZXI6Cgk8ZGw+CgkJ PGRkPjxjb2RlPmNvbXByZXNzPC9jb2RlPjogdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbXByZXNz aW9uIGZhY2lsaXRpZXMgYXJlIGF2YWlsYWJsZTwvZGQ+CgkJPGRkPjxjb2RlPmRlY29tcHJl c3M8L2NvZGU+OiB0byBkZXRlcm1pbmUgd2hpY2ggZGVjb21wcmVzc2lvbiBmYWNpbGl0aWVz IGFyZSBhdmFpbGFibGU8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiA8Y29kZT5j b21wcmVzczwvY29kZT48L2RkPgoJCTxkZD5SZXR1cm5zOiBhbiBhcnJheSBjb250YWluaW5n IHplcm8gb3IgbW9yZSBvZjoKCTxkbD4KCQk8ZGQ+PGNvZGU+dGFyPC9jb2RlPjwvZGQ+CgkJ PGRkPjxjb2RlPnppcDwvY29kZT48L2RkPgoJCTxkZD48Y29kZT5nemlwPC9jb2RlPjwvZGQ+ CgkJPGRkPjxjb2RlPmJ6aXAyPC9jb2RlPjwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGR0PkZ1bmN0 aW9uIDxjb2RlPnNtZF9ta2Rpcl9yZWN1cnNpdmUoIHBhdGgsIG1vZGUgKTwvY29kZT48L2R0 PgoJCTxkZD5DcmVhdGUgYSBkaXJlY3RvcnkgdHJlZSByZXByZXNlbnRpbmcgPGNvZGU+cGF0 aDwvY29kZT4sIGFuZCBzZXQgdGhlIG9wdGlvbmFsIDxjb2RlPm1vZGU8L2NvZGU+IHBlcm1p c3Npb25zIChEZWZhdWx0OiAwNzU1KTwvZGQ+CgkJPGR0PkNsYXNzIHNtZF9jcnVuY2hfYXJj aGl2ZTwvZHQ+CgkJPGRkPkJhc2UgY2xhc3MgZm9yIGFsbCBtYWluIGFyY2hpdmluZyAvIHVu YXJjaGl2aW5nIGZhY2lsaXRpZXMsIDxzdHJvbmc+ZXhjbHVkaW5nIHVuemlwPC9zdHJvbmc+ LjwvZGQ+CgkJPGR0PkNsYXNzIHNtZF9jcnVuY2hfdGFyX2ZpbGU8L2R0PgoJCTxkZD5TcGVj aWZpYyBjbGFzcyBmb3IgaGFuZGxpbmcgKGRlKWNvbXByZXNzaW9uIG9mIC50YXIgZmlsZXM8 L2RkPgoJCTxkdD5DbGFzcyBzbWRfY3J1bmNoX2d6aXBfZmlsZTwvZHQ+CgkJPGRkPlNwZWNp ZmljIGNsYXNzIGZvciBoYW5kbGluZyAoZGUpY29tcHJlc3Npb24gb2YuZ3ogYW5kIC50Z3og ZmlsZXM8L2RkPgoJCTxkdD5DbGFzcyBzbWRfY3J1bmNoX2J6aXBfZmlsZTwvZHQ+CgkJPGRk PlNwZWNpZmljIGNsYXNzIGZvciBoYW5kbGluZyAoZGUpY29tcHJlc3Npb24gb2YuYnoyIGFu ZCAudGJ6MiBmaWxlczwvZGQ+CgkJPGR0PkNsYXNzIHNtZF9jcnVuY2hfemlwX2ZpbGU8L2R0 PgoJCTxkZD5TcGVjaWZpYyBjbGFzcyBmb3IgaGFuZGxpbmcgY29tcHJlc3Npb24gb2Yuemlw IGZpbGVzPC9kZD4KCQk8ZHQ+Q2xhc3Mgc21kX2NydW5jaF9kVW56aXAyPC9kdD4KCQk8ZGQ+ U3BlY2lmaWMgY2xhc3MgZm9yIGhhbmRsaW5nIGRlY29tcHJlc3Npb24gb2YuemlwIGZpbGVz PC9kZD4KCQk8ZHQ+Q2xhc3Mgc21kX2NydW5jaF9kWmlwPC9kdD4KCQk8ZGQ+QWx0ZXJuYXRp dmUgbWV0aG9kcyBmb3IgY29tcHJlc3NpbmcgLnppcCBmaWxlczwvZGQ+Cgk8L2RsPgoKCTxo Mj5FeGFtcGxlIDE6IGNvbXByZXNzIGFsbCBmaWxlcyBpbiBhIGZvbGRlciBhcyB6aXA8L2gy PgoKCTxwPkJ1dCBleGNsdWRlIGFueSA8Y29kZT4uc3ZuPC9jb2RlPiBkaXJlY3RvcmllcyBp biB0aGUgcHJvY2Vzcy4gVGhlbiBpbW1lZGlhdGVseSBzZXJ2ZSB0aGUgZmlsZSBhcyBhIGRv d25sb2FkYWJsZSBpdGVtIDxjb2RlPmZpbGUuemlwPC9jb2RlPi48L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4kYXJjID0gbmV3IHNtZF9jcnVuY2hfemlw X2ZpbGUoJiMzOTtmaWxlLnppcCYjMzk7KTsKJGFyYy0mZ3Q7c2V0X29wdGlvbnMoYXJyYXko CiAgICAgJiMzOTtiYXNlZGlyJiMzOTsgICA9Jmd0OyAmIzM5Oy9wYXRoL3RvL2ZpbGVzJiMz OTssCiAgICAgJiMzOTtvdmVyd3JpdGUmIzM5OyA9Jmd0OyAxLAogICAgICYjMzk7aW5tZW1v cnkmIzM5OyAgPSZndDsgMQogICApKTsKJGFyYy0mZ3Q7YWRkX2ZpbGVzKCYjMzk7L3BhdGgv dG8vZmlsZXMvKi4qJiMzOTspOwokYXJjLSZndDtleGNsdWRlX2ZpbGVzKCYjMzk7L3BhdGgv dG8vZmlsZXMvKi5zdm4qJiMzOTspOwokYXJjLSZndDtjcmVhdGVfYXJjaGl2ZSgpOwokYXJj LSZndDtkb3dubG9hZF9maWxlKCk7CjwvY29kZT48L3ByZT4KCgk8aDI+RXhhbXBsZSAyOiBk ZWNvbXByZXNzIGd6aXAgYXJjaGl2ZTwvaDI+CgoJPHA+VGhpcyBpcyB0aGUgc2FtZSBnZW5l cmljIHByb2NlZHVyZSBmb3IgYWxsIHN1cHBvcnRlZCBjb21wcmVzc2VkIHR5cGVzLjwvcD4K CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiRmdWxscGF0aCA9ICYj Mzk7L3BhdGgvdG8vZmlsZS5neiYjMzk7OwokYXJjID0gbmV3IHNtZF9jcnVuY2hfZ3ppcF9m aWxlKGJhc2VuYW1lKCRmdWxscGF0aCkpOwokYXJjLSZndDtzZXRfb3B0aW9ucyhhcnJheSgK ICAgICAmIzM5O2Jhc2VkaXImIzM5OyAgID0mZ3Q7ICYjMzk7L3BhdGgvdG8vZXhwb3J0L2Zv bGRlciYjMzk7LAogICAgICYjMzk7b3ZlcndyaXRlJiMzOTsgPSZndDsgMQogICApKTsKJGFy Yy0mZ3Q7ZXh0cmFjdF9maWxlcygpOwo8L2NvZGU+PC9wcmU+CgoJPGgyPkV4YW1wbGUgMzog ZGVjb21wcmVzcyB6aXAgYXJjaGl2ZTwvaDI+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUg Y2xhc3M9ImJsb2NrIj4kZnVsbHBhdGggPSAmIzM5Oy9wYXRoL3RvL2ZpbGUuemlwJiMzOTs7 CiR6aXAgPSBuZXcgc21kX2NydW5jaF9kVW56aXAyKCRmdWxscGF0aCk7CiRmaWxlbGlzdCA9 ICR6aXAtJmd0O2dldExpc3QoKTsKZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGZuID0mZ3Q7ICR6 aXBwZWRGaWxlKSB7CiAgIC8vIERvIGZpbGUgc2l6ZS90eXBlIHZhbGlkYXRpb24gaGVyZT8K ICAgZWNobyAmcXVvdDskZm4gKCR6aXBwZWRGaWxlWyYjMzk7dW5jb21wcmVzc2VkX3NpemUm IzM5O10gYnl0ZXMpJmx0O2JyJmd0OyZxdW90OzsKfQokemlwLSZndDt1bnppcEFsbCgmIzM5 Oy9wYXRoL3RvL2V4cG9ydC9mb2xkZXImIzM5Oyk7CiR6aXAtJmd0O2Nsb3NlKCk7CjwvY29k ZT48L3ByZT4KCgk8aDI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJPHA+ TGlicmFyaWVzIGZyb20gPGEgaHJlZj0iaHR0cDovL3BocGNsYXNzZXMub3JnLyI+PHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gQ2xhc3NlczwvYT4gYnkgRGV2aW4gRG91Y2V0dGUg YW5kIEFsZXhhbmRyZSBUZWRlc2NoaS4gTWFueSB0aGFua3MgdG8gdGhvc2UgYXV0aG9ycyBm b3IgYXdlc29tZSBjb2Rpbmcgc2tpbGx6LjwvcD4KCgk8aDI+Q2hhbmdlbG9nPC9oMj4KCgk8 dWw+CgkJPGxpPjI5IEphbiAyMDEyIHwgdjAuMTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJ CTxsaT4yOSBKYW4gMjAxMiB8IHYwLjExIHwgQWRkZWQgPGNvZGU+c21kX21rZGlyX3JlY3Vy c2l2ZSgpPC9jb2RlPjwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJ TiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5l LWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250 OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3Jv dW5kLWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJsb2Nr IHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNwbGF5 OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hl bHAgaDEgeyBmb250OiAyMnB4IEdlb3JnaWEsIHNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxp Z246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQg YmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE4cHggR2VvcmdpYSwgc2VyaWY7IH0K I3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxM3B4IEdlb3JnaWEsIHNlcmlmOyBsZXR0ZXIt c3BhY2luZzogMXB4OyBtYXJnaW46IDIwcHggMCAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJs aW5lOyB9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTJweCBHZW9yZ2lhLCBzZXJpZjsg bGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDsgdGV4dC10cmFuc2Zvcm06 IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNz bWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgfQojc21kX2hlbHAgdGFibGUgeyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBw YWRkaW5nLWJvdHRvbToxZW07IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsgfQojc21kX2hl bHAgdGQsICNzbWRfaGVscCB0aCB7IGJvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzou NWVtOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9o ZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVw eCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsg fQojc21kX2hlbHAgZGwgZGQgeyBtYXJnaW46MnB4IDE1cHg7IH0KI3NtZF9oZWxwIGRsIGRk OmJlZm9yZSB7IGNvbnRlbnQ6ICJcMjAyMlwwMGEwIjsgfQojc21kX2hlbHAgZGwgZGQgZGwg eyBwYWRkaW5nOiAwIDE1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1Mg KioqIC0tPgoiO3M6NDoiY29kZSI7czo1MjY0OToiLyoqDQogKiBzbWRfY3J1bmNoZXJzDQog Kg0KICogQSBUZXh0cGF0dGVybiBDTVMgcGx1Z2luIGxpYnJhcnkgZm9yIHN0YW5kYXJkIGNv bXByZXNzaW9uL2RlY29tcHJlc3Npb24gYWxnb3JpdGhtcw0KICogIC0+IHppcC91bnppcA0K ICogIC0+IHRhcg0KICogIC0+IGd6aXANCiAqICAtPiBiemlwMg0KICoNCiAqIEBhdXRob3Ig RGV2aW4gRG91Y2V0dGUNCiAqIEBhdXRob3IgQWxleGFuZHJlIFRlZGVzY2hpDQogKiBAYXV0 aG9yIFN0ZWYgRGF3c29uDQogKiBAbGluayAgIGh0dHA6Ly9zaGF3LmNhLw0KICogQGxpbmsg ICBodHRwOi8vc3RlZmRhd3Nvbi5jb20vDQogKi8NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfY3J1bmNoX2NhcGFiaWxpdGllcygkdHlwZT0nY29tcHJl c3MnKSB7DQoJJHNtZF9jcnVuY2hlcnMgPSBhcnJheSgpOw0KDQoJLy8gQmktZGlyZWN0aW9u YWwgY2xhc3MNCglpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNoX3Rhcl9maWxlJykpIHsN CgkJJHNtZF9jcnVuY2hlcnNbXSA9ICd0YXInOw0KCX0NCg0KCWlmICgkdHlwZSA9PSAnY29t cHJlc3MnKSB7DQoJCS8vIEF2YWlsYWJsZSBjb21wcmVzc29ycw0KCQlpZiAoZnVuY3Rpb25f ZXhpc3RzKCdnemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnem9wZW4nKSAmJiBm dW5jdGlvbl9leGlzdHMoJ2d6d3JpdGUnKSkgew0KCQkJaWYgKGNsYXNzX2V4aXN0cygnc21k X2NydW5jaF9nemlwX2ZpbGUnKSkgew0KCQkJCSRzbWRfY3J1bmNoZXJzW10gPSAnZ3ppcCc7 DQoJCQl9DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNoX3ppcF9maWxlJykpIHsN CgkJCQkkc21kX2NydW5jaGVyc1tdID0gJ3ppcCc7DQoJCQl9DQoJCX0NCgkJaWYgKGZ1bmN0 aW9uX2V4aXN0cygnYnpjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnYnpvcGVuJykg JiYgZnVuY3Rpb25fZXhpc3RzKCdiendyaXRlJykpIHsNCgkJCWlmIChjbGFzc19leGlzdHMo J3NtZF9jcnVuY2hfYnppcF9maWxlJykpIHsNCgkJCQkkc21kX2NydW5jaGVyc1tdID0gJ2J6 aXAyJzsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCS8vIEF2YWlsYWJsZSBkZWNvbXByZXNz b3JzDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScpKSB7DQoJCQlpZiAoY2xh c3NfZXhpc3RzKCdzbWRfY3J1bmNoX2d6aXBfZmlsZScpKSB7DQoJCQkJJHNtZF9jcnVuY2hl cnNbXSA9ICdnemlwJzsNCgkJCX0NCgkJCWlmIChjbGFzc19leGlzdHMoJ3NtZF9jcnVuY2hf ZFVuemlwMicpKSB7DQoJCQkJJHNtZF9jcnVuY2hlcnNbXSA9ICd6aXAnOw0KCQkJfQ0KCQl9 DQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycpKSB7DQoJCQlpZiAoY2xh c3NfZXhpc3RzKCdzbWRfY3J1bmNoX2J6aXBfZmlsZScpKSB7DQoJCQkJJHNtZF9jcnVuY2hl cnNbXSA9ICdiemlwMic7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRzbWRfY3J1bmNoZXJz Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9ta2Rp cl9yZWN1cnNpdmUoJHBhdGgsICRtb2RlID0gMDc1NSkgew0KCWlmKEBta2RpcigkcGF0aCwg JG1vZGUpIG9yIGZpbGVfZXhpc3RzKCRwYXRoKSkgcmV0dXJuIHRydWU7DQoJcmV0dXJuIChz bWRfbWtkaXJfcmVjdXJzaXZlKGRpcm5hbWUoJHBhdGgpLCAkbW9kZSkgYW5kIG1rZGlyKCRw YXRoLCAkbW9kZSkpOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElWRSBDTEFT U0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykgMjAwNSBE ZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgRW1haWwg YnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMgc2NyaXB0 IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05VIEdQTCBh bmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0aGlzIGNv cHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpjbGFzcyBzbWRfY3J1bmNo X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfY3J1bmNoX2FyY2hpdmUoJG5hbWUpDQoJew0K CQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJCSdiYXNlZGlyJyA9PiAiLiIsDQoJCQkn bmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcgPT4gIiIsDQoJCQknaW5tZW1vcnknID0+ IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJJ3JlY3Vyc2UnID0+IDEsDQoJCQknc3Rv cmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5rcycgPT4gMCwNCgkJCSdsZXZlbCcgPT4g MywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4JyA9PiAiIiwNCgkJCSd0eXBlJyA9PiAi IiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0KCQkkdGhpcy0+ZmlsZXMgPSBhcnJheSAo KTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAoKTsNCgkJJHRoaXMtPnN0b3Jlb25seSA9 IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBhcnJheSAoKTsNCgl9DQoNCglmdW5jdGlv biBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJCWZvcmVhY2ggKCRvcHRpb25zIGFzICRr ZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlvbnNbJGtleV0gPSAkdmFsdWU7DQoJCWlm ICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pKQ0KCQl7DQoJCQkkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0 aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVn X3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJ CSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwgIiIs ICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQl9DQoJCWlmICghZW1wdHkgKCR0aGlz LT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snbmFtZSddID0g c3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJCSR0 aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhp cy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHN0 cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkk dGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXihcLipcLyspKy8i LCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sn cHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNb J3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBs YWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSAuICIvIjsNCgkJ fQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNoaXZlKCkNCgl7DQoJCSR0aGlzLT5tYWtl X2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJ ew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSddID09IDAgJiYgZmls ZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICgkdGhpcy0+b3B0aW9uc1sndHlw ZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJiemlwIiA/ICIu dG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiRmlsZSB7JHRoaXMt Pm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQljaGRpcigkcHdkKTsN CgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2UgaWYgKCR0aGlzLT5hcmNoaXZlID0gQGZv cGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9 PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIgPyAiLnRtcCIg OiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdkKTsNCgkJCWVsc2UNCgkJCXsNCgkJCQkk dGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUn XX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJ CX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9ICIiOw0KDQoJCXN3aXRjaCAo JHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaWYgKCEk dGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFr Ow0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsN CgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJ CQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfYnppcCgpKQ0KCQkJ ew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgYnppcDIgZmlsZS4i Ow0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJ aWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJ CWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10g PSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0N CgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3Rhcigp KQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZp bGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KDQoJCWlmICgkdGhpcy0+b3B0aW9u c1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlmY2xvc2UoJHRoaXMtPmFyY2hpdmUpOw0K CQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAiIHx8ICR0aGlzLT5vcHRp b25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVubGluaygkdGhpcy0+b3B0aW9uc1snYmFz ZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICIudG1wIik7DQoJCX0N Cgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0YSkNCgl7DQoJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndyaXRlKCR0aGlzLT5hcmNoaXZlLCAkZGF0 YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlIC49ICRkYXRhOw0KCX0NCg0KCWZ1bmN0 aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ZXhjbHVkZSkpDQoJ CQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJZm9yZWFj aCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVbJ25hbWUn XSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJdW5zZXQgKCR0aGlzLT5maWxlc1ska2V5 XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9yZW9ubHkpKQ0KCQkJZm9yZWFjaCAoJHRo aXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVhY2ggKCR0aGlzLT5zdG9y ZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVu dFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVzWyRrZXldWydtZXRob2QnXSA9IDA7DQoJ CXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMtPnN0b3Jlb25seSk7DQoJfQ0KDQoJZnVu Y3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxl cygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmZp bGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBleGNsdWRlX2ZpbGVzKCRsaXN0 KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2gg KCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmV4Y2x1ZGVbXSA9ICRjdXJyZW50Ow0K CX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhp cy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0K CQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gbGlz dF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNfYXJyYXkgKCRsaXN0KSkNCgkJew0KCQkJ JHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJyYXkgKCR0ZW1wKTsNCgkJCXVuc2V0ICgk dGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkkcHdkID0gZ2V0Y3dk KCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2gg KCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkkY3VycmVudCA9IHN0cl9yZXBsYWNlKCJc XCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9cLysv IiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9IHByZWdfcmVwbGFjZSgiL1wvJC8i LCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0cigkY3VycmVudCwgIioiKSkNCgkJCXsN CgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8oW1xcXF5cJFwuXFtcXVx8XChcKVw/XCtc e1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50KTsNCgkJCQkkcmVnZXggPSBzdHJfcmVw bGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJJGRpciA9IHN0cnN0cigkY3VycmVudCwg Ii8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3RycnBvcygkY3VycmVudCwgIi8iKSkgOiAi LiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRkaXIpOw0KCQkJCWZvcmVhY2gg KCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYgKHByZWdfbWF0Y2goIi9eeyRyZWdleH0k L2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJCQkkZmlsZXNbXSA9ICRjdXJyZW50MjsN CgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVtcCwgJGN1cnJlbnQpOw0KCQkJfQ0KCQkJ ZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJCQl7DQoJCQkJJHRlbXAgPSAkdGhpcy0+ cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3JlYWNoICgkdGVtcCBhcyAkZmlsZSkNCgkJ CQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNldCAoJHRlbXAsICRmaWxlKTsNCgkJCX0N CgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3VycmVudCkpDQoJCQkJJGZpbGVzW10gPSBh cnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydw cmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsvIiwgIiIsICgkdGhp cy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRjdXJyZW50LCAiLyIp KSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi8iKSArIDEp IDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4gQGlzX2xpbmsoJGN1cnJlbnQpICYmICR0 aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcg PT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRjdXJyZW50LCAiLiIpKSwgJ3N0YXQnID0+ IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXVuc2V0ICgk Y3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZpbGVzLCBhcnJheSAoInNtZF9jcnVuY2hf YXJjaGl2ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJ ZnVuY3Rpb24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25z WydzdG9yZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIsICRk aXJuYW1lKSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJuYW1l LCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdfcmVw bGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10g PT0gMCAmJiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5hbWUs IHN0cnJwb3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+IDUs ICdzdGF0JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBhcnJh eSAoKTsNCgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZpbGUg PSBAcmVhZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAiLyIg LiAkZmlsZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJCQlj b250aW51ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJCQlp ZiAoZW1wdHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51ZTsN CgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3JlYWNo ICgkdGVtcCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0KCQkJ ZWxzZSBpZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBhcnJh eSAoJ25hbWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJl cGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMt Pm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIvIikp ID8NCgkJCQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikgKyAx KSA6ICRmdWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUpICYm ICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4 dCcgPT4gc3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+IHN0 YXQoJGZ1bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0dXJu ICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJCWlm ICgkYVsndHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1IHx8 ICRiWyd0eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsndHlw ZSddID09IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNlIGlm ICgkYVsndHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25h bWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0J10g IT0gJGJbJ2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQnXSk7 DQoJCWVsc2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJldHVy biAkYVsnc3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0KCQkJ cmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWydu YW1lJ10pKTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmlsZSgp DQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJ JHRoaXMtPmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBhcmNo aXZlIGlzIGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlzIGZh c3Rlci4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFw cGxpY2F0aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVhZGVy KCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0KCQlj YXNlICJnemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6 aXAiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5 cGU6IGFwcGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50LURp c3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0gc3Ry c3RyKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9wdGlv bnNbJ25hbWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsgMSkg OiAkdGhpcy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhlYWRl cigkaGVhZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkdGhp cy0+YXJjaGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJp bmFyeSIpOw0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFs aWRhdGUsIG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAy MDAwIDEyOjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0KfQ0K DQpjbGFzcyBzbWRfY3J1bmNoX3Rhcl9maWxlIGV4dGVuZHMgc21kX2NydW5jaF9hcmNoaXZl DQp7DQoJZnVuY3Rpb24gc21kX2NydW5jaF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlz LT5zbWRfY3J1bmNoX2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSdd ID0gInRhciI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3RhcigpDQoJew0KCQkkcHdkID0g Z2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZv cmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50 WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250aW51ZTsNCgkJ CWlmIChzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJCQl7DQoJCQkJJHBhdGgg PSBzdWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIDAsIHN0cnBvcygkY3VycmVudFsnbmFtZTIn XSwgIi8iLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pIC0gMTAwKSArIDEpOw0KCQkJCSRj dXJyZW50WyduYW1lMiddID0gc3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCBzdHJsZW4oJHBh dGgpKTsNCgkJCQlpZiAoc3RybGVuKCRwYXRoKSA+IDE1NCB8fCBzdHJsZW4oJGN1cnJlbnRb J25hbWUyJ10pID4gOTkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBu b3QgYWRkIHskcGF0aH17JGN1cnJlbnRbJ25hbWUyJ119IHRvIGFyY2hpdmUgYmVjYXVzZSB0 aGUgZmlsZW5hbWUgaXMgdG9vIGxvbmcuIjsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJ fQ0KCQkJJGJsb2NrID0gcGFjaygiYTEwMGE4YThhOGExMmExMmE4YTFhMTAwYTZhMmEzMmEz MmE4YThhMTU1YTEyIiwgJGN1cnJlbnRbJ25hbWUyJ10sIHNwcmludGYoIiUwN28iLA0KCQkJ CSRjdXJyZW50WydzdGF0J11bMl0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQn XVs0XSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzVdKSwNCgkJCQlzcHJp bnRmKCIlMDExbyIsICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IDAgOiAkY3VycmVudFsnc3Rh dCddWzddKSwgc3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsnc3RhdCddWzldKSwNCgkJCQki ICAgICAgICAiLCAkY3VycmVudFsndHlwZSddLCAkY3VycmVudFsndHlwZSddID09IDIgPyBA cmVhZGxpbmsoJGN1cnJlbnRbJ25hbWUnXSkgOiAiIiwgInVzdGFyICIsICIgIiwNCgkJCQki VW5rbm93biIsICJVbmtub3duIiwgIiIsICIiLCAhZW1wdHkgKCRwYXRoKSA/ICRwYXRoIDog IiIsICIiKTsNCg0KCQkJJGNoZWNrc3VtID0gMDsNCgkJCWZvciAoJGkgPSAwOyAkaSA8IDUx MjsgJGkrKykNCgkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7 DQoJCQkkY2hlY2tzdW0gPSBwYWNrKCJhOCIsIHNwcmludGYoIiUwN28iLCAkY2hlY2tzdW0p KTsNCgkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywgJGNoZWNrc3VtLCAxNDgs IDgpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3R5cGUnXSA9PSAyIHx8ICRjdXJyZW50WydzdGF0 J11bN10gPT0gMCkNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCWVsc2UgaWYg KCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGhp cy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkZnAsIDEw NDg1NzYpKQ0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCWlmICgkY3VycmVu dFsnc3RhdCddWzddICUgNTEyID4gMCkNCgkJCQl7DQoJCQkJCSR0ZW1wID0gIiI7DQoJCQkJ CWZvciAoJGkgPSAwOyAkaSA8IDUxMiAtICRjdXJyZW50WydzdGF0J11bN10gJSA1MTI7ICRp KyspDQoJCQkJCQkkdGVtcCAuPSAiXDAiOw0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXAp Ow0KCQkJCX0NCgkJCQlmY2xvc2UoJGZwKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskY3VycmVudFsnbmFtZSddfSBmb3Ig cmVhZGluZy4gSXQgd2FzIG5vdCBhZGRlZC4iOw0KCQl9DQoNCgkJJHRoaXMtPmFkZF9kYXRh KHBhY2soImExMDI0IiwgIiIpKTsNCg0KCQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4gMTsN Cgl9DQoNCglmdW5jdGlvbiBleHRyYWN0X2ZpbGVzKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2Qo KTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJaWYgKCRmcCA9 ICR0aGlzLT5vcGVuX2FyY2hpdmUoKSkNCgkJew0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydp bm1lbW9yeSddID09IDEpDQoJCQkJJHRoaXMtPmZpbGVzID0gYXJyYXkgKCk7DQoNCgkJCXdo aWxlICgkYmxvY2sgPSBmcmVhZCgkZnAsIDUxMikpDQoJCQl7DQoJCQkJJHRlbXAgPSB1bnBh Y2soImExMDBuYW1lL2E4bW9kZS9hOHVpZC9hOGdpZC9hMTJzaXplL2ExMm10aW1lL2E4Y2hl Y2tzdW0vYTF0eXBlL2ExMDBzeW1saW5rL2E2bWFnaWMvYTJ0ZW1wL2EzMnRlbXAvYTMydGVt cC9hOHRlbXAvYTh0ZW1wL2ExNTVwcmVmaXgvYTEydGVtcCIsICRibG9jayk7DQoJCQkJJGZp bGUgPSBhcnJheSAoDQoJCQkJCSduYW1lJyA9PiAkdGVtcFsncHJlZml4J10gLiAkdGVtcFsn bmFtZSddLA0KCQkJCQknc3RhdCcgPT4gYXJyYXkgKA0KCQkJCQkJMiA9PiAkdGVtcFsnbW9k ZSddLA0KCQkJCQkJNCA9PiBvY3RkZWMoJHRlbXBbJ3VpZCddKSwNCgkJCQkJCTUgPT4gb2N0 ZGVjKCR0ZW1wWydnaWQnXSksDQoJCQkJCQk3ID0+IG9jdGRlYygkdGVtcFsnc2l6ZSddKSwN CgkJCQkJCTkgPT4gb2N0ZGVjKCR0ZW1wWydtdGltZSddKSwNCgkJCQkJKSwNCgkJCQkJJ2No ZWNrc3VtJyA9PiBvY3RkZWMoJHRlbXBbJ2NoZWNrc3VtJ10pLA0KCQkJCQkndHlwZScgPT4g JHRlbXBbJ3R5cGUnXSwNCgkJCQkJJ21hZ2ljJyA9PiAkdGVtcFsnbWFnaWMnXSwNCgkJCQkp Ow0KDQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSddID09IDB4MDAwMDAwMDApDQoJCQkJCWJy ZWFrOw0KCQkJCWVsc2UgaWYgKHN1YnN0cigkZmlsZVsnbWFnaWMnXSwgMCwgNSkgIT0gInVz dGFyIikNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIlRoaXMgc2NyaXB0IGRvZXMg bm90IHN1cHBvcnQgZXh0cmFjdGluZyB0aGlzIHR5cGUgb2YgdGFyIGZpbGUuIjsNCgkJCQkJ YnJlYWs7DQoJCQkJfQ0KCQkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywgIiAg ICAgICAgIiwgMTQ4LCA4KTsNCgkJCQkkY2hlY2tzdW0gPSAwOw0KCQkJCWZvciAoJGkgPSAw OyAkaSA8IDUxMjsgJGkrKykNCgkJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2Nr LCAkaSwgMSkpOw0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSAhPSAkY2hlY2tzdW0pDQoJ CQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBleHRyYWN0IGZyb20geyR0aGlzLT5v cHRpb25zWyduYW1lJ119LCBpdCBpcyBjb3JydXB0LiI7DQoNCgkJCQkvLyBBZGRlZDogY3Jl YXRlIGRpciBpZiByZXF1aXJlZA0KCQkJCWlmIChzdHJwb3MoJGZpbGVbJ25hbWUnXSwgJy4u JykgPT09IGZhbHNlKSB7DQoJCQkJCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oJGZpbGVbJ25h bWUnXSk7DQoJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVbJ25hbWUnXSkpIHsNCgkJCQkJ CSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBhdGhfcGFydHNbJ2V4dGVu c2lvbiddKSkgPyBkaXJuYW1lKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10uRFMuJGZpbGVb J25hbWUnXSkgOiAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRmaWxlWyduYW1lJ10p KTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnkn XSA9PSAxKQ0KCQkJCXsNCgkJCQkJJGZpbGVbJ2RhdGEnXSA9IGZyZWFkKCRmcCwgJGZpbGVb J3N0YXQnXVs3XSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUxMiAtICRmaWxlWydzdGF0J11bN10g JSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikpOw0K CQkJCQl1bnNldCAoJGZpbGVbJ2NoZWNrc3VtJ10sICRmaWxlWydtYWdpYyddKTsNCgkJCQkJ JHRoaXMtPmZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZpbGVbJ3R5 cGUnXSA9PSA1KQ0KCQkJCXsNCgkJCQkJaWYgKCFpc19kaXIoJGZpbGVbJ25hbWUnXSkpDQoJ CQkJCQlta2RpcigkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJ CQkJZWxzZSBpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSddID09IDAgJiYgZmlsZV9l eGlzdHMoJGZpbGVbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJ7 JGZpbGVbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQkJY29udGludWU7DQoJCQkJ fQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBlJ10gPT0gMikNCgkJCQl7DQoJCQkJCXN5bWxp bmsoJHRlbXBbJ3N5bWxpbmsnXSwgJGZpbGVbJ25hbWUnXSk7DQoJCQkJCWNobW9kKCRmaWxl WyduYW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkbmV3 ID0gZm9wZW4oJGZpbGVbJ25hbWUnXSwgIndiIikpDQoJCQkJew0KCQkJCQlmd3JpdGUoJG5l dywgZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUx MiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVb J3N0YXQnXVs3XSAlIDUxMikpOw0KCQkJCQlmY2xvc2UoJG5ldyk7DQoJCQkJCUBjaG1vZCgk ZmlsZVsnbmFtZSddLCAwNjQ0KTsgLy8gSGFyZC1jb2RlZCBmb3Igbm93IGJlY2F1c2UgdGhl IHN0dXBpZCAwMTAwNjQ0IHZhbHVlIGluICRmaWxlWydzdGF0J11bMl0gY29uZnVzZXMgdGhl IE9TL1BIUA0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9 ICJDb3VsZCBub3Qgb3BlbiB7JGZpbGVbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQkJ Y29udGludWU7DQoJCQkJfQ0KCQkJCS8vIFJlbW92ZSBvd25lciBhbmQgZ3JvdXAgc2V0dGlu ZyBzaW5jZSB0aGVyZSBpcyBhbG1vc3QgMCBsaWtlbGlob29kIHRoZSBmaWxlcyB3aWxsIGhh dmUgdGhlIHNhbWUgdXNlci9ncm91cCBhY3Jvc3Mgc3lzdGVtcw0KCQkJCS8vIEluIG90aGVy IHdvcmRzLCBsZWF2ZSBvd25lci9ncm91cCBhdCB0aGUgQXBhY2hlIGRlZmF1bHQgLS0gd2hp Y2ggaXMgd2hhdCB3ZSB3YW50DQovLwkJCQljaG93bigkZmlsZVsnbmFtZSddLCAkZmlsZVsn c3RhdCddWzRdKTsNCi8vCQkJCWNoZ3JwKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11b NV0pOw0KCQkJCUB0b3VjaCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzldKTsNCgkJ CQl1bnNldCAoJGZpbGUpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5lcnJvcltd ID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyR0aGlzLT5vcHRpb25zWyduYW1lJ119IjsNCg0K CQljaGRpcigkcHdkKTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJ cmV0dXJuIEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIiKTsNCgl9DQp9DQoN CmNsYXNzIHNtZF9jcnVuY2hfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2NydW5jaF90YXJfZmls ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9jcnVuY2hfZ3ppcF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRo aXMtPnNtZF9jcnVuY2hfdGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlw ZSddID0gImd6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJCWlm ICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0 Y3dkKCk7DQoJCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgk ZnAgPSBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRpb25z WydsZXZlbCddfSIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJ CQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJ CWd6d3JpdGUoJGZwLCAkdGVtcCk7DQoJCQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRw d2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJ CWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0 aGlzLT5hcmNoaXZlID0gZ3plbmNvZGUoJHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25z WydsZXZlbCddKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hp dmUoKQ0KCXsNCgkJcmV0dXJuIEBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJi Iik7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfY3J1bmNoX2J6aXBfZmlsZSBleHRlbmRzIHNtZF9j cnVuY2hfdGFyX2ZpbGUNCnsNCglmdW5jdGlvbiBzbWRfY3J1bmNoX2J6aXBfZmlsZSgkbmFt ZSkNCgl7DQoJCSR0aGlzLT5zbWRfY3J1bmNoX3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRoaXMt Pm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYnpp cCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0K CQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXIn XSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3YiIp KQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRl bXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3JpdGUoJGZw LCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0K CQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHsk dGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2Qp Ow0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZl ID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10p Ow0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0K CQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiciIpOw0KCX0NCn0N Cg0KY2xhc3Mgc21kX2NydW5jaF96aXBfZmlsZSBleHRlbmRzIHNtZF9jcnVuY2hfYXJjaGl2 ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9jcnVuY2hfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhp cy0+c21kX2NydW5jaF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9ICJ6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV96aXAoKQ0KCXsNCgkJJGZpbGVz ID0gMDsNCgkJJG9mZnNldCA9IDA7DQoJCSRjZW50cmFsID0gIiI7DQoNCgkJaWYgKCFlbXB0 eSAoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSkNCgkJCWlmICgkZnAgPSBAZm9wZW4oJHRoaXMt Pm9wdGlvbnNbJ3NmeCddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwg ZmlsZXNpemUoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJ CQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQkkb2Zmc2V0ICs9IHN0cmxlbigkdGVt cCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhpcy0+ZXJy b3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBzZnggbW9kdWxlIGZyb20geyR0aGlzLT5vcHRpb25z WydzZngnXX0uIjsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRp b25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVu dCkNCgkJew0KCQkJaWYgKCRjdXJyZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25h bWUnXSkNCgkJCQljb250aW51ZTsNCg0KCQkJJHRpbWVkYXRlID0gZXhwbG9kZSgiICIsIGRh dGUoIlkgbiBqIEcgaSBzIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSkpOw0KCQkJJHRpbWVkYXRl ID0gKCR0aW1lZGF0ZVswXSAtIDE5ODAgPDwgMjUpIHwgKCR0aW1lZGF0ZVsxXSA8PCAyMSkg fCAoJHRpbWVkYXRlWzJdIDw8IDE2KSB8DQoJCQkJKCR0aW1lZGF0ZVszXSA8PCAxMSkgfCAo JHRpbWVkYXRlWzRdIDw8IDUpIHwgKCR0aW1lZGF0ZVs1XSk7DQoNCgkJCSRibG9jayA9IHBh Y2soIlZ2dnZWIiwgMHgwNDAzNGI1MCwgMHgwMDBBLCAweDAwMDAsIChpc3NldCgkY3VycmVu dFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAw MCA6IDB4MDAwOCwgJHRpbWVkYXRlKTsNCg0KCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10g PT0gMCAmJiAkY3VycmVudFsndHlwZSddID09IDUpDQoJCQl7DQoJCQkJJGJsb2NrIC49IHBh Y2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3RybGVu KCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJy ZW50WyduYW1lMiddIC4gIi8iOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJ CSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAw MTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAw eDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRp b25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJ CQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRb J25hbWUyJ10pICsgMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3VycmVu dFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJ CQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJGZpbGVzKys7 DQoJCQkJJG9mZnNldCArPSAoMzEgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJ CX0NCgkJCWVsc2UgaWYgKCRjdXJyZW50WydzdGF0J11bN10gPT0gMCkNCgkJCXsNCgkJCQkk YmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAw MDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9jayAu PSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJ CQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwgMHgw MDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4MDAwQSwg MHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+b3B0 aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSwNCgkJ CQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJyZW50 WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3VycmVudFsn dHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJ JGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9m ZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJCWVs c2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsNCgkJ CQkkdGVtcCA9IGZyZWFkKCRmcCwgJGN1cnJlbnRbJ3N0YXQnXVs3XSk7DQoJCQkJZmNsb3Nl KCRmcCk7DQoJCQkJJGNyYzMyID0gY3JjMzIoJHRlbXApOw0KCQkJCWlmICghaXNzZXQoJGN1 cnJlbnRbJ21ldGhvZCddKSAmJiAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMSkNCgkJ CQl7DQoJCQkJCSR0ZW1wID0gZ3pjb21wcmVzcygkdGVtcCwgJHRoaXMtPm9wdGlvbnNbJ2xl dmVsJ10pOw0KCQkJCQkkc2l6ZSA9IHN0cmxlbigkdGVtcCkgLSA2Ow0KCQkJCQkkdGVtcCA9 IHN1YnN0cigkdGVtcCwgMiwgJHNpemUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJCSRzaXpl ID0gc3RybGVuKCR0ZW1wKTsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAkY3JjMzIs ICRzaXplLCAkY3VycmVudFsnc3RhdCddWzddLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10p LCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhp cy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJ CXVuc2V0ICgkdGVtcCk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZW ViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAg PyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRo b2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgw MDA4LCAkdGltZWRhdGUsDQoJCQkJCSRjcmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0J11b N10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJl bnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBzdHJs ZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgJHNpemUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0 aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119 IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRk X2RhdGEoJGNlbnRyYWwpOw0KDQoJCSR0aGlzLT5hZGRfZGF0YShwYWNrKCJWdnZ2dlZWdiIs IDB4MDYwNTRiNTAsIDB4MDAwMCwgMHgwMDAwLCAkZmlsZXMsICRmaWxlcywgc3RybGVuKCRj ZW50cmFsKSwgJG9mZnNldCwNCgkJCSFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQn XSkgPyBzdHJsZW4oJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgOiAweDAwMDApKTsNCg0K CQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSkNCgkJCSR0aGlzLT5h ZGRfZGF0YSgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKTsNCg0KCQljaGRpcigkcHdkKTsN Cg0KCQlyZXR1cm4gMTsNCgl9DQp9DQoNCi8vIDE5LzA4LzIwMTEgKHYyLjY2MykNCi8vIC0g dW56aXBBbGwgd2FzIHVzaW5nIGRvdWJsZSBzbGFzaGVzIChwYXRoLy9maWxlbmFtZSkgdG8g c2F2ZSBmaWxlcy4gKHRoYW5rcyB0byBLYXJlbiBQZXl0b24pLg0KLy8gMDkvMDgvMjAxMCAo djIuNjYyKQ0KLy8gLSB1bnppcEFsbCBwYXJhbWV0ZXJzIGZ1bGx5IHJldmlld2VkIGFuZCBm aXhlZC4gVGhhbmtzIFJvbm55IERyZXNjaGxlciBhbmQgQ29ub3IgTWFjIEFvaWRoLg0KLy8g MTIvMDUvMjAxMCAodjIuNjYxKQ0KLy8gLSBGaXhlZCBFX1NUUklDVCBub3RpY2U6ICJPbmx5 IHZhcmlhYmxlcyBzaG91bGQgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSIuIFRoYW5rcyBFcmlr IFcuDQovLyAyNC8wMy8yMDEwICh2Mi42NikNCi8vIC0gRml4ZWQgYnVnIGluc2lkZSB1bnpp cEFsbCB3aGVuIGRpcm5hbWUgaXMgIi4iICh0aGFua3MgdG8gVGhvcnN0ZW4gR3JvdGgpDQov LyAtIEFkZGVkIGNoYXJhY3RlciAiwrQiIHRvIHRoZSBzdHJpbmcgY29udmVyc2lvbiB0YWJs ZSAoZXg6IGNhaXhhIGTCtMOhZ3VhKQ0KLy8gMjcvMDIvMjAxMA0KLy8gLSBSZW1vdmVkIFBI UDQgc3VwcG9ydCAoZmlsZV9wdXRfY29udGVudHMgcmVkZWNsYXJhdGlvbikuDQovLyAwNC8x Mi8yMDA5ICh2Mi42NSkNCi8vICogQWRkZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRvIGRl Y29kZSBhY2NlbnRzIGFuZC9vciBzcGVjaWFsIGNoYXJhY3RlcnMuDQovLyAxMC8xMS8yMDA5 DQovLyAqIFNvbWUgc2VjdXJpdHkgYWRkZWQgdG8gYXZvaWQgbWFsaWNpb3VzIFpJUCBmaWxl cyAocmVsYXRpdmUgZGlycykNCi8vICogdW56aXBBbGwoKSB3aWxsIG91dHB1dCBieSBkZWZh dWx0IHRvIHNhbWUgZm9sZGVyIG9mIHRoZSBjYWxsZXIgc2NyaXB0DQovLyAyNS8wOS8yMDA5 DQovLyAtIENvZGUgb3B0aW1pemF0aW9uIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UgKHVuY29t cHJlc3MoJiRjb250ZW50cykpDQovLyAxMi8wNy8yMDA5ICgyLjYyKQ0KLy8gLSBEZWJ1ZyBt ZXNzYWdlcyBhcmUgc2hvd24gb25seSB3aGVuIGV4cGxpY2l0Lg0KLy8gLSBOZXcgbWV0aG9k OiBnZXRMYXN0RXJyb3IoKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBDbGFzcyBkVW56aXAyIHYyLjY2Mw0K Iw0KIyAgQXV0aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQojICBFLU1haWw6IGFsZXhh bmRyZWJyIGF0IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0gUFIgLyBCcmF6aWwNCiMN CiMgIE9iamVjdGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3MgcHJvZ3JhbW1lciB0byBl YXNpbHkgdW56aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJlcXVpcmVtZW50czoNCiMg ICAgVGhpcyBjbGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBFbmFibGVkLiBJdCBpcyBk ZWZhdWx0DQojICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5kIHRoZSB3b3JsZCwgYW5k IGZvciB0aGUgUEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoNCiMgICAqIEVycm9yIGhh bmRsaW5nDQojICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0ZSwgdG8gY29tcGxldGVs eSBhdm9pZCBhbnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICogV3JpdGUgb3RoZXIgZGVj b21wcmVzcyBhbGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAgKiBkVW56aXAyKCRmaWxl bmFtZSkgICAgICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZpbGVuYW1lDQojICAqIGdl dExpc3QoWyRzdG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhlIGZpbGUgbGlzdA0KIyAg KiBnZXRFeHRyYUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZlIG1vcmUgaW5mb3JtYXRp b24gYWJvdXQgY29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcEluZm8oWyRlbnRyeV0pICAg ICAgIC0gUmV0cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICogdW56aXAoJHppcGZpbGVu YW1lLCBbJG91dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBVbnppcCBmaWxlDQojICAq IHVuemlwQWxsKFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFpblN0cnVjdHVyZSwgWyRh cHBseUNobW9kXV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAgICAgICAgICAgLSBDbG9z ZSBmaWxlIGhhbmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAqIF9fZGVzdHJveSgpICAg ICAgICAgICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCByZWxlYXNlIG1lbW9yeQ0K Iw0KIyAgSWYgeW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZlIGFueSBpZGVhcyB0byBp bXByb3ZlIGl0LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBhcmUgYWxsb3dlZCB0byBy ZWRpc3RyaWJ1dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkgbmFtZSBhbmQgY29udGFj dCBlLW1haWwgb24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBVU0UgVEhJUyBDTEFTUyBJ TiBBTlkgT0YgWU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBLTk9XIQ0KIyAgSWYgeW91 IGhhdmUgcHJvYmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3aWNlIGJlZm9yZSBjb250 YWN0aW5nIG1lIQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KY2xhc3Mgc21kX2NydW5jaF9kVW56aXAyew0K CUZ1bmN0aW9uIGdldFZlcnNpb24oKXsNCgkJcmV0dXJuICIyLjY2MyI7DQoJfQ0KCS8vIFB1 YmxpYw0KCXZhciAkZmlsZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFyICRjb21wcmVz c2VkTGlzdDsgLy8gWW91IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMgb25lIQ0KCXZh ciAkY2VudHJhbERpckxpc3Q7IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQncyBhIGtpbmQg b2YgJ2V4dHJhIGF0dHJpYnV0ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZhciAkZW5kT2ZD ZW50cmFsOyAgIC8vIEVuZCBvZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQIENvbW1lbnRz DQoJdmFyICRkZWJ1ZzsNCg0KCS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZhciAkemlwU2ln bmF0dXJlID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWdu YXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2Vu dHJhbCBkaXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBc eDRiXHgwNVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoNCgkvLyBQ dWJsaWMNCglGdW5jdGlvbiBzbWRfY3J1bmNoX2RVbnppcDIoJGZpbGVOYW1lKXsNCgkJJHRo aXMtPmZpbGVOYW1lICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhpcy0+Y29tcHJlc3NlZExp c3QgPSANCgkJJHRoaXMtPmNlbnRyYWxEaXJMaXN0ID0gDQoJCSR0aGlzLT5lbmRPZkNlbnRy YWwgICA9IEFycmF5KCk7DQoJfQ0KCQ0KCUZ1bmN0aW9uIGdldExpc3QoJHN0b3BPbkZpbGU9 ZmFsc2Upew0KCQlpZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7DQoJCQkkdGhp cy0+ZGVidWdNc2coMSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRlZCBmaWxlIGxpc3QuIik7 DQoJCQlyZXR1cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9DQoJCQ0KCQkvLyBPcGVu IGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5kbGVyDQoJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxl TmFtZSwgInIiKTsNCgkJJHRoaXMtPmZoID0gJiRmaDsNCgkJaWYoISRmaCl7DQoJCQkkdGhp cy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0byBsb2FkIGZpbGUuIik7DQoJCQlyZXR1cm4gZmFs c2U7DQoJCX0NCgkJDQoJCSR0aGlzLT5kZWJ1Z01zZygxLCAiTG9hZGluZyBsaXN0IGZyb20g J0VuZCBvZiBDZW50cmFsIERpcicgaW5kZXggbGlzdC4uLiIpOw0KCQlpZighJHRoaXMtPl9s b2FkRmlsZUxpc3RCeUVPRigkZmgsICRzdG9wT25GaWxlKSl7DQoJCQkkdGhpcy0+ZGVidWdN c2coMSwgIkZhaWxlZCEgVHJ5aW5nIHRvIGxvYWQgbGlzdCBsb29raW5nIGZvciBzaWduYXR1 cmVzLi4uIik7DQoJCQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RCeVNpZ25hdHVyZXMoJGZo LCAkc3RvcE9uRmlsZSkpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmFpbGVkISBDb3Vs ZCBub3QgZmluZCBhbnkgdmFsaWQgaGVhZGVyLiIpOw0KCQkJCSR0aGlzLT5kZWJ1Z01zZygy LCAiWklQIEZpbGUgaXMgY29ycnVwdGVkIG9yIGVtcHR5Iik7DQoJCQkJcmV0dXJuIGZhbHNl Ow0KCQkJfQ0KCQl9DQoJCQ0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJIy0tLS0tLS0gRGVi dWcgY29tcHJlc3NlZExpc3QNCgkJCSRra2sgPSAwOw0KCQkJZWNobyAiPHRhYmxlIGJvcmRl cj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAw MCc+IjsNCgkJCWZvcmVhY2goJHRoaXMtPmNvbXByZXNzZWRMaXN0IGFzICRmaWxlTmFtZT0+ JGl0ZW0pew0KCQkJCWlmKCEka2trICYmICRra2s9MSl7DQoJCQkJCWVjaG8gIjx0ciBzdHls ZT0nYmFja2dyb3VuZDogI0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGRO YW1lPT4kdmFsdWUpDQoJCQkJCQllY2hvICI8dGQ+JGZpZWxkTmFtZTwvdGQ+IjsNCgkJCQkJ ZWNobyAnPC90cj4nOw0KCQkJCX0NCgkJCQllY2hvICI8dHIgc3R5bGU9J2JhY2tncm91bmQ6 ICNDRkMnPiI7DQoJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpew0K CQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCWVjaG8g Ijx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiIuZGF0ZSgiZC9tL1kg SDppOnMiLCAkdmFsdWUpLiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJCQkJCWVjaG8gIjx0ZCB0 aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJCQl9 DQoJCQkJZWNobyAiPC90cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90YWJsZT4iOw0KCQkJDQoJ CQkjLS0tLS0tLSBEZWJ1ZyBjZW50cmFsRGlyTGlzdA0KCQkJJGtrayA9IDA7DQoJCQlpZihz aXplb2YoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRl cj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAw MCc+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZU5hbWU9 PiRpdGVtKXsNCgkJCQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJCQkJCWVjaG8gIjx0ciBz dHlsZT0nYmFja2dyb3VuZDogI0FBRCc+IjsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGZp ZWxkTmFtZT0+JHZhbHVlKQ0KCQkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4iOw0K CQkJCQkJZWNobyAnPC90cj4nOw0KCQkJCQl9DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFj a2dyb3VuZDogI0NDRic+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4k dmFsdWUpew0KCQkJCQkJaWYoJGZpZWxkTmFtZSA9PSAnbGFzdG1vZF9kYXRldGltZScpDQoJ CQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+Ii5k YXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJCWVsc2UNCgkJCQkJ CQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFwJz4kdmFsdWU8 L3RkPiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hvICI8 L3RhYmxlPiI7DQoJCQl9DQoJCQ0KCQkJIy0tLS0tLS0gRGVidWcgZW5kT2ZDZW50cmFsDQoJ CQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ZW5kT2ZDZW50cmFsKSl7DQoJCQkJ ZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYScgc3R5 bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJZWNobyAiPHRyIHN0eWxlPSdi YWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ZFVuemlwIC0gRW5kIG9mIGZpbGU8 L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRPZkNlbnRyYWwgYXMgJGZpZWxk PT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJCQkJZWNobyAiPHRkIHN0eWxlPSdi YWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJCWVjaG8gIjx0ZCBzdHlsZT0n YmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJCQllY2hvICI8L3RyPiI7DQoJ CQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICR0 aGlzLT5jb21wcmVzc2VkTGlzdDsNCgl9DQoJRnVuY3Rpb24gZ2V0RXh0cmFJbmZvKCRjb21w cmVzc2VkRmlsZU5hbWUpew0KCQlyZXR1cm4NCgkJCWlzc2V0KCR0aGlzLT5jZW50cmFsRGly TGlzdFskY29tcHJlc3NlZEZpbGVOYW1lXSk/DQoJCQkkdGhpcy0+Y2VudHJhbERpckxpc3Rb JGNvbXByZXNzZWRGaWxlTmFtZV06DQoJCQlmYWxzZTsNCgl9DQoJRnVuY3Rpb24gZ2V0Wmlw SW5mbygkZGV0YWlsPWZhbHNlKXsNCgkJcmV0dXJuICRkZXRhaWw/DQoJCQkkdGhpcy0+ZW5k T2ZDZW50cmFsWyRkZXRhaWxdOg0KCQkJJHRoaXMtPmVuZE9mQ2VudHJhbDsNCgl9DQoJDQoJ RnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRhcmdldEZpbGVOYW1lPWZh bHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigkdGhpcy0+Y29tcHJlc3Nl ZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5nIHRvIHVuemlwIGJlZm9y ZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0KCQkJJHRoaXMtPmdldExp c3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoJCQ0KCQkkZmRldGFpbHMg PSAmJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOw0KCQlpZigh aXNzZXQoJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdKSl7DQoJ CQkkdGhpcy0+ZGVidWdNc2coMiwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+ JyBpcyBub3QgY29tcHJlc3NlZCBpbiB0aGUgemlwLiIpOw0KCQkJcmV0dXJuIGZhbHNlOw0K CQl9DQoJCWlmKHN1YnN0cigkY29tcHJlc3NlZEZpbGVOYW1lLCAtMSkgPT0gIi8iKXsNCgkJ CSR0aGlzLT5kZWJ1Z01zZygyLCAiVHJ5aW5nIHRvIHVuemlwIGEgZm9sZGVyIG5hbWUgJzxi PiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+Jy4iKTsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0K CQlpZighJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddKXsNCgkJCSR0aGlzLT5kZWJ1 Z01zZygxLCAiRmlsZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nIGlzIGVtcHR5LiIp Ow0KCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQlmaWxlX3B1dF9jb250ZW50cygk dGFyZ2V0RmlsZU5hbWUsICIiKToNCgkJCQkiIjsNCgkJfQ0KCQkNCgkJZnNlZWsoJHRoaXMt PmZoLCAkZmRldGFpbHNbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10pOw0KCQkkdG9VbmNvbXBy ZXNzID0gZnJlYWQoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbXByZXNzZWRfc2l6ZSddKTsN CgkJJHJldCA9ICR0aGlzLT51bmNvbXByZXNzKA0KCQkJCSR0b1VuY29tcHJlc3MsDQoJCQkJ JGZkZXRhaWxzWydjb21wcmVzc2lvbl9tZXRob2QnXSwNCgkJCQkkZmRldGFpbHNbJ3VuY29t cHJlc3NlZF9zaXplJ10sDQoJCQkJJHRhcmdldEZpbGVOYW1lDQoJCQkpOw0KCQl1bnNldCgk dG9VbmNvbXByZXNzKTsNCgkJaWYoJGFwcGx5Q2htb2QgJiYgJHRhcmdldEZpbGVOYW1lKQ0K CQkJY2htb2QoJHRhcmdldEZpbGVOYW1lLCAwNzc3KTsNCg0KCQlyZXR1cm4gJHJldDsNCgl9 DQoJRnVuY3Rpb24gdW56aXBBbGwoJHRhcmdldERpcj1mYWxzZSwgJGJhc2VEaXI9IiIsICRt YWludGFpblN0cnVjdHVyZT10cnVlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoJHRhcmdl dERpciA9PT0gZmFsc2UpDQoJCQkkdGFyZ2V0RGlyID0gZGlybmFtZSgkX1NFUlZFUlsnU0NS SVBUX0ZJTEVOQU1FJ10pLiIvIjsNCgkJDQoJCWlmKHN1YnN0cigkdGFyZ2V0RGlyLCAtMSkg PT0gIi8iKQ0KCQkJJHRhcmdldERpciA9IHN1YnN0cigkdGFyZ2V0RGlyLCAwLCAtMSk7DQoJ CQ0KCQkkbGlzdGEgPSAkdGhpcy0+Z2V0TGlzdCgpOw0KCQlpZihzaXplb2YoJGxpc3RhKSkg Zm9yZWFjaCgkbGlzdGEgYXMgJGZpbGVOYW1lPT4kdHJhc2gpew0KCQkJJGRpcm5hbWUgID0g ZGlybmFtZSgkZmlsZU5hbWUpOw0KCQkJJG91dEROICAgID0gIiR0YXJnZXREaXIvJGRpcm5h bWUiOw0KCQkJDQoJCQlpZihzdWJzdHIoJGRpcm5hbWUsIDAsIHN0cmxlbigkYmFzZURpcikp ICE9ICRiYXNlRGlyKQ0KCQkJCWNvbnRpbnVlOw0KCQkJDQoJCQlpZighaXNfZGlyKCRvdXRE TikgJiYgJG1haW50YWluU3RydWN0dXJlKXsNCgkJCQkkc3RyID0gIiI7DQoJCQkJJGZvbGRl cnMgPSBleHBsb2RlKCIvIiwgJGRpcm5hbWUpOw0KCQkJCWZvcmVhY2goJGZvbGRlcnMgYXMg JGZvbGRlcil7DQoJCQkJCSRzdHIgPSAkc3RyPyIkc3RyLyRmb2xkZXIiOiRmb2xkZXI7DQoJ CQkJCWlmKCFpc19kaXIoIiR0YXJnZXREaXIvJHN0ciIpKXsNCgkJCQkJCSR0aGlzLT5kZWJ1 Z01zZygxLCAiQ3JlYXRpbmcgZm9sZGVyOiAkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJCQkJCW1r ZGlyKCIkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJCQkJCWlmKCRhcHBseUNobW9kKQ0KCQkJCQkJ CWNobW9kKCIkdGFyZ2V0RGlyLyRzdHIiLCAkYXBwbHlDaG1vZCk7DQoJCQkJCX0NCgkJCQl9 DQoJCQl9DQoJCQlpZihzdWJzdHIoJGZpbGVOYW1lLCAtMSwgMSkgPT0gIi8iKQ0KCQkJCWNv bnRpbnVlOw0KCQkJDQoJCQkkbWFpbnRhaW5TdHJ1Y3R1cmU/DQoJCQkJJHRoaXMtPnVuemlw KCRmaWxlTmFtZSwgIiR0YXJnZXREaXIvJGZpbGVOYW1lIiwgJGFwcGx5Q2htb2QpOg0KCQkJ CSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGlyLyIuYmFzZW5hbWUoJGZpbGVO YW1lKSwgJGFwcGx5Q2htb2QpOw0KCQl9DQoJfQ0KCQ0KCUZ1bmN0aW9uIGNsb3NlKCl7ICAg ICAvLyBGcmVlIHRoZSBmaWxlIHJlc291cmNlDQoJCWlmKCR0aGlzLT5maCkNCgkJCWZjbG9z ZSgkdGhpcy0+ZmgpOw0KCX0NCglGdW5jdGlvbiBfX2Rlc3Ryb3koKXsgDQoJCSR0aGlzLT5j bG9zZSgpOw0KCX0NCgkNCgkvLyBQcml2YXRlICh5b3Ugc2hvdWxkIE5PVCBjYWxsIHRoZXNl IG1ldGhvZHMpOg0KCUZ1bmN0aW9uIHVuY29tcHJlc3MoJiRjb250ZW50LCAkbW9kZSwgJHVu Y29tcHJlc3NlZFNpemUsICR0YXJnZXRGaWxlTmFtZT1mYWxzZSl7DQoJCXN3aXRjaCgkbW9k ZSl7DQoJCQljYXNlIDA6DQoJCQkJLy8gTm90IGNvbXByZXNzZWQNCgkJCQlyZXR1cm4gJHRh cmdldEZpbGVOYW1lPw0KCQkJCQlmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0RmlsZU5hbWUs ICRjb250ZW50KToNCgkJCQkJJGNvbnRlbnQ7DQoJCQljYXNlIDE6DQoJCQkJJHRoaXMtPmRl YnVnTXNnKDIsICJTaHJ1bmsgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJ CQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDI6DQoJCQljYXNlIDM6DQoJCQljYXNlIDQ6DQoJ CQljYXNlIDU6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJDb21wcmVzc2lvbiBmYWN0b3Ig Ii4oJG1vZGUtMSkuIiBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCQljYXNlIDY6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJJbXBsb2RlIGlz IG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2Ug NzoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRva2VuaXppbmcgY29tcHJlc3Npb24gYWxn b3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsN CgkJCWNhc2UgODoNCgkJCQkvLyBEZWZsYXRlDQoJCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFt ZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCBnemluZmxhdGUo JGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXplKSk6DQoJCQkJCWd6aW5mbGF0ZSgkY29udGVu dCwgJHVuY29tcHJlc3NlZFNpemUpOw0KCQkJY2FzZSA5Og0KCQkJCSR0aGlzLT5kZWJ1Z01z ZygyLCAiRW5oYW5jZWQgRGVmbGF0aW5nIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0K CQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgMTA6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIs ICJQS1dBUkUgRGF0ZSBDb21wcmVzc2lvbiBMaWJyYXJ5IEltcG9sb2RpbmcgaXMgbm90IHN1 cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJY2FzZSAxMjoNCgkJ CQkvLyBCemlwMg0KCQkJCXJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQoJCQkJCWZpbGVfcHV0 X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgYnpkZWNvbXByZXNzKCRjb250ZW50KSk6DQoJ CQkJCWJ6ZGVjb21wcmVzcygkY29udGVudCk7DQoJCQljYXNlIDE4Og0KCQkJCSR0aGlzLT5k ZWJ1Z01zZygyLCAiSUJNIFRFUlNFIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJ CXJldHVybiBmYWxzZTsNCgkJCWRlZmF1bHQ6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJV bmtub3duIHVuY29tcHJlc3MgbWV0aG9kOiAkbW9kZSIpOw0KCQkJCXJldHVybiBmYWxzZTsN CgkJfQ0KCX0NCglGdW5jdGlvbiBkZWJ1Z01zZygkbGV2ZWwsICRzdHJpbmcpew0KCQlpZigk dGhpcy0+ZGVidWcpew0KCQkJaWYoJGxldmVsID09IDEpDQoJCQkJZWNobyAiPGIgc3R5bGU9 J2NvbG9yOiAjNzc3Jz5kVW56aXAyOjwvYj4gJHN0cmluZzxicj4iOw0KCQkJDQoJCQlpZigk bGV2ZWwgPT0gMikNCgkJCQllY2hvICI8YiBzdHlsZT0nY29sb3I6ICNGMDAnPmRVbnppcDI6 PC9iPiAkc3RyaW5nPGJyPiI7DQoJCX0NCgkJJHRoaXMtPmxhc3RFcnJvciA9ICRzdHJpbmc7 DQoJfQ0KCUZ1bmN0aW9uIGdldExhc3RFcnJvcigpew0KCQlyZXR1cm4gJHRoaXMtPmxhc3RF cnJvcjsNCgl9DQoJDQoJRnVuY3Rpb24gX2xvYWRGaWxlTGlzdEJ5RU9GKCYkZmgsICRzdG9w T25GaWxlPWZhbHNlKXsNCgkJLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHZhbGlkIENlbnRyYWwg RGlyIHNpZ25hdHVyZS4NCgkJLy8gTGV0J3MgY29uc2lkZXIgYSBmaWxlIGNvbW1lbnQgc21h bGxlciB0aGFuIDEwMjQgY2hhcmFjdGVycy4uLg0KCQkvLyBBY3R1YWxseSwgaXQgbGVuZ3Ro IGNhbiBiZSA2NTUzNi4uIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gc3VwcG9ydCBpdC4NCgkJ DQoJCWZvcigkeCA9IDA7ICR4IDwgMTAyNDsgJHgrKyl7DQoJCQlmc2VlaygkZmgsIC0yMi0k eCwgU0VFS19FTkQpOw0KCQkJDQoJCQkkc2lnbmF0dXJlID0gZnJlYWQoJGZoLCA0KTsNCgkJ CWlmKCRzaWduYXR1cmUgPT0gJHRoaXMtPmRpclNpZ25hdHVyZUUpew0KCQkJCS8vIElmIGZv dW5kIEVPRiBDZW50cmFsIERpcg0KCQkJCSRlb2RpclsnZGlza19udW1iZXJfdGhpcyddICAg PSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbnVtYmVyIG9mIHRoaXMgZGlzaw0K CQkJCSRlb2RpclsnZGlza19udW1iZXInXSAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBj ZW50cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2RpclsndG90YWxfZW50cmllc190aGlzJ10gPSB1 bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gdG90YWwgbnVtYmVyIG9mIGVudHJpZXMg aW4gdGhlIGNlbnRyYWwgZGlyIG9uIHRoaXMgZGlzaw0KCQkJCSRlb2RpclsndG90YWxfZW50 cmllcyddICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gdG90YWwgbnVt YmVyIG9mIGVudHJpZXMgaW4NCgkJCQkkZW9kaXJbJ3NpemVfb2ZfY2QnXSAgICAgICAgID0g dW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHNpemUgb2YgdGhlIGNlbnRyYWwgZGly ZWN0b3J5DQoJCQkJJGVvZGlyWydvZmZzZXRfc3RhcnRfY2QnXSAgICA9IHVucGFjaygiViIs IGZyZWFkKCRmaCwgNCkpOyAvLyBvZmZzZXQgb2Ygc3RhcnQgb2YgY2VudHJhbCBkaXJlY3Rv cnkgd2l0aCByZXNwZWN0IHRvIHRoZSBzdGFydGluZyBkaXNrIG51bWJlcg0KCQkJCSR6aXBG aWxlQ29tbWVudExlbmdodCAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsg Ly8gemlwZmlsZSBjb21tZW50IGxlbmd0aA0KCQkJCSRlb2RpclsnemlwZmlsZV9jb21tZW50 J10gICAgPSAkemlwRmlsZUNvbW1lbnRMZW5naHRbMV0/ZnJlYWQoJGZoLCAkemlwRmlsZUNv bW1lbnRMZW5naHRbMV0pOicnOyAvLyB6aXBmaWxlIGNvbW1lbnQNCgkJCQkkdGhpcy0+ZW5k T2ZDZW50cmFsID0gQXJyYXkoDQoJCQkJCSdkaXNrX251bWJlcl90aGlzJz0+JGVvZGlyWydk aXNrX251bWJlcl90aGlzJ11bMV0sDQoJCQkJCSdkaXNrX251bWJlcic9PiRlb2RpclsnZGlz a19udW1iZXInXVsxXSwNCgkJCQkJJ3RvdGFsX2VudHJpZXNfdGhpcyc9PiRlb2RpclsndG90 YWxfZW50cmllc190aGlzJ11bMV0sDQoJCQkJCSd0b3RhbF9lbnRyaWVzJz0+JGVvZGlyWyd0 b3RhbF9lbnRyaWVzJ11bMV0sDQoJCQkJCSdzaXplX29mX2NkJz0+JGVvZGlyWydzaXplX29m X2NkJ11bMV0sDQoJCQkJCSdvZmZzZXRfc3RhcnRfY2QnPT4kZW9kaXJbJ29mZnNldF9zdGFy dF9jZCddWzFdLA0KCQkJCQknemlwZmlsZV9jb21tZW50Jz0+JGVvZGlyWyd6aXBmaWxlX2Nv bW1lbnQnXSwNCgkJCQkpOw0KCQkJCQ0KCQkJCS8vIFRoZW4sIGxvYWQgZmlsZSBsaXN0DQoJ CQkJZnNlZWsoJGZoLCAkdGhpcy0+ZW5kT2ZDZW50cmFsWydvZmZzZXRfc3RhcnRfY2QnXSk7 DQoJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQkJDQoJCQkJd2hpbGUoJHNp Z25hdHVyZSA9PSAkdGhpcy0+ZGlyU2lnbmF0dXJlKXsNCgkJCQkJJGRpclsndmVyc2lvbl9t YWRlYnknXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24g bWFkZSBieQ0KCQkJCQkkZGlyWyd2ZXJzaW9uX25lZWRlZCddICAgICAgPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJCQkk ZGlyWydnZW5lcmFsX2JpdF9mbGFnJ10gICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIp KTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJCQkJCSRkaXJbJ2NvbXByZXNzaW9u X21ldGhvZCddICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBjb21wcmVzc2lv biBtZXRob2QNCgkJCQkJJGRpclsnbGFzdG1vZF90aW1lJ10gICAgICAgID0gdW5wYWNrKCJ2 IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGxhc3QgbW9kIGZpbGUgdGltZQ0KCQkJCQkkZGlyWyds YXN0bW9kX2RhdGUnXSAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8g bGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkJCSRkaXJbJ2NyYy0zMiddICAgICAgICAgICAgICA9 IGZyZWFkKCRmaCwgNCk7ICAgICAgICAgICAgICAvLyBjcmMtMzINCgkJCQkJJGRpclsnY29t cHJlc3NlZF9zaXplJ10gICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIGNv bXByZXNzZWQgc2l6ZQ0KCQkJCQkkZGlyWyd1bmNvbXByZXNzZWRfc2l6ZSddICAgPSB1bnBh Y2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2VkIHNpemUNCgkJCQkJJGZp bGVOYW1lTGVuZ3RoICAgICAgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7 IC8vIGZpbGVuYW1lIGxlbmd0aA0KCQkJCQkkZXh0cmFGaWVsZExlbmd0aCAgICAgICAgICAg PSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZXh0cmEgZmllbGQgbGVuZ3RoDQoJ CQkJCSRmaWxlQ29tbWVudExlbmd0aCAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRm aCwgMikpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkJCSRkaXJbJ2Rpc2tfbnVtYmVy X3N0YXJ0J10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBkaXNrIG51bWJl ciBzdGFydA0KCQkJCQkkZGlyWydpbnRlcm5hbF9hdHRyaWJ1dGVzJ10gPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLWJ5dGUxDQoJ CQkJCSRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ109IHVucGFjaygidiIsIGZyZWFkKCRm aCwgMikpOyAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMtYnl0ZTINCgkJCQkJJGRpclsn ZXh0ZXJuYWxfYXR0cmlidXRlczInXT0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcw0KCQkJCQkkZGlyWydyZWxhdGl2ZV9vZmZzZXQn XSAgICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gcmVsYXRpdmUgb2Zmc2V0 IG9mIGxvY2FsIGhlYWRlcg0KCQkJCQkkZGlyWydmaWxlX25hbWUnXSAgICAgICAgICAgPSBm cmVhZCgkZmgsICRmaWxlTmFtZUxlbmd0aFsxXSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBmaWxlbmFtZQ0KCQkJCQkkZGlyWydleHRyYV9maWVsZCddICAgICAgICAgPSAk ZXh0cmFGaWVsZExlbmd0aFsxXSA/ZnJlYWQoJGZoLCAkZXh0cmFGaWVsZExlbmd0aFsxXSkg OicnOyAvLyBleHRyYSBmaWVsZA0KCQkJCQkkZGlyWydmaWxlX2NvbW1lbnQnXSAgICAgICAg PSAkZmlsZUNvbW1lbnRMZW5ndGhbMV0/ZnJlYWQoJGZoLCAkZmlsZUNvbW1lbnRMZW5ndGhb MV0pOicnOyAvLyBmaWxlIGNvbW1lbnQJCQkNCgkJCQkJDQoJCQkJCS8vIENvbnZlcnQgdGhl IGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklYIFRpbWVzdGFtcA0K CQkJCQkkQklObGFzdG1vZF9kYXRlID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFzdG1vZF9k YXRlJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkQklObGFzdG1vZF90 aW1lID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFzdG1vZF90aW1lJ11bMV0pLCAxNiwgJzAn LCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkbGFzdG1vZF9kYXRlWSA9IGJpbmRlYyhzdWJzdHIo JEJJTmxhc3Rtb2RfZGF0ZSwgIDAsIDcpKSsxOTgwOw0KCQkJCQkkbGFzdG1vZF9kYXRlTSA9 IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJCQkJJGxhc3Rt b2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsIDExLCA1KSk7DQoJ CQkJCSRsYXN0bW9kX3RpbWVIID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF90aW1lLCAg IDAsIDUpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0 bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJCQkkbGFzdG1vZF90aW1lUyA9IGJpbmRlYyhzdWJz dHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7CQ0KCQkJCQkNCgkJCQkJLy8gU29tZSBw cm90ZWN0aW9uIGFnYWlucyBhdHRhY2tzLi4uDQoJCQkJCSRkaXJbJ2ZpbGVfbmFtZSddICAg ICA9ICR0aGlzLT5fZGVjb2RlRmlsZW5hbWUoJGRpclsnZmlsZV9uYW1lJ10pOw0KCQkJCQlp ZighJGRpclsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3RlY3QoJGRpclsnZmlsZV9uYW1l J10pKQ0KCQkJCQkJY29udGludWU7DQoJCQkJCQ0KCQkJCQkkdGhpcy0+Y2VudHJhbERpckxp c3RbJGRpclsnZmlsZV9uYW1lJ11dID0gQXJyYXkoDQoJCQkJCQkndmVyc2lvbl9tYWRlYnkn PT4kZGlyWyd2ZXJzaW9uX21hZGVieSddWzFdLA0KCQkJCQkJJ3ZlcnNpb25fbmVlZGVkJz0+ JGRpclsndmVyc2lvbl9uZWVkZWQnXVsxXSwNCgkJCQkJCSdnZW5lcmFsX2JpdF9mbGFnJz0+ c3RyX3BhZChkZWNiaW4oJGRpclsnZ2VuZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAnLCBT VFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzaW9uX21ldGhvZCc9PiRkaXJbJ2NvbXBy ZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGlt ZSgkbGFzdG1vZF90aW1lSCwgJGxhc3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFz dG1vZF9kYXRlTSwgJGxhc3Rtb2RfZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQkJCSdj cmMtMzInICAgICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11b M10pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVj aGV4KG9yZCgkZGlyWydjcmMtMzInXVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJ CQkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzFdKSksIDIs ICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQo JGRpclsnY3JjLTMyJ11bMF0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2Nv bXByZXNzZWRfc2l6ZSc9PiRkaXJbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCQkJJ3Vu Y29tcHJlc3NlZF9zaXplJz0+JGRpclsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkJ CSdkaXNrX251bWJlcl9zdGFydCc9PiRkaXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J11bMV0sDQoJ CQkJCQknaW50ZXJuYWxfYXR0cmlidXRlcyc9PiRkaXJbJ2ludGVybmFsX2F0dHJpYnV0ZXMn XVsxXSwNCgkJCQkJCSdleHRlcm5hbF9hdHRyaWJ1dGVzMSc9PiRkaXJbJ2V4dGVybmFsX2F0 dHJpYnV0ZXMxJ11bMV0sDQoJCQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczInPT4kZGlyWydl eHRlcm5hbF9hdHRyaWJ1dGVzMiddWzFdLA0KCQkJCQkJJ3JlbGF0aXZlX29mZnNldCc9PiRk aXJbJ3JlbGF0aXZlX29mZnNldCddWzFdLA0KCQkJCQkJJ2ZpbGVfbmFtZSc9PiRkaXJbJ2Zp bGVfbmFtZSddLA0KCQkJCQkJJ2V4dHJhX2ZpZWxkJz0+JGRpclsnZXh0cmFfZmllbGQnXSwN CgkJCQkJCSdmaWxlX2NvbW1lbnQnPT4kZGlyWydmaWxlX2NvbW1lbnQnXSwNCgkJCQkJKTsN CgkJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8v IElmIGxvYWRlZCBjZW50cmFsRGlycywgdGhlbiB0cnkgdG8gaWRlbnRpZnkgdGhlIG9mZnNl dFBvc2l0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuDQoJCQkJaWYoJHRoaXMtPmNlbnRy YWxEaXJMaXN0KSBmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZW5hbWU9 PiRkZXRhaWxzKXsNCgkJCQkJJGkgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlv bigkZmgsICRkZXRhaWxzWydyZWxhdGl2ZV9vZmZzZXQnXSk7DQoJCQkJCSR0aGlzLT5jb21w cmVzc2VkTGlzdFskZmlsZW5hbWVdWydmaWxlX25hbWUnXSAgICAgICAgICA9ICRmaWxlbmFt ZTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbXByZXNzaW9u X21ldGhvZCddID0gJGRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhvZCddOw0KCQkJCQkkdGhp cy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsndmVyc2lvbl9uZWVkZWQnXSAgICAgPSAk ZGV0YWlsc1sndmVyc2lvbl9uZWVkZWQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0 WyRmaWxlbmFtZV1bJ2xhc3Rtb2RfZGF0ZXRpbWUnXSAgID0gJGRldGFpbHNbJ2xhc3Rtb2Rf ZGF0ZXRpbWUnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2Ny Yy0zMiddICAgICAgICAgICAgID0gJGRldGFpbHNbJ2NyYy0zMiddOw0KCQkJCQkkdGhpcy0+ Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSAkZGV0 YWlsc1snY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFsk ZmlsZW5hbWVdWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9ICRkZXRhaWxzWyd1bmNvbXByZXNz ZWRfc2l6ZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnbGFz dG1vZF9kYXRldGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0KCQkJ CQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnZXh0cmFfZmllbGQnXSAgICAg ICAgPSAkaVsnZXh0cmFfZmllbGQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRm aWxlbmFtZV1bJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109JGlbJ2NvbnRlbnRzLXN0YXJ0T2Zm c2V0J107DQoJCQkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93ZXIo JGZpbGVuYW1lKSkNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJ CX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxpc3RC eVNpZ25hdHVyZXMoJiRmaCwgJHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlmc2VlaygkZmgsIDAp Ow0KCQkNCgkJJHJldHVybiA9IGZhbHNlOw0KCQlmb3IoOzspew0KCQkJJGRldGFpbHMgPSAk dGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgpOw0KCQkJaWYoISRkZXRhaWxz KXsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkludmFsaWQgc2lnbmF0dXJlLiBUcnlpbmcg dG8gdmVyaWZ5IGlmIGlzIG9sZCBzdHlsZSBEYXRhIERlc2NyaXB0b3IuLi4iKTsNCgkJCQlm c2VlaygkZmgsIDEyIC0gNCwgU0VFS19DVVIpOyAvLyAxMjogRGF0YSBkZXNjcmlwdG9yIC0g NDogU2lnbmF0dXJlICh0aGF0IHdpbGwgYmUgcmVhZCBhZ2FpbikNCgkJCQkkZGV0YWlscyA9 ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCk7DQoJCQl9DQoJCQlpZigh JGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiU3RpbGwgaW52YWxpZCBzaWdu YXR1cmUuIFByb2JhYmx5IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZS4iKTsNCgkJCQli cmVhazsNCgkJCX0NCgkJCSRmaWxlbmFtZSA9ICRkZXRhaWxzWydmaWxlX25hbWUnXTsNCgkJ CSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdID0gJGRldGFpbHM7DQoJCQkkcmV0 dXJuID0gdHJ1ZTsNCgkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93 ZXIoJGZpbGVuYW1lKSkNCgkJCQlicmVhazsNCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXR1cm47 DQoJfQ0KCUZ1bmN0aW9uIF9nZXRGaWxlSGVhZGVySW5mb3JtYXRpb24oJiRmaCwgJHN0YXJ0 T2Zmc2V0PWZhbHNlKXsNCgkJaWYoJHN0YXJ0T2Zmc2V0ICE9PSBmYWxzZSkNCgkJCWZzZWVr KCRmaCwgJHN0YXJ0T2Zmc2V0KTsNCgkJDQoJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQp Ow0KCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT56aXBTaWduYXR1cmUpew0KCQkJIyAkdGhp cy0+ZGVidWdNc2coMSwgIlppcCBTaWduYXR1cmUhIik7DQoJCQkNCgkJCS8vIEdldCBpbmZv cm1hdGlvbiBhYm91dCB0aGUgemlwcGVkIGZpbGUNCgkJCSRmaWxlWyd2ZXJzaW9uX25lZWRl ZCddICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5lZWRl ZCB0byBleHRyYWN0DQoJCQkkZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddICAgPSB1bnBhY2so InYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJCQkk ZmlsZVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIp KTsgLy8gY29tcHJlc3Npb24gbWV0aG9kDQoJCQkkZmlsZVsnbGFzdG1vZF90aW1lJ10gICAg ICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSB0aW1l DQoJCQkkZmlsZVsnbGFzdG1vZF9kYXRlJ10gICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkkZmlsZVsnY3JjLTMyJ10gICAg ICAgICAgICAgPSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3JjLTMyDQoJCQkk ZmlsZVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQp KTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkkZmlsZVsndW5jb21wcmVzc2VkX3NpemUnXSAg PSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2VkIHNpemUNCgkJ CSRmaWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCSRleHRyYUZpZWxkTGVuZ3RoICAgICAgICAg ICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRyYSBmaWVsZCBsZW5ndGgN CgkJCSRmaWxlWydmaWxlX25hbWUnXSAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVOYW1l TGVuZ3RoWzFdKTsgLy8gZmlsZW5hbWUNCgkJCSRmaWxlWydleHRyYV9maWVsZCddICAgICAg ICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGV4dHJhRmllbGRMZW5ndGhb MV0pOicnOyAvLyBleHRyYSBmaWVsZA0KCQkJJGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0 J109IGZ0ZWxsKCRmaCk7DQoJCQkNCgkJCS8vIEJ5cGFzcyB0aGUgd2hvbGUgY29tcHJlc3Nl ZCBjb250ZW50cywgYW5kIGxvb2sgZm9yIHRoZSBuZXh0IGZpbGUNCgkJCWZzZWVrKCRmaCwg JGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLCBTRUVLX0NVUik7DQoJCQkNCgkJCS8vIENv bnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklYIFRp bWVzdGFtcA0KCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRmaWxlWyds YXN0bW9kX2RhdGUnXVsxXSksIDE2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkkQklObGFz dG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfdGltZSddWzFdKSwg MTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCSRsYXN0bW9kX2RhdGVZID0gYmluZGVjKHN1 YnN0cigkQklObGFzdG1vZF9kYXRlLCAgMCwgNykpKzE5ODA7DQoJCQkkbGFzdG1vZF9kYXRl TSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJCSRsYXN0 bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwgNSkpOw0K CQkJJGxhc3Rtb2RfdGltZUggPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAg MCwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9k X3RpbWUsICAgNSwgNikpOw0KCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vic3RyKCRC SU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOw0KCQkJDQoJCQkvLyBTb21lIHByb3RlY3Rpb24g YWdhaW5zIGF0dGFja3MuLi4NCgkJCSRmaWxlWydmaWxlX25hbWUnXSAgICAgPSAkdGhpcy0+ X2RlY29kZUZpbGVuYW1lKCRmaWxlWydmaWxlX25hbWUnXSk7DQoJCQlpZighJGZpbGVbJ2Zp bGVfbmFtZSddID0gJHRoaXMtPl9wcm90ZWN0KCRmaWxlWydmaWxlX25hbWUnXSkpDQoJCQkJ cmV0dXJuIGZhbHNlOw0KCQkJDQoJCQkvLyBNb3VudCBmaWxlIHRhYmxlDQoJCQkkaSA9IEFy cmF5KA0KCQkJCSdmaWxlX25hbWUnICAgICAgICAgPT4kZmlsZVsnZmlsZV9uYW1lJ10sDQoJ CQkJJ2NvbXByZXNzaW9uX21ldGhvZCc9PiRmaWxlWydjb21wcmVzc2lvbl9tZXRob2QnXVsx XSwNCgkJCQkndmVyc2lvbl9uZWVkZWQnICAgID0+JGZpbGVbJ3ZlcnNpb25fbmVlZGVkJ11b MV0sDQoJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGltZSgkbGFzdG1vZF90aW1lSCwg JGxhc3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFzdG1vZF9kYXRlTSwgJGxhc3Rt b2RfZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQknY3JjLTMyJyAgICAgICAgICAgID0+ c3RyX3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVszXSkpLCAyLCAnMCcsIFNUUl9Q QURfTEVGVCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMy J11bMl0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRl Y2hleChvcmQoJGZpbGVbJ2NyYy0zMiddWzFdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4N CgkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVswXSkpLCAy LCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ2NvbXByZXNzZWRfc2l6ZScgICA9PiRmaWxl Wydjb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkndW5jb21wcmVzc2VkX3NpemUnID0+JGZp bGVbJ3VuY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJJ2V4dHJhX2ZpZWxkJyAgICAgICA9 PiRmaWxlWydleHRyYV9maWVsZCddLA0KCQkJCSdnZW5lcmFsX2JpdF9mbGFnJyAgPT5zdHJf cGFkKGRlY2JpbigkZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAnLCBTVFJf UEFEX0xFRlQpLA0KCQkJCSdjb250ZW50cy1zdGFydE9mZnNldCc9PiRmaWxlWydjb250ZW50 cy1zdGFydE9mZnNldCddDQoJCQkpOw0KCQkJcmV0dXJuICRpOw0KCQl9DQoJCXJldHVybiBm YWxzZTsNCgl9DQoJDQoJRnVuY3Rpb24gX2RlY29kZUZpbGVuYW1lKCRmaWxlbmFtZSl7DQoJ CSRmcm9tID0gIlx4YjdceGI1XHhiNlx4YzdceDhlXHg4Zlx4OTJceDgwXHhkNFx4OTBceGQy XHhkM1x4ZGVceGQ2XHhkN1x4ZDhceGQxXHhhNVx4ZTNceGUwIi4NCgkJICAgICAgICAiXHhl Mlx4ZTVceDk5XHg5ZFx4ZWJceGU5XHhlYVx4OWFceGVkXHhlOFx4ZTFceDg1XHhhMFx4ODNc eGM2XHg4NFx4ODZceDkxXHg4N1x4OGEiLg0KCQkJCSJceDgyXHg4OFx4ODlceDhkXHhhMVx4 OGNceDhiXHhkMFx4YTRceDk1XHhhMlx4OTNceGU0XHg5NFx4OWJceDk3XHhhM1x4OTZceGVj XHhlNyIuDQoJCQkJIlx4OTjDryI7DQoJCSR0byAgID0gIsOAw4HDgsODw4TDhcOGw4fDiMOJ w4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOl w6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w73DvsO/wrQiOw0K DQoJCXJldHVybiBzdHJ0cigkZmlsZW5hbWUsICRmcm9tLCAkdG8pOw0KCX0NCglGdW5jdGlv biBfcHJvdGVjdCgkZnVsbFBhdGgpew0KCQkvLyBLbm93biBoYWNrLWF0dGFja3MgKGZpbGVu YW1lIGxpa2UpOg0KCQkvLyAgIC9ob21lL3Vzcg0KCQkvLyAgIC4uLy4uL2hvbWUvdXNyDQoJ CS8vICAgZm9sZGVyLy4uLy4uLy4uL2hvbWUvdXNyDQoJCS8vICAgc2FtcGxlLyh4MCkuLi9o b21lL3Vzcg0KCQkNCgkJJGZ1bGxQYXRoID0gc3RydHIoJGZ1bGxQYXRoLCAiOio8PnxcIlx4 MFxcIiwgIi4uLi4uLi4vIik7DQoJCXdoaWxlKCRmdWxsUGF0aFswXSA9PSAiLyIpDQoJCQkk ZnVsbFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAxKTsNCgkJDQoJCWlmKHN1YnN0cigkZnVs bFBhdGgsIC0xKSA9PSAiLyIpew0KCQkJJGJhc2UgICAgID0gJyc7DQoJCQkkZnVsbFBhdGgg PSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCAtMSk7DQoJCX0NCgkJZWxzZXsNCgkJCSRiYXNlICAg ICA9IGJhc2VuYW1lKCRmdWxsUGF0aCk7DQoJCQkkZnVsbFBhdGggPSBkaXJuYW1lKCRmdWxs UGF0aCk7DQoJCX0NCgkJDQoJCSRwYXJ0cyAgID0gZXhwbG9kZSgiLyIsICRmdWxsUGF0aCk7 DQoJCSRsYXN0SWR4ID0gZmFsc2U7DQoJCWZvcmVhY2goJHBhcnRzIGFzICRpZHg9PiRwYXJ0 KXsNCgkJCWlmKCRwYXJ0ID09ICIuIikNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJ ZWxzZWlmKCRwYXJ0ID09ICIuLiIpew0KCQkJCXVuc2V0KCRwYXJ0c1skaWR4XSk7DQoJCQkJ aWYoJGxhc3RJZHggIT09IGZhbHNlKXsNCgkJCQkJdW5zZXQoJHBhcnRzWyRsYXN0SWR4XSk7 DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCRwYXJ0ID09PSAnJyl7DQoJCQkJdW5zZXQoJHBh cnRzWyRpZHhdKTsNCgkJCX0NCgkJCWVsc2V7DQoJCQkJJGxhc3RJZHggPSAkaWR4Ow0KCQkJ fQ0KCQl9DQoJCQ0KCQkkZnVsbFBhdGggPSBzaXplb2YoJHBhcnRzKT9pbXBsb2RlKCIvIiwg JHBhcnRzKS4iLyI6IiI7DQoJCXJldHVybiAkZnVsbFBhdGguJGJhc2U7DQoJfQ0KfQ0KDQpj bGFzcyBzbWRfY3J1bmNoX2RaaXB7DQoJdmFyICRmaWxlbmFtZTsNCgl2YXIgJG92ZXJ3cml0 ZTsNCg0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2Nh bCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0 Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGly U2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIg c2lnbmF0dXJlDQoJdmFyICRmaWxlc19jb3VudCAgPSAwOw0KCXZhciAkZmg7DQoNCglGdW5j dGlvbiBzbWRfY3J1bmNoX2RaaXAoJGZpbGVuYW1lLCAkb3ZlcndyaXRlPXRydWUpew0KCQkk dGhpcy0+ZmlsZW5hbWUgID0gJGZpbGVuYW1lOw0KCQkkdGhpcy0+b3ZlcndyaXRlID0gJG92 ZXJ3cml0ZTsNCgl9DQoJRnVuY3Rpb24gYWRkRGlyKCRkaXJuYW1lLCAkZmlsZUNvbW1lbnRz PScnKXsNCgkJaWYoc3Vic3RyKCRkaXJuYW1lLCAtMSkgIT0gJy8nKQ0KCQkJJGRpcm5hbWUg Lj0gJy8nOw0KCQkkdGhpcy0+YWRkRmlsZShmYWxzZSwgJGRpcm5hbWUsICRmaWxlQ29tbWVu dHMpOw0KCX0NCglGdW5jdGlvbiBhZGRGaWxlKCRmaWxlbmFtZSwgJGNmaWxlbmFtZSwgJGZp bGVDb21tZW50cz0nJywgJGRhdGE9ZmFsc2Upew0KCQlpZighKCRmaCA9ICYkdGhpcy0+Zmgp KQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhpcy0+b3ZlcndyaXRlPyd3 Yic6J2ErYicpOw0KCQkNCgkJLy8gJGZpbGVuYW1lIGNhbiBiZSBhIGxvY2FsIGZpbGUgT1Ig dGhlIGRhdGEgd2ljaCB3aWxsIGJlIGNvbXByZXNzZWQNCgkJaWYoc3Vic3RyKCRjZmlsZW5h bWUsIC0xKT09Jy8nKXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10gPSAwOw0KCQkJJGRhdGEg PSAnJzsNCgkJfQ0KCQllbHNlaWYoZmlsZV9leGlzdHMoJGZpbGVuYW1lKSl7DQoJCQkkZGV0 YWlsc1sndW5jc2l6ZSddID0gZmlsZXNpemUoJGZpbGVuYW1lKTsNCgkJCSRkYXRhID0gZmls ZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsNCgkJfQ0KCQllbHNlaWYoJGZpbGVuYW1lKXsN CgkJCWVjaG8gIjxiPkNhbm5vdCBhZGQgJGZpbGVuYW1lLiBGaWxlIG5vdCBmb3VuZDwvYj48 YnI+IjsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlew0KCQkJJGRldGFpbHNbJ3Vu Y3NpemUnXSA9IHN0cmxlbigkZmlsZW5hbWUpOw0KCQkJLy8gREFUQSBpcyBnaXZlbi4uIHVz ZSBpdCEgOnwNCgkJfQ0KDQoJCS8vIGlmIGRhdGEgdG8gY29tcHJlc3MgaXMgdG9vIHNtYWxs LCBqdXN0IHN0b3JlIGl0DQoJCWlmKCRkZXRhaWxzWyd1bmNzaXplJ10gPCAyNTYpew0KCQkJ JGRldGFpbHNbJ2NvbXNpemUnXSA9ICRkZXRhaWxzWyd1bmNzaXplJ107DQoJCQkkZGV0YWls c1sndm5lZWRlZCddID0gMTA7DQoJCQkkZGV0YWlsc1snY21ldGhvZCddID0gMDsNCgkJCSR6 ZGF0YSA9ICYkZGF0YTsNCgkJfQ0KCQllbHNleyAvLyBvdGhlcndpc2UsIGNvbXByZXNzIGl0 DQoJCQkkemRhdGEgPSBnemNvbXByZXNzKCRkYXRhKTsNCgkJCSR6ZGF0YSA9IHN1YnN0cihz dWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsgLy8gZml4IGNyYyBi dWcgKHRoYW5rcyB0byBFcmljIE11ZWxsZXIpDQoJCQkkZGV0YWlsc1snY29tc2l6ZSddID0g c3RybGVuKCR6ZGF0YSk7DQoJCQkkZGV0YWlsc1sndm5lZWRlZCddID0gMTA7DQoJCQkkZGV0 YWlsc1snY21ldGhvZCddID0gODsNCgkJfQ0KCQkNCgkJJGRldGFpbHNbJ2JpdGZsYWcnXSA9 IDA7DQoJCSRkZXRhaWxzWydjcmNfMzInXSAgPSBjcmMzMigkZGF0YSk7DQoJCQ0KCQkvLyBD b252ZXJ0IGRhdGUgYW5kIHRpbWUgdG8gRE9TIEZvcm1hdCwgYW5kIHNldCB0aGVuDQoJCSRs YXN0bW9kX3RpbWVTICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ3MnKT49MzI/ZGF0ZSgncycp LTMyOmRhdGUoJ3MnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2RfdGlt ZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnaScpKSwgNiwgJzAnLCBTVFJfUEFEX0xFRlQp Ow0KCQkkbGFzdG1vZF90aW1lSCAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdIJykpLCA1LCAn MCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVEICA9IHN0cl9wYWQoZGVjYmlu KGRhdGUoJ2QnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2RfZGF0ZU0g ID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnbScpKSwgNCwgJzAnLCBTVFJfUEFEX0xFRlQpOw0K CQkkbGFzdG1vZF9kYXRlWSAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdZJyktMTk4MCksIDcs ICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJDQoJCSMgZWNobyAiTW9kVGltZTogJGxhc3Rtb2Rf dGltZVMtJGxhc3Rtb2RfdGltZU0tJGxhc3Rtb2RfdGltZUggKCIuZGF0ZSgicyBIIEgiKS4i KVxuIjsNCgkJIyBlY2hvICJNb2REYXRlOiAkbGFzdG1vZF9kYXRlRC0kbGFzdG1vZF9kYXRl TS0kbGFzdG1vZF9kYXRlWSAoIi5kYXRlKCJkIG0gWSIpLiIpXG4iOw0KCQkkZGV0YWlsc1sn bW9kdGltZSddID0gYmluZGVjKCIkbGFzdG1vZF90aW1lSCRsYXN0bW9kX3RpbWVNJGxhc3Rt b2RfdGltZVMiKTsNCgkJJGRldGFpbHNbJ21vZGRhdGUnXSA9IGJpbmRlYygiJGxhc3Rtb2Rf ZGF0ZVkkbGFzdG1vZF9kYXRlTSRsYXN0bW9kX2RhdGVEIik7DQoJCQ0KCQkkZGV0YWlsc1sn b2Zmc2V0J10gPSBmdGVsbCgkZmgpOw0KCQlmd3JpdGUoJGZoLCAkdGhpcy0+emlwU2lnbmF0 dXJlKTsNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWyd2bmVlZGVkJ10pKTsg Ly8gdmVyc2lvbl9uZWVkZWQNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydi aXRmbGFnJ10pKTsgLy8gZ2VuZXJhbF9iaXRfZmxhZw0KCQlmd3JpdGUoJGZoLCBwYWNrKCdz JywgJGRldGFpbHNbJ2NtZXRob2QnXSkpOyAvLyBjb21wcmVzc2lvbl9tZXRob2QNCgkJZndy aXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydtb2R0aW1lJ10pKTsgLy8gbGFzdG1vZF90 aW1lDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snbW9kZGF0ZSddKSk7IC8v IGxhc3Rtb2RfZGF0ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywgJGRldGFpbHNbJ2NyY18z MiddKSk7ICAvLyBjcmMtMzINCgkJZndyaXRlKCRmaCwgcGFjaygnSScsICRkZXRhaWxzWydj b21zaXplJ10pKTsgLy8gY29tcHJlc3NlZF9zaXplDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ0kn LCAkZGV0YWlsc1sndW5jc2l6ZSddKSk7IC8vIHVuY29tcHJlc3NlZF9zaXplDQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ3MnLCBzdHJsZW4oJGNmaWxlbmFtZSkpKTsgICAvLyBmaWxlX25hbWVf bGVuZ3RoDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAwKSk7ICAvLyBleHRyYV9maWVsZF9s ZW5ndGgNCgkJZndyaXRlKCRmaCwgJGNmaWxlbmFtZSk7ICAgIC8vIGZpbGVfbmFtZQ0KCQkv LyBpZ25vcmluZyBleHRyYV9maWVsZA0KCQlmd3JpdGUoJGZoLCAkemRhdGEpOw0KCQkNCgkJ Ly8gQXBwZW5kIGl0IHRvIGNlbnRyYWwgZGlyDQoJCSRkZXRhaWxzWydleHRlcm5hbF9hdHRy aWJ1dGVzJ10gID0gKHN1YnN0cigkY2ZpbGVuYW1lLCAtMSk9PScvJyYmISR6ZGF0YSk/MTY6 MzI7IC8vIERpcmVjdG9yeSBvciBmaWxlIG5hbWUNCgkJJGRldGFpbHNbJ2NvbW1lbnRzJ10g ICAgICAgICAgICAgPSAkZmlsZUNvbW1lbnRzOw0KCQkkdGhpcy0+YXBwZW5kQ2VudHJhbERp cigkY2ZpbGVuYW1lLCAkZGV0YWlscyk7DQoJCSR0aGlzLT5maWxlc19jb3VudCsrOw0KCX0N CglGdW5jdGlvbiBzZXRFeHRyYSgkZmlsZW5hbWUsICRwcm9wZXJ0eSwgJHZhbHVlKXsNCgkJ JHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxlbmFtZV1bJHByb3BlcnR5XSA9ICR2YWx1ZTsNCgl9 DQoJRnVuY3Rpb24gc2F2ZSgkemlwQ29tbWVudHM9Jycpew0KCQlpZighKCRmaCA9ICYkdGhp cy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhpcy0+b3Zlcndy aXRlPyd3JzonYSsnKTsNCgkJDQoJCSRjZHJlYyA9ICIiOw0KCQlmb3JlYWNoKCR0aGlzLT5j ZW50cmFsZGlycyBhcyAkZmlsZW5hbWU9PiRjZCl7DQoJCQkkY2RyZWMgLj0gJHRoaXMtPmRp clNpZ25hdHVyZTsNCgkJCSRjZHJlYyAuPSAiXHgwXHgwIjsgICAgICAgICAgICAgICAgICAv LyB2ZXJzaW9uIG1hZGUgYnkNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWyd2bmVlZGVk J10pOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkkY2RyZWMgLj0gIlx4MFx4 MCI7ICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhbCBiaXQgZmxhZw0KCQkJJGNkcmVjIC49 IHBhY2soJ3YnLCAkY2RbJ2NtZXRob2QnXSk7IC8vIGNvbXByZXNzaW9uIG1ldGhvZA0KCQkJ JGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZHRpbWUnXSk7IC8vIGxhc3Rtb2QgdGltZQ0K CQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZGRhdGUnXSk7IC8vIGxhc3Rtb2QgZGF0 ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2NyY18zMiddKTsgIC8vIGNyYzMyDQoJ CQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnY29tc2l6ZSddKTsgLy8gY29tcHJlc3NlZCBm aWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ3VuY3NpemUnXSk7IC8vIHVu Y29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJGZp bGVuYW1lKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2 JywgMCk7ICAgICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGxlbmd0aA0KCQkJJGNkcmVj IC49IHBhY2soJ3YnLCBzdHJsZW4oJGNkWydjb21tZW50cyddKSk7IC8vIGZpbGUgY29tbWVu dCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCk7IC8vIGRpc2sgbnVtYmVyIHN0 YXJ0DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBpbnRlcm5hbCBmaWxlIGF0dHJp YnV0ZXMNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydleHRlcm5hbF9hdHRyaWJ1dGVz J10pOyAvLyBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRjZHJlYyAuPSBwYWNrKCdW JywgJGNkWydvZmZzZXQnXSk7IC8vIHJlbGF0aXZlIG9mZnNldCBvZiBsb2NhbCBoZWFkZXIN CgkJCSRjZHJlYyAuPSAkZmlsZW5hbWU7DQoJCQkkY2RyZWMgLj0gJGNkWydjb21tZW50cydd Ow0KCQl9DQoJCSRiZWZvcmVfY2QgPSBmdGVsbCgkZmgpOw0KCQlmd3JpdGUoJGZoLCAkY2Ry ZWMpOw0KDQoJCS8vIGVuZCBvZiBjZW50cmFsIGRpcg0KCQlmd3JpdGUoJGZoLCAkdGhpcy0+ ZGlyU2lnbmF0dXJlRSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAwKSk7IC8vIG51bWJl ciBvZiB0aGlzIGRpc2sNCgkJZndyaXRlKCRmaCwgcGFjaygndicsIDApKTsgLy8gbnVtYmVy IG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0K CQlmd3JpdGUoJGZoLCBwYWNrKCd2JywgJHRoaXMtPmZpbGVzX2NvdW50KSk7IC8vIHRvdGFs ICMgb2YgZW50cmllcyAib24gdGhpcyBkaXNrIiANCgkJZndyaXRlKCRmaCwgcGFjaygndics ICR0aGlzLT5maWxlc19jb3VudCkpOyAvLyB0b3RhbCAjIG9mIGVudHJpZXMgb3ZlcmFsbCAN CgkJZndyaXRlKCRmaCwgcGFjaygnVicsIHN0cmxlbigkY2RyZWMpKSk7ICAgICAvLyBzaXpl IG9mIGNlbnRyYWwgZGlyIA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywgJGJlZm9yZV9jZCkp OyAgICAgICAgIC8vIG9mZnNldCB0byBzdGFydCBvZiBjZW50cmFsIGRpcg0KCQlmd3JpdGUo JGZoLCBwYWNrKCd2Jywgc3RybGVuKCR6aXBDb21tZW50cykpKTsgLy8gLnppcCBmaWxlIGNv bW1lbnQgbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICR6aXBDb21tZW50cyk7DQoJCQ0KCQlmY2xv c2UoJGZoKTsNCgl9DQoJDQoJLy8gUHJpdmF0ZQ0KCUZ1bmN0aW9uIGFwcGVuZENlbnRyYWxE aXIoJGZpbGVuYW1lLCRwcm9wZXJ0aWVzKXsNCgkJJHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxl bmFtZV0gPSAkcHJvcGVydGllczsNCgl9DQp9DQoiO3M6NDoidHlwZSI7czoxOiIyIjtzOjU6 ImZsYWdzIjtzOjE6IjAiO3M6NToib3JkZXIiO3M6MToiNSI7czozOiJtZDUiO3M6MzI6IjNi NDI5ZjQwZTJjM2EwM2M3NmY2M2EwMmQwNmZjZTYxIjt9