#!/bin/bash
DECODE_DIR="${1:-/workspace}"
mkdir -p "$DECODE_DIR"
echo "=============================================="
echo "  终极兜底 - 全部脚本自解压"
echo "=============================================="
echo ""
echo "恢复: analyze-flutter.sh ..."
base64 -d << 'B64EOF_analyze-flutter.sh' > "$DECODE_DIR/analyze-flutter.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGFuYWx5emUtZmx1dHRlci5zaCDigJQgRmx1dHRlciBBUEsg5LiT55So5YiG5p6Q6ISa5pysCiMg5LuOIGxpYmFwcC5zbyAvIGxpYmZsdXR0ZXIuc28g5Lit5o+Q5Y+W5a2X56ym5Liy77yM5YiG5p6Q5bm/5ZGKL+W8ueeqly/kvJrlkZjnrYnpgLvovpEKIyDovpPlh7rlpKfnmb3or53kv67mlLnmlZnnqIvvvIznlKggTVTnrqHnkIblmagg5L2c5Li65bel5YW3CnNldCAtZXVvIHBpcGVmYWlsCgp1c2FnZSgpIHsKICBjYXQgPDxFT0YKVXNhZ2U6IGFuYWx5emUtZmx1dHRlci5zaCA8YXBrLWZpbGU+IFtPUFRJT05TXQpGbHV0dGVyIEFQSyDkuJPnlKjliIbmnpDvvJrmj5Dlj5blrZfnrKbkuLIg4oaSIOWIhuaekOW5v+WRii/lvLnnqpcv5Lya5ZGYIOKGkiDovpPlh7rkv67mlLnmlZnnqIsKCuWPguaVsDoKICA8YXBrLWZpbGU+ICAgICAgQVBLIOaWh+S7tui3r+W+hAoK6YCJ6aG5OgogIC1vLCAtLW91dHB1dCBESVIgICDovpPlh7rnm67lvZUgKOm7mOiupDogPOaWh+S7tuWQjT4tZmx1dHRlci1hbmFseXNpcykKICAtLXN0cmluZ3MgICAgICAgICAg5LuF5o+Q5Y+W5a2X56ym5LiyCiAgLS12aXAgICAgICAgICAgICAgIOS7heWIhuaekOS8muWRmC9WSVAKICAtLWFkICAgICAgICAgICAgICAg5LuF5YiG5p6Q5bm/5ZGKCiAgLS1wb3B1cCAgICAgICAgICAgIOS7heWIhuaekOW8ueeqlwogIC0tYWxsICAgICAgICAgICAgICDliIbmnpDlhajpg6jvvIjpu5jorqTvvIkKICAtaCwgLS1oZWxwICAgICAgICAg5pi+56S65biu5YqpCkVPRgogIGV4aXQgMAp9CgpJTlBVVF9GSUxFPSIiCk9VVFBVVF9ESVI9IiIKRE9fU1RSSU5HUz1mYWxzZQpET19WSVA9ZmFsc2UKRE9fQUQ9ZmFsc2UKRE9fUE9QVVA9ZmFsc2UKRE9fQUxMPXRydWUKCndoaWxlIFtbICQjIC1ndCAwIF1dOyBkbwogIGNhc2UgIiQxIiBpbgogICAgLW98LS1vdXRwdXQpIE9VVFBVVF9ESVI9IiQyIjsgc2hpZnQgMiA7OwogICAgLS1zdHJpbmdzKSAgIERPX1NUUklOR1M9dHJ1ZTsgRE9fQUxMPWZhbHNlOyBzaGlmdCA7OwogICAgLS12aXApICAgICAgIERPX1ZJUD10cnVlOyBET19BTEw9ZmFsc2U7IHNoaWZ0IDs7CiAgICAtLWFkKSAgICAgICAgRE9fQUQ9dHJ1ZTsgRE9fQUxMPWZhbHNlOyBzaGlmdCA7OwogICAgLS1wb3B1cCkgICAgIERPX1BPUFVQPXRydWU7IERPX0FMTD1mYWxzZTsgc2hpZnQgOzsKICAgIC0tYWxsKSAgICAgICBET19BTEw9dHJ1ZTsgc2hpZnQgOzsKICAgIC1ofC0taGVscCkgICB1c2FnZSA7OwogICAgLSopICAgICAgICAgIGVjaG8gIumUmeivrzog5pyq55+l6YCJ6aG5ICQxIiA+JjI7IHVzYWdlIDs7CiAgICAqKSAgICAgICAgICAgSU5QVVRfRklMRT0iJDEiOyBzaGlmdCA7OwogIGVzYWMKZG9uZQoKaWYgW1sgLXogIiRJTlBVVF9GSUxFIiBdXTsgdGhlbgogIGVjaG8gIumUmeivrzog5rKh57uZQVBL5paH5Lu2IiA+JjIKICB1c2FnZQpmaQppZiBbWyAhIC1mICIkSU5QVVRfRklMRSIgXV07IHRoZW4KICBlY2hvICLplJnor686IOaWh+S7tuS4jeWtmOWcqDogJElOUFVUX0ZJTEUiID4mMgogIGV4aXQgMQpmaQoKQkFTRU5BTUU9JChiYXNlbmFtZSAiJElOUFVUX0ZJTEUiIHwgc2VkICdzL1wuW2FBXVtwUF1ba0tdJC8vJykKVElNRVNUQU1QPSQoZGF0ZSArJVklbSVkXyVIJU0lUykKW1sgLXogIiRPVVRQVVRfRElSIiBdXSAmJiBPVVRQVVRfRElSPSIke0JBU0VOQU1FfS1mbHV0dGVyLWFuYWx5c2lzLSR7VElNRVNUQU1QfSIKbWtkaXIgLXAgIiRPVVRQVVRfRElSIgpPVVRQVVRfRElSPSQocmVhbHBhdGggIiRPVVRQVVRfRElSIikKClJFUE9SVF9GSUxFPSIkT1VUUFVUX0RJUi9mbHV0dGVyLWFuYWx5c2lzLXJlcG9ydC5tZCIKU1RSSU5HU19GSUxFPSIkT1VUUFVUX0RJUi9mbHV0dGVyLXN0cmluZ3MudHh0IgoKIyDpopzoibIKUkVEPSdcMDMzWzA7MzFtJwpHUkVFTj0nXDAzM1swOzMybScKWUVMTE9XPSdcMDMzWzE7MzNtJwpCTFVFPSdcMDMzWzA7MzRtJwpOQz0nXDAzM1swbScKCmxvZ19pbmZvKCkgIHsgZWNobyAtZSAiJHtCTFVFfVvkv6Hmga9dJHtOQ30gICQqIjsgfQpsb2dfb2soKSAgICB7IGVjaG8gLWUgIiR7R1JFRU59W+WujOaIkF0ke05DfSAgJCoiOyB9CmxvZ193YXJuKCkgIHsgZWNobyAtZSAiJHtZRUxMT1d9W+aPkOekul0ke05DfSAgJCoiOyB9CmxvZ19lcnJvcigpIHsgZWNobyAtZSAiJHtSRUR9W+mUmeivr10ke05DfSAkKiI7IH0KCmluaXRfcmVwb3J0KCkgewogIGNhdCA+ICIkUkVQT1JUX0ZJTEUiIDw8RU9GCiMgRmx1dHRlciBBUEsg5YiG5p6Q5oql5ZGKCgotICoq5paH5Lu2Kio6IFxgJHtCQVNFTkFNRX0uYXBrXGAKLSAqKuWIhuaekOaXtumXtCoqOiAkKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpCgotLS0KCkVPRgp9CgphcHBlbmRfcmVwb3J0KCkgewogIGVjaG8gIiQxIiA+PiAiJFJFUE9SVF9GSUxFIgp9CgojID09PT09PT09PT09PT09PT09PT09IOesrOS4gOatpe+8muS7jkFQS+S4reaPkOWPliBsaWJhcHAuc28g5ZKM55u45YWz5paH5Lu2ID09PT09PT09PT09PT09PT09PT09CnBoYXNlX2V4dHJhY3QoKSB7CiAgbG9nX2luZm8gIuesrDHmraU6IOS7jkFQS+mHjOaKiuWFs+mUruaWh+S7tuaOj+WHuuadpS4uLiIKICBhcHBlbmRfcmVwb3J0ICIjIyAxLiDmlofku7bmj5Dlj5ZcbiIKCiAgbG9jYWwgZXh0cmFjdF9kaXI9IiRPVVRQVVRfRElSL2V4dHJhY3RlZCIKICBta2RpciAtcCAiJGV4dHJhY3RfZGlyIgoKICAjIOaPkOWPliBsaWJhcHAuc2/vvIhGbHV0dGVy57yW6K+R5ZCO55qERGFydOS7o+egge+8iQogIGxvY2FsIGZvdW5kX2xpYmFwcD1mYWxzZQogIGxvY2FsIGxpYmFwcF9wYXRoPSIiCgogICMg5bCd6K+V5ZCE56eN5Y+v6IO955qE6Lev5b6ECiAgZm9yIHBhdHRlcm4gaW4gXAogICAgImxpYi9hcm02NC12OGEvbGliYXBwLnNvIiBcCiAgICAibGliL2FybWVhYmktdjdhL2xpYmFwcC5zbyIgXAogICAgImxpYi94ODYvbGliYXBwLnNvIiBcCiAgICAibGliL3g4Nl82NC9saWJhcHAuc28iOyBkbwogICAgaWYgdW56aXAgLWwgIiRJTlBVVF9GSUxFIiAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgIiRwYXR0ZXJuIjsgdGhlbgogICAgICB1bnppcCAtbyAtaiAiJElOUFVUX0ZJTEUiICIkcGF0dGVybiIgLWQgIiRleHRyYWN0X2RpciIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgICBsaWJhcHBfcGF0aD0iJGV4dHJhY3RfZGlyL2xpYmFwcC5zbyIKICAgICAgZm91bmRfbGliYXBwPXRydWUKICAgICAgbG9nX29rICLmib7liLDkuoYgbGliYXBwLnNvICgkcGF0dGVybikiCiAgICAgIGJyZWFrCiAgICBmaQogIGRvbmUKCiAgIyDmj5Dlj5YgbGliZmx1dHRlci5zbwogIGxvY2FsIGZvdW5kX2ZsdXR0ZXI9ZmFsc2UKICBmb3IgcGF0dGVybiBpbiBcCiAgICAibGliL2FybTY0LXY4YS9saWJmbHV0dGVyLnNvIiBcCiAgICAibGliL2FybWVhYmktdjdhL2xpYmZsdXR0ZXIuc28iIFwKICAgICJsaWIveDg2L2xpYmZsdXR0ZXIuc28iIFwKICAgICJsaWIveDg2XzY0L2xpYmZsdXR0ZXIuc28iOyBkbwogICAgaWYgdW56aXAgLWwgIiRJTlBVVF9GSUxFIiAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgIiRwYXR0ZXJuIjsgdGhlbgogICAgICB1bnppcCAtbyAtaiAiJElOUFVUX0ZJTEUiICIkcGF0dGVybiIgLWQgIiRleHRyYWN0X2RpciIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgICBmb3VuZF9mbHV0dGVyPXRydWUKICAgICAgbG9nX29rICLmib7liLDkuoYgbGliZmx1dHRlci5zbyAoJHBhdHRlcm4pIgogICAgICBicmVhawogICAgZmkKICBkb25lCgogICMg5o+Q5Y+WIGZsdXR0ZXJfYXNzZXRzIOebruW9lQogIGlmIHVuemlwIC1sICIkSU5QVVRfRklMRSIgMj4vZGV2L251bGwgfCBncmVwIC1xICJmbHV0dGVyX2Fzc2V0cy8iOyB0aGVuCiAgICBta2RpciAtcCAiJGV4dHJhY3RfZGlyL2ZsdXR0ZXJfYXNzZXRzIgogICAgdW56aXAgLW8gIiRJTlBVVF9GSUxFIiAiZmx1dHRlcl9hc3NldHMvKiIgLWQgIiRleHRyYWN0X2RpciIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgbG9nX29rICLmib7liLDkuoYgZmx1dHRlcl9hc3NldHMvIOebruW9lSIKICBmaQoKICAjIOaPkOWPliBLZXJuZWxTbmFwc2hvdCAvIEFzc2V0TWFuaWZlc3QKICBmb3IgZiBpbiAiZmx1dHRlcl9hc3NldHMvQXNzZXRNYW5pZmVzdC5qc29uIiAiZmx1dHRlcl9hc3NldHMva2VybmVsX2Jsb2IuYmluIiAiZmx1dHRlcl9hc3NldHMvaXNvbGF0ZV9zbmFwc2hvdF9kYXRhIiAiZmx1dHRlcl9hc3NldHMvdm1fc25hcHNob3RfZGF0YSI7IGRvCiAgICBpZiB1bnppcCAtbCAiJElOUFVUX0ZJTEUiIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAiJGYiOyB0aGVuCiAgICAgIHVuemlwIC1vICIkSU5QVVRfRklMRSIgIiRmIiAtZCAiJGV4dHJhY3RfZGlyIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICBmaQogIGRvbmUKCiAgaWYgW1sgIiRmb3VuZF9saWJhcHAiID09IGZhbHNlIF1dOyB0aGVuCiAgICBsb2dfd2FybiAi5rKh5om+5YiwIGxpYmFwcC5zb++8jOi/meS4qkZsdXR0ZXLlupTnlKjlj6/og73nlKjkuobkuI3lkIznmoTmiZPljIXmlrnlvI8iCiAgICBhcHBlbmRfcmVwb3J0ICItIOKaoO+4jyDmnKrmib7liLAgbGliYXBwLnNvXG4iCiAgZWxzZQogICAgYXBwZW5kX3JlcG9ydCAiLSDinIUgbGliYXBwLnNvIOW3suaPkOWPllxuIgogIGZpCgogIGlmIFtbICIkZm91bmRfZmx1dHRlciIgPT0gZmFsc2UgXV07IHRoZW4KICAgIGxvZ193YXJuICLmsqHmib7liLAgbGliZmx1dHRlci5zbyIKICBlbHNlCiAgICBhcHBlbmRfcmVwb3J0ICItIOKchSBsaWJmbHV0dGVyLnNvIOW3suaPkOWPllxuIgogIGZpCgogICMg5L+d5a2Y6Lev5b6ECiAgZWNobyAiJGxpYmFwcF9wYXRoIiA+ICIkT1VUUFVUX0RJUi8ubGliYXBwX3BhdGgiCiAgZWNobyAiJGZvdW5kX2xpYmFwcCIgPiAiJE9VVFBVVF9ESVIvLmZvdW5kX2xpYmFwcCIKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDnrKzkuozmraXvvJrku44gbGliYXBwLnNvIOaPkOWPluWtl+espuS4siA9PT09PT09PT09PT09PT09PT09PQpwaGFzZV9zdHJpbmdzKCkgewogIGxvZ19pbmZvICLnrKwy5q2lOiDku44gbGliYXBwLnNvIOmHjOaPkOWPluaJgOacieaWh+Wtl+Wtl+espuS4si4uLiIKICBhcHBlbmRfcmVwb3J0ICIjIyAyLiDlrZfnrKbkuLLmj5Dlj5ZcbiIKCiAgbG9jYWwgbGliYXBwX3BhdGgKICBsaWJhcHBfcGF0aD0kKGNhdCAiJE9VVFBVVF9ESVIvLmxpYmFwcF9wYXRoIiAyPi9kZXYvbnVsbCB8fCB0cnVlKQogIGxvY2FsIGZvdW5kX2xpYmFwcAogIGZvdW5kX2xpYmFwcD0kKGNhdCAiJE9VVFBVVF9ESVIvLmZvdW5kX2xpYmFwcCIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKCiAgaWYgW1sgIiRmb3VuZF9saWJhcHAiICE9ICJ0cnVlIiB8fCAhIC1mICIkbGliYXBwX3BhdGgiIF1dOyB0aGVuCiAgICBsb2dfd2FybiAi5rKh5pyJIGxpYmFwcC5zb++8jOi3s+i/h+Wtl+espuS4suaPkOWPliIKICAgIGFwcGVuZF9yZXBvcnQgIi0g4pqg77iPIOaXoCBsaWJhcHAuc2/vvIzot7Pov4dcbiIKICAgIHJldHVybiAwCiAgZmkKCiAgIyDnlKggc3RyaW5ncyDlkb3ku6Tmj5Dlj5bvvIzov4fmu6TmjonlpKrnn63lkozml6DmhI/kuYnnmoQKICBpZiBjb21tYW5kIC12IHN0cmluZ3MgJj4vZGV2L251bGw7IHRoZW4KICAgIHN0cmluZ3MgLW4gNiAiJGxpYmFwcF9wYXRoIiB8IHNvcnQgLXUgPiAiJFNUUklOR1NfRklMRSIKICBlbGlmIGNvbW1hbmQgLXYgZ3JlcCAmPi9kZXYvbnVsbDsgdGhlbgogICAgIyDlpIfnlKjmlrnmoYjvvJrnlKggZ3JlcCDmj5Dlj5blj6/miZPljbDlrZfnrKbkuLIKICAgIGdyZXAgLW9QICdbXHgyMC1ceDdFXXs2LH0nICIkbGliYXBwX3BhdGgiIHwgc29ydCAtdSA+ICIkU1RSSU5HU19GSUxFIgogIGVsc2UKICAgIGxvZ19lcnJvciAi57O757uf5rKh5pyJIHN0cmluZ3Mg5ZG95Luk77yM5peg5rOV5o+Q5Y+W5a2X56ym5LiyIgogICAgcmV0dXJuIDAKICBmaQoKICBsb2NhbCBzdHJfY291bnQKICBzdHJfY291bnQ9JCh3YyAtbCA8ICIkU1RSSU5HU19GSUxFIikKICBsb2dfb2sgIuaPkOWPluS6hiAkc3RyX2NvdW50IOS4quWtl+espuS4siIKICBhcHBlbmRfcmVwb3J0ICItIOKchSDku44gbGliYXBwLnNvIOaPkOWPluS6hiAqKiRzdHJfY291bnQqKiDkuKrlrZfnrKbkuLJcbiIKICBhcHBlbmRfcmVwb3J0ICItIOWtl+espuS4suaWh+S7tjogXGAkU1RSSU5HU19GSUxFXGBcbiIKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDnrKzkuInmraXvvJrliIbmnpAgVklQL+S8muWRmOmAu+i+kSA9PT09PT09PT09PT09PT09PT09PQpwaGFzZV92aXAoKSB7CiAgbG9nX2luZm8gIuesrDPmraU6IOWIhuaekOS8muWRmC9WSVDnm7jlhbPlrZfnrKbkuLIuLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgMy4g5Lya5ZGYL1ZJUCDliIbmnpBcbiIKCiAgaWYgW1sgISAtZiAiJFNUUklOR1NfRklMRSIgXV07IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIi0g4pqg77iPIOaXoOWtl+espuS4suaVsOaNrlxuIgogICAgcmV0dXJuIDAKICBmaQoKICBsb2NhbCBmb3VuZD1mYWxzZQoKICAjIDMuMSBWSVAg54q25oCB5YWz6ZSu6K+NCiAgbG9jYWwgdmlwX2hpdHMKICB2aXBfaGl0cz0kKGdyZXAgLWlFICcoaXNfdmlwfGlzVmlwfGlzX3ByZW1pdW18aXNQcmVtaXVtfGlzUHJvfGlzX3Byb3x2aXBfbGV2ZWx8dmlwTGV2ZWx8bWVtYmVyX2xldmVsfGlzX21lbWJlcnxpc01lbWJlcnxpc19zdWJzY3JpYmVkfHN1YnNjcmlwdGlvbiknICIkU1RSSU5HU19GSUxFIiAyPi9kZXYvbnVsbCB8fCB0cnVlKQogIGlmIFtbIC1uICIkdmlwX2hpdHMiIF1dOyB0aGVuCiAgICBmb3VuZD10cnVlCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMgVklQ54q25oCB55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICdgYGAnCiAgICBlY2hvICIkdmlwX2hpdHMiID4+ICIkUkVQT1JUX0ZJTEUiCiAgICBhcHBlbmRfcmVwb3J0ICdgYGBcbicKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5ug77iPIE1U566h55CG5Zmo5L+u5pS55pa55rOV77yI5aSn55m96K+d54mI77yJXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuWOn+eQhioqOiBGbHV0dGVy5oqKRGFydOS7o+eggee8luivkeaIkOS6huacuuWZqOeggShsaWJhcHAuc28p77yM5LiN6IO95YOP5pmu6YCaQVBL6YKj5qC35pS5c21hbGnjgIJcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuIDvvJrmlLnlrZfnrKbkuLLvvIjmnIDnroDljZXvvIkqKlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4gTVTnrqHnkIblmajmiZPlvIBBUEsg4oaSIERleOe8lui+keWZqCsrXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDmkJzntKLkuIrpnaLmib7liLDnmoRWSVDnm7jlhbPlrZfnrKbkuLLvvIjmr5TlpoIgXGBpc192aXBcYCDmiJYgXGBpc1ByZW1pdW1cYO+8iVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g5aaC5p6c5a2X56ym5Liy5ZyoIFxgZmx1dHRlcl9hc3NldHMvXGAg55qESlNPTumFjee9ruaWh+S7tumHjO+8jOebtOaOpeaUueWAvO+8iGZhbHNl5pS5dHJ1Ze+8jDDmlLkx77yJXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5pa55rOV5LqM77ya5pS5bGliYXBwLnNv6YeM55qE5a2X56ym5Liy77yI6L+b6Zi277yJKipcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmiZPlvIBBUEsg4oaSIOaJvuWIsCBcYGxpYi9hcm02NC12OGEvbGliYXBwLnNvXGBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOeUqOWNgeWFrei/m+WItue8lui+keWZqOaJk+W8gCBsaWJhcHAuc29cbiIKICAgIGFwcGVuZF9yZXBvcnQgIjMuIOaQnOe0olZJUOebuOWFs+eahOWtl+espuS4su+8iOavlOWmgiBcYHByZW1pdW1cYOOAgVxgdmlwXGDvvIlcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjQuIOaKiiBcYGZhbHNlXGAg5pS55oiQIFxgdHJ1ZSBcYO+8iOazqOaEj+S/neaMgemVv+W6puS4gOagt++8jOWQjumdouihpeepuuagvO+8iVxuIgogICAgYXBwZW5kX3JlcG9ydCAiNS4g5oiW6ICF5oqKIFxgMFxgIOaUueaIkCBcYDFcYO+8iFZJUOetiee6p++8iVxuIgogICAgYXBwZW5kX3JlcG9ydCAiNi4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuaWueazleS4ie+8mkhvb2vvvIjmnIDnqLPvvIkqKlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4g5a6J6KOFIEZyaWRhXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDlhpnohJrmnKxIb29rIEZsdXR0ZXLlvJXmk47nmoTlrZfnrKbkuLLmr5TovoPlh73mlbBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjMuIOW9k+ajgOa1i+WIsFZJUOWIpOaWreaXtu+8jOW8uuWItui/lOWbnlwi5pivVklQXCJcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjQuIOi/kOihjCBcYGZyaWRhIC1VIC1sIGhvb2tfdmlwLmpzIOWMheWQjVxgXG5cbiIKICBmaQoKICAjIDMuMiDliLDmnJ/ml7bpl7QKICBsb2NhbCBleHBpcmVfaGl0cwogIGV4cGlyZV9oaXRzPSQoZ3JlcCAtaUUgJyhleHBpcmV8ZXhwaXJ5fGV4cGlyZV90aW1lfGV4cGlyZURhdGV8dmFsaWRfdW50aWx8c3Vic2NyaXB0aW9uX2VuZHx0cmlhbF9lbmR8dHJpYWxfZXhwaXJlKScgIiRTVFJJTkdTX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHRydWUpCiAgaWYgW1sgLW4gIiRleHBpcmVfaGl0cyIgXV07IHRoZW4KICAgIGZvdW5kPXRydWUKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDliLDmnJ/ml7bpl7Tnm7jlhbPlrZfnrKbkuLJcbiIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYCcKICAgIGVjaG8gIiRleHBpcmVfaGl0cyIgPj4gIiRSRVBPUlRfRklMRSIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYFxuJwogICAgYXBwZW5kX3JlcG9ydCAiIyMjIPCfm6DvuI8gTVTnrqHnkIblmajkv67mlLnmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmkJzntKLkuIrpnaLmib7liLDnmoTml7bpl7TlrZfnrKbkuLJcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOWmguaenOaYr0pTT07phY3nva7ph4znmoTml7bpl7TmiLPvvIzmlLnmiJAgXGA5OTk5OTk5OTk5OTk5XGDvvIjlpKfnuqblhazlhYMyMjYy5bm077yJXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDlpoLmnpzmmK8gXGBZWVlZLU1NLUREXGAg5qC85byP77yM5pS55oiQIFxgMjA5OS0xMi0zMVxgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICBmaQoKICAjIDMuMyDmlK/ku5gv6LSt5LmwCiAgbG9jYWwgcGF5X2hpdHMKICBwYXlfaGl0cz0kKGdyZXAgLWlFICcocHVyY2hhc2V8cGF5bWVudHxwYXlfb3JkZXJ8YnV5X3ZpcHxzdWJzY3JpYmV8Y2hlY2tvdXR8aW5fYXBwX3B1cmNoYXNlfGdvb2dsZV9wbGF5X2JpbGxpbmd8YXBwX3N0b3JlKScgIiRTVFJJTkdTX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHRydWUpCiAgaWYgW1sgLW4gIiRwYXlfaGl0cyIgXV07IHRoZW4KICAgIGZvdW5kPXRydWUKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDmlK/ku5gv6LSt5Lmw55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICdgYGAnCiAgICBlY2hvICIkcGF5X2hpdHMiID4+ICIkUkVQT1JUX0ZJTEUiCiAgICBhcHBlbmRfcmVwb3J0ICdgYGBcbicKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5ug77iPIE1U566h55CG5Zmo5L+u5pS55pa55rOVXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57Si5pSv5LuY55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDmib7liLDmlK/ku5jmiJDlip/lm57osIPnmoTmoIfor4bvvIjmr5TlpoIgXGBwdXJjaGFzZV9zdWNjZXNzXGDjgIFcYHBheW1lbnRfZG9uZVxg77yJXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDlnKhKU09O6YWN572u5Lit77yM5oqK5pSv5LuY54q25oCB5pS55oiQIFxgc3VjY2Vzc1xgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDmiJbogIXmioogXGBwYWlkXGAg5pS55oiQIFxgdHJ1ZVxg77yMXGBmcmVlXGAg5pS55oiQIFxgZmFsc2VcYFxuIgogICAgYXBwZW5kX3JlcG9ydCAiNS4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgZmkKCiAgIyAzLjQgU2hhcmVkUHJlZmVyZW5jZXMgLyDmnKzlnLDlrZjlgqjplK7lkI0KICBsb2NhbCBzcF9oaXRzCiAgc3BfaGl0cz0kKGdyZXAgLWlFICcoc2hhcmVkX3ByZWZ8dXNlcl9kYXRhfHVzZXJfaW5mb3xhY2NvdW50X2luZm98Y29uZmlnfHNldHRpbmdzfGxvY2FsX3N0b3JhZ2UpJyAiJFNUUklOR1NfRklMRSIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKICBpZiBbWyAtbiAiJHNwX2hpdHMiIF1dOyB0aGVuCiAgICBmb3VuZD10cnVlCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg5pys5Zyw5a2Y5YKo55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICdgYGAnCiAgICBlY2hvICIkc3BfaGl0cyIgPj4gIiRSRVBPUlRfRklMRSIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYFxuJwogICAgYXBwZW5kX3JlcG9ydCAiIyMjIPCfm6DvuI8gTVTnrqHnkIblmajkv67mlLnmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmkJzntKLov5nkupvlrZjlgqjplK7lkI1cbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaJvuWIsOWtmOWCqFZJUOeKtuaAgeeahEpTT07mlofku7bvvIjpgJrluLjlnKggXGBmbHV0dGVyX2Fzc2V0cy9cYCDmiJYgXGBzaGFyZWRfcHJlZnMvXGDvvIlcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjMuIOaKiiBcYFwiaXNfdmlwXCI6IGZhbHNlXGAg5pS55oiQIFxgXCJpc192aXBcIjogdHJ1ZVxgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICBmaQoKICBpZiBbWyAiJGZvdW5kIiA9PSBmYWxzZSBdXTsgdGhlbgogICAgYXBwZW5kX3JlcG9ydCAiLSDmnKrmo4DmtYvliLDmmI7mmL7nmoRWSVAv5Lya5ZGY55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICItIPCfkqEgRmx1dHRlcuW6lOeUqOeahFZJUOmAu+i+keWPr+iDvemAmui/h0FQSeWKqOaAgeiOt+WPlu+8jOW7uuiurueUqOaKk+WMheW3peWFt+mFjeWQiOWIhuaekFxuXG4iCiAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDnrKzlm5vmraXvvJrliIbmnpDlub/lkYrpgLvovpEgPT09PT09PT09PT09PT09PT09PT0KcGhhc2VfYWQoKSB7CiAgbG9nX2luZm8gIuesrDTmraU6IOWIhuaekOW5v+WRiuebuOWFs+Wtl+espuS4si4uLiIKICBhcHBlbmRfcmVwb3J0ICIjIyA0LiDlub/lkYrliIbmnpBcbiIKCiAgaWYgW1sgISAtZiAiJFNUUklOR1NfRklMRSIgXV07IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIi0g4pqg77iPIOaXoOWtl+espuS4suaVsOaNrlxuIgogICAgcmV0dXJuIDAKICBmaQoKICBsb2NhbCBmb3VuZD1mYWxzZQoKICAjIDQuMSDlvIDlsY/lub/lkYoKICBsb2NhbCBzcGxhc2hfaGl0cwogIHNwbGFzaF9oaXRzPSQoZ3JlcCAtaUUgJyhzcGxhc2hfYWR8c3BsYXNoQWR8b3Blbl9hZHxvcGVuQWR8bGF1bmNoX2FkfGxhdW5jaEFkfHNwbGFzaF9zY3JlZW58U3BsYXNoU2NyZWVufGFkX3NwbGFzaHxBZFNwbGFzaCknICIkU1RSSU5HU19GSUxFIiAyPi9kZXYvbnVsbCB8fCB0cnVlKQogIGlmIFtbIC1uICIkc3BsYXNoX2hpdHMiIF1dOyB0aGVuCiAgICBmb3VuZD10cnVlCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg5byA5bGP5bm/5ZGKXG4iCiAgICBhcHBlbmRfcmVwb3J0ICdgYGAnCiAgICBlY2hvICIkc3BsYXNoX2hpdHMiID4+ICIkUkVQT1JUX0ZJTEUiCiAgICBhcHBlbmRfcmVwb3J0ICdgYGBcbicKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5ug77iPIE1U566h55CG5Zmo5L+u5pS55pa55rOVXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57Si5byA5bGP5bm/5ZGK55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDmib7liLDlub/lkYrphY3nva5KU09O77yI6YCa5bi45ZyoIFxgZmx1dHRlcl9hc3NldHMvXGAg6YeM77yJXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDmiorlub/lkYrlvIDlhbPmlLnmiJAgXGBmYWxzZVxg77yM5oiW6ICF5oqK5bm/5ZGKSUTmuIXnqbpcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjQuIOWmguaenOacieWAkuiuoeaXtumFjee9ru+8jOaKiuenkuaVsOaUueaIkCBcYDBcYCDmiJYgXGAxXGBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjUuIOS/neWtmCDihpIg562+5ZCNIOKGkiDlronoo4VcblxuIgogIGZpCgogICMgNC4yIOW5v+WRilNES+agh+ivhgogIGxvY2FsIHNka19oaXRzCiAgc2RrX2hpdHM9JChncmVwIC1pRSAnKGdvb2dsZV9hZG1vYnxhZG1vYnxBZE1vYnxmYWNlYm9va19hZHN8QXVkaWVuY2VOZXR3b3JrfHVuaXR5X2Fkc3xVbml0eUFkc3xhcHBsb3ZpbnxBcHBMb3ZpbnxwYW5nbGV8UGFuZ2xlfGJ5dGVkYW5jZXxUVEFkU2RrfGdkdHxHRFR8cXFcLmVcLmFkc3xrc19hZHxLc0FkfGJhaWR1X21vYmFkc3xCREFkfGlyb25zb3VyY2V8SXJvblNvdXJjZXx2dW5nbGV8VnVuZ2xlfG1haW98TWFpb3x0b3BvbnxUb3BPbnxhZG1vc3R8QWRNb3N0KScgIiRTVFJJTkdTX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHRydWUpCiAgaWYgW1sgLW4gIiRzZGtfaGl0cyIgXV07IHRoZW4KICAgIGZvdW5kPXRydWUKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDmo4DmtYvliLDnmoTlub/lkYpTREtcbiIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYCcKICAgIGVjaG8gIiRzZGtfaGl0cyIgPj4gIiRSRVBPUlRfRklMRSIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYFxuJwoKICAgICMg6K+G5Yir5YW35L2TU0RLCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+boO+4jyDlkITlub/lkYpTREvlsY/olL3mlrnms5VcblxuIgoKICAgIGlmIGVjaG8gIiRzZGtfaGl0cyIgfCBncmVwIC1xaSAiYWRtb2JcfGdvb2dsZV9hZCI7IHRoZW4KICAgICAgYXBwZW5kX3JlcG9ydCAiKipBZE1vYiAo6LC35q2M5bm/5ZGKKSoqXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmkJzntKIgXGBBZE1vYlxgIOaIliBcYGNhLWFwcC1wdWJcYO+8iOW5v+WRiklE5YmN57yA77yJXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaKiuW5v+WRiklE5riF56m65oiW5pS55oiQ5peg5pWISURcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiMy4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgICBmaQogICAgaWYgZWNobyAiJHNka19oaXRzIiB8IGdyZXAgLXFpICJmYWNlYm9va1x8YXVkaWVuY2UiOyB0aGVuCiAgICAgIGFwcGVuZF9yZXBvcnQgIioqRmFjZWJvb2sgQXVkaWVuY2UgKOiEuOS5puW5v+WRiikqKlxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57SiIFxgZmFjZWJvb2tfYWRzXGAg5oiWIFxgWU9VUl9QTEFDRU1FTlRfSURcYFxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIyLiDmiorlub/lkYrkvY1JROa4heepulxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIzLiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICAgIGZpCiAgICBpZiBlY2hvICIkc2RrX2hpdHMiIHwgZ3JlcCAtcWkgInBhbmdsZVx8Ynl0ZWRhbmNlXHxUVEFkIjsgdGhlbgogICAgICBhcHBlbmRfcmVwb3J0ICIqKuepv+WxseeUsiAo5aS05p2hL+Wtl+iKguW5v+WRiikqKlxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57SiIFxgVFRBZFNka1xgIOaIliBcYHBhbmdsZVxgXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaJvuWIsOW5v+WRiumFjee9ru+8jOaKiuW5v+WRiuW8gOWFs+iuvuS4uiBcYGZhbHNlXGBcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiMy4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgICBmaQogICAgaWYgZWNobyAiJHNka19oaXRzIiB8IGdyZXAgLXFpICJnZHRcfHFxXC5lXC5hZHMiOyB0aGVuCiAgICAgIGFwcGVuZF9yZXBvcnQgIioq5LyY6YeP5rGHICjohb7orq/lub/lkYopKipcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiMS4gTVTnrqHnkIblmagg4oaSIOaQnOe0oiBcYEdEVFxgIOaIliBcYGdkdFxgXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaKiuW5v+WRiumFjee9ruS4reeahOW8gOWFs+WFs+aOiVxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIzLiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICAgIGZpCiAgICBpZiBlY2hvICIkc2RrX2hpdHMiIHwgZ3JlcCAtcWkgImtzX2FkXHxrdWFpc2hvdSI7IHRoZW4KICAgICAgYXBwZW5kX3JlcG9ydCAiKirlv6vmiYvlub/lkYoqKlxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57SiIFxgS3NBZFxgXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjIuIOa4heepuuW5v+WRiklE5oiW5YWz6Zet5bm/5ZGK5byA5YWzXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjMuIOS/neWtmCDihpIg562+5ZCNIOKGkiDlronoo4VcblxuIgogICAgZmkKICAgIGlmIGVjaG8gIiRzZGtfaGl0cyIgfCBncmVwIC1xaSAidW5pdHlfYWRzXHxVbml0eUFkcyI7IHRoZW4KICAgICAgYXBwZW5kX3JlcG9ydCAiKipVbml0eSBBZHMqKlxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57SiIFxgVW5pdHlBZHNcYCDmiJYgXGBHQU1FX0lEXGBcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiMi4g5riF56m65ri45oiPSURcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiMy4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgICBmaQogICAgaWYgZWNobyAiJHNka19oaXRzIiB8IGdyZXAgLXFpICJhcHBsb3ZpbiI7IHRoZW4KICAgICAgYXBwZW5kX3JlcG9ydCAiKipBcHBMb3ZpbiAvIE1BWCoqXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmkJzntKIgXGBBcHBMb3ZpblxgIOaIliBcYFNES19LRVlcYFxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIyLiDmuIXnqbpTREvlr4bpkqVcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiMy4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgICBmaQogIGZpCgogICMgNC4zIOW5v+WRiuWNleWFg0lECiAgbG9jYWwgYWRpZF9oaXRzCiAgYWRpZF9oaXRzPSQoZ3JlcCAtaUUgJyhjYS1hcHAtcHViLXxhZF91bml0X2lkfGFkVW5pdElkfHBsYWNlbWVudF9pZHxwbGFjZW1lbnRJZHxzbG90X2lkfHNsb3RJZHxiYW5uZXJfaWR8aW50ZXJzdGl0aWFsX2lkfHJld2FyZGVkX2lkfG5hdGl2ZV9pZCknICIkU1RSSU5HU19GSUxFIiAyPi9kZXYvbnVsbCB8fCB0cnVlKQogIGlmIFtbIC1uICIkYWRpZF9oaXRzIiBdXTsgdGhlbgogICAgZm91bmQ9dHJ1ZQogICAgYXBwZW5kX3JlcG9ydCAiIyMjIOW5v+WRiuWNleWFg0lEXG4iCiAgICBhcHBlbmRfcmVwb3J0ICdgYGAnCiAgICBlY2hvICIkYWRpZF9oaXRzIiA+PiAiJFJFUE9SVF9GSUxFIgogICAgYXBwZW5kX3JlcG9ydCAnYGBgXG4nCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+boO+4jyBNVOeuoeeQhuWZqOS/ruaUueaWueazlVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4gTVTnrqHnkIblmagg4oaSIOaQnOe0ouS4iumdouaJvuWIsOeahOW5v+WRiklEXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDmiorlub/lkYpJROWtl+espuS4sua4heepuu+8iOaUueaIkOepuuWtl+espuS4siBcYFwiXCJcYO+8iVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g6L+Z5qC35bm/5ZGK6K+35rGC5Lya5aSx6LSl77yM5L2GQVBQ5LiN5Lya6Zeq6YCAXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICBmaQoKICAjIDQuNCDlub/lkYrnm7jlhbPpgJrnlKjor40KICBsb2NhbCBnZW5lcmFsX2hpdHMKICBnZW5lcmFsX2hpdHM9JChncmVwIC1pRSAnKHNob3dfYWR8bG9hZEFkfHJld2FyZGVkX2FkfGludGVyc3RpdGlhbF9hZHxiYW5uZXJfYWR8bmF0aXZlX2FkfGFkX2xvYWRlZHxhZF9mYWlsZWR8YWRfY2xpY2tlZHxhZF9jbG9zZWR8YWRfc2hvd2VkfHNob3dJbnRlcnN0aXRpYWx8c2hvd1Jld2FyZGVkfHNob3dCYW5uZXIpJyAiJFNUUklOR1NfRklMRSIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKICBpZiBbWyAtbiAiJGdlbmVyYWxfaGl0cyIgXV07IHRoZW4KICAgIGZvdW5kPXRydWUKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDpgJrnlKjlub/lkYrmk43kvZzlrZfnrKbkuLJcbiIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYCcKICAgIGVjaG8gIiRnZW5lcmFsX2hpdHMiID4+ICIkUkVQT1JUX0ZJTEUiCiAgICBhcHBlbmRfcmVwb3J0ICdgYGBcbicKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5ug77iPIE1U566h55CG5Zmo5L+u5pS55pa55rOVXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5pCc57Si6L+Z5Lqb5bm/5ZGK5pON5L2c5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDlpoLmnpzlnKhKU09O6YWN572u6YeM77yM5oqK5bm/5ZGK5byA5YWz5YWo6YOo6K6+5Li6IFxgZmFsc2VcYFxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g5aaC5p6c5ZyobGliYXBwLnNv6YeM77yM55So5Y2B5YWt6L+b5Yi257yW6L6R5Zmo5oqKIFxgc2hvd1xgIOaUueaIkCBcYHh4eHhcYO+8iOegtOWdj+Wtl+espuS4su+8iVxuIgogICAgYXBwZW5kX3JlcG9ydCAiNC4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgZmkKCiAgaWYgW1sgIiRmb3VuZCIgPT0gZmFsc2UgXV07IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIi0g5pyq5qOA5rWL5Yiw5piO5pi+55qE5bm/5ZGK55u45YWz5a2X56ym5LiyXG4iCiAgICBhcHBlbmRfcmVwb3J0ICItIPCfkqEg5bm/5ZGK5Y+v6IO96YCa6L+H5pyN5Yqh56uv5LiL5Y+R6YWN572u77yM5bu66K6u55So5oqT5YyF5bel5YW377yISHR0cENhbmFyee+8iemFjeWQiOWIhuaekFxuXG4iCiAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDnrKzkupTmraXvvJrliIbmnpDlvLnnqpfpgLvovpEgPT09PT09PT09PT09PT09PT09PT0KcGhhc2VfcG9wdXAoKSB7CiAgbG9nX2luZm8gIuesrDXmraU6IOWIhuaekOW8ueeqly/mj5DnpLrnm7jlhbPlrZfnrKbkuLIuLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgNS4g5by556qXL+aPkOekuuWIhuaekFxuIgoKICBpZiBbWyAhIC1mICIkU1RSSU5HU19GSUxFIiBdXTsgdGhlbgogICAgYXBwZW5kX3JlcG9ydCAiLSDimqDvuI8g5peg5a2X56ym5Liy5pWw5o2uXG4iCiAgICByZXR1cm4gMAogIGZpCgogIGxvY2FsIGZvdW5kPWZhbHNlCgogICMgNS4xIOW8uuWItuabtOaWsAogIGxvY2FsIHVwZGF0ZV9oaXRzCiAgdXBkYXRlX2hpdHM9JChncmVwIC1pRSAnKGZvcmNlX3VwZGF0ZXxmb3JjZVVwZGF0ZXxjaGVja191cGRhdGV8Y2hlY2tVcGRhdGV8YXBwX3VwZGF0ZXxuZXdfdmVyc2lvbnxsYXRlc3RfdmVyc2lvbnx1cGRhdGVfcmVxdWlyZWR8dmVyc2lvbl91cGRhdGV8dXBncmFkZV9hcHB8ZG93bmxvYWRfbmV3KScgIiRTVFJJTkdTX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHRydWUpCiAgaWYgW1sgLW4gIiR1cGRhdGVfaGl0cyIgXV07IHRoZW4KICAgIGZvdW5kPXRydWUKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDlvLrliLbmm7TmlrBcbiIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYCcKICAgIGVjaG8gIiR1cGRhdGVfaGl0cyIgPj4gIiRSRVBPUlRfRklMRSIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYFxuJwogICAgYXBwZW5kX3JlcG9ydCAiIyMjIPCfm6DvuI8gTVTnrqHnkIblmajkv67mlLnmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmkJzntKLmm7TmlrDnm7jlhbPlrZfnrKbkuLJcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaJvuWIsOeJiOacrOWPt+avlOi+g+eahEpTT07phY3nva7vvIjmr5TlpoIgXGBtaW5fdmVyc2lvblxg44CBXGBmb3JjZV91cGRhdGVcYO+8iVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g5oqKIFxgZm9yY2VfdXBkYXRlXGAg5pS55oiQIFxgZmFsc2VcYFxuIgogICAgYXBwZW5kX3JlcG9ydCAiNC4g5oqKIFxgbWluX3ZlcnNpb25cYCDmlLnmiJAgXGBcIjAuMC4wXCJcYFxuIgogICAgYXBwZW5kX3JlcG9ydCAiNS4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgZmkKCiAgIyA1LjIg5by556qXL+WFrOWRigogIGxvY2FsIGRpYWxvZ19oaXRzCiAgZGlhbG9nX2hpdHM9JChncmVwIC1pRSAnKGRpYWxvZ3xhbGVydHxwb3B1cHzlvLnnqpd85YWs5ZGKfG5vdGljZXxhbm5vdW5jZW1lbnR8YnVsbGV0aW58bWVzc2FnZV9ib3h8c2hvd19kaWFsb2d8QWxlcnREaWFsb2d8Y3VzdG9tX2RpYWxvZyknICIkU1RSSU5HU19GSUxFIiAyPi9kZXYvbnVsbCB8fCB0cnVlKQogIGlmIFtbIC1uICIkZGlhbG9nX2hpdHMiIF1dOyB0aGVuCiAgICBmb3VuZD10cnVlCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg5by556qXL+WFrOWRilxuIgogICAgYXBwZW5kX3JlcG9ydCAnYGBgJwogICAgZWNobyAiJGRpYWxvZ19oaXRzIiA+PiAiJFJFUE9SVF9GSUxFIgogICAgYXBwZW5kX3JlcG9ydCAnYGBgXG4nCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+boO+4jyBNVOeuoeeQhuWZqOS/ruaUueaWueazlVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4gTVTnrqHnkIblmagg4oaSIOaQnOe0ouW8ueeql+ebuOWFs+Wtl+espuS4slxuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g5aaC5p6c5piv5YWs5ZGK5by556qX77yM5om+5Yiw5YWs5ZGKVVJM77yM5oqKVVJM5riF56m6XG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDlpoLmnpzmmK/or4TliIblvLnnqpfvvIzmioogXGBzaG93X3JhdGVcYCDmlLnmiJAgXGBmYWxzZVxgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICBmaQoKICAjIDUuMyDor4TliIYKICBsb2NhbCByYXRlX2hpdHMKICByYXRlX2hpdHM9JChncmVwIC1pRSAnKHJhdGVfYXBwfHJhdGVfdXN8Z2l2ZV9yYXRpbmd8YXBwX3JhdGluZ3xpbl9hcHBfcmV2aWV3fHN0b3JlX3JhdGluZ3zor4Tku7d86K+E5YiGfOe7meS4quWlveivhCknICIkU1RSSU5HU19GSUxFIiAyPi9kZXYvbnVsbCB8fCB0cnVlKQogIGlmIFtbIC1uICIkcmF0ZV9oaXRzIiBdXTsgdGhlbgogICAgZm91bmQ9dHJ1ZQogICAgYXBwZW5kX3JlcG9ydCAiIyMjIOivhOWIhuW8ueeql1xuIgogICAgYXBwZW5kX3JlcG9ydCAnYGBgJwogICAgZWNobyAiJHJhdGVfaGl0cyIgPj4gIiRSRVBPUlRfRklMRSIKICAgIGFwcGVuZF9yZXBvcnQgJ2BgYFxuJwogICAgYXBwZW5kX3JlcG9ydCAiIyMjIPCfm6DvuI8gTVTnrqHnkIblmajkv67mlLnmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmkJzntKLor4TliIbnm7jlhbPlrZfnrKbkuLJcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaJvuWIsOivhOWIhuW8ueeql+eahOW8gOWFs+mFjee9rlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g5oqK5byA5YWz5pS55oiQIFxgZmFsc2VcYCDmiJbmiorop6blj5HmnaHku7bmlLnmiJDmsLjov5zkuI3mu6HotrNcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjQuIOS/neWtmCDihpIg562+5ZCNIOKGkiDlronoo4VcblxuIgogIGZpCgogICMgNS40IFRvYXN0L+aPkOekuua2iOaBrwogIGxvY2FsIHRvYXN0X2hpdHMKICB0b2FzdF9oaXRzPSQoZ3JlcCAtaUUgJyh0b2FzdHxzbmFja2Jhcnzmj5DnpLp85rip6aao5o+Q56S6fOa4qemmqOaPkOekunzmj5DnpLrkv6Hmga985o+Q56S65qGGKScgIiRTVFJJTkdTX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHRydWUpCiAgaWYgW1sgLW4gIiR0b2FzdF9oaXRzIiBdXTsgdGhlbgogICAgZm91bmQ9dHJ1ZQogICAgYXBwZW5kX3JlcG9ydCAiIyMjIFRvYXN0L+aPkOekuua2iOaBr1xuIgogICAgYXBwZW5kX3JlcG9ydCAnYGBgJwogICAgZWNobyAiJHRvYXN0X2hpdHMiID4+ICIkUkVQT1JUX0ZJTEUiCiAgICBhcHBlbmRfcmVwb3J0ICdgYGBcbicKICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5ug77iPIE1U566h55CG5Zmo5L+u5pS55pa55rOVXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiBUb2FzdOS4gOiIrOS4jeW9seWTjeS9v+eUqO+8jOWPr+S7peS4jeaUuVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g5aaC5p6c6Z2e6KaB5pS577ya5Zyo5Y2B5YWt6L+b5Yi257yW6L6R5Zmo5Lit5oqK5o+Q56S65paH5a2X5pu/5o2i5oiQ56m65qC8XG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKICBmaQoKICBpZiBbWyAiJGZvdW5kIiA9PSBmYWxzZSBdXTsgdGhlbgogICAgYXBwZW5kX3JlcG9ydCAiLSDmnKrmo4DmtYvliLDmmI7mmL7nmoTlvLnnqpcv5o+Q56S655u45YWz5a2X56ym5LiyXG5cbiIKICBmaQp9CgojID09PT09PT09PT09PT09PT09PT09IOesrOWFreatpe+8mkZsdXR0ZXLpgJrnlKjkv67mlLnmlZnnqIsgPT09PT09PT09PT09PT09PT09PT0KcGhhc2VfZmx1dHRlcl9ndWlkZSgpIHsKICBhcHBlbmRfcmVwb3J0ICIjIyA2LiBGbHV0dGVyIEFQSyDkv67mlLnpgJrnlKjmlZnnqIvvvIjlpKfnmb3or53niYjvvIlcbiIKICBhcHBlbmRfcmVwb3J0ICIjIyMgRmx1dHRlcui3n+aZrumAmkFQS+acieS7gOS5iOS4jeS4gOagt++8n1xuIgogIGFwcGVuZF9yZXBvcnQgIuaZrumAmkFQS+aYr+eUqEphdmEvS290bGlu5YaZ55qE77yM5Y+N57yW6K+R5ZCO6IO955yL5Yiwc21hbGnku6PnoIHvvIznlKhNVOeuoeeQhuWZqOaUuei1t+adpeW+iOaWueS+v+OAglxuIgogIGFwcGVuZF9yZXBvcnQgIkZsdXR0ZXLmmK/nlKhEYXJ06K+t6KiA5YaZ55qE77yM57yW6K+R5ZCO5Y+Y5oiQ5LqG5LqM6L+b5Yi25paH5Lu2KGxpYmFwcC5zbynvvIzkuI3og73nm7TmjqXmlLnku6PnoIHjgIJcbiIKICBhcHBlbmRfcmVwb3J0ICLmiYDku6VGbHV0dGVy55qE5L+u5pS55oCd6Lev5a6M5YWo5LiN5LiA5qC344CCXG5cbiIKCiAgYXBwZW5kX3JlcG9ydCAiIyMjIOaWueazleS4gO+8muaUuemFjee9ruaWh+S7tu+8iOacgOeugOWNle+8jOmAguWQiOaWsOaJi++8iVxuIgogIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5Zmo5omT5byAQVBLXG4iCiAgYXBwZW5kX3JlcG9ydCAiMi4g6L+b5YWlIFxgYXNzZXRzL2ZsdXR0ZXJfYXNzZXRzL1xgIOebruW9lVxuIgogIGFwcGVuZF9yZXBvcnQgIjMuIOaJvuWIsEpTT07phY3nva7mlofku7bvvIjmr5TlpoIgXGBjb25maWcuanNvblxg44CBXGBhcHBfY29uZmlnLmpzb25cYOOAgVxgc2V0dGluZ3MuanNvblxg77yJXG4iCiAgYXBwZW5kX3JlcG9ydCAiNC4g6YeM6Z2i5Y+v6IO95pyJ5bm/5ZGK5byA5YWz44CBVklQ54q25oCB44CB54mI5pys5Y+3562J5L+h5oGvXG4iCiAgYXBwZW5kX3JlcG9ydCAiNS4g55u05o6l5pS5SlNPTumHjOeahOWAvO+8iGZhbHNl5pS5dHJ1ZeOAgTDmlLkx44CB5riF56m65bm/5ZGKSUTvvIlcbiIKICBhcHBlbmRfcmVwb3J0ICI2LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG5cbiIKCiAgYXBwZW5kX3JlcG9ydCAiIyMjIOaWueazleS6jO+8muaUuWxpYmFwcC5zb+mHjOeahOWtl+espuS4su+8iOi/m+mYtu+8iVxuIgogIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmiZPlvIBBUEsg4oaSIOaJvuWIsCBcYGxpYi9hcm02NC12OGEvbGliYXBwLnNvXGBcbiIKICBhcHBlbmRfcmVwb3J0ICIyLiDplb/mjIkg4oaSIOeUqOWNgeWFrei/m+WItue8lui+keWZqOaJk+W8gFxuIgogIGFwcGVuZF9yZXBvcnQgIjMuIOaQnOe0ouS9oOimgeaUueeahOWtl+espuS4su+8iOavlOWmgiBcYHByZW1pdW1cYOOAgVxgYWRtb2JcYO+8iVxuIgogIGFwcGVuZF9yZXBvcnQgIjQuIOebtOaOpee8lui+keWtl+espuS4suWGheWuue+8iOazqOaEj++8muaWsOWtl+espuS4sumVv+W6puW/hemhu+i3n+WOn+adpeS4gOagt++8jOS4jeWkn+WwseeUqOepuuagvOaIllxceDAw6KGl77yJXG4iCiAgYXBwZW5kX3JlcG9ydCAiNS4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCgogIGFwcGVuZF9yZXBvcnQgIiMjIyDmlrnms5XkuInvvJrmipPljIXmlLnmnI3liqHnq6/mlbDmja7vvIjpq5jnuqfvvIlcbiIKICBhcHBlbmRfcmVwb3J0ICIxLiDmiYvmnLroo4UgSHR0cENhbmFyeSDmiJbnlLXohJHoo4UgQ2hhcmxlc1xuIgogIGFwcGVuZF9yZXBvcnQgIjIuIOaJk+W8gEFQUO+8jOeci+Wug+ivt+axguS6huWTquS6m+aOpeWPo1xuIgogIGFwcGVuZF9yZXBvcnQgIjMuIOaJvuWIsOi/lOWbnlZJUOeKtuaAgeOAgeW5v+WRiumFjee9rueahOaOpeWPo1xuIgogIGFwcGVuZF9yZXBvcnQgIjQuIOeUqCBIdHRwQ2FuYXJ5IOaLpuaIquWTjeW6lO+8jOaKilZJUOaUueaIkOW3suW8gOmAmuOAgeW5v+WRiumFjee9rua4heepulxuIgogIGFwcGVuZF9yZXBvcnQgIjUuIOmFjeWQiCBYcG9zZWQg55qEIEp1c3RUcnVzdE1lIOS/oeS7u+aJgOacieivgeS5pu+8iOWmguaenOaYr0hUVFBT77yJXG5cbiIKCiAgYXBwZW5kX3JlcG9ydCAiIyMjIOaWueazleWbm++8mkZyaWRhIEhvb2vvvIjmnIDlvLrlpKfvvIlcbiIKICBhcHBlbmRfcmVwb3J0ICIxLiDmiYvmnLroo4UgRnJpZGEgU2VydmVy77yI6ZyA6KaBUm9vdO+8iVxuIgogIGFwcGVuZF9yZXBvcnQgIjIuIOeUteiEkeijhSBmcmlkYS10b29sc++8mlxgcGlwIGluc3RhbGwgZnJpZGEtdG9vbHNcYFxuIgogIGFwcGVuZF9yZXBvcnQgIjMuIOWGmUpT6ISa5pysSG9vayBGbHV0dGVy55qERGFydOWxguWHveaVsFxuIgogIGFwcGVuZF9yZXBvcnQgIjQuIOavlOWmgkhvb2vlrZfnrKbkuLLmr5TovoPlh73mlbDvvIzorqlWSVDliKTmlq3msLjov5zov5Tlm550cnVlXG4iCiAgYXBwZW5kX3JlcG9ydCAiNS4g6L+Q6KGM77yaXGBmcmlkYSAtVSAtZiDljIXlkI0gLWwgaG9vay5qc1xgXG5cbiIKCiAgYXBwZW5kX3JlcG9ydCAiIyMjIOKaoO+4jyDms6jmhI/kuovpoblcbiIKICBhcHBlbmRfcmVwb3J0ICItIEZsdXR0ZXLnmoRsaWJhcHAuc2/mmK/nvJbor5HlkI7nmoTmnLrlmajnoIHvvIzmlLnplJnkuoZBUFDkvJrpl6rpgIBcbiIKICBhcHBlbmRfcmVwb3J0ICItIOaUueS5i+WJjeS4gOWumuimgeWkh+S7veWOn0FQS1xuIgogIGFwcGVuZF9yZXBvcnQgIi0g5pS55a2X56ym5Liy5pe26ZW/5bqm5b+F6aG75LiA6Ie077yM5ZCm5YiZ5Lya56C05Z2P5paH5Lu257uT5p6EXG4iCiAgYXBwZW5kX3JlcG9ydCAiLSDmnInkuptBUFDnmoRWSVDnirbmgIHlrZjlnKjmnI3liqHlmajkuIrvvIzmnKzlnLDmlLnkuobkuZ/msqHnlKjvvIzpnIDopoHmipPljIXphY3lkIhcbiIKICBhcHBlbmRfcmVwb3J0ICItIEZsdXR0ZXIgMy54IOS5i+WQjueahOeJiOacrOeUqOS6hua3t+a3hu+8jOWtl+espuS4suWPr+iDveS4jeWujOaVtFxuXG4iCn0KCiMgPT09PT09PT09PT09PT09PT09PT0g5Li75rWB56iLID09PT09PT09PT09PT09PT09PT09Cm1haW4oKSB7CiAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICBlY2hvICIgRmx1dHRlciBBUEsg6Ieq5Yqo5YyW5YiG5p6QIgogIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgZWNobyAiIgogIGxvZ19pbmZvICLnm67moIc6ICRJTlBVVF9GSUxFIgogIGxvZ19pbmZvICLovpPlh7o6ICRPVVRQVVRfRElSIgogIGVjaG8gIiIKCiAgaW5pdF9yZXBvcnQKICBwaGFzZV9leHRyYWN0CiAgcGhhc2Vfc3RyaW5ncwoKICBpZiBbWyAiJERPX0FMTCIgPT0gdHJ1ZSB8fCAiJERPX1ZJUCIgPT0gdHJ1ZSBdXTsgdGhlbgogICAgcGhhc2VfdmlwCiAgZmkKICBpZiBbWyAiJERPX0FMTCIgPT0gdHJ1ZSB8fCAiJERPX0FEIiA9PSB0cnVlIF1dOyB0aGVuCiAgICBwaGFzZV9hZAogIGZpCiAgaWYgW1sgIiRET19BTEwiID09IHRydWUgfHwgIiRET19QT1BVUCIgPT0gdHJ1ZSBdXTsgdGhlbgogICAgcGhhc2VfcG9wdXAKICBmaQoKICBwaGFzZV9mbHV0dGVyX2d1aWRlCgogIGFwcGVuZF9yZXBvcnQgIiMjIDcuIOWIhuaekOWujOaIkFxuIgogIGFwcGVuZF9yZXBvcnQgIi0g5oql5ZGK55Sf5oiQ5pe26Ze0OiAkKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpXG4iCiAgYXBwZW5kX3JlcG9ydCAiLSDovpPlh7rnm67lvZU6IFxgJE9VVFBVVF9ESVJcYFxuIgogIGFwcGVuZF9yZXBvcnQgIi0g5a2X56ym5Liy5paH5Lu2OiBcYCRTVFJJTkdTX0ZJTEVcYFxuIgoKICBlY2hvICIiCiAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICBsb2dfb2sgIuWIhuaekOWujOaIkO+8gSIKICBlY2hvICIiCiAgZWNobyAiICDmiqXlkYrmlofku7Y6ICRSRVBPUlRfRklMRSIKICBlY2hvICIgIOWtl+espuS4suaWh+S7tjogJFNUUklOR1NfRklMRSIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Igp9CgptYWluICIkQCIK
B64EOF_analyze-flutter.sh
chmod +x "$DECODE_DIR/analyze-flutter.sh" 2>/dev/null

echo "恢复: auto-reverse.sh ..."
base64 -d << 'B64EOF_auto-reverse.sh' > "$DECODE_DIR/auto-reverse.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGF1dG8tcmV2ZXJzZS5zaCDigJQg5YWo6Ieq5YqoIEFuZHJvaWQg6YCG5ZCR5bel56iL5rWB5rC057q/77yI5pm66IO954mI77yJCiMg6Ieq5Yqo5qOA5rWL5qGG5p62IOKGkiDmoLnmja7moYbmnrbpgInmi6nlr7nlupTliIbmnpDohJrmnKwg4oaSIOeUn+aIkOWkp+eZveivneS/ruaUueaVmeeoiwojIOaUr+aMge+8mkZsdXR0ZXLjgIFSZWFjdCBOYXRpdmXjgIFVbml0eeOAgeWOn+eUnyBBbmRyb2lkCnNldCAtZXVvIHBpcGVmYWlsCgpTQ1JJUFRfRElSPSIkKGNkICIkKGRpcm5hbWUgIiR7QkFTSF9TT1VSQ0VbMF19IikiICYmIHB3ZCkiClNLSUxMX0RJUj0iJHtTQ1JJUFRfRElSfSIKCmlmIFtbICIkKGJhc2VuYW1lICIkU0NSSVBUX0RJUiIpIiA9PSAic2NyaXB0cyIgXV07IHRoZW4KICBTS0lMTF9ESVI9IiQoZGlybmFtZSAiJFNDUklQVF9ESVIiKSIKZmkKClNDUklQVFNfRElSPSIke1NLSUxMX0RJUn0vc2NyaXB0cyIKVElNRVNUQU1QPSQoZGF0ZSArJVklbSVkXyVIJU0lUykKCiMg6buY6K6k6YWN572uCkVOR0lORT0iamFkeCIKREVPQkY9ZmFsc2UKTk9fUkVTPWZhbHNlCkFVVE9fSU5TVEFMTD1mYWxzZQpTRUNVUklUWV9BTkFMWVNJUz1mYWxzZQpGT1JDRV9OQVRJVkU9ZmFsc2UKT1VUUFVUX0RJUj0iIgpJTlBVVF9GSUxFPSIiCgojIOminOiJsui+k+WHugpSRUQ9J1wwMzNbMDszMW0nCkdSRUVOPSdcMDMzWzA7MzJtJwpZRUxMT1c9J1wwMzNbMTszM20nCkJMVUU9J1wwMzNbMDszNG0nCkNZQU49J1wwMzNbMDszNm0nCk5DPSdcMDMzWzBtJwoKdXNhZ2UoKSB7CiAgY2F0IDw8RU9GClVzYWdlOiBhdXRvLXJldmVyc2Uuc2ggW09QVElPTlNdIDxmaWxlLmFwa3x4YXBrfGphcnxhYXI+CuWFqOiHquWKqCBBbmRyb2lkIOmAhuWQkeW3peeoi+a1geawtOe6v++8iOaZuuiDveeJiO+8iQoK6Ieq5Yqo5qOA5rWLQVBQ5piv55So5LuA5LmI5qGG5p625YaZ55qE77yM54S25ZCO6YCJ5oup5pyA5ZCI6YCC55qE5YiG5p6Q5pa55rOV77yaCiAgRmx1dHRlciDihpIg55SoRmx1dHRlcuS4k+eUqOWIhuaekO+8iOaPkOWPlmxpYmFwcC5zb+Wtl+espuS4siArIOmFjee9ruaWh+S7tuWIhuaekO+8iQogIFJlYWN0IE5hdGl2ZSDihpIg5Y+N57yW6K+RICsg5pCc57SiSlMgQnVuZGxlCiAgVW5pdHkg4oaSIOWPjee8luivkSArIOWIhuaekGlsMmNwcC9tb25vCiAg5Y6f55SfQW5kcm9pZCDihpIg5Y+N57yW6K+RICsgQVBJ5o+Q5Y+WICsg5a6J5YWo5YiG5p6QCgrlj4LmlbA6CiAgPGZpbGU+ICAgICAgICAgICAg55uu5qCH5paH5Lu26Lev5b6EICguYXBrLCAueGFwaywgLmphciwgLmFhcikKCumAiemhuToKICAtbywgLS1vdXRwdXQgRElSICDovpPlh7rnm67lvZUgKOm7mOiupDogPOaWh+S7tuWQjT4tYW5hbHlzaXMtPOaXtumXtOaIsz4pCiAgLS1lbmdpbmUgRU5HSU5FICAg5Y+N57yW6K+R5byV5pOOOiBqYWR4LCBmZXJuZmxvd2VyLCBib3RoICjpu5jorqQ6IGphZHgpCiAgLS1kZW9iZiAgICAgICAgICAg5ZCv55So5Y+N5re35reGCiAgLS1uby1yZXMgICAgICAgICAg6Lez6L+H6LWE5rqQ6Kej56CB77yI5LuF5Luj56CB77yM5pu05b+r77yJCiAgLS1hdXRvLWluc3RhbGwgICAg6Ieq5Yqo5a6J6KOF57y65aSx55qE5L6d6LWWCiAgLS1zZWN1cml0eSAgICAgICAg5ZCv55So5a6J5YWo5YiG5p6Q77yI5Lya5ZGYL0dHL+W8ueeqly/nrb7lkI0v5Y+N6LCD6K+VL+WKoOWvhiArIE1U566h55CG5Zmo5L+u5pS55pWZ56iL77yJCiAgLS1mb3JjZS1uYXRpdmUgICAg5by65Yi25L2/55So5Y6f55Sf5YiG5p6Q77yI6Lez6L+H5qGG5p625qOA5rWL77yJCiAgLWgsIC0taGVscCAgICAgICAg5pi+56S65biu5Yqp5L+h5oGvCgrnpLrkvos6CiAgYXV0by1yZXZlcnNlLnNoIGFwcC5hcGsgICAgICAgICAgICAgICAgICAgICMg6Ieq5Yqo5qOA5rWL5qGG5p62CiAgYXV0by1yZXZlcnNlLnNoIC0tc2VjdXJpdHkgYXBwLmFwayAgICAgICAgICAjIOiHquWKqOajgOa1iyArIOWuieWFqOWIhuaekAogIGF1dG8tcmV2ZXJzZS5zaCAtLWZvcmNlLW5hdGl2ZSBhcHAuYXBrICAgICAgIyDlvLrliLbljp/nlJ/liIbmnpAKICBhdXRvLXJldmVyc2Uuc2ggLS1lbmdpbmUgYm90aCAtLWRlb2JmIGFwcC54YXBrCkVPRgogIGV4aXQgMAp9Cgpsb2dfaW5mbygpICB7IGVjaG8gLWUgIiR7QkxVRX1b5L+h5oGvXSR7TkN9ICAkKiI7IH0KbG9nX29rKCkgICAgeyBlY2hvIC1lICIke0dSRUVOfVvlrozmiJBdJHtOQ30gICQqIjsgfQpsb2dfd2FybigpICB7IGVjaG8gLWUgIiR7WUVMTE9XfVvmj5DnpLpdJHtOQ30gICQqIjsgfQpsb2dfZXJyb3IoKSB7IGVjaG8gLWUgIiR7UkVEfVvplJnor69dJHtOQ30gJCoiOyB9CmxvZ19mcmFtZSgpIHsgZWNobyAtZSAiJHtDWUFOfVvmoYbmnrZdJHtOQ30gICQqIjsgfQoKIyAtLS0g6Kej5p6Q5Y+C5pWwIC0tLQp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICBjYXNlICIkMSIgaW4KICAgIC1vfC0tb3V0cHV0KSAgIE9VVFBVVF9ESVI9IiQyIjsgc2hpZnQgMiA7OwogICAgLS1lbmdpbmUpICAgICAgRU5HSU5FPSIkMiI7IHNoaWZ0IDIgOzsKICAgIC0tZGVvYmYpICAgICAgIERFT0JGPXRydWU7IHNoaWZ0IDs7CiAgICAtLW5vLXJlcykgICAgICBOT19SRVM9dHJ1ZTsgc2hpZnQgOzsKICAgIC0tYXV0by1pbnN0YWxsKSBBVVRPX0lOU1RBTEw9dHJ1ZTsgc2hpZnQgOzsKICAgIC0tc2VjdXJpdHkpICAgIFNFQ1VSSVRZX0FOQUxZU0lTPXRydWU7IHNoaWZ0IDs7CiAgICAtLWZvcmNlLW5hdGl2ZSkgRk9SQ0VfTkFUSVZFPXRydWU7IHNoaWZ0IDs7CiAgICAtaHwtLWhlbHApICAgICB1c2FnZSA7OwogICAgLSopICAgICAgICAgICAgbG9nX2Vycm9yICLmnKrnn6XpgInpobk6ICQxIjsgdXNhZ2UgOzsKICAgICopICAgICAgICAgICAgIElOUFVUX0ZJTEU9IiQxIjsgc2hpZnQgOzsKICBlc2FjCmRvbmUKCmlmIFtbIC16ICIkSU5QVVRfRklMRSIgXV07IHRoZW4KICBsb2dfZXJyb3IgIuayoee7mUFQS+aWh+S7tiIKICB1c2FnZQpmaQppZiBbWyAhIC1mICIkSU5QVVRfRklMRSIgXV07IHRoZW4KICBsb2dfZXJyb3IgIuaWh+S7tuS4jeWtmOWcqDogJElOUFVUX0ZJTEUiCiAgZXhpdCAxCmZpCgpleHQ9IiR7SU5QVVRfRklMRSMjKi59IgpleHRfbG93ZXI9JChlY2hvICIkZXh0IiB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKQpjYXNlICIkZXh0X2xvd2VyIiBpbgogIGFwa3x4YXBrfGphcnxhYXIpIDs7CiAgKikgbG9nX2Vycm9yICLkuI3mlK/mjIHnmoTmlofku7bnsbvlnos6IC4kZXh0IjsgZXhpdCAxIDs7CmVzYWMKCkJBU0VOQU1FPSQoYmFzZW5hbWUgIiRJTlBVVF9GSUxFIiAiLiRleHRfbG93ZXIiKQpJTlBVVF9GSUxFX0FCUz0kKHJlYWxwYXRoICIkSU5QVVRfRklMRSIpCgppZiBbWyAteiAiJE9VVFBVVF9ESVIiIF1dOyB0aGVuCiAgT1VUUFVUX0RJUj0iJHtCQVNFTkFNRX0tYW5hbHlzaXMtJHtUSU1FU1RBTVB9IgpmaQpta2RpciAtcCAiJE9VVFBVVF9ESVIiCk9VVFBVVF9ESVI9JChyZWFscGF0aCAiJE9VVFBVVF9ESVIiKQoKUkVQT1JUX0ZJTEU9IiRPVVRQVVRfRElSL2FuYWx5c2lzLXJlcG9ydC50eHQiCgojIC0tLSDmoYbmnrbmo4DmtYvlh73mlbAgLS0tCkRFVEVDVEVEX0ZSQU1FV09SSz0idW5rbm93biIKCmRldGVjdF9mcmFtZXdvcmsoKSB7CiAgbG9nX2luZm8gIuato+WcqOajgOa1i+i/meS4qkFQUOaYr+eUqOS7gOS5iOahhuaetuWGmeeahC4uLiIKCiAgbG9jYWwgZmlsZV9saXN0CiAgZmlsZV9saXN0PSQodW56aXAgLWwgIiRJTlBVVF9GSUxFX0FCUyIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKCiAgIyBGbHV0dGVyCiAgaWYgZWNobyAiJGZpbGVfbGlzdCIgfCBncmVwIC1xaUUgJyhmbHV0dGVyXC5kbGx8bGliZmx1dHRlclwuc298bGliZmx1dHRlcl9hcm02NFwuc298Zmx1dHRlcl9hc3NldHMvfEZsdXR0ZXJcLmphcnxsaWJhcHBcLnNvfGtlcm5lbF9ibG9iXC5iaW58aXNvbGF0ZV9zbmFwc2hvdF9kYXRhKSc7IHRoZW4KICAgIERFVEVDVEVEX0ZSQU1FV09SSz0iZmx1dHRlciIKICAgIGxvZ19mcmFtZSAi5qOA5rWL5YiwIEZsdXR0ZXIg5bqU55So77yBIgogICAgIyDmo4DmtYvmnrbmnoQKICAgIGlmIGVjaG8gIiRmaWxlX2xpc3QiIHwgZ3JlcCAtcSAibGliL2FybTY0LXY4YS9saWJhcHAuc28iOyB0aGVuCiAgICAgIGxvZ19mcmFtZSAiICDmnrbmnoQ6IGFybTY0LXY4YSIKICAgIGVsaWYgZWNobyAiJGZpbGVfbGlzdCIgfCBncmVwIC1xICJsaWIvYXJtZWFiaS12N2EvbGliYXBwLnNvIjsgdGhlbgogICAgICBsb2dfZnJhbWUgIiAg5p625p6EOiBhcm1lYWJpLXY3YSIKICAgIGVsaWYgZWNobyAiJGZpbGVfbGlzdCIgfCBncmVwIC1xICJsaWIveDg2XzY0L2xpYmFwcC5zbyI7IHRoZW4KICAgICAgbG9nX2ZyYW1lICIgIOaetuaehDogeDg2XzY0IgogICAgZmkKICAgIHJldHVybiAwCiAgZmkKCiAgIyBSZWFjdCBOYXRpdmUKICBpZiBlY2hvICIkZmlsZV9saXN0IiB8IGdyZXAgLXFpRSAnKGxpYnJlYWN0bmF0aXZlam5pXC5zb3xsaWJoZXJtZXNcLnNvfGluZGV4XC5hbmRyb2lkXC5idW5kbGV8cmVhY3RuYXRpdmUvKSc7IHRoZW4KICAgIERFVEVDVEVEX0ZSQU1FV09SSz0icmVhY3RfbmF0aXZlIgogICAgbG9nX2ZyYW1lICLmo4DmtYvliLAgUmVhY3QgTmF0aXZlIOW6lOeUqO+8gSIKICAgIGlmIGVjaG8gIiRmaWxlX2xpc3QiIHwgZ3JlcCAtcWlFICdsaWJoZXJtZXNcLnNvJzsgdGhlbgogICAgICBsb2dfZnJhbWUgIiAgSlPlvJXmk446IEhlcm1lcyIKICAgIGZpCiAgICByZXR1cm4gMAogIGZpCgogICMgVW5pdHkKICBpZiBlY2hvICIkZmlsZV9saXN0IiB8IGdyZXAgLXFpRSAnKGxpYnVuaXR5XC5zb3xsaWJpbDJjcHBcLnNvfGxpYm1vbm9cLnNvfFVuaXR5UGxheWVyQWN0aXZpdHkpJzsgdGhlbgogICAgREVURUNURURfRlJBTUVXT1JLPSJ1bml0eSIKICAgIGxvZ19mcmFtZSAi5qOA5rWL5YiwIFVuaXR5IOW6lOeUqO+8gSIKICAgIGlmIGVjaG8gIiRmaWxlX2xpc3QiIHwgZ3JlcCAtcWlFICdsaWJpbDJjcHBcLnNvJzsgdGhlbgogICAgICBsb2dfZnJhbWUgIiAg5ZCO56uvOiBJTDJDUFAiCiAgICBlbGlmIGVjaG8gIiRmaWxlX2xpc3QiIHwgZ3JlcCAtcWlFICdsaWJtb25vXC5zbyc7IHRoZW4KICAgICAgbG9nX2ZyYW1lICIgIOWQjuerrzogTW9ubyIKICAgIGZpCiAgICByZXR1cm4gMAogIGZpCgogICMgWGFtYXJpbgogIGlmIGVjaG8gIiRmaWxlX2xpc3QiIHwgZ3JlcCAtcWlFICcobGlibW9ub2Ryb2lkXC5zb3xsaWJtb25vc2dlblwuc298YXNzZW1ibGllcy8uKlwuZGxsKSc7IHRoZW4KICAgIERFVEVDVEVEX0ZSQU1FV09SSz0ieGFtYXJpbiIKICAgIGxvZ19mcmFtZSAi5qOA5rWL5YiwIFhhbWFyaW4g5bqU55So77yBIgogICAgcmV0dXJuIDAKICBmaQoKICAjIENvcmRvdmEgLyBDYXBhY2l0b3IKICBpZiBlY2hvICIkZmlsZV9saXN0IiB8IGdyZXAgLXFpRSAnKGNvcmRvdmFcLmpzfGNhcGFjaXRvci98d3d3L2luZGV4XC5odG1sKSc7IHRoZW4KICAgIERFVEVDVEVEX0ZSQU1FV09SSz0iY29yZG92YSIKICAgIGxvZ19mcmFtZSAi5qOA5rWL5YiwIENvcmRvdmEvQ2FwYWNpdG9yIOW6lOeUqO+8gSIKICAgIHJldHVybiAwCiAgZmkKCiAgIyDljp/nlJ8gQW5kcm9pZAogIERFVEVDVEVEX0ZSQU1FV09SSz0ibmF0aXZlIgogIGxvZ19mcmFtZSAi5qOA5rWL5Yiw5Y6f55SfIEFuZHJvaWQg5bqU55So77yISmF2YS9Lb3RsaW7vvIkiCn0KCiMgLS0tIOWKoOWbuuWjs+ajgOa1iyAtLS0KREVURUNURURfU0hFTEw9IiIKCmRldGVjdF9zaGVsbCgpIHsKICBsb2dfaW5mbyAi5q2j5Zyo5qOA5rWL5piv5ZCm5Yqg5aOzLi4uIgoKICBsb2NhbCBzaGVsbF9zY3JpcHQ9IiR7U0NSSVBUU19ESVJ9L2RldGVjdC1zaGVsbC5zaCIKICBpZiBbWyAhIC1mICIkc2hlbGxfc2NyaXB0IiBdXTsgdGhlbgogICAgbG9nX3dhcm4gIuacquaJvuWIsCBkZXRlY3Qtc2hlbGwuc2jvvIzot7Pov4fliqDlm7rmo4DmtYsiCiAgICByZXR1cm4gMAogIGZpCgogIGxvY2FsIHNoZWxsX291dD0iJE9VVFBVVF9ESVIvc2hlbGwiCiAgbWtkaXIgLXAgIiRzaGVsbF9vdXQiCiAgYmFzaCAiJHNoZWxsX3NjcmlwdCIgIiRJTlBVVF9GSUxFX0FCUyIgLW8gIiRzaGVsbF9vdXQiIDI+JjEgfHwgdHJ1ZQoKICAjIOivu+WPluajgOa1i+aKpeWRigogIGxvY2FsIHNoZWxsX3JlcG9ydD0iJHNoZWxsX291dC9zaGVsbC1hbmFseXNpcy1yZXBvcnQudHh0IgogIGlmIFtbIC1mICIkc2hlbGxfcmVwb3J0IiBdXTsgdGhlbgogICAgIyDmj5Dlj5bmo4DmtYvliLDnmoTlo7Pkv6Hmga8KICAgIERFVEVDVEVEX1NIRUxMPSQoZ3JlcCAtb1AgIl4jIyMg8J+UkiBcS1teXChdKyIgIiRzaGVsbF9yZXBvcnQiIHwgaGVhZCAtMSB8IHNlZCAncy8gKiQvLycgfHwgdHJ1ZSkKICAgIGlmIFtbIC1uICIkREVURUNURURfU0hFTEwiIF1dOyB0aGVuCiAgICAgIGxvZ193YXJuICLmo4DmtYvliLDliqDlm7rlo7M6ICRERVRFQ1RFRF9TSEVMTCIKICAgIGVsc2UKICAgICAgbG9nX29rICLmnKrmo4DmtYvliLDliqDlm7rlo7MiCiAgICBmaQogIGZpCn0KCiMgLS0tIOWIneWni+WMluaKpeWRiiAtLS0KaW5pdF9yZXBvcnQoKSB7CiAgbG9jYWwgZnJhbWV3b3JrX2Rlc2M9IuacquefpSIKICBjYXNlICIkREVURUNURURfRlJBTUVXT1JLIiBpbgogICAgZmx1dHRlcikgICAgICAgZnJhbWV3b3JrX2Rlc2M9IkZsdXR0ZXIgKERhcnQpIiA7OwogICAgcmVhY3RfbmF0aXZlKSAgZnJhbWV3b3JrX2Rlc2M9IlJlYWN0IE5hdGl2ZSAoSmF2YVNjcmlwdCkiIDs7CiAgICB1bml0eSkgICAgICAgICBmcmFtZXdvcmtfZGVzYz0iVW5pdHkgKEMjKSIgOzsKICAgIHhhbWFyaW4pICAgICAgIGZyYW1ld29ya19kZXNjPSJYYW1hcmluIChDIykiIDs7CiAgICBjb3Jkb3ZhKSAgICAgICBmcmFtZXdvcmtfZGVzYz0iQ29yZG92YS9DYXBhY2l0b3IgKEhUTUwvSlMpIiA7OwogICAgbmF0aXZlKSAgICAgICAgZnJhbWV3b3JrX2Rlc2M9IuWOn+eUnyBBbmRyb2lkIChKYXZhL0tvdGxpbikiIDs7CiAgZXNhYwoKICAjIOWKoOWbuuWjs+aPj+i/sAogIGxvY2FsIHNoZWxsX2Rlc2M9IuacquajgOa1i+WIsCIKICBpZiBbWyAtbiAiJERFVEVDVEVEX1NIRUxMIiBdXTsgdGhlbgogICAgc2hlbGxfZGVzYz0i4pqg77iPICR7REVURUNURURfU0hFTEx977yI5bey5Yqg5aOz77yM5bu66K6u5YWI6ISx5aOz77yJIgogIGZpCgogIGNhdCA+ICIkUkVQT1JUX0ZJTEUiIDw8RU9GCiMgQW5kcm9pZCDpgIblkJHlt6XnqIvliIbmnpDmiqXlkYoKCi0gKirnm67moIfmlofku7YqKjogXGAke0JBU0VOQU1FfS4ke2V4dF9sb3dlcn1cYAotICoq5YiG5p6Q5pe26Ze0Kio6ICQoZGF0ZSAnKyVZLSVtLSVkICVIOiVNOiVTJykKLSAqKuajgOa1i+WIsOeahOahhuaetioqOiAke2ZyYW1ld29ya19kZXNjfQotICoq5Yqg5Zu65aOz54q25oCBKio6ICR7c2hlbGxfZGVzY30KLSAqKuWPjee8luivkeW8leaTjioqOiAke0VOR0lORX0KLSAqKuWPjea3t+a3hioqOiAkKFtbICIkREVPQkYiID09IHRydWUgXV0gJiYgZWNobyAi5ZCv55SoIiB8fCBlY2hvICLmnKrlkK/nlKgiKQotICoq5a6J5YWo5YiG5p6QKio6ICQoW1sgIiRTRUNVUklUWV9BTkFMWVNJUyIgPT0gdHJ1ZSBdXSAmJiBlY2hvICLlkK/nlKgiIHx8IGVjaG8gIuacquWQr+eUqCIpCgotLS0KCkVPRgp9CgphcHBlbmRfcmVwb3J0KCkgewogIGVjaG8gIiQxIiA+PiAiJFJFUE9SVF9GSUxFIgp9CgojID09PT09PT09PT09PT09PT09PT09IEZsdXR0ZXIg5LiT55So5rWB56iLID09PT09PT09PT09PT09PT09PT09CnJ1bl9mbHV0dGVyX2FuYWx5c2lzKCkgewogIGxvZ19pbmZvICLliIfmjaLliLAgRmx1dHRlciDkuJPnlKjliIbmnpDmqKHlvI8uLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgMS4gRmx1dHRlciDmoYbmnrbmo4DmtYtcbiIKICBhcHBlbmRfcmVwb3J0ICItIOKchSDnoa7orqTkuLogRmx1dHRlciDlupTnlKjvvIzkvb/nlKjkuJPnlKjliIbmnpDohJrmnKxcblxuIgoKICBsb2NhbCBmbHV0dGVyX3NjcmlwdD0iJHtTQ1JJUFRTX0RJUn0vYW5hbHl6ZS1mbHV0dGVyLnNoIgogIGlmIFtbIC1mICIkZmx1dHRlcl9zY3JpcHQiIF1dOyB0aGVuCiAgICBsb2dfaW5mbyAi6LCD55SoIGFuYWx5emUtZmx1dHRlci5zaC4uLiIKICAgIGxvY2FsIGZsdXR0ZXJfb3V0PSIkT1VUUFVUX0RJUi9mbHV0dGVyIgogICAgbWtkaXIgLXAgIiRmbHV0dGVyX291dCIKICAgIGJhc2ggIiRmbHV0dGVyX3NjcmlwdCIgIiRJTlBVVF9GSUxFX0FCUyIgLW8gIiRmbHV0dGVyX291dCIgLS1hbGwgMj4mMSB8fCB0cnVlCgogICAgIyDmiopGbHV0dGVy5oql5ZGK5YaF5a655ZCI5bm25Yiw5Li75oql5ZGKCiAgICBsb2NhbCBmbHV0dGVyX3JlcG9ydD0iJGZsdXR0ZXJfb3V0L2ZsdXR0ZXItYW5hbHlzaXMtcmVwb3J0LnR4dCIKICAgIGlmIFtbIC1mICIkZmx1dHRlcl9yZXBvcnQiIF1dOyB0aGVuCiAgICAgIGNhdCAiJGZsdXR0ZXJfcmVwb3J0IiA+PiAiJFJFUE9SVF9GSUxFIgogICAgZmkKICAgIGxvZ19vayAiRmx1dHRlciDliIbmnpDlrozmiJAiCiAgZWxzZQogICAgbG9nX3dhcm4gIuayoeaJvuWIsCBhbmFseXplLWZsdXR0ZXIuc2jvvIznlKjln7rnoYDmlrnms5XliIbmnpAiCiAgICBhcHBlbmRfcmVwb3J0ICIjIyAyLiDln7rnoYDliIbmnpDvvIjmnKrmib7liLBGbHV0dGVy5LiT55So6ISa5pys77yJXG4iCgogICAgIyDmiYvliqjmj5Dlj5blrZfnrKbkuLIKICAgIGxvY2FsIGV4dHJhY3RfZGlyPSIkT1VUUFVUX0RJUi9leHRyYWN0ZWQiCiAgICBta2RpciAtcCAiJGV4dHJhY3RfZGlyIgoKICAgIGZvciBwYXR0ZXJuIGluICJsaWIvYXJtNjQtdjhhL2xpYmFwcC5zbyIgImxpYi9hcm1lYWJpLXY3YS9saWJhcHAuc28iICJsaWIveDg2L2xpYmFwcC5zbyI7IGRvCiAgICAgIGlmIHVuemlwIC1sICIkSU5QVVRfRklMRV9BQlMiIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAiJHBhdHRlcm4iOyB0aGVuCiAgICAgICAgdW56aXAgLW8gLWogIiRJTlBVVF9GSUxFX0FCUyIgIiRwYXR0ZXJuIiAtZCAiJGV4dHJhY3RfZGlyIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICAgICAgYnJlYWsKICAgICAgZmkKICAgIGRvbmUKCiAgICBpZiBbWyAtZiAiJGV4dHJhY3RfZGlyL2xpYmFwcC5zbyIgXV0gJiYgY29tbWFuZCAtdiBzdHJpbmdzICY+L2Rldi9udWxsOyB0aGVuCiAgICAgIGxvY2FsIHN0cmluZ3NfZmlsZT0iJE9VVFBVVF9ESVIvZmx1dHRlci1zdHJpbmdzLnR4dCIKICAgICAgc3RyaW5ncyAtbiA2ICIkZXh0cmFjdF9kaXIvbGliYXBwLnNvIiB8IHNvcnQgLXUgPiAiJHN0cmluZ3NfZmlsZSIKICAgICAgbG9jYWwgY291bnQKICAgICAgY291bnQ9JCh3YyAtbCA8ICIkc3RyaW5nc19maWxlIikKICAgICAgYXBwZW5kX3JlcG9ydCAiLSDku44gbGliYXBwLnNvIOaPkOWPluS6hiAkY291bnQg5Liq5a2X56ym5LiyXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIi0g5a2X56ym5Liy5paH5Lu2OiBcYCRzdHJpbmdzX2ZpbGVcYFxuIgoKICAgICAgIyDlv6vpgJ/miavmj49WSVAv5bm/5ZGK5YWz6ZSu6K+NCiAgICAgIGFwcGVuZF9yZXBvcnQgIiMjIDMuIOW/q+mAn+WFs+mUruivjeaJq+aPj1xuIgogICAgICBmb3Iga2V5d29yZCBpbiAidmlwIiAicHJlbWl1bSIgInN1YnNjcmliZSIgImFkbW9iIiAicGFuZ2xlIiAic3BsYXNoX2FkIiAiZm9yY2VfdXBkYXRlIiAiZXhwaXJlIjsgZG8KICAgICAgICBsb2NhbCBoaXRzCiAgICAgICAgaGl0cz0kKGdyZXAgLWljICIka2V5d29yZCIgIiRzdHJpbmdzX2ZpbGUiIDI+L2Rldi9udWxsIHx8IGVjaG8gIjAiKQogICAgICAgIGlmIFtbICIkaGl0cyIgLWd0IDAgXV07IHRoZW4KICAgICAgICAgIGFwcGVuZF9yZXBvcnQgIi0gXGAka2V5d29yZFxgOiDmib7liLAgJGhpdHMg5aSE5Yy56YWNXG4iCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZmkKICBmaQp9CgojID09PT09PT09PT09PT09PT09PT09IFJlYWN0IE5hdGl2ZSDkuJPnlKjmtYHnqIsgPT09PT09PT09PT09PT09PT09PT0KcnVuX3JlYWN0X25hdGl2ZV9hbmFseXNpcygpIHsKICBsb2dfaW5mbyAi5YiH5o2i5YiwIFJlYWN0IE5hdGl2ZSDliIbmnpDmqKHlvI8uLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgMS4gUmVhY3QgTmF0aXZlIOahhuaetuajgOa1i1xuIgogIGFwcGVuZF9yZXBvcnQgIi0g4pyFIOehruiupOS4uiBSZWFjdCBOYXRpdmUg5bqU55SoXG5cbiIKCiAgIyBSTuW6lOeUqOS7jeeEtuWPr+S7peWPjee8luivkUphdmHlo7Pku6PnoIEKICBhcHBlbmRfcmVwb3J0ICIjIyAyLiDlj43nvJbor5FKYXZh5aOz5Luj56CBXG4iCiAgYXBwZW5kX3JlcG9ydCAiUmVhY3QgTmF0aXZl55qESmF2YeWjs+S7o+eggeS7jeeEtuWPr+S7peWPjee8luivkeWIhuaekO+8jOWQjOaXtumcgOimgeaPkOWPlkpTIEJ1bmRsZeOAglxuXG4iCgogIHBoYXNlX2RlY29tcGlsZQoKICAjIOWwneivleaPkOWPlkpTIEJ1bmRsZQogIGxvY2FsIGV4dHJhY3RfZGlyPSIkT1VUUFVUX0RJUi9leHRyYWN0ZWQiCiAgbWtkaXIgLXAgIiRleHRyYWN0X2RpciIKICBpZiB1bnppcCAtbCAiJElOUFVUX0ZJTEVfQUJTIiAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgImluZGV4LmFuZHJvaWQuYnVuZGxlIjsgdGhlbgogICAgdW56aXAgLW8gIiRJTlBVVF9GSUxFX0FCUyIgImluZGV4LmFuZHJvaWQuYnVuZGxlIiAtZCAiJGV4dHJhY3RfZGlyIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICBpZiBbWyAtZiAiJGV4dHJhY3RfZGlyL2luZGV4LmFuZHJvaWQuYnVuZGxlIiBdXTsgdGhlbgogICAgICBsb2NhbCBqc19zaXplCiAgICAgIGpzX3NpemU9JChkdSAtaCAiJGV4dHJhY3RfZGlyL2luZGV4LmFuZHJvaWQuYnVuZGxlIiB8IGN1dCAtZjEpCiAgICAgIGFwcGVuZF9yZXBvcnQgIiMjIDMuIEpTIEJ1bmRsZSDmj5Dlj5ZcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiLSDinIUg5o+Q5Y+W5LqGIGluZGV4LmFuZHJvaWQuYnVuZGxlICgkanNfc2l6ZSlcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiLSDmlofku7bkvY3nva46IFxgJGV4dHJhY3RfZGlyL2luZGV4LmFuZHJvaWQuYnVuZGxlXGBcbiIKCiAgICAgICMg5pCc57SiSlPkuK3nmoRWSVAv5bm/5ZGK5YWz6ZSu6K+NCiAgICAgIGFwcGVuZF9yZXBvcnQgIiMjIDQuIEpTIEJ1bmRsZSDlhbPplK7or43miavmj49cbiIKICAgICAgZm9yIGtleXdvcmQgaW4gImlzUHJlbWl1bSIgImlzVmlwIiAic3Vic2NyaWJlIiAicHVyY2hhc2UiICJhZG1vYiIgInNob3dBZCIgImZvcmNlVXBkYXRlIiAiZXhwaXJlIjsgZG8KICAgICAgICBsb2NhbCBoaXRzCiAgICAgICAgaGl0cz0kKGdyZXAgLWMgIiRrZXl3b3JkIiAiJGV4dHJhY3RfZGlyL2luZGV4LmFuZHJvaWQuYnVuZGxlIiAyPi9kZXYvbnVsbCB8fCBlY2hvICIwIikKICAgICAgICBpZiBbWyAiJGhpdHMiIC1ndCAwIF1dOyB0aGVuCiAgICAgICAgICBhcHBlbmRfcmVwb3J0ICItIFxgJGtleXdvcmRcYDog5om+5YiwICRoaXRzIOWkhFxuIgogICAgICAgIGZpCiAgICAgIGRvbmUKICAgICAgYXBwZW5kX3JlcG9ydCAiXG4jIyMg8J+boO+4jyBNVOeuoeeQhuWZqOS/ruaUueaWueazle+8iOWkp+eZveivneeJiO+8iVxuIgogICAgICBhcHBlbmRfcmVwb3J0ICJSZWFjdCBOYXRpdmXnmoTlpb3lpITmmK9KU+S7o+eggeWPr+S7peeci+aHgu+8gVxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5omT5byAQVBLIOKGkiDmib7liLAgXGBhc3NldHMvaW5kZXguYW5kcm9pZC5idW5kbGVcYFxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIyLiDnlKjmlofmnKznvJbovpHlmajmiZPlvIDov5nkuKpKU+aWh+S7tlxuIgogICAgICBhcHBlbmRfcmVwb3J0ICIzLiDmkJzntKJWSVAv5bm/5ZGK55u45YWz5YWz6ZSu6K+N77yI5q+U5aaCIFxgaXNQcmVtaXVtXGDjgIFcYHNob3dBZFxg77yJXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjQuIOebtOaOpeaUuUpT5Luj56CB77ya5oqKIFxgcmV0dXJuIGZhbHNlXGAg5pS55oiQIFxgcmV0dXJuIHRydWVcYO+8jOaKiuW5v+WRiuWHveaVsOS9k+a4heepulxuIgogICAgICBhcHBlbmRfcmVwb3J0ICI1LiDkv53lrZgg4oaSIOetvuWQjSDihpIg5a6J6KOFXG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIjYuIOavlOaUuXNtYWxp566A5Y2V5aSa5LqG77yBXG5cbiIKICAgIGZpCiAgZmkKCiAgaWYgW1sgIiRTRUNVUklUWV9BTkFMWVNJUyIgPT0gdHJ1ZSBdXTsgdGhlbgogICAgcGhhc2Vfc2VjdXJpdHlfYW5hbHlzaXMKICBmaQp9CgojID09PT09PT09PT09PT09PT09PT09IFVuaXR5IOS4k+eUqOa1geeoiyA9PT09PT09PT09PT09PT09PT09PQpydW5fdW5pdHlfYW5hbHlzaXMoKSB7CiAgbG9nX2luZm8gIuWIh+aNouWIsCBVbml0eSDliIbmnpDmqKHlvI8uLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgMS4gVW5pdHkg5qGG5p625qOA5rWLXG4iCiAgYXBwZW5kX3JlcG9ydCAiLSDinIUg56Gu6K6k5Li6IFVuaXR5IOW6lOeUqFxuXG4iCgogIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5ug77iPIE1U566h55CG5Zmo5L+u5pS55pa55rOV77yI5aSn55m96K+d54mI77yJXG4iCiAgYXBwZW5kX3JlcG9ydCAiVW5pdHnmuLjmiI/nmoTliIbmnpDmlrnms5Xot5/mma7pgJpBUFDlrozlhajkuI3kuIDmoLfvvJpcblxuIgogIGFwcGVuZF9yZXBvcnQgIioq5pa55rOV5LiA77ya5pS5Z2xvYmFsZ2FtZW1hbmFnZXJz77yI566A5Y2V77yJKipcbiIKICBhcHBlbmRfcmVwb3J0ICIxLiBNVOeuoeeQhuWZqCDihpIg5omT5byAQVBLIOKGkiDmib7liLAgXGBhc3NldHMvYmluL0RhdGEvZ2xvYmFsZ2FtZW1hbmFnZXJzXGBcbiIKICBhcHBlbmRfcmVwb3J0ICIyLiDnlKjljYHlha3ov5vliLbnvJbovpHlmajmiZPlvIBcbiIKICBhcHBlbmRfcmVwb3J0ICIzLiDmkJzntKLlub/lkYovVklQ55u45YWz5a2X56ym5LiyXG4iCiAgYXBwZW5kX3JlcG9ydCAiNC4g55u05o6l5pS55a2X56ym5Liy5YaF5a6577yI5L+d5oyB6ZW/5bqm5LiA6Ie077yJXG4iCiAgYXBwZW5kX3JlcG9ydCAiNS4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuXG4iCiAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuozvvJrmlLlpbDJjcHDvvIjov5vpmLbvvIkqKlxuIgogIGFwcGVuZF9yZXBvcnQgIjEuIOWmguaenOaYr0lMMkNQUOWQjuerr++8jOmcgOimgeeUqCBJbDJDcHBEdW1wZXIg5o+Q5Y+W5Ye95pWw5ZCNXG4iCiAgYXBwZW5kX3JlcG9ydCAiMi4g6YWN5ZCIIGRuU3B5IOaIliBJREEg5YiG5p6QXG4iCiAgYXBwZW5kX3JlcG9ydCAiMy4g6L+Z5q+U6L6D5aSN5p2C77yM5bu66K6u5pCc57SiIElsMkNwcER1bXBlciDmlZnnqItcblxuIgogIGFwcGVuZF9yZXBvcnQgIioq5pa55rOV5LiJ77ya5pS5TW9ub++8iOWmguaenOeUqOeahOaYr01vbm/lkI7nq6/vvIkqKlxuIgogIGFwcGVuZF9yZXBvcnQgIjEuIE1U566h55CG5ZmoIOKGkiDmib7liLAgXGBhc3NldHMvYmluL0RhdGEvTWFuYWdlZC9Bc3NlbWJseS1DU2hhcnAuZGxsXGBcbiIKICBhcHBlbmRfcmVwb3J0ICIyLiDnlKggZG5TcHkg5omT5byA6L+Z5LiqRExMXG4iCiAgYXBwZW5kX3JlcG9ydCAiMy4g5bCx5YOP55yLQyPmupDnoIHkuIDmoLfvvIzmib7liLBWSVAv5bm/5ZGK55u45YWz5pa55rOVXG4iCiAgYXBwZW5kX3JlcG9ydCAiNC4g55u05o6l5pS56L+U5Zue5YC85oiW5pa55rOV5L2TXG4iCiAgYXBwZW5kX3JlcG9ydCAiNS4g5L+d5a2YIOKGkiDnrb7lkI0g4oaSIOWuieijhVxuIgogIGFwcGVuZF9yZXBvcnQgIjYuIE1vbm/lkI7nq6/nmoRVbml0eeaUuei1t+adpeacgOaWueS+v++8gVxuXG4iCgogICMg5LuN54S25Y+N57yW6K+RSmF2YeWjswogIHBoYXNlX2RlY29tcGlsZQogIGlmIFtbICIkU0VDVVJJVFlfQU5BTFlTSVMiID09IHRydWUgXV07IHRoZW4KICAgIHBoYXNlX3NlY3VyaXR5X2FuYWx5c2lzCiAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDljp/nlJ8gQW5kcm9pZCDmtYHnqIsgPT09PT09PT09PT09PT09PT09PT0KcnVuX25hdGl2ZV9hbmFseXNpcygpIHsKICBsb2dfaW5mbyAi5L2/55So5Y6f55SfIEFuZHJvaWQg5YiG5p6Q5qih5byPLi4uIgogIGFwcGVuZF9yZXBvcnQgIiMjIDEuIOWOn+eUnyBBbmRyb2lkIOajgOa1i1xuIgogIGFwcGVuZF9yZXBvcnQgIi0g4pyFIOWOn+eUnyBBbmRyb2lkIOW6lOeUqO+8iEphdmEvS290bGlu77yJ77yM5L2/55So5qCH5YeG5Y+N57yW6K+R5YiG5p6QXG5cbiIKCiAgcGhhc2VfZGVjb21waWxlCiAgcGhhc2VfZXh0cmFjdF9hcGlzCiAgaWYgW1sgIiRTRUNVUklUWV9BTkFMWVNJUyIgPT0gdHJ1ZSBdXTsgdGhlbgogICAgcGhhc2Vfc2VjdXJpdHlfYW5hbHlzaXMKICBmaQp9CgojID09PT09PT09PT09PT09PT09PT09IOmYtuauteWHveaVsO+8iOWOn+eUn+a1geeoi+eUqO+8iSA9PT09PT09PT09PT09PT09PT09PQpwaGFzZV9jaGVja19kZXBzKCkgewogIGxvZ19pbmZvICLmo4Dmn6Xkvp3otZYuLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgMC4g5L6d6LWW5qOA5p+lXG4iCgogIGxvY2FsIGNoZWNrX3NjcmlwdD0iJHtTQ1JJUFRTX0RJUn0vY2hlY2stZGVwcy5zaCIKICBpZiBbWyAhIC1mICIkY2hlY2tfc2NyaXB0IiBdXTsgdGhlbgogICAgYXBwZW5kX3JlcG9ydCAiLSDot7Pov4fkvp3otZbmo4Dmn6VcbiIKICAgIHJldHVybiAwCiAgZmkKCiAgbG9jYWwgY2hlY2tfb3V0cHV0CiAgbG9jYWwgY2hlY2tfc3RhdHVzPTAKICBjaGVja19vdXRwdXQ9JChiYXNoICIkY2hlY2tfc2NyaXB0IiAyPiYxKSB8fCBjaGVja19zdGF0dXM9JD8KCiAgbG9jYWwgcmVxdWlyZWRfbWlzc2luZz0oKQogIHdoaWxlIElGUz0gcmVhZCAtciBsaW5lOyBkbwogICAgaWYgW1sgIiRsaW5lIiA9PSBJTlNUQUxMX1JFUVVJUkVEOiogXV07IHRoZW4KICAgICAgcmVxdWlyZWRfbWlzc2luZys9KCIke2xpbmUjSU5TVEFMTF9SRVFVSVJFRDp9IikKICAgIGZpCiAgZG9uZSA8PDwgIiRjaGVja19vdXRwdXQiCgogIGFwcGVuZF9yZXBvcnQgIlxgXGBcYCIKICBhcHBlbmRfcmVwb3J0ICIkY2hlY2tfb3V0cHV0IgogIGFwcGVuZF9yZXBvcnQgIlxgXGBcYFxuIgoKICBpZiBbWyAkY2hlY2tfc3RhdHVzIC1lcSAwIF1dOyB0aGVuCiAgICBsb2dfb2sgIuS+nei1lk9LIgogICAgcmV0dXJuIDAKICBmaQoKICBpZiBbWyAkeyNyZXF1aXJlZF9taXNzaW5nW0BdfSAtZ3QgMCBdXTsgdGhlbgogICAgaWYgW1sgIiRBVVRPX0lOU1RBTEwiID09IHRydWUgXV07IHRoZW4KICAgICAgbG9jYWwgaW5zdGFsbF9zY3JpcHQ9IiR7U0NSSVBUU19ESVJ9L2luc3RhbGwtZGVwLnNoIgogICAgICBpZiBbWyAtZiAiJGluc3RhbGxfc2NyaXB0IiBdXTsgdGhlbgogICAgICAgIGZvciBkZXAgaW4gIiR7cmVxdWlyZWRfbWlzc2luZ1tAXX0iOyBkbwogICAgICAgICAgbG9nX2luZm8gIuato+WcqOWuieijhSAkZGVwIC4uLiIKICAgICAgICAgIGlmIGJhc2ggIiRpbnN0YWxsX3NjcmlwdCIgIiRkZXAiOyB0aGVuCiAgICAgICAgICAgIGxvZ19vayAiJGRlcCDlronoo4XmiJDlip8iCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGxvZ19lcnJvciAiJGRlcCDlronoo4XlpLHotKUiCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgZmkKICAgICAgICBkb25lCiAgICAgICAgcGhhc2VfY2hlY2tfZGVwcwogICAgICBlbHNlCiAgICAgICAgbG9nX2Vycm9yICLnvLrlsJHkvp3otZbvvIzor7fnlKggLS1hdXRvLWluc3RhbGwiCiAgICAgICAgZXhpdCAxCiAgICAgIGZpCiAgICBlbHNlCiAgICAgIGxvZ19lcnJvciAi57y65bCR5L6d6LWWOiAke3JlcXVpcmVkX21pc3NpbmdbKl1977yM6K+355SoIC0tYXV0by1pbnN0YWxsIOiHquWKqOWuieijhSIKICAgICAgZXhpdCAxCiAgICBmaQogIGZpCn0KCnBoYXNlX2RlY29tcGlsZSgpIHsKICBsb2dfaW5mbyAi5Y+N57yW6K+R5LitLi4uIgogIGFwcGVuZF9yZXBvcnQgIiMjIDIuIOWPjee8luivkVxuIgoKICBsb2NhbCBkZWNvbXBpbGVfc2NyaXB0PSIke1NDUklQVFNfRElSfS9kZWNvbXBpbGUuc2giCiAgaWYgW1sgISAtZiAiJGRlY29tcGlsZV9zY3JpcHQiIF1dOyB0aGVuCiAgICBsb2dfZXJyb3IgIuacquaJvuWIsCBkZWNvbXBpbGUuc2giCiAgICBleGl0IDEKICBmaQoKICBsb2NhbCBkZWNvbXBpbGVfb3V0PSIkT1VUUFVUX0RJUi9kZWNvbXBpbGVkIgogIG1rZGlyIC1wICIkZGVjb21waWxlX291dCIKCiAgbG9jYWwgYXJncz0oKQogIGFyZ3MrPSgiLS1lbmdpbmUiICIkRU5HSU5FIikKICBbWyAiJERFT0JGIiA9PSB0cnVlIF1dICYmIGFyZ3MrPSgiLS1kZW9iZiIpCiAgW1sgIiROT19SRVMiID09IHRydWUgXV0gJiYgYXJncys9KCItLW5vLXJlcyIpCiAgYXJncys9KCItbyIgIiRkZWNvbXBpbGVfb3V0IikKICBhcmdzKz0oIiRJTlBVVF9GSUxFX0FCUyIpCgogIGxvY2FsIGRlY29tcGlsZV9vdXRwdXQKICBsb2NhbCBkZWNvbXBpbGVfc3RhdHVzPTAKICBkZWNvbXBpbGVfb3V0cHV0PSQoYmFzaCAiJGRlY29tcGlsZV9zY3JpcHQiICIke2FyZ3NbQF19IiAyPiYxKSB8fCBkZWNvbXBpbGVfc3RhdHVzPSQ/CgogIGFwcGVuZF9yZXBvcnQgIiMjIyDlj43nvJbor5HovpPlh7rmkZjopoFcbiIKICBhcHBlbmRfcmVwb3J0ICJcYFxgXGAiCiAgZWNobyAiJGRlY29tcGlsZV9vdXRwdXQiIHwgZ3JlcCAtRSAnKFJ1bm5pbmc6fG91dHB1dDp8SmF2YSBmaWxlc3xXYXJuaW5nOnxFcnJvcjp8PT09fENvbXBhcmlzb24pJyA+PiAiJFJFUE9SVF9GSUxFIiB8fCB0cnVlCiAgYXBwZW5kX3JlcG9ydCAiXGBcYFxgXG4iCgogIGlmIFtbICRkZWNvbXBpbGVfc3RhdHVzIC1uZSAwICYmICRkZWNvbXBpbGVfc3RhdHVzIC1uZSAyIF1dOyB0aGVuCiAgICBsb2dfZXJyb3IgIuWPjee8luivkeWksei0pSIKICAgIGFwcGVuZF9yZXBvcnQgIi0g4p2MIOWPjee8luivkeWksei0pVxuIgogICAgZXhpdCAxCiAgZmkKCiAgbG9jYWwgc291cmNlc19kaXJzPSgpCiAgaWYgW1sgIiRFTkdJTkUiID09ICJib3RoIiBdXTsgdGhlbgogICAgW1sgLWQgIiRkZWNvbXBpbGVfb3V0L2phZHgvc291cmNlcyIgXV0gJiYgc291cmNlc19kaXJzKz0oIiRkZWNvbXBpbGVfb3V0L2phZHgvc291cmNlcyIpCiAgICBbWyAtZCAiJGRlY29tcGlsZV9vdXQvZmVybmZsb3dlci9zb3VyY2VzIiBdXSAmJiBzb3VyY2VzX2RpcnMrPSgiJGRlY29tcGlsZV9vdXQvZmVybmZsb3dlci9zb3VyY2VzIikKICBlbHNlCiAgICBbWyAtZCAiJGRlY29tcGlsZV9vdXQvc291cmNlcyIgXV0gJiYgc291cmNlc19kaXJzKz0oIiRkZWNvbXBpbGVfb3V0L3NvdXJjZXMiKQogIGZpCgogIGlmIFtbICR7I3NvdXJjZXNfZGlyc1tAXX0gLWVxIDAgXV07IHRoZW4KICAgIG1hcGZpbGUgLXQgc291cmNlc19kaXJzIDwgPChmaW5kICIkZGVjb21waWxlX291dCIgLXR5cGUgZCAtbmFtZSAic291cmNlcyIgMj4vZGV2L251bGwpCiAgZmkKCiAgaWYgW1sgJHsjc291cmNlc19kaXJzW0BdfSAtZXEgMCBdXTsgdGhlbgogICAgbG9nX2Vycm9yICLmsqHmib7liLDmupDnoIHnm67lvZUiCiAgICBleGl0IDEKICBmaQoKICBsb2NhbCB0b3RhbF9qYXZhPTAKICBmb3Igc3JjX2RpciBpbiAiJHtzb3VyY2VzX2RpcnNbQF19IjsgZG8KICAgIGxvY2FsIGNvdW50CiAgICBjb3VudD0kKGZpbmQgIiRzcmNfZGlyIiAtbmFtZSAiKi5qYXZhIiB8IHdjIC1sKQogICAgdG90YWxfamF2YT0kKCh0b3RhbF9qYXZhICsgY291bnQpKQogICAgYXBwZW5kX3JlcG9ydCAiLSDwn5OBIFxgJChlY2hvICIkc3JjX2RpciIgfCBzZWQgInN8JE9VVFBVVF9ESVIvfHwiKVxgIOKAlCAkY291bnQg5Liq5paH5Lu2XG4iCiAgZG9uZQogIGxvZ19vayAi5Y+N57yW6K+R5a6M5oiQ77yMJHRvdGFsX2phdmEg5Liq5paH5Lu2IgogIGFwcGVuZF9yZXBvcnQgIlxuKirmgLvorqEqKjogJHRvdGFsX2phdmEg5Liq5paH5Lu2XG4iCiAgcHJpbnRmICclc1xuJyAiJHtzb3VyY2VzX2RpcnNbQF19IiA+ICIkT1VUUFVUX0RJUi8uc291cmNlc19kaXJzIgp9CgpwaGFzZV9leHRyYWN0X2FwaXMoKSB7CiAgbG9nX2luZm8gIuaPkOWPlkFQSS4uLiIKICBhcHBlbmRfcmVwb3J0ICIjIyAzLiBBUEkg5o+Q5Y+WXG4iCgogIGxvY2FsIGZpbmRfc2NyaXB0PSIke1NDUklQVFNfRElSfS9maW5kLWFwaS1jYWxscy5zaCIKICBpZiBbWyAhIC1mICIkZmluZF9zY3JpcHQiIF1dIHx8IFtbICEgLWYgIiRPVVRQVVRfRElSLy5zb3VyY2VzX2RpcnMiIF1dOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICItIOi3s+i/h1xuIgogICAgcmV0dXJuIDAKICBmaQoKICBtYXBmaWxlIC10IHNvdXJjZXNfZGlycyA8ICIkT1VUUFVUX0RJUi8uc291cmNlc19kaXJzIgogIGxvY2FsIGFsbF9hcGlfb3V0cHV0PSIkT1VUUFVUX0RJUi9hcGktcmF3LnR4dCIKICA6ID4gIiRhbGxfYXBpX291dHB1dCIKCiAgZm9yIHNyY19kaXIgaW4gIiR7c291cmNlc19kaXJzW0BdfSI7IGRvCiAgICBbWyAhIC1kICIkc3JjX2RpciIgXV0gJiYgY29udGludWUKICAgIGxvY2FsIGFwaV9vdXRwdXQKICAgIGFwaV9vdXRwdXQ9JChiYXNoICIkZmluZF9zY3JpcHQiICIkc3JjX2RpciIgLS1hbGwgMj4mMSkgfHwgdHJ1ZQogICAgZWNobyAiJGFwaV9vdXRwdXQiID4+ICIkYWxsX2FwaV9vdXRwdXQiCiAgZG9uZQoKICBsb2NhbCBzZWN0aW9ucz0oCiAgICAiUmV0cm9maXQgQW5ub3RhdGlvbnMiICJSZXRyb2ZpdCBIZWFkZXJzICYgUGFyYW1ldGVycyIgIlJldHJvZml0IEJhc2UgVVJMIgogICAgIk9rSHR0cCBSZXF1ZXN0IEJ1aWxkaW5nIiAiT2tIdHRwIFVSTCBDb25zdHJ1Y3Rpb24iICJWb2xsZXkgUmVxdWVzdHMiCiAgICAiSGFyZGNvZGVkIFVSTHMgKGh0dHA6Ly8gYW5kIGh0dHBzOi8vKSIgIkh0dHBVUkxDb25uZWN0aW9uIiAiV2ViVmlldyBVUkxzIgogICAgIkF1dGhlbnRpY2F0aW9uICYgQVBJIEtleXMiICJCYXNlIFVSTHMgYW5kIENvbnN0YW50cyIKICApCgogIGxvY2FsIGhhc19yZXN1bHRzPWZhbHNlCiAgZm9yIHNlY3Rpb24gaW4gIiR7c2VjdGlvbnNbQF19IjsgZG8KICAgIGxvY2FsIHNlY3Rpb25fcmVzdWx0cwogICAgc2VjdGlvbl9yZXN1bHRzPSQoYXdrIC12IHNlYz0iPT09PSAkc2VjdGlvbiA9PT09IiAnJDAgPT0gc2VjIHsgZm91bmQ9MTsgbmV4dCB9IGZvdW5kICYmIC9ePT09PSAvIHsgZXhpdCB9IGZvdW5kIHsgcHJpbnQgfScgIiRhbGxfYXBpX291dHB1dCIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKICAgIGlmIFtbIC1uICIkc2VjdGlvbl9yZXN1bHRzIiBdXTsgdGhlbgogICAgICBoYXNfcmVzdWx0cz10cnVlCiAgICAgIGFwcGVuZF9yZXBvcnQgIiMjIyAkc2VjdGlvblxuIgogICAgICBhcHBlbmRfcmVwb3J0ICJcYFxgXGAiCiAgICAgIGFwcGVuZF9yZXBvcnQgIiRzZWN0aW9uX3Jlc3VsdHMiCiAgICAgIGFwcGVuZF9yZXBvcnQgIlxgXGBcYFxuIgogICAgZmkKICBkb25lCgogIFtbICIkaGFzX3Jlc3VsdHMiID09IGZhbHNlIF1dICYmIGFwcGVuZF9yZXBvcnQgIi0g5pyq5qOA5rWL5YiwQVBJ6LCD55SoXG4iCiAgbG9nX29rICJBUEnmj5Dlj5blrozmiJAiCn0KCnBoYXNlX3NlY3VyaXR5X2FuYWx5c2lzKCkgewogIGxvZ19pbmZvICLlronlhajliIbmnpAuLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgNC4g5a6J5YWo5YiG5p6QXG4iCgogIGxvY2FsIHNlY19zY3JpcHQ9IiR7U0NSSVBUU19ESVJ9L2ZpbmQtc2VjdXJpdHktcGF0dGVybnMuc2giCiAgaWYgW1sgISAtZiAiJHNlY19zY3JpcHQiIF1dIHx8IFtbICEgLWYgIiRPVVRQVVRfRElSLy5zb3VyY2VzX2RpcnMiIF1dOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICItIOi3s+i/h1xuIgogICAgcmV0dXJuIDAKICBmaQoKICBtYXBmaWxlIC10IHNvdXJjZXNfZGlycyA8ICIkT1VUUFVUX0RJUi8uc291cmNlc19kaXJzIgogIGxvY2FsIGFsbF9zZWNfb3V0cHV0PSIkT1VUUFVUX0RJUi9zZWN1cml0eS1yYXcudHh0IgogIDogPiAiJGFsbF9zZWNfb3V0cHV0IgoKICBmb3Igc3JjX2RpciBpbiAiJHtzb3VyY2VzX2RpcnNbQF19IjsgZG8KICAgIFtbICEgLWQgIiRzcmNfZGlyIiBdXSAmJiBjb250aW51ZQogICAgbG9jYWwgc2VjX291dHB1dAogICAgc2VjX291dHB1dD0kKGJhc2ggIiRzZWNfc2NyaXB0IiAiJHNyY19kaXIiIC0tYWxsIDI+JjEpIHx8IHRydWUKICAgIGVjaG8gIiRzZWNfb3V0cHV0IiA+PiAiJGFsbF9zZWNfb3V0cHV0IgogIGRvbmUKCiAgIyDmiorlrozmlbTnmoTlronlhajliIbmnpDovpPlh7rvvIjljIXlkKtNVOeuoeeQhuWZqOaVmeeoi++8ieWGmeWFpeaKpeWRigogIGFwcGVuZF9yZXBvcnQgIlxgXGBcYCIKICBjYXQgIiRhbGxfc2VjX291dHB1dCIgPj4gIiRSRVBPUlRfRklMRSIKICBhcHBlbmRfcmVwb3J0ICJcYFxgXGBcbiIKICBsb2dfb2sgIuWuieWFqOWIhuaekOWujOaIkCIKfQoKcGhhc2VfZ2VuZXJhdGVfcmVwb3J0KCkgewogIGFwcGVuZF9yZXBvcnQgIiMjIDUuIOWIhuaekOWujOaIkFxuIgogIGFwcGVuZF9yZXBvcnQgIi0g5pe26Ze0OiAkKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpXG4iCiAgYXBwZW5kX3JlcG9ydCAiLSDovpPlh7rnm67lvZU6IFxgJE9VVFBVVF9ESVJcYFxuIgogIGxvZ19vayAi5oql5ZGK5bey55Sf5oiQOiAkUkVQT1JUX0ZJTEUiCn0KCiMgLS0tIOS4u+a1geeoiyAtLS0KbWFpbigpIHsKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogIGVjaG8gIiBBbmRyb2lkIOWFqOiHquWKqOmAhuWQkeW3peeoi+a1geawtOe6v++8iOaZuuiDveeJiO+8iSIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogIGVjaG8gIiIKICBsb2dfaW5mbyAi55uu5qCHOiAkSU5QVVRfRklMRV9BQlMiCiAgbG9nX2luZm8gIui+k+WHujogJE9VVFBVVF9ESVIiCiAgZWNobyAiIgoKICAjIOahhuaetuajgOa1iwogIGlmIFtbICIkRk9SQ0VfTkFUSVZFIiAhPSB0cnVlIF1dOyB0aGVuCiAgICBkZXRlY3RfZnJhbWV3b3JrCiAgZWxzZQogICAgREVURUNURURfRlJBTUVXT1JLPSJuYXRpdmUiCiAgICBsb2dfZnJhbWUgIuW8uuWItuS9v+eUqOWOn+eUn+WIhuaekOaooeW8jyIKICBmaQoKICAjIOWKoOWbuuWjs+ajgOa1i++8iOWcqOahhuaetuajgOa1i+S5i+WQjuOAgeaKpeWRiuWIneWni+WMluS5i+WJje+8iQogIGRldGVjdF9zaGVsbAoKICBlY2hvICIiCgogIGluaXRfcmVwb3J0CgogICMg5qC55o2u5qGG5p626LWw5LiN5ZCM5rWB56iLCiAgY2FzZSAiJERFVEVDVEVEX0ZSQU1FV09SSyIgaW4KICAgIGZsdXR0ZXIpCiAgICAgIHJ1bl9mbHV0dGVyX2FuYWx5c2lzCiAgICAgIDs7CiAgICByZWFjdF9uYXRpdmUpCiAgICAgIHBoYXNlX2NoZWNrX2RlcHMKICAgICAgcnVuX3JlYWN0X25hdGl2ZV9hbmFseXNpcwogICAgICA7OwogICAgdW5pdHkpCiAgICAgIHBoYXNlX2NoZWNrX2RlcHMKICAgICAgcnVuX3VuaXR5X2FuYWx5c2lzCiAgICAgIDs7CiAgICB4YW1hcmlufGNvcmRvdmEpCiAgICAgIHBoYXNlX2NoZWNrX2RlcHMKICAgICAgbG9nX3dhcm4gIiRERVRFQ1RFRF9GUkFNRVdPUksg5qGG5p625L2/55So5Y6f55Sf5YiG5p6Q5qih5byP77yI5Y+N57yW6K+R5aOz5Luj56CB77yJIgogICAgICBydW5fbmF0aXZlX2FuYWx5c2lzCiAgICAgIDs7CiAgICBuYXRpdmV8KikKICAgICAgcGhhc2VfY2hlY2tfZGVwcwogICAgICBydW5fbmF0aXZlX2FuYWx5c2lzCiAgICAgIDs7CiAgZXNhYwoKICAjIC0tLSDpmLbmrrU6IOiHquWKqOeUn+aIkEZyaWRhIEhvb2vohJrmnKwgLS0tCiAgcGhhc2VfZ2VuZXJhdGVfZnJpZGEKCiAgcGhhc2VfZ2VuZXJhdGVfcmVwb3J0CgogIGVjaG8gIiIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogIGxvZ19vayAi5YiG5p6Q5a6M5oiQ77yBIgogIGVjaG8gIiIKICBlY2hvICIgIOajgOa1i+ahhuaetjogJERFVEVDVEVEX0ZSQU1FV09SSyIKICBlY2hvICIgIOi+k+WHuuebruW9lTogJE9VVFBVVF9ESVIiCiAgZWNobyAiICDmiqXlkYrmlofku7Y6ICRSRVBPUlRfRklMRSIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Igp9CgojID09PT09PT09PT09PT09PT09PT09IOiHquWKqOeUn+aIkEZyaWRhIEhvb2vohJrmnKwgPT09PT09PT09PT09PT09PT09PT0KcGhhc2VfZ2VuZXJhdGVfZnJpZGEoKSB7CiAgbG9nX2luZm8gIuato+WcqOiHquWKqOeUn+aIkEZyaWRhIEhvb2vohJrmnKwuLi4iCgogIGxvY2FsIGZyaWRhX3NjcmlwdD0iJHtTQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtZnJpZGEtc2NyaXB0cy5zaCIKICBpZiBbWyAhIC1mICIkZnJpZGFfc2NyaXB0IiBdXTsgdGhlbgogICAgbG9nX3dhcm4gIuayoeaJvuWIsCBnZW5lcmF0ZS1mcmlkYS1zY3JpcHRzLnNo77yM6Lez6L+HRnJpZGHohJrmnKznlJ/miJAiCiAgICByZXR1cm4gMAogIGZpCgogICMg5LuOQW5kcm9pZE1hbmlmZXN0LnhtbOaPkOWPluWMheWQjQogIGxvY2FsIHBrZ19uYW1lPSIiCiAgbG9jYWwgbWFuaWZlc3QKICBtYW5pZmVzdD0kKGZpbmQgIiRPVVRQVVRfRElSIiAtbmFtZSAiQW5kcm9pZE1hbmlmZXN0LnhtbCIgLXR5cGUgZiAyPi9kZXYvbnVsbCB8IGhlYWQgLTEpCiAgaWYgW1sgLW4gIiRtYW5pZmVzdCIgXV07IHRoZW4KICAgIHBrZ19uYW1lPSQoZ3JlcCAtb1AgJ3BhY2thZ2U9IlteIl0rIicgIiRtYW5pZmVzdCIgfCBoZWFkIC0xIHwgc2VkICdzL3BhY2thZ2U9Ii8vO3MvIi8vJyB8fCB0cnVlKQogIGZpCgogICMg5aaC5p6cbWFuaWZlc3TmsqHmib7liLDvvIzlsJ3or5Xku45BUEvmlofku7blkI3mjqjmlq0KICBpZiBbWyAteiAiJHBrZ19uYW1lIiBdXTsgdGhlbgogICAgcGtnX25hbWU9ImNvbS5leGFtcGxlLmFwcCIKICAgIGxvZ193YXJuICLml6Dms5Xoh6rliqjojrflj5bljIXlkI3vvIxGcmlkYeiEmuacrOWwhuS9v+eUqOWNoOS9jeespjogJHBrZ19uYW1lIgogICAgbG9nX3dhcm4gIuivt+aJi+WKqOS/ruaUueeUn+aIkOeahOiEmuacrOS4reeahOWMheWQjSIKICBmaQoKICBsb2NhbCBmcmlkYV9vdXQ9IiRPVVRQVVRfRElSL2ZyaWRhLXNjcmlwdHMiCiAgbWtkaXIgLXAgIiRmcmlkYV9vdXQiCgogIGxvZ19pbmZvICLnlJ/miJBGcmlkYeiEmuacrO+8jOWMheWQjTogJHBrZ19uYW1lIgoKICBiYXNoICIkZnJpZGFfc2NyaXB0IiBcCiAgICAtLWZyYW1ld29yayAiJERFVEVDVEVEX0ZSQU1FV09SSyIgXAogICAgLS1wYWNrYWdlICIkcGtnX25hbWUiIFwKICAgIC0tb3V0cHV0ICIkZnJpZGFfb3V0IiBcCiAgICAtLWFsbCAyPiYxIHx8IHRydWUKCiAgaWYgW1sgLWQgIiRmcmlkYV9vdXQiICYmICQoZmluZCAiJGZyaWRhX291dCIgLXR5cGUgZiB8IHdjIC1sKSAtZ3QgMCBdXTsgdGhlbgogICAgbG9nX29rICJGcmlkYSBIb29r6ISa5pys5bey55Sf5oiQOiAkZnJpZGFfb3V0IgogICAgYXBwZW5kX3JlcG9ydCAiIyMgNi4gRnJpZGEgSG9vayDohJrmnKxcbiIKICAgIGFwcGVuZF9yZXBvcnQgIi0g4pyFIOW3suiHquWKqOeUn+aIkEZyaWRhIEhvb2vohJrmnKxcbiIKICAgIGFwcGVuZF9yZXBvcnQgIi0g6ISa5pys55uu5b2VOiBcYCRmcmlkYV9vdXRcYFxuIgogICAgYXBwZW5kX3JlcG9ydCAiLSDkvb/nlKjmlrnms5U6XG4iCiAgICBhcHBlbmRfcmVwb3J0ICIgIFxgXGBcYGJhc2hcbiIKICAgIGFwcGVuZF9yZXBvcnQgIiAgIyDlkK/liqhBUFDlubbms6jlhaVIb29rXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIgIGZyaWRhIC1VIC1mICRwa2dfbmFtZSAtbCAkZnJpZGFfb3V0L2hvb2tfdmlwXyR7cGtnX25hbWUvLy4vX30uanNcbiIKICAgIGFwcGVuZF9yZXBvcnQgIiAgXGBcYFxgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICItIOivpue7huivtOaYjuivt+afpeecizogJGZyaWRhX291dC/kvb/nlKjor7TmmI5f5aSn55m96K+d54mILnR4dFxuXG4iCiAgZWxzZQogICAgbG9nX3dhcm4gIkZyaWRh6ISa5pys55Sf5oiQ5aSx6LSl5oiW5rKh5pyJ6L6T5Ye6IgogIGZpCn0KCm1haW4gIiRAIgo=
B64EOF_auto-reverse.sh
chmod +x "$DECODE_DIR/auto-reverse.sh" 2>/dev/null

echo "恢复: backup.sh ..."
base64 -d << 'B64EOF_backup.sh' > "$DECODE_DIR/backup.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGJhY2t1cC5zaCDigJQg6Ieq5Yqo5aSH5Lu95omA5pyJ6YCG5ZCR5bel56iL5Lqn54mpCiMg55So5rOVOiBiYXNoIGJhY2t1cC5zaCBb5aSH5Lu955uu5b2V5ZCNXQpzZXQgLWV1byBwaXBlZmFpbAoKU0NSSVBUX0RJUj0iJChjZCAiJChkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIpIiAmJiBwd2QpIgpCQUNLVVBfTkFNRT0iJHsxOi1yZXZlcnNlLWVuZ2luZWVyaW5nLWJhY2t1cC0kKGRhdGUgKyVZJW0lZF8lSCVNJVMpfSIKQkFDS1VQX0RJUj0iL3dvcmtzcGFjZS8kQkFDS1VQX05BTUUiCgpSRUQ9J1wwMzNbMDszMW0nCkdSRUVOPSdcMDMzWzA7MzJtJwpZRUxMT1c9J1wwMzNbMTszM20nCkJMVUU9J1wwMzNbMDszNG0nCk5DPSdcMDMzWzBtJwoKbG9nX2luZm8oKSAgeyBlY2hvIC1lICIke0JMVUV9W+Wkh+S7vV0ke05DfSAkKiI7IH0KbG9nX29rKCkgICAgeyBlY2hvIC1lICIke0dSRUVOfVvlrozmiJBdJHtOQ30gJCoiOyB9CmxvZ193YXJuKCkgIHsgZWNobyAtZSAiJHtZRUxMT1d9W+aPkOekul0ke05DfSAkKiI7IH0KCm1rZGlyIC1wICIkQkFDS1VQX0RJUiIKCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8gIiDpgIblkJHlt6XnqIvkuqfnianoh6rliqjlpIfku70iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8gIiIKbG9nX2luZm8gIuWkh+S7veebruW9lTogJEJBQ0tVUF9ESVIiCmVjaG8gIiIKCiMgMS4g5aSH5Lu95bel5YW35YyF5pys6LqrCmxvZ19pbmZvICJbMS81XSDlpIfku73lt6XlhbfljIUuLi4iCmNwIC1yICIkU0NSSVBUX0RJUiIgIiRCQUNLVVBfRElSL3Rvb2xraXQiIDI+L2Rldi9udWxsIHx8IHRydWUKbG9nX29rICLlt6XlhbfljIXlt7LlpIfku70iCgojIDIuIOWkh+S7veaJgOacieWIhuaekOaKpeWRigpsb2dfaW5mbyAiWzIvNV0g5aSH5Lu95YiG5p6Q5oql5ZGKLi4uIgpta2RpciAtcCAiJEJBQ0tVUF9ESVIvcmVwb3J0cyIKZm9yIHJlcG9ydCBpbiAkKGZpbmQgL3dvcmtzcGFjZSAtbmFtZSAiYW5hbHlzaXMtcmVwb3J0LnR4dCIgLW8gLW5hbWUgImFuYWx5c2lzLXJlcG9ydC5tZCIgLW8gLW5hbWUgIiphbmFseXNpcy1yZXBvcnQqIiAyPi9kZXYvbnVsbCB8IGhlYWQgLTUwKTsgZG8KICAgIGNwICIkcmVwb3J0IiAiJEJBQ0tVUF9ESVIvcmVwb3J0cy8iIDI+L2Rldi9udWxsIHx8IHRydWUKZG9uZQpsb2dfb2sgIuaKpeWRiuW3suWkh+S7vSAoJChscyAiJEJBQ0tVUF9ESVIvcmVwb3J0cy8iIDI+L2Rldi9udWxsIHwgd2MgLWwpIOS4qikiCgojIDMuIOWkh+S7veWIhuaekOi/h+eahCBBUEsKbG9nX2luZm8gIlszLzVdIOWkh+S7veWIhuaekOi/h+eahCBBUEsuLi4iCm1rZGlyIC1wICIkQkFDS1VQX0RJUi9hcGtzIgpmb3IgYXBrIGluICQoZmluZCAvd29ya3NwYWNlIC1uYW1lICIqLmFwayIgLW8gLW5hbWUgIioueGFwayIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCk7IGRvCiAgICBjcCAiJGFwayIgIiRCQUNLVVBfRElSL2Fwa3MvIiAyPi9kZXYvbnVsbCB8fCB0cnVlCmRvbmUKbG9nX29rICJBUEvlt7LlpIfku70gKCQobHMgIiRCQUNLVVBfRElSL2Fwa3MvIiAyPi9kZXYvbnVsbCB8IHdjIC1sKSDkuKopIgoKIyA0LiDlpIfku73lj43nvJbor5HmupDnoIEKbG9nX2luZm8gIls0LzVdIOWkh+S7veWPjee8luivkea6kOeggS4uLiIKbWtkaXIgLXAgIiRCQUNLVVBfRElSL3NvdXJjZXMiCmZvciBzcmMgaW4gJChmaW5kIC93b3Jrc3BhY2UgLXR5cGUgZCAtbmFtZSAic291cmNlcyIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCk7IGRvCiAgICBjcCAtciAiJHNyYyIgIiRCQUNLVVBfRElSL3NvdXJjZXMvIiAyPi9kZXYvbnVsbCB8fCB0cnVlCmRvbmUKbG9nX29rICLmupDnoIHlt7LlpIfku70iCgojIDUuIOWkh+S7vSBGcmlkYSDohJrmnKwKbG9nX2luZm8gIls1LzVdIOWkh+S7vSBGcmlkYSDohJrmnKwuLi4iCm1rZGlyIC1wICIkQkFDS1VQX0RJUi9mcmlkYV9zY3JpcHRzIgpmb3IgZnJpZGEgaW4gJChmaW5kIC93b3Jrc3BhY2UgLW5hbWUgIiouanMiIC1wYXRoICIqL2ZyaWRhKiIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCk7IGRvCiAgICBjcCAiJGZyaWRhIiAiJEJBQ0tVUF9ESVIvZnJpZGFfc2NyaXB0cy8iIDI+L2Rldi9udWxsIHx8IHRydWUKZG9uZQpsb2dfb2sgIkZyaWRh6ISa5pys5bey5aSH5Lu9IgoKIyDnlJ/miJDlpIfku73muIXljZUKY2F0ID4gIiRCQUNLVVBfRElSL2JhY2t1cF9tYW5pZmVzdC50eHQiIDw8IEVPRgrpgIblkJHlt6XnqIvkuqfnianlpIfku73muIXljZUKPT09PT09PT09PT09PT09PT09PT0K5aSH5Lu95pe26Ze0OiAkKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpCuWkh+S7veebruW9lTogJEJBQ0tVUF9ESVIKCuWMheWQq+WGheWuuToKMS4g5bel5YW35YyFICh0b29sa2l0LykKMi4g5YiG5p6Q5oql5ZGKIChyZXBvcnRzLykKMy4gQVBL5paH5Lu2IChhcGtzLykKNC4g5Y+N57yW6K+R5rqQ56CBIChzb3VyY2VzLykKNS4gRnJpZGHohJrmnKwgKGZyaWRhX3NjcmlwdHMvKQoK5paH5Lu257uf6K6hOgokKGZpbmQgIiRCQUNLVVBfRElSIiAtdHlwZSBmIHwgd2MgLWwpIOS4quaWh+S7tgokKGZpbmQgIiRCQUNLVVBfRElSIiAtdHlwZSBkIHwgd2MgLWwpIOS4quebruW9lQpFT0YKCmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKbG9nX29rICLlpIfku73lrozmiJDvvIEiCmVjaG8gIiIKZWNobyAi5aSH5Lu95L2N572uOiAkQkFDS1VQX0RJUiIKZWNobyAiIgplY2hvICLnm67lvZXnu5PmnoQ6Igp0cmVlIC1MIDIgIiRCQUNLVVBfRElSIiAyPi9kZXYvbnVsbCB8fCBmaW5kICIkQkFDS1VQX0RJUiIgLW1heGRlcHRoIDIgfCBzZWQgJ3N8XnwgIHwnCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCg==
B64EOF_backup.sh
chmod +x "$DECODE_DIR/backup.sh" 2>/dev/null

echo "恢复: check-deps.sh ..."
base64 -d << 'B64EOF_check-deps.sh' > "$DECODE_DIR/check-deps.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGNoZWNrLWRlcHMuc2gg4oCUIOajgOafpeS+nei1luW3peWFtwpzZXQgLWV1byBwaXBlZmFpbAoKTUlTU0lORz0oKQoKIyDmo4Dmn6UgamFkeAppZiAhIGNvbW1hbmQgLXYgamFkeCAmPi9kZXYvbnVsbCAmJiBbWyAhIC1mICIvdG1wL2phZHgvYmluL2phZHgiIF1dOyB0aGVuCiAgTUlTU0lORys9KCJqYWR4IikKICBlY2hvICJJTlNUQUxMX1JFUVVJUkVEOmphZHgiCmZpCgojIOajgOafpSB1bnppcAppZiAhIGNvbW1hbmQgLXYgdW56aXAgJj4vZGV2L251bGw7IHRoZW4KICBNSVNTSU5HKz0oInVuemlwIikKICBlY2hvICJJTlNUQUxMX1JFUVVJUkVEOnVuemlwIgpmaQoKIyDmo4Dmn6Ugc3RyaW5ncwppZiAhIGNvbW1hbmQgLXYgc3RyaW5ncyAmPi9kZXYvbnVsbDsgdGhlbgogIE1JU1NJTkcrPSgiYmludXRpbHMiKQogIGVjaG8gIklOU1RBTExfUkVRVUlSRUQ6YmludXRpbHMiCmZpCgppZiBbWyAkeyNNSVNTSU5HW0BdfSAtZXEgMCBdXTsgdGhlbgogIGVjaG8gIuaJgOacieS+nei1luW3suWuieijhSIKICBleGl0IDAKZWxzZQogIGVjaG8gIue8uuWwkeS+nei1ljogJHtNSVNTSU5HWypdfSIKICBleGl0IDEKZmkK
B64EOF_check-deps.sh
chmod +x "$DECODE_DIR/check-deps.sh" 2>/dev/null

echo "恢复: decompile.sh ..."
base64 -d << 'B64EOF_decompile.sh' > "$DECODE_DIR/decompile.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGRlY29tcGlsZS5zaCDigJQgQVBLIOWPjee8luivkeiEmuacrO+8iOWFvOWuuSBhdXRvLXJldmVyc2Uuc2jvvIkKc2V0IC1ldW8gcGlwZWZhaWwKCkVOR0lORT0iamFkeCIKREVPQkY9ZmFsc2UKTk9fUkVTPWZhbHNlCk9VVFBVVF9ESVI9IiIKSU5QVVRfRklMRT0iIgoKdXNhZ2UoKSB7CiAgY2F0IDw8RU9GClVzYWdlOiBkZWNvbXBpbGUuc2ggW09QVElPTlNdIDxmaWxlLmFwaz4K5Y+N57yW6K+RIEFQSyDmlofku7YKCumAiemhuToKICAtLWVuZ2luZSBFTkdJTkUgICDlvJXmk446IGphZHgsIGZlcm5mbG93ZXIsIGJvdGggKOm7mOiupDogamFkeCkKICAtLWRlb2JmICAgICAgICAgICDlkK/nlKjlj43mt7fmt4YKICAtLW5vLXJlcyAgICAgICAgICDot7Pov4fotYTmupDop6PnoIEKICAtbyBESVIgICAgICAgICAgICDovpPlh7rnm67lvZUKRU9GCiAgZXhpdCAwCn0KCndoaWxlIFtbICQjIC1ndCAwIF1dOyBkbwogIGNhc2UgIiQxIiBpbgogICAgLS1lbmdpbmUpIEVOR0lORT0iJDIiOyBzaGlmdCAyIDs7CiAgICAtLWRlb2JmKSBERU9CRj10cnVlOyBzaGlmdCA7OwogICAgLS1uby1yZXMpIE5PX1JFUz10cnVlOyBzaGlmdCA7OwogICAgLW8pIE9VVFBVVF9ESVI9IiQyIjsgc2hpZnQgMiA7OwogICAgLWh8LS1oZWxwKSB1c2FnZSA7OwogICAgKikgSU5QVVRfRklMRT0iJDEiOyBzaGlmdCA7OwogIGVzYWMKZG9uZQoKaWYgW1sgLXogIiRJTlBVVF9GSUxFIiBdXTsgdGhlbgogIGVjaG8gIumUmeivrzog5pyq5oyH5a6aIEFQSyDmlofku7YiCiAgdXNhZ2UKZmkKCmlmIFtbIC16ICIkT1VUUFVUX0RJUiIgXV07IHRoZW4KICBPVVRQVVRfRElSPSJkZWNvbXBpbGVkLSQoZGF0ZSArJXMpIgpmaQoKbWtkaXIgLXAgIiRPVVRQVVRfRElSIgpPVVRQVVRfRElSPSQocmVhbHBhdGggIiRPVVRQVVRfRElSIikKCmVjaG8gIj09PSDlj43nvJbor5EgQVBLID09PSIKZWNobyAi6L6T5YWlOiAkSU5QVVRfRklMRSIKZWNobyAi5byV5pOOOiAkRU5HSU5FIgplY2hvICLovpPlh7o6ICRPVVRQVVRfRElSIgoKIyDmo4Dmn6UgamFkeApKQURYX0NNRD0iIgppZiBjb21tYW5kIC12IGphZHggJj4vZGV2L251bGw7IHRoZW4KICBKQURYX0NNRD0iamFkeCIKZWxpZiBbWyAtZiAiL3RtcC9qYWR4L2Jpbi9qYWR4IiBdXTsgdGhlbgogIEpBRFhfQ01EPSIvdG1wL2phZHgvYmluL2phZHgiCmZpCgppZiBbWyAteiAiJEpBRFhfQ01EIiBdXTsgdGhlbgogIGVjaG8gIuato+WcqOWuieijhSBqYWR4Li4uIgogIGFwdC1nZXQgdXBkYXRlIC1xcSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgLXFxIHVuemlwIHdnZXQgMj4vZGV2L251bGwgfHwgdHJ1ZQogIGNkIC90bXAKICB3Z2V0IC1xIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgaHR0cHM6Ly9naXRodWIuY29tL3NreWxvdC9qYWR4L3JlbGVhc2VzL2Rvd25sb2FkL3YxLjUuMS9qYWR4LTEuNS4xLnppcCAtTyBqYWR4LnppcAogIHVuemlwIC1xbyBqYWR4LnppcCAtZCBqYWR4CiAgSkFEWF9DTUQ9Ii90bXAvamFkeC9iaW4vamFkeCIKZmkKCiMg5p6E5bu65Y+C5pWwCkFSR1M9KCkKW1sgIiRERU9CRiIgPT0gdHJ1ZSBdXSAmJiBBUkdTKz0oIi0tZGVvYmYiKQpbWyAiJE5PX1JFUyIgPT0gdHJ1ZSBdXSAmJiBBUkdTKz0oIi0tbm8tcmVzIikKQVJHUys9KCItZCIgIiRPVVRQVVRfRElSL3NvdXJjZXMiKQpBUkdTKz0oIiRJTlBVVF9GSUxFIikKCmVjaG8gIlJ1bm5pbmc6ICRKQURYX0NNRCAke0FSR1NbKl19IgokSkFEWF9DTUQgIiR7QVJHU1tAXX0iIDI+JjEgfHwgdHJ1ZQoKIyDmo4Dmn6XovpPlh7oKaWYgW1sgLWQgIiRPVVRQVVRfRElSL3NvdXJjZXMiIF1dOyB0aGVuCiAgSkFWQV9DT1VOVD0kKGZpbmQgIiRPVVRQVVRfRElSL3NvdXJjZXMiIC1uYW1lICIqLmphdmEiIDI+L2Rldi9udWxsIHwgd2MgLWwpCiAgZWNobyAi5Y+N57yW6K+R5a6M5oiQOiAkSkFWQV9DT1VOVCDkuKogSmF2YSDmlofku7YiCiAgZWNobyAib3V0cHV0OiAkT1VUUFVUX0RJUi9zb3VyY2VzIgplbHNlCiAgZWNobyAi6K2m5ZGKOiDmnKrmib7liLDmupDnoIHnm67lvZUiCmZpCgplY2hvICI9PT0g5Y+N57yW6K+R57uT5p2fID09PSIK
B64EOF_decompile.sh
chmod +x "$DECODE_DIR/decompile.sh" 2>/dev/null

echo "恢复: detect-framework.sh ..."
base64 -d << 'B64EOF_detect-framework.sh' > "$DECODE_DIR/detect-framework.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGRldGVjdC1mcmFtZXdvcmsuc2gg4oCUIOiHquWKqOajgOa1iyBBUEsvWEFQSyDkvb/nlKjnmoTlvIDlj5HmoYbmnrYKIyDmlK/mjIHvvJpGbHV0dGVy44CBUmVhY3QgTmF0aXZl44CBVW5pdHnjgIFLb3RsaW4vSmF2YSDljp/nlJ/jgIFYYW1hcmlu44CBQ29yZG92YQpzZXQgLWV1byBwaXBlZmFpbAoKdXNhZ2UoKSB7CiAgY2F0IDw8RU9GClVzYWdlOiBkZXRlY3QtZnJhbWV3b3JrLnNoIDxmaWxlLmFwa3x4YXBrPgroh6rliqjmo4DmtYsgQVBLL1hBUEsg5L2/55So55qE5byA5Y+R5qGG5p6244CCCgrovpPlh7rvvJoKICBGUkFNRVdPUks9eHh4ICAoZmx1dHRlciAvIHJlYWN0X25hdGl2ZSAvIHVuaXR5IC8gbmF0aXZlIC8geGFtYXJpbiAvIGNvcmRvdmEgLyB1bmtub3duKQpFT0YKICBleGl0IDAKfQoKSU5QVVRfRklMRT0iIgoKd2hpbGUgW1sgJCMgLWd0IDAgXV07IGRvCiAgY2FzZSAiJDEiIGluCiAgICAtaHwtLWhlbHApIHVzYWdlIDs7CiAgICAqKSBJTlBVVF9GSUxFPSIkMSI7IHNoaWZ0IDs7CiAgZXNhYwpkb25lCgppZiBbWyAteiAiJElOUFVUX0ZJTEUiIF1dOyB0aGVuCiAgZWNobyAiRXJyb3I6IOacquaMh+Wumui+k+WFpeaWh+S7tiIgPiYyCiAgdXNhZ2UKZmkKCmlmIFtbICEgLWYgIiRJTlBVVF9GSUxFIiBdXTsgdGhlbgogIGVjaG8gIkVycm9yOiDmlofku7bkuI3lrZjlnKg6ICRJTlBVVF9GSUxFIiA+JjIKICBleGl0IDEKZmkKCiMgWEFQSyDlhYjmj5Dlj5bkuLtBUEsKV09SS19GSUxFPSIkSU5QVVRfRklMRSIKaWYgW1sgIiR7SU5QVVRfRklMRSMjKi59IiA9fiBeW1h4XVtBYV1bUHBdW0trXSQgXV07IHRoZW4KICBUTVBESVJfWEFQSz0kKG1rdGVtcCAtZCAvdG1wL3hhcGstZGV0ZWN0LVhYWFhYWCkKICB1bnppcCAtcW8gIiRJTlBVVF9GSUxFIiAtZCAiJFRNUERJUl9YQVBLIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgIyDmib7liLDmnIDlpKfnmoRBUEvvvIjpgJrluLjmmK/kuLtBUEvvvIkKICBXT1JLX0ZJTEU9JChmaW5kICIkVE1QRElSX1hBUEsiIC1uYW1lICIqLmFwayIgLXR5cGUgZiAtZXhlYyBkdSAtYiB7fSBcOyB8IHNvcnQgLXJuIHwgaGVhZCAtMSB8IGN1dCAtZjIpCiAgaWYgW1sgLXogIiRXT1JLX0ZJTEUiIF1dOyB0aGVuCiAgICBlY2hvICJGUkFNRVdPUks9dW5rbm93biIKICAgIHJtIC1yZiAiJFRNUERJUl9YQVBLIgogICAgZXhpdCAwCiAgZmkKZmkKCiMg55SoIHVuemlwIC1sIOWIl+WHuuWGhemDqOaWh+S7tue7k+aehApGSUxFX0xJU1Q9JCh1bnppcCAtbCAiJFdPUktfRklMRSIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKCmRldGVjdF9mcmFtZXdvcmsoKSB7CiAgbG9jYWwgbGlzdD0iJDEiCgogICMgPT09IEZsdXR0ZXIgPT09CiAgIyBGbHV0dGVyIEFQSyDnibnlvoHmlofku7YKICBpZiBlY2hvICIkbGlzdCIgfCBncmVwIC1xaUUgJyhmbHV0dGVyXC5kbGx8bGliZmx1dHRlclwuc298bGliZmx1dHRlcl9hcm02NFwuc298Zmx1dHRlcl9hc3NldHMvfEZsdXR0ZXJcLmphcnxsaWJhcHBcLnNvfGtlcm5lbF9ibG9iXC5iaW58aXNvbGF0ZV9zbmFwc2hvdF9kYXRhfHZtX3NuYXBzaG90X2RhdGEpJzsgdGhlbgogICAgZWNobyAiRlJBTUVXT1JLPWZsdXR0ZXIiCiAgICAjIOajgOa1iyBGbHV0dGVyIOeJiOacrAogICAgbG9jYWwgZmx1dHRlcl92ZXIKICAgIGZsdXR0ZXJfdmVyPSQoZWNobyAiJGxpc3QiIHwgZ3JlcCAtb1AgJ2ZsdXR0ZXIvXGQrXC5cZCtcLlxkKycgfCBoZWFkIC0xIHx8IHRydWUpCiAgICBpZiBbWyAtbiAiJGZsdXR0ZXJfdmVyIiBdXTsgdGhlbgogICAgICBlY2hvICJGTFVUVEVSX1ZFUlNJT049JHtmbHV0dGVyX3ZlciNmbHV0dGVyL30iCiAgICBmaQogICAgIyDmo4DmtYvmmK/lkKbkvb/nlKjkuoYgRGFydCBBT1QKICAgIGlmIGVjaG8gIiRsaXN0IiB8IGdyZXAgLXFpRSAnbGliYXBwXC5zb3xBcHBCdW5kbGUnOyB0aGVuCiAgICAgIGVjaG8gIkZMVVRURVJfTU9ERT1hb3QiCiAgICBlbHNlCiAgICAgIGVjaG8gIkZMVVRURVJfTU9ERT11bmtub3duIgogICAgZmkKICAgIHJldHVybiAwCiAgZmkKCiAgIyA9PT0gUmVhY3QgTmF0aXZlID09PQogIGlmIGVjaG8gIiRsaXN0IiB8IGdyZXAgLXFpRSAnKGxpYnJlYWN0bmF0aXZlam5pXC5zb3xsaWJoZXJtZXNcLnNvfGluZGV4XC5hbmRyb2lkXC5idW5kbGV8cmVhY3RuYXRpdmUvfFJlYWN0TmF0aXZlSG9zdHxyZWFjdFwubmF0aXZlKSc7IHRoZW4KICAgIGVjaG8gIkZSQU1FV09SSz1yZWFjdF9uYXRpdmUiCiAgICBsb2NhbCBybl92ZXIKICAgIHJuX3Zlcj0kKGVjaG8gIiRsaXN0IiB8IGdyZXAgLW9QICdyZWFjdC1uYXRpdmUvXGQrXC5cZCtcLlxkKycgfCBoZWFkIC0xIHx8IHRydWUpCiAgICBpZiBbWyAtbiAiJHJuX3ZlciIgXV07IHRoZW4KICAgICAgZWNobyAiUk5fVkVSU0lPTj0ke3JuX3ZlciNyZWFjdC1uYXRpdmUvfSIKICAgIGZpCiAgICAjIOajgOa1iyBKUyDlvJXmk44KICAgIGlmIGVjaG8gIiRsaXN0IiB8IGdyZXAgLXFpRSAnbGliaGVybWVzXC5zbyc7IHRoZW4KICAgICAgZWNobyAiUk5fRU5HSU5FPWhlcm1lcyIKICAgIGVsaWYgZWNobyAiJGxpc3QiIHwgZ3JlcCAtcWlFICdsaWJqc2NcLnNvfGxpYnY4XC5zbyc7IHRoZW4KICAgICAgZWNobyAiUk5fRU5HSU5FPWpzY19vcl92OCIKICAgIGZpCiAgICByZXR1cm4gMAogIGZpCgogICMgPT09IFVuaXR5ID09PQogIGlmIGVjaG8gIiRsaXN0IiB8IGdyZXAgLXFpRSAnKGxpYnVuaXR5XC5zb3xsaWJpbDJjcHBcLnNvfGxpYm1vbm9cLnNvfHVuaXR5cGxheWVyYWN0aXZpdHl8VW5pdHlQbGF5ZXJBY3Rpdml0eXxhc3NldHMvYmluL0RhdGEvfGdsb2JhbGdhbWVtYW5hZ2VycyknOyB0aGVuCiAgICBlY2hvICJGUkFNRVdPUks9dW5pdHkiCiAgICAjIOajgOa1i+WQjuerrwogICAgaWYgZWNobyAiJGxpc3QiIHwgZ3JlcCAtcWlFICdsaWJpbDJjcHBcLnNvJzsgdGhlbgogICAgICBlY2hvICJVTklUWV9CQUNLRU5EPWlsMmNwcCIKICAgIGVsaWYgZWNobyAiJGxpc3QiIHwgZ3JlcCAtcWlFICdsaWJtb25vXC5zbyc7IHRoZW4KICAgICAgZWNobyAiVU5JVFlfQkFDS0VORD1tb25vIgogICAgZmkKICAgIHJldHVybiAwCiAgZmkKCiAgIyA9PT0gWGFtYXJpbiA9PT0KICBpZiBlY2hvICIkbGlzdCIgfCBncmVwIC1xaUUgJyhsaWJtb25vZHJvaWRcLnNvfGxpYm1vbm9zZ2VuXC5zb3xhc3NlbWJsaWVzLy4qXC5kbGx8TW9ub1wuQW5kcm9pZHxYYW1hcmluKSc7IHRoZW4KICAgIGVjaG8gIkZSQU1FV09SSz14YW1hcmluIgogICAgcmV0dXJuIDAKICBmaQoKICAjID09PSBDb3Jkb3ZhIC8gSW9uaWMgLyBDYXBhY2l0b3IgPT09CiAgaWYgZWNobyAiJGxpc3QiIHwgZ3JlcCAtcWlFICcoY29yZG92YVwuanN8Y29yZG92YVwucGx1Z2luc3xpb25pYy98Y2FwYWNpdG9yL3x3d3cvaW5kZXhcLmh0bWx8YXNzZXRzL3d3dy8pJzsgdGhlbgogICAgZWNobyAiRlJBTUVXT1JLPWNvcmRvdmEiCiAgICByZXR1cm4gMAogIGZpCgogICMgPT09IEtvdGxpbiBNdWx0aXBsYXRmb3JtIC8gQ29tcG9zZSA9PT0KICBpZiBlY2hvICIkbGlzdCIgfCBncmVwIC1xaUUgJyhjb21wb3NlL3xqZXRwYWNrX2NvbXBvc2V8Q29tcG9zZUFjdGl2aXR5fGtvdGxpbnhcLmNvcm91dGluZXMpJzsgdGhlbgogICAgZWNobyAiRlJBTUVXT1JLPWNvbXBvc2UiCiAgICByZXR1cm4gMAogIGZpCgogICMgPT09IOWOn+eUnyBBbmRyb2lkIChKYXZhL0tvdGxpbikgPT09CiAgZWNobyAiRlJBTUVXT1JLPW5hdGl2ZSIKICByZXR1cm4gMAp9CgpkZXRlY3RfZnJhbWV3b3JrICIkRklMRV9MSVNUIgoKIyDmuIXnkIbkuLTml7bnm67lvZUKaWYgW1sgLW4gIiR7VE1QRElSX1hBUEs6LX0iICYmIC1kICIkVE1QRElSX1hBUEsiIF1dOyB0aGVuCiAgcm0gLXJmICIkVE1QRElSX1hBUEsiCmZpCg==
B64EOF_detect-framework.sh
chmod +x "$DECODE_DIR/detect-framework.sh" 2>/dev/null

echo "恢复: detect-shell.sh ..."
base64 -d << 'B64EOF_detect-shell.sh' > "$DECODE_DIR/detect-shell.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGRldGVjdC1zaGVsbC5zaCDigJQgQW5kcm9pZCBBUEsg5Yqg5Zu65aOz6Ieq5Yqo5qOA5rWL6ISa5pysCiMg5qOA5rWL5bi46KeB5Yqg5Zu65Y6C5ZWG77yaMzYw44CB5qKG5qKG44CB54ix5Yqg5a+G44CB6IW+6K6v5LmQ5Zu644CB55m+5bqm44CB572R5piT5piT55u+44CB5aic6L+m44CB5Yeg57u05a6J5YWo562JCiMg6L6T5Ye677ya5Yqg5Zu657G75Z6L44CB5aOz5Luj5pWw44CB6ISx5aOz5pa55rOV5o6o6I2Q77yI5aSn55m96K+d54mI77yJCnNldCAtZXVvIHBpcGVmYWlsCgp1c2FnZSgpIHsKICBjYXQgPDxFT0YKVXNhZ2U6IGRldGVjdC1zaGVsbC5zaCA8ZmlsZS5hcGt8eGFwa3xqYXJ8YWFyPgroh6rliqjmo4DmtYtBUEvmmK/lkKbliqDlo7PvvIzor4bliKvliqDlm7rljoLllYblkozlo7Pku6PmlbDvvIzovpPlh7rohLHlo7PmlZnnqIvjgIIKCuekuuS+izoKICBkZXRlY3Qtc2hlbGwuc2ggYXBwLmFwawogIGRldGVjdC1zaGVsbC5zaCBhcHAueGFwawpFT0YKICBleGl0IDAKfQoKSU5QVVRfRklMRT0iIgpPVVRQVVRfRElSPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICBjYXNlICIkMSIgaW4KICAgIC1vfC0tb3V0cHV0KSBPVVRQVVRfRElSPSIkMiI7IHNoaWZ0IDIgOzsKICAgIC1ofC0taGVscCkgICB1c2FnZSA7OwogICAgLSopICAgICAgICAgIGVjaG8gIumUmeivrzog5pyq55+l6YCJ6aG5ICQxIiA+JjI7IHVzYWdlIDs7CiAgICAqKSAgICAgICAgICAgSU5QVVRfRklMRT0iJDEiOyBzaGlmdCA7OwogIGVzYWMKZG9uZQoKaWYgW1sgLXogIiRJTlBVVF9GSUxFIiBdXTsgdGhlbgogIGVjaG8gIumUmeivrzog5pyq5oyH5a6aQVBL5paH5Lu2IiA+JjIKICB1c2FnZQpmaQoKaWYgW1sgISAtZiAiJElOUFVUX0ZJTEUiIF1dOyB0aGVuCiAgZWNobyAi6ZSZ6K+vOiDmlofku7bkuI3lrZjlnKg6ICRJTlBVVF9GSUxFIiA+JjIKICBleGl0IDEKZmkKCkJBU0VOQU1FPSQoYmFzZW5hbWUgIiRJTlBVVF9GSUxFIiB8IHNlZCAncy9cLlthQV1bcFBdW2tLXSQvLztzL1wuW3hYXVthQV1bcFBdW2tLXSQvLycpClRJTUVTVEFNUD0kKGRhdGUgKyVZJW0lZF8lSCVNJVMpCltbIC16ICIkT1VUUFVUX0RJUiIgXV0gJiYgT1VUUFVUX0RJUj0iJHtCQVNFTkFNRX0tc2hlbGwtZGV0ZWN0LSR7VElNRVNUQU1QfSIKbWtkaXIgLXAgIiRPVVRQVVRfRElSIgpPVVRQVVRfRElSPSQocmVhbHBhdGggIiRPVVRQVVRfRElSIikKClJFUE9SVF9GSUxFPSIkT1VUUFVUX0RJUi9zaGVsbC1hbmFseXNpcy1yZXBvcnQubWQiCgojIOminOiJsgpSRUQ9J1wwMzNbMDszMW0nCkdSRUVOPSdcMDMzWzA7MzJtJwpZRUxMT1c9J1wwMzNbMTszM20nCkJMVUU9J1wwMzNbMDszNG0nCkNZQU49J1wwMzNbMDszNm0nCk5DPSdcMDMzWzBtJwoKbG9nX2luZm8oKSAgeyBlY2hvIC1lICIke0JMVUV9W+S/oeaBr10ke05DfSAgJCoiOyB9CmxvZ19vaygpICAgIHsgZWNobyAtZSAiJHtHUkVFTn1b5a6M5oiQXSR7TkN9ICAkKiI7IH0KbG9nX3dhcm4oKSAgeyBlY2hvIC1lICIke1lFTExPV31b5o+Q56S6XSR7TkN9ICAkKiI7IH0KbG9nX2Vycm9yKCkgeyBlY2hvIC1lICIke1JFRH1b6ZSZ6K+vXSR7TkN9ICQqIjsgfQpsb2dfc2hlbGwoKSB7IGVjaG8gLWUgIiR7Q1lBTn1b5aOz5qOA5rWLXSR7TkN9ICQqIjsgfQoKIyA9PT09PT09PT09PT09PT09PT09PSDliJ3lp4vljJbmiqXlkYogPT09PT09PT09PT09PT09PT09PT0KaW5pdF9yZXBvcnQoKSB7CiAgY2F0ID4gIiRSRVBPUlRfRklMRSIgPDxFT0YKIyBBbmRyb2lkIEFQSyDliqDlm7rlo7Pmo4DmtYvmiqXlkYoKCi0gKirnm67moIfmlofku7YqKjogXGAke0JBU0VOQU1FfVxgCi0gKirliIbmnpDml7bpl7QqKjogJChkYXRlICcrJVktJW0tJWQgJUg6JU06JVMnKQoKLS0tCgpFT0YKfQoKYXBwZW5kX3JlcG9ydCgpIHsKICBlY2hvICIkMSIgPj4gIiRSRVBPUlRfRklMRSIKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDmj5Dlj5ZBUEvlhoXlrrkgPT09PT09PT09PT09PT09PT09PT0KcGhhc2VfZXh0cmFjdCgpIHsKICBsb2dfaW5mbyAi5q2j5Zyo6Kej5Y6LQVBL77yM5o+Q5Y+W5YWz6ZSu5paH5Lu2Li4uIgogIGFwcGVuZF9yZXBvcnQgIiMjIDEuIOaWh+S7tuaPkOWPllxuIgoKICBsb2NhbCBleHRyYWN0X2Rpcj0iJE9VVFBVVF9ESVIvZXh0cmFjdGVkIgogIG1rZGlyIC1wICIkZXh0cmFjdF9kaXIiCgogICMg6Kej5Y6LQVBLCiAgdW56aXAgLXFvICIkSU5QVVRfRklMRSIgLWQgIiRleHRyYWN0X2RpciIgMj4vZGV2L251bGwgfHwgdHJ1ZQoKICAjIOajgOafpeWFs+mUruaWh+S7tgogIGxvY2FsIGhhc19kZXg9ZmFsc2UKICBsb2NhbCBkZXhfY291bnQ9MAogIGxvY2FsIGRleF9zaXplPTAKCiAgaWYgW1sgLWYgIiRleHRyYWN0X2Rpci9jbGFzc2VzLmRleCIgXV07IHRoZW4KICAgIGhhc19kZXg9dHJ1ZQogICAgZGV4X2NvdW50PSQoZmluZCAiJGV4dHJhY3RfZGlyIiAtbmFtZSAiKi5kZXgiIHwgd2MgLWwpCiAgICBkZXhfc2l6ZT0kKHN0YXQgLWMlcyAiJGV4dHJhY3RfZGlyL2NsYXNzZXMuZGV4IiAyPi9kZXYvbnVsbCB8fCBlY2hvICIwIikKICBmaQoKICBhcHBlbmRfcmVwb3J0ICItIERFWOaWh+S7tuaVsOmHjzogJGRleF9jb3VudFxuIgogIGFwcGVuZF9yZXBvcnQgIi0gY2xhc3Nlcy5kZXjlpKflsI86ICRkZXhfc2l6ZSDlrZfoioJcbiIKCiAgaWYgW1sgIiRoYXNfZGV4IiA9PSB0cnVlICYmICIkZGV4X3NpemUiIC1sdCAxMDI0MCBdXTsgdGhlbgogICAgbG9nX3dhcm4gImNsYXNzZXMuZGV4IOW+iOWwj++8iCRkZXhfc2l6ZSDlrZfoioLvvInvvIzlj6/og73mmK/lo7NERVjvvIEiCiAgICBhcHBlbmRfcmVwb3J0ICItIOKaoO+4jyAqKuitpuWRiioqOiBjbGFzc2VzLmRleCDlsI/kuo4xMEtC77yM5b6I5Y+v6IO95piv5aOzREVYXG4iCiAgZmkKCiAgZWNobyAiJGV4dHJhY3RfZGlyIgp9CgojID09PT09PT09PT09PT09PT09PT09IFNP5bqT54m55b6B5qOA5rWLID09PT09PT09PT09PT09PT09PT09CnBoYXNlX2RldGVjdF9zbygpIHsKICBsb2NhbCBleHRyYWN0X2Rpcj0iJDEiCiAgbG9nX2luZm8gIuato+WcqOajgOa1i1NP5bqT54m55b6BLi4uIgogIGFwcGVuZF9yZXBvcnQgIiMjIDIuIOWKoOWbuuWOguWVhuajgOa1i++8iFNP5bqT54m55b6B77yJXG4iCgogIGxvY2FsIGxpYl9kaXI9IiRleHRyYWN0X2Rpci9saWIiCiAgbG9jYWwgZGV0ZWN0ZWRfc2hlbGxzPSgpCgogICMg5a6a5LmJ5qOA5rWL6KeE5YiZOiDljoLllYblkI1854m55b6B5paH5Lu2fOeJueW+geWtl+espuS4snzlo7Pku6PmlbAKICBkZWNsYXJlIC1BIFNIRUxMX1JVTEVTPSgKICAgIFsiMzYw5Yqg5Zu6Il09ImxpYmppYWd1LnNvfGxpYnByb3RlY3RDbGFzcy5zb3xsaWJqaWFndV9hcnQuc298bGliamlhZ3VfeDg2LnNvfGxpYmppYWd1X2E2NC5zb3xsaWJqaWFndS5zb3zkuozku6Mv5LiJ5LujIgogICAgWyLmoobmooblronlhagiXT0ibGlic2VjZXhlLnNvfGxpYnNlY21haW4uc298bGliRGV4SGVscGVyLnNvfGxpYlNlY1NoZWxsLnNvfGxpYmVnaXMuc2985LqM5LujL+S4ieS7oyIKICAgIFsi54ix5Yqg5a+GIl09ImxpYmV4ZWMuc298bGliZXhlY21haW4uc298aWppYW1pLmRhdHxpamlhbWkuYWptfGxpYm5xc2hpZWxkLnNvfOS6jOS7oy/kuInku6MiCiAgICBbIuiFvuiur+S5kOWbuiJdPSJsaWJzaGVsbHgtfGxpYkJ1Z2x5LnNvfGxpYnR1cC5zb3xsaWJleGVjLnNvfGxpYnNoZWxsLnNvfHN0dWJfdGVuZ3h1bnzkuozku6Mv5LiJ5LujIgogICAgWyLnmb7luqbliqDlm7oiXT0ibGliYmFpZHVwcm90ZWN0LnNvfGxpYmJhaWR1cHJvdGVjdF94ODYuc2985LqM5LujIgogICAgWyLnvZHmmJPmmJPnm74iXT0ibGlibmVzZWMuc298bGlibmVzZWNfeDg2LnNvfOS6jOS7oy/kuInku6MiCiAgICBbIuWonOi/piJdPSJsaWJjaGFvc3ZtcC5zb3xsaWJkZG9nLnNvfGxpYmZkb2cuc298bGliZWRvZy5zb3zkuozku6MiCiAgICBbIuWHoOe7tOWuieWFqCJdPSJsaWJrd3NjbW0uc298bGlia3dzY3Iuc298S2l3aVZNfOS4ieS7oyIKICAgIFsi6YCa5LuY55u+Il09ImxpYmVnaXMuc298bGliZWdpc194ODYuc2985LqM5LujIgogICAgWyLpmL/ph4zogZrlronlhagiXT0ibGlibW9iaXNlYy5zb3xsaWJtb2Jpc2VjX3kuc2985LqM5LujIgogICAgWyLmtbfkupHlrokiXT0ibGliY2hhb3N2bXAuc298bGliY2hhb3N2bXBfeDg2LnNvfOS6jOS7oyIKICAgIFsi6aG26LGh5oqA5pyvIl09ImxpYngzZy5zb3xsaWJ4M2dfeDg2LnNvfOS4ieS7oyIKICAgIFsi5piT55u+KOe9keaYkykiXT0ibGlibmVzZWMuc298bGlibmVzZWNfeDg2LnNvfOS6jOS7oy/kuInku6MiCiAgICBbIueRnuaYnyJdPSJsaWJyc3Byb3RlY3Quc298bGlicnNwcm90ZWN0X3g4Ni5zb3zkuozku6MiCiAgICBbIuebm+WkpyJdPSJsaWJhcHNzZWMuc298bGliYXBzc2VjX3g4Ni5zb3zkuozku6MiCiAgICBbIuWQr+aYjuaYn+i+sCJdPSJsaWJxbXguc298bGlicW14X3g4Ni5zb3zkuozku6MiCiAgKQoKICBmb3IgdmVuZG9yIGluICIkeyFTSEVMTF9SVUxFU1tAXX0iOyBkbwogICAgbG9jYWwgcnVsZXM9IiR7U0hFTExfUlVMRVNbJHZlbmRvcl19IgogICAgbG9jYWwgZmVhdHVyZXM9JChlY2hvICIkcnVsZXMiIHwgcmV2IHwgY3V0IC1kJ3wnIC1mMi0gfCByZXYpCiAgICBsb2NhbCBnZW5lcmF0aW9uPSQoZWNobyAiJHJ1bGVzIiB8IHJldiB8IGN1dCAtZCd8JyAtZjEgfCByZXYpCgogICAgbG9jYWwgZm91bmQ9ZmFsc2UKICAgIGxvY2FsIG1hdGNoZWRfZmlsZXM9IiIKCiAgICBJRlM9J3wnIHJlYWQgLXJhIEZFQVRVUkVfQVJSQVkgPDw8ICIkZmVhdHVyZXMiCiAgICBmb3IgZmVhdHVyZSBpbiAiJHtGRUFUVVJFX0FSUkFZW0BdfSI7IGRvCiAgICAgIGlmIFtbIC1uICIkZmVhdHVyZSIgXV07IHRoZW4KICAgICAgICBsb2NhbCBtYXRjaGVzCiAgICAgICAgbWF0Y2hlcz0kKGZpbmQgIiRleHRyYWN0X2RpciIgLW5hbWUgIiokZmVhdHVyZSoiIC10eXBlIGYgMj4vZGV2L251bGwgfCBoZWFkIC01KQogICAgICAgIGlmIFtbIC1uICIkbWF0Y2hlcyIgXV07IHRoZW4KICAgICAgICAgIGZvdW5kPXRydWUKICAgICAgICAgIG1hdGNoZWRfZmlsZXM9IiRtYXRjaGVkX2ZpbGVzJG1hdGNoZXNcbiIKICAgICAgICBmaQogICAgICBmaQogICAgZG9uZQoKICAgIGlmIFtbICIkZm91bmQiID09IHRydWUgXV07IHRoZW4KICAgICAgZGV0ZWN0ZWRfc2hlbGxzKz0oIiR2ZW5kb3IiKQogICAgICBsb2dfc2hlbGwgIuajgOa1i+WIsCBbJHZlbmRvcl0g4oCUICRnZW5lcmF0aW9u5aOzIgogICAgICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+UkiAkdmVuZG9yICgkZ2VuZXJhdGlvbuWjsylcbiIKICAgICAgYXBwZW5kX3JlcG9ydCAiLSDljLnphY3liLDnmoTmlofku7Y6XG4iCiAgICAgIGFwcGVuZF9yZXBvcnQgIlxgXGBcYCIKICAgICAgZWNobyAtZSAiJG1hdGNoZWRfZmlsZXMiID4+ICIkUkVQT1JUX0ZJTEUiCiAgICAgIGFwcGVuZF9yZXBvcnQgIlxgXGBcYFxuIgogICAgZmkKICBkb25lCgogIGlmIFtbICR7I2RldGVjdGVkX3NoZWxsc1tAXX0gLWVxIDAgXV07IHRoZW4KICAgIGxvZ19vayAi5pyq5qOA5rWL5Yiw5bey55+l5Yqg5Zu65Y6C5ZWG55qEU0/lupPnibnlvoEiCiAgICBhcHBlbmRfcmVwb3J0ICItIOKchSDmnKrmo4DmtYvliLDluLjop4HliqDlm7rljoLllYbnmoRTT+W6k+eJueW+gVxuIgogIGVsc2UKICAgIGxvZ193YXJuICLmo4DmtYvliLAgJHsjZGV0ZWN0ZWRfc2hlbGxzW0BdfSDkuKrliqDlm7rnibnlvoEiCiAgZmkKCiAgZWNobyAiJHtkZXRlY3RlZF9zaGVsbHNbKl19Igp9CgojID09PT09PT09PT09PT09PT09PT09IE1hbmlmZXN054m55b6B5qOA5rWLID09PT09PT09PT09PT09PT09PT09CnBoYXNlX2RldGVjdF9tYW5pZmVzdCgpIHsKICBsb2NhbCBleHRyYWN0X2Rpcj0iJDEiCiAgbG9nX2luZm8gIuato+WcqOajgOa1i0FuZHJvaWRNYW5pZmVzdC54bWznibnlvoEuLi4iCiAgYXBwZW5kX3JlcG9ydCAiIyMgMy4gQW5kcm9pZE1hbmlmZXN0LnhtbCDmo4DmtYtcbiIKCiAgbG9jYWwgbWFuaWZlc3Q9IiRleHRyYWN0X2Rpci9BbmRyb2lkTWFuaWZlc3QueG1sIgogIGlmIFtbICEgLWYgIiRtYW5pZmVzdCIgXV07IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIi0g4pqg77iPIOacquaJvuWIsCBBbmRyb2lkTWFuaWZlc3QueG1sXG4iCiAgICByZXR1cm4KICBmaQoKICAjIOajgOafpUFwcGxpY2F0aW9u57G75ZCNCiAgbG9jYWwgYXBwX2NsYXNzCiAgYXBwX2NsYXNzPSQoZ3JlcCAtb1AgJ2FuZHJvaWQ6bmFtZT0iW14iXSsiJyAiJG1hbmlmZXN0IiB8IGdyZXAgLXYgJ2FuZHJvaWQ6bmFtZT0iYW5kcm9pZFwuJyB8IGhlYWQgLTEgfCBzZWQgJ3MvYW5kcm9pZDpuYW1lPSIvLztzLyIvLycgfHwgdHJ1ZSkKCiAgaWYgW1sgLW4gIiRhcHBfY2xhc3MiIF1dOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICItIEFwcGxpY2F0aW9u57G7OiBcYCRhcHBfY2xhc3NcYFxuIgoKICAgICMg5qOA5rWL5aOzQXBwbGljYXRpb27nibnlvoEKICAgIGxvY2FsIHNoZWxsX2FwcF9wYXR0ZXJucz0oCiAgICAgICJjb20uc3R1Yi5TdHViQXBwbGljYXRpb24iCiAgICAgICJjb20uc2VjbmVvLnNkay5IZWxwZXJBcHBsaWNhdGlvbiIKICAgICAgImNvbS50ZW5jZW50Lm1zLnNkay5BcHBCYXNlIgogICAgICAiY29tLmJhaWR1LnByb3RlY3QuU3R1YkFwcGxpY2F0aW9uIgogICAgICAiY29tLmlqaWFtaS5jb3JlLlN0dWJBcHBsaWNhdGlvbiIKICAgICAgImNvbS5iYW5nY2xlLnByb3RlY3QuU3R1YkFwcGxpY2F0aW9uIgogICAgICAiY29tLm5xc2hpZWxkLnN0dWIuU3R1YkFwcGxpY2F0aW9uIgogICAgICAiY29tLmtpd2kuc2RrLlN0dWJBcHBsaWNhdGlvbiIKICAgICAgInMuaC5lLmwubC5TIgogICAgKQoKICAgIGxvY2FsIGlzX3NoZWxsX2FwcD1mYWxzZQogICAgZm9yIHBhdHRlcm4gaW4gIiR7c2hlbGxfYXBwX3BhdHRlcm5zW0BdfSI7IGRvCiAgICAgIGlmIGVjaG8gIiRhcHBfY2xhc3MiIHwgZ3JlcCAtcSAiJHBhdHRlcm4iOyB0aGVuCiAgICAgICAgaXNfc2hlbGxfYXBwPXRydWUKICAgICAgICBsb2dfc2hlbGwgIkFwcGxpY2F0aW9u57G75ZCN5YyF5ZCr5aOz54m55b6BOiAkcGF0dGVybiIKICAgICAgICBhcHBlbmRfcmVwb3J0ICItIOKaoO+4jyAqKuWjs0FwcGxpY2F0aW9u5qOA5rWLKio6IOexu+WQjeWMheWQqyBcYCRwYXR0ZXJuXGBcbiIKICAgICAgICBicmVhawogICAgICBmaQogICAgZG9uZQoKICAgIGlmIFtbICIkaXNfc2hlbGxfYXBwIiA9PSBmYWxzZSBdXTsgdGhlbgogICAgICBhcHBlbmRfcmVwb3J0ICItIOKchSBBcHBsaWNhdGlvbuexu+WQjeaXoOaYjuaYvuWjs+eJueW+gVxuIgogICAgZmkKICBmaQp9CgojID09PT09PT09PT09PT09PT09PT09IERFWOe7k+aehOWIhuaekCA9PT09PT09PT09PT09PT09PT09PQpwaGFzZV9hbmFseXplX2RleCgpIHsKICBsb2NhbCBleHRyYWN0X2Rpcj0iJDEiCiAgbG9nX2luZm8gIuato+WcqOWIhuaekERFWOe7k+aehC4uLiIKICBhcHBlbmRfcmVwb3J0ICIjIyA0LiBERVjnu5PmnoTliIbmnpBcbiIKCiAgbG9jYWwgZGV4X2ZpbGU9IiRleHRyYWN0X2Rpci9jbGFzc2VzLmRleCIKICBpZiBbWyAhIC1mICIkZGV4X2ZpbGUiIF1dOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICItIOKaoO+4jyDmnKrmib7liLAgY2xhc3Nlcy5kZXhcbiIKICAgIHJldHVybgogIGZpCgogICMg5qOA5p+lREVY5paH5Lu25aS0CiAgbG9jYWwgZGV4X2hlYWRlcgogIGRleF9oZWFkZXI9JCh4eGQgLWwgOCAiJGRleF9maWxlIiAyPi9kZXYvbnVsbCB8IGhlYWQgLTEgfHwgdHJ1ZSkKICBhcHBlbmRfcmVwb3J0ICItIERFWOaWh+S7tuWktDogXGAkZGV4X2hlYWRlclxgXG4iCgogICMg5qOA5p+lREVY5aSn5bCP5Yik5pat5piv5ZCm5Li65aOzCiAgbG9jYWwgZGV4X3NpemUKICBkZXhfc2l6ZT0kKHN0YXQgLWMlcyAiJGRleF9maWxlIiAyPi9kZXYvbnVsbCB8fCBlY2hvICIwIikKCiAgaWYgW1sgIiRkZXhfc2l6ZSIgLWx0IDUxMjAgXV07IHRoZW4KICAgIGxvZ193YXJuICJjbGFzc2VzLmRleCDmnoHlsI/vvIgkZGV4X3NpemUg5a2X6IqC77yJ77yM6auY5bqm5oCA55aR5piv5aOz77yBIgogICAgYXBwZW5kX3JlcG9ydCAiLSDimqDvuI8gKirorablkYoqKjogY2xhc3Nlcy5kZXgg5LuFICRkZXhfc2l6ZSDlrZfoioLvvIzmnoHlj6/og73mmK/lo7NERVjvvIjmraPluLhBUEvpgJrluLggPjEwMEtC77yJXG4iCiAgZWxpZiBbWyAiJGRleF9zaXplIiAtbHQgMTAyNDAwIF1dOyB0aGVuCiAgICBsb2dfd2FybiAiY2xhc3Nlcy5kZXgg6L6D5bCP77yIJGRleF9zaXplIOWtl+iKgu+8ie+8jOWPr+iDveWKoOWjsyIKICAgIGFwcGVuZF9yZXBvcnQgIi0g4pqg77iPICoq5o+Q56S6Kio6IGNsYXNzZXMuZGV4IOS7hSAkZGV4X3NpemUg5a2X6IqC77yM5Y+v6IO95Yqg5aOzXG4iCiAgZWxzZQogICAgYXBwZW5kX3JlcG9ydCAiLSDinIUgY2xhc3Nlcy5kZXgg5aSn5bCP5q2j5bi4ICgkZGV4X3NpemUg5a2X6IqCKVxuIgogIGZpCgogICMg55Soc3RyaW5nc+ajgOafpURFWOS4reeahOeJueW+geWtl+espuS4sgogIGlmIGNvbW1hbmQgLXYgc3RyaW5ncyAmPi9kZXYvbnVsbDsgdGhlbgogICAgbG9jYWwgZGV4X3N0cmluZ3MKICAgIGRleF9zdHJpbmdzPSQoc3RyaW5ncyAiJGRleF9maWxlIiAyPi9kZXYvbnVsbCB8IGdyZXAgLWlFICcoZW5jcnlwdHxkZWNyeXB0fGRleGxvYWR8c2hlbGx8cHJvdGVjdHzliqDlm7p8amlhZ3V8YmFuZ2NsZXxpamlhbWl8dGVuY2VudHxiYWlkdSknIHwgaGVhZCAtMTAgfHwgdHJ1ZSkKICAgIGlmIFtbIC1uICIkZGV4X3N0cmluZ3MiIF1dOyB0aGVuCiAgICAgIGFwcGVuZF9yZXBvcnQgIi0gREVY5Lit5Y+R546w5Y+v55aR5a2X56ym5LiyOlxuIgogICAgICBhcHBlbmRfcmVwb3J0ICJcYFxgXGAiCiAgICAgIGVjaG8gIiRkZXhfc3RyaW5ncyIgPj4gIiRSRVBPUlRfRklMRSIKICAgICAgYXBwZW5kX3JlcG9ydCAiXGBcYFxgXG4iCiAgICBmaQogIGZpCn0KCiMgPT09PT09PT09PT09PT09PT09PT0g6ISx5aOz5pWZ56iL55Sf5oiQID09PT09PT09PT09PT09PT09PT09CnBoYXNlX2dlbmVyYXRlX2d1aWRlKCkgewogIGxvY2FsIGRldGVjdGVkX3NoZWxscz0iJDEiCiAgbG9nX2luZm8gIuato+WcqOeUn+aIkOiEseWjs+aVmeeoiy4uLiIKICBhcHBlbmRfcmVwb3J0ICIjIyA1LiDohLHlo7PmlZnnqIvvvIjlpKfnmb3or53niYjvvIlcbiIKCiAgaWYgW1sgLXogIiRkZXRlY3RlZF9zaGVsbHMiIF1dOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg4pyFIOacquajgOa1i+WIsOWKoOWbuuWjs1xuIgogICAgYXBwZW5kX3JlcG9ydCAi6L+Z5LiqQVBL5rKh5pyJ5L2/55So5bi46KeB55qE5Yqg5Zu65pyN5Yqh77yM55u05o6l55SoamFkeOWPjee8luivkeWwseiDveeci+WIsOa6kOeggeOAglxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuaTjeS9nOatpemqpCoqOlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4g55SoamFkeOaJk+W8gEFQS1xuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g55u05o6l5YiG5p6Q5rqQ56CBXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDlpoLmnpzku6PnoIHooqvmt7fmt4bkuobvvIjnsbvlkI3lj5jmiJBhL2IvY++8ie+8jOmCo+aYr+S7o+eggea3t+a3huS4jeaYr+WKoOWbuu+8jOS4jeW9seWTjeWIhuaekFxuXG4iCiAgICByZXR1cm4KICBmaQoKICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+UpyDpgJrnlKjohLHlo7PmgJ3ot69cbiIKICBhcHBlbmRfcmVwb3J0ICLliqDlm7rlo7PnmoTmnKzotKjlsLHmmK9cIuepv+iho+acjVwi4oCU4oCU5L2g55qEQVBL5aSW6Z2i5aWX5LqG5LiA5bGC5L+d5oqk5aOz44CCXG4iCiAgYXBwZW5kX3JlcG9ydCAi6L+Q6KGM5pe277yM5aOz5Lya5YWI6Kej5a+G5Ye655yf5q2j55qEQVBL5Luj56CB77yM54S25ZCO5YaN5omn6KGM44CCXG4iCiAgYXBwZW5kX3JlcG9ydCAi5omA5Lul6ISx5aOz55qE5qC45b+D5oCd6Lev5bCx5piv77yaKirlnKjlo7Pop6Plr4blkI7jgIHmiafooYzliY3vvIzmiorlhoXlrZjkuK3nmoTku6PnoIFkdW1w5Ye65p2lKirjgIJcblxuIgoKICAjIOagueaNruajgOa1i+WIsOeahOWjs+i+k+WHuumSiOWvueaAp+aVmeeoiwogIGlmIGVjaG8gIiRkZXRlY3RlZF9zaGVsbHMiIHwgZ3JlcCAtcWkgIjM2MCI7IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5uh77iPIDM2MOWKoOWbuiDohLHlo7Pmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5aOz57G75Z6LKio6IOS6jOS7o++8iOWHveaVsOaKveWPlu+8iS8g5LiJ5Luj77yIVk1Q77yJXG5cbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5pa55rOV5LiA77yaRkRleDLvvIjmnIDnroDljZXvvIzpgILlkIjmlrDmiYvvvIkqKlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4g5omL5py6Um9vdO+8jOWuieijhVhwb3NlZOahhuaetlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g5a6J6KOFRkRleDLmqKHlnZdcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjMuIOWcqEZEZXgy5Lit6YCJ5oup55uu5qCHQVBQXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDmiZPlvIDnm67moIdBUFDvvIxGRGV4MuS8muiHquWKqOWcqCAvZGF0YS9kYXRhL+WMheWQjS8g55uu5b2V5LiL55Sf5oiQZGV45paH5Lu2XG4iCiAgICBhcHBlbmRfcmVwb3J0ICI1LiDnlKhNVOeuoeeQhuWZqOaKimRleOaWh+S7tuWkjeWItuWHuuadpe+8jOeUqGphZHjmiZPlvIBcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuozvvJpGcmlkYS1ERVhEdW1w77yI5LiN6ZyA6KaBWHBvc2Vk77yJKipcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIOeUteiEkeWuieijhWZyaWRhLXRvb2xzOiBcYHBpcCBpbnN0YWxsIGZyaWRhLXRvb2xzXGBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOaJi+acuuWQr+WKqGZyaWRhLXNlcnZlclxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g6L+Q6KGMOiBcYGZyaWRhLWRleGR1bXAgLVUgLWYg5YyF5ZCNXGBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjQuIOiHquWKqGR1bXDlh7rlhoXlrZjkuK3nmoRkZXjmlofku7ZcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuInvvJrmiYvliqhIb29r77yI6L+b6Zi277yJKipcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIOeUqEZyaWRhIEhvb2sgXGBkYWx2aWsuc3lzdGVtLkRleEZpbGUubG9hZERleCgpXGBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOWcqOWKoOi9vURFWOaXtuaLpuaIqu+8jOaKiuWGheWtmOaVsOaNruS/neWtmOWIsOaWh+S7tlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMy4g6ZyA6KaB5LiA5a6a55qE6YCG5ZCR5Z+656GAXG5cbiIKICBmaQoKICBpZiBlY2hvICIkZGV0ZWN0ZWRfc2hlbGxzIiB8IGdyZXAgLXFpICLmoobmooYiOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+boe+4jyDmoobmooblronlhagg6ISx5aOz5pa55rOVXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuWjs+exu+WeiyoqOiDkuozku6PvvIjlh73mlbDmir3lj5bvvIkvIOS4ieS7o++8iFZNUOiZmuaLn+WMlu+8iVxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKueJueeCuSoqOiDmoobmoobnmoRWTVDmr5TovoPlvLrvvIzlpoLmnpzmmK/kvIHkuJrniYjlj6/og73nlKjkuoZWTVBcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuIDvvJpGQVJU77yI5o6o6I2Q77yJKipcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIEZBUlTmmK/kuIDkuKrln7rkuo5GcmlkYeeahOiHquWKqOWMluiEseWjs+W3peWFt1xuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g5pSv5oyB5qKG5qKG44CBMzYw44CB54ix5Yqg5a+G562J5aSa56eN5aOzXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiDpobnnm67lnLDlnYA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5iaW5nbGVuZ3l1ZS9GQVJUXG4iCiAgICBhcHBlbmRfcmVwb3J0ICI0LiDmjInnhadSRUFETUXphY3nva7njq/looPvvIzov5DooYzljbPlj6/oh6rliqjohLHlo7NcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuozvvJp5b3Vwa++8iOWfuuS6jk1hZ2lza++8iSoqXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiDpnIDopoHliLflhaV5b3Vwa+eahE1hZ2lza+aooeWdl1xuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g6YeN5ZCv5omL5py677yM6YCJ5oup55uu5qCHQVBQXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIzLiB5b3Vwa+S8muWcqOi/kOihjOaXtuiHquWKqGR1bXDlh7rljp/lp4tERVhcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjQuIOmhueebruWcsOWdgDogaHR0cHM6Ly9naXRodWIuY29tL1lvdWxvci9Zb3Vwa1xuXG4iCiAgZmkKCiAgaWYgZWNobyAiJGRldGVjdGVkX3NoZWxscyIgfCBncmVwIC1xaSAi54ix5Yqg5a+GIjsgdGhlbgogICAgYXBwZW5kX3JlcG9ydCAiIyMjIPCfm6HvuI8g54ix5Yqg5a+GIOiEseWjs+aWueazlVxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirlo7PnsbvlnosqKjog5LqM5Luj77yI5Ye95pWw5oq95Y+W77yJLyDkuInku6PvvIhWTVDvvIlcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuIDvvJpGRGV4MioqXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiDlkIwzNjDliqDlm7rnmoRGRGV4MuaWueazlVxuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g54ix5Yqg5a+G55qE5LqM5Luj5aOz55SoRkRleDLmiJDlip/njofovoPpq5hcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirmlrnms5XkuozvvJpmcmlkYS1kZXhkdW1wKipcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIFxgcGlwIGluc3RhbGwgZnJpZGEtZGV4ZHVtcFxgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiBcYGZyaWRhLWRleGR1bXAgLVUgLWYg5YyF5ZCNXGBcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjMuIOiHquWKqGR1bXDlhoXlrZjkuK3nmoRERVhcblxuIgogIGZpCgogIGlmIGVjaG8gIiRkZXRlY3RlZF9zaGVsbHMiIHwgZ3JlcCAtcWkgIuiFvuiuryI7IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5uh77iPIOiFvuiur+S5kOWbuiDohLHlo7Pmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5aOz57G75Z6LKio6IOS6jOS7o++8iOWHveaVsOaKveWPlu+8iVxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuaWueazleS4gO+8mkZEZXgyIC8gZnJpZGEtZGV4ZHVtcCoqXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIxLiDohb7orq/kuZDlm7rkuLvopoHmmK/kuozku6Plo7PvvIzohLHlo7Pnm7jlr7nlrrnmmJNcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjIuIOeUqEZEZXgy5oiWZnJpZGEtZGV4ZHVtcOmDveiDveaQnuWumlxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuaWueazleS6jO+8muaJi+WKqGR1bXAqKlxuIgogICAgYXBwZW5kX3JlcG9ydCAiMS4g55SoRnJpZGEgSG9vayBcYG9wZW5EZXhGaWxlTmF0aXZlXGAg5oiWIFxgRGV4RmlsZTo6T3Blbk1lbW9yeVxgXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIyLiDlnKjlh73mlbDov5Tlm57liY3kv53lrZhERVjmlbDmja5cblxuIgogIGZpCgogIGlmIGVjaG8gIiRkZXRlY3RlZF9zaGVsbHMiIHwgZ3JlcCAtcWkgIueZvuW6piI7IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5uh77iPIOeZvuW6puWKoOWbuiDohLHlo7Pmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5aOz57G75Z6LKio6IOS6jOS7o++8iOWHveaVsOaKveWPlu+8iVxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuaWueazlSoqOiBGRGV4MiDmiJYgZnJpZGEtZGV4ZHVtcFxuIgogICAgYXBwZW5kX3JlcG9ydCAi55m+5bqm5Yqg5Zu655u45a+5566A5Y2V77yM5LqM5Luj5aOz55So5bi46KeE5bel5YW35Y2z5Y+v6ISx5aOzXG5cbiIKICBmaQoKICBpZiBlY2hvICIkZGV0ZWN0ZWRfc2hlbGxzIiB8IGdyZXAgLXFpICLnvZHmmJMiOyB0aGVuCiAgICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+boe+4jyDnvZHmmJPmmJPnm74g6ISx5aOz5pa55rOVXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKuWjs+exu+WeiyoqOiDkuozku6Mv5LiJ5LujXG5cbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5pa55rOVKio6IEZBUlQg5oiWIHlvdXBrXG4iCiAgICBhcHBlbmRfcmVwb3J0ICLnvZHmmJPmmJPnm77nmoTlo7Pmr5TovoPmlrDvvIzlu7rorq7nlKhGQVJU5oiWeW91cGvov5nnp43oh6rliqjljJblt6XlhbdcblxuIgogIGZpCgogIGlmIGVjaG8gIiRkZXRlY3RlZF9zaGVsbHMiIHwgZ3JlcCAtcWkgIuWHoOe7tCI7IHRoZW4KICAgIGFwcGVuZF9yZXBvcnQgIiMjIyDwn5uh77iPIOWHoOe7tOWuieWFqCDohLHlo7Pmlrnms5VcbiIKICAgIGFwcGVuZF9yZXBvcnQgIioq5aOz57G75Z6LKio6IOWbm+S7o++8iOa6kOeggee6p+iZmuaLn+WMliAvIEtpd2lWTe+8iVxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICLimqDvuI8gKirorablkYoqKjog5Yeg57u05a6J5YWo55So5LqG56ys5Zub5Luj5aOz77yIS2l3aVZN77yJ77yM6L+Z5piv55uu5YmN5pyA5by655qE5L+d5oqk5pa55qGI77yBXG4iCiAgICBhcHBlbmRfcmVwb3J0ICLkvKDnu5/nmoTohLHlo7Plt6XlhbfvvIhGRGV4MuOAgWZyaWRhLWRleGR1bXDvvInlr7nov5nnp43lo7Pln7rmnKzml6DmlYjjgIJcblxuIgogICAgYXBwZW5kX3JlcG9ydCAiKirlj6/og73nmoTmgJ3ot6/vvIjmnoHpmr7vvIkqKjpcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjEuIOeUqElEQSBQcm/liIbmnpBsaWJrd3NjbW0uc2/kuK3nmoRWTeino+mHiuWZqFxuIgogICAgYXBwZW5kX3JlcG9ydCAiMi4g6YCG5ZCRVk3mjIfku6Tpm4bvvIznvJblhpnlj43nvJbor5HlmahcbiIKICAgIGFwcGVuZF9yZXBvcnQgIjMuIOW3peS9nOmHj+W3qOWkp++8jOmAmuW4uOmcgOimgeaVsOWRqOeUmuiHs+aVsOaciFxuXG4iCiAgICBhcHBlbmRfcmVwb3J0ICIqKueOsOWunuW7uuiurioqOlxuIgogICAgYXBwZW5kX3JlcG9ydCAiLSDlpoLmnpzmmK/oh6rlt7HnmoRBUFDvvIzogZTns7vlh6Dnu7Tlronlhajojrflj5bmnKrliqDlm7rniYjmnKxcbiIKICAgIGFwcGVuZF9yZXBvcnQgIi0g5aaC5p6c5piv5Yir5Lq655qEQVBQ77yM6ICD6JmR5LuO5YW25LuW5YWl5Y+j5YiG5p6Q77yI5oqT5YyF44CBQVBJ5YiG5p6Q77yJXG4iCiAgICBhcHBlbmRfcmVwb3J0ICItIOWbm+S7o+Wjs+ebruWJjeWHoOS5juayoeaciemAmueUqOiEseWjs+aWueahiFxuXG4iCiAgZmkKCiAgIyDpgJrnlKjohLHlo7Plt6XlhbfmjqjojZAKICBhcHBlbmRfcmVwb3J0ICIjIyMg8J+nsCDpgJrnlKjohLHlo7Plt6XlhbfmjqjojZBcblxuIgogIGFwcGVuZF9yZXBvcnQgInwg5bel5YW3IHwg6YCC55So5Zy65pmvIHwg6Zq+5bqmIHwg6ZO+5o6lIHxcbiIKICBhcHBlbmRfcmVwb3J0ICJ8LS0tfC0tLXwtLS18LS0tfFxuIgogIGFwcGVuZF9yZXBvcnQgInwgRkRleDIgfCDkuozku6Plo7PvvIxYcG9zZWTnjq/looMgfCDirZDirZAgfCDphbflrokvIEdpdGh1YiB8XG4iCiAgYXBwZW5kX3JlcG9ydCAifCBmcmlkYS1kZXhkdW1wIHwg5LqM5Luj5aOz77yMRnJpZGHnjq/looMgfCDirZDirZAgfCBwaXAgaW5zdGFsbCBmcmlkYS1kZXhkdW1wIHxcbiIKICBhcHBlbmRfcmVwb3J0ICJ8IEZBUlQgfCDlpJrnp43lo7PvvIxGcmlkYeeOr+WigyB8IOKtkOKtkOKtkCB8IGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5iaW5nbGVuZ3l1ZS9GQVJUIHxcbiIKICBhcHBlbmRfcmVwb3J0ICJ8IHlvdXBrIHwg5aSa56eN5aOz77yMTWFnaXNr546v5aKDIHwg4q2Q4q2Q4q2QIHwgaHR0cHM6Ly9naXRodWIuY29tL1lvdWxvci9Zb3VwayB8XG4iCiAgYXBwZW5kX3JlcG9ydCAifCBVbmlkYmcgfCDmqKHmi5/miafooYxTT++8jOaXoOmcgOecn+acuiB8IOKtkOKtkOKtkOKtkCB8IGh0dHBzOi8vZ2l0aHViLmNvbS96aGtsMDIyOC91bmlkYmcgfFxuIgogIGFwcGVuZF9yZXBvcnQgInwgSURBIFBybyB8IOWIhuaekE5hdGl2ZeS7o+eggSB8IOKtkOKtkOKtkOKtkOKtkCB8IOWVhuS4mui9r+S7tiB8XG4iCiAgYXBwZW5kX3JlcG9ydCAifCBHaGlkcmEgfCDliIbmnpBOYXRpdmXku6PnoIHvvIjlhY3otLnvvIkgfCDirZDirZDirZDirZDirZAgfCBodHRwczovL2doaWRyYS1zcmUub3JnLyB8XG5cbiIKCiAgYXBwZW5kX3JlcG9ydCAiIyMjIOKaoO+4jyDohLHlo7Pms6jmhI/kuovpoblcblxuIgogIGFwcGVuZF9yZXBvcnQgIjEuICoq6ZyA6KaBUm9vdCoqOiDlh6DkuY7miYDmnInohLHlo7Plt6Xlhbfpg73pnIDopoFSb2905p2D6ZmQXG4iCiAgYXBwZW5kX3JlcG9ydCAiMi4gKirms5Xlvovpo47pmakqKjog5Y+q6ISx5aOz6Ieq5bex5oul5pyJ54mI5p2D55qEQVBQ77yM5LiN6KaB55So5LqO6Z2e5rOV55So6YCUXG4iCiAgYXBwZW5kX3JlcG9ydCAiMy4gKirlj43osIPor5UqKjog5Yqg5Zu65aOz6YCa5bi45pyJ5Y+N6LCD6K+V77yM5Y+v6IO96ZyA6KaB5YWI57uV6L+HXG4iCiAgYXBwZW5kX3JlcG9ydCAiNC4gKirlpLHotKXmraPluLgqKjog5LiJ5LujL+Wbm+S7o+Wjs+iEseWjs+aIkOWKn+eOh+W+iOS9ju+8jOS4jeimgeawlOmmgVxuIgogIGFwcGVuZF9yZXBvcnQgIjUuICoq5aSH5Lu95Y6fQVBLKio6IOiEseWjs+WJjeS4gOWumuimgeWkh+S7veWOn+Wni0FQS1xuXG4iCn0KCiMgPT09PT09PT09PT09PT09PT09PT0g5Li75rWB56iLID09PT09PT09PT09PT09PT09PT09Cm1haW4oKSB7CiAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICBlY2hvICIgQW5kcm9pZCBBUEsg5Yqg5Zu65aOz5qOA5rWL5bel5YW3IgogIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgZWNobyAiIgogIGxvZ19pbmZvICLnm67moIc6ICRJTlBVVF9GSUxFIgogIGxvZ19pbmZvICLovpPlh7o6ICRPVVRQVVRfRElSIgogIGVjaG8gIiIKCiAgaW5pdF9yZXBvcnQKCiAgbG9jYWwgZXh0cmFjdF9kaXIKICBleHRyYWN0X2Rpcj0kKHBoYXNlX2V4dHJhY3QpCgogIGxvY2FsIGRldGVjdGVkCiAgZGV0ZWN0ZWQ9JChwaGFzZV9kZXRlY3Rfc28gIiRleHRyYWN0X2RpciIpCgogIHBoYXNlX2RldGVjdF9tYW5pZmVzdCAiJGV4dHJhY3RfZGlyIgogIHBoYXNlX2FuYWx5emVfZGV4ICIkZXh0cmFjdF9kaXIiCiAgcGhhc2VfZ2VuZXJhdGVfZ3VpZGUgIiRkZXRlY3RlZCIKCiAgYXBwZW5kX3JlcG9ydCAiIyMgNi4g5YiG5p6Q5a6M5oiQXG4iCiAgYXBwZW5kX3JlcG9ydCAiLSDml7bpl7Q6ICQoZGF0ZSAnKyVZLSVtLSVkICVIOiVNOiVTJylcbiIKICBhcHBlbmRfcmVwb3J0ICItIOi+k+WHuuebruW9lTogXGAkT1VUUFVUX0RJUlxgXG4iCgogIGVjaG8gIiIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogIGlmIFtbIC1uICIkZGV0ZWN0ZWQiIF1dOyB0aGVuCiAgICBsb2dfd2FybiAi5qOA5rWL5Yiw5Yqg5Zu65aOzOiAkZGV0ZWN0ZWQiCiAgZWxzZQogICAgbG9nX29rICLmnKrmo4DmtYvliLDluLjop4HliqDlm7rlo7MiCiAgZmkKICBlY2hvICIiCiAgZWNobyAiICDmiqXlkYrmlofku7Y6ICRSRVBPUlRfRklMRSIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Igp9CgptYWluICIkQCIK
B64EOF_detect-shell.sh
chmod +x "$DECODE_DIR/detect-shell.sh" 2>/dev/null

echo "恢复: find-api-calls.sh ..."
base64 -d << 'B64EOF_find-api-calls.sh' > "$DECODE_DIR/find-api-calls.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGZpbmQtYXBpLWNhbGxzLnNoIOKAlCDku47lj43nvJbor5HmupDnoIHkuK3mj5Dlj5YgQVBJIOiwg+eUqApzZXQgLWV1byBwaXBlZmFpbAoKU1JDX0RJUj0iIgpNT0RFPSJhbGwiCgp1c2FnZSgpIHsKICBjYXQgPDxFT0YKVXNhZ2U6IGZpbmQtYXBpLWNhbGxzLnNoIDxzb3VyY2VzX2Rpcj4gWy0tYWxsXQpFT0YKICBleGl0IDAKfQoKaWYgW1sgJCMgLWx0IDEgXV07IHRoZW4gdXNhZ2U7IGZpClNSQ19ESVI9IiQxIgpbWyAkIyAtZ3QgMSBdXSAmJiBNT0RFPSIkMiIKCmlmIFtbICEgLWQgIiRTUkNfRElSIiBdXTsgdGhlbgogIGVjaG8gIumUmeivrzog55uu5b2V5LiN5a2Y5ZyoICRTUkNfRElSIgogIGV4aXQgMQpmaQoKZWNobyAiPT09PSBSZXRyb2ZpdCBBbm5vdGF0aW9ucyA9PT09IgpncmVwIC1ybmlFICdAKEdFVHxQT1NUfFBVVHxERUxFVEV8UEFUQ0h8SEVBRHxPUFRJT05TKVxzKlwoIicgIiRTUkNfRElSIiAyPi9kZXYvbnVsbCB8IGhlYWQgLTIwIHx8IHRydWUKCmVjaG8gIiIKZWNobyAiPT09PSBSZXRyb2ZpdCBIZWFkZXJzICYgUGFyYW1ldGVycyA9PT09IgpncmVwIC1ybmlFICdAKEhlYWRlcnxRdWVyeXxQYXRofEJvZHl8RmllbGR8UGFydHxGb3JtVXJsRW5jb2RlZHxNdWx0aXBhcnQpJyAiJFNSQ19ESVIiIDI+L2Rldi9udWxsIHwgaGVhZCAtMjAgfHwgdHJ1ZQoKZWNobyAiIgplY2hvICI9PT09IFJldHJvZml0IEJhc2UgVVJMID09PT0iCmdyZXAgLXJuaUUgJ2Jhc2VVcmxccypcKHxcLmNyZWF0ZVxzKlwoJyAiJFNSQ19ESVIiIDI+L2Rldi9udWxsIHwgaGVhZCAtMjAgfHwgdHJ1ZQoKZWNobyAiIgplY2hvICI9PT09IE9rSHR0cCBSZXF1ZXN0IEJ1aWxkaW5nID09PT0iCmdyZXAgLXJuaUUgJ1JlcXVlc3RcLkJ1aWxkZXJ8T2tIdHRwQ2xpZW50fGFkZEludGVyY2VwdG9yJyAiJFNSQ19ESVIiIDI+L2Rldi9udWxsIHwgaGVhZCAtMjAgfHwgdHJ1ZQoKZWNobyAiIgplY2hvICI9PT09IE9rSHR0cCBVUkwgQ29uc3RydWN0aW9uID09PT0iCmdyZXAgLXJuaUUgJ0h0dHBVcmxcLnBhcnNlfFwudXJsXHMqXCgnICIkU1JDX0RJUiIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCB8fCB0cnVlCgplY2hvICIiCmVjaG8gIj09PT0gVm9sbGV5IFJlcXVlc3RzID09PT0iCmdyZXAgLXJuaUUgJ1N0cmluZ1JlcXVlc3R8SnNvbk9iamVjdFJlcXVlc3R8SnNvbkFycmF5UmVxdWVzdHxSZXF1ZXN0UXVldWUnICIkU1JDX0RJUiIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCB8fCB0cnVlCgplY2hvICIiCmVjaG8gIj09PT0gSGFyZGNvZGVkIFVSTHMgKGh0dHA6Ly8gYW5kIGh0dHBzOi8vKSA9PT09IgpncmVwIC1ybm9pRSAnaHR0cHM/Oi8vW14iXHM8Pl0rJyAiJFNSQ19ESVIiIDI+L2Rldi9udWxsIHwgaGVhZCAtMzAgfHwgdHJ1ZQoKZWNobyAiIgplY2hvICI9PT09IEh0dHBVUkxDb25uZWN0aW9uID09PT0iCmdyZXAgLXJuaUUgJ0h0dHBVUkxDb25uZWN0aW9ufG9wZW5Db25uZWN0aW9ufHNldFJlcXVlc3RNZXRob2QnICIkU1JDX0RJUiIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCB8fCB0cnVlCgplY2hvICIiCmVjaG8gIj09PT0gV2ViVmlldyBVUkxzID09PT0iCmdyZXAgLXJuaUUgJ2xvYWRVcmx8d2ViVmlld0NsaWVudHxzaG91bGRPdmVycmlkZVVybExvYWRpbmcnICIkU1JDX0RJUiIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCB8fCB0cnVlCgplY2hvICIiCmVjaG8gIj09PT0gQXV0aGVudGljYXRpb24gJiBBUEkgS2V5cyA9PT09IgpncmVwIC1ybmlFICcoYXBpW18tXT9rZXl8YXBpa2V5fHRva2VufHNlY3JldHxhdXRofGJlYXJlcnxjbGllbnRbXy1dP2lkfGNsaWVudFtfLV0/c2VjcmV0KVxzKls6PV0nICIkU1JDX0RJUiIgMj4vZGV2L251bGwgfCBoZWFkIC0yMCB8fCB0cnVlCgplY2hvICIiCmVjaG8gIj09PT0gQmFzZSBVUkxzIGFuZCBDb25zdGFudHMgPT09PSIKZ3JlcCAtcm5pRSAnKEJBU0VfVVJMfFNFUlZFUl9VUkx8QVBJX1VSTHxIT1NUfERPTUFJTilccypbOj1dJyAiJFNSQ19ESVIiIDI+L2Rldi9udWxsIHwgaGVhZCAtMjAgfHwgdHJ1ZQo=
B64EOF_find-api-calls.sh
chmod +x "$DECODE_DIR/find-api-calls.sh" 2>/dev/null

echo "恢复: find-security-patterns.sh ..."
base64 -d << 'B64EOF_find-security-patterns.sh' > "$DECODE_DIR/find-security-patterns.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGZpbmQtc2VjdXJpdHktcGF0dGVybnMuc2gg4oCUIOWcqOWPjee8luivkea6kOeggeS4reaQnOe0ouW4uOingeWuieWFqC/kuJrliqHpgLvovpHmqKHlvI8KIyDljIXlkKvvvJrkvJrlkZjpqozor4HjgIFHR+S/ruaUueWZqOajgOa1i+OAgeW8ueeql+aPkOekuuOAgeetvuWQjemqjOivgeOAgeWPjeiwg+ivleOAgeWKoOWvhueul+azleetiQojIOi+k+WHuuWMheWQqyBNVOeuoeeQhuWZqCDkv67mlLnmlZnnqIsKc2V0IC1ldW8gcGlwZWZhaWwKCnVzYWdlKCkgewogIGNhdCA8PEVPRgpVc2FnZTogZmluZC1zZWN1cml0eS1wYXR0ZXJucy5zaCA8c291cmNlLWRpcj4gW09QVElPTlNdCuWcqOWPjee8luivkeeahCBKYXZhL0tvdGxpbiDmupDnoIHkuK3mkJzntKLlronlhajnm7jlhbPnmoTku6PnoIHmqKHlvI/jgIIKCuWPguaVsDoKICA8c291cmNlLWRpcj4gICAg5Y+N57yW6K+R5ZCO55qE5rqQ56CB55uu5b2VCgrpgInpobk6CiAgLS12aXAgICAgICAgICAgIOS7heaQnOe0ouS8muWRmC9WSVAg6aqM6K+B6YC76L6RCiAgLS1nZyAgICAgICAgICAgIOS7heaQnOe0oiBHYW1lR3VhcmRpYW4gLyDkv67mlLnlmajmo4DmtYvpgLvovpEKICAtLXBvcHVwICAgICAgICAg5LuF5pCc57Si5by556qXL+aPkOekuumAu+i+kQogIC0tYWQgICAgICAgICAgICDku4XmkJzntKLlub/lkYrpgLvovpHvvIjlvIDlsY8v5YaF572uL+WbveWGheWkllNES++8iQogIC0tc2lnbmF0dXJlICAgICDku4XmkJzntKLnrb7lkI3pqozor4EgLyDlrozmlbTmgKfmoKHpqozpgLvovpEKICAtLWFudGlkZWJ1ZyAgICAg5LuF5pCc57Si5Y+N6LCD6K+VIC8g5Y+N5qih5ouf5Zmo6YC76L6RCiAgLS1jcnlwdG8gICAgICAgIOS7heaQnOe0ouWKoOWvhueul+azlSAvIOWvhumSpeehrOe8lueggQogIC0tYWxsICAgICAgICAgICDmkJzntKLmiYDmnInmqKHlvI/vvIjpu5jorqTvvIkKICAtaCwgLS1oZWxwICAgICAg5pi+56S65biu5YqpCgrovpPlh7rmoLzlvI86CiAgW+mjjumZqeetiee6p10g57G75YirIHwg5paH5Lu2OuihjOWPtyB8IOWMuemFjeWGheWuuQogIFtNVOeuoeeQhuWZqOS/ruaUuV0g5YW35L2T5L+u5pS55q2l6aqkLi4uCkVPRgogIGV4aXQgMAp9CgpTT1VSQ0VfRElSPSIiClNFQVJDSF9WSVA9ZmFsc2UKU0VBUkNIX0dHPWZhbHNlClNFQVJDSF9QT1BVUD1mYWxzZQpTRUFSQ0hfQUQ9ZmFsc2UKU0VBUkNIX1NJR05BVFVSRT1mYWxzZQpTRUFSQ0hfQU5USURFQlVHPWZhbHNlClNFQVJDSF9DUllQVE89ZmFsc2UKU0VBUkNIX0FMTD10cnVlCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICBjYXNlICIkMSIgaW4KICAgIC0tdmlwKSAgICAgICBTRUFSQ0hfVklQPXRydWU7ICAgICAgIFNFQVJDSF9BTEw9ZmFsc2U7IHNoaWZ0IDs7CiAgICAtLWdnKSAgICAgICAgU0VBUkNIX0dHPXRydWU7ICAgICAgICBTRUFSQ0hfQUxMPWZhbHNlOyBzaGlmdCA7OwogICAgLS1wb3B1cCkgICAgIFNFQVJDSF9QT1BVUD10cnVlOyAgICAgU0VBUkNIX0FMTD1mYWxzZTsgc2hpZnQgOzsKICAgIC0tYWQpICAgICAgICBTRUFSQ0hfQUQ9dHJ1ZTsgICAgICAgIFNFQVJDSF9BTEw9ZmFsc2U7IHNoaWZ0IDs7CiAgICAtLXNpZ25hdHVyZSkgU0VBUkNIX1NJR05BVFVSRT10cnVlOyBTRUFSQ0hfQUxMPWZhbHNlOyBzaGlmdCA7OwogICAgLS1hbnRpZGVidWcpIFNFQVJDSF9BTlRJREVCVUc9dHJ1ZTsgU0VBUkNIX0FMTD1mYWxzZTsgc2hpZnQgOzsKICAgIC0tY3J5cHRvKSAgICBTRUFSQ0hfQ1JZUFRPPXRydWU7ICAgIFNFQVJDSF9BTEw9ZmFsc2U7IHNoaWZ0IDs7CiAgICAtLWFsbCkgICAgICAgU0VBUkNIX0FMTD10cnVlOyBzaGlmdCA7OwogICAgLWh8LS1oZWxwKSAgIHVzYWdlIDs7CiAgICAtKikgICAgICAgICAgZWNobyAiRXJyb3I6IFVua25vd24gb3B0aW9uICQxIiA+JjI7IHVzYWdlIDs7CiAgICAqKSAgICAgICAgICAgU09VUkNFX0RJUj0iJDEiOyBzaGlmdCA7OwogIGVzYWMKZG9uZQoKaWYgW1sgLXogIiRTT1VSQ0VfRElSIiBdXTsgdGhlbgogIGVjaG8gIkVycm9yOiBObyBzb3VyY2UgZGlyZWN0b3J5IHNwZWNpZmllZC4iID4mMgogIHVzYWdlCmZpCgppZiBbWyAhIC1kICIkU09VUkNFX0RJUiIgXV07IHRoZW4KICBlY2hvICJFcnJvcjogRGlyZWN0b3J5IG5vdCBmb3VuZDogJFNPVVJDRV9ESVIiID4mMgogIGV4aXQgMQpmaQoKR1JFUF9PUFRTPSItcm4gLS1pbmNsdWRlPSouamF2YSAtLWluY2x1ZGU9Ki5rdCIKCiMg6L6F5Yqp77ya5omn6KGMIGdyZXAg5bm25qC85byP5YyW6L6T5Ye677yM5ZCM5pe26L6T5Ye6IE1U566h55CG5Zmo5L+u5pS55pWZ56iLCiMg5Y+C5pWwOiAkMT3po47pmannrYnnuqcgJDI957G75YirICQzPWdyZXDmraPliJkgJDQ9TVTkv67mlLnmlZnnqIvmoIfpopggJDU9TVTkv67mlLnmlZnnqIvlhoXlrrkKcnVuX3BhdHRlcm5fd2l0aF9tdCgpIHsKICBsb2NhbCByaXNrPSIkMSIKICBsb2NhbCBjYXRlZ29yeT0iJDIiCiAgbG9jYWwgcGF0dGVybj0iJDMiCiAgbG9jYWwgbXRfdGl0bGU9IiQ0IgogIGxvY2FsIG10X2d1aWRlPSIkNSIKCiAgbG9jYWwgcmVzdWx0cwogIHJlc3VsdHM9JChncmVwICRHUkVQX09QVFMgLUUgIiRwYXR0ZXJuIiAiJFNPVVJDRV9ESVIiIDI+L2Rldi9udWxsIHx8IHRydWUpCgogIGlmIFtbIC16ICIkcmVzdWx0cyIgXV07IHRoZW4KICAgIHJldHVybiAwCiAgZmkKCiAgZWNobyAiPT09PSAkY2F0ZWdvcnkgPT09PSIKICBlY2hvICIkcmVzdWx0cyIgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KICAgIGxvY2FsIGZpbGVfcGF0aAogICAgbG9jYWwgbGluZV9ubwogICAgbG9jYWwgY29udGVudAogICAgZmlsZV9wYXRoPSQoZWNobyAiJGxpbmUiIHwgY3V0IC1kOiAtZjEgfCBzZWQgInN8JHtTT1VSQ0VfRElSfS98fCIpCiAgICBsaW5lX25vPSQoZWNobyAiJGxpbmUiIHwgY3V0IC1kOiAtZjIpCiAgICBjb250ZW50PSQoZWNobyAiJGxpbmUiIHwgY3V0IC1kOiAtZjMtKQogICAgaWYgW1sgJHsjY29udGVudH0gLWd0IDIwMCBdXTsgdGhlbgogICAgICBjb250ZW50PSIke2NvbnRlbnQ6MDoyMDB9Li4uIgogICAgZmkKICAgIGVjaG8gIlskcmlza10gJGNhdGVnb3J5IHwgJHtmaWxlX3BhdGh9OiR7bGluZV9ub30gfCAke2NvbnRlbnR9IgogIGRvbmUKCiAgZWNobyAiIgogIGVjaG8gIltNVOeuoeeQhuWZqOS/ruaUuV0gJG10X3RpdGxlIgogIGVjaG8gIiRtdF9ndWlkZSIKICBlY2hvICIiCn0KCiMgPT09PT09PT09PT09PT09PT09PT0gMS4g5Lya5ZGYL1ZJUCDpqozor4HpgLvovpEgPT09PT09PT09PT09PT09PT09PT0Kc2VhcmNoX3ZpcCgpIHsKICBlY2hvICI9PT09IFZJUCAvIOS8muWRmOmqjOivgemAu+i+kSA9PT09IgogIGVjaG8gIiIKCiAgIyAxLjEg5Lya5ZGY54q25oCB5biD5bCU5Yik5patCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAiVklQ54q25oCB5biD5bCU5Yik5patIiBcCiAgICAnKGlzVmlwfGlzUHJvfGlzUHJlbWl1bXxpc01lbWJlcnxpc1N1YnNjcmliZWR8aXNQYWlkVXNlcnxjaGVja1N1YnNjcmlwdGlvbnxoYXNBY3RpdmVTdWJzY3JpcHRpb24pXHMqXChccypcKScgXAogICAgIuW8uuWItui/lOWbnnRydWXnu5Xov4dWSVDnirbmgIHliKTmlq0iIFwKIuatpemqpO+8mgoxLiDnlKhNVOeuoeeQhuWZqOaJk+W8gEFQSyDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0ouS4iumdouWumuS9jeWIsOeahOexu+WQje+8iOWmgiBpc1ZpcO+8iQoyLiDmib7liLDmlrnms5XkvZPvvIzmn6XnnIsgc21hbGkg5Luj56CB5Lit6L+U5Zue5YC85L2N572u77yI6YCa5bi45pivIC5sb2NhbHMg5ZCO55qEIGNvbnN0LzQgdjAsIDB4MCDmiJYgaWYtZXF677yJCjMuIOWwhui/lOWbnuW4g+WwlOWAvOeahOS9jee9ruaUueS4uu+8mgogICBjb25zdC80IHYwLCAweDEKICAgcmV0dXJuIHYwCjQuIOS/neWtmOW5tuetvuWQjeWuieijheOAguatpOaXtuaJgOacieiwg+eUqCBpc1ZpcCgpIOeahOWcsOaWuemDveS8mui/lOWbniB0cnVl44CCIgoKICAjIDEuMiBWSVDnrYnnuqfov5Tlm54KICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICJWSVDnrYnnuqfov5Tlm54iIFwKICAgICcoZ2V0VmlwTGV2ZWx8Z2V0TWVtYmVyTGV2ZWx8Z2V0UHJlbWl1bUxldmVsfGdldFVzZXJHcmFkZXx2aXBMZXZlbHxtZW1iZXJMZXZlbCknIFwKICAgICLnoaznvJbnoIHov5Tlm57mnIDpq5hWSVDnrYnnuqciIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBnZXRWaXBMZXZlbCDmlrnms5UKMi4g5ZyoIHNtYWxpIOS4reaJvuWIsOi/lOWbnuaVtOaVsOeahOS9jee9ru+8iHJldHVybiB2WO+8iQozLiDlnKggcmV0dXJuIOWJjeaPkuWFpe+8mgogICBjb25zdC80IHZYLCAweDMgICAjIOWBh+iuvuacgOmrmOetiee6p+S4ujPvvIzmoLnmja7lrp7pmYXmg4XlhrXosIPmlbQKICAgcmV0dXJuIHZYCjQuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAxLjMg5Yiw5pyf5pe26Ze05qCh6aqMCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAi5Lya5ZGY5Yiw5pyf5pe26Ze05qCh6aqMIiBcCiAgICAnKGV4cGlyZVRpbWV8ZXhwaXJlX2RhdGV8dmlwX2V4cGlyZXxzdWJzY3JpcHRpb25fZW5kfHZhbGlkVW50aWx8bWVtYmVyc2hpcEV4cGlyeXxjaGVja0V4cGlyeSknIFwKICAgICLkv67mlLnliLDmnJ/ml7bpl7TmiLPkuLrmnoHlpKflgLzmiJbnu5Xov4fliKTmlq0iIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBleHBpcmVUaW1lIOaIliBjaGVja0V4cGlyeSDnm7jlhbPmlrnms5UKMi4g5om+5Yiw5q+U6L6D5b2T5YmN5pe26Ze05LiO5Yiw5pyf5pe26Ze055qE6YC76L6R77yI6YCa5bi45pivIGNtcC1sb25nIOaIliBpZi1sZe+8iQozLiDmlrnmoYhB77ya5bCG5Yiw5pyf5pe26Ze05bi46YeP5pS55Li65p6B5aSn5YC877yI5aaCIDB4N0ZGRkZGRkZGRkZGRkZGRu+8iQo0LiDmlrnmoYhC77ya5bCG5p2h5Lu26Lez6L2sIGlmLWxlIOaUueS4uuaXoOadoeS7tui3s+i9rCBnb3Rv77yM5L2/6L+H5pyf5Yik5pat5rC46L+c6LWw5pyq6L+H5pyf5YiG5pSvCjUuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAxLjQg5LuY6LS56Kej6ZSB5Zue6LCDCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAi5LuY6LS56Kej6ZSB5Zue6LCDIiBcCiAgICAnKHVubG9ja1ByZW1pdW18dW5sb2NrVmlwfHVubG9ja1Byb3xlbmFibGVQcmVtaXVtfHB1cmNoYXNlU3VjY2Vzc3xvblB1cmNoYXNlU3VjY2Vzc3xjb25zdW1lUHVyY2hhc2UpJyBcCiAgICAi5qih5ouf5pSv5LuY5oiQ5Yqf5Zue6LCDIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgb25QdXJjaGFzZVN1Y2Nlc3Mg5oiWIHVubG9ja1ByZW1pdW0KMi4g5om+5Yiw5pSv5LuY5oiQ5Yqf5ZCO55qE5Zue6LCD5pa55rOV77yI6YCa5bi45o6l5pS2IHB1cmNoYXNlIOWvueixoe+8iQozLiDlnKjmlrnms5XlhaXlj6PlpITnm7TmjqXosIPnlKjop6PplIHpgLvovpHvvIzot7Pov4fmlK/ku5jpqozor4HvvJoKICAg5om+5YiwIHVubG9ja1ByZW1pdW0oKSDnmoTosIPnlKjkvY3nva7vvIzlnKjmlK/ku5jmjInpkq7ngrnlh7vkuovku7bkuK3nm7TmjqXmj5LlhaUgaW52b2tlLWRpcmVjdCB7cDB9LCBMY29tL3h4eC94eHg7LT51bmxvY2tQcmVtaXVtKClWCjQuIOaIluiAheWwhuaUr+S7mOWksei0peWIhuaUr++8iGlmLWVxeu+8ieaUueS4uiBnb3RvIOaIkOWKn+WIhuaUrwo1LiDkv53lrZjnrb7lkI3jgIIiCgogICMgMS41IOacrOWcsFZJUCBTaGFyZWRQcmVmZXJlbmNlcyDmoIflv5cKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLpq5giICLmnKzlnLBWSVDmoIflv5fkvY0oU2hhcmVkUHJlZmVyZW5jZXMpIiBcCiAgICAnKCJpc192aXAifCJpc19wcm8ifCJpc19wcmVtaXVtInwiaGFzX3B1cmNoYXNlZCJ8InN1YnNjcmlwdGlvbl9hY3RpdmUifCJ1c2VyX3R5cGUifCJtZW1iZXJfc3RhdHVzIiknIFwKICAgICLkv67mlLlTaGFyZWRQcmVmZXJlbmNlc+m7mOiupOWAvOaIluebtOaOpeWGmeWFpVZJUOagh+W/lyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiICdpc192aXAnIOWtl+espuS4sgoyLiDmib7liLAgZ2V0Qm9vbGVhbignaXNfdmlwJywgZmFsc2UpIOeahOiwg+eUqAozLiDlsIbpu5jorqTlgLwgZmFsc2Ug5pS55Li6IHRydWXvvJoKICAg5om+5YiwIGNvbnN0LzQgdlgsIDB4MO+8iOm7mOiupOWAvO+8iQogICDmlLnkuLogY29uc3QvNCB2WCwgMHgxCjQuIOaIluiAheaJvuWIsOWGmeWFpVZJUOagh+W/l+eahOS9jee9ru+8jOWcqOW6lOeUqOWQr+WKqOaXtuW8uuWItuWGmeWFpSB0cnVlCjUuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAxLjYg5pyN5Yqh5ZmoVklQ5qCh6aqMCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi5pyN5Yqh5ZmoVklQ5qCh6aqM5ZON5bqUIiBcCiAgICAnKHZpcF9zdGF0dXN8dmlwX3R5cGV8bWVtYmVyX3R5cGV8dXNlcl9zdGF0dXN8YWNjb3VudF90eXBlfHByaXZpbGVnZV9sZXZlbCknIFwKICAgICJIb29r5oiW5L+u5pS55pyN5Yqh5Zmo5ZON5bqU5Lit55qEVklQ5a2X5q61IiBcCiLmraXpqqTvvJoKMS4g5aaC5p6c5bqU55So6YCa6L+HSFRUUOivt+axguiOt+WPllZJUOeKtuaAge+8jOWFiOeUqOacrOiEmuacrOaPkOWPlkFQSeerr+eCuQoyLiDkvb/nlKjmipPljIXlt6XlhbfvvIhIdHRwQ2FuYXJ5L0NoYXJsZXPvvInmi6bmiKrlk43lupQKMy4g5bCG5ZON5bqU5LitIHZpcF9zdGF0dXMg5pS55Li6IDEg5oiWIGFjdGl2ZQo0LiDlpoLpnIDmsLjkuYXkv67mlLnvvJpNVOeuoeeQhuWZqCDihpIg5pCc57Si6Kej5p6Q5ZON5bqU55qESlNPTuaWueazle+8jOaJvuWIsCB2aXBfc3RhdHVzIOeahOino+aekOS9jee9rgo1LiDlsIbop6PmnpDlkI7nmoTlgLzlvLrliLbotYvlgLzkuLogMe+8iGNvbnN0LzQgdlgsIDB4Me+8iQo2LiDkv53lrZjnrb7lkI3jgIIiCn0KCiMgPT09PT09PT09PT09PT09PT09PT0gMi4g5by556qXIC8g5o+Q56S6IOmAu+i+kSA9PT09PT09PT09PT09PT09PT09PQpzZWFyY2hfcG9wdXAoKSB7CiAgZWNobyAiPT09PSDlvLnnqpcgLyDmj5DnpLog6YC76L6RID09PT0iCiAgZWNobyAiIgoKICAjIDIuMSDlvLrliLbmm7TmlrDlvLnnqpcKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICLlvLrliLbmm7TmlrDlvLnnqpciIFwKICAgICcoY2hlY2tVcGRhdGV8Zm9yY2VVcGRhdGV8dmVyc2lvbkNvZGV8bGF0ZXN0VmVyc2lvbnxuZWVkVXBkYXRlfHVwZGF0ZVJlcXVpcmVkfGNvbXBhcmVWZXJzaW9uKScgXAogICAgIui3s+i/h+W8uuWItuabtOaWsOajgOafpeaIluWxj+iUveW8ueeqlyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIGNoZWNrVXBkYXRlIOaIliBmb3JjZVVwZGF0ZQoyLiDmib7liLDniYjmnKzlj7fmr5TovoPlkI7nmoTmnaHku7bot7PovazvvIhpZi1sZSwgaWYtZ2Ug562J77yJCjMuIOWwhuW8uuWItuabtOaWsOeahOadoeS7tui3s+i9rOaUueS4uuebuOWPjeaWueWQke+8jOaIluebtOaOpeWIoOmZpOW8ueeql+aYvuekuuS7o+egge+8mgogICDmib7liLAgQWxlcnREaWFsb2cuc2hvdygpIOiwg+eUqO+8jOWwhuWFtuWJjemdoueahOadoeS7tuWIpOaWreaUueS4uuawuOi/nOS4jea7oei2swo0LiDmiJbogIXlsIYgc2hvdygpIOiwg+eUqOabv+aNouS4uuepuuaTjeS9nO+8iG5vcO+8iQo1LiDkv53lrZjnrb7lkI3jgIIiCgogICMgMi4yIEFsZXJ0RGlhbG9nIOW8ueeqlwogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS9jiIgIkFsZXJ0RGlhbG9n5by556qXIiBcCiAgICAnKEFsZXJ0RGlhbG9nXC5CdWlsZGVyfERpYWxvZ0ludGVyZmFjZXxzZXRQb3NpdGl2ZUJ1dHRvbnxzZXROZWdhdGl2ZUJ1dHRvbnxzaG93XChcKXxjcmVhdGVcKFwpKScgXAogICAgIuWxj+iUveeJueWumuW8ueeql++8iOWFrOWRii/mj5DnpLov6K+E5YiG77yJIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgQWxlcnREaWFsb2cg5oiW5a6a5L2N5Yiw55qE5YW35L2T57G7CjIuIOaJvuWIsCBkaWFsb2cuc2hvdygpIOaIliBkaWFsb2cuY3JlYXRlKCkg55qE6LCD55So5L2N572uCjMuIOaWueahiEHvvJrlnKggc2hvdygpIOWJjeWKoOadoeS7tuWIpOaWreS9v+WFtuawuOi/nOS4jeaJp+ihjAo0LiDmlrnmoYhC77ya5bCGIGludm9rZS12aXJ0dWFsIHt2WH0sIExhbmRyb2lkL2FwcC9EaWFsb2c7LT5zaG93KClWIOabv+aNouS4uiBub3Ag5oyH5LukCjUuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAyLjMg5raI5oGv6YCa55+lL+aOqOmAgQogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS9jiIgIua2iOaBr+mAmuefpS/mjqjpgIHlvLnnqpciIFwKICAgICcoTm90aWZpY2F0aW9uTWFuYWdlcnxjcmVhdGVOb3RpZmljYXRpb25DaGFubmVsfE5vdGlmaWNhdGlvbkNvbXBhdHxwdXNoTm90aWZpY2F0aW9ufHNob3dOb3RpZmljYXRpb24pJyBcCiAgICAi5YWz6Zet6YCa55+l5by556qX5oiW5o6o6YCB5rOo5YaMIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgTm90aWZpY2F0aW9uTWFuYWdlcgoyLiDmib7liLDpgJrnn6Xlj5HpgIHmlrnms5XvvIzlsIYgbm90aWZ5KCkg6LCD55So5pu/5o2i5Li6IHJldHVybi12b2lkCjMuIOaIluiAheaJvuWIsOaOqOmAgVNES+WIneWni+WMlu+8iOWmgiBGaXJlYmFzZU1lc3NhZ2luZ1NlcnZpY2XvvInvvIzliKDpmaTms6jlhozku6PnoIEKNC4g5L+d5a2Y562+5ZCN44CCIgoKICAjIDIuNCBUb2FzdCDmj5DnpLoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkvY4iICJUb2FzdOaPkOekuiIgXAogICAgJyhUb2FzdFwubWFrZVRleHR8VG9hc3RcLkxFTkdUSF9MT05HfFRvYXN0XC5MRU5HVEhfU0hPUlQpJyBcCiAgICAi5bGP6JS9VG9hc3Tmj5DnpLrvvIjkuIDoiKzml6DpnIDlpITnkIbvvIkiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBUb2FzdC5tYWtlVGV4dAoyLiDmib7liLAgaW52b2tlLXN0YXRpYyDosIPnlKggbWFrZVRleHQg55qE5L2N572uCjMuIOWwhuaVtOS4qiBUb2FzdCDosIPnlKjmm7/mjaLkuLogbm9wIOaIliByZXR1cm4tdm9pZAo0LiDkv53lrZjnrb7lkI3jgIIiCgogICMgMi41IFNuYWNrYmFyCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5L2OIiAiU25hY2tiYXLmj5DnpLoiIFwKICAgICcoU25hY2tiYXJcLm1ha2V8U25hY2tiYXJcLkxFTkdUSCknIFwKICAgICLlsY/olL1TbmFja2Jhcu+8iOWQjFRvYXN077yJIiBcCiLmraXpqqTvvJrlkIxUb2FzdOS/ruaUueaWueazle+8jOaJvuWIsCBTbmFja2Jhci5tYWtlKCkg5ZKMIC5zaG93KCkg6LCD55So77yM5pu/5o2i5Li6IG5vcOOAgiIKCiAgIyAyLjYg6K+E5YiG5by556qXCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5L2OIiAi5bqU55So6K+E5YiG5by556qXIiBcCiAgICAnKHJhdGVBcHB8UmF0ZURpYWxvZ3xhc2tSYXRpbmd8cmV2aWV3QXBwfGluQXBwUmV2aWV3fGxhdW5jaFJldmlld0Zsb3cpJyBcCiAgICAi6Lez6L+H6K+E5YiG6K+35rGCIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgcmF0ZUFwcCDmiJYgbGF1bmNoUmV2aWV3RmxvdwoyLiDmib7liLDosIPnlKjor4TliIZBUEnnmoTmlrnms5XvvIzlsIbmlrnms5XkvZPmm7/mjaLkuLogcmV0dXJuLXZvaWQKMy4g5L+d5a2Y562+5ZCN44CCIgp9CgojID09PT09PT09PT09PT09PT09PT09IDMuIOW5v+WRiumAu+i+ke+8iOW8gOWxjy/lhoXnva4v5Zu95YaF5aSWU0RL77yJID09PT09PT09PT09PT09PT09PT09CnNlYXJjaF9hZCgpIHsKICBlY2hvICI9PT09IOW5v+WRiumAu+i+ke+8iOW8gOWxjy/lhoXnva4v5Zu95YaF5aSWU0RL77yJID09PT0iCiAgZWNobyAiIgoKICAjIDMuMSDlvIDlsY/lub/lkYoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICLlvIDlsY/lub/lkYooU3BsYXNoQWQpIiBcCiAgICAnKFNwbGFzaEFkfFNwbGFzaEFjdGl2aXR5fHNwbGFzaF9hZHxzaG93U3BsYXNofFNwbGFzaEFkTGlzdGVuZXJ8b25TcGxhc2hBZFNob3d8b25TcGxhc2hBZExvYWQpJyBcCiAgICAi6Lez6L+H5byA5bGP5bm/5ZGK5bGV56S65oiW57yp55+t562J5b6F5pe26Ze0IiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgU3BsYXNoQWQg5oiWIFNwbGFzaEFjdGl2aXR5CjIuIOaJvuWIsOW5v+WRiuWKoOi9veWujOaIkOWQjueahOWbnuiwg++8iOWmgiBvblNwbGFzaEFkTG9hZO+8iQozLiDmlrnmoYhB77ya5ZyoIG9uU3BsYXNoQWRMb2FkIOS4reebtOaOpeiwg+eUqOi3s+i9rOWIsOS4u+eVjOmdoueahOmAu+i+ke+8jOi3s+i/h+W5v+WRiuWxleekugo0LiDmlrnmoYhC77ya5om+5Yiw5bm/5ZGK5YCS6K6h5pe277yIQ291bnREb3duVGltZXLvvInvvIzlsIbmgLvml7bpl7TmlLnkuLogMCDmiJYgMQo1LiDmlrnmoYhD77ya5bCGIHNob3dTcGxhc2goKSDosIPnlKjmm7/mjaLkuLogbm9wCjYuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAzLjIg5Zu95YaF5aSW5Li75rWB5bm/5ZGKU0RLIC0g56m/5bGx55SyKFBhbmdsZSkKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICLnqb/lsbHnlLLlub/lkYooUGFuZ2xlL+WktOadoSkiIFwKICAgICcoY29tXC5ieXRlZGFuY2VcLnNka3xUVEFkU2RrfFBhbmdsZUFkfFRUTmF0aXZlRXhwcmVzc0FkfFRUUmV3YXJkVmlkZW9BZHxUVEZ1bGxTY3JlZW5WaWRlb0FkfFRUQWRDb25zdGFudHxwYW5nbGUpJyBcCiAgICAi56aB55So56m/5bGx55SyU0RL5Yid5aeL5YyW5oiW5bm/5ZGK5Yqg6L29IiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgVFRBZFNkay5pbml0IOaIliBQYW5nbGVBZAoyLiDmib7liLAgU0RLIOWIneWni+WMluS7o+egge+8iOmAmuW4uOWcqCBBcHBsaWNhdGlvbi5vbkNyZWF0ZSDkuK3vvIkKMy4g5bCGIFRUQWRTZGsuaW5pdCgpIOiwg+eUqOabv+aNouS4uiBub3Ag5oiWIHJldHVybi12b2lkCjQuIOaIluiAheaJvuWIsOW5v+WRiuWKoOi9veaWueazle+8iGxvYWRBZO+8ie+8jOWwhuaWueazleS9k+abv+aNouS4uuebtOaOpeWbnuiwgyBvbkVycm9yCjUuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAzLjMg5LyY6YeP5rGHKEdEVCkKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICLkvJjph4/msYflub/lkYooR0RUL+iFvuiurykiIFwKICAgICcoY29tXC5xcVwuZVwuYWRzfEdEVEFETWFuYWdlcnxHRFROYXRpdmVFeHByZXNzQWR8R0RUUmV3YXJkVmlkZW9BZHxVbmlmaWVkQmFubmVyVmlld3xVbmlmaWVkSW50ZXJzdGl0aWFsQUR8Z2R0KScgXAogICAgIuemgeeUqOS8mOmHj+axh1NES+WIneWni+WMluaIluW5v+WRiuWKoOi9vSIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIEdEVEFETWFuYWdlciDmiJYgY29tLnFxLmUuYWRzCjIuIOaJvuWIsCBHRFRBRE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5pbml0V2l0aCgpIOiwg+eUqAozLiDlsIbliJ3lp4vljJbosIPnlKjmm7/mjaLkuLogbm9wCjQuIOaIluiAheaJvuWIsOW5v+WRiuWxleekuuaWueazle+8jOWwhiBzaG93KCkg5pu/5o2i5Li6IG5vcAo1LiDkv53lrZjnrb7lkI3jgIIiCgogICMgMy40IOeZvuW6puiBlOebnwogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS4rSIgIueZvuW6puiBlOebn+W5v+WRiiIgXAogICAgJyhjb21cLmJhaWR1XC5tb2JhZHN8QkRBZENvbmZpZ3xCYWlkdU1vYkFkfEFkVmlld3xTcGxhc2hBZHxJbnRlcnN0aXRpYWxBZHxiYWlkdV9hZCknIFwKICAgICLnpoHnlKjnmb7luqbogZTnm59TREsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBCREFkQ29uZmlnIOaIliBjb20uYmFpZHUubW9iYWRzCjIuIOaJvuWIsCBTREsg5Yid5aeL5YyW5Luj56CB77yM5pu/5o2i5Li6IG5vcAozLiDkv53lrZjnrb7lkI3jgIIiCgogICMgMy41IOW/q+aJi+W5v+WRigogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS4rSIgIuW/q+aJi+W5v+WRiihLdWFpc2hvdSkiIFwKICAgICcoY29tXC5rdWFpc2hvdVwuY29tbWVyY2lhbHxLc0FkU0RLfEtzUmV3YXJkVmlkZW9BZHxLc1NwbGFzaEFkfGt1YWlzaG91X2FkKScgXAogICAgIuemgeeUqOW/q+aJi+W5v+WRilNESyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIEtzQWRTREsg5oiWIEtzUmV3YXJkVmlkZW9BZAoyLiDmib7liLDliJ3lp4vljJbmlrnms5XvvIzmm7/mjaLkuLogbm9wCjMuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAzLjYgQWRNb2IgKEdvb2dsZSkKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICJBZE1vYuW5v+WRiihHb29nbGUpIiBcCiAgICAnKGNvbVwuZ29vZ2xlXC5hbmRyb2lkXC5nbXNcLmFkc3xNb2JpbGVBZHNcLmluaXRpYWxpemV8QWRSZXF1ZXN0fEludGVyc3RpdGlhbEFkfFJld2FyZGVkQWR8QmFubmVyQWR8QWRWaWV3fEFkTW9ifGFkbW9iKScgXAogICAgIuemgeeUqEFkTW9i5Yid5aeL5YyW5oiW5bm/5ZGK6K+35rGCIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgTW9iaWxlQWRzLmluaXRpYWxpemUKMi4g5om+5Yiw5Yid5aeL5YyW6LCD55So77yM5pu/5o2i5Li6IG5vcAozLiDmiJbogIXmib7liLAgQWRSZXF1ZXN0LkJ1aWxkZXIoKS5idWlsZCgp77yM5bCGIGxvYWRBZCgpIOabv+aNouS4uiBub3AKNC4g5L+d5a2Y562+5ZCN44CCIgoKICAjIDMuNyBGYWNlYm9vayBBdWRpZW5jZSBOZXR3b3JrCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAiRmFjZWJvb2sgQXVkaWVuY2Xlub/lkYoiIFwKICAgICcoY29tXC5mYWNlYm9va1wuYWRzfEF1ZGllbmNlTmV0d29ya0Fkc3xBZFZpZXd8SW50ZXJzdGl0aWFsQWR8UmV3YXJkZWRWaWRlb0FkfGZhY2Vib29rX2FkcyknIFwKICAgICLnpoHnlKhGYWNlYm9va+W5v+WRilNESyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIEF1ZGllbmNlTmV0d29ya0FkcwoyLiDmib7liLDliJ3lp4vljJbku6PnoIHvvIzmm7/mjaLkuLogbm9wCjMuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAzLjggVW5pdHkgQWRzCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAiVW5pdHkgQWRzIiBcCiAgICAnKGNvbVwudW5pdHkzZFwuc2VydmljZXN8VW5pdHlBZHN8VW5pdHlBZHNMaXN0ZW5lcnxJVW5pdHlBZHNMaXN0ZW5lcnxzaG93VW5pdHlBZHN8dW5pdHlfYWRzKScgXAogICAgIuemgeeUqFVuaXR5IEFkcyBTREsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBVbml0eUFkcy5pbml0aWFsaXplCjIuIOWwhuWIneWni+WMluiwg+eUqOabv+aNouS4uiBub3AKMy4g5L+d5a2Y562+5ZCN44CCIgoKICAjIDMuOSBBcHBMb3ZpbiAvIE1BWAogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS4rSIgIkFwcExvdmluL01BWOW5v+WRiiIgXAogICAgJyhjb21cLmFwcGxvdmlufEFwcExvdmluU2RrfE1heEFkfE1heFJld2FyZGVkQWR8TWF4SW50ZXJzdGl0aWFsQWR8YXBwbG92aW4pJyBcCiAgICAi56aB55SoQXBwTG92aW4gU0RLIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgQXBwTG92aW5TZGsuZ2V0SW5zdGFuY2UoKQoyLiDmib7liLDliJ3lp4vljJbosIPnlKjvvIzmm7/mjaLkuLogbm9wCjMuIOS/neWtmOetvuWQjeOAgiIKCiAgIyAzLjEwIOmAmueUqOW5v+WRiuWKoOi9vS/lsZXnpLoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICLpgJrnlKjlub/lkYrliqDovb0v5bGV56S6IiBcCiAgICAnKGxvYWRBZHxzaG93QWR8c2hvd0ludGVyc3RpdGlhbHxzaG93UmV3YXJkZWRBZHxzaG93QmFubmVyfG9uQWRMb2FkZWR8b25BZEZhaWxlZFRvTG9hZHxhZExvYWRlZHxhZEZhaWxlZCknIFwKICAgICLpgJrnlKjlub/lkYrlsY/olL3mlrnms5UiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBsb2FkQWQg5oiWIHNob3dBZAoyLiDmib7liLDlub/lkYrliqDovb3mlrnms5XvvIzlsIbmlrnms5XkvZPmm7/mjaLkuLrvvJoKICAgLmxvY2FscyAwCiAgIHJldHVybi12b2lkCjMuIOaIluiAheaJvuWIsOW5v+WRiuWbnuiwg+aOpeWPo++8jOWwhiBvbkFkTG9hZGVkIOS4reeahOW5v+WRiuWxleekuuS7o+eggeWIoOmZpAo0LiDkv53lrZjnrb7lkI3jgIIiCgogICMgMy4xMSDlub/lkYpJRC/ljZXlhYNJRAogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS9jiIgIuW5v+WRiuWNleWFg0lE56Gs57yW56CBIiBcCiAgICAnKGFkVW5pdElkfEFEX1VOSVRfSUR8cGxhY2VtZW50SWR8UExBQ0VNRU5UX0lEfHNsb3RJZHxwb3NJZHxjb2RlSWR8YXBwSWR8QVBQX0lEKScgXAogICAgIuabv+aNouW5v+WRiklE5Li656m65oiW5peg5pWISUQiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBhZFVuaXRJZCDmiJblhbfkvZNJROWtl+espuS4sgoyLiDlsIblub/lkYpJROWtl+espuS4suW4uOmHj+aUueS4uuepuuWtl+espuS4siAiIiDmiJbml6DmlYhJRAozLiDov5nmoLflub/lkYror7fmsYLkvJrlpLHotKXvvIzkvYblupTnlKjkuI3kvJrltKnmuoMKNC4g5L+d5a2Y562+5ZCN44CCIgp9CgojID09PT09PT09PT09PT09PT09PT09IDQuIEdH5L+u5pS55ZmoIC8g5L2c5byK5bel5YW35qOA5rWLID09PT09PT09PT09PT09PT09PT09CnNlYXJjaF9nZygpIHsKICBlY2hvICI9PT09IEdhbWVHdWFyZGlhbiAvIOS/ruaUueWZqOajgOa1iyA9PT09IgogIGVjaG8gIiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAiR0fov5vnqIvmo4DmtYsiIFwKICAgICcoZ2FtZWd1YXJkaWFufEdhbWVHdWFyZGlhbnxHR198Z2dffGNoZWF0ZW5naW5lfENoZWF0RW5naW5lfGhhY2tlcnxtZW1vcnkgZWRpdG9yfHNwZWVkIGhhY2spJyBcCiAgICAi57uV6L+HR0fov5vnqIvlkI3mo4DmtYsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBnYW1lZ3VhcmRpYW4g5oiWIEdhbWVHdWFyZGlhbgoyLiDmib7liLDov5vnqIvlkI0v5YyF5ZCN5qOA5rWL6YC76L6RCjMuIOWwhuajgOa1i+WIsOeahOadoeS7tui3s+i9rO+8iGlmLW5leiwgaWYtZXF677yJ5pS55Li655u45Y+N5pa55ZCRCjQuIOaIluiAheWwhuajgOa1i+aWueazleS9k+abv+aNouS4uiByZXR1cm4gdjDvvIjov5Tlm57mnKrmo4DmtYvliLDvvIkKNS4g5L+d5a2Y562+5ZCN44CCIgoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLpq5giICLkvZzlvIrlt6XlhbfljIXlkI3mo4DmtYsiIFwKICAgICcocGFja2FnZU5hbWUuKmNvbnRhaW5zfGdldFBhY2thZ2VOYW1lLiplcXVhbHN8YmxhY2tsaXN0LipwYWNrYWdlfGNoZWF0LipwYWNrYWdlfGhhY2suKnBhY2thZ2UpJyBcCiAgICAi57uV6L+H5YyF5ZCN6buR5ZCN5Y2V5qOA5rWLIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKLpu5HlkI3ljZXljIXlkI3mlbDnu4TmiJYgY29udGFpbnMg5Yik5patCjIuIOWwhiBjb250YWlucyDov5Tlm57lgLzlvLrliLbmlLnkuLogZmFsc2UKMy4g5oiW6ICF5Yig6Zmk5pW05Liq6buR5ZCN5Y2V5qOA5p+l5b6q546vCjQuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi6LCD6K+V5Zmo6ZmE5Yqg5qOA5rWLIiBcCiAgICAnKHB0cmFjZXxQVF9UUkFDRV9NRXxpc0RlYnVnZ2VyQ29ubmVjdGVkfERlYnVnXC5pc0RlYnVnZ2VyQ29ubmVjdGVkfGZyaWRhfHhwb3NlZHxYcG9zZWRIZWxwZXJzKScgXAogICAgIue7lei/h+WPjeiwg+ivleajgOa1iyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIGlzRGVidWdnZXJDb25uZWN0ZWQg5oiWIHB0cmFjZQoyLiDlr7nkuo4gSmF2YSDlsYLvvJrlsIYgaXNEZWJ1Z2dlckNvbm5lY3RlZCgpIOi/lOWbnuWAvOW8uuWItuaUueS4uiBmYWxzZQozLiDlr7nkuo4gTmF0aXZlIOWxgiBwdHJhY2XvvJrpnIDopoHkv67mlLkgc28g5paH5Lu277yM55SoIElEQS9IZXgg57yW6L6R5Zmo5bCGIHB0cmFjZSDosIPnlKjmlLnkuLrov5Tlm54wCjQuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi5YaF5a2Y5a6M5pW05oCn5qCh6aqMIiBcCiAgICAnKGNyYzMyfGNoZWNrQ1JDfG1lbW9yeUNoZWNrfGludGVncml0eUNoZWNrfGNvZGVJbnRlZ3JpdHl8dmVyaWZ5SGFzaHxjaGVja3N1bSknIFwKICAgICJIb29r5oiW57uV6L+H5YaF5a2Y5qCh6aqMIiBcCiLmraXpqqTvvJoKMS4gTVTnrqHnkIblmagg4oaSIERleOe8lui+keWZqCsrIOKGkiDmkJzntKIgY2hlY2tDUkMg5oiWIHZlcmlmeUhhc2gKMi4g5bCG5qCh6aqM5pa55rOV5L2T5pu/5o2i5Li655u05o6l6L+U5ZueIHRydWXvvIhjb25zdC80IHYwLCAweDE7IHJldHVybiB2MO+8iQozLiDkv53lrZjnrb7lkI3jgIIiCgogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS9jiIgIuaCrOa1rueqly/ovoXliqnlip/og73mo4DmtYsiIFwKICAgICcoQWNjZXNzaWJpbGl0eVNlcnZpY2V8U1lTVEVNX0FMRVJUX1dJTkRPV3xjYW5EcmF3T3ZlcmxheXN8b3ZlcmxheSBwZXJtaXNzaW9ufGZsb2F0aW5nIHdpbmRvdyknIFwKICAgICLnu5Xov4fmgqzmta7nqpfmo4DmtYsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBjYW5EcmF3T3ZlcmxheXMg5oiWIEFjY2Vzc2liaWxpdHlTZXJ2aWNlCjIuIOWwhuajgOa1i+e7k+aenOW8uuWItuaUueS4uiBmYWxzZQozLiDkv53lrZjnrb7lkI3jgIIiCn0KCiMgPT09PT09PT09PT09PT09PT09PT0gNS4g562+5ZCN6aqM6K+BIC8g5a6M5pW05oCn5qCh6aqMID09PT09PT09PT09PT09PT09PT09CnNlYXJjaF9zaWduYXR1cmUoKSB7CiAgZWNobyAiPT09PSDnrb7lkI3pqozor4EgLyDlrozmlbTmgKfmoKHpqowgPT09PSIKICBlY2hvICIiCgogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIumrmCIgIuW6lOeUqOetvuWQjeiOt+WPluavlOWvuSIgXAogICAgJyhnZXRQYWNrYWdlU2lnbmF0dXJlfGdldFNpZ25hdHVyZXxzaWduYXR1cmVzfFBhY2thZ2VTaWduYXR1cmV8c2lnbmF0dXJlSGFzaHxjZXJ0SGFzaHxnZXRQYWNrYWdlU2lnbiknIFwKICAgICLnu5Xov4fnrb7lkI3moKHpqozvvIjpnIDphY3lkIhYcG9zZWQvRnJpZGHmiJbkv67mlLlzb++8iSIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIGdldFBhY2thZ2VTaWduYXR1cmUg5oiWIGNoZWNrU2lnbmF0dXJlCjIuIOaWueahiEHvvIjnroDljZXvvInvvJrlsIbnrb7lkI3moKHpqozmlrnms5Xov5Tlm57lgLzlvLrliLbmlLnkuLogdHJ1ZQozLiDmlrnmoYhC77yI5a6M5pW077yJ77ya55SoIFhwb3NlZC9GcmlkYSBIb29rIFBhY2thZ2VNYW5hZ2VyLmdldFBhY2thZ2VTaWduYXR1cmVzKCkg6L+U5Zue5Y6f5aeL562+5ZCNCjQuIOaWueahiEPvvIhOYXRpdmXvvInvvJrlpoLmnpznrb7lkI3moKHpqozlnKggc28g5Lit77yM55SoIElEQSDkv67mlLkgc28g5paH5Lu25Lit55qE5q+U6L6D6YC76L6RCjUuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAiQVBLL0RFWOWujOaVtOaAp+agoemqjCIgXAogICAgJyhkZXhGaWxlXC5sZW5ndGh8YXBrU2l6ZXx2ZXJpZnlEZXh8dmVyaWZ5QXBrfGNoZWNrTWQ1fGNoZWNrU2hhfGZpbGVJbnRlZ3JpdHl8ZGV4SW50ZWdyaXR5KScgXAogICAgIue7lei/h+aWh+S7tuWujOaVtOaAp+agoemqjCIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIHZlcmlmeURleCDmiJYgY2hlY2tNZDUKMi4g5bCG5qCh6aqM5pa55rOV6L+U5Zue5YC85by65Yi25pS55Li6IHRydWUg5oiW5qCh6aqM6YCa6L+H54q25oCBCjMuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi6YeN5omT5YyFL+S6jOasoeaJk+WMheajgOa1iyIgXAogICAgJyhyZXBhY2thZ2VkfHRhbXBlcmVkfG1vZGlmaWVkfHNlY29uZF9wYWNrfGlsbGVnYWxfY29weXx1bm9mZmljaWFsKScgXAogICAgIue7lei/h+mHjeaJk+WMheajgOa1iyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIHJlcGFja2FnZWQg5oiWIHRhbXBlcmVkCjIuIOWwhuajgOa1i+e7k+aenOW8uuWItuaUueS4uiBmYWxzZQozLiDkv53lrZjnrb7lkI3jgIIiCn0KCiMgPT09PT09PT09PT09PT09PT09PT0gNi4g5Y+N6LCD6K+VIC8g5Y+N5qih5ouf5ZmoIC8g5Y+NSG9vayA9PT09PT09PT09PT09PT09PT09PQpzZWFyY2hfYW50aWRlYnVnKCkgewogIGVjaG8gIj09PT0g5Y+N6LCD6K+VIC8g5Y+N5qih5ouf5ZmoIC8g5Y+NSG9vayA9PT09IgogIGVjaG8gIiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAicHRyYWNl5Y+N6LCD6K+VIiBcCiAgICAnKHB0cmFjZVxzKlwoXHMqUFRSQUNFX1RSQUNFTUV8UFRfVFJBQ0VfTUV8c3lzX3B0cmFjZXxhbnRpX2RlYnVnX3B0cmFjZSknIFwKICAgICLnu5Xov4dwdHJhY2Xlj43osIPor5UiIFwKIuatpemqpO+8mgoxLiDlpoLmnpwgcHRyYWNlIOWcqCBOYXRpdmUgc28g5Lit77yaCiAgIC0g55SoIE1U566h55CG5Zmo55qEIERleOe8lui+keWZqCsrIOWumuS9jeWKoOi9vSBzbyDnmoTkvY3nva4KICAgLSDnlKggSURBLzAxMCBFZGl0b3Ig5omT5byAIHNvIOaWh+S7tgogICAtIOaJvuWIsCBwdHJhY2Ug6LCD55So77yM5pS55Li6IG1vdiB4MCwgIzA7IHJldO+8iEFSTTY077yJ5oiW5a+55bqU5p625p6E55qE6L+U5ZueMOaMh+S7pAoyLiDlpoLmnpwgcHRyYWNlIOmAmui/hyBKTkkg6LCD55So77yaCiAgIC0gTVTnrqHnkIblmagg4oaSIOaQnOe0oiBwdHJhY2Ug55qEIEpOSSDlo7DmmI4KICAgLSDlsIbosIPnlKjnu5PmnpzlvLrliLbmlLnkuLogMAozLiDkv53lrZjnrb7lkI3jgIIiCgogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIuS4rSIgIuiwg+ivleeKtuaAgeajgOa1iyIgXAogICAgJyhEZWJ1Z1wuaXNEZWJ1Z2dlckNvbm5lY3RlZHxEZWJ1Z1wud2FpdGluZ0ZvckRlYnVnZ2VyfGlzRGVidWdnaW5nfGRlYnVnZ2VyQXR0YWNoZWQpJyBcCiAgICAi57uV6L+HRGVidWfmo4DmtYsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBpc0RlYnVnZ2VyQ29ubmVjdGVkCjIuIOWwhuaWueazlei/lOWbnuWAvOW8uuWItuaUueS4uiBmYWxzZe+8iGNvbnN0LzQgdjAsIDB4MDsgcmV0dXJuIHYw77yJCjMuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi5qih5ouf5Zmo5qOA5rWLIiBcCiAgICAnKGlzRW11bGF0b3J8Y2hlY2tFbXVsYXRvcnxxZW11fGdlbnltb3Rpb258bm94fGJsdWVzdGFja3N8bGRwbGF5ZXJ8bXVtdXxzaW11bGF0b3J8dmlydHVhbHxmYWtlIGRldmljZSknIFwKICAgICLnu5Xov4fmqKHmi5/lmajmo4DmtYsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBpc0VtdWxhdG9yIOaIliBjaGVja0VtdWxhdG9yCjIuIOWwhui/lOWbnuWAvOW8uuWItuaUueS4uiBmYWxzZQozLiDlpoLmnpzmo4DmtYvln7rkuo4gQnVpbGQg5bGe5oCn77yM5Y+v5L+u5pS5IEJ1aWxkLnByb3Ag5Lit55qEIHJvLnByb2R1Y3QubW9kZWwg562J5a2X5q61CjQuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAiUm9vdOajgOa1iyIgXAogICAgJyhpc1Jvb3RlZHxpc0RldmljZVJvb3RlZHxjaGVja1Jvb3R8dGVzdC1rZXlzfC9zeXN0ZW0vYmluL3N1fC9zeXN0ZW0veGJpbi9zdXwvc2Jpbi9zdXxTdXBlcnVzZXJ8TWFnaXNrKScgXAogICAgIue7lei/h1Jvb3Tmo4DmtYsiIFwKIuatpemqpO+8mgoxLiBNVOeuoeeQhuWZqCDihpIgRGV457yW6L6R5ZmoKysg4oaSIOaQnOe0oiBpc1Jvb3RlZCDmiJYgL3N5c3RlbS9iaW4vc3UKMi4g5bCGIGlzUm9vdGVkKCkg6L+U5Zue5YC85by65Yi25pS55Li6IGZhbHNlCjMuIOWmguaenOajgOa1i+eJueWumuaWh+S7tuWtmOWcqO+8jOWwhuaWh+S7tuajgOafpemAu+i+keaUueS4uuawuOi/nOi/lOWbnuS4jeWtmOWcqAo0LiDmiJbogIXkvb/nlKggTWFnaXNrIEhpZGUgLyBTaGFtaWtvIOmakOiXjyBSb290CjUuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAiWHBvc2VkL0ZyaWRh5qOA5rWLIiBcCiAgICAnKFhwb3NlZEJyaWRnZXxYcG9zZWRIZWxwZXJzfGRlXC5yb2J2XC5hbmRyb2lkXC54cG9zZWR8ZnJpZGEtc2VydmVyfGZyaWRhLWdhZGdldHxsaWJmcmlkYXxjbGFzc2xvYWRlci4qeHBvc2VkKScgXAogICAgIue7lei/h1hwb3NlZC9GcmlkYeajgOa1iyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIFhwb3NlZEJyaWRnZSDmiJYgZnJpZGEKMi4g5bCG5qOA5rWL57uT5p6c5by65Yi25pS55Li6IGZhbHNlCjMuIOWmguaenOS9v+eUqCBGcmlkYe+8jOW7uuiurumFjeWQiCBGcmlkYSDnmoQgYW50aS1hbnRpLWZyaWRhIOiEmuacrAo0LiDlpoLmnpzkvb/nlKggWHBvc2Vk77yM5bu66K6u6YWN5ZCIIExTUG9zZWQg55qE6ZqQ6JeP5Yqf6IO9CjUuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi5aCG5qCI6Lef6Liq5qOA5rWLIiBcCiAgICAnKGdldFN0YWNrVHJhY2V8VGhyZWFkXC5jdXJyZW50VGhyZWFkLipnZXRTdGFja1RyYWNlfHN0YWNrVHJhY2UuKmNvbnRhaW5zfGRldGVjdEhvb2tCeVN0YWNrKScgXAogICAgIue7lei/h+WghuagiOajgOa1iyIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIGdldFN0YWNrVHJhY2UKMi4g5bCG5YyF5ZCrIEhvb2sg54m55b6B55qE5Yik5pat6YC76L6R5pS55Li65rC46L+c6L+U5ZueIGZhbHNlCjMuIOS/neWtmOetvuWQjeOAgiIKfQoKIyA9PT09PT09PT09PT09PT09PT09PSA3LiDliqDlr4bnrpfms5UgLyDlr4bpkqXnoaznvJbnoIEgPT09PT09PT09PT09PT09PT09PT0Kc2VhcmNoX2NyeXB0bygpIHsKICBlY2hvICI9PT09IOWKoOWvhueul+azlSAvIOWvhumSpeehrOe8lueggSA9PT09IgogIGVjaG8gIiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi6auYIiAi5a+556ew5Yqg5a+G5a+G6ZKl56Gs57yW56CBIiBcCiAgICAnKEFFU3xERVN8U2VjcmV0S2V5U3BlY3xJdlBhcmFtZXRlclNwZWN8IkFFUy98IkRFUy98Y2lwaGVyXC5pbml0fGVuY3J5cHR8ZGVjcnlwdCknIFwKICAgICLmj5Dlj5blr4bpkqXnlKjkuo7op6Plr4YiIFwKIuatpemqpO+8mgoxLiDku47kuIrpnaLlrprkvY3liLDnmoTku6PnoIHkuK3mj5Dlj5bnoaznvJbnoIHnmoTlr4bpkqXlrZfnrKbkuLIKMi4g5aaC5p6c5pivIEFFU++8jOazqOaEj+aPkOWPliBJVu+8iOWIneWni+WMluWQkemHj++8iQozLiDkvb/nlKggQ3liZXJDaGVmIOaIliBPcGVuU1NMIOmFjeWQiOWvhumSpeino+WvhuaKk+WMheaVsOaNruaIluacrOWcsOWKoOWvhuaWh+S7tgo0LiDlpoLpnIDkv67mlLnvvJpNVOeuoeeQhuWZqCDihpIg5pCc57Si5a+G6ZKl5a2X56ym5Liy77yM5pu/5o2i5Li66Ieq5bex55qE5a+G6ZKl77yI5rOo5oSP6ZW/5bqm5LiA6Ie077yJCjUuIOS/neWtmOetvuWQjeOAgiIKCiAgcnVuX3BhdHRlcm5fd2l0aF9tdCBcCiAgICAi5LitIiAi5ZOI5biM566X5rOV5L2/55SoIiBcCiAgICAnKE1lc3NhZ2VEaWdlc3RcLmdldEluc3RhbmNlfE1ENXxTSEEtMXxTSEEtMjU2fFNIQTF8aGFzaENvZGV8ZGlnZXN0XChcKSknIFwKICAgICLliIbmnpDlk4jluIznlKjpgJQiIFwKIuatpemqpO+8mgoxLiDlrprkvY3lk4jluIzorqHnrpfkvY3nva7vvIzliIbmnpDlhbbnlKjpgJTvvIjnrb7lkI3pqozor4HjgIHmlbDmja7lrozmlbTmgKfjgIHlr4bnoIHlrZjlgqjvvIkKMi4g5aaC5p6c5piv5pys5Zyw5qCh6aqM77yM5Y+v5bCG5qCh6aqM5pa55rOV6L+U5Zue5YC85by65Yi25pS55Li6IHRydWUKMy4g5L+d5a2Y562+5ZCN44CCIgoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkvY4iICJCYXNlNjTnvJbop6PnoIEiIFwKICAgICcoQmFzZTY0XC5lbmNvZGV8QmFzZTY0XC5kZWNvZGV8YW5kcm9pZFwudXRpbFwuQmFzZTY0fGphdmFcLnV0aWxcLkJhc2U2NCknIFwKICAgICLop6PnoIFCYXNlNjTmlbDmja4iIFwKIuatpemqpO+8mgoxLiDlrprkvY0gQmFzZTY0LmRlY29kZSDnmoTovpPlhaXlrZfnrKbkuLIKMi4g5o+Q5Y+W5a2X56ym5Liy5ZCO55SoIEN5YmVyQ2hlZiDmiJYgYmFzZTY0IOWRveS7pOino+eggQozLiDliIbmnpDop6PnoIHlkI7nmoTlhoXlrrnvvIjlj6/og73mmK/lr4bpkqXjgIHphY3nva7jgIFVUkznrYnvvIkKNC4g5L+d5a2Y562+5ZCN44CCIgoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICJSU0Ev6Z2e5a+556ew5Yqg5a+GIiBcCiAgICAnKFJTQXxQdWJsaWNLZXl8UHJpdmF0ZUtleXxLZXlQYWlyfEtleUZhY3Rvcnl8UlNBUHVibGljS2V5fFJTQVByaXZhdGVLZXkpJyBcCiAgICAi5o+Q5Y+W5YWs6ZKlL+WIhuaekOWKoOWvhumAu+i+kSIgXAoi5q2l6aqk77yaCjEuIOaPkOWPluehrOe8lueggeeahOWFrOmSpeWtl+espuS4suaIliBtb2R1bHVzL2V4cG9uZW50CjIuIOS9v+eUqCBPcGVuU1NMIOaIliBQeXRob24g6YeN5p6E5YWs6ZKlCjMuIOWmguaenOengemSpeehrOe8lueggeWcqOWuouaIt+err++8iOS4pemHjeWuieWFqOmXrumimO+8ie+8jOWPr+ebtOaOpeaPkOWPlgo0LiDkv53lrZjnrb7lkI3jgIIiCgogIHJ1bl9wYXR0ZXJuX3dpdGhfbXQgXAogICAgIumrmCIgIuehrOe8lueggeWvhumSpS9Ub2tlbiIgXAogICAgJyhhcGlbXy1dP2tleXxhcGlbXy1dP3NlY3JldHxhcHBbXy1dP3NlY3JldHxwcml2YXRlW18tXT9rZXl8cGFzc3dvcmR8cGFzc3dkfHRva2VufHNlY3JldHxhdXRoX2tleSlccyo9XHMqIlteIl17OCx9IicgXAogICAgIuaPkOWPluaVj+aEn+WHreivgSIgXAoi5q2l6aqk77yaCjEuIOS7juWumuS9jeWIsOeahOS7o+eggeS4reaPkOWPliBhcGlfa2V544CBdG9rZW4g562J5a2X56ym5LiyCjIuIOS9v+eUqOi/meS6m+WHreivgeebtOaOpeiuv+mXrkFQSeaIluino+WvhuaVsOaNrgozLiDlpoLpnIDkv67mlLnvvJrmm7/mjaLkuLrml6DmlYjlh63or4HmtYvor5XlupTnlKjooYzkuLoKNC4g5L+d5a2Y562+5ZCN44CCIgoKICBydW5fcGF0dGVybl93aXRoX210IFwKICAgICLkuK0iICJTU0wgUGlubmluZyIgXAogICAgJyhjZXJ0aWZpY2F0ZVBpbm5lcnxTU0xQaW5uaW5nfFRydXN0TWFuYWdlcnxYNTA5VHJ1c3RNYW5hZ2VyfEhvc3RuYW1lVmVyaWZpZXJ8Y2hlY2tTZXJ2ZXJUcnVzdGVkKScgXAogICAgIue7lei/h+ivgeS5pue7keWumuS7peaKk+WMhSIgXAoi5q2l6aqk77yaCjEuIE1U566h55CG5ZmoIOKGkiBEZXjnvJbovpHlmagrKyDihpIg5pCc57SiIGNoZWNrU2VydmVyVHJ1c3RlZCDmiJYgVHJ1c3RNYW5hZ2VyCjIuIOWwhiBjaGVja1NlcnZlclRydXN0ZWQoKSDmlrnms5XkvZPmuIXnqbrvvIznm7TmjqUgcmV0dXJuCjMuIOaIluiAheWwhiBIb3N0bmFtZVZlcmlmaWVyLnZlcmlmeSgpIOi/lOWbnuWAvOW8uuWItuaUueS4uiB0cnVlCjQuIOmFjeWQiCBIdHRwQ2FuYXJ5L0NoYXJsZXMg5Y2z5Y+v5oqT5YyFIEhUVFBTIOa1gemHjwo1LiDkv53lrZjnrb7lkI3jgIIiCn0KCiMgLS0tIOaJp+ihjOaQnOe0oiAtLS0KaWYgW1sgIiRTRUFSQ0hfQUxMIiA9PSB0cnVlIHx8ICIkU0VBUkNIX1ZJUCIgPT0gdHJ1ZSBdXTsgdGhlbgogIHNlYXJjaF92aXAKZmkKCmlmIFtbICIkU0VBUkNIX0FMTCIgPT0gdHJ1ZSB8fCAiJFNFQVJDSF9HRyIgPT0gdHJ1ZSBdXTsgdGhlbgogIHNlYXJjaF9nZwpmaQoKaWYgW1sgIiRTRUFSQ0hfQUxMIiA9PSB0cnVlIHx8ICIkU0VBUkNIX1BPUFVQIiA9PSB0cnVlIF1dOyB0aGVuCiAgc2VhcmNoX3BvcHVwCmZpCgppZiBbWyAiJFNFQVJDSF9BTEwiID09IHRydWUgfHwgIiRTRUFSQ0hfQUQiID09IHRydWUgXV07IHRoZW4KICBzZWFyY2hfYWQKZmkKCmlmIFtbICIkU0VBUkNIX0FMTCIgPT0gdHJ1ZSB8fCAiJFNFQVJDSF9TSUdOQVRVUkUiID09IHRydWUgXV07IHRoZW4KICBzZWFyY2hfc2lnbmF0dXJlCmZpCgppZiBbWyAiJFNFQVJDSF9BTEwiID09IHRydWUgfHwgIiRTRUFSQ0hfQU5USURFQlVHIiA9PSB0cnVlIF1dOyB0aGVuCiAgc2VhcmNoX2FudGlkZWJ1ZwpmaQoKaWYgW1sgIiRTRUFSQ0hfQUxMIiA9PSB0cnVlIHx8ICIkU0VBUkNIX0NSWVBUTyIgPT0gdHJ1ZSBdXTsgdGhlbgogIHNlYXJjaF9jcnlwdG8KZmkKCmVjaG8KZWNobyAiPT09IOWuieWFqOaooeW8j+aQnOe0ouWujOaIkCA9PT0iCg==
B64EOF_find-security-patterns.sh
chmod +x "$DECODE_DIR/find-security-patterns.sh" 2>/dev/null

echo "恢复: generate-frida-scripts.sh ..."
base64 -d << 'B64EOF_generate-frida-scripts.sh' > "$DECODE_DIR/generate-frida-scripts.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGdlbmVyYXRlLWZyaWRhLXNjcmlwdHMuc2gg4oCUIOagueaNruWIhuaekOe7k+aenOiHquWKqOeUn+aIkCBGcmlkYSBIb29rIOiEmuacrAojIOaUr+aMge+8muWOn+eUn0FuZHJvaWTjgIFGbHV0dGVy44CBUmVhY3QgTmF0aXZlCiMg6L6T5Ye65Y+v55u05o6l6L+Q6KGM55qEIC5qcyDmlofku7YgKyDlpKfnmb3or53kvb/nlKjor7TmmI4Kc2V0IC1ldW8gcGlwZWZhaWwKCnVzYWdlKCkgewogIGNhdCA8PEVPRgpVc2FnZTogZ2VuZXJhdGUtZnJpZGEtc2NyaXB0cy5zaCBbT1BUSU9OU10K5qC55o2u5YiG5p6Q57uT5p6c6Ieq5Yqo55Sf5oiQIEZyaWRhIEhvb2sg6ISa5pys44CCCgrpgInpobk6CiAgLS1mcmFtZXdvcmsgRlJBTUVXT1JLICAg5qGG5p6257G75Z6LOiBuYXRpdmUsIGZsdXR0ZXIsIHJlYWN0X25hdGl2ZSwgdW5pdHkKICAtLXBhY2thZ2UgUEtHICAgICAgICAgICDnm67moIdBUFDljIXlkI3vvIjlv4XpobvvvIkKICAtLW91dHB1dCBESVIgICAgICAgICAgICDovpPlh7rnm67lvZUKICAtLXZpcC1tZXRob2RzIEZJTEUgICAgICBWSVDmlrnms5XliJfooajmlofku7bvvIjmr4/ooYzkuIDkuKrmlrnms5Xnrb7lkI3vvIkKICAtLWFkLW1ldGhvZHMgRklMRSAgICAgICDlub/lkYrmlrnms5XliJfooajmlofku7YKICAtLXBvcHVwLW1ldGhvZHMgRklMRSAgICDlvLnnqpfmlrnms5XliJfooajmlofku7YKICAtLWFsbCAgICAgICAgICAgICAgICAgICDnlJ/miJDmiYDmnInnsbvlnovnmoRIb29r6ISa5pysCiAgLWgsIC0taGVscCAgICAgICAgICAgICAg5pi+56S65biu5YqpCgrnpLrkvos6CiAgZ2VuZXJhdGUtZnJpZGEtc2NyaXB0cy5zaCAtLWZyYW1ld29yayBuYXRpdmUgLS1wYWNrYWdlIGNvbS5leGFtcGxlLmFwcCAtLWFsbAogIGdlbmVyYXRlLWZyaWRhLXNjcmlwdHMuc2ggLS1mcmFtZXdvcmsgZmx1dHRlciAtLXBhY2thZ2UgY29tLmV4YW1wbGUuYXBwIC0tdmlwLW1ldGhvZHMgdmlwLnR4dApFT0YKICBleGl0IDAKfQoKRlJBTUVXT1JLPSJuYXRpdmUiClBBQ0tBR0U9IiIKT1VUUFVUX0RJUj0iLi9mcmlkYS1zY3JpcHRzIgpWSVBfTUVUSE9EU19GSUxFPSIiCkFEX01FVEhPRFNfRklMRT0iIgpQT1BVUF9NRVRIT0RTX0ZJTEU9IiIKR0VORVJBVEVfQUxMPWZhbHNlCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICBjYXNlICIkMSIgaW4KICAgIC0tZnJhbWV3b3JrKSAgICAgRlJBTUVXT1JLPSIkMiI7IHNoaWZ0IDIgOzsKICAgIC0tcGFja2FnZSkgICAgICAgUEFDS0FHRT0iJDIiOyBzaGlmdCAyIDs7CiAgICAtLW91dHB1dCkgICAgICAgIE9VVFBVVF9ESVI9IiQyIjsgc2hpZnQgMiA7OwogICAgLS12aXAtbWV0aG9kcykgICBWSVBfTUVUSE9EU19GSUxFPSIkMiI7IHNoaWZ0IDIgOzsKICAgIC0tYWQtbWV0aG9kcykgICAgQURfTUVUSE9EU19GSUxFPSIkMiI7IHNoaWZ0IDIgOzsKICAgIC0tcG9wdXAtbWV0aG9kcykgUE9QVVBfTUVUSE9EU19GSUxFPSIkMiI7IHNoaWZ0IDIgOzsKICAgIC0tYWxsKSAgICAgICAgICAgR0VORVJBVEVfQUxMPXRydWU7IHNoaWZ0IDs7CiAgICAtaHwtLWhlbHApICAgICAgIHVzYWdlIDs7CiAgICAtKikgICAgICAgICAgICAgIGVjaG8gIumUmeivrzog5pyq55+l6YCJ6aG5ICQxIiA+JjI7IHVzYWdlIDs7CiAgICAqKSAgICAgICAgICAgICAgIGVjaG8gIumUmeivrzog5pyq55+l5Y+C5pWwICQxIiA+JjI7IHVzYWdlIDs7CiAgZXNhYwpkb25lCgppZiBbWyAteiAiJFBBQ0tBR0UiIF1dOyB0aGVuCiAgZWNobyAi6ZSZ6K+vOiDlv4XpobvmjIflrprljIXlkI0gKC0tcGFja2FnZSkiID4mMgogIHVzYWdlCmZpCgpta2RpciAtcCAiJE9VVFBVVF9ESVIiCk9VVFBVVF9ESVI9JChyZWFscGF0aCAiJE9VVFBVVF9ESVIiKQoKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiIEZyaWRhIEhvb2sg6ISa5pys55Sf5oiQ5ZmoIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvICIiCmVjaG8gIiAg55uu5qCH5YyF5ZCNOiAkUEFDS0FHRSIKZWNobyAiICDmoYbmnrbnsbvlnos6ICRGUkFNRVdPUksiCmVjaG8gIiAg6L6T5Ye655uu5b2VOiAkT1VUUFVUX0RJUiIKZWNobyAiIgoKIyA9PT09PT09PT09PT09PT09PT09PSDpgJrnlKhGcmlkYeiEmuacrOWktOmDqCA9PT09PT09PT09PT09PT09PT09PQpnZW5lcmF0ZV9oZWFkZXIoKSB7CiAgbG9jYWwgc2NyaXB0X25hbWU9IiQxIgogIGNhdCA8PEVPRgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gJHNjcmlwdF9uYW1lCi8vIOebruagh+WMheWQjTogJFBBQ0tBR0UKLy8g55Sf5oiQ5pe26Ze0OiAkKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpCi8vIOahhuaetjogJEZSQU1FV09SSwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8g5L2/55So5pa55rOVOgovLyAxLiDmiYvmnLrlronoo4XlubblkK/liqggZnJpZGEtc2VydmVyICjpnIDopoFSb290KQovLyAyLiDnlLXohJHov5DooYw6IGZyaWRhIC1VIC1mICRQQUNLQUdFIC1sICQoYmFzZW5hbWUgIiRzY3JpcHRfbmFtZSIpCi8vIDMuIOaIluiAhemZhOWKoOWIsOW3sui/kOihjOeahEFQUDogZnJpZGEgLVUgJFBBQ0tBR0UgLWwgJChiYXNlbmFtZSAiJHNjcmlwdF9uYW1lIikKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgpjb25zb2xlLmxvZygiWypdIEZyaWRh6ISa5pys5bey5Yqg6L29IC0g55uu5qCHOiAkUEFDS0FHRSIpOwoKLy8g6L6F5Yqp5Ye95pWw77ya5omT5Y2w6LCD55So5aCG5qCICmZ1bmN0aW9uIHByaW50U3RhY2soKSB7CiAgICBjb25zb2xlLmxvZyhKYXZhLnVzZSgiYW5kcm9pZC51dGlsLkxvZyIpLmdldFN0YWNrVHJhY2VTdHJpbmcoSmF2YS51c2UoImphdmEubGFuZy5FeGNlcHRpb24iKS4kbmV3KCkpKTsKfQoKRU9GCn0KCiMgPT09PT09PT09PT09PT09PT09PT0g5Y6f55SfQW5kcm9pZCBWSVAgSG9vayA9PT09PT09PT09PT09PT09PT09PQpnZW5lcmF0ZV9uYXRpdmVfdmlwKCkgewogIGxvY2FsIG91dHB1dD0iJE9VVFBVVF9ESVIvaG9va192aXBfJHtQQUNLQUdFLy8uL199LmpzIgogIGdlbmVyYXRlX2hlYWRlciAiVklQIEhvb2vohJrmnKwgKOWOn+eUn0FuZHJvaWQpIiA+ICIkb3V0cHV0IgoKICBjYXQgPj4gIiRvdXRwdXQiIDw8J0pTJwpKYXZhLnBlcmZvcm0oZnVuY3Rpb24oKSB7CiAgICBjb25zb2xlLmxvZygiWypdIFZJUCBIb29rIOW3suWQr+WKqCIpOwoKICAgIC8vID09PT09IOmAmueUqFZJUOeKtuaAgeWIpOaWrUhvb2sgPT09PT0KICAgIC8vIOi/meS6m+aYr+acgOW4uOingeeahFZJUOWIpOaWreaWueazleWQje+8jOiHquWKqEhvb2sKICAgIHZhciB2aXBNZXRob2RzID0gWwogICAgICAgICJpc1ZpcCIsICJpc1ZJUCIsICJpc1ByZW1pdW0iLCAiaXNQcm8iLCAiaXNNZW1iZXIiLAogICAgICAgICJpc1N1YnNjcmliZWQiLCAiaXNQYWlkVXNlciIsICJoYXNBY3RpdmVTdWJzY3JpcHRpb24iLAogICAgICAgICJjaGVja1ZpcCIsICJjaGVja1ZJUCIsICJjaGVja1ByZW1pdW0iLCAiY2hlY2tTdWJzY3JpcHRpb24iCiAgICBdOwoKICAgIHZpcE1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtZXRob2ROYW1lKSB7CiAgICAgICAgLy8g6YGN5Y6G5omA5pyJ5bey5Yqg6L2955qE57G7CiAgICAgICAgSmF2YS5lbnVtZXJhdGVMb2FkZWRDbGFzc2VzKHsKICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGF6eiA9IEphdmEudXNlKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXp6W21ldGhvZE5hbWVdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXp6W21ldGhvZE5hbWVdLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiW1ZJUF0gSG9va2VkOiAiICsgY2xhc3NOYW1lICsgIi4iICsgbWV0aG9kTmFtZSArICIoKSAtPiDlvLrliLbov5Tlm550cnVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlsrXSDlt7JIb29rOiAiICsgY2xhc3NOYW1lICsgIi4iICsgbWV0aG9kTmFtZSArICIoKSIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAgICAgIC8vIOW/veeVpemUmeivr++8jOe7p+e7reS4i+S4gOS4qgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHt9CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyA9PT09PSDpgJrnlKhWSVDnrYnnuqdIb29rID09PT09CiAgICB2YXIgbGV2ZWxNZXRob2RzID0gWyJnZXRWaXBMZXZlbCIsICJnZXRWSVBMZXZlbCIsICJnZXRNZW1iZXJMZXZlbCIsICJnZXRQcmVtaXVtTGV2ZWwiXTsKICAgIGxldmVsTWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgICAgICBKYXZhLmVudW1lcmF0ZUxvYWRlZENsYXNzZXMoewogICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNsYXp6ID0gSmF2YS51c2UoY2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgICAgICBpZiAoY2xhenpbbWV0aG9kTmFtZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xhenpbbWV0aG9kTmFtZV0uaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbVklQXSBIb29rZWQ6ICIgKyBjbGFzc05hbWUgKyAiLiIgKyBtZXRob2ROYW1lICsgIigpIC0+IOW8uuWItui/lOWbnjk5OSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk5OTsgLy8g6L+U5Zue5pyA6auY562J57qnCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbK10g5beySG9vazogIiArIGNsYXNzTmFtZSArICIuIiArIG1ldGhvZE5hbWUgKyAiKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKCkge30KICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8vID09PT09IFNoYXJlZFByZWZlcmVuY2VzIGdldEJvb2xlYW4gSG9vayA9PT09PQogICAgLy8g5b6I5aSaQVBQ55SoU2hhcmVkUHJlZmVyZW5jZXPlrZhWSVDnirbmgIHvvIxIb29r5a6DCiAgICB0cnkgewogICAgICAgIHZhciBTaGFyZWRQcmVmZXJlbmNlcyA9IEphdmEudXNlKCJhbmRyb2lkLmFwcC5TaGFyZWRQcmVmZXJlbmNlc0ltcGwiKTsKICAgICAgICB2YXIgb3JpZ2luYWxfZ2V0Qm9vbGVhbiA9IFNoYXJlZFByZWZlcmVuY2VzLmdldEJvb2xlYW47CiAgICAgICAgU2hhcmVkUHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbi5vdmVybG9hZCgnamF2YS5sYW5nLlN0cmluZycsICdib29sZWFuJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihrZXksIGRlZlZhbHVlKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbF9nZXRCb29sZWFuLmNhbGwodGhpcywga2V5LCBkZWZWYWx1ZSk7CiAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ2aXAiKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInByZW1pdW0iKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInBybyIpICE9PSAtMSB8fAogICAgICAgICAgICAgICAga2V5LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibWVtYmVyIikgIT09IC0xIHx8CiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJzdWJzY3JpYmVkIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiW1ZJUF0gU2hhcmVkUHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihrZXk9JyIgKyBrZXkgKyAiJywgZGVmPSIgKyBkZWZWYWx1ZSArICIpIC0+IOW8uuWItui/lOWbnnRydWUgKOWOn+WAvDoiICsgcmVzdWx0ICsgIikiKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IFNoYXJlZFByZWZlcmVuY2VzLmdldEJvb2xlYW4oKSIpOwogICAgfSBjYXRjaChlKSB7CiAgICAgICAgY29uc29sZS5sb2coIlstXSBTaGFyZWRQcmVmZXJlbmNlcyBIb29r5aSx6LSlOiAiICsgZS5tZXNzYWdlKTsKICAgIH0KCiAgICBjb25zb2xlLmxvZygiWypdIFZJUCBIb29rIOiuvue9ruWujOaIkO+8gSIpOwp9KTsKSlMKCiAgZWNobyAiW+WujOaIkF0gVklQIEhvb2vohJrmnKw6ICRvdXRwdXQiCn0KCiMgPT09PT09PT09PT09PT09PT09PT0g5Y6f55SfQW5kcm9pZCDlub/lkYpIb29rID09PT09PT09PT09PT09PT09PT09CmdlbmVyYXRlX25hdGl2ZV9hZCgpIHsKICBsb2NhbCBvdXRwdXQ9IiRPVVRQVVRfRElSL2hvb2tfYWRfJHtQQUNLQUdFLy8uL199LmpzIgogIGdlbmVyYXRlX2hlYWRlciAi5bm/5ZGKSG9va+iEmuacrCAo5Y6f55SfQW5kcm9pZCkiID4gIiRvdXRwdXQiCgogIGNhdCA+PiAiJG91dHB1dCIgPDwnSlMnCkphdmEucGVyZm9ybShmdW5jdGlvbigpIHsKICAgIGNvbnNvbGUubG9nKCJbKl0g5bm/5ZGKSG9vayDlt7LlkK/liqgiKTsKCiAgICAvLyA9PT09PSDpgJrnlKjlub/lkYrlsZXnpLrmlrnms5VIb29rID09PT09CiAgICB2YXIgYWRTaG93TWV0aG9kcyA9IFsKICAgICAgICAic2hvdyIsICJzaG93QWQiLCAic2hvd0ludGVyc3RpdGlhbCIsICJzaG93UmV3YXJkZWRBZCIsCiAgICAgICAgInNob3dCYW5uZXIiLCAic2hvd05hdGl2ZUFkIiwgInNob3dTcGxhc2hBZCIsICJsb2FkQWQiLAogICAgICAgICJsb2FkSW50ZXJzdGl0aWFsIiwgImxvYWRSZXdhcmRlZEFkIiwgImxvYWRCYW5uZXIiCiAgICBdOwoKICAgIGFkU2hvd01ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtZXRob2ROYW1lKSB7CiAgICAgICAgSmF2YS5lbnVtZXJhdGVMb2FkZWRDbGFzc2VzKHsKICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGF6eiA9IEphdmEudXNlKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgLy8gSG9va+aXoOWPgnNob3fmlrnms5UKICAgICAgICAgICAgICAgICAgICBpZiAoY2xhenpbbWV0aG9kTmFtZV0gJiYgY2xhenpbbWV0aG9kTmFtZV0ub3ZlcmxvYWRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXp6W21ldGhvZE5hbWVdLm92ZXJsb2Fkcy5mb3JFYWNoKGZ1bmN0aW9uKG92ZXJsb2FkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbQURdIOaLpuaIquW5v+WRijogIiArIGNsYXNzTmFtZSArICIuIiArIG1ldGhvZE5hbWUgKyAiKCkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnInlm57osIPlj4LmlbDvvIzosIPnlKhvbkFkRmFpbGVkVG9Mb2FkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAmJiBhcmd1bWVudHNbaV0uZ2V0Q2xhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbHMgPSBhcmd1bWVudHNbaV0uZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xzLmluZGV4T2YoIkxpc3RlbmVyIikgIT09IC0xIHx8IGNscy5pbmRleE9mKCJDYWxsYmFjayIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXS5vbkFkRmFpbGVkVG9Mb2FkKDMpOyAvLyBFUlJPUl9DT0RFX05PX0ZJTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbK10g5beySG9va+W5v+WRijogIiArIGNsYXNzTmFtZSArICIuIiArIG1ldGhvZE5hbWUgKyAiKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKCkge30KICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8vID09PT09IEFkTW9i54m55a6aSG9vayA9PT09PQogICAgdHJ5IHsKICAgICAgICB2YXIgSW50ZXJzdGl0aWFsQWQgPSBKYXZhLnVzZSgiY29tLmdvb2dsZS5hbmRyb2lkLmdtcy5hZHMuaW50ZXJzdGl0aWFsLkludGVyc3RpdGlhbEFkIik7CiAgICAgICAgSW50ZXJzdGl0aWFsQWQuc2hvdy5vdmVybG9hZCgnYW5kcm9pZC5hcHAuQWN0aXZpdHknKS5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKGFjdGl2aXR5KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbQURdIOaLpuaIqkFkTW9i5o+S5bGP5bm/5ZGKIHNob3coKSIpOwogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2coIlsrXSDlt7JIb29rOiBBZE1vYiBJbnRlcnN0aXRpYWxBZC5zaG93KCkiKTsKICAgIH0gY2F0Y2goZSkge30KCiAgICB0cnkgewogICAgICAgIHZhciBSZXdhcmRlZEFkID0gSmF2YS51c2UoImNvbS5nb29nbGUuYW5kcm9pZC5nbXMuYWRzLnJld2FyZGVkLlJld2FyZGVkQWQiKTsKICAgICAgICBSZXdhcmRlZEFkLnNob3cub3ZlcmxvYWQoJ2FuZHJvaWQuYXBwLkFjdGl2aXR5JywgJ2NvbS5nb29nbGUuYW5kcm9pZC5nbXMuYWRzLk9uVXNlckVhcm5lZFJld2FyZExpc3RlbmVyJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihhY3Rpdml0eSwgbGlzdGVuZXIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIltBRF0g5oum5oiqQWRNb2Lmv4DlirHlub/lkYogc2hvdygpIik7CiAgICAgICAgICAgIC8vIOWBh+ijheeUqOaIt+W3sue7j+eci+WujOW5v+WRiu+8jOebtOaOpee7meWlluWKsQogICAgICAgICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIFJld2FyZEl0ZW0gPSBKYXZhLnVzZSgiY29tLmdvb2dsZS5hbmRyb2lkLmdtcy5hZHMucmV3YXJkZWQuUmV3YXJkSXRlbSIpOwogICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uVXNlckVhcm5lZFJld2FyZChSZXdhcmRJdGVtLiRuZXcoImNvaW5zIiwgMTAwKSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKCJbK10g5beySG9vazogQWRNb2IgUmV3YXJkZWRBZC5zaG93KCkgKOiHquWKqOWPkeWlluWKsSkiKTsKICAgIH0gY2F0Y2goZSkge30KCiAgICAvLyA9PT09PSDnqb/lsbHnlLIoUGFuZ2xlKeeJueWumkhvb2sgPT09PT0KICAgIHRyeSB7CiAgICAgICAgdmFyIFRUQWROYXRpdmUgPSBKYXZhLnVzZSgiY29tLmJ5dGVkYW5jZS5zZGsub3BlbmFkc2RrLlRUQWROYXRpdmUiKTsKICAgICAgICB2YXIgbWV0aG9kcyA9IFRUQWROYXRpdmUuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7CiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkgewogICAgICAgICAgICB2YXIgbmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7CiAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoImxvYWQiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbK10g5Y+R546w56m/5bGx55Sy5Yqg6L295pa55rOVOiAiICsgbmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0gY2F0Y2goZSkge30KCiAgICBjb25zb2xlLmxvZygiWypdIOW5v+WRikhvb2sg6K6+572u5a6M5oiQ77yBIik7Cn0pOwpKUwoKICBlY2hvICJb5a6M5oiQXSDlub/lkYpIb29r6ISa5pysOiAkb3V0cHV0Igp9CgojID09PT09PT09PT09PT09PT09PT09IOWOn+eUn0FuZHJvaWQg5by556qXSG9vayA9PT09PT09PT09PT09PT09PT09PQpnZW5lcmF0ZV9uYXRpdmVfcG9wdXAoKSB7CiAgbG9jYWwgb3V0cHV0PSIkT1VUUFVUX0RJUi9ob29rX3BvcHVwXyR7UEFDS0FHRS8vLi9ffS5qcyIKICBnZW5lcmF0ZV9oZWFkZXIgIuW8ueeql0hvb2vohJrmnKwgKOWOn+eUn0FuZHJvaWQpIiA+ICIkb3V0cHV0IgoKICBjYXQgPj4gIiRvdXRwdXQiIDw8J0pTJwpKYXZhLnBlcmZvcm0oZnVuY3Rpb24oKSB7CiAgICBjb25zb2xlLmxvZygiWypdIOW8ueeql0hvb2sg5bey5ZCv5YqoIik7CgogICAgLy8gPT09PT0gQWxlcnREaWFsb2cuc2hvdygpIEhvb2sgPT09PT0KICAgIHRyeSB7CiAgICAgICAgdmFyIEFsZXJ0RGlhbG9nID0gSmF2YS51c2UoImFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nIik7CiAgICAgICAgQWxlcnREaWFsb2cuc2hvdy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGl0bGUgPSAiIjsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5tVGl0bGUudmFsdWU7CiAgICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgICAgICAgY29uc29sZS5sb2coIltQT1BVUF0g5oum5oiqQWxlcnREaWFsb2c6IOagh+mimD0nIiArIHRpdGxlICsgIiciKTsKICAgICAgICAgICAgLy8g5LiN6LCD55So5Y6fc2hvdygp77yM5by556qX5bCx5LiN5Lya5pi+56S6CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IEFsZXJ0RGlhbG9nLnNob3coKSIpOwogICAgfSBjYXRjaChlKSB7CiAgICAgICAgY29uc29sZS5sb2coIlstXSBBbGVydERpYWxvZyBIb29r5aSx6LSlOiAiICsgZS5tZXNzYWdlKTsKICAgIH0KCiAgICAvLyA9PT09PSBEaWFsb2cuc2hvdygpIEhvb2sgPT09PT0KICAgIHRyeSB7CiAgICAgICAgdmFyIERpYWxvZyA9IEphdmEudXNlKCJhbmRyb2lkLmFwcC5EaWFsb2ciKTsKICAgICAgICBEaWFsb2cuc2hvdy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiW1BPUFVQXSDmi6bmiKpEaWFsb2cuc2hvdygpIik7CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IERpYWxvZy5zaG93KCkiKTsKICAgIH0gY2F0Y2goZSkge30KCiAgICAvLyA9PT09PSBUb2FzdCBIb29rID09PT09CiAgICB0cnkgewogICAgICAgIHZhciBUb2FzdCA9IEphdmEudXNlKCJhbmRyb2lkLndpZGdldC5Ub2FzdCIpOwogICAgICAgIFRvYXN0LnNob3cuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHRleHQgPSAiIjsKICAgICAgICAgICAgdHJ5IHsgdGV4dCA9IHRoaXMubVRleHQudmFsdWU7IH0gY2F0Y2goZSkge30KICAgICAgICAgICAgY29uc29sZS5sb2coIltQT1BVUF0g5oum5oiqVG9hc3Q6ICciICsgdGV4dCArICInIik7CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IFRvYXN0LnNob3coKSIpOwogICAgfSBjYXRjaChlKSB7fQoKICAgIC8vID09PT09IFNuYWNrYmFyIEhvb2sgPT09PT0KICAgIHRyeSB7CiAgICAgICAgdmFyIFNuYWNrYmFyID0gSmF2YS51c2UoImNvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5zbmFja2Jhci5TbmFja2JhciIpOwogICAgICAgIFNuYWNrYmFyLnNob3cuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIltQT1BVUF0g5oum5oiqU25hY2tiYXIuc2hvdygpIik7CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IFNuYWNrYmFyLnNob3coKSIpOwogICAgfSBjYXRjaChlKSB7fQoKICAgIC8vID09PT09IOW8uuWItuabtOaWsOajgOa1i0hvb2sgPT09PT0KICAgIC8vIEhvb2vniYjmnKzlj7fmr5TovoPvvIzorqlBUFDmsLjov5zorqTkuLrmmK/mnIDmlrDniYgKICAgIHRyeSB7CiAgICAgICAgdmFyIFBhY2thZ2VJbmZvID0gSmF2YS51c2UoImFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbyIpOwogICAgICAgIHZhciBvcmlnaW5hbF92ZXJzaW9uQ29kZSA9IFBhY2thZ2VJbmZvLnZlcnNpb25Db2RlLnZhbHVlOwogICAgICAgIC8vIOi/meS4qumcgOimgeWcqOiOt+WPllBhY2thZ2VJbmZv55qE5pe25YCZSG9vawogICAgfSBjYXRjaChlKSB7fQoKICAgIC8vIEhvb2vluLjop4HnmoTmm7TmlrDmo4Dmn6Xmlrnms5UKICAgIHZhciB1cGRhdGVNZXRob2RzID0gWyJjaGVja1VwZGF0ZSIsICJmb3JjZVVwZGF0ZSIsICJuZWVkVXBkYXRlIiwgImlzTmVlZFVwZGF0ZSIsICJoYXNOZXdWZXJzaW9uIl07CiAgICB1cGRhdGVNZXRob2RzLmZvckVhY2goZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgICAgIEphdmEuZW51bWVyYXRlTG9hZGVkQ2xhc3Nlcyh7CiAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKGNsYXNzTmFtZSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2xhenogPSBKYXZhLnVzZShjbGFzc05hbWUpOwogICAgICAgICAgICAgICAgICAgIGlmIChjbGF6elttZXRob2ROYW1lXSkgewogICAgICAgICAgICAgICAgICAgICAgICBjbGF6elttZXRob2ROYW1lXS5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIltQT1BVUF0g5oum5oiq5pu05paw5qOA5p+lOiAiICsgY2xhc3NOYW1lICsgIi4iICsgbWV0aG9kTmFtZSArICIoKSAtPiDov5Tlm55mYWxzZSAo5peg6ZyA5pu05pawKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2vmm7TmlrDmo4Dmn6U6ICIgKyBjbGFzc05hbWUgKyAiLiIgKyBtZXRob2ROYW1lICsgIigpIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHt9CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICBjb25zb2xlLmxvZygiWypdIOW8ueeql0hvb2sg6K6+572u5a6M5oiQ77yBIik7Cn0pOwpKUwoKICBlY2hvICJb5a6M5oiQXSDlvLnnqpdIb29r6ISa5pysOiAkb3V0cHV0Igp9CgojID09PT09PT09PT09PT09PT09PT09IEZsdXR0ZXIgRnJpZGEgSG9vayA9PT09PT09PT09PT09PT09PT09PQpnZW5lcmF0ZV9mbHV0dGVyX2hvb2tzKCkgewogIGxvY2FsIG91dHB1dF9kaXI9IiRPVVRQVVRfRElSL2ZsdXR0ZXIiCiAgbWtkaXIgLXAgIiRvdXRwdXRfZGlyIgoKICAjIEZsdXR0ZXIgVklQIEhvb2sKICBsb2NhbCB2aXBfb3V0PSIkb3V0cHV0X2Rpci9ob29rX2ZsdXR0ZXJfdmlwLmpzIgogIGdlbmVyYXRlX2hlYWRlciAiRmx1dHRlciBWSVAgSG9va+iEmuacrCIgPiAiJHZpcF9vdXQiCiAgY2F0ID4+ICIkdmlwX291dCIgPDwnSlMnCi8vIEZsdXR0ZXLnmoREYXJ05Luj56CB57yW6K+R5ZyobGliYXBwLnNv6YeM77yMSG9va+avlOi+g+WbsOmavgovLyDov5nph4zmj5Dkvpvlh6Dnp43mgJ3ot6/vvJoKCi8vIOaWueazleS4gO+8mkhvb2sgRmx1dHRlcuW8leaTjueahOWtl+espuS4suavlOi+g+WHveaVsAovLyBEYXJ055qE5a2X56ym5Liy5q+U6L6D5pyA57uI5Lya6LCD55SoQysr5bGC55qE5Ye95pWwCkludGVyY2VwdG9yLmF0dGFjaChNb2R1bGUuZmluZEV4cG9ydEJ5TmFtZShudWxsLCAic3RyY21wIiksIHsKICAgIG9uRW50ZXI6IGZ1bmN0aW9uKGFyZ3MpIHsKICAgICAgICB2YXIgc3RyMSA9IE1lbW9yeS5yZWFkVXRmOFN0cmluZyhhcmdzWzBdKTsKICAgICAgICB2YXIgc3RyMiA9IE1lbW9yeS5yZWFkVXRmOFN0cmluZyhhcmdzWzFdKTsKICAgICAgICAvLyDlpoLmnpzmr5TovoPnmoTmmK9WSVDnm7jlhbPlrZfnrKbkuLLvvIzmiZPljbDlh7rmnaUKICAgICAgICBpZiAoc3RyMSAmJiAoc3RyMS5pbmRleE9mKCJ2aXAiKSAhPT0gLTEgfHwgc3RyMS5pbmRleE9mKCJwcmVtaXVtIikgIT09IC0xKSkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiW0ZsdXR0ZXItVklQXSBzdHJjbXA6ICciICsgc3RyMSArICInIHZzICciICsgc3RyMiArICInIik7CiAgICAgICAgfQogICAgfQp9KTsKCi8vIOaWueazleS6jO+8mkhvb2sgbGliYXBwLnNv5Lit55qE54m55a6a5Ye95pWw77yI6ZyA6KaB5YWI55SoSURB5YiG5p6Q56ym5Y+377yJCi8vIOWFiOeUqCByZWZsdXR0ZXIg5oiWIGJsdXR0ZXIg5o+Q5Y+WRGFydOWHveaVsOWQjQpjb25zb2xlLmxvZygiWypdIEZsdXR0ZXIgVklQIEhvb2sg5bey5Yqg6L29Iik7CmNvbnNvbGUubG9nKCJbKl0g5o+Q56S6OiDlhYjnlKggJ3JlZmx1dHRlcicg5oiWICdibHV0dGVyJyDlt6Xlhbfmj5Dlj5ZEYXJ05Ye95pWw56ym5Y+377yM5YaN57K+56GuSG9vayIpOwpjb25zb2xlLmxvZygiWypdIOWuieijhXJlZmx1dHRlcjogcGlwIGluc3RhbGwgcmVmbHV0dGVyIik7CmNvbnNvbGUubG9nKCJbKl0g5L2/55SoOiByZWZsdXR0ZXIgYXBwLmFwayAtPiDkvJrnlJ/miJDluKbnrKblj7fnmoRBUEsiKTsKSlMKCiAgIyBGbHV0dGVyIOW5v+WRikhvb2sKICBsb2NhbCBhZF9vdXQ9IiRvdXRwdXRfZGlyL2hvb2tfZmx1dHRlcl9hZC5qcyIKICBnZW5lcmF0ZV9oZWFkZXIgIkZsdXR0ZXIg5bm/5ZGKSG9va+iEmuacrCIgPiAiJGFkX291dCIKICBjYXQgPj4gIiRhZF9vdXQiIDw8J0pTJwovLyBGbHV0dGVy5bm/5ZGK6YCa5bi46YCa6L+HUGxhdGZvcm0gQ2hhbm5lbOiwg+eUqOWOn+eUn+S7o+eggQovLyBIb29rIFBsYXRmb3JtIENoYW5uZWznmoTmlrnms5XosIPnlKgKCkphdmEucGVyZm9ybShmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgICAgdmFyIE1ldGhvZENoYW5uZWwgPSBKYXZhLnVzZSgiaW8uZmx1dHRlci5wbHVnaW4uY29tbW9uLk1ldGhvZENoYW5uZWwiKTsKICAgICAgICBNZXRob2RDaGFubmVsLmludm9rZU1ldGhvZC5vdmVybG9hZCgnamF2YS5sYW5nLlN0cmluZycsICdqYXZhLmxhbmcuT2JqZWN0JywgJ2lvLmZsdXR0ZXIucGx1Z2luLmNvbW1vbi5NZXRob2RDaGFubmVsJFJlc3VsdCcpLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24obWV0aG9kLCBhcmdzLCByZXN1bHQpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIltGbHV0dGVyLUFEXSBNZXRob2RDaGFubmVsLmludm9rZU1ldGhvZDogIiArIG1ldGhvZCk7CiAgICAgICAgICAgIC8vIOaLpuaIquW5v+WRiuebuOWFs+eahOaWueazleiwg+eUqAogICAgICAgICAgICBpZiAobWV0aG9kLmluZGV4T2YoImFkIikgIT09IC0xIHx8CiAgICAgICAgICAgICAgICBtZXRob2QuaW5kZXhPZigiQWQiKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIG1ldGhvZC5pbmRleE9mKCJzaG93IikgIT09IC0xICYmIG1ldGhvZC5pbmRleE9mKCJBZCIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIltGbHV0dGVyLUFEXSDmi6bmiKrlub/lkYrosIPnlKg6ICIgKyBtZXRob2QpOwogICAgICAgICAgICAgICAgLy8g55u05o6l6L+U5Zue5oiQ5Yqf77yM5LiN5bGV56S65bm/5ZGKCiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN1Y2Nlc3MobnVsbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8g5YW25LuW6LCD55So5q2j5bi45omn6KGMCiAgICAgICAgICAgIHRoaXMuaW52b2tlTWV0aG9kKG1ldGhvZCwgYXJncywgcmVzdWx0KTsKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKCJbK10g5beySG9vazogRmx1dHRlciBNZXRob2RDaGFubmVsLmludm9rZU1ldGhvZCgpIik7CiAgICB9IGNhdGNoKGUpIHsKICAgICAgICBjb25zb2xlLmxvZygiWy1dIE1ldGhvZENoYW5uZWwgSG9va+Wksei0pTogIiArIGUubWVzc2FnZSk7CiAgICB9Cn0pOwoKLy8g5ZCM5pe2SG9va+WOn+eUn+W5v+WRilNES++8iEZsdXR0ZXLlub/lkYrmnIDnu4jov5jmmK/opoHosIPnlKjljp/nlJ9TREvvvIkKY29uc29sZS5sb2coIlsqXSBGbHV0dGVy5bm/5ZGKSG9va+W3suWKoOi9ve+8jOWQjOaXtuW7uuiurui/kOihjOWOn+eUn+W5v+WRikhvb2vohJrmnKwiKTsKSlMKCiAgIyBGbHV0dGVyIOmAmueUqEhvb2vmqKHmnb8KICBsb2NhbCBnZW5lcmFsX291dD0iJG91dHB1dF9kaXIvaG9va19mbHV0dGVyX2dlbmVyYWwuanMiCiAgZ2VuZXJhdGVfaGVhZGVyICJGbHV0dGVyIOmAmueUqEhvb2vmqKHmnb8iID4gIiRnZW5lcmFsX291dCIKICBjYXQgPj4gIiRnZW5lcmFsX291dCIgPDwnSlMnCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBGbHV0dGVy6YCa55SoSG9va+aooeadvwovLyDpnIDopoHlhYjmj5Dlj5ZEYXJ056ym5Y+35omN6IO957K+56GuSG9vawovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vIOatpemqpDE6IOaPkOWPlkRhcnTnrKblj7cKLy8gJCBwaXAgaW5zdGFsbCByZWZsdXR0ZXIKLy8gJCByZWZsdXR0ZXIgYXBwLmFwawovLyDov5nkvJrnlJ/miJDkuIDkuKrluKbnrKblj7fnmoRBUEvvvIzlronoo4XlkI7lj6/ku6XnlKhGcmlkYSBIb29r5YW35L2T5Ye95pWwCgovLyDmraXpqqQyOiDmib7liLDnm67moIflh73mlbDnmoTlnLDlnYAKLy8g55SoIHJlZmx1dHRlciDovpPlh7rnmoTnrKblj7fooajvvIzmib7liLBWSVAv5bm/5ZGK5Ye95pWw55qE5YGP56e75Zyw5Z2ACgovLyDmraXpqqQzOiBIb29r55uu5qCH5Ye95pWwCi8vIOekuuS+i++8iOWBh+iuvuW3suefpeWHveaVsOWcsOWdgO+8ie+8mgovLyB2YXIgYmFzZSA9IE1vZHVsZS5maW5kQmFzZUFkZHJlc3MoImxpYmFwcC5zbyIpOwovLyB2YXIgdGFyZ2V0RnVuYyA9IGJhc2UuYWRkKDB4MTIzNDU2KTsgLy8g5pu/5o2i5Li65a6e6ZmF5YGP56e7Ci8vIEludGVyY2VwdG9yLmF0dGFjaCh0YXJnZXRGdW5jLCB7Ci8vICAgICBvbkVudGVyOiBmdW5jdGlvbihhcmdzKSB7Ci8vICAgICAgICAgY29uc29sZS5sb2coIlsqXSDov5vlhaXnm67moIflh73mlbAiKTsKLy8gICAgIH0sCi8vICAgICBvbkxlYXZlOiBmdW5jdGlvbihyZXR2YWwpIHsKLy8gICAgICAgICBjb25zb2xlLmxvZygiWypdIOS/ruaUuei/lOWbnuWAvCIpOwovLyAgICAgICAgIHJldHZhbC5yZXBsYWNlKDEpOyAvLyDlvLrliLbov5Tlm550cnVlCi8vICAgICB9Ci8vIH0pOwoKY29uc29sZS5sb2coIlsqXSBGbHV0dGVy6YCa55SoSG9va+aooeadv+W3suWKoOi9vSIpOwpjb25zb2xlLmxvZygiWypdIOivt+WFiOeUqHJlZmx1dHRlcuaPkOWPluespuWPt++8jOWGjeWhq+WGmeWFt+S9k+WHveaVsOWcsOWdgCIpOwpKUwoKICBlY2hvICJb5a6M5oiQXSBGbHV0dGVyIEhvb2vohJrmnKznm67lvZU6ICRvdXRwdXRfZGlyIgp9CgojID09PT09PT09PT09PT09PT09PT09IFJlYWN0IE5hdGl2ZSBGcmlkYSBIb29rID09PT09PT09PT09PT09PT09PT09CmdlbmVyYXRlX3JlYWN0X25hdGl2ZV9ob29rcygpIHsKICBsb2NhbCBvdXRwdXRfZGlyPSIkT1VUUFVUX0RJUi9yZWFjdF9uYXRpdmUiCiAgbWtkaXIgLXAgIiRvdXRwdXRfZGlyIgoKICBsb2NhbCB2aXBfb3V0PSIkb3V0cHV0X2Rpci9ob29rX3JuX3ZpcC5qcyIKICBnZW5lcmF0ZV9oZWFkZXIgIlJlYWN0IE5hdGl2ZSBWSVAgSG9va+iEmuacrCIgPiAiJHZpcF9vdXQiCiAgY2F0ID4+ICIkdmlwX291dCIgPDwnSlMnCi8vIFJlYWN0IE5hdGl2ZeeahEpT5Luj56CB5ZyoaW5kZXguYW5kcm9pZC5idW5kbGXph4wKLy8g5Y+v5Lul6YCa6L+HSG9vayBKU0MvSGVybWVz55qEQVBJ5p2l5bmy6aKESlPmiafooYwKCi8vIOaWueazleS4gO+8mkhvb2sgSmF2YeWxgueahFJlYWN0TWV0aG9k77yI5qGl5o6l5pa55rOV77yJCkphdmEucGVyZm9ybShmdW5jdGlvbigpIHsKICAgIGNvbnNvbGUubG9nKCJbKl0gUmVhY3QgTmF0aXZlIFZJUCBIb29rIOW3suWQr+WKqCIpOwoKICAgIC8vIEhvb2sgQ2F0YWx5c3RJbnN0YW5jZUltcGwuY2FsbEZ1bmN0aW9uIOadpeaLpuaIqkpT6LCD55SoCiAgICB0cnkgewogICAgICAgIHZhciBDYXRhbHlzdEluc3RhbmNlID0gSmF2YS51c2UoImNvbS5mYWNlYm9vay5yZWFjdC5icmlkZ2UuQ2F0YWx5c3RJbnN0YW5jZUltcGwiKTsKICAgICAgICBDYXRhbHlzdEluc3RhbmNlLmNhbGxGdW5jdGlvbi5vdmVybG9hZCgnamF2YS5sYW5nLlN0cmluZycsICdqYXZhLmxhbmcuU3RyaW5nJywgJ2NvbS5mYWNlYm9vay5yZWFjdC5icmlkZ2UuTmF0aXZlQXJyYXknLCAnamF2YS5sYW5nLlN0cmluZycpLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24obW9kdWxlLCBtZXRob2QsIGFyZ3MsIHRyYWNlTmFtZSkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiW1JOXSBKU+iwg+eUqOWOn+eUnzogIiArIG1vZHVsZSArICIuIiArIG1ldGhvZCk7CiAgICAgICAgICAgIC8vIOaLpuaIqui0reS5sC9WSVDnm7jlhbPosIPnlKgKICAgICAgICAgICAgaWYgKG1vZHVsZS5pbmRleE9mKCJCaWxsaW5nIikgIT09IC0xIHx8CiAgICAgICAgICAgICAgICBtb2R1bGUuaW5kZXhPZigiUHVyY2hhc2UiKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIG1vZHVsZS5pbmRleE9mKCJJQVAiKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIG1ldGhvZC5pbmRleE9mKCJidXkiKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIG1ldGhvZC5pbmRleE9mKCJwdXJjaGFzZSIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIltSTi1WSVBdIOaLpuaIqui0reS5sOiwg+eUqDogIiArIG1vZHVsZSArICIuIiArIG1ldGhvZCk7CiAgICAgICAgICAgICAgICAvLyDov5Tlm57nqbrnu5PmnpzvvIzlgYfoo4XosIPnlKjmiJDlip8KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsRnVuY3Rpb24obW9kdWxlLCBtZXRob2QsIGFyZ3MsIHRyYWNlTmFtZSk7CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IENhdGFseXN0SW5zdGFuY2UuY2FsbEZ1bmN0aW9uKCkiKTsKICAgIH0gY2F0Y2goZSkge30KCiAgICAvLyBIb29rIFNoYXJlZFByZWZlcmVuY2Vz77yIUk7kuZ/kvJrnlKjljp/nlJ/lrZjlgqjvvIkKICAgIHRyeSB7CiAgICAgICAgdmFyIFNoYXJlZFByZWZlcmVuY2VzID0gSmF2YS51c2UoImFuZHJvaWQuYXBwLlNoYXJlZFByZWZlcmVuY2VzSW1wbCIpOwogICAgICAgIFNoYXJlZFByZWZlcmVuY2VzLmdldEJvb2xlYW4ub3ZlcmxvYWQoJ2phdmEubGFuZy5TdHJpbmcnLCAnYm9vbGVhbicpLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oa2V5LCBkZWZWYWx1ZSkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5nZXRCb29sZWFuKGtleSwgZGVmVmFsdWUpOwogICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigidmlwIikgIT09IC0xIHx8CiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJwcmVtaXVtIikgIT09IC0xIHx8CiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJwcm8iKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbUk4tVklQXSBTaGFyZWRQcmVmZXJlbmNlczogIiArIGtleSArICIgLT4g5by65Yi26L+U5ZuedHJ1ZSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKCJbK10g5beySG9vazogU2hhcmVkUHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbigpIik7CiAgICB9IGNhdGNoKGUpIHt9Cn0pOwoKLy8g5pa55rOV5LqM77ya55u05o6l5L+u5pS5SlMgQnVuZGxl77yI5o6o6I2Q77yM5pu0566A5Y2V77yJCi8vIDEuIOS7jkFQS+aPkOWPliBhc3NldHMvaW5kZXguYW5kcm9pZC5idW5kbGUKLy8gMi4g5pCc57SiIGlzUHJlbWl1beOAgWlzVmlwIOetieWFs+mUruivjQovLyAzLiDmioogcmV0dXJuIGZhbHNlIOaUueaIkCByZXR1cm4gdHJ1ZQovLyA0LiDph43mlrDmiZPljIVBUEsKLy8g6L+Z5q+URnJpZGEgSG9va+abtOeos+Wumu+8gQpKUwoKICBsb2NhbCBhZF9vdXQ9IiRvdXRwdXRfZGlyL2hvb2tfcm5fYWQuanMiCiAgZ2VuZXJhdGVfaGVhZGVyICJSZWFjdCBOYXRpdmUg5bm/5ZGKSG9va+iEmuacrCIgPiAiJGFkX291dCIKICBjYXQgPj4gIiRhZF9vdXQiIDw8J0pTJwpKYXZhLnBlcmZvcm0oZnVuY3Rpb24oKSB7CiAgICBjb25zb2xlLmxvZygiWypdIFJlYWN0IE5hdGl2ZSDlub/lkYpIb29rIOW3suWQr+WKqCIpOwoKICAgIC8vIEhvb2vlub/lkYrnm7jlhbPnmoTljp/nlJ/mqKHlnZfosIPnlKgKICAgIHRyeSB7CiAgICAgICAgdmFyIENhdGFseXN0SW5zdGFuY2UgPSBKYXZhLnVzZSgiY29tLmZhY2Vib29rLnJlYWN0LmJyaWRnZS5DYXRhbHlzdEluc3RhbmNlSW1wbCIpOwogICAgICAgIENhdGFseXN0SW5zdGFuY2UuY2FsbEZ1bmN0aW9uLm92ZXJsb2FkKCdqYXZhLmxhbmcuU3RyaW5nJywgJ2phdmEubGFuZy5TdHJpbmcnLCAnY29tLmZhY2Vib29rLnJlYWN0LmJyaWRnZS5OYXRpdmVBcnJheScsICdqYXZhLmxhbmcuU3RyaW5nJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihtb2R1bGUsIG1ldGhvZCwgYXJncywgdHJhY2VOYW1lKSB7CiAgICAgICAgICAgIC8vIOaLpuaIquW5v+WRiuaooeWdlwogICAgICAgICAgICBpZiAobW9kdWxlLmluZGV4T2YoIkFkIikgIT09IC0xIHx8CiAgICAgICAgICAgICAgICBtb2R1bGUuaW5kZXhPZigiYWQiKSAhPT0gLTEgfHwKICAgICAgICAgICAgICAgIG1ldGhvZC5pbmRleE9mKCJzaG93IikgIT09IC0xICYmIChtb2R1bGUuaW5kZXhPZigiQWQiKSAhPT0gLTEgfHwgbW9kdWxlLmluZGV4T2YoImFkIikgIT09IC0xKSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIltSTi1BRF0g5oum5oiq5bm/5ZGKOiAiICsgbW9kdWxlICsgIi4iICsgbWV0aG9kKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsRnVuY3Rpb24obW9kdWxlLCBtZXRob2QsIGFyZ3MsIHRyYWNlTmFtZSk7CiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIOW3skhvb2s6IOW5v+WRiuebuOWFs+iwg+eUqCIpOwogICAgfSBjYXRjaChlKSB7fQoKICAgIC8vIOWQjOaXtkhvb2vljp/nlJ/lub/lkYpTREsKICAgIHZhciBhZENsYXNzZXMgPSBbCiAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5nbXMuYWRzLkFkVmlldyIsCiAgICAgICAgImNvbS5mYWNlYm9vay5hZHMuQWRWaWV3IiwKICAgICAgICAiY29tLmJ5dGVkYW5jZS5zZGsub3BlbmFkc2RrLlRUTmF0aXZlRXhwcmVzc0FkIgogICAgXTsKICAgIGFkQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKGNsYXNzTmFtZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBBZENsYXNzID0gSmF2YS51c2UoY2xhc3NOYW1lKTsKICAgICAgICAgICAgaWYgKEFkQ2xhc3MubG9hZEFkKSB7CiAgICAgICAgICAgICAgICBBZENsYXNzLmxvYWRBZC5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbUk4tQURdIOaLpuaIquWOn+eUn+W5v+WRiuWKoOi9vTogIiArIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlsrXSDlt7JIb29r5Y6f55Sf5bm/5ZGKOiAiICsgY2xhc3NOYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2goZSkge30KICAgIH0pOwp9KTsKSlMKCiAgZWNobyAiW+WujOaIkF0gUmVhY3QgTmF0aXZlIEhvb2vohJrmnKznm67lvZU6ICRvdXRwdXRfZGlyIgp9CgojID09PT09PT09PT09PT09PT09PT09IOmAmueUqFNTTCBQaW5uaW5n57uV6L+H6ISa5pysID09PT09PT09PT09PT09PT09PT09CmdlbmVyYXRlX3NzbF9waW5uaW5nX2J5cGFzcygpIHsKICBsb2NhbCBvdXRwdXQ9IiRPVVRQVVRfRElSL3NzbF9waW5uaW5nX2J5cGFzcy5qcyIKICBnZW5lcmF0ZV9oZWFkZXIgIlNTTCBQaW5uaW5nIOe7lei/h+iEmuacrCAo6YCa55SoKSIgPiAiJG91dHB1dCIKCiAgY2F0ID4+ICIkb3V0cHV0IiA8PCdKUycKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFNTTCBQaW5uaW5nIOe7lei/h+iEmuacrAovLyDlj6/ku6Xnu5Xov4flpKfpg6jliIZBUFDnmoRIVFRQU+ivgeS5puagoemqjAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkphdmEucGVyZm9ybShmdW5jdGlvbigpIHsKICAgIGNvbnNvbGUubG9nKCJbKl0gU1NMIFBpbm5pbmcgQnlwYXNzIOW3suWQr+WKqCIpOwoKICAgIC8vIOaWueazleS4gO+8mkhvb2sgWDUwOVRydXN0TWFuYWdlcgogICAgdmFyIFg1MDlUcnVzdE1hbmFnZXIgPSBKYXZhLnVzZSgiamF2YXgubmV0LnNzbC5YNTA5VHJ1c3RNYW5hZ2VyIik7CiAgICB2YXIgU1NMQ29udGV4dCA9IEphdmEudXNlKCJqYXZheC5uZXQuc3NsLlNTTENvbnRleHQiKTsKCiAgICAvLyDliJvlu7rkuIDkuKrnqbrnmoRUcnVzdE1hbmFnZXLvvIzkv6Hku7vmiYDmnInor4HkuaYKICAgIHZhciBUcnVzdE1hbmFnZXIgPSBKYXZhLnJlZ2lzdGVyQ2xhc3MoewogICAgICAgIG5hbWU6ICJjb20uZXhhbXBsZS5UcnVzdE1hbmFnZXIiLAogICAgICAgIGltcGxlbWVudHM6IFtYNTA5VHJ1c3RNYW5hZ2VyXSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICAgIGNoZWNrQ2xpZW50VHJ1c3RlZDogZnVuY3Rpb24oY2hhaW4sIGF1dGhUeXBlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiW1NTTF0gY2hlY2tDbGllbnRUcnVzdGVkIC0g5L+h5Lu75omA5pyJ5a6i5oi356uv6K+B5LmmIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNoZWNrU2VydmVyVHJ1c3RlZDogZnVuY3Rpb24oY2hhaW4sIGF1dGhUeXBlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiW1NTTF0gY2hlY2tTZXJ2ZXJUcnVzdGVkIC0g5L+h5Lu75omA5pyJ5pyN5Yqh5Zmo6K+B5LmmIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldEFjY2VwdGVkSXNzdWVyczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICAvLyDnlKjmiJHku6znmoRUcnVzdE1hbmFnZXLmm7/mjaLns7vnu5/nmoQKICAgIHZhciBUcnVzdE1hbmFnZXJzID0gW1RydXN0TWFuYWdlci4kbmV3KCldOwogICAgdmFyIFNTTENvbnRleHRfaW5pdCA9IFNTTENvbnRleHQuaW5pdC5vdmVybG9hZCgKICAgICAgICAiW0xqYXZheC5uZXQuc3NsLktleU1hbmFnZXI7IiwKICAgICAgICAiW0xqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlcjsiLAogICAgICAgICJqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbSIKICAgICk7CiAgICBTU0xDb250ZXh0X2luaXQuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihrZXlNYW5hZ2VyLCB0cnVzdE1hbmFnZXIsIHNlY3VyZVJhbmRvbSkgewogICAgICAgIGNvbnNvbGUubG9nKCJbU1NMXSDmi6bmiKpTU0xDb250ZXh0LmluaXQoKe+8jOabv+aNouS4uuS/oeS7u+aJgOacieivgeS5pueahFRydXN0TWFuYWdlciIpOwogICAgICAgIFNTTENvbnRleHRfaW5pdC5jYWxsKHRoaXMsIGtleU1hbmFnZXIsIFRydXN0TWFuYWdlcnMsIHNlY3VyZVJhbmRvbSk7CiAgICB9OwogICAgY29uc29sZS5sb2coIlsrXSBTU0xDb250ZXh0LmluaXQoKSDlt7JIb29rIik7CgogICAgLy8g5pa55rOV5LqM77yaSG9vayBPa0h0dHDnmoRDZXJ0aWZpY2F0ZVBpbm5lcgogICAgdHJ5IHsKICAgICAgICB2YXIgQ2VydGlmaWNhdGVQaW5uZXIgPSBKYXZhLnVzZSgib2todHRwMy5DZXJ0aWZpY2F0ZVBpbm5lciIpOwogICAgICAgIENlcnRpZmljYXRlUGlubmVyLmNoZWNrLm92ZXJsb2FkKCdqYXZhLmxhbmcuU3RyaW5nJywgJ2phdmEudXRpbC5MaXN0JykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihob3N0bmFtZSwgY2VydGlmaWNhdGVzKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbU1NMXSBPa0h0dHAgQ2VydGlmaWNhdGVQaW5uZXIuY2hlY2soKSAtIOe7lei/hzogIiArIGhvc3RuYW1lKTsKICAgICAgICAgICAgLy8g5LiN5oqb5Ye65byC5bi477yM55u05o6l6L+U5ZueCiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZygiWytdIE9rSHR0cCBDZXJ0aWZpY2F0ZVBpbm5lciDlt7JIb29rIik7CiAgICB9IGNhdGNoKGUpIHsKICAgICAgICBjb25zb2xlLmxvZygiWy1dIE9rSHR0cCBDZXJ0aWZpY2F0ZVBpbm5lciBIb29r5aSx6LSlICjlj6/og73msqHnlKjliLBPa0h0dHApIik7CiAgICB9CgogICAgLy8g5pa55rOV5LiJ77yaSG9vayBBcGFjaGUgSFRUUCBDbGllbnTnmoRIb3N0bmFtZVZlcmlmaWVyCiAgICB0cnkgewogICAgICAgIHZhciBEZWZhdWx0SG9zdG5hbWVWZXJpZmllciA9IEphdmEudXNlKCJvcmcuYXBhY2hlLmh0dHAuY29ubi5zc2wuRGVmYXVsdEhvc3RuYW1lVmVyaWZpZXIiKTsKICAgICAgICBEZWZhdWx0SG9zdG5hbWVWZXJpZmllci52ZXJpZnkub3ZlcmxvYWQoJ2phdmEubGFuZy5TdHJpbmcnLCAnamF2YXgubmV0LnNzbC5TU0xTZXNzaW9uJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihob3N0bmFtZSwgc2Vzc2lvbikgewogICAgICAgICAgICBjb25zb2xlLmxvZygiW1NTTF0gQXBhY2hlIEhvc3RuYW1lVmVyaWZpZXIgLSDnu5Xov4c6ICIgKyBob3N0bmFtZSk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2coIlsrXSBBcGFjaGUgSG9zdG5hbWVWZXJpZmllciDlt7JIb29rIik7CiAgICB9IGNhdGNoKGUpIHt9CgogICAgLy8g5pa55rOV5Zub77yaSG9vayBXZWJWaWV355qEU1NM6ZSZ6K+v5aSE55CGCiAgICB0cnkgewogICAgICAgIHZhciBXZWJWaWV3Q2xpZW50ID0gSmF2YS51c2UoImFuZHJvaWQud2Via2l0LldlYlZpZXdDbGllbnQiKTsKICAgICAgICBXZWJWaWV3Q2xpZW50Lm9uUmVjZWl2ZWRTc2xFcnJvci5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKHZpZXcsIGhhbmRsZXIsIGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbU1NMXSBXZWJWaWV3IFNTTOmUmeivryAtIOiHquWKqOe7p+e7rSIpOwogICAgICAgICAgICBoYW5kbGVyLnByb2NlZWQoKTsKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKCJbK10gV2ViVmlldyBTU0zplJnor6/lpITnkIYg5beySG9vayIpOwogICAgfSBjYXRjaChlKSB7fQoKICAgIGNvbnNvbGUubG9nKCJbKl0gU1NMIFBpbm5pbmcgQnlwYXNzIOiuvue9ruWujOaIkO+8geeOsOWcqOWPr+S7peeUqEh0dHBDYW5hcnkvQ2hhcmxlc+aKk+WMheS6hiIpOwp9KTsKSlMKCiAgZWNobyAiW+WujOaIkF0gU1NMIFBpbm5pbmfnu5Xov4fohJrmnKw6ICRvdXRwdXQiCn0KCiMgPT09PT09PT09PT09PT09PT09PT0g5aSn55m96K+d5L2/55So6K+05piOID09PT09PT09PT09PT09PT09PT09CmdlbmVyYXRlX3VzYWdlX2d1aWRlKCkgewogIGxvY2FsIG91dHB1dD0iJE9VVFBVVF9ESVIv5L2/55So6K+05piOX+Wkp+eZveivneeJiC5tZCIKICBjYXQgPiAiJG91dHB1dCIgPDxFT0YKIyBGcmlkYSBIb29rIOiEmuacrOS9v+eUqOivtOaYju+8iOWkp+eZveivneeJiO+8iQoKIyMg5LuA5LmI5pivRnJpZGHvvJ8KCkZyaWRh5bCx5piv5LiA5LiqIuS4remXtOS6uiLlt6XlhbfvvIzlroPmj5LlnKjkvaDmiYvmnLrlkoxBUFDkuYvpl7TvvIwK5b2TQVBQ6KaB5omn6KGM5p+Q5Liq5Yqf6IO955qE5pe25YCZ77yMRnJpZGHlj6/ku6Ui5oiq6IOhIu+8jArmiopBUFDnmoTku6PnoIHmlLnmiJDkvaDmg7PorqnlroPmiafooYznmoTmoLflrZDjgIIKCuavlOWmgkFQUOimgeajgOafpSLkvaDmmK/kuI3mmK9WSVAi77yMRnJpZGHlj6/ku6XmiKrkvY/ov5nkuKrmo4Dmn6XvvIwK55u05o6l5ZGK6K+JQVBQIuS7luaYr1ZJUCLvvIzov5nmoLfkvaDlsLHlj5jmiJBWSVDkuobjgIIKCiMjIOWHhuWkh+W3peS9nAoKIyMjIDEuIOaJi+acuuerr++8iOmcgOimgVJvb3TvvIkKCmBgYGJhc2gKIyDkuIvovb3lr7nlupTkvaDmiYvmnLrmnrbmnoTnmoRmcmlkYS1zZXJ2ZXIKIyDljrsgaHR0cHM6Ly9naXRodWIuY29tL2ZyaWRhL2ZyaWRhL3JlbGVhc2VzIOS4i+i9vQojIOavlOWmgiBhcm02NCDmiYvmnLrkuIvovb0gZnJpZGEtc2VydmVyLXh4LngueC1hbmRyb2lkLWFybTY0Lnh6CgojIOino+WOi+W5tuaOqOmAgeWIsOaJi+acugp4eiAtZCBmcmlkYS1zZXJ2ZXIteHgueC54LWFuZHJvaWQtYXJtNjQueHoKYWRiIHB1c2ggZnJpZGEtc2VydmVyLXh4LngueC1hbmRyb2lkLWFybTY0IC9kYXRhL2xvY2FsL3RtcC9mcmlkYS1zZXJ2ZXIKYWRiIHNoZWxsICJjaG1vZCA3NTUgL2RhdGEvbG9jYWwvdG1wL2ZyaWRhLXNlcnZlciIKCiMg5ZCv5YqoZnJpZGEtc2VydmVyCmFkYiBzaGVsbCAiL2RhdGEvbG9jYWwvdG1wL2ZyaWRhLXNlcnZlciAmIgpgYGAKCiMjIyAyLiDnlLXohJHnq68KCmBgYGJhc2gKIyDlronoo4VmcmlkYeW3peWFtwpwaXAgaW5zdGFsbCBmcmlkYS10b29scwoKIyDpqozor4Hlronoo4UKZnJpZGEgLS12ZXJzaW9uCmBgYAoKIyMg5L2/55So5pa55rOVCgojIyMg5pa55rOVQe+8muWQr+WKqEFQUOaXtuazqOWFpe+8iOaOqOiNkO+8iQoKYGBgYmFzaAojIOWQr+WKqEFQUOW5tuWKoOi9vUhvb2vohJrmnKwKZnJpZGEgLVUgLWYgJFBBQ0tBR0UgLWwgaG9va192aXBfJHtQQUNLQUdFLy8uL199LmpzCgojIOWPguaVsOivtOaYju+8mgojIC1VICA9IOi/nuaOpVVTQuiuvuWkhwojIC1mICA9IOWQr+WKqEFQUO+8iHNwYXdu5qih5byP77yJCiMgLWwgID0g5Yqg6L296ISa5pysCmBgYAoKIyMjIOaWueazlULvvJrpmYTliqDliLDlt7Lov5DooYznmoRBUFAKCmBgYGJhc2gKIyDlhYjmiZPlvIBBUFDvvIznhLblkI7pmYTliqAKZnJpZGEgLVUgJFBBQ0tBR0UgLWwgaG9va192aXBfJHtQQUNLQUdFLy8uL199LmpzCgojIOi/meenjeaWueazleacieaXtuWAmUhvb2vkuI3liLBBUFDlkK/liqjml7bnmoTku6PnoIEKYGBgCgojIyMg5pa55rOVQ++8muWQjOaXtuWKoOi9veWkmuS4quiEmuacrAoKYGBgYmFzaAojIOWFiOWQr+WKqOS4gOS4qmZyaWRh5Lya6K+dCmZyaWRhIC1VIC1mICRQQUNLQUdFCgojIOeEtuWQjuWcqGZyaWRh55qE5Lqk5LqS55WM6Z2i6YeM5Yqg6L296ISa5pysCltGcmlkYV0tPiAlbG9hZCBob29rX3ZpcF8ke1BBQ0tBR0UvLy4vX30uanMKW0ZyaWRhXS0+ICVsb2FkIGhvb2tfYWRfJHtQQUNLQUdFLy8uL199LmpzCmBgYAoKIyMg5ZCE6ISa5pys5Yqf6IO96K+05piOCgp8IOiEmuacrCB8IOWKn+iDvSB8IOS7gOS5iOaXtuWAmeeUqCB8CnwtLS18LS0tfC0tLXwKfCBob29rX3ZpcF8qLmpzIHwg5by65Yi26L+U5ZueVklQPXRydWUgfCDmg7Pnmb3lq5ZWSVDlip/og70gfAp8IGhvb2tfYWRfKi5qcyB8IOaLpuaIquW5v+WRiuWxleekuiB8IOaDs+WOu+W5v+WRiiB8CnwgaG9va19wb3B1cF8qLmpzIHwg5oum5oiq5by556qXIHwg5oOz5Y675o6J5pu05paw5o+Q56S644CB6K+E5YiG5by556qXIHwKfCBzc2xfcGlubmluZ19ieXBhc3MuanMgfCDnu5Xov4dIVFRQU+ivgeS5puagoemqjCB8IOaDs+aKk+WMheeci0FQUOWPkeS6huS7gOS5iOivt+axgiB8CgojIyDluLjop4Hpl67popgKCioqUTog6L+Q6KGMZnJpZGHmj5DnpLoiRmFpbGVkIHRvIHNwYXduIioqCkE6IOajgOafpWZyaWRhLXNlcnZlcuaYr+WQpuWQr+WKqO+8jOaJi+acuuaYr+WQplJvb3TvvIxVU0LosIPor5XmmK/lkKblvIDlkK8KCioqUTogSG9va+S6huS9huaYr+ayoeaViOaenCoqCkE6IOWPr+iDvUFQUOeUqOS6hk5hdGl2ZeS7o+egge+8iEMvQysr77yJ5YGa5qCh6aqM77yM6ZyA6KaBSG9vayBzb+aWh+S7tgoKKipROiBBUFDpl6rpgIAqKgpBOiBIb29r5aSq5r+A6L+b5LqG77yM5bCd6K+V5Y+qSG9va+eJueWumuaWueazle+8jOS4jeimgUhvb2vmiYDmnInnsbsKCioqUTog5oCO5LmI5om+6KaBSG9va+eahOaWueazleWQje+8nyoqCkE6IOeUqOacrOWll+a1geawtOe6v+eahOWIhuaekOiEmuacrO+8jOWug+S8muiHquWKqOaJvuWHulZJUC/lub/lkYrnm7jlhbPnmoTmlrnms5UKCiMjIOi/m+mYtuaKgOW3pwoKIyMjIOiHquWKqOWPkeWlluWKse+8iOeci+W5v+WRiuW+l+WlluWKseS9huS4jeeUqOeci++8iQoKaG9va19hZOiEmuacrOmHjOW3sue7j+WunueOsOS6hui/meS4quWKn+iDve+8mgrlvZNBUFDosIPnlKhzaG93UmV3YXJkZWRBZCgp5pe277yM6ISa5pys5Lya6Ieq5Yqo6LCD55Sob25Vc2VyRWFybmVkUmV3YXJkKCnvvIwK6L+Z5qC35L2g5LiN55So55yL5bm/5ZGK77yM55u05o6l5ou/5Yiw5aWW5Yqx44CCCgojIyMg6YWN5ZCI5oqT5YyF5bel5YW3CgoxLiDlhYjov5DooYwgc3NsX3Bpbm5pbmdfYnlwYXNzLmpzIOe7lei/h+ivgeS5puagoemqjAoyLiDnhLblkI7miZPlvIAgSHR0cENhbmFyeSDmiJYgQ2hhcmxlcwozLiDnjrDlnKjlj6/ku6XmipPliLBBUFDnmoRIVFRQU+ivt+axguS6hgo0LiDliIbmnpBBUEnlk43lupTvvIzmib7liLBWSVDnirbmgIHlrZfmrrUKCiMjIOWuieWFqOaPkOekugoKLSBGcmlkYemcgOimgVJvb3TmnYPpmZDvvIzkuI1Sb2905rKh5rOV55SoCi0g5pyJ5LqbQVBQ5Lya5qOA5rWLRnJpZGHvvIzpnIDopoHphY3lkIjpmpDol4/lt6XlhbcKLSDku4XkvpvlrabkuaDnoJTnqbbvvIzkuI3opoHnlKjkuo7pnZ7ms5XnlKjpgJQKRU9GCgogIGVjaG8gIlvlrozmiJBdIOS9v+eUqOivtOaYjjogJG91dHB1dCIKfQoKIyA9PT09PT09PT09PT09PT09PT09PSDkuLvmtYHnqIsgPT09PT09PT09PT09PT09PT09PT0KbWFpbigpIHsKICBlY2hvICIiCiAgZWNobyAi5byA5aeL55Sf5oiQRnJpZGEgSG9va+iEmuacrC4uLiIKICBlY2hvICIiCgogICMg5qC55o2u5qGG5p6255Sf5oiQ5a+55bqU55qE6ISa5pysCiAgY2FzZSAiJEZSQU1FV09SSyIgaW4KICAgIG5hdGl2ZSkKICAgICAgaWYgW1sgIiRHRU5FUkFURV9BTEwiID09IHRydWUgXV07IHRoZW4KICAgICAgICBnZW5lcmF0ZV9uYXRpdmVfdmlwCiAgICAgICAgZ2VuZXJhdGVfbmF0aXZlX2FkCiAgICAgICAgZ2VuZXJhdGVfbmF0aXZlX3BvcHVwCiAgICAgICAgZ2VuZXJhdGVfc3NsX3Bpbm5pbmdfYnlwYXNzCiAgICAgIGVsc2UKICAgICAgICBbWyAtbiAiJFZJUF9NRVRIT0RTX0ZJTEUiIF1dICYmIGdlbmVyYXRlX25hdGl2ZV92aXAKICAgICAgICBbWyAtbiAiJEFEX01FVEhPRFNfRklMRSIgXV0gJiYgZ2VuZXJhdGVfbmF0aXZlX2FkCiAgICAgICAgW1sgLW4gIiRQT1BVUF9NRVRIT0RTX0ZJTEUiIF1dICYmIGdlbmVyYXRlX25hdGl2ZV9wb3B1cAogICAgICBmaQogICAgICA7OwogICAgZmx1dHRlcikKICAgICAgZ2VuZXJhdGVfZmx1dHRlcl9ob29rcwogICAgICBnZW5lcmF0ZV9zc2xfcGlubmluZ19ieXBhc3MKICAgICAgOzsKICAgIHJlYWN0X25hdGl2ZSkKICAgICAgZ2VuZXJhdGVfcmVhY3RfbmF0aXZlX2hvb2tzCiAgICAgIGdlbmVyYXRlX3NzbF9waW5uaW5nX2J5cGFzcwogICAgICA7OwogICAgdW5pdHkpCiAgICAgIGVjaG8gIlvmj5DnpLpdIFVuaXR55ri45oiP55qERnJpZGEgSG9va+avlOi+g+Wkjeadgu+8jOW7uuiurueUqElMMkNQUCBEdW1wZXLmj5Dlj5bnrKblj7flkI7lho1Ib29rIgogICAgICBnZW5lcmF0ZV9zc2xfcGlubmluZ19ieXBhc3MKICAgICAgOzsKICAgICopCiAgICAgIGVjaG8gIlvmj5DnpLpdIOacquefpeahhuaetu+8jOeUn+aIkOmAmueUqOiEmuacrCIKICAgICAgZ2VuZXJhdGVfbmF0aXZlX3ZpcAogICAgICBnZW5lcmF0ZV9uYXRpdmVfYWQKICAgICAgZ2VuZXJhdGVfbmF0aXZlX3BvcHVwCiAgICAgIGdlbmVyYXRlX3NzbF9waW5uaW5nX2J5cGFzcwogICAgICA7OwogIGVzYWMKCiAgIyDnlJ/miJDkvb/nlKjor7TmmI4KICBnZW5lcmF0ZV91c2FnZV9ndWlkZQoKICBlY2hvICIiCiAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICBlY2hvICIgRnJpZGEgSG9vayDohJrmnKznlJ/miJDlrozmiJDvvIEiCiAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICBlY2hvICIiCiAgZWNobyAiICDovpPlh7rnm67lvZU6ICRPVVRQVVRfRElSIgogIGVjaG8gIiIKICBlY2hvICIgIOeUn+aIkOeahOaWh+S7tjoiCiAgZmluZCAiJE9VVFBVVF9ESVIiIC10eXBlIGYgfCBzZWQgJ3N8Lip8ICAgIC0gJnwnCiAgZWNobyAiIgogIGVjaG8gIiAg5L2/55So5pa55rOVOiIKICBlY2hvICIgICAgZnJpZGEgLVUgLWYgJFBBQ0tBR0UgLWwgJE9VVFBVVF9ESVIvaG9va192aXBfJHtQQUNLQUdFLy8uL199LmpzIgogIGVjaG8gIiIKICBlY2hvICIgIOivpue7huivtOaYjuivt+afpeecizogJE9VVFBVVF9ESVIv5L2/55So6K+05piOX+Wkp+eZveivneeJiC5tZCIKICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Igp9CgptYWluICIkQCIK
B64EOF_generate-frida-scripts.sh
chmod +x "$DECODE_DIR/generate-frida-scripts.sh" 2>/dev/null

echo "恢复: install-dep.sh ..."
base64 -d << 'B64EOF_install-dep.sh' > "$DECODE_DIR/install-dep.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGluc3RhbGwtZGVwLnNoIOKAlCDlronoo4Xkvp3otZYKc2V0IC1ldW8gcGlwZWZhaWwKCkRFUD0iJDEiCgpjYXNlICIkREVQIiBpbgogIGphZHgpCiAgICBlY2hvICLmraPlnKjlronoo4UgamFkeC4uLiIKICAgIGFwdC1nZXQgdXBkYXRlIC1xcSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgLXFxIHVuemlwIHdnZXQgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgY2QgL3RtcAogICAgd2dldCAtcSAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIGh0dHBzOi8vZ2l0aHViLmNvbS9za3lsb3QvamFkeC9yZWxlYXNlcy9kb3dubG9hZC92MS41LjEvamFkeC0xLjUuMS56aXAgLU8gamFkeC56aXAKICAgIHVuemlwIC1xbyBqYWR4LnppcCAtZCBqYWR4CiAgICBlY2hvICJqYWR4IOWuieijheWujOaIkDogL3RtcC9qYWR4L2Jpbi9qYWR4IgogICAgOzsKICB1bnppcCkKICAgIGFwdC1nZXQgdXBkYXRlIC1xcSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgLXFxIHVuemlwIDI+L2Rldi9udWxsIHx8IHRydWUKICAgIDs7CiAgYmludXRpbHMpCiAgICBhcHQtZ2V0IHVwZGF0ZSAtcXEgJiYgYXB0LWdldCBpbnN0YWxsIC15IC1xcSBiaW51dGlscyAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICA7OwogICopCiAgICBlY2hvICLmnKrnn6Xkvp3otZY6ICRERVAiCiAgICBleGl0IDEKICAgIDs7CmVzYWMK
B64EOF_install-dep.sh
chmod +x "$DECODE_DIR/install-dep.sh" 2>/dev/null

echo "恢复: launcher.sh ..."
base64 -d << 'B64EOF_launcher.sh' > "$DECODE_DIR/launcher.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGxhdW5jaGVyLnNoIOKAlCBBbmRyb2lkIOmAhuWQkeW3peeoi+S4gOmUruWIhuaekOWQr+WKqOWZqAojIOeUqOazlTogYmFzaCBsYXVuY2hlci5zaCA8YXBwLmFwaz4gWy0tc2VjdXJpdHldIFstLWZyaWRhXQpzZXQgLWV1byBwaXBlZmFpbAoKU0NSSVBUX0RJUj0iJChjZCAiJChkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIpIiAmJiBwd2QpIgpTQ1JJUFRTX0RJUj0iJFNDUklQVF9ESVIvc2NyaXB0cyIKClJFRD0nXDAzM1swOzMxbScKR1JFRU49J1wwMzNbMDszMm0nCllFTExPVz0nXDAzM1sxOzMzbScKQkxVRT0nXDAzM1swOzM0bScKQ1lBTj0nXDAzM1swOzM2bScKTkM9J1wwMzNbMG0nCgpsb2dfaW5mbygpICB7IGVjaG8gLWUgIiR7QkxVRX1b5L+h5oGvXSR7TkN9ICQqIjsgfQpsb2dfb2soKSAgICB7IGVjaG8gLWUgIiR7R1JFRU59W+WujOaIkF0ke05DfSAkKiI7IH0KbG9nX3dhcm4oKSAgeyBlY2hvIC1lICIke1lFTExPV31b5o+Q56S6XSR7TkN9ICQqIjsgfQpsb2dfZXJyb3IoKSB7IGVjaG8gLWUgIiR7UkVEfVvplJnor69dJHtOQ30gJCoiOyB9CmxvZ19mcmFtZSgpIHsgZWNobyAtZSAiJHtDWUFOfVvmoYbmnrZdJHtOQ30gJCoiOyB9Cgp1c2FnZSgpIHsKICBjYXQgPDxFT0YKVXNhZ2U6IGxhdW5jaGVyLnNoIFtPUFRJT05TXSA8ZmlsZS5hcGt8eGFwa3xqYXJ8YWFyPgoKQW5kcm9pZCDpgIblkJHlt6XnqIvkuIDplK7liIbmnpAKCumAiemhuToKICAtLXNlY3VyaXR5ICAgIOWQr+eUqOWuieWFqOWIhuaekO+8iFZJUC/lub/lkYov5by556qXL+etvuWQjS/lj43osIPor5Uv5Yqg5a+G77yJCiAgLS1mcmlkYSAgICAgICDnlJ/miJAgRnJpZGEgSG9vayDohJrmnKwKICAtLWFsbCAgICAgICAgIOWQr+eUqOaJgOacieWIhuaekO+8iHNlY3VyaXR5ICsgZnJpZGHvvIkKICAtbyBESVIgICAgICAgIOi+k+WHuuebruW9lQogIC1oLCAtLWhlbHAgICAg5pi+56S65biu5YqpCgrnpLrkvos6CiAgbGF1bmNoZXIuc2ggYXBwLmFwawogIGxhdW5jaGVyLnNoIC0tc2VjdXJpdHkgYXBwLmFwawogIGxhdW5jaGVyLnNoIC0tYWxsIGFwcC5hcGsKRU9GCiAgZXhpdCAwCn0KCiMg6Kej5p6Q5Y+C5pWwClNFQ1VSSVRZPWZhbHNlCkZSSURBPWZhbHNlCk9VVFBVVF9ESVI9IiIKSU5QVVRfRklMRT0iIgoKd2hpbGUgW1sgJCMgLWd0IDAgXV07IGRvCiAgY2FzZSAiJDEiIGluCiAgICAtLXNlY3VyaXR5KSBTRUNVUklUWT10cnVlOyBzaGlmdCA7OwogICAgLS1mcmlkYSkgRlJJREE9dHJ1ZTsgc2hpZnQgOzsKICAgIC0tYWxsKSBTRUNVUklUWT10cnVlOyBGUklEQT10cnVlOyBzaGlmdCA7OwogICAgLW8pIE9VVFBVVF9ESVI9IiQyIjsgc2hpZnQgMiA7OwogICAgLWh8LS1oZWxwKSB1c2FnZSA7OwogICAgKikgSU5QVVRfRklMRT0iJDEiOyBzaGlmdCA7OwogIGVzYWMKZG9uZQoKaWYgW1sgLXogIiRJTlBVVF9GSUxFIiBdXTsgdGhlbgogIGxvZ19lcnJvciAi6K+35oyH5a6aIEFQSyDmlofku7YiCiAgdXNhZ2UKZmkKCmlmIFtbICEgLWYgIiRJTlBVVF9GSUxFIiBdXTsgdGhlbgogIGxvZ19lcnJvciAi5paH5Lu25LiN5a2Y5ZyoOiAkSU5QVVRfRklMRSIKICBleGl0IDEKZmkKCiMg5qOA5p+l546v5aKDCmxvZ19pbmZvICLmo4Dmn6Xnjq/looMuLi4iCmlmICEgY29tbWFuZCAtdiBqYWR4ICY+L2Rldi9udWxsICYmIFtbICEgLWYgIi9vcHQvamFkeC9iaW4vamFkeCIgXV07IHRoZW4KICBsb2dfd2FybiAiamFkeCDmnKrlronoo4XvvIzov5DooYwgc2V0dXAuc2gg5a6J6KOFLi4uIgogIGJhc2ggIiRTQ1JJUFRfRElSL3NldHVwLnNoIgpmaQoKIyDmnoTlu7rlj4LmlbAKQVJHUz0oKQpbWyAiJFNFQ1VSSVRZIiA9PSB0cnVlIF1dICYmIEFSR1MrPSgiLS1zZWN1cml0eSIpCltbIC1uICIkT1VUUFVUX0RJUiIgXV0gJiYgQVJHUys9KCItbyIgIiRPVVRQVVRfRElSIikKQVJHUys9KCIkSU5QVVRfRklMRSIpCgojIOi/kOihjOWIhuaekAplY2hvICIiCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8gIiDwn5qAIEFuZHJvaWQg6YCG5ZCR5bel56iL5LiA6ZSu5YiG5p6QIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvICIiCmxvZ19pbmZvICLnm67moIc6ICQocmVhbHBhdGggIiRJTlBVVF9GSUxFIikiCmxvZ19pbmZvICLlronlhajliIbmnpA6ICQoW1sgIiRTRUNVUklUWSIgPT0gdHJ1ZSBdXSAmJiBlY2hvICLlkK/nlKgiIHx8IGVjaG8gIuacquWQr+eUqCIpIgpsb2dfaW5mbyAiRnJpZGHohJrmnKw6ICQoW1sgIiRGUklEQSIgPT0gdHJ1ZSBdXSAmJiBlY2hvICLlkK/nlKgiIHx8IGVjaG8gIuacquWQr+eUqCIpIgplY2hvICIiCgpiYXNoICIkU0NSSVBUU19ESVIvYXV0by1yZXZlcnNlLnNoIiAiJHtBUkdTW0BdfSIKCiMg5aaC5p6c5ZCv55So5LqGIGZyaWRh77yM6aKd5aSW55Sf5oiQ6ISa5pysCmlmIFtbICIkRlJJREEiID09IHRydWUgXV07IHRoZW4KICBsb2dfaW5mbyAi5q2j5Zyo55Sf5oiQIEZyaWRhIEhvb2sg6ISa5pysLi4uIgogICMgRnJpZGEg6ISa5pys5bey5ZyoIGF1dG8tcmV2ZXJzZS5zaCDkuK3nlJ/miJAKZmkKCmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKbG9nX29rICLliIbmnpDlrozmiJDvvIEiCmVjaG8gIiIKZWNobyAi5p+l55yL5oql5ZGKOiIKaWYgW1sgLW4gIiRPVVRQVVRfRElSIiBdXTsgdGhlbgogIGVjaG8gIiAgJE9VVFBVVF9ESVIvYW5hbHlzaXMtcmVwb3J0Lm1kIgplbHNlCiAgTEFURVNUPSQobHMgLXRkIC93b3Jrc3BhY2UvKi1hbmFseXNpcy0qIDI+L2Rldi9udWxsIHwgaGVhZCAtMSkKICBpZiBbWyAtbiAiJExBVEVTVCIgXV07IHRoZW4KICAgIGVjaG8gIiAgJExBVEVTVC9hbmFseXNpcy1yZXBvcnQubWQiCiAgZmkKZmkKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIK
B64EOF_launcher.sh
chmod +x "$DECODE_DIR/launcher.sh" 2>/dev/null

echo "恢复: one_click_restore.sh ..."
base64 -d << 'B64EOF_one_click_restore.sh' > "$DECODE_DIR/one_click_restore.sh"
IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOS4gOmUruaBouWkjeeOr+WigyArIOaJgOacieiEmuacrAojICDnlKjms5U6IGJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfcmVzdG9yZS5zaAojICDkvZzogIU6IEFJ6YCG5ZCR5bel56iL5biICiMgIOaXpeacnzogMjAyNi0wNy0xNQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnNldCAtZQoKUkVEPSdcMDMzWzA7MzFtJwpHUkVFTj0nXDAzM1swOzMybScKWUVMTE9XPSdcMDMzWzE7MzNtJwpCTFVFPSdcMDMzWzA7MzRtJwpDWUFOPSdcMDMzWzA7MzZtJwpOQz0nXDAzM1swbScKCmxvZ19pbmZvKCkgIHsgZWNobyAtZSAiJHtCTFVFfVvmgaLlpI1dJHtOQ30gJCoiOyB9CmxvZ19vaygpICAgIHsgZWNobyAtZSAiJHtHUkVFTn1b5a6M5oiQXSR7TkN9ICQqIjsgfQpsb2dfd2FybigpICB7IGVjaG8gLWUgIiR7WUVMTE9XfVvmj5DnpLpdJHtOQ30gJCoiOyB9CmxvZ19lcnIoKSAgIHsgZWNobyAtZSAiJHtSRUR9W+mUmeivr10ke05DfSAkKiI7IH0KbG9nX3N0ZXAoKSAgeyBlY2hvIC1lICIke0NZQU59W+atpemqpF0ke05DfSAkKiI7IH0KCmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiICDkuIDplK7mgaLlpI3njq/looMgdjEuMCIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiIgoKIyA9PT09PT09PT09IOafpeaJvuacgOaWsOeahOS/neWtmOiusOW9lSA9PT09PT09PT09CmxvZ19zdGVwICIwLzkg5p+l5om+5L+d5a2Y6K6w5b2VLi4uIgpSRUNPUkRfRklMRT0kKGxzIC10IC9kYXRhL3VzZXIvd29yay9zYXZlX3JlY29yZF8qLnR4dCAvZGF0YS91c2VyL3dvcmsvc2F2ZV9yZWNvcmQudHh0IDI+L2Rldi9udWxsIHwgaGVhZCAtMSkKTE9DQUxfVEFSPSQobHMgLXQgL3dvcmtzcGFjZS9hbmRyb2lkX3JlX2Vudl8qLnRhci5neiAvZGF0YS91c2VyL3dvcmsvYW5kcm9pZF9yZV9lbnYudGFyLmd6IDI+L2Rldi9udWxsIHwgaGVhZCAtMSkKCiMg5bCd6K+V5LuO6K6w5b2V5Lit5o+Q5Y+WbXBpbWfpk77mjqUKaWYgWyAtbiAiJFJFQ09SRF9GSUxFIiBdOyB0aGVuCiAgICBsb2dfb2sgIuaJvuWIsOiusOW9lTogJFJFQ09SRF9GSUxFIgogICAgTVBJTUdfTElOS1M9JChncmVwIC1vUCAnaHR0cHM6Ly9tcGltZ1wuY24vZG93blwucGhwL1x3KycgIiRSRUNPUkRfRklMRSIgMj4vZGV2L251bGwpCiAgICBpZiBbIC1uICIkTVBJTUdfTElOS1MiIF07IHRoZW4KICAgICAgICBMSU5LX0NPVU5UPSQoZWNobyAiJE1QSU1HX0xJTktTIiB8IHdjIC1sKQogICAgICAgIGxvZ19vayAi6K6w5b2V5Lit5pyJICRMSU5LX0NPVU5UIOS4qm1waW1n5LiL6L296ZO+5o6lIgogICAgZmkKZmkKCiMgPT09PT09PT09PSDnoa7lrprmlbDmja7mupAgPT09PT09PT09PQpBUkNISVZFPSIiCkRBVEFfU09VUkNFPSIiCgppZiBbIC1uICIkTE9DQUxfVEFSIiBdICYmIFsgLWYgIiRMT0NBTF9UQVIiIF07IHRoZW4KICAgIEFSQ0hJVkU9IiRMT0NBTF9UQVIiCiAgICBEQVRBX1NPVVJDRT0i5pys5ZywdGFyLmd6IgplbGlmIFsgLW4gIiQxIiBdICYmIFsgLWYgIiQxIiBdOyB0aGVuCiAgICBBUkNISVZFPSIkMSIKICAgIERBVEFfU09VUkNFPSLlkb3ku6TooYzlj4LmlbAiCmVsc2UKICAgICMg5bCd6K+V5LuObXBpbWfkuIvovb0KICAgIGlmIFsgLW4gIiRNUElNR19MSU5LUyIgXTsgdGhlbgogICAgICAgIGxvZ19pbmZvICLmnKrmib7liLDmnKzlnLB0YXIuZ3rvvIzlsJ3or5Xku45tcGltZy5jbuS4i+i9veWIhueJhy4uLiIKICAgICAgICBET1dOTE9BRF9ESVI9Ii90bXAvbXBpbWdfZG93bmxvYWRfJChkYXRlICslcykiCiAgICAgICAgbWtkaXIgLXAgIiRET1dOTE9BRF9ESVIiCgogICAgICAgIExJTktfSURYPTAKICAgICAgICBET1dOTE9BREVEPTAKICAgICAgICBmb3IgbGluayBpbiAkTVBJTUdfTElOS1M7IGRvCiAgICAgICAgICAgIExJTktfSURYPSQoKExJTktfSURYICsgMSkpCiAgICAgICAgICAgIGxvZ19pbmZvICLkuIvovb3liIbniYcgJExJTktfSURYLi4uIgogICAgICAgICAgICB3Z2V0IC1xIC1PICIke0RPV05MT0FEX0RJUn0vcGFydF8ke0xJTktfSURYfSIgIiRsaW5rIiAyPi9kZXYvbnVsbCAmJiAoKERPV05MT0FERUQrKykpIHx8IGxvZ193YXJuICLliIbniYcgJExJTktfSURYIOS4i+i9veWksei0pSIKICAgICAgICBkb25lCgogICAgICAgIGlmIFsgJERPV05MT0FERUQgLWd0IDAgXTsgdGhlbgogICAgICAgICAgICBNRVJHRUQ9IiR7RE9XTkxPQURfRElSfS9hbmRyb2lkX3JlX2Vudi50YXIuZ3oiCiAgICAgICAgICAgIGNhdCAiJHtET1dOTE9BRF9ESVJ9Ii9wYXJ0XyogPiAiJE1FUkdFRCIKICAgICAgICAgICAgQVJDSElWRT0iJE1FUkdFRCIKICAgICAgICAgICAgREFUQV9TT1VSQ0U9Im1waW1nLmNu5LiL6L29IgogICAgICAgICAgICBsb2dfb2sgIuS4i+i9veW5tuWQiOW5tuWujOaIkDogJERPV05MT0FERUQg5Liq5YiG54mHIgogICAgICAgIGVsc2UKICAgICAgICAgICAgbG9nX2VyciAi5omA5pyJ5YiG54mH5LiL6L295aSx6LSlIgogICAgICAgICAgICBleGl0IDEKICAgICAgICBmaQogICAgZWxzZQogICAgICAgIGxvZ19lcnIgIuaJvuS4jeWIsOS/neWtmOaVsOaNriEiCiAgICAgICAgZWNobyAiIgogICAgICAgIGVjaG8gIuWPr+eUqOaBouWkjeaWueW8jzoiCiAgICAgICAgZWNobyAiICAxLiDmnKzlnLB0YXIuZ3o6IOWwhnRhci5neuaUvuWIsCAvd29ya3NwYWNlLyDmiJYgL2RhdGEvdXNlci93b3JrLyIKICAgICAgICBlY2hvICIgIDIuIG1waW1n6ZO+5o6lOiDlnKhtcGltZy5jbuS4iuaWueeahOS/neWtmOiusOW9leS4reafpeaJviIKICAgICAgICBlY2hvICIgIDMuIOaJi+WKqOaMh+WumjogYmFzaCAkMCAvcGF0aC90by9hbmRyb2lkX3JlX2Vudi50YXIuZ3oiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKbG9nX29rICLmlbDmja7mupA6ICREQVRBX1NPVVJDRSIKbG9nX29rICLljovnvKnljIU6ICRBUkNISVZFIgpTSVpFX01CPSQoZHUgLXNoICIkQVJDSElWRSIgMj4vZGV2L251bGwgfCBjdXQgLWYxKQpsb2dfaW5mbyAi5aSn5bCPOiAkU0laRV9NQiIKCiMgPT09PT09PT09PSDop6PljosgPT09PT09PT09PQpFWFRSQUNUX0RJUj0iL3RtcC9yZV9lbnZfcmVzdG9yZV8kKGRhdGUgKyVzKSIKbG9nX3N0ZXAgIjEvOSDop6PljovljovnvKnljIUuLi4iCm1rZGlyIC1wICIkRVhUUkFDVF9ESVIiCnRhciAteHpmICIkQVJDSElWRSIgLUMgIiRFWFRSQUNUX0RJUiIKbG9nX29rICLop6PljovlrozmiJAiCgpCVU5ETEVfRElSPSQoZmluZCAiJEVYVFJBQ1RfRElSIiAtbWF4ZGVwdGggMSAtbmFtZSAicmVfZW52X2J1bmRsZSoiIC10eXBlIGQgfCBoZWFkIC0xKQppZiBbIC16ICIkQlVORExFX0RJUiIgXTsgdGhlbgogICAgIyDmo4Dmn6XmmK/lkKbnm7TmjqXmmK/lhoXlrrkKICAgIGlmIFsgLWQgIiRFWFRSQUNUX0RJUi9iaW4iIF07IHRoZW4KICAgICAgICBCVU5ETEVfRElSPSIkRVhUUkFDVF9ESVIiCiAgICBlbHNlCiAgICAgICAgQlVORExFX0RJUj0kKGZpbmQgIiRFWFRSQUNUX0RJUiIgLW1heGRlcHRoIDIgLW5hbWUgImJpbiIgLXR5cGUgZCB8IGhlYWQgLTEgfCB4YXJncyBkaXJuYW1lKQogICAgZmkKZmkKCmlmIFsgLXogIiRCVU5ETEVfRElSIiBdIHx8IFsgISAtZCAiJEJVTkRMRV9ESVIiIF07IHRoZW4KICAgIGxvZ19lcnIgIuWOi+e8qeWMhee7k+aehOW8guW4uCIKICAgIGV4aXQgMQpmaQoKbG9nX29rICLlhoXlrrnnm67lvZU6ICRCVU5ETEVfRElSIgoKIyA9PT09PT09PT09IDIuIOaBouWkjeS6jOi/m+WItuW3peWFtyA9PT09PT09PT09CmxvZ19zdGVwICIyLzkg5oGi5aSN5LqM6L+b5Yi25bel5YW3Li4uIgoKIyBhcGt0b29sCmlmIFsgLWYgIiRCVU5ETEVfRElSL2Jpbi9hcGt0b29sL2Fwa3Rvb2wuamFyIiBdOyB0aGVuCiAgICBjcCAiJEJVTkRMRV9ESVIvYmluL2Fwa3Rvb2wvYXBrdG9vbC5qYXIiIC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wuamFyCiAgICBpZiBbICEgLWYgL3Vzci9sb2NhbC9iaW4vYXBrdG9vbCBdOyB0aGVuCiAgICAgICAgZWNobyAnIyEvYmluL2Jhc2gKamF2YSAtamFyIC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wuamFyICIkQCInID4gL3Vzci9sb2NhbC9iaW4vYXBrdG9vbAogICAgICAgIGNobW9kICt4IC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wKICAgIGZpCiAgICBsb2dfb2sgImFwa3Rvb2wiCmZpCgojIGphZHgKaWYgWyAtZCAiJEJVTkRMRV9ESVIvYmluL2phZHgiIF07IHRoZW4KICAgIGNwIC1yICIkQlVORExFX0RJUi9iaW4vamFkeCIgL29wdC9qYWR4IDI+L2Rldi9udWxsCiAgICBjcCAtciAiJEJVTkRMRV9ESVIvYmluL2phZHgvYmluIi8qIC91c3IvbG9jYWwvYmluLyAyPi9kZXYvbnVsbAogICAgY2htb2QgK3ggL3Vzci9sb2NhbC9iaW4vamFkeCAvdXNyL2xvY2FsL2Jpbi9qYWR4LWd1aSAyPi9kZXYvbnVsbAogICAgbG9nX29rICJqYWR4IgpmaQoKIyBkZXgyamFyCmlmIFsgLWQgIiRCVU5ETEVfRElSL2Jpbi9kZXgyamFyIiBdOyB0aGVuCiAgICBta2RpciAtcCAvb3B0L2RleDJqYXIKICAgIGNwIC1yICIkQlVORExFX0RJUi9iaW4vZGV4MmphciIvKiAvb3B0L2RleDJqYXIvIDI+L2Rldi9udWxsCiAgICBERVgySkFSPSQoZmluZCAvb3B0L2RleDJqYXIgLW5hbWUgImQyai1kZXgyamFyLnNoIiAyPi9kZXYvbnVsbCB8IGhlYWQgLTEpCiAgICBpZiBbIC1uICIkREVYMkpBUiIgXTsgdGhlbgogICAgICAgIGxuIC1zZiAiJERFWDJKQVIiIC91c3IvbG9jYWwvYmluL2Qyai1kZXgyamFyIDI+L2Rldi9udWxsCiAgICBmaQogICAgQkFLU01BTEk9JChmaW5kIC9vcHQvZGV4MmphciAtbmFtZSAiZDJqLWJha3NtYWxpLnNoIiAyPi9kZXYvbnVsbCB8IGhlYWQgLTEpCiAgICBpZiBbIC1uICIkQkFLU01BTEkiIF07IHRoZW4KICAgICAgICBsbiAtc2YgIiRCQUtTTUFMSSIgL3Vzci9sb2NhbC9iaW4vYmFrc21hbGkgMj4vZGV2L251bGwKICAgIGZpCiAgICBsb2dfb2sgImRleDJqYXIiCmZpCgojIGJha3NtYWxpCmlmIFsgLWYgIiRCVU5ETEVfRElSL2Jpbi9iYWtzbWFsaS9iYWtzbWFsaS5qYXIiIF07IHRoZW4KICAgIGNwICIkQlVORExFX0RJUi9iaW4vYmFrc21hbGkvYmFrc21hbGkuamFyIiAvdXNyL2xvY2FsL2Jpbi9iYWtzbWFsaS5qYXIKICAgIGlmIFsgISAtZiAvdXNyL2xvY2FsL2Jpbi9iYWtzbWFsaSBdOyB0aGVuCiAgICAgICAgZWNobyAnIyEvYmluL2Jhc2gKamF2YSAtamFyIC91c3IvbG9jYWwvYmluL2Jha3NtYWxpLmphciAiJEAiJyA+IC91c3IvbG9jYWwvYmluL2Jha3NtYWxpCiAgICAgICAgY2htb2QgK3ggL3Vzci9sb2NhbC9iaW4vYmFrc21hbGkKICAgIGZpCiAgICBsb2dfb2sgImJha3NtYWxpIgpmaQoKIyA9PT09PT09PT09IDMuIOaBouWkjeiEmuacrCA9PT09PT09PT09CmxvZ19zdGVwICIzLzkg5oGi5aSN5omA5pyJ6ISa5pysLi4uIgoKaWYgWyAtZCAiJEJVTkRMRV9ESVIvc2NyaXB0cyIgXTsgdGhlbgogICAgZm9yIGYgaW4gIiRCVU5ETEVfRElSL3NjcmlwdHMiLyouc2ggIiRCVU5ETEVfRElSL3NjcmlwdHMiLyoucHkgIiRCVU5ETEVfRElSL3NjcmlwdHMiLyoua3QgIiRCVU5ETEVfRElSL3NjcmlwdHMiLyouanNvbjsgZG8KICAgICAgICBbIC1mICIkZiIgXSB8fCBjb250aW51ZQogICAgICAgIGNwICIkZiIgL3dvcmtzcGFjZS8gMj4vZGV2L251bGwKICAgICAgICBjaG1vZCAreCAiL3dvcmtzcGFjZS8kKGJhc2VuYW1lICIkZiIpIiAyPi9kZXYvbnVsbAogICAgZG9uZQoKICAgICMgaW5pdF9yZV9lbnYuc2gg54m55q6K5aSE55CGCiAgICBpZiBbIC1mICIkQlVORExFX0RJUi9zY3JpcHRzL2luaXRfcmVfZW52LnNoIiBdOyB0aGVuCiAgICAgICAgbWtkaXIgLXAgL3dvcmtzcGFjZS9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdAogICAgICAgIGNwICIkQlVORExFX0RJUi9zY3JpcHRzL2luaXRfcmVfZW52LnNoIiAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L2luaXRfcmVfZW52LnNoCiAgICAgICAgY2htb2QgK3ggL3dvcmtzcGFjZS9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdC9pbml0X3JlX2Vudi5zaAogICAgZmkKCiAgICAjIHJlc3RvcmXohJrmnKznibnmrorlpITnkIYKICAgIGlmIFsgLWYgIiRCVU5ETEVfRElSL3NjcmlwdHMvcmVzdG9yZV9hbmRyb2lkX3JlX2Vudi5zaCIgXTsgdGhlbgogICAgICAgIG1rZGlyIC1wIC93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQKICAgICAgICBjcCAiJEJVTkRMRV9ESVIvc2NyaXB0cy9yZXN0b3JlX2FuZHJvaWRfcmVfZW52LnNoIiAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L3Jlc3RvcmVfYW5kcm9pZF9yZV9lbnYuc2gKICAgICAgICBjaG1vZCAreCAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L3Jlc3RvcmVfYW5kcm9pZF9yZV9lbnYuc2gKICAgIGZpCgogICAgbG9nX29rICLmiYDmnInohJrmnKwgLT4gL3dvcmtzcGFjZS8iCmZpCgojID09PT09PT09PT0gNC4g5oGi5aSN56yU6K6w5oql5ZGKID09PT09PT09PT0KbG9nX3N0ZXAgIjQvOSDmgaLlpI3nrJTorrDmiqXlkYouLi4iCgppZiBbIC1kICIkQlVORExFX0RJUi9ub3RlcyIgXTsgdGhlbgogICAgY3AgIiRCVU5ETEVfRElSL25vdGVzIi8qIC93b3Jrc3BhY2UvIDI+L2Rldi9udWxsCiAgICBsb2dfb2sgIueslOiusOaKpeWRiiAtPiAvd29ya3NwYWNlLyIKZmkKCiMgPT09PT09PT09PSA1LiDmgaLlpI1IVE1M5oql5ZGKID09PT09PT09PT0KbG9nX3N0ZXAgIjUvOSDmgaLlpI1IVE1M5oql5ZGKLi4uIgoKaWYgWyAtZCAiJEJVTkRMRV9ESVIvcmVwb3J0cyIgXTsgdGhlbgogICAgY3AgLXIgIiRCVU5ETEVfRElSL3JlcG9ydHMiLyogL3dvcmtzcGFjZS8gMj4vZGV2L251bGwKICAgIGxvZ19vayAiSFRNTOaKpeWRiiAtPiAvd29ya3NwYWNlLyIKZmkKCiMgPT09PT09PT09PSA2LiDmgaLlpI3lr4bpkqUgPT09PT09PT09PQpsb2dfc3RlcCAiNi85IOaBouWkjeWvhumSpeaWh+S7ti4uLiIKCmlmIFsgLWQgIiRCVU5ETEVfRElSL2tleXN0b3JlIiBdOyB0aGVuCiAgICBta2RpciAtcCAvZGF0YS91c2VyL3dvcmsKICAgIGNwICIkQlVORExFX0RJUi9rZXlzdG9yZSIvKiAvZGF0YS91c2VyL3dvcmsvIDI+L2Rldi9udWxsCiAgICBsb2dfb2sgIuWvhumSpSAtPiAvZGF0YS91c2VyL3dvcmsvIgpmaQoKIyA9PT09PT09PT09IDcuIOWuieijhVB5dGhvbuS+nei1liA9PT09PT09PT09CmxvZ19zdGVwICI3Lzkg5a6J6KOFUHl0aG9u5L6d6LWWLi4uIgoKaWYgWyAtZiAiJEJVTkRMRV9ESVIvY29uZmlnL3BpcF9yZXF1aXJlbWVudHMudHh0IiBdOyB0aGVuCiAgICBNSVNTSU5HX1BLR1M9IiIKICAgIGZvciBwa2cgaW4gZnJpZGEtdG9vbHMgb2JqZWN0aW9uIGFuZHJvZ3VhcmQgcXVhcmstZW5naW5lIGFwa2lkIHJlZmx1dHRlcjsgZG8KICAgICAgICBpZiAhIHBpcDMgc2hvdyAiJHBrZyIgJj4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgTUlTU0lOR19QS0dTPSIkTUlTU0lOR19QS0dTICRwa2ciCiAgICAgICAgZmkKICAgIGRvbmUKCiAgICBpZiBbIC1uICIkTUlTU0lOR19QS0dTIiBdOyB0aGVuCiAgICAgICAgbG9nX2luZm8gIuWuieijhTogJE1JU1NJTkdfUEtHUyIKICAgICAgICBwaXAzIGluc3RhbGwgLS1icmVhay1zeXN0ZW0tcGFja2FnZXMgLXEgJE1JU1NJTkdfUEtHUyAyPiYxIHwgdGFpbCAtMwogICAgICAgIGxvZ19vayAiUHl0aG9u5YyF5a6J6KOF5a6M5oiQIgogICAgZWxzZQogICAgICAgIGxvZ19vayAi5omA5pyJUHl0aG9u5YyF5bey5a2Y5ZyoIgogICAgZmkKZmkKCiMgPT09PT09PT09PSA4LiDlronoo4VBbmRyb2lk5p6E5bu65bel5YW3ID09PT09PT09PT0KbG9nX3N0ZXAgIjgvOSDlronoo4VBbmRyb2lk5p6E5bu65bel5YW3Li4uIgoKQVBUX01JU1NJTkc9IiIKZm9yIGNtZCBpbiB6aXBhbGlnbiBhcGtzaWduZXIgYWFwdCBhYXB0MjsgZG8KICAgIGlmICEgY29tbWFuZCAtdiAiJGNtZCIgJj4vZGV2L251bGw7IHRoZW4KICAgICAgICBBUFRfTUlTU0lORz0iJEFQVF9NSVNTSU5HICRjbWQiCiAgICBmaQpkb25lCgppZiBbIC1uICIkQVBUX01JU1NJTkciIF07IHRoZW4KICAgIGxvZ19pbmZvICLlronoo4U6ICRBUFRfTUlTU0lORyIKICAgIGFwdC1nZXQgdXBkYXRlIC1xcSAyPi9kZXYvbnVsbAogICAgYXB0LWdldCBpbnN0YWxsIC15IC1xcSBhbmRyb2lkLXNkay1idWlsZC10b29scyAyPiYxIHwgdGFpbCAtMwogICAgbG9nX29rICJBbmRyb2lk5p6E5bu65bel5YW35a6J6KOF5a6M5oiQIgplbHNlCiAgICBsb2dfb2sgIuaJgOaciUFuZHJvaWTmnoTlu7rlt6Xlhbflt7LlrZjlnKgiCmZpCgojID09PT09PT09PT0gOS4g6YWN572uUEFUSCArIOmqjOivgSA9PT09PT09PT09CmxvZ19zdGVwICI5Lzkg6YWN572uUEFUSCArIOmqjOivgS4uLiIKCmV4cG9ydCBQQVRIPSIkUEFUSDovb3B0L2phZHgvYmluOi9vcHQvZGV4Mmphci9kZXgtdG9vbHMtdjIuNDovdXNyL2xvY2FsL2JpbjokSE9NRS8ubG9jYWwvYmluOi93b3Jrc3BhY2UiCmV4cG9ydCBKQVZBX0hPTUU9JChkaXJuYW1lICQoZGlybmFtZSAkKHJlYWRsaW5rIC1mICQod2hpY2ggamF2YSkgMj4vZGV2L251bGwgfHwgZWNobyAiL3Vzci9iaW4vamF2YSIpKSkKCiMg5YaZ5YWlYmFzaHJjCmlmICEgZ3JlcCAtcSAi6YCG5ZCR5bel56iL546v5aKDUEFUSCIgfi8uYmFzaHJjIDI+L2Rldi9udWxsOyB0aGVuCiAgICBjYXQgPj4gfi8uYmFzaHJjIDw8ICdCQVNIUkNfRU9GJwojID09PT09PSDpgIblkJHlt6XnqIvnjq/looNQQVRIID09PT09PQpleHBvcnQgUEFUSD0iJFBBVEg6L29wdC9qYWR4L2Jpbjovb3B0L2RleDJqYXIvZGV4LXRvb2xzLXYyLjQ6JEhPTUUvLmxvY2FsL2JpbiIKQkFTSFJDX0VPRgogICAgbG9nX29rICJQQVRI5YaZ5YWlIH4vLmJhc2hyYyIKZmkKCiMg5riF55CGCnJtIC1yZiAiJEVYVFJBQ1RfRElSIgoKIyA9PT09PT09PT09IOacgOe7iOmqjOivgSA9PT09PT09PT09CmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKbG9nX29rICLnjq/looPmgaLlpI3lrozmiJAhIgplY2hvICIiCmVjaG8gLWUgIiR7Q1lBTn09PT0g5bel5YW36aqM6K+BID09PSR7TkN9IgpjaGVja190b29sKCkgewogICAgaWYgY29tbWFuZCAtdiAiJDEiICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgZWNobyAtZSAiICAke0dSRUVOfeKchSR7TkN9ICQxIgogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIiAgJHtSRUR94p2MJHtOQ30gJDEiCiAgICBmaQp9CgplY2hvIC1lICIke1lFTExPV31bQW5kcm9pZOaehOW7ul0ke05DfSIKY2hlY2tfdG9vbCAiamF2YSI7IGNoZWNrX3Rvb2wgImFwa3Rvb2wiOyBjaGVja190b29sICJ6aXBhbGlnbiIKY2hlY2tfdG9vbCAiYXBrc2lnbmVyIjsgY2hlY2tfdG9vbCAiYWFwdCIKCmVjaG8gLWUgIiR7WUVMTE9XfVvlj43nvJbor5FdJHtOQ30iCmNoZWNrX3Rvb2wgImphZHgiOyBjaGVja190b29sICJkMmotZGV4MmphciI7IGNoZWNrX3Rvb2wgImJha3NtYWxpIgoKZWNobyAtZSAiJHtZRUxMT1d9W+WKqOaAgeWIhuaekF0ke05DfSIKY2hlY2tfdG9vbCAiZnJpZGEiOyBjaGVja190b29sICJvYmplY3Rpb24iCgplY2hvIC1lICIke1lFTExPV31bRmx1dHRlci/pnZnmgIFdJHtOQ30iCmNoZWNrX3Rvb2wgInJlZmx1dHRlciI7IGNoZWNrX3Rvb2wgImFwa2lkIjsgY2hlY2tfdG9vbCAiYW5kcm9ndWFyZCIKY2hlY2tfdG9vbCAicXVhcmsiOyBjaGVja190b29sICJiaW53YWxrIgoKZWNobyAtZSAiJHtZRUxMT1d9W+iEmuacrF0ke05DfSIKU0NSSVBUX09LPTAKZm9yIHMgaW4gYXV0by1yZXZlcnNlLnNoIGFwa19hbmFseXplci5weSBhdXRvX3NpZ25fcGF0Y2gucHkgYXBrX3NpZ25fcGF0Y2gucHkgXAogICAgICAgICAgIGJpbmFyeV9wYXRjaC5weSBkZXhfdmlwX2h1bnRlci5weSB1cGxvYWRfdG9fbXBpbWcucHkgXAogICAgICAgICAgIHNhdmUuc2ggYmFja3VwLnNoIGluaXRfcmVfZW52LnNoIG9uZV9jbGlja19zYXZlLnNoIG9uZV9jbGlja19yZXN0b3JlLnNoOyBkbwogICAgaWYgWyAtZiAiL3dvcmtzcGFjZS8kcyIgXSB8fCBbIC1mICIvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0LyRzIiBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiICAke0dSRUVOfeKchSR7TkN9ICRzIgogICAgICAgICgoU0NSSVBUX09LKyspKQogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIiAgJHtSRUR94p2MJHtOQ30gJHMiCiAgICBmaQpkb25lCgplY2hvICIiCmVjaG8gLWUgIiR7R1JFRU59PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiICDmgaLlpI3mnaXmupA6ICREQVRBX1NPVVJDRSAoJFNJWkVfTUIpIgplY2hvICIiCmVjaG8gIiAg5Yid5aeL5YyW5ZG95Luk77yI5paw56qX5Y+j5omn6KGM77yJOiIKZWNobyAtZSAiICAke0NZQU59c291cmNlIC93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvaW5pdF9yZV9lbnYuc2gke05DfSIKZWNobyAiIgplY2hvICIgIOS7peWQjuS/neWtmOWRveS7pDoiCmVjaG8gLWUgIiAgJHtDWUFOfWJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfc2F2ZS5zaCR7TkN9IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JHtOQ30iCg==
B64EOF_one_click_restore.sh
chmod +x "$DECODE_DIR/one_click_restore.sh" 2>/dev/null

echo "恢复: one_click_save.sh ..."
base64 -d << 'B64EOF_one_click_save.sh' > "$DECODE_DIR/one_click_save.sh"
IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOS4gOmUruawuOS5heS/neWtmOW9k+WJjeeOr+WigyArIOaJgOacieiEmuacrCArIOWkmumHjeWkh+S7vQojICDnlKjms5U6IGJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfc2F2ZS5zaAojICDkvZzogIU6IEFJ6YCG5ZCR5bel56iL5biICiMgIOaXpeacnzogMjAyNi0wNy0xNQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnNldCAtZQoKUkVEPSdcMDMzWzA7MzFtJwpHUkVFTj0nXDAzM1swOzMybScKWUVMTE9XPSdcMDMzWzE7MzNtJwpCTFVFPSdcMDMzWzA7MzRtJwpDWUFOPSdcMDMzWzA7MzZtJwpOQz0nXDAzM1swbScKCmxvZ19pbmZvKCkgIHsgZWNobyAtZSAiJHtCTFVFfVvkv53lrZhdJHtOQ30gJCoiOyB9CmxvZ19vaygpICAgIHsgZWNobyAtZSAiJHtHUkVFTn1b5a6M5oiQXSR7TkN9ICQqIjsgfQpsb2dfd2FybigpICB7IGVjaG8gLWUgIiR7WUVMTE9XfVvmj5DnpLpdJHtOQ30gJCoiOyB9CmxvZ19lcnIoKSAgIHsgZWNobyAtZSAiJHtSRUR9W+mUmeivr10ke05DfSAkKiI7IH0KbG9nX3N0ZXAoKSAgeyBlY2hvIC1lICIke0NZQU59W+atpemqpF0ke05DfSAkKiI7IH0KCmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiICDkuIDplK7msLjkuYXkv53lrZjnjq/looMgdjEuMCIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiIgoKVElNRVNUQU1QPSQoZGF0ZSArJVklbSVkXyVIJU0lUykKU0FWRV9ESVI9Ii9kYXRhL3VzZXIvd29yayIKVEFSX05BTUU9ImFuZHJvaWRfcmVfZW52XyR7VElNRVNUQU1QfSIKVEFSX1BBVEg9IiR7U0FWRV9ESVJ9LyR7VEFSX05BTUV9LnRhci5neiIKQlVORExFPSIvdG1wL3JlX2Vudl9idW5kbGVfJHtUSU1FU1RBTVB9IgpVUExPQURfU0NSSVBUPSIvd29ya3NwYWNlL3VwbG9hZF90b19tcGltZy5weSIKCiMgPT09PT09PT09PSDnrKwx5q2lOiDliJvlu7rmiZPljIXnm67lvZUgPT09PT09PT09PQpsb2dfc3RlcCAiMS83IOWIm+W7uuaJk+WMheebruW9lS4uLiIKcm0gLXJmICIkQlVORExFIgpta2RpciAtcCAiJEJVTkRMRSIve2Jpbi97YXBrdG9vbCxqYWR4LGRleDJqYXIsYmFrc21hbGl9LHNjcmlwdHMsbm90ZXMsa2V5c3RvcmUsY29uZmlnfQpsb2dfb2sgIuaJk+WMheebruW9lTogJEJVTkRMRSIKCiMgPT09PT09PT09PSDnrKwy5q2lOiDmlLbpm4bkuozov5vliLblt6XlhbcgPT09PT09PT09PQpsb2dfc3RlcCAiMi83IOaUtumbhuS6jOi/m+WItuW3peWFty4uLiIKQklOX0NPVU5UPTAKCiMgYXBrdG9vbAppZiBbIC1mIC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wuamFyIF07IHRoZW4KICAgIGNwIC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wuamFyICIkQlVORExFL2Jpbi9hcGt0b29sLyIKICAgICgoQklOX0NPVU5UKyspKQpmaQoKIyBqYWR4CmlmIFsgLWQgL29wdC9qYWR4L2JpbiBdOyB0aGVuCiAgICBjcCAtciAvb3B0L2phZHgvYmluLyogIiRCVU5ETEUvYmluL2phZHgvIiAyPi9kZXYvbnVsbAogICAgY3AgLXIgL29wdC9qYWR4L2xpYiAiJEJVTkRMRS9iaW4vamFkeC8iIDI+L2Rldi9udWxsCiAgICAoKEJJTl9DT1VOVCsrKSkKZmkKCiMgZGV4MmphcgppZiBbIC1kIC9vcHQvZGV4Mmphci9kZXgtdG9vbHMtdjIuNCBdOyB0aGVuCiAgICBjcCAtciAvb3B0L2RleDJqYXIvZGV4LXRvb2xzLXYyLjQgIiRCVU5ETEUvYmluL2RleDJqYXIvIiAyPi9kZXYvbnVsbAogICAgKChCSU5fQ09VTlQrKykpCmZpCgojIGJha3NtYWxpCmlmIFsgLWYgL3Vzci9sb2NhbC9iaW4vYmFrc21hbGkuamFyIF07IHRoZW4KICAgIGNwIC91c3IvbG9jYWwvYmluL2Jha3NtYWxpLmphciAiJEJVTkRMRS9iaW4vYmFrc21hbGkvIiAyPi9kZXYvbnVsbAogICAgKChCSU5fQ09VTlQrKykpCmZpCgpsb2dfb2sgIuS6jOi/m+WItuW3peWFtzogJEJJTl9DT1VOVCDkuKoiCgojID09PT09PT09PT0g56ysM+atpTog5pS26ZuG6ISa5pysID09PT09PT09PT0KbG9nX3N0ZXAgIjMvNyDmlLbpm4bmiYDmnInohJrmnKwuLi4iClNDUklQVF9DT1VOVD0wCgpmb3IgZiBpbiAvd29ya3NwYWNlLyouc2ggL3dvcmtzcGFjZS8qLnB5IC93b3Jrc3BhY2UvKi5rdCAvd29ya3NwYWNlLyouanNvbjsgZG8KICAgIFsgLWYgIiRmIiBdIHx8IGNvbnRpbnVlCiAgICBjcCAiJGYiICIkQlVORExFL3NjcmlwdHMvIiAyPi9kZXYvbnVsbAogICAgY2htb2QgK3ggIiRCVU5ETEUvc2NyaXB0cy8kKGJhc2VuYW1lICIkZiIpIiAyPi9kZXYvbnVsbAogICAgKChTQ1JJUFRfQ09VTlQrKykpCmRvbmUKCiMgaW5pdF9yZV9lbnYuc2gKaWYgWyAtZiAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L2luaXRfcmVfZW52LnNoIF07IHRoZW4KICAgIGNwIC93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvaW5pdF9yZV9lbnYuc2ggIiRCVU5ETEUvc2NyaXB0cy8iCiAgICAoKFNDUklQVF9DT1VOVCsrKSkKZmkKCiMgcmVzdG9yZeiEmuacrAppZiBbIC1mIC93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvcmVzdG9yZV9hbmRyb2lkX3JlX2Vudi5zaCBdOyB0aGVuCiAgICBjcCAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L3Jlc3RvcmVfYW5kcm9pZF9yZV9lbnYuc2ggIiRCVU5ETEUvc2NyaXB0cy8iCiAgICAoKFNDUklQVF9DT1VOVCsrKSkKZmkKCiMgc2F2ZS9yZXN0b3Jl5pys6ISa5pysCmlmIFsgLWYgL3dvcmtzcGFjZS9vbmVfY2xpY2tfc2F2ZS5zaCBdOyB0aGVuCiAgICBjcCAvd29ya3NwYWNlL29uZV9jbGlja19zYXZlLnNoICIkQlVORExFL3NjcmlwdHMvIgogICAgKChTQ1JJUFRfQ09VTlQrKykpCmZpCmlmIFsgLWYgL3dvcmtzcGFjZS9vbmVfY2xpY2tfcmVzdG9yZS5zaCBdOyB0aGVuCiAgICBjcCAvd29ya3NwYWNlL29uZV9jbGlja19yZXN0b3JlLnNoICIkQlVORExFL3NjcmlwdHMvIgogICAgKChTQ1JJUFRfQ09VTlQrKykpCmZpCgpsb2dfb2sgIuiEmuacrOaWh+S7tjogJFNDUklQVF9DT1VOVCDkuKoiCgojID09PT09PT09PT0g56ysNOatpTog5pS26ZuG56yU6K6w5ZKM5oql5ZGKID09PT09PT09PT0KbG9nX3N0ZXAgIjQvNyDmlLbpm4bnrJTorrDmiqXlkYouLi4iCk5PVEVfQ09VTlQ9MAoKZm9yIGYgaW4gL3dvcmtzcGFjZS8qLnR4dCAvd29ya3NwYWNlLyoubWQ7IGRvCiAgICBbIC1mICIkZiIgXSB8fCBjb250aW51ZQogICAgY3AgIiRmIiAiJEJVTkRMRS9ub3Rlcy8iIDI+L2Rldi9udWxsCiAgICAoKE5PVEVfQ09VTlQrKykpCmRvbmUKCiMgSFRNTOaKpeWRigpmb3IgZiBpbiAvd29ya3NwYWNlL21hamlhLWJhby0qL21hamlhLWJhby0qLmh0bWw7IGRvCiAgICBbIC1mICIkZiIgXSB8fCBjb250aW51ZQogICAgbWtkaXIgLXAgIiRCVU5ETEUvcmVwb3J0cyIKICAgIGNwIC1yICIkKGRpcm5hbWUgIiRmIikiICIkQlVORExFL3JlcG9ydHMvIiAyPi9kZXYvbnVsbAogICAgKChOT1RFX0NPVU5UKyspKQpkb25lCgpsb2dfb2sgIueslOiusOaKpeWRijogJE5PVEVfQ09VTlQg5LiqIgoKIyA9PT09PT09PT09IOesrDXmraU6IOaUtumbhuWvhumSpSA9PT09PT09PT09CmxvZ19zdGVwICI1Lzcg5pS26ZuG5a+G6ZKl5paH5Lu2Li4uIgpLRVlfQ09VTlQ9MAoKZm9yIGYgaW4gL2RhdGEvdXNlci93b3JrLyouamtzOyBkbwogICAgWyAtZiAiJGYiIF0gfHwgY29udGludWUKICAgIGNwICIkZiIgIiRCVU5ETEUva2V5c3RvcmUvIiAyPi9kZXYvbnVsbAogICAgKChLRVlfQ09VTlQrKykpCmRvbmUKCmxvZ19vayAi5a+G6ZKl5paH5Lu2OiAkS0VZX0NPVU5UIOS4qiIKCiMgPT09PT09PT09PSDnrKw25q2lOiDlr7zlh7pQeXRob27kvp3otZYgPT09PT09PT09PQpsb2dfc3RlcCAiNi83IOWvvOWHunBpcOS+nei1li4uLiIKcGlwMyBmcmVlemUgPiAiJEJVTkRMRS9jb25maWcvcGlwX3JlcXVpcmVtZW50cy50eHQiIDI+L2Rldi9udWxsCmxvZ19vayAicGlw5L6d6LWW5bey5a+85Ye6IgoKIyA9PT09PT09PT09IOesrDfmraU6IOaJk+WMhSvlpIfku70gPT09PT09PT09PQpsb2dfc3RlcCAiNy83IOaJk+WMhSArIOWkmumHjeWkh+S7vS4uLiIKCmNkIC90bXAKdGFyIC1jemYgIiRUQVJfUEFUSCIgInJlX2Vudl9idW5kbGVfJHtUSU1FU1RBTVB9LyIKU0laRV9NQj0kKGR1IC1zaCAiJFRBUl9QQVRIIiB8IGN1dCAtZjEpCmxvZ19vayAi5omT5YyF5a6M5oiQOiAkVEFSX1BBVEggKCRTSVpFX01CKSIKCiMg5riF55CG5Li05pe255uu5b2VCnJtIC1yZiAiJEJVTkRMRSIKCiMgLS0tLS0g5aSa6YeN5aSH5Lu9IC0tLS0tCmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiICDlpJrph43lpIfku70iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCgojID09PSDlpIfku70xOiBtcGltZy5jbu+8iOWIhueJh+S4iuS8oO+8iT09PQpsb2dfaW5mbyAi5aSH5Lu9MS8zOiBtcGltZy5jbiAo5YiG54mH5LiK5LygKS4uLiIKUEFSVF9ESVI9IiR7U0FWRV9ESVJ9L3BhcnRzXyR7VElNRVNUQU1QfSIKbWtkaXIgLXAgIiRQQVJUX0RJUiIKY2QgIiRTQVZFX0RJUiIKc3BsaXQgLWIgOTBtICIkVEFSX1BBVEgiICIke1BBUlRfRElSfS8ke1RBUl9OQU1FfV9wYXJ0XyIKCk1QSU1HX0xJTktTPSIiClBBUlRfQ09VTlQ9MApmb3IgcGFydCBpbiAiJHtQQVJUX0RJUn0vJHtUQVJfTkFNRX1fcGFydF8iKjsgZG8KICAgIFsgLWYgIiRwYXJ0IiBdIHx8IGNvbnRpbnVlCiAgICBVUExPQURfUkVTVUxUPSQocHl0aG9uMyAiJFVQTE9BRF9TQ1JJUFQiICIkcGFydCIgMj4mMSkKICAgIExJTks9JChlY2hvICIkVVBMT0FEX1JFU1VMVCIgfCBncmVwIC1vUCAnaHR0cHM6Ly9tcGltZ1wuY24vZG93blwucGhwL1x3KycgfCBoZWFkIC0xKQogICAgaWYgWyAtbiAiJExJTksiIF07IHRoZW4KICAgICAgICBNUElNR19MSU5LUz0iJHtNUElNR19MSU5LU31cbiAgJHtMSU5LfSIKICAgICAgICAoKFBBUlRfQ09VTlQrKykpCiAgICAgICAgbG9nX29rICLliIbniYcgJChiYXNlbmFtZSAiJHBhcnQiKSDkuIrkvKDmiJDlip8iCiAgICBlbHNlCiAgICAgICAgbG9nX3dhcm4gIuWIhueJhyAkKGJhc2VuYW1lICIkcGFydCIpIOS4iuS8oOWksei0pSIKICAgIGZpCmRvbmUKCmxvZ19vayAibXBpbWcuY246ICR7UEFSVF9DT1VOVH0g5Liq5YiG54mH5bey5LiK5LygIgoKIyA9PT0g5aSH5Lu9MjogcGFzdGUuYy1uZXQub3Jn77yI5omA5pyJ6ISa5pys5paH5a2X5aSH5Lu977yJPT09CmxvZ19pbmZvICLlpIfku70yLzM6IHBhc3RlLmMtbmV0Lm9yZyAo6ISa5pys5aSH5Lu9KS4uLiIKUEFTVEVfTElOS1M9IiIKZm9yIGYgaW4gL3dvcmtzcGFjZS8qLnNoIC93b3Jrc3BhY2UvKi5weSAvd29ya3NwYWNlLyoua3QgL3dvcmtzcGFjZS8qLmpzb247IGRvCiAgICBbIC1mICIkZiIgXSB8fCBjb250aW51ZQogICAgTElOSz0kKGNhdCAiJGYiIHwgY3VybCAtcyAtWCBQT1NUICJodHRwczovL3Bhc3RlLmMtbmV0Lm9yZy8iIC1IICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iIC0tZGF0YS1iaW5hcnkgQC0gMj4mMSkKICAgIGlmIFtbICIkTElOSyIgPT0gaHR0cHM6Ly9wYXN0ZS5jLW5ldC5vcmcvKiBdXTsgdGhlbgogICAgICAgIFBBU1RFX0xJTktTPSIke1BBU1RFX0xJTktTfVxuICAkKGJhc2VuYW1lICIkZiIpIC0+ICR7TElOS30iCiAgICBmaQpkb25lCgpsb2dfb2sgInBhc3RlLmMtbmV0Lm9yZzog6ISa5pys5bey5aSH5Lu9IgoKIyA9PT0g5aSH5Lu9Mzog5pys5Zyw5L+d55WZID09PWxvZ19pbmZvICLlpIfku70zLzM6IOacrOWcsOS/neeVmS4uLiIKTE9DQUxfQ09QWT0iL3dvcmtzcGFjZS8ke1RBUl9OQU1FfS50YXIuZ3oiCmNwICIkVEFSX1BBVEgiICIkTE9DQUxfQ09QWSIKbG9nX29rICLmnKzlnLDlia/mnKw6ICRMT0NBTF9DT1BZIgoKIyA9PT09PT09PT09IOeUn+aIkOaBouWkjeiusOW9leaWh+S7tiA9PT09PT09PT09ClJFQ09SRF9GSUxFPSIke1NBVkVfRElSfS9zYXZlX3JlY29yZF8ke1RJTUVTVEFNUH0udHh0IgpjYXQgPiAiJFJFQ09SRF9GSUxFIiA8PCBFT0YKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIOmAhuWQkeW3peeoi+eOr+Wig+S/neWtmOiusOW9lQogIOaXtumXtDogJChkYXRlICcrJVktJW0tJWQgJUg6JU06JVMnKQogIOWOi+e8qeWMhTogJFRBUl9QQVRIICgkU0laRV9NQikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLS0tIG1waW1nLmNuIOWIhueJh+S4i+i9vemTvuaOpSAtLS0KJHtNUElNR19MSU5LU30KCi0tLSBwYXN0ZS5jLW5ldC5vcmcg6ISa5pys5aSH5Lu96ZO+5o6lIC0tLQoke1BBU1RFX0xJTktTfQoKLS0tIOacrOWcsOWJr+acrCAtLS0KICAkTE9DQUxfQ09QWQoKLS0tIOaBouWkjeWRveS7pO+8iOaWsOeql+WPo+aJp+ihjO+8iS0tLQogIGJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfcmVzdG9yZS5zaAoKICDmiJbmiYvliqjmgaLlpI06CiAgY2QgL2RhdGEvdXNlci93b3JrCiAgY2F0ICR7VEFSX05BTUV9X3BhcnRfKiA+IGFuZHJvaWRfcmVfZW52LnRhci5negogIGJhc2ggL3dvcmtzcGFjZS9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdC9yZXN0b3JlX2FuZHJvaWRfcmVfZW52LnNoIGFuZHJvaWRfcmVfZW52LnRhci5nego9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVPRgoKbG9nX29rICLkv53lrZjorrDlvZU6ICRSRUNPUkRfRklMRSIKCiMgPT09PT09PT09PSDmnIDnu4jmsYfmgLsgPT09PT09PT09PQplY2hvICIiCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCmxvZ19vayAi5LiA6ZSu5L+d5a2Y5a6M5oiQISIKZWNobyAiIgplY2hvICIgIOaJk+WMheWkp+WwjzogJFNJWkVfTUIiCmVjaG8gIiAg5YiG54mH5pWw6YePOiAke1BBUlRfQ09VTlR9IgplY2hvICIgIG1waW1n6ZO+5o6lOiAke1BBUlRfQ09VTlR95LiqIgplY2hvICIgIHBhc3Rl5aSH5Lu9OiDmiYDmnInohJrmnKwiCmVjaG8gIiAg5pys5Zyw5Ymv5pysOiAkTE9DQUxfQ09QWSIKZWNobyAiIgplY2hvICIgIOiusOW9leaWh+S7tjogJFJFQ09SRF9GSUxFIgplY2hvICIiCmVjaG8gIiAg5LiL5qyh5oGi5aSN5ZG95LukOiIKZWNobyAtZSAiICAke0dSRUVOfWJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfcmVzdG9yZS5zaCR7TkN9IgplY2hvICIiCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCg==
B64EOF_one_click_save.sh
chmod +x "$DECODE_DIR/one_click_save.sh" 2>/dev/null

echo "恢复: quick-analyze-grass-mh.sh ..."
base64 -d << 'B64EOF_quick-analyze-grass-mh.sh' > "$DECODE_DIR/quick-analyze-grass-mh.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIHF1aWNrLWFuYWx5emUtZ3Jhc3MtbWguc2gg4oCUIGNvbS5ncmFzcy5taCAodjEuNi4wKSDkuJPnlKjlv6vpgJ/liIbmnpDohJrmnKwKIyDpkojlr7nnibnlrprlupTnlKjnmoTkvJjljJbliIbmnpDmtYHnqIsKc2V0IC1ldW8gcGlwZWZhaWwKClNDUklQVF9ESVI9IiQoY2QgIiQoZGlybmFtZSAiJHtCQVNIX1NPVVJDRVswXX0iKSIgJiYgcHdkKSIKQVBLX0ZJTEU9IiR7MTotfSIKT1VUUFVUX0RJUj0iJHsyOi1ncmFzcy1taC1hbmFseXNpcy0kKGRhdGUgKyVZJW0lZF8lSCVNJVMpfSIKClJFRD0nXDAzM1swOzMxbScKR1JFRU49J1wwMzNbMDszMm0nCllFTExPVz0nXDAzM1sxOzMzbScKQkxVRT0nXDAzM1swOzM0bScKQ1lBTj0nXDAzM1swOzM2bScKTkM9J1wwMzNbMG0nCgpsb2dfaW5mbygpICB7IGVjaG8gLWUgIiR7QkxVRX1b5L+h5oGvXSR7TkN9ICQqIjsgfQpsb2dfb2soKSAgICB7IGVjaG8gLWUgIiR7R1JFRU59W+WujOaIkF0ke05DfSAkKiI7IH0KbG9nX3dhcm4oKSAgeyBlY2hvIC1lICIke1lFTExPV31b5o+Q56S6XSR7TkN9ICQqIjsgfQpsb2dfZXJyb3IoKSB7IGVjaG8gLWUgIiR7UkVEfVvplJnor69dJHtOQ30gJCoiOyB9CgppZiBbWyAteiAiJEFQS19GSUxFIiBdXTsgdGhlbgogIGxvZ19lcnJvciAi55So5rOVOiBiYXNoIHF1aWNrLWFuYWx5emUtZ3Jhc3MtbWguc2ggPGFwcC5hcGs+IFvovpPlh7rnm67lvZVdIgogIGV4aXQgMQpmaQoKaWYgW1sgISAtZiAiJEFQS19GSUxFIiBdXTsgdGhlbgogIGxvZ19lcnJvciAi5paH5Lu25LiN5a2Y5ZyoOiAkQVBLX0ZJTEUiCiAgZXhpdCAxCmZpCgpta2RpciAtcCAiJE9VVFBVVF9ESVIiCk9VVFBVVF9ESVI9JChyZWFscGF0aCAiJE9VVFBVVF9ESVIiKQpSRVBPUlRfRklMRT0iJE9VVFBVVF9ESVIvYW5hbHlzaXMtcmVwb3J0LnR4dCIKCkFQS19CQVNFTkFNRT0kKGJhc2VuYW1lICIkQVBLX0ZJTEUiKQpBUEtfU0laRT0kKGxzIC1saCAiJEFQS19GSUxFIiB8IGF3ayAne3ByaW50ICQ1fScpCgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA+ICIkUkVQT1JUX0ZJTEUiCmVjaG8gIiBjb20uZ3Jhc3MubWggKHYxLjYuMCkg5b+r6YCf5YiG5p6Q5oql5ZGKIiA+PiAiJFJFUE9SVF9GSUxFIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA+PiAiJFJFUE9SVF9GSUxFIgplY2hvICIiID4+ICIkUkVQT1JUX0ZJTEUiCmVjaG8gIuaWh+S7tuWQjTogJEFQS19CQVNFTkFNRSIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAi5paH5Lu25aSn5bCPOiAkQVBLX1NJWkUiID4+ICIkUkVQT1JUX0ZJTEUiCmVjaG8gIuWIhuaekOaXtumXtDogJChkYXRlICcrJVktJW0tJWQgJUg6JU06JVMnKSIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgoKbG9nX2luZm8gIuW8gOWni+WIhuaekCBjb20uZ3Jhc3MubWggLi4uIgpsb2dfaW5mbyAi6L6T5Ye655uu5b2VOiAkT1VUUFVUX0RJUiIKCiMgPT09PT09PT09PSAxLiDlv6vpgJ/moYbmnrbmo4DmtYsgPT09PT09PT09PQpsb2dfaW5mbyAiWzEvNl0g5qGG5p625qOA5rWLLi4uIgplY2hvICItLS0gMS4g5qGG5p625qOA5rWLIC0tLSIgPj4gIiRSRVBPUlRfRklMRSIKCkZJTEVfTElTVD0kKHVuemlwIC1sICIkQVBLX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHRydWUpCgppZiBlY2hvICIkRklMRV9MSVNUIiB8IGdyZXAgLXFpRSAnbGliYXBwXC5zb3xmbHV0dGVyfGxpYmZsdXR0ZXInOyB0aGVuCiAgRlJBTUVXT1JLPSJGbHV0dGVyIgplbGlmIGVjaG8gIiRGSUxFX0xJU1QiIHwgZ3JlcCAtcWlFICdsaWJyZWFjdG5hdGl2ZXxpbmRleFwuYW5kcm9pZFwuYnVuZGxlfGhlcm1lcyc7IHRoZW4KICBGUkFNRVdPUks9IlJlYWN0IE5hdGl2ZSIKZWxpZiBlY2hvICIkRklMRV9MSVNUIiB8IGdyZXAgLXFpRSAnbGlidW5pdHl8bGliaWwyY3BwfGxpYm1vbm8nOyB0aGVuCiAgRlJBTUVXT1JLPSJVbml0eSIKZWxzZQogIEZSQU1FV09SSz0i5Y6f55SfIEFuZHJvaWQgKEphdmEvS290bGluKSIKZmkKCmVjaG8gIuajgOa1i+ahhuaetjogJEZSQU1FV09SSyIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgpsb2dfb2sgIuahhuaetjogJEZSQU1FV09SSyIKCiMgPT09PT09PT09PSAyLiDliqDlm7rlo7Pmo4DmtYsgPT09PT09PT09PQpsb2dfaW5mbyAiWzIvNl0g5Yqg5Zu65aOz5qOA5rWLLi4uIgplY2hvICItLS0gMi4g5Yqg5Zu65aOz5qOA5rWLIC0tLSIgPj4gIiRSRVBPUlRfRklMRSIKClNIRUxMX0RFVEVDVEVEPSLmnKrmo4DmtYvliLAiClNIRUxMX1JVTEVTPSgKICAiMzYw5Yqg5Zu6OmxpYmppYWd1LnNvfGxpYnByb3RlY3RDbGFzcy5zb3xsaWJqaWFndV9hcnQuc28iCiAgIuaihuaihuWuieWFqDpsaWJzZWNleGUuc298bGlic2VjbWFpbi5zb3xsaWJEZXhIZWxwZXIuc298bGliU2VjU2hlbGwuc28iCiAgIueIseWKoOWvhjpsaWJleGVjLnNvfGxpYmV4ZWNtYWluLnNvfGlqaWFtaS5kYXR8aWppYW1pLmFqbXxsaWJucXNoaWVsZC5zbyIKICAi6IW+6K6v5LmQ5Zu6OmxpYnNoZWxseC18bGliQnVnbHkuc298bGlidHVwLnNvfGxpYmV4ZWMuc298bGlic2hlbGwuc28iCiAgIueZvuW6puWKoOWbujpsaWJiYWlkdXByb3RlY3Quc298bGliYmFpZHVwcm90ZWN0X3g4Ni5zbyIKICAi572R5piT5piT55u+OmxpYm5lc2VjLnNvfGxpYm5lc2VjX3g4Ni5zbyIKICAi5aic6L+mOmxpYmNoYW9zdm1wLnNvfGxpYmRkb2cuc298bGliZmRvZy5zb3xsaWJlZG9nLnNvIgogICLlh6Dnu7Tlronlhag6bGlia3dzY21tLnNvfGxpYmt3c2NyLnNvfEtpd2lWTSIKKQoKZm9yIHJ1bGUgaW4gIiR7U0hFTExfUlVMRVNbQF19IjsgZG8KICBTSEVMTF9OQU1FPSIke3J1bGUlJToqfSIKICBTSEVMTF9TSUdTPSIke3J1bGUjKjp9IgogIElGUz0nfCcgcmVhZCAtcmEgU0lHUyA8PDwgIiRTSEVMTF9TSUdTIgogIGZvciBzaWcgaW4gIiR7U0lHU1tAXX0iOyBkbwogICAgaWYgZWNobyAiJEZJTEVfTElTVCIgfCBncmVwIC1xaSAiJHNpZyI7IHRoZW4KICAgICAgU0hFTExfREVURUNURUQ9IiRTSEVMTF9OQU1FIgogICAgICBicmVhayAyCiAgICBmaQogIGRvbmUKZG9uZQoKZWNobyAi5Yqg5Zu65aOz54q25oCBOiAkU0hFTExfREVURUNURUQiID4+ICIkUkVQT1JUX0ZJTEUiCmlmIFtbICIkU0hFTExfREVURUNURUQiICE9ICLmnKrmo4DmtYvliLAiIF1dOyB0aGVuCiAgZWNobyAi4pqg77iPIOajgOa1i+WIsOWKoOWbujogJFNIRUxMX0RFVEVDVEVEIiA+PiAiJFJFUE9SVF9GSUxFIgogIGVjaG8gIuW7uuiuruWFiOiEseWjs+WGjeWIhuaekCIgPj4gIiRSRVBPUlRfRklMRSIKZmkKZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgpsb2dfb2sgIuWKoOWbuuWjszogJFNIRUxMX0RFVEVDVEVEIgoKIyA9PT09PT09PT09IDMuIOWMheWQjeWSjOadg+mZkOaPkOWPliA9PT09PT09PT09CmxvZ19pbmZvICJbMy82XSDmj5Dlj5bljIXlkI3lkozmnYPpmZAuLi4iCmVjaG8gIi0tLSAzLiDljIXlkI3lkozmnYPpmZAgLS0tIiA+PiAiJFJFUE9SVF9GSUxFIgoKIyDku44gQW5kcm9pZE1hbmlmZXN0LnhtbCDmj5Dlj5YKTUFOSUZFU1Q9JCh1bnppcCAtcCAiJEFQS19GSUxFIiBBbmRyb2lkTWFuaWZlc3QueG1sIDI+L2Rldi9udWxsIHwgc3RyaW5ncyB8fCB0cnVlKQpQS0dfTkFNRT0kKGVjaG8gIiRNQU5JRkVTVCIgfCBncmVwIC1vUCAncGFja2FnZT0iXEtbXiJdKycgfCBoZWFkIC0xIHx8IGVjaG8gIuacquefpSIpCgplY2hvICLljIXlkI06ICRQS0dfTkFNRSIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgplY2hvICLmnYPpmZDliJfooag6IiA+PiAiJFJFUE9SVF9GSUxFIgplY2hvICIkTUFOSUZFU1QiIHwgZ3JlcCAtb1AgJ2FuZHJvaWRcLnBlcm1pc3Npb25cLlx3KycgfCBzb3J0IC11IHwgaGVhZCAtMzAgfCBzZWQgJ3MvXi8gIC0gLycgPj4gIiRSRVBPUlRfRklMRSIgfHwgdHJ1ZQplY2hvICIiID4+ICIkUkVQT1JUX0ZJTEUiCmxvZ19vayAi5YyF5ZCNOiAkUEtHX05BTUUiCgojID09PT09PT09PT0gNC4gREVYIOWtl+espuS4suWIhuaekCA9PT09PT09PT09CmxvZ19pbmZvICJbNC82XSBERVgg5a2X56ym5Liy5YiG5p6QLi4uIgplY2hvICItLS0gNC4gREVYIOWtl+espuS4suWIhuaekCAtLS0iID4+ICIkUkVQT1JUX0ZJTEUiCgpERVhfRElSPSIkT1VUUFVUX0RJUi9kZXhfZXh0cmFjdGVkIgpta2RpciAtcCAiJERFWF9ESVIiCnVuemlwIC1xICIkQVBLX0ZJTEUiICJjbGFzc2VzKi5kZXgiIC1kICIkREVYX0RJUiIgMj4vZGV2L251bGwgfHwgdHJ1ZQoKIyDmj5Dlj5blhbPplK7lrZfnrKbkuLIKcHl0aG9uMyA8PCBQWUVPRgppbXBvcnQgc3RydWN0LCBvcywgcmUKCmFsbF9zdHJpbmdzID0gW10KZGV4X2ZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIoJyRERVhfRElSJykgaWYgZi5lbmRzd2l0aCgnLmRleCcpXSkKCmZvciBkZXggaW4gZGV4X2ZpbGVzOgogICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignJERFWF9ESVInLCBkZXgpLCAncmInKSBhcyBmOgogICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgdHJ5OgogICAgICAgIHN0cmluZ19pZHNfc2l6ZSA9IHN0cnVjdC51bnBhY2soJzxJJywgZGF0YVs1Njo2MF0pWzBdCiAgICAgICAgc3RyaW5nX2lkc19vZmYgPSBzdHJ1Y3QudW5wYWNrKCc8SScsIGRhdGFbNjA6NjRdKVswXQogICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihzdHJpbmdfaWRzX3NpemUsIDUwMDAwKSk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHN0cl9vZmYgPSBzdHJ1Y3QudW5wYWNrKCc8SScsIGRhdGFbc3RyaW5nX2lkc19vZmYgKyBpKjQ6c3RyaW5nX2lkc19vZmYgKyBpKjQgKyA0XSlbMF0KICAgICAgICAgICAgICAgIGxlbmd0aCA9IGRhdGFbc3RyX29mZl0KICAgICAgICAgICAgICAgIGlmIGxlbmd0aCAmIDB4ODA6CiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gKGxlbmd0aCAmIDB4N2YpIHwgKChkYXRhW3N0cl9vZmYrMV0gJiAweDdmKSA8PCA3KQogICAgICAgICAgICAgICAgICAgIHN0cl9kYXRhID0gZGF0YVtzdHJfb2ZmKzI6c3RyX29mZisyK2xlbmd0aF0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc3RyX2RhdGEgPSBkYXRhW3N0cl9vZmYrMTpzdHJfb2ZmKzErbGVuZ3RoXQogICAgICAgICAgICAgICAgcyA9IHN0cl9kYXRhLmRlY29kZSgndXRmLTgnLCBlcnJvcnM9J2lnbm9yZScpCiAgICAgICAgICAgICAgICBpZiBsZW4ocykgPj0gMzoKICAgICAgICAgICAgICAgICAgICBhbGxfc3RyaW5ncy5hcHBlbmQocykKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgYnJlYWsKICAgIGV4Y2VwdDoKICAgICAgICBwYXNzCgojIOS/neWtmOaJgOacieWtl+espuS4sgp3aXRoIG9wZW4oJyRPVVRQVVRfRElSL2FsbF9zdHJpbmdzLnR4dCcsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgIGZvciBzIGluIGFsbF9zdHJpbmdzOgogICAgICAgIGYud3JpdGUocyArICdcbicpCgojIOWIhuaekOWFs+mUruivjQpjYXRlZ29yaWVzID0gewogICAgJ1ZJUC/ku5jotLknOiBbJ3ZpcCcsICdwcmVtaXVtJywgJ3BybycsICdzdWJzY3JpYmUnLCAnc3Vic2NyaXB0aW9uJywgJ3B1cmNoYXNlJywgJ3BhaWQnLCAndW5sb2NrJywgJ2xpY2Vuc2UnLCAnYWN0aXZhdGUnLCAndHJpYWwnLCAnZXhwaXJlJ10sCiAgICAn5bm/5ZGKJzogWydhZCAnLCAnYWRzJywgJ2FkbW9iJywgJ2FkdmVydCcsICdiYW5uZXInLCAnaW50ZXJzdGl0aWFsJywgJ3Jld2FyZCcsICdwYW5nbGUnLCAnbWludGVncmFsJywgJ3VuaXR5YWRzJywgJ2FwcGxvdmluJ10sCiAgICAn5by556qXL+abtOaWsCc6IFsnZm9yY2VfdXBkYXRlJywgJ3VwZGF0ZScsICd1cGdyYWRlJywgJ2RpYWxvZycsICdhbGVydCcsICdwb3B1cCcsICd0b2FzdCcsICdub3RpZmljYXRpb24nXSwKICAgICfnvZHnu5wvQVBJJzogWydhcGknLCAnaHR0cCcsICdodHRwcycsICdyZXRyb2ZpdCcsICdva2h0dHAnLCAnZW5kcG9pbnQnLCAnc2VydmVyJywgJ2hvc3QnXSwKICAgICfliqDlr4Yv5a6J5YWoJzogWydhZXMnLCAncnNhJywgJ21kNScsICdzaGExJywgJ3NoYTI1NicsICdlbmNyeXB0JywgJ2RlY3J5cHQnLCAnY2lwaGVyJywgJ2Jhc2U2NCcsICdzaWduYXR1cmUnLCAnc2lnbicsICd2ZXJpZnknXSwKICAgICflj43osIPor5UnOiBbJ2RlYnVnZ2VyJywgJ2ZyaWRhJywgJ3hwb3NlZCcsICdyb290JywgJ2VtdWxhdG9yJywgJ3NhbmRib3gnLCAnZGVidWdnYWJsZSddLAogICAgJ+WcsOWbvi/kvY3nva4nOiBbJ21hcCcsICd0aWxlJywgJ29zbScsICdncHMnLCAnbG9jYXRpb24nLCAnZ2VvJywgJ3RyYWNrJywgJ3JvdXRlJywgJ25hdmlnYXRpb24nXSwKICAgICfmuLjmiI8v5L+u5pS5JzogWydnZycsICdnYW1lZ3VhcmRpYW4nLCAnY2hlYXQnLCAnaGFjaycsICdtb2RpZnknLCAnc3BlZWQnLCAnZ29sZCcsICdjb2luJywgJ2RpYW1vbmQnXSwKfQoKd2l0aCBvcGVuKCckUkVQT1JUX0ZJTEUnLCAnYScsIGVuY29kaW5nPSd1dGYtOCcpIGFzIHJmOgogICAgZm9yIGNhdCwga2V5d29yZHMgaW4gY2F0ZWdvcmllcy5pdGVtcygpOgogICAgICAgIGZvdW5kID0gW10KICAgICAgICBmb3Iga3cgaW4ga2V5d29yZHM6CiAgICAgICAgICAgIGZvciBzIGluIGFsbF9zdHJpbmdzOgogICAgICAgICAgICAgICAgaWYga3cubG93ZXIoKSBpbiBzLmxvd2VyKCkgYW5kIGxlbihzKSA8IDEwMCBhbmQgbm90IHMuc3RhcnRzd2l0aCgnJCcpOgogICAgICAgICAgICAgICAgICAgIGlmIHMgbm90IGluIGZvdW5kOgogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5hcHBlbmQocykKICAgICAgICBpZiBmb3VuZDoKICAgICAgICAgICAgcmYud3JpdGUoZiJcXG5be2NhdH1dXFxuIikKICAgICAgICAgICAgZm9yIGYgaW4gZm91bmRbOjEwXToKICAgICAgICAgICAgICAgIHJmLndyaXRlKGYiICB7Zn1cXG4iKQoKcHJpbnQoZiLlrZfnrKbkuLLmj5Dlj5blrozmiJA6IHtsZW4oYWxsX3N0cmluZ3MpfSDkuKoiKQpQWUVPRgoKZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgpsb2dfb2sgIkRFWCDlrZfnrKbkuLLliIbmnpDlrozmiJAiCgojID09PT09PT09PT0gNS4gVVJMIOWSjCBBUEkgS2V5IOaPkOWPliA9PT09PT09PT09CmxvZ19pbmZvICJbNS82XSDmj5Dlj5YgVVJMIOWSjCBBUEkgS2V5Li4uIgplY2hvICItLS0gNS4gVVJMIOWSjCBBUEkgS2V5IC0tLSIgPj4gIiRSRVBPUlRfRklMRSIKCmlmIFtbIC1mICIkT1VUUFVUX0RJUi9hbGxfc3RyaW5ncy50eHQiIF1dOyB0aGVuCiAgZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgogIGVjaG8gIlVSTC/ln5/lkI06IiA+PiAiJFJFUE9SVF9GSUxFIgogIGdyZXAgLW9FICdodHRwcz86Ly9bXiJcczw+XSsnICIkT1VUUFVUX0RJUi9hbGxfc3RyaW5ncy50eHQiIHwgc29ydCAtdSB8IGhlYWQgLTIwIHwgc2VkICdzL14vICAvJyA+PiAiJFJFUE9SVF9GSUxFIiB8fCB0cnVlCiAgCiAgZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgogIGVjaG8gIkFQSSBLZXkvVG9rZW4g5qih5byPOiIgPj4gIiRSRVBPUlRfRklMRSIKICBncmVwIC1pRSAnKGFwaVtfLV0/a2V5fGFwaWtleXx0b2tlbnxzZWNyZXR8YXV0aHxiZWFyZXJ8Y2xpZW50W18tXT9pZCknICIkT1VUUFVUX0RJUi9hbGxfc3RyaW5ncy50eHQiIHwgZ3JlcCAtdiAnXlwkJyB8IHNvcnQgLXUgfCBoZWFkIC0xNSB8IHNlZCAncy9eLyAgLycgPj4gIiRSRVBPUlRfRklMRSIgfHwgdHJ1ZQpmaQoKZWNobyAiIiA+PiAiJFJFUE9SVF9GSUxFIgpsb2dfb2sgIlVSTC9BUEkgS2V5IOaPkOWPluWujOaIkCIKCiMgPT09PT09PT09PSA2LiDnlJ/miJDkv67mlLnlu7rorq4gPT09PT09PT09PQpsb2dfaW5mbyAiWzYvNl0g55Sf5oiQ5L+u5pS55bu66K6uLi4uIgplY2hvICItLS0gNi4gTVTnrqHnkIblmajkv67mlLnlu7rorq7vvIjlpKfnmb3or53niYjvvIktLS0iID4+ICIkUkVQT1JUX0ZJTEUiCmVjaG8gIiIgPj4gIiRSRVBPUlRfRklMRSIKCmNhdCA+PiAiJFJFUE9SVF9GSUxFIiA8PCAnTU9ESUZZJwrjgJDpgJrnlKjkv67mlLnmlrnms5XjgJEKCjEuIOWOu+W5v+WRijoKICAgLSBNVOeuoeeQhuWZqOaJk+W8gEFQSyAtPiBERVjnvJbovpHlmagKICAgLSDmkJzntKLlub/lkYrnm7jlhbPnsbvlkI3vvIjlpoIgQWRNb2IsIFBhbmdsZe+8iQogICAtIOaKiuW5v+WRiuWKoOi9veaWueazleS9k+a4heepuu+8iOWPqueVmSByZXR1cm7vvIkKICAgLSDkv53lrZggLT4g562+5ZCNIC0+IOWuieijhQoKMi4g6Kej6ZSBVklQL+S8muWRmDoKICAgLSDmkJzntKIgaXNWaXAsIGlzUHJlbWl1bSwgaXNTdWJzY3JpYmVkIOetieaWueazlQogICAtIOaKiui/lOWbnuWAvOaUueaIkCB0cnVl77yIY29uc3QvNCB2MCwgMHgxOyByZXR1cm4gdjDvvIkKICAgLSDmiJbogIXmiorliKTmlq3pgLvovpHlj5blj40KCjMuIOWOu+W8ueeqly/mm7TmlrA6CiAgIC0g5pCc57SiIGZvcmNlX3VwZGF0ZSwgc2hvd1VwZGF0ZURpYWxvZyDnrYnmlrnms5UKICAgLSDmiormlrnms5XkvZPmuIXnqbrmiJbov5Tlm54gZmFsc2UKICAgLSDkv53lrZggLT4g562+5ZCNIC0+IOWuieijhQoKNC4g57uV6L+H562+5ZCN6aqM6K+BOgogICAtIOaQnOe0oiB2ZXJpZnlTaWduYXR1cmUsIGNoZWNrU2lnbmF0dXJlIOetieaWueazlQogICAtIOaKiui/lOWbnuWAvOaUueaIkCB0cnVlCiAgIC0g5oiW6ICF55u05o6l5Yig6Zmk562+5ZCN5qOA5p+l5Luj56CBCgo1LiDkv67mlLnlnLDlm77mupDvvIjlpoLmnpzmmK/lnLDlm77lupTnlKjvvIk6CiAgIC0g5pCc57SiIHRpbGUgVVJMIOWfn+WQjQogICAtIOabv+aNouaIkOS9oOiHquW3seeahOeTpueJh+acjeWKoeWZqAogICAtIOazqOaEj+S/neaMgeWtl+espuS4sumVv+W6puaIluS/ruaUueW8leeUqAoK44CQ5rOo5oSP5LqL6aG544CRCi0g5L+u5pS55YmN5aSH5Lu95Y6fQVBLCi0g5pS55a6M5ZCO5b+F6aG755SoTVTnrqHnkIblmajnrb7lkI0KLSDlpoLmnpzlupTnlKjmnInliqDlm7rvvIzpnIDopoHlhYjohLHlo7MKLSDpg6jliIbkv67mlLnlj6/og73lr7zoh7TlupTnlKjltKnmuoPvvIzpnIDopoHlpJror5Xlh6DmrKEKCk1PRElGWQoKIyA9PT09PT09PT09IOWujOaIkCA9PT09PT09PT09CmVjaG8gIiIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAi5YiG5p6Q5a6M5oiQ77yBIiA+PiAiJFJFUE9SVF9GSUxFIgplY2hvICLovpPlh7rnm67lvZU6ICRPVVRQVVRfRElSIiA+PiAiJFJFUE9SVF9GSUxFIgplY2hvICLmiqXlkYrmlofku7Y6ICRSRVBPUlRfRklMRSIgPj4gIiRSRVBPUlRfRklMRSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPj4gIiRSRVBPUlRfRklMRSIKCmVjaG8gIiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKbG9nX29rICJjb20uZ3Jhc3MubWgg5YiG5p6Q5a6M5oiQ77yBIgplY2hvICIiCmVjaG8gIui+k+WHuuebruW9lTogJE9VVFBVVF9ESVIiCmVjaG8gIuaKpeWRiuaWh+S7tjogJFJFUE9SVF9GSUxFIgplY2hvICIiCmVjaG8gIuafpeeci+aKpeWRijoiCmNhdCAiJFJFUE9SVF9GSUxFIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Igo=
B64EOF_quick-analyze-grass-mh.sh
chmod +x "$DECODE_DIR/quick-analyze-grass-mh.sh" 2>/dev/null

echo "恢复: re_env_index.sh ..."
base64 -d << 'B64EOF_re_env_index.sh' > "$DECODE_DIR/re_env_index.sh"
IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOmAhuWQkeW3peeoi+eOr+Wig+aBouWkjee0ouW8leiEmuacrAojICDnlKjpgJQ6IOS7jnBhc3RlLmMtbmV0Lm9yZ+WkjeWItuatpOiEmuacrO+8jOebtOaOpeaJp+ihjOWNs+WPr+aBouWkjeWFqOmDqOeOr+WigwojICDljIXlkKs6IOaJgOacieS4i+i9vemTvuaOpeOAgeaBouWkjeWRveS7pOOAgemqjOivgeaWueazlQojICDml6XmnJ86IDIwMjYtMDctMTUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAgbXBpbWcuY24g546v5aKD5YyF5YiG54mH5LiL6L296ZO+5o6lCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFTlZfUEFSVF8xPSJodHRwczovL21waW1nLmNuL2Rvd24ucGhwLzUyMWJkMjQ4MjM4NzBhNWU0OGE5YWE3Y2ZhY2IzNDM1IgpFTlZfUEFSVF8yPSJodHRwczovL21waW1nLmNuL2Rvd24ucGhwLzc4NGI2N2U2NzEyNDYwNjRjMmZhNDdmMjUyYjNjZmEzIgpFTlZfUEFSVF8zPSJodHRwczovL21waW1nLmNuL2Rvd24ucGhwLzExZDYwNzljODc1ZGJiZmMyNjJiOTNmOTY2ODIyN2M3IgoKIyDohJrmnKzljIXvvIg5NUtC77yM6L276YeP54mI77yM5Y+q5ZCr5omA5pyJ6ISa5pys77yJClNDUklQVFNfWklQPSJodHRwczovL21waW1nLmNuL2Rvd24ucGhwL2Y1NmZhOGY2Nzc0OTE5NGJkMTYxMDY5NDc5ZDgxMjRjIgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOaBouWkjeWRveS7pO+8iOWkjeWItueymOi0tOWNs+WPr++8iQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMg44CQ5pa55rOVQeOAkeWujOaVtOaBouWkje+8iOW3peWFtyvohJrmnKwr5a+G6ZKlK+eslOiusO+8iQplY2hvICI9PT0g5pa55rOVQTog5a6M5pW05oGi5aSNID09PSIKZWNobyAi5LiL6L29M+S4quWIhueJh+WIsOWQjOS4gOebruW9le+8jOeEtuWQjuaJp+ihjDoiCmVjaG8gIiIKZWNobyAiICBjZCAvZGF0YS91c2VyL3dvcmsiCmVjaG8gIiAgd2dldCAtTyBlbnZfcGFydF9hYSAnJEVOVl9QQVJUXzEnIgplY2hvICIgIHdnZXQgLU8gZW52X3BhcnRfYWIgJyRFTlZfUEFSVF8yJyIKZWNobyAiICB3Z2V0IC1PIGVudl9wYXJ0X2FjICckRU5WX1BBUlRfMyciCmVjaG8gIiAgY2F0IGVudl9wYXJ0X2FhIGVudl9wYXJ0X2FiIGVudl9wYXJ0X2FjID4gYW5kcm9pZF9yZV9lbnYudGFyLmd6IgplY2hvICIgIGJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfcmVzdG9yZS5zaCBhbmRyb2lkX3JlX2Vudi50YXIuZ3oiCmVjaG8gIiIKZWNobyAi5aaC5p6c5bey5pyJcmVzdG9yZeiEmuacrDoiCmVjaG8gIiAgYmFzaCAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L3Jlc3RvcmVfYW5kcm9pZF9yZV9lbnYuc2ggYW5kcm9pZF9yZV9lbnYudGFyLmd6IgplY2hvICIiCgojIOOAkOaWueazlULjgJHlj6rmgaLlpI3ohJrmnKzvvIg5NUtC77yM56eS5LiL77yJCmVjaG8gIj09PSDmlrnms5VCOiDlj6rmgaLlpI3ohJrmnKzvvIjlv6vpgJ/vvIkgPT09IgplY2hvICIgIHdnZXQgLU8gL3RtcC9zY3JpcHRzLnppcCAnJFNDUklQVFNfWklQJyIKZWNobyAiICB1bnppcCAvdG1wL3NjcmlwdHMuemlwIC1kIC93b3Jrc3BhY2Uvc2NyaXB0c190ZW1wLyIKZWNobyAiICBjcCAvd29ya3NwYWNlL3NjcmlwdHNfdGVtcC9zY3JpcHRzX2xhdGVzdC8qIC93b3Jrc3BhY2UvIgplY2hvICIgIGNobW9kICt4IC93b3Jrc3BhY2UvKi5zaCAvd29ya3NwYWNlLyoucHkiCmVjaG8gIiAgcm0gLXJmIC93b3Jrc3BhY2Uvc2NyaXB0c190ZW1wIC90bXAvc2NyaXB0cy56aXAiCmVjaG8gIiIKCiMg44CQ5pa55rOVQ+OAkeWmguaenG9uZV9jbGlja19yZXN0b3JlLnNo5bey5a2Y5ZyoCmVjaG8gIj09PSDmlrnms5VDOiDkuIDplK7mgaLlpI3vvIjmjqjojZDvvIkgPT09IgplY2hvICIgIGJhc2ggL3dvcmtzcGFjZS9vbmVfY2xpY2tfcmVzdG9yZS5zaCIKZWNobyAiICDohJrmnKzkvJroh6rliqjmn6Xmib7mnKzlnLB0YXIuZ3rmiJbku45tcGltZ+S4i+i9veWIhueJhyIKZWNobyAiIgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOiEmuacrOa4heWNle+8iDI15Liq77yJCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQplY2hvICI9PT0g6ISa5pys5riF5Y2VID09PSIKZWNobyAiUHl0aG9uICg3KToiCmVjaG8gIiAgYXBrX2FuYWx5emVyLnB5IC0gQVBL57u85ZCI5YiG5p6Q5ZmoIgplY2hvICIgIGF1dG9fc2lnbl9wYXRjaC5weSAtIOiHquWKqOetvuWQjeaJk+ihpeS4gSIKZWNobyAiICBhcGtfc2lnbl9wYXRjaC5weSAtIOetvuWQjemqjOivgea3seW6puaJq+aPjyIKZWNobyAiICBiaW5hcnlfcGF0Y2gucHkgLSDkuozov5vliLbooaXkuIHlt6XlhbciCmVjaG8gIiAgZGV4X3ZpcF9odW50ZXIucHkgLSBERVggVklQ5pa55rOV5pCc57SiIgplY2hvICIgIHVwbG9hZF90b19tcGltZy5weSAtIOS4iuS8oOWIsG1waW1nLmNuIgplY2hvICIgIHVwbG9hZF9zZXJ2ZXIucHkgLSDkuIrkvKDmnI3liqHlmagiCmVjaG8gIiIKZWNobyAiU2hlbGwgKDE4KToiCmVjaG8gIiAgb25lX2NsaWNrX3NhdmUuc2ggLSDkuIDplK7kv53lrZjnjq/looPvvIjmiZPljIUr5LiK5Lyg5aSH5Lu977yJIgplY2hvICIgIG9uZV9jbGlja19yZXN0b3JlLnNoIC0g5LiA6ZSu5oGi5aSN546v5aKD77yI6Kej5Y6LK+WuieijhSvpqozor4HvvIkiCmVjaG8gIiAgaW5pdF9yZV9lbnYuc2ggLSDmlrDnqpflj6Pnjq/looPliJ3lp4vljJbvvIhzb3VyY2XmiafooYzvvIkiCmVjaG8gIiAgcmVzdG9yZV9hbmRyb2lkX3JlX2Vudi5zaCAtIOeOr+Wig+aBouWkjeiEmuacrO+8iOaJi+WKqOeJiO+8iSIKZWNobyAiICBhdXRvLXJldmVyc2Uuc2ggLSDoh6rliqjpgIblkJHmtYHnqIsiCmVjaG8gIiAgYW5hbHl6ZS1mbHV0dGVyLnNoIC0gRmx1dHRlcuWIhuaekCIKZWNobyAiICBkZXRlY3QtZnJhbWV3b3JrLnNoIC0g5qGG5p625qOA5rWLIgplY2hvICIgIGRldGVjdC1zaGVsbC5zaCAtIOWjs+ajgOa1iyIKZWNobyAiICBkZWNvbXBpbGUuc2ggLSDlj43nvJbor5EiCmVjaG8gIiAgZmluZC1hcGktY2FsbHMuc2ggLSBBUEnosIPnlKjmn6Xmib4iCmVjaG8gIiAgZmluZC1zZWN1cml0eS1wYXR0ZXJucy5zaCAtIOWuieWFqOaooeW8j+afpeaJviIKZWNobyAiICBnZW5lcmF0ZS1mcmlkYS1zY3JpcHRzLnNoIC0gRnJpZGHohJrmnKznlJ/miJAiCmVjaG8gIiAgcXVpY2stYW5hbHl6ZS1ncmFzcy1taC5zaCAtIFjnq5nlv6vpgJ/liIbmnpAiCmVjaG8gIiAgbGF1bmNoZXIuc2ggLSDlkK/liqjlmagiCmVjaG8gIiAgc2V0dXAuc2ggLSDnjq/looPliJ3lp4vljJYiCmVjaG8gIiAgc2F2ZS5zaCAtIOS/neWtmOiEmuacrCIKZWNobyAiICBiYWNrdXAuc2ggLSDlpIfku73ohJrmnKwiCmVjaG8gIiAgY2hlY2stZGVwcy5zaCAtIOS+nei1luajgOafpSIKZWNobyAiICBpbnN0YWxsLWRlcC5zaCAtIOS+nei1luWuieijhSIKZWNobyAiIgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIHBhc3RlLmMtbmV0Lm9yZyDohJrmnKzlpIfku73pk77mjqUKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmVjaG8gIj09PSBwYXN0ZS5jLW5ldC5vcmcg5Y2V6ISa5pys5aSH5Lu9ID09PSIKZWNobyAiICBvbmVfY2xpY2tfc2F2ZS5zaCAtPiBodHRwczovL3Bhc3RlLmMtbmV0Lm9yZy9Sb2xmc2t5VGhpcmRzIgplY2hvICIgIG9uZV9jbGlja19yZXN0b3JlLnNoIC0+IGh0dHBzOi8vcGFzdGUuYy1uZXQub3JnL0RhcmtlclN1bGx5IgplY2hvICIgIGluaXRfcmVfZW52LnNoIC0+IGh0dHBzOi8vcGFzdGUuYy1uZXQub3JnL0luZmVjdGVkU2hha2luZyIKZWNobyAiICBhdXRvLXJldmVyc2Uuc2ggLT4gaHR0cHM6Ly9wYXN0ZS5jLW5ldC5vcmcvVGVsZGFyQXNjaGVuIgplY2hvICIgIGFwa19hbmFseXplci5weSAtPiBodHRwczovL3Bhc3RlLmMtbmV0Lm9yZy9Db21wYXJlZFVuaGFwcHkiCmVjaG8gIiAgYXV0b19zaWduX3BhdGNoLnB5IC0+IGh0dHBzOi8vcGFzdGUuYy1uZXQub3JnL0dub21lTGlzenQiCmVjaG8gIiAgYXBrX3NpZ25fcGF0Y2gucHkgLT4gaHR0cHM6Ly9wYXN0ZS5jLW5ldC5vcmcvUGV0ZXJzU2xheWVyIgplY2hvICIiCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAg5Yid5aeL5YyW5ZG95Luk77yI5oGi5aSN5ZCO5omn6KGM77yJCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQplY2hvICI9PT0g5oGi5aSN5ZCO5Yid5aeL5YyWID09PSIKZWNobyAiICBzb3VyY2UgL3dvcmtzcGFjZS9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdC9pbml0X3JlX2Vudi5zaCIKZWNobyAiIgplY2hvICLlv6vmjbflkb3ku6Q6IHF1aWNrX2FuYWx5c2lzIC8gZGVjb21waWxlIC8gcmVwYWNrIC8gdXBsb2FkX21waW1nIC8gZGV0ZWN0X2ZyYW1ld29yayIK
B64EOF_re_env_index.sh
chmod +x "$DECODE_DIR/re_env_index.sh" 2>/dev/null

echo "恢复: save.sh ..."
base64 -d << 'B64EOF_save.sh' > "$DECODE_DIR/save.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIHNhdmUuc2gg4oCUIOawuOS5heS/neWtmOaguOW/g+iEmuacrO+8iOWkmumHjeWGl+S9meWkh+S7ve+8iQojIOeUqOazlTogYmFzaCBzYXZlLnNoCnNldCAtZXVvIHBpcGVmYWlsCgpTQ1JJUFRfRElSPSIkKGNkICIkKGRpcm5hbWUgIiR7QkFTSF9TT1VSQ0VbMF19IikiICYmIHB3ZCkiClRTPSQoZGF0ZSArJVklbSVkXyVIJU0lUykKClJFRD0nXDAzM1swOzMxbScKR1JFRU49J1wwMzNbMDszMm0nCllFTExPVz0nXDAzM1sxOzMzbScKQkxVRT0nXDAzM1swOzM0bScKQ1lBTj0nXDAzM1swOzM2bScKTkM9J1wwMzNbMG0nCgpsb2dfaW5mbygpICB7IGVjaG8gLWUgIiR7QkxVRX1b5L+d5a2YXSR7TkN9ICQqIjsgfQpsb2dfb2soKSAgICB7IGVjaG8gLWUgIiR7R1JFRU59W+WujOaIkF0ke05DfSAkKiI7IH0KbG9nX3dhcm4oKSAgeyBlY2hvIC1lICIke1lFTExPV31b5o+Q56S6XSR7TkN9ICQqIjsgfQpsb2dfY3lhbigpICB7IGVjaG8gLWUgIiR7Q1lBTn1b5qC45b+DXSR7TkN9ICQqIjsgfQoKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiIOaguOW/g+iEmuacrOawuOS5heS/neWtmO+8iOWkmumHjeWkh+S7ve+8iSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiIgoKIyA9PT09PT09PT09IOWkh+S7veS9jee9riA9PT09PT09PT09ClBSSU1BUlk9Ii93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQiClNFQ09OREFSWT0iL3dvcmtzcGFjZS9zY3JpcHRzIgpURVJUSUFSWT0iL3dvcmtzcGFjZS9jb3JlLWJhY2t1cC0ke1RTfSIKUk9PVD0iL3dvcmtzcGFjZSIKCm1rZGlyIC1wICIkU0VDT05EQVJZIgpta2RpciAtcCAiJFRFUlRJQVJZIgoKU0FWRURfQ09VTlQ9MAoKIyA9PT09PT09PT09IOWHveaVsO+8muS/neWtmOaWh+S7tiA9PT09PT09PT09CnNhdmVfZmlsZSgpIHsKICAgIGxvY2FsIHNyYz0iJDEiCiAgICBsb2NhbCBkc3RfZGlyPSIkMiIKICAgIGxvY2FsIGxhYmVsPSIkMyIKICAgIGxvY2FsIGZpbGVuYW1lPSQoYmFzZW5hbWUgIiRzcmMiKQogICAgCiAgICBpZiBbWyAtZiAiJHNyYyIgXV07IHRoZW4KICAgICAgICBjcCAiJHNyYyIgIiRkc3RfZGlyLyRmaWxlbmFtZSIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgICAgIGlmIFtbIC1mICIkZHN0X2Rpci8kZmlsZW5hbWUiIF1dOyB0aGVuCiAgICAgICAgICAgIGxvZ19vayAiWyRsYWJlbF0gJGZpbGVuYW1lIgogICAgICAgICAgICAoKFNBVkVEX0NPVU5UKyspKSB8fCB0cnVlCiAgICAgICAgZWxzZQogICAgICAgICAgICBsb2dfd2FybiAiWyRsYWJlbF0gJGZpbGVuYW1lIOWkjeWItuWksei0pSIKICAgICAgICBmaQogICAgZWxzZQogICAgICAgIGxvZ193YXJuICJbJGxhYmVsXSDmupDmlofku7bkuI3lrZjlnKg6ICRzcmMiCiAgICBmaQp9CgojID09PT09PT09PT0gMS4g5qC45b+DUHl0aG9u6ISa5pysID09PT09PT09PT0KbG9nX2N5YW4gIuOAkDEvNOOAkVB5dGhvbiDmoLjlv4PohJrmnKwiCnNhdmVfZmlsZSAiJFBSSU1BUlkvYXBrX2FuYWx5emVyLnB5IiAiJFJPT1QiICLmoLnnm67lvZUiCnNhdmVfZmlsZSAiJFBSSU1BUlkvYXBrX2FuYWx5emVyLnB5IiAiJFNFQ09OREFSWSIgIuS6jOe6p+Wkh+S7vSIKc2F2ZV9maWxlICIkUFJJTUFSWS9hcGtfYW5hbHl6ZXIucHkiICIkVEVSVElBUlkiICLkuInnuqflpIfku70iCmVjaG8gIiIKCiMgPT09PT09PT09PSAyLiDmoLjlv4NCYXNo6ISa5pysID09PT09PT09PT0KbG9nX2N5YW4gIuOAkDIvNOOAkUJhc2gg5qC45b+D6ISa5pysIgpDT1JFX1NDUklQVFM9KAogICAgImF1dG8tcmV2ZXJzZS5zaCIKICAgICJkZWNvbXBpbGUuc2giCiAgICAiZGV0ZWN0LXNoZWxsLnNoIgogICAgImRldGVjdC1mcmFtZXdvcmsuc2giCiAgICAiZmluZC1hcGktY2FsbHMuc2giCiAgICAiZmluZC1zZWN1cml0eS1wYXR0ZXJucy5zaCIKICAgICJhbmFseXplLWZsdXR0ZXIuc2giCiAgICAiZ2VuZXJhdGUtZnJpZGEtc2NyaXB0cy5zaCIKICAgICJjaGVjay1kZXBzLnNoIgogICAgImluc3RhbGwtZGVwLnNoIgogICAgImxhdW5jaGVyLnNoIgogICAgInNldHVwLnNoIgogICAgImJhY2t1cC5zaCIKICAgICJxdWljay1hbmFseXplLWdyYXNzLW1oLnNoIgopCgpmb3Igc2NyaXB0IGluICIke0NPUkVfU0NSSVBUU1tAXX0iOyBkbwogICAgIyDku47kuLvlt6XlhbfljIXkv53lrZgKICAgIGlmIFtbIC1mICIkUFJJTUFSWS8kc2NyaXB0IiBdXTsgdGhlbgogICAgICAgIHNhdmVfZmlsZSAiJFBSSU1BUlkvJHNjcmlwdCIgIiRST09UIiAi5qC555uu5b2VIgogICAgICAgIHNhdmVfZmlsZSAiJFBSSU1BUlkvJHNjcmlwdCIgIiRTRUNPTkRBUlkiICLkuoznuqflpIfku70iCiAgICAgICAgc2F2ZV9maWxlICIkUFJJTUFSWS8kc2NyaXB0IiAiJFRFUlRJQVJZIiAi5LiJ57qn5aSH5Lu9IgogICAgZWxpZiBbWyAtZiAiJFBSSU1BUlkvc2NyaXB0cy8kc2NyaXB0IiBdXTsgdGhlbgogICAgICAgIHNhdmVfZmlsZSAiJFBSSU1BUlkvc2NyaXB0cy8kc2NyaXB0IiAiJFJPT1QiICLmoLnnm67lvZUiCiAgICAgICAgc2F2ZV9maWxlICIkUFJJTUFSWS9zY3JpcHRzLyRzY3JpcHQiICIkU0VDT05EQVJZIiAi5LqM57qn5aSH5Lu9IgogICAgICAgIHNhdmVfZmlsZSAiJFBSSU1BUlkvc2NyaXB0cy8kc2NyaXB0IiAiJFRFUlRJQVJZIiAi5LiJ57qn5aSH5Lu9IgogICAgZmkKZG9uZQplY2hvICIiCgojID09PT09PT09PT0gMy4g6KGl5LiB5bel5YW3ID09PT09PT09PT0KbG9nX2N5YW4gIuOAkDMvNOOAkeS6jOi/m+WItuihpeS4geW3peWFtyIKc2F2ZV9maWxlICIkUFJJTUFSWS9wYXRjaF90b29scy9iaW5hcnlfcGF0Y2gucHkiICIkUk9PVCIgIuagueebruW9lSIKc2F2ZV9maWxlICIkUFJJTUFSWS9wYXRjaF90b29scy9iaW5hcnlfcGF0Y2gucHkiICIkU0VDT05EQVJZIiAi5LqM57qn5aSH5Lu9IgpzYXZlX2ZpbGUgIiRQUklNQVJZL3BhdGNoX3Rvb2xzL1NycGF0Y2hBbmRyb2lkLmt0IiAiJFJPT1QiICLmoLnnm67lvZUiCnNhdmVfZmlsZSAiJFBSSU1BUlkvcGF0Y2hfdG9vbHMvU3JwYXRjaEFuZHJvaWQua3QiICIkU0VDT05EQVJZIiAi5LqM57qn5aSH5Lu9IgplY2hvICIiCgojID09PT09PT09PT0gNC4g6K+05piO5paH5qGjID09PT09PT09PT0KbG9nX2N5YW4gIuOAkDQvNeOAkeivtOaYjuaWh+ahoyIKc2F2ZV9maWxlICIkUFJJTUFSWS9SRUFETUUubWQiICIkUk9PVCIgIuagueebruW9lSIKc2F2ZV9maWxlICIkUFJJTUFSWS9SRUFETUUubWQiICIkU0VDT05EQVJZIiAi5LqM57qn5aSH5Lu9IgojIHBhdGNoX3Rvb2xzL1JFQURNRS5tZCDmlLnlkI3kv53lrZjpgb/lhY3opobnm5bmoLnnm67lvZVSRUFETUUubWQKY3AgIiRQUklNQVJZL3BhdGNoX3Rvb2xzL1JFQURNRS5tZCIgIiRST09UL3BhdGNoX3Rvb2xzX1JFQURNRS5tZCIgMj4vZGV2L251bGwgfHwgdHJ1ZQpjcCAiJFBSSU1BUlkvcGF0Y2hfdG9vbHMvUkVBRE1FLm1kIiAiJFNFQ09OREFSWS9wYXRjaF90b29sc19SRUFETUUubWQiIDI+L2Rldi9udWxsIHx8IHRydWUKaWYgW1sgLWYgIiRST09UL3BhdGNoX3Rvb2xzX1JFQURNRS5tZCIgXV07IHRoZW4KICAgIGxvZ19vayAiW+agueebruW9lV0gcGF0Y2hfdG9vbHNfUkVBRE1FLm1kIgogICAgKChTQVZFRF9DT1VOVCsrKSkgfHwgdHJ1ZQpmaQppZiBbWyAtZiAiJFNFQ09OREFSWS9wYXRjaF90b29sc19SRUFETUUubWQiIF1dOyB0aGVuCiAgICBsb2dfb2sgIlvkuoznuqflpIfku71dIHBhdGNoX3Rvb2xzX1JFQURNRS5tZCIKICAgICgoU0FWRURfQ09VTlQrKykpIHx8IHRydWUKZmkKZWNobyAiIgoKIyA9PT09PT09PT09IDUuIOS4iuS8oOacjeWKoSAmIOmFjee9ruaWh+S7tiAmIOS/neWtmOiEmuacrOacrOi6qyA9PT09PT09PT09CmxvZ19jeWFuICLjgJA1LzXjgJHovoXliqnlt6XlhbcgJiDphY3nva4iCnNhdmVfZmlsZSAiJFBSSU1BUlkvdXBsb2FkX3NlcnZlci5weSIgIiRST09UIiAi5qC555uu5b2VIgpzYXZlX2ZpbGUgIiRQUklNQVJZL3VwbG9hZF9zZXJ2ZXIucHkiICIkU0VDT05EQVJZIiAi5LqM57qn5aSH5Lu9IgpzYXZlX2ZpbGUgIiRQUklNQVJZL3BhdGNoX3Rvb2xzL2V4YW1wbGVfcGF0Y2hlcy5qc29uIiAiJFJPT1QiICLmoLnnm67lvZUiCnNhdmVfZmlsZSAiJFBSSU1BUlkvcGF0Y2hfdG9vbHMvZXhhbXBsZV9wYXRjaGVzLmpzb24iICIkU0VDT05EQVJZIiAi5LqM57qn5aSH5Lu9IgpzYXZlX2ZpbGUgIiRQUklNQVJZL3NhdmUuc2giICIkUk9PVCIgIuagueebruW9lSIKc2F2ZV9maWxlICIkUFJJTUFSWS9zYXZlLnNoIiAiJFNFQ09OREFSWSIgIuS6jOe6p+Wkh+S7vSIKc2F2ZV9maWxlICIkUFJJTUFSWS9zYXZlLnNoIiAiJFRFUlRJQVJZIiAi5LiJ57qn5aSH5Lu9IgplY2hvICIiCgojID09PT09PT09PT0g55Sf5oiQ5L+d5a2Y5riF5Y2VID09PT09PT09PT0KTUFOSUZFU1Q9IiRURVJUSUFSWS9TQVZFRF9NQU5JRkVTVC50eHQiCmNhdCA+ICIkTUFOSUZFU1QiIDw8IEVPRgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiDmoLjlv4PohJrmnKzmsLjkuYXkv53lrZjmuIXljZUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQrkv53lrZjml7bpl7Q6ICQoZGF0ZSAnKyVZLSVtLSVkICVIOiVNOiVTJykKCuWkh+S7veS9jee9rjoKICAxLiDkuLvlt6XlhbfljIU6ICRQUklNQVJZLwogIDIuIOagueebruW9lTogICAkUk9PVC8KICAzLiDkuoznuqflpIfku706ICRTRUNPTkRBUlkvCiAgNC4g5LiJ57qn5aSH5Lu9OiAkVEVSVElBUlkvCgrlt7Lkv53lrZjmlofku7YgKCRTQVZFRF9DT1VOVCDkuKopOgpFT0YKCiMg5YiX5Ye65omA5pyJ5L+d5a2Y55qE5paH5Lu2CmZpbmQgIiRURVJUSUFSWSIgLXR5cGUgZiAtbm90IC1uYW1lICJTQVZFRF9NQU5JRkVTVC50eHQiIHwgc29ydCA+PiAiJE1BTklGRVNUIgoKY2F0ID4+ICIkTUFOSUZFU1QiIDw8IEVPRgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQrmgaLlpI3mlrnms5U6CiAg5aaC5p6c5Li75bel5YW35YyF5Lii5aSx77yM5LuO5Lu75oSP5aSH5Lu955uu5b2V5oGi5aSNOgogIGNwIC93b3Jrc3BhY2Uvc2NyaXB0cy8qLnNoIC93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvc2NyaXB0cy8KICBjcCAvd29ya3NwYWNlL3NjcmlwdHMvKi5weSAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0LwogIGNwIC93b3Jrc3BhY2UvKi5zaCAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0LwogIGNwIC93b3Jrc3BhY2UvKi5weSAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0Lwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVPRgoKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKbG9nX29rICLmsLjkuYXkv53lrZjlrozmiJDvvIEiCmVjaG8gIiIKZWNobyAi5aSH5Lu95L2N572uOiIKZWNobyAiICAxLiDkuLvlt6XlhbfljIU6ICAkUFJJTUFSWS8iCmVjaG8gIiAgMi4g5qC555uu5b2VOiAgICAkUk9PVC8iCmVjaG8gIiAgMy4g5LqM57qn5aSH5Lu9OiAgJFNFQ09OREFSWS8iCmVjaG8gIiAgNC4g5LiJ57qn5aSH5Lu9OiAgJFRFUlRJQVJZLyIKZWNobyAiIgplY2hvICLlt7Lkv53lrZjmlofku7Y6ICRTQVZFRF9DT1VOVCDkuKoiCmVjaG8gIua4heWNleaWh+S7tjogICAkTUFOSUZFU1QiCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCgojIOaYvuekuuagueebruW9leeahOiEmuacrApsb2dfaW5mbyAiL3dvcmtzcGFjZS8g5qC555uu5b2V5b2T5YmN6ISa5pysOiIKbHMgLWxoIC93b3Jrc3BhY2UvKi5zaCAvd29ya3NwYWNlLyoucHkgMj4vZGV2L251bGwgfCBhd2sgJ3twcmludCAiICAiICQ5ICIgKCIgJDUgIikifScgfHwgZWNobyAiICAo5pegKSIK
B64EOF_save.sh
chmod +x "$DECODE_DIR/save.sh" 2>/dev/null

echo "恢复: setup.sh ..."
base64 -d << 'B64EOF_setup.sh' > "$DECODE_DIR/setup.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIHNldHVwLnNoIOKAlCBBbmRyb2lkIOmAhuWQkeW3peeoi+eOr+Wig+S4gOmUruWuieijhQojIOWuieijheaJgOaciemcgOimgeeahOW3peWFt+WSjOS+nei1lgpzZXQgLWV1byBwaXBlZmFpbAoKU0NSSVBUX0RJUj0iJChjZCAiJChkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIpIiAmJiBwd2QpIgpSRUQ9J1wwMzNbMDszMW0nCkdSRUVOPSdcMDMzWzA7MzJtJwpZRUxMT1c9J1wwMzNbMTszM20nCkJMVUU9J1wwMzNbMDszNG0nCk5DPSdcMDMzWzBtJwoKbG9nX2luZm8oKSAgeyBlY2hvIC1lICIke0JMVUV9W+S/oeaBr10ke05DfSAkKiI7IH0KbG9nX29rKCkgICAgeyBlY2hvIC1lICIke0dSRUVOfVvlrozmiJBdJHtOQ30gJCoiOyB9CmxvZ193YXJuKCkgIHsgZWNobyAtZSAiJHtZRUxMT1d9W+aPkOekul0ke05DfSAkKiI7IH0KbG9nX2Vycm9yKCkgeyBlY2hvIC1lICIke1JFRH1b6ZSZ6K+vXSR7TkN9ICQqIjsgfQoKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiIEFuZHJvaWQg6YCG5ZCR5bel56iL546v5aKD5LiA6ZSu5a6J6KOFIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvICIiCgojIDEuIOWuieijheezu+e7n+S+nei1lgpsb2dfaW5mbyAi5a6J6KOF57O757uf5L6d6LWWLi4uIgphcHQtZ2V0IHVwZGF0ZSAtcXEKYXB0LWdldCBpbnN0YWxsIC15IC1xcSB1bnppcCB3Z2V0IGN1cmwgcHl0aG9uMyBweXRob24zLXBpcCBiaW51dGlscyBmaWxlIDI+L2Rldi9udWxsIHx8IHsKICBsb2dfd2FybiAi6YOo5YiG57O757uf5L6d6LWW5a6J6KOF5aSx6LSl77yM5bCd6K+V57un57utLi4uIgp9CmxvZ19vayAi57O757uf5L6d6LWW5a6J6KOF5a6M5oiQIgoKIyAyLiDlronoo4UgamFkeApKQURYX0RJUj0iL29wdC9qYWR4IgppZiBbWyAtZiAiJEpBRFhfRElSL2Jpbi9qYWR4IiBdXTsgdGhlbgogIGxvZ19vayAiamFkeCDlt7Llronoo4U6ICRKQURYX0RJUi9iaW4vamFkeCIKZWxzZQogIGxvZ19pbmZvICLlronoo4UgamFkeC4uLiIKICBta2RpciAtcCAiJEpBRFhfRElSIgogIGNkIC90bXAKICB3Z2V0IC1xIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgaHR0cHM6Ly9naXRodWIuY29tL3NreWxvdC9qYWR4L3JlbGVhc2VzL2Rvd25sb2FkL3YxLjUuMS9qYWR4LTEuNS4xLnppcCAtTyBqYWR4LnppcAogIHVuemlwIC1xbyBqYWR4LnppcCAtZCAiJEpBRFhfRElSIgogIGNobW9kICt4ICIkSkFEWF9ESVIvYmluL2phZHgiCiAgIyDliJvlu7rova/pk77mjqUKICBsbiAtc2YgIiRKQURYX0RJUi9iaW4vamFkeCIgL3Vzci9sb2NhbC9iaW4vamFkeCAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgbG9nX29rICJqYWR4IOWuieijheWujOaIkCIKZmkKCiMgMy4g5a6J6KOFIGFwa3Rvb2wKaWYgY29tbWFuZCAtdiBhcGt0b29sICY+L2Rldi9udWxsOyB0aGVuCiAgbG9nX29rICJhcGt0b29sIOW3suWuieijhSIKZWxzZQogIGxvZ19pbmZvICLlronoo4UgYXBrdG9vbC4uLiIKICBjZCAvdG1wCiAgd2dldCAtcSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaUJvdFBlYWNoZXMvQXBrdG9vbC9tYXN0ZXIvc2NyaXB0cy9saW51eC9hcGt0b29sIC1PIC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wKICB3Z2V0IC1xIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9pQm90UGVhY2hlcy9hcGt0b29sL2Rvd25sb2Fkcy9hcGt0b29sXzIuOS4zLmphciAtTyAvdXNyL2xvY2FsL2Jpbi9hcGt0b29sLmphcgogIGNobW9kICt4IC91c3IvbG9jYWwvYmluL2Fwa3Rvb2wKICBsb2dfb2sgImFwa3Rvb2wg5a6J6KOF5a6M5oiQIgpmaQoKIyA0LiDlronoo4UgUHl0aG9uIOS+nei1lgpsb2dfaW5mbyAi5a6J6KOFIFB5dGhvbiDkvp3otZYuLi4iCnBpcCBpbnN0YWxsIC1xIC0tYnJlYWstc3lzdGVtLXBhY2thZ2VzIGZsYXNrIDI+L2Rldi9udWxsIHx8IHBpcCBpbnN0YWxsIC1xIGZsYXNrIDI+L2Rldi9udWxsIHx8IHRydWUKbG9nX29rICJQeXRob24g5L6d6LWW5a6J6KOF5a6M5oiQIgoKIyA1LiDorr7nva7njq/looPlj5jph48KZWNobyAiIgpsb2dfaW5mbyAi6YWN572u546v5aKDLi4uIgp7CiAgZWNobyAiIgogIGVjaG8gIiMgQW5kcm9pZCDpgIblkJHlt6XnqIvnjq/looMiCiAgZWNobyAiZXhwb3J0IEpBRFhfSE9NRT0kSkFEWF9ESVIiCiAgZWNobyAiZXhwb3J0IFBBVEg9XCRKQURYX0hPTUUvYmluOlwkUEFUSCIKfSA+PiAvZXRjL3Byb2ZpbGUuZC9yZXZlcnNlLWVuZ2luZWVyaW5nLnNoIDI+L2Rldi9udWxsIHx8IHRydWUKCiMgNi4g5Yib5bu66ISa5pys6L2v6ZO+5o6lClNDUklQVFNfRElSPSIkU0NSSVBUX0RJUi9zY3JpcHRzIgpta2RpciAtcCAiJFNDUklQVFNfRElSIgpmb3Igc2NyaXB0IGluIGF1dG8tcmV2ZXJzZS5zaCBkZWNvbXBpbGUuc2ggZmluZC1hcGktY2FsbHMuc2ggY2hlY2stZGVwcy5zaCBpbnN0YWxsLWRlcC5zaCBkZXRlY3Qtc2hlbGwuc2ggZmluZC1zZWN1cml0eS1wYXR0ZXJucy5zaCBhbmFseXplLWZsdXR0ZXIuc2ggZ2VuZXJhdGUtZnJpZGEtc2NyaXB0cy5zaCBkZXRlY3QtZnJhbWV3b3JrLnNoOyBkbwogIGlmIFtbIC1mICIkU0NSSVBUX0RJUi8kc2NyaXB0IiBdXSAmJiBbWyAhIC1mICIkU0NSSVBUU19ESVIvJHNjcmlwdCIgXV07IHRoZW4KICAgIGxuIC1zZiAiJFNDUklQVF9ESVIvJHNjcmlwdCIgIiRTQ1JJUFRTX0RJUi8kc2NyaXB0IiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgZmkKZG9uZQoKZWNobyAiIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Igpsb2dfb2sgIueOr+Wig+WuieijheWujOaIkO+8gSIKZWNobyAiIgplY2hvICLlj6/nlKjlt6Xlhbc6IgplY2hvICIgIGphZHggICAgICDigJQgQVBLIOWPjee8luivkSIKZWNobyAiICBhcGt0b29sICAg4oCUIEFQSyDop6PljIUv5omT5YyFIgplY2hvICIgIHB5dGhvbjMgICDigJQg6L6F5Yqp6ISa5pysIgplY2hvICIiCmVjaG8gIuS9v+eUqOaWueazlToiCmVjaG8gIiAgYmFzaCAkU0NSSVBUX0RJUi9sYXVuY2hlci5zaCA8YXBwLmFwaz4iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCg==
B64EOF_setup.sh
chmod +x "$DECODE_DIR/setup.sh" 2>/dev/null

echo "恢复: ultimate_fallback.sh ..."
base64 -d << 'B64EOF_ultimate_fallback.sh' > "$DECODE_DIR/ultimate_fallback.sh"
IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOe7iOaegeWFnOW6leiEmuacrCDigJQg5omA5pyJ6YCG5ZCR5bel56iL6ISa5pys6Ieq6Kej5Y6L5YyFCiMgIOeUqOmAlDog5Y2z5L2/5omA5pyJ5aSW6YOo6ZO+5o6lKG1waW1nL3Bhc3RlKeWFqOmDqOWkseaViO+8jOatpOiEmuacrOS5n+iDveaBouWkjeWFqOmDqOiEmuacrAojICDnlKjms5U6IOWkjeWItuatpOiEmuacrOWGheWuueWIsOaWsOeql+WPo+e7iOerr++8jOeymOi0tOaJp+ihjOWNs+WPrwojICDlpKflsI86IH4zNzhLQiBiYXNlNjTnvJbnoIHvvIzljIXlkKsyOeS4quiEmuacrAojICDml6XmnJ86IDIwMjYtMDctMTUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpERUNPREVfRElSPSIkezE6LS93b3Jrc3BhY2V9Igpta2RpciAtcCAiJERFQ09ERV9ESVIiCgojID09PSBBUEvliIbmnpDlmaggPT09CmVjaG8gIuaBouWkjTogYXBrX2FuYWx5emVyLnB5IC4uLiIKYmFzZTY0IC1kIDw8ICdCNjRFT0YnID4gIiRERUNPREVfRElSL2Fwa19hbmFseXplci5weSIKQjY0X0FQS19BTkFMWVpFUl9QTEFDRUhPTERFUgpCNjRFT0YKY2htb2QgK3ggIiRERUNPREVfRElSL2Fwa19hbmFseXplci5weSIgMj4vZGV2L251bGwKCiMgPT09IGF1dG8tcmV2ZXJzZS5zaCA9PT0KZWNobyAi5oGi5aSNOiBhdXRvLXJldmVyc2Uuc2ggLi4uIgpiYXNlNjQgLWQgPDwgJ0I2NEVPRicgPiAiJERFQ09ERV9ESVIvYXV0by1yZXZlcnNlLnNoIgpCNjRfQVVUT19SRVZFUlNFX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvYXV0by1yZXZlcnNlLnNoIgoKIyA9PT0gYXV0b19zaWduX3BhdGNoLnB5ID09PQplY2hvICLmgaLlpI06IGF1dG9fc2lnbl9wYXRjaC5weSAuLi4iCmJhc2U2NCAtZCA8PCAnQjY0RU9GJyA+ICIkREVDT0RFX0RJUi9hdXRvX3NpZ25fcGF0Y2gucHkiCkI2NF9BVVRPX1NJR05fUEFUQ0hfUExBQ0VIT0xERVIKQjY0RU9GCmNobW9kICt4ICIkREVDT0RFX0RJUi9hdXRvX3NpZ25fcGF0Y2gucHkiIDI+L2Rldi9udWxsCgojID09PSBhcGtfc2lnbl9wYXRjaC5weSA9PT0KZWNobyAi5oGi5aSNOiBhcGtfc2lnbl9wYXRjaC5weSAuLi4iCmJhc2U2NCAtZCA8PCAnQjY0RU9GJyA+ICIkREVDT0RFX0RJUi9hcGtfc2lnbl9wYXRjaC5weSIKQjY0X0FQS19TSUdOX1BBVENIX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvYXBrX3NpZ25fcGF0Y2gucHkiIDI+L2Rldi9udWxsCgojID09PSBiaW5hcnlfcGF0Y2gucHkgPT09CmVjaG8gIuaBouWkjTogYmluYXJ5X3BhdGNoLnB5IC4uLiIKYmFzZTY0IC1kIDw8ICdCNjRFT0YnID4gIiRERUNPREVfRElSL2JpbmFyeV9wYXRjaC5weSIKQjY0X0JJTkFSWV9QQVRDSF9QTEFDRUhPTERFUgpCNjRFT0YKY2htb2QgK3ggIiRERUNPREVfRElSL2JpbmFyeV9wYXRjaC5weSIgMj4vZGV2L251bGwKCiMgPT09IHVwbG9hZF90b19tcGltZy5weSA9PT0KZWNobyAi5oGi5aSNOiB1cGxvYWRfdG9fbXBpbWcucHkgLi4uIgpiYXNlNjQgLWQgPDwgJ0I2NEVPRicgPiAiJERFQ09ERV9ESVIvdXBsb2FkX3RvX21waW1nLnB5IgpCNjRfVVBMT0FEX01QSU1HX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvdXBsb2FkX3RvX21waW1nLnB5IiAyPi9kZXYvbnVsbAoKIyA9PT0gZGV4X3ZpcF9odW50ZXIucHkgPT09CmVjaG8gIuaBouWkjTogZGV4X3ZpcF9odW50ZXIucHkgLi4uIgpiYXNlNjQgLWQgPDwgJ0I2NEVPRicgPiAiJERFQ09ERV9ESVIvZGV4X3ZpcF9odW50ZXIucHkiCkI2NF9ERVhfVklQX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvZGV4X3ZpcF9odW50ZXIucHkiIDI+L2Rldi9udWxsCgojID09PSBvbmVfY2xpY2tfc2F2ZS5zaCA9PT0KZWNobyAi5oGi5aSNOiBvbmVfY2xpY2tfc2F2ZS5zaCAuLi4iCmJhc2U2NCAtZCA8PCAnQjY0RU9GJyA+ICIkREVDT0RFX0RJUi9vbmVfY2xpY2tfc2F2ZS5zaCIKQjY0X09ORV9DTElDS19TQVZFX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvb25lX2NsaWNrX3NhdmUuc2giCgojID09PSBvbmVfY2xpY2tfcmVzdG9yZS5zaCA9PT0KZWNobyAi5oGi5aSNOiBvbmVfY2xpY2tfcmVzdG9yZS5zaCAuLi4iCmJhc2U2NCAtZCA8PCAnQjY0RU9GJyA+ICIkREVDT0RFX0RJUi9vbmVfY2xpY2tfcmVzdG9yZS5zaCIKQjY0X09ORV9DTElDS19SRVNUT1JFX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvb25lX2NsaWNrX3Jlc3RvcmUuc2giCgojID09PSBpbml0X3JlX2Vudi5zaCA9PT0KZWNobyAi5oGi5aSNOiBpbml0X3JlX2Vudi5zaCAuLi4iCmJhc2U2NCAtZCA8PCAnQjY0RU9GJyA+ICIkREVDT0RFX0RJUi9pbml0X3JlX2Vudi5zaCIKQjY0X0lOSVRfRU5WX1BMQUNFSE9MREVSCkI2NEVPRgpjaG1vZCAreCAiJERFQ09ERV9ESVIvaW5pdF9yZV9lbnYuc2giCm1rZGlyIC1wICIkREVDT0RFX0RJUi9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdCIKY3AgIiRERUNPREVfRElSL2luaXRfcmVfZW52LnNoIiAiJERFQ09ERV9ESVIvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvIgoKIyA9PT0gcmVzdG9yZV9hbmRyb2lkX3JlX2Vudi5zaCA9PT0KZWNobyAi5oGi5aSNOiByZXN0b3JlX2FuZHJvaWRfcmVfZW52LnNoIC4uLiIKYmFzZTY0IC1kIDw8ICdCNjRFT0YnID4gIiRERUNPREVfRElSL3Jlc3RvcmVfYW5kcm9pZF9yZV9lbnYuc2giCkI2NF9SRVNUT1JFX0VOVl9QTEFDRUhPTERFUgpCNjRFT0YKY2htb2QgK3ggIiRERUNPREVfRElSL3Jlc3RvcmVfYW5kcm9pZF9yZV9lbnYuc2giCmNwICIkREVDT0RFX0RJUi9yZXN0b3JlX2FuZHJvaWRfcmVfZW52LnNoIiAiJERFQ09ERV9ESVIvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvIgoKIyA9PT0g5YW25L2Z6ISa5pysID09PQplY2hvICLmgaLlpI06IOWFtuS9mXNoZWxs6ISa5pysLi4uIgpSRVNUT1JFX1NDUklQVFM9ImFuYWx5emUtZmx1dHRlci5zaCBiYWNrdXAuc2ggY2hlY2stZGVwcy5zaCBkZWNvbXBpbGUuc2ggZGV0ZWN0LWZyYW1ld29yay5zaCBkZXRlY3Qtc2hlbGwuc2ggZmluZC1hcGktY2FsbHMuc2ggZmluZC1zZWN1cml0eS1wYXR0ZXJucy5zaCBnZW5lcmF0ZS1mcmlkYS1zY3JpcHRzLnNoIGluc3RhbGwtZGVwLnNoIGxhdW5jaGVyLnNoIHF1aWNrLWFuYWx5emUtZ3Jhc3MtbWguc2ggc2F2ZS5zaCBzZXR1cC5zaCB1cGxvYWRfc2VydmVyLnB5IgoKZm9yIHNuYW1lIGluICRSRVNUT1JFX1NDUklQVFM7IGRvCiAgQjY0X0RBVEE9JChiYXNlNjQgLXcwICIkc25hbWUiIDI+L2Rldi9udWxsIHx8IGVjaG8gIiIpCiAgaWYgWyAtbiAiJEI2NF9EQVRBIiBdICYmIFsgJHsjQjY0X0RBVEF9IC1ndCAxMCBdOyB0aGVuCiAgICBlY2hvICLmgaLlpI06ICRzbmFtZSAuLi4iCiAgICBiYXNlNjQgLWQgPDwgQjY0RU9GID4gIiRERUNPREVfRElSLyRzbmFtZSIKJEI2NF9EQVRBCkI2NEVPRgogICAgY2htb2QgK3ggIiRERUNPREVfRElSLyRzbmFtZSIgMj4vZGV2L251bGwKICBmaQpkb25lCgplY2hvICIiCmVjaG8gIuWFqOmDqOiEmuacrOaBouWkjeWujOaIkCEiCmVjaG8gIuebruW9lTogJERFQ09ERV9ESVIiCg==
B64EOF_ultimate_fallback.sh
chmod +x "$DECODE_DIR/ultimate_fallback.sh" 2>/dev/null

echo "恢复: apk_analyzer.py ..."
base64 -d << 'B64EOF_apk_analyzer.py' > "$DECODE_DIR/apk_analyzer.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQVBLIOW/q+mAn+WIhuaekOiEmuacrCB2My4wCueUqOazlTogcHl0aG9uMyBhcGtfYW5hbHl6ZXIucHkgPGFwa+aWh+S7tui3r+W+hD4gW+i+k+WHuuaWh+S7tui3r+W+hF0K56S65L6LOiBweXRob24zIGFwa19hbmFseXplci5weSBhcHAuYXBrIHJlcG9ydC50eHQKICAgICAgcHl0aG9uMyBhcGtfYW5hbHl6ZXIucHkgYXBwLmFwayAgKOm7mOiupOi+k+WHuuWIsOe7iOerrykKIArlip/og706CiAgLSDop6PmnpAgQW5kcm9pZE1hbmlmZXN0LnhtbCAo5L2/55SoYW5kcm9ndWFyZCkKICAtIOaPkOWPluadg+mZkOOAgUFjdGl2aXR544CBU2VydmljZeOAgVJlY2VpdmVyCiAgLSDmiavmj4/miYDmnIkgREVYIOaWh+S7tuS4reeahCBVUkzjgIHln5/lkI3jgIFBUEkg6Lev5b6ECiAgLSDor4bliKvnrKzkuInmlrkgU0RLICg3MCsg6KeE5YiZKQogIC0g5qOA5rWL5a6J5YWo6aOO6ZmpCiAgLSDliIbmnpDor4Hkuabkv6Hmga8KICAtIOe7n+iuoeaWh+S7tuaehOaIkAogIC0g5Yqg5Zu65qOA5rWLCiAK5L6d6LWWOiBwaXAgaW5zdGFsbCBhbmRyb2d1YXJkCiIiIgogCmltcG9ydCBvcywgc3lzLCByZSwgaGFzaGxpYiwgdGltZSwgbG9nZ2luZwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIOWxj+iUvWFuZHJvZ3VhcmTnmoTml6Xlv5flmarpn7MgKHN0ZGVycumHjeWumuWQkSkKaW1wb3J0IGlvLCBjb250ZXh0bGliCl9zdGRlcnJfc3VwcHJlc3MgPSBpby5TdHJpbmdJTygpCmxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLkNSSVRJQ0FMKQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyDpopzoibIKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KY2xhc3MgQzoKICAgIFI9J1wwMzNbOTFtJzsgRz0nXDAzM1s5Mm0nOyBZPSdcMDMzWzkzbSc7IEI9J1wwMzNbOTRtJwogICAgRD0nXDAzM1s5MG0nOyBCT0xEPSdcMDMzWzFtJzsgRU5EPSdcMDMzWzBtJwpkZWYgcmVkKHMpOiByZXR1cm4gZiJ7Qy5SfXtzfXtDLkVORH0iCmRlZiBncmVlbihzKTogcmV0dXJuIGYie0MuR317c317Qy5FTkR9IgpkZWYgeWVsbG93KHMpOiByZXR1cm4gZiJ7Qy5ZfXtzfXtDLkVORH0iCmRlZiBibHVlKHMpOiByZXR1cm4gZiJ7Qy5CfXtzfXtDLkVORH0iCmRlZiBib2xkKHMpOiByZXR1cm4gZiJ7Qy5CT0xEfXtzfXtDLkVORH0iCmRlZiBkaW0ocyk6IHJldHVybiBmIntDLkR9e3N9e0MuRU5EfSIKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgU0RL6KeE5YiZCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClNES19SVUxFUyA9IFsKICAgIChyJ2NvbS9nb29nbGUvYW5kcm9pZC9leG9wbGF5ZXInLCAnRXhvUGxheWVyJywgJ+aSreaUvuWZqCcpLAogICAgKHInY29tL2dvb2dsZS9hbmRyb2lkL2V4b3BsYXllcjInLCAnRXhvUGxheWVyMicsICfmkq3mlL7lmagnKSwKICAgIChyJ3R2L2Rhbm1ha3UvaWprJywgJ0lqa1BsYXllcicsICfmkq3mlL7lmagnKSwKICAgIChyJ2NvbS9zaHV5dS9nc3l2aWRlb3BsYXllcicsICdHU1lWaWRlb1BsYXllcicsICfmkq3mlL7lmagnKSwKICAgIChyJ2NvbS9kYW5pa3VsYS92aWRlb2NhY2hlJywgJ0FuZHJvaWRWaWRlb0NhY2hlJywgJ+e8k+WtmCcpLAogICAgKHInc2h1eXUvY29tL2FuZHJvaWR2aWRlb2NhY2hlJywgJ0dTWVZpZGVvQ2FjaGUnLCAn57yT5a2YJyksCiAgICAociduZXQvYnV0dGVyZmx5dHYvcnRtcCcsICdSVE1QIENsaWVudCcsICfmjqjmtYEnKSwKICAgIChyJ2NvbS9idW1wdGVjaC9nbGlkZScsICdHbGlkZScsICflm77niYcnKSwKICAgIChyJ2NvbS9zcXVhcmV1cC9waWNhc3NvJywgJ1BpY2Fzc28nLCAn5Zu+54mHJyksCiAgICAocidjb20vZmFjZWJvb2svZnJlc2NvJywgJ0ZyZXNjbycsICflm77niYcnKSwKICAgIChyJ3BsL2Ryb2lkc29ucm9pZHMvZ2lmJywgJ2FuZHJvaWQtZ2lmLWRyYXdhYmxlJywgJ+WbvueJhycpLAogICAgKHInanAvd2FzYWJlZWYvZ2xpZGUnLCAnR2xpZGVUcmFuc2Zvcm1hdGlvbnMnLCAn5Zu+54mHJyksCiAgICAocidjb20veWFsYW50aXMvdWNyb3AnLCAnVUNyb3AnLCAn5Zu+54mHJyksCiAgICAocidjb20vbHVjay9waWN0dXJlJywgJ1BpY3R1cmVTZWxlY3RvcicsICflm77niYcnKSwKICAgIChyJ2NvbS9qdXN0L2FnZW50d2ViJywgJ0FnZW50V2ViJywgJ+a1j+iniOWZqCcpLAogICAgKHInY29tL3RlbmNlbnQvc210dC9zZGsnLCAnWDUgV2ViVmlldycsICfmtY/op4jlmagnKSwKICAgIChyJ29raHR0cDMvJywgJ09rSHR0cDMnLCAn572R57ucJyksCiAgICAocidva2lvLycsICdPa2lvJywgJ+e9kee7nCcpLAogICAgKHIncmV0cm9maXQyLycsICdSZXRyb2ZpdDInLCAn572R57ucJyksCiAgICAocidpby9yZWFjdGl2ZXgnLCAnUnhKYXZhJywgJ+ahhuaeticpLAogICAgKHInY29tL2dvb2dsZS9nc29uJywgJ0dzb24nLCAn5bqP5YiX5YyWJyksCiAgICAocidjb20vYWxpYmFiYS9mYXN0anNvbicsICdGYXN0SlNPTicsICfluo/liJfljJYnKSwKICAgIChyJ29yZy9ncmVlbnJvYm90L2dyZWVuZGFvJywgJ0dyZWVuREFPJywgJ+aVsOaNruW6kycpLAogICAgKHInb3JnL2dyZWVucm9ib3QvZXZlbnRidXMnLCAnRXZlbnRCdXMnLCAn5qGG5p62JyksCiAgICAocidjb20vdW1lbmcvJywgJ+WPi+ebnycsICfnu5/orqEnKSwKICAgIChyJ2NvbS90ZW5jZW50L21tL29wZW5zZGsnLCAn5b6u5L+hU0RLJywgJ+ekvuS6pCcpLAogICAgKHInY29tL3RlbmNlbnQvdGF1dGgnLCAnUVEgU0RLJywgJ+ekvuS6pCcpLAogICAgKHInY29tL2FsaXBheS9zZGsnLCAn5pSv5LuY5a6dU0RLJywgJ+aUr+S7mCcpLAogICAgKHInY29tL3RlbmNlbnQvYnVnbHknLCAnQnVnbHknLCAn5bSp5rqD5LiK5oqlJyksCiAgICAocidjb20vY3Jhc2hseXRpY3MnLCAnQ3Jhc2hseXRpY3MnLCAn5bSp5rqD5LiK5oqlJyksCiAgICAocidjb20vYnl0ZWRhbmNlL3Nkay9vcGVuYWRzZGsnLCAn56m/5bGx55Sy5bm/5ZGKJywgJ+W5v+WRiicpLAogICAgKHInY29tL3NzL2FuZHJvaWQvc29jaWFsYmFzZScsICfnqb/lsbHnlLLlub/lkYonLCAn5bm/5ZGKJyksCiAgICAocidjb20vdGVuY2VudC9xcXNkaycsICfkvJjph4/msYflub/lkYonLCAn5bm/5ZGKJyksCiAgICAocidjb20vZ29vZ2xlL2FuZHJvaWQvZ21zL2FkcycsICdBZE1vYicsICflub/lkYonKSwKICAgIChyJ2NvbS9hcHBsb3ZpbicsICdBcHBMb3ZpbicsICflub/lkYonKSwKICAgIChyJ2NvbS9pcm9uc291cmNlJywgJ2lyb25Tb3VyY2UnLCAn5bm/5ZGKJyksCiAgICAocidjb20vdW5pdHkzZC9hZHMnLCAnVW5pdHkgQWRzJywgJ+W5v+WRiicpLAogICAgKHInY29tL2NoYXJ0Ym9vc3QnLCAnQ2hhcnRib29zdCcsICflub/lkYonKSwKICAgIChyJ2NvbS9mbHVycnkvYW5kcm9pZCcsICdGbHVycnkgQW5hbHl0aWNzJywgJ+e7n+iuoScpLAogICAgKHInY29tL2ZsdXJyeS9zZGsnLCAnRmx1cnJ5IEFuYWx5dGljcycsICfnu5/orqEnKSwKICAgIChyJ2NvbS9nb29nbGUvenhpbmcnLCAnWlhpbmcnLCAn5bel5YW3JyksCiAgICAocidjbi9iaW5nb29nb2xhcHBsZS9zd2lwZWJhY2tsYXlvdXQnLCAnU3dpcGVCYWNrTGF5b3V0JywgJ1VJJyksCiAgICAocidjb20vc2N3YW5nL3NtYXJ0cmVmcmVzaCcsICdTbWFydFJlZnJlc2hMYXlvdXQnLCAnVUknKSwKICAgIChyJ2NvbS9jaGFkL2xpYnJhcnkvYWRhcHRlcicsICdCUlZBSCcsICdVSScpLAogICAgKHInY29tL2JsYW5rai91dGlsY29kZScsICdBbmRyb2lkVXRpbENvZGUnLCAn5bel5YW3JyksCiAgICAocidjb20vdGVuY2VudC92YXNkb2xseScsICdWYXNEb2xseScsICfmiZPljIUnKSwKICAgIChyJ2NvbS9nb29nbGUvYW5kcm9pZC9tYXRlcmlhbCcsICdNYXRlcmlhbCBEZXNpZ24nLCAnVUknKSwKICAgIChyJ2NvbS9hbmRyb2lkL2JpbGxpbmdjbGllbnQnLCAnR29vZ2xlIFBsYXkgQmlsbGluZycsICfmlK/ku5gnKSwKICAgIChyJ2NvbS9uZXRlYXNlL25pbScsICfnvZHmmJPkupHkv6FJTScsICfpgJrkv6EnKSwKICAgIChyJ2NvbS90ZW5jZW50L2ltc2RrJywgJ+iFvuiur+S6kUlNJywgJ+mAmuS/oScpLAogICAgKHInY29tL2dldHVpL2d0JywgJ+S4quaOqCcsICfmjqjpgIEnKSwKICAgIChyJ2NuL2pwdXNoL2FuZHJvaWQnLCAn5p6B5YWJ5o6o6YCBJywgJ+aOqOmAgScpLAogICAgKHInY29tL3hpYW9taS9taXB1c2gnLCAn5bCP57Gz5o6o6YCBJywgJ+aOqOmAgScpLAogICAgKHInY29tL2h1YXdlaS9obXMvcHVzaCcsICfljY7kuLrmjqjpgIEnLCAn5o6o6YCBJyksCiAgICAocidjb20vdml2by9wdXNoJywgJ3Zpdm/mjqjpgIEnLCAn5o6o6YCBJyksCiAgICAocidjb20vb3Bwby9wdXNoJywgJ09QUE/mjqjpgIEnLCAn5o6o6YCBJyksCiAgICAocidjb20vZmFjZWJvb2svcmVhY3QnLCAnUmVhY3QgTmF0aXZlJywgJ+ahhuaeticpLAogICAgKHInaW8vZmx1dHRlcicsICdGbHV0dGVyJywgJ+ahhuaeticpLAogICAgKHInY29tL3VuaXR5M2QvcGxheWVyJywgJ1VuaXR5JywgJ+a4uOaIj+W8leaTjicpLAogICAgKHInb3JnL2NvY29zMmR4L2xpYicsICdDb2NvczJkLXgnLCAn5ri45oiP5byV5pOOJyksCiAgICAocidmcmVlbWFya2VyLycsICdGcmVlTWFya2VyJywgJ+aooeadvycpLAogICAgKHInY29tL2JpZ2tvby9waWNrZXJ2aWV3JywgJ1BpY2tlclZpZXcnLCAnVUknKSwKICAgIChyJ2NvbS9jb250cmFyeXdpbmQnLCAnV2hlZWxWaWV3JywgJ1VJJyksCiAgICAocidjb20vbGloYW5nJywgJ1NoYWRvd0xheW91dCcsICdVSScpLAogICAgKHInY29tL3lhbnpoZW5qaWUvcmVjeWNsZXJ2aWV3JywgJ1N3aXBlUmVjeWNsZXJWaWV3JywgJ1VJJyksCiAgICAocidjb20vamFja2FuZHBoYW50b20nLCAnQ2lyY3VsYXJJbWFnZVZpZXcnLCAnVUknKSwKICAgIChyJ2NvbS90cmFuc2l0aW9uc2V2ZXJ5d2hlcmUnLCAnVHJhbnNpdGlvbnNFdmVyeXdoZXJlJywgJ1VJJyksCiAgICAocidjb20vYWxpYmFiYS9hcm91dGVyJywgJ0FSb3V0ZXInLCAn6Lev55SxJyksCiAgICAocidjb20vaXdnYW5nL2NvdW50ZG93bnZpZXcnLCAnQ291bnRkb3duVmlldycsICdVSScpLAogICAgKHInY29tL2FuZHJvaWRrdW4veHRhYmxheW91dCcsICdYVGFiTGF5b3V0JywgJ1VJJyksCiAgICAocidtb2UvY29kZWVzdC9lbnZpZXdzJywgJ0VuVmlld3MnLCAnVUknKSwKICAgIChyJ29yZy9kc3EvbGlicmFyeScsICdEU1EgTGlicmFyeScsICdVSScpLAogICAgKHInY29tL2FuZHJvaWRMaWIvZXZlbnRyZXBvcnRlcicsICdFdmVudFJlcG9ydGVyJywgJ+e7n+iuoScpLAogICAgKHIna290bGlueC9jb3JvdXRpbmVzJywgJ0tvdGxpbuWNj+eoiycsICfmoYbmnrYnKSwKICAgIChyJ2NvbS9nb29nbGUvYW5kcm9pZC9nbXMnLCAnR29vZ2xlIFBsYXkgU2VydmljZXMnLCAn5pyN5YqhJyksCiAgICAocidjb20vZ29vZ2xlL2ZpcmViYXNlJywgJ0ZpcmViYXNlJywgJ+acjeWKoScpLAogICAgKHInY29tL2FsaWJhYmEvc2RrL2FsaWJhYmEnLCAn6Zi/6YeM55m+5bedJywgJ+eUteWVhicpLAogICAgKHInY29tL3Rhb2Jhby9zb3BoaXgnLCAnU29waGl454Ot5L+u5aSNJywgJ+eDreS/ruWkjScpLAogICAgKHInY29tL3RlbmNlbnQvdGlua2VyJywgJ1RpbmtlcueDreS/ruWkjScsICfng63kv67lpI0nKSwKXQogClBBQ0tFUl9SVUxFUyA9IFsKICAgIChyJ2NvbS9zZWNuZW8vJywgJ+aihuaihuWKoOWbuicpLCAocidjb20vYmFuZ2NsZS8nLCAn5qKG5qKG5Yqg5Zu6JyksCiAgICAocidjb20vc2VjdXJlLycsICflqJzov6bliqDlm7onKSwgKHInY29tL3FpaG9vL3V0aWwvJywgJzM2MOWKoOWbuicpLAogICAgKHInY29tL2ppYWd1LycsICfniLHliqDlr4YnKSwgKHInY29tL3RlbmNlbnQvU3R1YlNoZWxsLycsICfohb7orq/kuZDlm7onKSwKICAgIChyJ2NvbS9hbGliYWJhL3dpcmVsZXNzL3NlY3VyaXR5LycsICfpmL/ph4zogZrlronlhagnKSwKICAgIChyJ2NvbS9iYWlkdS9wcm90ZWN0LycsICfnmb7luqbliqDlm7onKSwgKHInY29tL2lqaWFtaS8nLCAn54ix5Yqg5a+GJyksCiAgICAocidzYW5nZm9yLycsICfmt7Hkv6HmnI0nKSwgKHInY29tL3dhbmdtYWp1bi8nLCAn6YCa5LuY55u+JyksCl0KCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgREVY5a2X56ym5Liy5o+Q5Y+WCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRlZiBleHRyYWN0X2RleF9zdHJpbmdzKGRhdGEsIG1pbl9sZW49NSwgbWF4X3N0cmluZ3M9NTAwMDApOgogICAgaW1wb3J0IHN0cnVjdAogICAgc3RyaW5ncyA9IFtdCiAgICBpZiBsZW4oZGF0YSkgPCAxMTIgb3Igbm90IGRhdGFbOjRdIGluIChiJ2RleFxuJywgYidjZGV4Jyk6CiAgICAgICAgcmV0dXJuIHN0cmluZ3MKICAgIHRyeToKICAgICAgICBzdHJfY291bnQgPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJJywgZGF0YSwgNTYpWzBdCiAgICAgICAgc3RyX29mZiA9IHN0cnVjdC51bnBhY2tfZnJvbSgnPEknLCBkYXRhLCA2MClbMF0KICAgICAgICBpZiBzdHJfY291bnQgPiA1MDAwMDAgb3Igc3RyX29mZiArIHN0cl9jb3VudCAqIDQgPiBsZW4oZGF0YSk6CiAgICAgICAgICAgIHJldHVybiBzdHJpbmdzCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKHN0cl9jb3VudCwgbWF4X3N0cmluZ3MpKToKICAgICAgICAgICAgcCA9IHN0cl9vZmYgKyBpICogNAogICAgICAgICAgICBpZiBwICsgNCA+IGxlbihkYXRhKTogYnJlYWsKICAgICAgICAgICAgc19vZmYgPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJJywgZGF0YSwgcClbMF0KICAgICAgICAgICAgaWYgc19vZmYgPD0gMCBvciBzX29mZiA+PSBsZW4oZGF0YSk6IGNvbnRpbnVlCiAgICAgICAgICAgICMgVUxFQjEyOCBsZW5ndGgKICAgICAgICAgICAgcG9zLCBzaXplLCBzaGlmdCA9IHNfb2ZmLCAwLCAwCiAgICAgICAgICAgIHdoaWxlIHBvcyA8IGxlbihkYXRhKToKICAgICAgICAgICAgICAgIGIgPSBkYXRhW3Bvc107IHBvcyArPSAxCiAgICAgICAgICAgICAgICBzaXplIHw9IChiICYgMHg3RikgPDwgc2hpZnQ7IHNoaWZ0ICs9IDcKICAgICAgICAgICAgICAgIGlmIChiICYgMHg4MCkgPT0gMDogYnJlYWsKICAgICAgICAgICAgaWYgc2l6ZSA8PSAwIG9yIHNpemUgPiAyMDAwIG9yIHBvcyArIHNpemUgPiBsZW4oZGF0YSk6IGNvbnRpbnVlCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHMgPSBkYXRhW3Bvczpwb3Mrc2l6ZV0uc3BsaXQoYidceDAwJylbMF0uZGVjb2RlKCd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpCiAgICAgICAgICAgICAgICBpZiBsZW4ocykgPj0gbWluX2xlbiBhbmQgcy5pc3ByaW50YWJsZSgpOgogICAgICAgICAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKHMpCiAgICAgICAgICAgIGV4Y2VwdDogY29udGludWUKICAgIGV4Y2VwdDogcGFzcwogICAgcmV0dXJuIHN0cmluZ3MKCmRlZiBzY2FuX3N0cmluZ3Moc3RyaW5ncyk6CiAgICByZXN1bHRzID0geyd1cmxzJzogQ291bnRlcigpLCAnYXBpX3BhdGhzJzogQ291bnRlcigpLCAncGFja2FnZXMnOiBDb3VudGVyKCksCiAgICAgICAgICAgICAgICdpcF9hZGRyZXNzZXMnOiBDb3VudGVyKCksICdzdXNwaWNpb3VzJzogQ291bnRlcigpfQogICAgdXJsX3JlID0gcmUuY29tcGlsZShyJyhodHRwcz86Ly9bXlxzIlwnPD5cXF17NSwyMDB9KScpCiAgICBhcGlfcmUgPSByZS5jb21waWxlKHInKC9hcGkvW15ccyJcJzw+XFxdezMsMTAwfSknKQogICAgcGtnX3JlID0gcmUuY29tcGlsZShyJyg/OlthLXpdW2EtejAtOV0qKD86L1thLXpdW2EtejAtOV0qKXsyLH1bYS16QS1aMC05JF0qKScpCiAgICBpcF9yZSA9IHJlLmNvbXBpbGUocidcYig/Oig/OjI1WzAtNV18MlswLTRdXGR8WzAxXT9cZFxkPylcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfFswMV0/XGRcZD8pXGInKQogICAgc3VzX3JlID0gcmUuY29tcGlsZShyJyg/OnBhc3N3b3JkfHNlY3JldHxhcGlbXy1dP2tleXxhY2Nlc3NbXy1dP3Rva2VufHByaXZhdGVbXy1dP2tleXxlbmNyeXB0fGRlY3J5cHQpJywgcmUuSUdOT1JFQ0FTRSkKICAgIGZvciBzIGluIHN0cmluZ3M6CiAgICAgICAgZm9yIG0gaW4gdXJsX3JlLmZpbmRpdGVyKHMpOiByZXN1bHRzWyd1cmxzJ11bbS5ncm91cCgxKV0gKz0gMQogICAgICAgIGZvciBtIGluIGFwaV9yZS5maW5kaXRlcihzKTogcmVzdWx0c1snYXBpX3BhdGhzJ11bbS5ncm91cCgxKV0gKz0gMQogICAgICAgIGZvciBtIGluIHBrZ19yZS5maW5kaXRlcihzKToKICAgICAgICAgICAgcCA9IG0uZ3JvdXAoMCkKICAgICAgICAgICAgaWYgbGVuKHApID49IDggYW5kICcvJyBpbiBwOiByZXN1bHRzWydwYWNrYWdlcyddW3BdICs9IDEKICAgICAgICBmb3IgbSBpbiBpcF9yZS5maW5kaXRlcihzKTogcmVzdWx0c1snaXBfYWRkcmVzc2VzJ11bbS5ncm91cCgwKV0gKz0gMQogICAgICAgIGZvciBtIGluIHN1c19yZS5maW5kaXRlcihzKToKICAgICAgICAgICAgY3R4ID0gc1ttYXgoMCxtLnN0YXJ0KCktMTApOm0uZW5kKCkrMzBdCiAgICAgICAgICAgIHJlc3VsdHNbJ3N1c3BpY2lvdXMnXVtjdHhbOjgwXV0gKz0gMQogICAgcmV0dXJuIHJlc3VsdHMKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTWFuaWZlc3Top6PmnpAgKGFuZHJvZ3VhcmQpCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRlZiBwYXJzZV9tYW5pZmVzdChhcGtfcGF0aCk6CiAgICByZXN1bHQgPSB7CiAgICAgICAgJ3BhY2thZ2UnOiAnJywgJ3ZlcnNpb25fbmFtZSc6ICcnLCAndmVyc2lvbl9jb2RlJzogJycsCiAgICAgICAgJ21pbl9zZGsnOiAnJywgJ3RhcmdldF9zZGsnOiAnJywKICAgICAgICAncGVybWlzc2lvbnMnOiBbXSwgJ2FjdGl2aXRpZXMnOiBbXSwgJ3NlcnZpY2VzJzogW10sCiAgICAgICAgJ3JlY2VpdmVycyc6IFtdLCAncHJvdmlkZXJzJzogW10sICd1c2VzX2ZlYXR1cmVzJzogW10sCiAgICB9CiAgICB0cnk6CiAgICAgICAgZnJvbSBhbmRyb2d1YXJkLmNvcmUuYXBrIGltcG9ydCBBUEsKICAgICAgICAjIOWxj+iUvWFuZHJvZ3VhcmTnmoRsb2d1cnXml6Xlv5cKICAgICAgICBvbGRfc3RkZXJyID0gc3lzLnN0ZGVycgogICAgICAgIHN5cy5zdGRlcnIgPSBfc3RkZXJyX3N1cHByZXNzCiAgICAgICAgdHJ5OgogICAgICAgICAgICBhID0gQVBLKGFwa19wYXRoKQogICAgICAgICAgICByZXN1bHRbJ3BhY2thZ2UnXSA9IGEuZ2V0X3BhY2thZ2UoKSBvciAnJwogICAgICAgICAgICByZXN1bHRbJ3ZlcnNpb25fbmFtZSddID0gYS5nZXRfYW5kcm9pZHZlcnNpb25fbmFtZSgpIG9yICcnCiAgICAgICAgICAgIHJlc3VsdFsndmVyc2lvbl9jb2RlJ10gPSBzdHIoYS5nZXRfYW5kcm9pZHZlcnNpb25fY29kZSgpIG9yICcnKQogICAgICAgICAgICByZXN1bHRbJ21pbl9zZGsnXSA9IHN0cihhLmdldF9taW5fc2RrX3ZlcnNpb24oKSBvciAnJykKICAgICAgICAgICAgcmVzdWx0Wyd0YXJnZXRfc2RrJ10gPSBzdHIoYS5nZXRfdGFyZ2V0X3Nka192ZXJzaW9uKCkgb3IgJycpCiAgICAgICAgICAgIHJlc3VsdFsncGVybWlzc2lvbnMnXSA9IGEuZ2V0X3Blcm1pc3Npb25zKCkgb3IgW10KICAgICAgICAgICAgcmVzdWx0WydhY3Rpdml0aWVzJ10gPSBbXQogICAgICAgICAgICBmb3IgYWN0IGluIChhLmdldF9hY3Rpdml0aWVzKCkgb3IgW10pOgogICAgICAgICAgICAgICAgcmVzdWx0WydhY3Rpdml0aWVzJ10uYXBwZW5kKHsnbmFtZSc6IGFjdCwgJ2V4cG9ydGVkJzogJyd9KQogICAgICAgICAgICByZXN1bHRbJ3NlcnZpY2VzJ10gPSBhLmdldF9zZXJ2aWNlcygpIG9yIFtdCiAgICAgICAgICAgIHJlc3VsdFsncmVjZWl2ZXJzJ10gPSBhLmdldF9yZWNlaXZlcnMoKSBvciBbXQogICAgICAgICAgICByZXN1bHRbJ3Byb3ZpZGVycyddID0gYS5nZXRfcHJvdmlkZXJzKCkgb3IgW10KICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBzeXMuc3RkZXJyID0gb2xkX3N0ZGVycgogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgIHBhc3MKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwYXNzCiAgICByZXR1cm4gcmVzdWx0CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIOivgeS5puino+aekAojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkZWYgcGFyc2VfY2VydChhcGtfcGF0aCk6CiAgICByZXN1bHQgPSB7J2ZpbmdlcnByaW50cyc6IHt9LCAnaXNzdWVyJzogJycsICdzdWJqZWN0JzogJycsICd2YWxpZF9mcm9tJzogJycsICd2YWxpZF90byc6ICcnfQogICAgdHJ5OgogICAgICAgIGZyb20gYW5kcm9ndWFyZC5jb3JlLmFwayBpbXBvcnQgQVBLCiAgICAgICAgYSA9IEFQSyhhcGtfcGF0aCkKICAgICAgICAjIOivgeS5puino+aekOeugOWMlueJiAogICAgICAgIHJlc3VsdFsnZmluZ2VycHJpbnRzJ11bJ01ENSddID0gYS5nZXRfY2VydF9tZDUoKSBvciAnJwogICAgICAgIHJlc3VsdFsnZmluZ2VycHJpbnRzJ11bJ1NIQTEnXSA9IGEuZ2V0X2NlcnRfc2hhMSgpIG9yICcnCiAgICAgICAgcmVzdWx0WydmaW5nZXJwcmludHMnXVsnU0hBMjU2J10gPSBhLmdldF9jZXJ0X3NoYTI1NigpIG9yICcnCiAgICBleGNlcHQ6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIHJlc3VsdAoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyDkuLvlh73mlbAKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGVmIG1haW4oKToKICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgogICAgICAgIHByaW50KCLnlKjms5U6IHB5dGhvbjMgYXBrX2FuYWx5emVyLnB5IDxhcGvmlofku7Y+IFvovpPlh7rmlofku7ZdIikKICAgICAgICBzeXMuZXhpdCgxKQogICAgCiAgICBhcGtfcGF0aCA9IHN5cy5hcmd2WzFdCiAgICBvdXRwdXRfcGF0aCA9IHN5cy5hcmd2WzJdIGlmIGxlbihzeXMuYXJndikgPiAyIGVsc2UgTm9uZQogICAgCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBrX3BhdGgpOgogICAgICAgIHByaW50KHJlZChmIumUmeivrzog5paH5Lu25LiN5a2Y5ZyoIHthcGtfcGF0aH0iKSkKICAgICAgICBzeXMuZXhpdCgxKQogICAgCiAgICAjIOaUtumbhui+k+WHugogICAgbGluZXMgPSBbXQogICAgZGVmIG91dChzKTogbGluZXMuYXBwZW5kKHMpOyBwcmludChzKQogICAgCiAgICBvdXQoYm9sZCgiPSIgKiA2MCkpCiAgICBvdXQoYm9sZCgiIEFQSyDlv6vpgJ/liIbmnpDohJrmnKwgdjMuMCIpKQogICAgb3V0KGJvbGQoIj0iICogNjApKQogICAgb3V0KCIiKQogICAgb3V0KGYi5paH5Lu2OiB7YXBrX3BhdGh9IikKICAgIG91dChmIuWkp+Wwjzoge29zLnBhdGguZ2V0c2l6ZShhcGtfcGF0aCkgLyAxMDI0IC8gMTAyNDouMmZ9IE1CIikKICAgIG91dChmIuaXtumXtDoge2RhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycpfSIpCiAgICBvdXQoIiIpCiAgICAKICAgICMgMS4gTWFuaWZlc3QKICAgIG91dChib2xkKCJbMV0gQW5kcm9pZE1hbmlmZXN0LnhtbCIpKQogICAgbWFuaWZlc3QgPSBwYXJzZV9tYW5pZmVzdChhcGtfcGF0aCkKICAgIG91dChmIuWMheWQjToge21hbmlmZXN0WydwYWNrYWdlJ119IikKICAgIG91dChmIueJiOacrDoge21hbmlmZXN0Wyd2ZXJzaW9uX25hbWUnXX0gKHttYW5pZmVzdFsndmVyc2lvbl9jb2RlJ119KSIpCiAgICBvdXQoZiJTREs6IG1pbj17bWFuaWZlc3RbJ21pbl9zZGsnXX0sIHRhcmdldD17bWFuaWZlc3RbJ3RhcmdldF9zZGsnXX0iKQogICAgb3V0KGYi5p2D6ZmQOiB7bGVuKG1hbmlmZXN0WydwZXJtaXNzaW9ucyddKX0g5LiqIikKICAgIGZvciBwIGluIG1hbmlmZXN0WydwZXJtaXNzaW9ucyddWzoyMF06CiAgICAgICAgb3V0KGYiICAtIHtwfSIpCiAgICBpZiBsZW4obWFuaWZlc3RbJ3Blcm1pc3Npb25zJ10pID4gMjA6CiAgICAgICAgb3V0KGYiICAuLi4g6L+Y5pyJIHtsZW4obWFuaWZlc3RbJ3Blcm1pc3Npb25zJ10pIC0gMjB9IOS4qiIpCiAgICBvdXQoIiIpCiAgICAKICAgICMgMi4gREVYIOWIhuaekAogICAgb3V0KGJvbGQoIlsyXSBERVgg5a2X56ym5Liy5YiG5p6QIikpCiAgICBpbXBvcnQgemlwZmlsZQogICAgYWxsX3N0cmluZ3MgPSBbXQogICAgZGV4X2NvdW50ID0gMAogICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoYXBrX3BhdGgsICdyJykgYXMgejoKICAgICAgICBmb3IgbmFtZSBpbiB6Lm5hbWVsaXN0KCk6CiAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5kZXgnKToKICAgICAgICAgICAgICAgIGRleF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICBkYXRhID0gei5yZWFkKG5hbWUpCiAgICAgICAgICAgICAgICBzdHJpbmdzID0gZXh0cmFjdF9kZXhfc3RyaW5ncyhkYXRhKQogICAgICAgICAgICAgICAgYWxsX3N0cmluZ3MuZXh0ZW5kKHN0cmluZ3MpCiAgICAKICAgIG91dChmIkRFWCDmlofku7Y6IHtkZXhfY291bnR9IOS4qiIpCiAgICBvdXQoZiLlrZfnrKbkuLI6IHtsZW4oYWxsX3N0cmluZ3MpfSDkuKoiKQogICAgCiAgICBzY2FuID0gc2Nhbl9zdHJpbmdzKGFsbF9zdHJpbmdzKQogICAgCiAgICBpZiBzY2FuWyd1cmxzJ106CiAgICAgICAgb3V0KGYiXG5VUkwv5Z+f5ZCNICh7bGVuKHNjYW5bJ3VybHMnXSl9IOS4qik6IikKICAgICAgICBmb3IgdXJsLCBjb3VudCBpbiBzY2FuWyd1cmxzJ10ubW9zdF9jb21tb24oMTUpOgogICAgICAgICAgICBvdXQoZiIgIHt1cmx9IikKICAgIAogICAgaWYgc2NhblsnYXBpX3BhdGhzJ106CiAgICAgICAgb3V0KGYiXG5BUEkg6Lev5b6EICh7bGVuKHNjYW5bJ2FwaV9wYXRocyddKX0g5LiqKToiKQogICAgICAgIGZvciBwYXRoLCBjb3VudCBpbiBzY2FuWydhcGlfcGF0aHMnXS5tb3N0X2NvbW1vbigxMCk6CiAgICAgICAgICAgIG91dChmIiAge3BhdGh9IikKICAgIAogICAgaWYgc2NhblsnaXBfYWRkcmVzc2VzJ106CiAgICAgICAgb3V0KGYiXG5JUCDlnLDlnYAgKHtsZW4oc2NhblsnaXBfYWRkcmVzc2VzJ10pfSDkuKopOiIpCiAgICAgICAgZm9yIGlwLCBjb3VudCBpbiBzY2FuWydpcF9hZGRyZXNzZXMnXS5tb3N0X2NvbW1vbigxMCk6CiAgICAgICAgICAgIG91dChmIiAge2lwfSIpCiAgICAKICAgIGlmIHNjYW5bJ3N1c3BpY2lvdXMnXToKICAgICAgICBvdXQoZiJcbuaVj+aEn+Wtl+espuS4siAoe2xlbihzY2FuWydzdXNwaWNpb3VzJ10pfSDkuKopOiIpCiAgICAgICAgZm9yIHMsIGNvdW50IGluIHNjYW5bJ3N1c3BpY2lvdXMnXS5tb3N0X2NvbW1vbigxMCk6CiAgICAgICAgICAgIG91dChmIiAge3N9IikKICAgIG91dCgiIikKICAgIAogICAgIyAzLiBTREsg6K+G5YirCiAgICBvdXQoYm9sZCgiWzNdIOesrOS4ieaWuSBTREsg6K+G5YirIikpCiAgICBmb3VuZF9zZGtzID0gW10KICAgIGZvciBwYXR0ZXJuLCBuYW1lLCBjYXRlZ29yeSBpbiBTREtfUlVMRVM6CiAgICAgICAgZm9yIHMgaW4gYWxsX3N0cmluZ3M6CiAgICAgICAgICAgIGlmIHJlLnNlYXJjaChwYXR0ZXJuLCBzKToKICAgICAgICAgICAgICAgIGZvdW5kX3Nka3MuYXBwZW5kKChuYW1lLCBjYXRlZ29yeSkpCiAgICAgICAgICAgICAgICBicmVhawogICAgaWYgZm91bmRfc2RrczoKICAgICAgICBmb3IgbmFtZSwgY2F0IGluIGZvdW5kX3Nka3M6CiAgICAgICAgICAgIG91dChmIiAgW3tjYXR9XSB7bmFtZX0iKQogICAgZWxzZToKICAgICAgICBvdXQoIiAg5pyq5qOA5rWL5Yiw5bey55+lIFNESyIpCiAgICBvdXQoIiIpCiAgICAKICAgICMgNC4g5Yqg5Zu65qOA5rWLCiAgICBvdXQoYm9sZCgiWzRdIOWKoOWbuuWjs+ajgOa1iyIpKQogICAgZm91bmRfcGFja2VyID0gTm9uZQogICAgZm9yIHBhdHRlcm4sIG5hbWUgaW4gUEFDS0VSX1JVTEVTOgogICAgICAgIGZvciBzIGluIGFsbF9zdHJpbmdzOgogICAgICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgcyk6CiAgICAgICAgICAgICAgICBmb3VuZF9wYWNrZXIgPSBuYW1lCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIGlmIGZvdW5kX3BhY2tlcjogYnJlYWsKICAgIAogICAgaWYgZm91bmRfcGFja2VyOgogICAgICAgIG91dCh5ZWxsb3coZiIgIOKaoO+4jyDmo4DmtYvliLDliqDlm7o6IHtmb3VuZF9wYWNrZXJ9IikpCiAgICBlbHNlOgogICAgICAgIG91dChncmVlbigiICDinIUg5pyq5qOA5rWL5Yiw5Yqg5Zu65aOzIikpCiAgICBvdXQoIiIpCiAgICAKICAgICMgNS4g6K+B5LmmCiAgICBvdXQoYm9sZCgiWzVdIOivgeS5puS/oeaBryIpKQogICAgY2VydCA9IHBhcnNlX2NlcnQoYXBrX3BhdGgpCiAgICBmb3IgaywgdiBpbiBjZXJ0WydmaW5nZXJwcmludHMnXS5pdGVtcygpOgogICAgICAgIGlmIHY6CiAgICAgICAgICAgIG91dChmIiAge2t9OiB7dn0iKQogICAgb3V0KCIiKQogICAgCiAgICAjIDYuIOWuieWFqOmjjumZqeWIhuaekCArIE1U5L+u5pS55pWZ56iLCiAgICBvdXQoYm9sZCgiWzZdIOWuieWFqOmjjumZqeWIhuaekCIpKQogICAgCiAgICAjIOajgOa1i+W5v+WRilNESwogICAgYWRfc2RrcyA9IFsobiwgYykgZm9yIG4sIGMgaW4gZm91bmRfc2RrcyBpZiBjID09ICflub/lkYonXQogICAgaWYgYWRfc2RrczoKICAgICAgICBvdXQoeWVsbG93KGYiICDmo4DmtYvliLAge2xlbihhZF9zZGtzKX0g5Liq5bm/5ZGKU0RLOiB7JywgJy5qb2luKFtuIGZvciBuLF8gaW4gYWRfc2Rrc10pfSIpKQogICAgCiAgICAjIOajgOa1i+aUr+S7mFNESwogICAgcGF5X3Nka3MgPSBbKG4sIGMpIGZvciBuLCBjIGluIGZvdW5kX3Nka3MgaWYgYyA9PSAn5pSv5LuYJ10KICAgIGlmIHBheV9zZGtzOgogICAgICAgIG91dCh5ZWxsb3coZiIgIOajgOa1i+WIsOaUr+S7mFNESzogeycsICcuam9pbihbbiBmb3IgbixfIGluIHBheV9zZGtzXSl9IikpCiAgICAKICAgICMg5qOA5rWL57uf6K6hU0RLCiAgICBzdGF0X3Nka3MgPSBbKG4sIGMpIGZvciBuLCBjIGluIGZvdW5kX3Nka3MgaWYgYyA9PSAn57uf6K6hJ10KICAgIGlmIHN0YXRfc2RrczoKICAgICAgICBvdXQoeWVsbG93KGYiICDmo4DmtYvliLDnu5/orqFTREs6IHsnLCAnLmpvaW4oW24gZm9yIG4sXyBpbiBzdGF0X3Nka3NdKX0iKSkKICAgIAogICAgIyDmo4DmtYvmlY/mhJ/lrZfnrKbkuLIKICAgIGlmIHNjYW5bJ3N1c3BpY2lvdXMnXToKICAgICAgICBvdXQoeWVsbG93KGYiICDmo4DmtYvliLAge2xlbihzY2FuWydzdXNwaWNpb3VzJ10pfSDkuKrmlY/mhJ/lrZfnrKbkuLIiKSkKICAgIAogICAgIyDmo4DmtYvpq5jpo47pmanmnYPpmZAKICAgIGRhbmdlcl9wZXJtcyA9IFtwIGZvciBwIGluIG1hbmlmZXN0WydwZXJtaXNzaW9ucyddIGlmIGFueShrIGluIHAgZm9yIGsgaW4gWydXUklURV9TRVRUSU5HUycsICdTWVNURU1fQUxFUlQnLCAnUkVBRF9QSE9ORScsICdSRUFEX0NPTlRBQ1RTJywgJ1JFQURfU01TJywgJ0NBTUVSQScsICdSRUNPUkRfQVVESU8nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXSldCiAgICBpZiBkYW5nZXJfcGVybXM6CiAgICAgICAgb3V0KHllbGxvdyhmIiAg6auY6aOO6Zmp5p2D6ZmQICh7bGVuKGRhbmdlcl9wZXJtcyl9IOS4qik6IikpCiAgICAgICAgZm9yIHAgaW4gZGFuZ2VyX3Blcm1zOgogICAgICAgICAgICBvdXQoZiIgICAgLSB7cH0iKQogICAgb3V0KCIiKQogICAgCiAgICAjIDcuIE1U566h55CG5Zmo5L+u5pS55pWZ56iL77yI5aSn55m96K+d54mI77yJCiAgICBvdXQoYm9sZCgiWzddIE1U566h55CG5Zmo5L+u5pS55pWZ56iL77yI5aSn55m96K+d54mI77yJIikpCiAgICBvdXQoIiIpCiAgICAKICAgICMg5qC55o2u5qOA5rWL57uT5p6c55Sf5oiQ6ZKI5a+55oCn5pWZ56iLCiAgICBtdF90aXBzID0gW10KICAgIAogICAgIyAtLS0g5Y675bm/5ZGKIC0tLQogICAgaWYgYWRfc2RrczoKICAgICAgICBvdXQoeWVsbG93KCLjgJDljrvlub/lkYrjgJEiKSkKICAgICAgICBhZF9uYW1lcyA9ICcsICcuam9pbihbbiBmb3IgbixfIGluIGFkX3Nka3NdKQogICAgICAgIG91dChmIiAg5qOA5rWL5Yiw5bm/5ZGKU0RLOiB7YWRfbmFtZXN9IikKICAgICAgICBvdXQoIiAg5aSn55m96K+d5pWZ56iLOiIpCiAgICAgICAgb3V0KCIgIDEuIE1U566h55CG5ZmoIC0+IOaJk+W8gEFQSyAtPiBERVjnvJbovpHlmagiKQogICAgICAgIG91dCgiICAyLiDmkJzntKLnsbvlkI3vvIjkuIvpnaLliJflh7rnmoTvvInvvIzmib7liLDlub/lkYrliqDovb3nmoTmlrnms5UiKQogICAgICAgIGZvciBhZF9uYW1lLCBfIGluIGFkX3Nka3M6CiAgICAgICAgICAgIGlmICfnqb/lsbHnlLInIGluIGFkX25hbWU6CiAgICAgICAgICAgICAgICBvdXQoIiAgICAg56m/5bGx55SyOiDmkJzntKIgVFRBZE1hbmFnZXIsIFRUQWROYXRpdmUsIGxvYWRBZCIpCiAgICAgICAgICAgICAgICBvdXQoIiAgICAgICDmib7liLAgbG9hZEFkIOaWueazlSAtPiDmuIXnqbrmlrnms5XkvZMgLT4g5Y+q55WZIHJldHVybiIpCiAgICAgICAgICAgIGVsaWYgJ+S8mOmHj+axhycgaW4gYWRfbmFtZToKICAgICAgICAgICAgICAgIG91dCgiICAgICDkvJjph4/msYc6IOaQnOe0oiBVbmlmaWVkQURTZXJ2aWNlLCBBRExpc3RlbmVyIikKICAgICAgICAgICAgICAgIG91dCgiICAgICAgIOaJvuWIsOW5v+WRiuWbnuiwgyAtPiDmioogb25Ob0FkIOaUueaIkCBvbkFkTG9hZGVkIikKICAgICAgICAgICAgZWxpZiAnQWRNb2InIGluIGFkX25hbWU6CiAgICAgICAgICAgICAgICBvdXQoIiAgICAgQWRNb2I6IOaQnOe0oiBBZFZpZXcsIEludGVyc3RpdGlhbEFkLCBsb2FkQWQiKQogICAgICAgICAgICAgICAgb3V0KCIgICAgICAg5om+5YiwIGxvYWRBZCAtPiDmuIXnqbrmlrnms5XkvZMgLT4g5Y+q55WZIHJldHVybiIpCiAgICAgICAgICAgIGVsaWYgJ0FwcExvdmluJyBpbiBhZF9uYW1lOgogICAgICAgICAgICAgICAgb3V0KCIgICAgIEFwcExvdmluOiDmkJzntKIgQXBwTG92aW5TZGssIE1heEFkVmlldywgbG9hZEFkIikKICAgICAgICAgICAgICAgIG91dCgiICAgICAgIOaJvuWIsCBsb2FkQWQgLT4g5riF56m65pa55rOV5L2TIikKICAgICAgICAgICAgZWxpZiAnVW5pdHkgQWRzJyBpbiBhZF9uYW1lOgogICAgICAgICAgICAgICAgb3V0KCIgICAgIFVuaXR5IEFkczog5pCc57SiIFVuaXR5QWRzLCBJVW5pdHlBZHNMaXN0ZW5lciwgU2hvdyIpCiAgICAgICAgICAgICAgICBvdXQoIiAgICAgICDmib7liLAgU2hvdyDmlrnms5UgLT4g5riF56m65pa55rOV5L2TIikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG91dChmIiAgICAge2FkX25hbWV9OiDmkJzntKIge2FkX25hbWV9IOebuOWFs+eahCBsb2FkL3Nob3cg5pa55rOVIikKICAgICAgICAgICAgICAgIG91dChmIiAgICAgICDmuIXnqbrlub/lkYrliqDovb3mlrnms5XkvZMgLT4g5Y+q55WZIHJldHVybiIpCiAgICAgICAgb3V0KCIgIDMuIOS/neWtmERFWCAtPiDnrb7lkI1BUEsgLT4g5a6J6KOF5rWL6K+VIikKICAgICAgICBvdXQoIiIpCiAgICAgICAgbXRfdGlwcy5hcHBlbmQoJ+WOu+W5v+WRiicpCiAgICAKICAgICMgLS0tIOWOu+abtOaWsOW8ueeqlyAtLS0KICAgIG91dCh5ZWxsb3coIuOAkOWOu+abtOaWsOW8ueeqly/lvLrliLbljYfnuqfjgJEiKSkKICAgIG91dCgiICDlpKfnmb3or53mlZnnqIs6IikKICAgIG91dCgiICAxLiBNVOeuoeeQhuWZqCAtPiBERVjnvJbovpHlmaggLT4g5pCc57SiIikKICAgIG91dCgiICAyLiDmkJzntKLov5nkupvlhbPplK7or406IikKICAgIG91dCgiICAgICAtIGZvcmNlVXBkYXRlIC8gRm9yY2VVcGRhdGUiKQogICAgb3V0KCIgICAgIC0gc2hvd1VwZGF0ZURpYWxvZyAvIFVwZGF0ZURpYWxvZyIpCiAgICBvdXQoIiAgICAgLSBjaGVja1ZlcnNpb24gLyBWZXJzaW9uQ2hlY2siKQogICAgb3V0KCIgICAgIC0gdXBncmFkZSAvIFVwZ3JhZGVEaWFsb2ciKQogICAgb3V0KCIgIDMuIOaJvuWIsOW8ueeql+aYvuekuuaWueazlSAtPiDmuIXnqbrmlrnms5XkvZMgLT4g5Y+q55WZIHJldHVybiIpCiAgICBvdXQoIiAgNC4g5aaC5p6c5pyJ54mI5pys5q+U6L6D6YC76L6ROiIpCiAgICBvdXQoIiAgICAgLSDmib4gaWYtbmUgLyBpZi1leiDmjIfku6TvvIjniYjmnKzlj7fmr5TovoPvvIkiKQogICAgb3V0KCIgICAgIC0g5pS55oiQIGlmLWVxIC8gaWYtbmV677yI5Y+N6L2s5Yik5pat77yJIikKICAgIG91dCgiICA1LiDkv53lrZggLT4g562+5ZCNIC0+IOWuieijhSIpCiAgICBvdXQoIiIpCiAgICBtdF90aXBzLmFwcGVuZCgn5Y675pu05paw5by556qXJykKICAgIAogICAgIyAtLS0gVklQL+S8muWRmOegtOinoyAtLS0KICAgIG91dCh5ZWxsb3coIuOAkFZJUC/kvJrlkZgv5LuY6LS556C06Kej44CRIikpCiAgICBvdXQoIiAg5aSn55m96K+d5pWZ56iLOiIpCiAgICBvdXQoIiAgMS4gTVTnrqHnkIblmaggLT4gREVY57yW6L6R5ZmoIC0+IOaQnOe0oiIpCiAgICBvdXQoIiAgMi4g5pCc57Si6L+Z5Lqb5YWz6ZSu6K+NOiIpCiAgICBvdXQoIiAgICAgLSBpc1ZpcCAvIGlzUHJlbWl1bSAvIGlzUHJvIC8gaXNNZW1iZXIiKQogICAgb3V0KCIgICAgIC0gaXNTdWJzY3JpYmVkIC8gaXNBY3RpdmUgLyBpc1BhaWQiKQogICAgb3V0KCIgICAgIC0gY2hlY2tWaXBTdGF0dXMgLyBnZXRWaXBMZXZlbCIpCiAgICBvdXQoIiAgICAgLSB2aXAgLyBtZW1iZXIgLyBzdWJzY3JpYmUgLyBwdXJjaGFzZSIpCiAgICBvdXQoIiAgMy4g5om+5Yiw6L+U5ZueIGJvb2xlYW4g55qE5pa55rOVOiIpCiAgICBvdXQoIiAgICAgLSDmlrnms5XlvIDlpLTmlLnmiJA6IGNvbnN0LzQgdjAsIDB4MSIpCiAgICBvdXQoIiAgICAgLSDntKfmjqXnnYA6IHJldHVybiB2MCIpCiAgICBvdXQoIiAgICAgLSDmhI/mgJ3lsLHmmK86IOebtOaOpei/lOWbniB0cnVl77yI5pivVklQ77yJIikKICAgIG91dCgiICA0LiDlpoLmnpzmnInku5jotLnliKTmlq06IikKICAgIG91dCgiICAgICAtIOaQnOe0oiBCaWxsaW5nQ2xpZW50IC8gSW5BcHBQdXJjaGFzZSIpCiAgICBvdXQoIiAgICAgLSDmib7liLDotK3kubDlm57osIMgLT4g5oqK6LSt5Lmw5oiQ5Yqf5Zue6LCD55u05o6l6Kem5Y+RIikKICAgIG91dCgiICA1LiDkv53lrZggLT4g562+5ZCNIC0+IOWuieijhSIpCiAgICBvdXQoIiIpCiAgICBtdF90aXBzLmFwcGVuZCgnVklQ56C06KejJykKICAgIAogICAgIyAtLS0g57uV6L+H562+5ZCN6aqM6K+BIC0tLQogICAgb3V0KHllbGxvdygi44CQ57uV6L+H562+5ZCN6aqM6K+B44CRIikpCiAgICBvdXQoIiAg5aSn55m96K+d5pWZ56iLOiIpCiAgICBvdXQoIiAgMS4gTVTnrqHnkIblmaggLT4gREVY57yW6L6R5ZmoIC0+IOaQnOe0oiIpCiAgICBvdXQoIiAgMi4g5pCc57Si6L+Z5Lqb5YWz6ZSu6K+NOiIpCiAgICBvdXQoIiAgICAgLSB2ZXJpZnlTaWduYXR1cmUgLyBjaGVja1NpZ25hdHVyZSIpCiAgICBvdXQoIiAgICAgLSBnZXRQYWNrYWdlSW5mbyAvIFBhY2thZ2VNYW5hZ2VyIikKICAgIG91dCgiICAgICAtIE1lc3NhZ2VEaWdlc3QgLyBTSEEtMSAvIE1ENSIpCiAgICBvdXQoIiAgMy4g5om+5Yiw562+5ZCN5qCh6aqM5pa55rOVOiIpCiAgICBvdXQoIiAgICAgLSDmlrnms5XlvIDlpLTmlLnmiJA6IGNvbnN0LzQgdjAsIDB4MSIpCiAgICBvdXQoIiAgICAgLSDntKfmjqXnnYA6IHJldHVybiB2MCIpCiAgICBvdXQoIiAgICAgLSDmhI/mgJ3lsLHmmK86IOetvuWQjemqjOivgeebtOaOpei/lOWbniB0cnVlIikKICAgIG91dCgiICA0LiDkv53lrZggLT4g562+5ZCNIC0+IOWuieijhSIpCiAgICBvdXQoIiIpCiAgICBtdF90aXBzLmFwcGVuZCgn57uV6L+H562+5ZCN6aqM6K+BJykKICAgIAogICAgIyAtLS0g5Y676Zmk57uf6K6hL+i/vei4qiAtLS0KICAgIGlmIHN0YXRfc2RrczoKICAgICAgICBvdXQoeWVsbG93KCLjgJDljrvpmaTnu5/orqEv6L+96LiqU0RL44CRIikpCiAgICAgICAgb3V0KGYiICDmo4DmtYvliLA6IHsnLCAnLmpvaW4oW24gZm9yIG4sXyBpbiBzdGF0X3Nka3NdKX0iKQogICAgICAgIG91dCgiICDlpKfnmb3or53mlZnnqIs6IikKICAgICAgICBvdXQoIiAgMS4gTVTnrqHnkIblmaggLT4gREVY57yW6L6R5ZmoIC0+IOaQnOe0oiIpCiAgICAgICAgb3V0KCIgIDIuIOaQnOe0oiBTREsg5Yid5aeL5YyW5Luj56CBOiIpCiAgICAgICAgZm9yIHN0YXRfbmFtZSwgXyBpbiBzdGF0X3Nka3M6CiAgICAgICAgICAgIGlmICflj4vnm58nIGluIHN0YXRfbmFtZToKICAgICAgICAgICAgICAgIG91dCgiICAgICDlj4vnm586IOaQnOe0oiBVTUNvbmZpZ3VyZS5pbml0IC8gTW9iY2xpY2tBZ2VudCIpCiAgICAgICAgICAgICAgICBvdXQoIiAgICAgICDmib7liLAgaW5pdCDmlrnms5UgLT4g5riF56m65pa55rOV5L2TIikKICAgICAgICAgICAgZWxpZiAnRmx1cnJ5JyBpbiBzdGF0X25hbWU6CiAgICAgICAgICAgICAgICBvdXQoIiAgICAgRmx1cnJ5OiDmkJzntKIgRmx1cnJ5QWdlbnQuQnVpbGRlciAvIGluaXQiKQogICAgICAgICAgICAgICAgb3V0KCIgICAgICAg5om+5YiwIGluaXQg5pa55rOVIC0+IOa4heepuuaWueazleS9kyIpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBvdXQoZiIgICAgIHtzdGF0X25hbWV9OiDmkJzntKLliJ3lp4vljJbmlrnms5UgLT4g5riF56m6IikKICAgICAgICBvdXQoIiAgMy4g5L+d5a2YIC0+IOetvuWQjSAtPiDlronoo4UiKQogICAgICAgIG91dCgiIikKICAgICAgICBtdF90aXBzLmFwcGVuZCgn5Y676Zmk57uf6K6hU0RLJykKICAgIAogICAgIyAtLS0g5Yqg5Zu65aOz5aSE55CGIC0tLQogICAgaWYgZm91bmRfcGFja2VyOgogICAgICAgIG91dCh5ZWxsb3coZiLjgJDliqDlm7rlo7PlpITnkIYgLSB7Zm91bmRfcGFja2VyfeOAkSIpKQogICAgICAgIG91dCgiICDlpKfnmb3or53mlZnnqIs6IikKICAgICAgICBvdXQoIiAg6L+Z5LiqQVBL6KKr5Yqg5Zu65LqG77yM5LiN6IO955u05o6l5pS577yM6KaB5YWI6ISx5aOz77yBIikKICAgICAgICBvdXQoIiIpCiAgICAgICAgb3V0KCIgIOaWueazleS4gDogRkRleDLvvIjmjqjojZDmlrDmiYvvvIkiKQogICAgICAgIG91dCgiICAxLiDmiYvmnLroo4UgRkRleDIg5qih5Z2X77yI6ZyA6KaBIFhwb3NlZCDmoYbmnrbvvIkiKQogICAgICAgIG91dCgiICAyLiDmiZPlvIAgRkRleDIgLT4g5Yu+6YCJ55uu5qCHQVBQIC0+IOeCueWHu+iEseWjsyIpCiAgICAgICAgb3V0KCIgIDMuIOi/kOihjOebruagh0FQUCAtPiDnrYnlvoVERVggZHVtcOWujOaIkCIpCiAgICAgICAgb3V0KCIgIDQuIOaLv+WIsOiEseWjs+WQjueahERFWCAtPiDnlKhNVOeuoeeQhuWZqOabv+aNouWOn0RFWCIpCiAgICAgICAgb3V0KCIiKQogICAgICAgIG91dCgiICDmlrnms5Xkuow6IGZyaWRhLWRleGR1bXDvvIjmjqjojZDmnInnlLXohJHnmoTvvIkiKQogICAgICAgIG91dCgiICAxLiDnlLXohJHoo4UgZnJpZGE6IHBpcCBpbnN0YWxsIGZyaWRhLXRvb2xzIikKICAgICAgICBvdXQoIiAgMi4g5omL5py66KOFIGZyaWRhLXNlcnZlciIpCiAgICAgICAgb3V0KCIgIDMuIOi/kOihjOebruagh0FQUCAtPiDmiafooYw6IGZyaWRhLWRleGR1bXAgLVUgLWYg5YyF5ZCNIikKICAgICAgICBvdXQoIiAgNC4g5ou/5YiwREVYIC0+IOabv+aNouWOn0RFWCAtPiDnrb7lkI3lronoo4UiKQogICAgICAgIG91dCgiIikKICAgICAgICBvdXQoIiAg5pa55rOV5LiJOiBGQVJU77yI5rex5bqm6ISx5aOz77yJIikKICAgICAgICBvdXQoIiAgMS4g5Yi35YWlIEZBUlQg5a6a5Yi2IFJPTe+8iOaIlueUqOaooeaLn+WZqO+8iSIpCiAgICAgICAgb3V0KCIgIDIuIOWuieijheebruagh0FQUCAtPiDov5DooYwiKQogICAgICAgIG91dCgiICAzLiDlnKggL3NkY2FyZC9mYXJ0LyDnm67lvZXmi7/liLDohLHlo7NERVgiKQogICAgICAgIG91dCgiICA0LiDmm7/mjaLljp9ERVggLT4g562+5ZCN5a6J6KOFIikKICAgICAgICBvdXQoIiIpCiAgICAgICAgb3V0KCIgIOiEseWjs+WQjuWGjeeUqOS4iumdoueahOaWueazleS/ruaUue+8gSIpCiAgICAgICAgb3V0KCIiKQogICAgICAgIG10X3RpcHMuYXBwZW5kKGYn6ISx5aOzKHtmb3VuZF9wYWNrZXJ9KScpCiAgICAKICAgICMgLS0tIOmAmueUqOaKgOW3pyAtLS0KICAgIG91dCh5ZWxsb3coIuOAkOmAmueUqOS/ruaUueaKgOW3p+OAkSIpKQogICAgb3V0KCIgIDEuIOS/ruaUueWJjeWFiOWkh+S7veWOn0FQS++8gSIpCiAgICBvdXQoIiAgMi4g5pS55a6M5ZCO5b+F6aG755SoTVTnrqHnkIblmajnrb7lkI3miY3og73lronoo4UiKQogICAgb3V0KCIgIDMuIOWmguaenOaUueWujOmXqumAgO+8jOajgOafpToiKQogICAgb3V0KCIgICAgIC0g5pa55rOV5L2T5riF56m65ZCO5pyJ5rKh5pyJ5YqgIHJldHVybiIpCiAgICBvdXQoIiAgICAgLSDlr4TlrZjlmajmlbDph4/mmK/lkKbljLnphY0iKQogICAgb3V0KCIgICAgIC0g5a2X56ym5Liy5L+u5pS55piv5ZCm5L+d5oyB6ZW/5bqm5LiA6Ie0IikKICAgIG91dCgiICA0LiDpq5jnuqfmioDlt6c6IikKICAgIG91dCgiICAgICAtIOeUqCBzbWFsaSDku6PnoIHms6jlhaXku6Pmm7/muIXnqbrvvIjmm7TnqLPlrprvvIkiKQogICAgb3V0KCIgICAgIC0gSG9vayDmr5Tkv67mlLnmm7TngbXmtLvvvIjnlKggRnJpZGEvWHBvc2Vk77yJIikKICAgIG91dCgiICAgICAtIOWkmuivleWHoOasoe+8jOS4jeWQjOaWueazlee7hOWQiCIpCiAgICBvdXQoIiIpCiAgICAKICAgICMgLS0tIOS/ruaUuemavuW6puivhOS8sCAtLS0KICAgIG91dChib2xkKCJbOF0g5L+u5pS56Zq+5bqm6K+E5LywIikpCiAgICBkaWZmaWN1bHR5ID0gMAogICAgZGlmZmljdWx0eV9yZWFzb25zID0gW10KICAgIAogICAgaWYgZm91bmRfcGFja2VyOgogICAgICAgIGRpZmZpY3VsdHkgKz0gMwogICAgICAgIGRpZmZpY3VsdHlfcmVhc29ucy5hcHBlbmQoZiLliqDlm7rlo7Moe2ZvdW5kX3BhY2tlcn0pICszIikKICAgIGlmIGFkX3Nka3M6CiAgICAgICAgZGlmZmljdWx0eSArPSAxCiAgICAgICAgZGlmZmljdWx0eV9yZWFzb25zLmFwcGVuZChmIuW5v+WRilNESyh7bGVuKGFkX3Nka3MpfeS4qikgKzEiKQogICAgaWYgZGFuZ2VyX3Blcm1zOgogICAgICAgIGRpZmZpY3VsdHkgKz0gMQogICAgICAgIGRpZmZpY3VsdHlfcmVhc29ucy5hcHBlbmQoZiLpq5jpo47pmanmnYPpmZAoe2xlbihkYW5nZXJfcGVybXMpfeS4qikgKzEiKQogICAgaWYgc2Nhblsnc3VzcGljaW91cyddOgogICAgICAgIGRpZmZpY3VsdHkgKz0gMQogICAgICAgIGRpZmZpY3VsdHlfcmVhc29ucy5hcHBlbmQoZiLmlY/mhJ/lrZfnrKbkuLIoe2xlbihzY2FuWydzdXNwaWNpb3VzJ10pfeS4qikgKzEiKQogICAgCiAgICBpZiBkaWZmaWN1bHR5ID09IDA6CiAgICAgICAgb3V0KGdyZWVuKCIgIOS/ruaUuemavuW6pjog566A5Y2VICjml6DliqDlm7rml6Dlub/lkYrvvIzpmo/kvr/mlLkpIikpCiAgICBlbGlmIGRpZmZpY3VsdHkgPD0gMjoKICAgICAgICBvdXQoeWVsbG93KGYiICDkv67mlLnpmr7luqY6IOS4gOiIrCAoeycsICcuam9pbihkaWZmaWN1bHR5X3JlYXNvbnMpfSkiKSkKICAgIGVsaWYgZGlmZmljdWx0eSA8PSA0OgogICAgICAgIG91dCh5ZWxsb3coZiIgIOS/ruaUuemavuW6pjog6L6D6Zq+ICh7JywgJy5qb2luKGRpZmZpY3VsdHlfcmVhc29ucyl9KSIpKQogICAgZWxzZToKICAgICAgICBvdXQocmVkKGYiICDkv67mlLnpmr7luqY6IOWbsOmaviAoeycsICcuam9pbihkaWZmaWN1bHR5X3JlYXNvbnMpfSkiKSkKICAgIAogICAgaWYgbXRfdGlwczoKICAgICAgICBvdXQoZiIgIOW7uuiuruS/ruaUuTogeycsICcuam9pbihtdF90aXBzKX0iKQogICAgb3V0KCIiKQogICAgCiAgICBvdXQoYm9sZCgiPSIgKiA2MCkpCiAgICBvdXQoYm9sZCgi5YiG5p6Q5a6M5oiQISIpKQogICAgb3V0KGJvbGQoIj0iICogNjApKQogICAgCiAgICAjIOS/neWtmOWIsOaWh+S7tgogICAgaWYgb3V0cHV0X3BhdGg6CiAgICAgICAgd2l0aCBvcGVuKG91dHB1dF9wYXRoLCAndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICAgICAgICAgICMg5Y675o6J6aKc6Imy56CB5L+d5a2YCiAgICAgICAgICAgIGNsZWFuX2xpbmVzID0gW10KICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICAgICAgICBjbGVhbiA9IHJlLnN1YihyJ1wwMzNcW1swLTk7XSptJywgJycsIGxpbmUpCiAgICAgICAgICAgICAgICBjbGVhbl9saW5lcy5hcHBlbmQoY2xlYW4pCiAgICAgICAgICAgIGYud3JpdGUoJ1xuJy5qb2luKGNsZWFuX2xpbmVzKSkKICAgICAgICBvdXQoZiJcbuaKpeWRiuW3suS/neWtmDoge291dHB1dF9wYXRofSIpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCg==
B64EOF_apk_analyzer.py
chmod +x "$DECODE_DIR/apk_analyzer.py" 2>/dev/null

echo "恢复: apk_sign_patch.py ..."
base64 -d << 'B64EOF_apk_sign_patch.py' > "$DECODE_DIR/apk_sign_patch.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQVBL562+5ZCN6KGl5LiB5bel5YW3IHYxLjAK55So5rOVOgogIHB5dGhvbjMgYXBrX3NpZ25fcGF0Y2gucHkgPGFwa+aWh+S7tuaIlnNtYWxp55uu5b2VPiBb6YCJ6aG5XQogIHB5dGhvbjMgYXBrX3NpZ25fcGF0Y2gucHkgYXBwLmFwayAgICAgICAgICAgICAgIyDmiavmj4/nrb7lkI3pqozor4EKICBweXRob24zIGFwa19zaWduX3BhdGNoLnB5IGFwcC5hcGsgLS1wYXRjaCAgICAgICAjIOaJq+aPjyvmiZPooaXkuIEKICBweXRob24zIGFwa19zaWduX3BhdGNoLnB5IHNtYWxpX2Rpci8gLS1zY2FuICAgICAjIOWPquaJq+aPj3NtYWxp55uu5b2VCiAgcHl0aG9uMyBhcGtfc2lnbl9wYXRjaC5weSBhcHAuYXBrIC0tcmVwb3J0Lmpzb24gIyDovpPlh7pKU09O5oql5ZGKCgrlip/og706CiAgLSDmt7Hluqbmiavmj49BUEsvc21hbGnnm67lvZXkuK3nmoTnrb7lkI3pqozor4Hku6PnoIEKICAtIOajgOa1izE056eN562+5ZCN5qCh6aqM5qih5byP77yISmF2YeWxgitOYXRpdmXlsYIr5Y+N5bCE77yJCiAgLSDmo4DmtYtQTVMgaG9va+OAgVNpZ25hdHVyZSBraWxs562J6auY57qn57uV6L+H6ZyA5rGCCiAgLSDoh6rliqjnlJ/miJDooaXkuIHlu7rorq4KICAtIOWPr+mAieiHquWKqOW6lOeUqOihpeS4gQogIC0g6L6T5Ye66K+m57uG5oql5ZGK77yI5paH5pysL0pTT07vvIkKCuS+nei1ljog5peg77yI57qvUHl0aG9u5omr5o+P77yJ77yM5omT6KGl5LiB6ZyA6KaBYXBrdG9vbAoiIiIKCmltcG9ydCBvcywgc3lzLCByZSwganNvbiwgemlwZmlsZSwgc3VicHJvY2VzcywgdGVtcGZpbGUsIHNodXRpbApmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKCiMgPT09PT09PT09PSDnrb7lkI3pqozor4Hmo4DmtYvop4TliJkgPT09PT09PT09PQojICjop4TliJnlkI0sIOato+WImSwg5Lil6YeN57qn5YirLCDmj4/ov7ApCkRFVEVDVF9SVUxFUyA9IFsKICAgICMgPT09IEphdmHlsYLnrb7lkI3ojrflj5YgPT09CiAgICAoIkdFVF9TSUdOQVRVUkVTX0ZMQUciLCByJ2dldFBhY2thZ2VJbmZvLipHRVRfU0lHTkFUVVJFU3xHRVRfU0lHTkFUVVJFUy4qZ2V0UGFja2FnZUluZm8nLAogICAgICJISUdIIiwgIuS9v+eUqEdFVF9TSUdOQVRVUkVT5qCH5b+X6I635Y+W562+5ZCNIiksCiAgICAoIkdFVF9TSUdOSU5HX0NFUlRJRklDQVRFUyIsIHInZ2V0UGFja2FnZUluZm8uKkdFVF9TSUdOSU5HX0NFUlRJRklDQVRFU3wweDA4MDAwMDAwJywKICAgICAiSElHSCIsICLkvb/nlKhHRVRfU0lHTklOR19DRVJUSUZJQ0FURVPmoIflv5fojrflj5bnrb7lkI0oQW5kcm9pZCA5KykiKSwKICAgICgiUE1fR0VUX1NJR05BVFVSRVMiLCByJ1BhY2thZ2VNYW5hZ2VyOy0+R0VUX1NJR05BVFVSRVN8MHg0MCcsCiAgICAgIk1FRElVTSIsICJQYWNrYWdlTWFuYWdlci5HRVRfU0lHTkFUVVJFU+W4uOmHj+W8leeUqCIpLAoKICAgICMgPT09IOetvuWQjeavlOi+gyA9PT0KICAgICgiU0lHTkFUVVJFX0VRVUFMUyIsIHInc2lnbmF0dXJlLiplcXVhbHN8ZXF1YWxzLipzaWduYXR1cmUnLAogICAgICJISUdIIiwgIuetvuWQjWVxdWFsc+avlOi+gyIpLAogICAgKCJTSUdOQVRVUkVfSEFTSENPREUiLCByJ3NpZ25hdHVyZS4qaGFzaENvZGV8aGFzaENvZGUuKnNpZ25hdHVyZScsCiAgICAgIk1FRElVTSIsICLnrb7lkI1oYXNoQ29kZeavlOi+gyIpLAogICAgKCJTSUdOQVRVUkVfVE9CWVRFQVJSQVkiLCByJ3NpZ25hdHVyZS4qdG9CeXRlQXJyYXl8dG9DaGFyc1N0cmluZycsCiAgICAgIk1FRElVTSIsICLnrb7lkI3ovazlrZfoioIv5a2X56ym5Liy5q+U6L6DIiksCiAgICAoIk1ENV9TSEExX0NPTVBBUkUiLCByJ01lc3NhZ2VEaWdlc3QuKmdldEluc3RhbmNlLipNRDV8U0hBLTEuKnNpZ25hdHVyZXxzaGExLipzaWduJywKICAgICAiSElHSCIsICLnrb7lkI1NRDUvU0hBMeWTiOW4jOavlOi+gyIpLAoKICAgICMgPT09IOW4uOingeetvuWQjeagoemqjOexu+WQjSA9PT0KICAgICgiU0lHTkFUVVJFX1VUSUxfQ0xBU1MiLCByJ1NpZ25hdHVyZVV0aWx8U2lnbmF0dXJlQ2hlY2tlcnxTaWduQ2hlY2t8QXBwU2lnbkNoZWNrJywKICAgICAiSElHSCIsICLnrb7lkI3moKHpqozlt6XlhbfnsbsiKSwKICAgICgiSU5URUdSSVRZX0NIRUNLX0NMQVNTIiwgcidJbnRlZ3JpdHlDaGVja3xJbnRlZ3JpdHlWZXJpZmllcnxUYW1wZXJDaGVja3xUYW1wZXJEZXRlY3RvcicsCiAgICAgIkhJR0giLCAi5a6M5pW05oCn5qCh6aqM57G7IiksCiAgICAoIlNFQ1VSSVRZX0NIRUNLX0NMQVNTIiwgcidTZWN1cml0eUNoZWNrfFNlY3VyaXR5VmVyaWZpZXJ8UGFja2FnZVZlcmlmeXxBcHBWZXJpZnknLAogICAgICJNRURJVU0iLCAi5a6J5YWo6aqM6K+B57G7IiksCgogICAgIyA9PT0g5Y+N5bCE6I635Y+W562+5ZCNID09PQogICAgKCJSRUZMRUNUX1NJR05BVFVSRSIsIHIncmVmbGVjdC4qZ2V0UGFja2FnZUluZm98aW52b2tlLipnZXRQYWNrYWdlSW5mb3xyZWZsZWN0LipzaWduYXR1cmVzJywKICAgICAiSElHSCIsICLlj43lsITojrflj5bnrb7lkI3vvIjnu5Xov4fpnZnmgIHmo4DmtYvvvIkiKSwKICAgICgiUkVGTEVDVF9QTSIsIHIncmVmbGVjdC4qUGFja2FnZU1hbmFnZXJ8Q2xhc3MuKmZvck5hbWUuKmFuZHJvaWQuKmFwcCcsCiAgICAgIk1FRElVTSIsICLlj43lsITorr/pl65QYWNrYWdlTWFuYWdlciIpLAoKICAgICMgPT09IE5hdGl2ZeWxguetvuWQjeagoemqjCA9PT0KICAgICgiTkFUSVZFX1NJR05fQ0hFQ0siLCByJ25hdGl2ZS4qc2lnbmF0dXJlfG5hdGl2ZS4qdmVyaWZ5fG5hdGl2ZS4qY2hlY2t8Sk5JX09uTG9hZC4qc2lnbicsCiAgICAgIkhJR0giLCAiTmF0aXZl5bGC562+5ZCN5qCh6aqMIiksCiAgICAoIk5BVElWRV9MSUJfTE9BRCIsIHInU3lzdGVtXC5sb2FkTGlicmFyeS4qc2lnbnxTeXN0ZW1cLmxvYWRMaWJyYXJ5Lip2ZXJpZnl8U3lzdGVtXC5sb2FkTGlicmFyeS4qY2hlY2snLAogICAgICJNRURJVU0iLCAi5Yqg6L29562+5ZCN5qCh6aqMTmF0aXZl5bqTIiksCgogICAgIyA9PT0g56ys5LiJ5pa5562+5ZCN5qCh6aqMU0RLID09PQogICAgKCIzNjBfSklBR1UiLCByJ3FpaG9vfGppYWd1fDM2MC4qcHJvdGVjdCcsCiAgICAgIklORk8iLCAiMzYw5Yqg5Zu6562+5ZCN5qCh6aqMIiksCiAgICAoIkJBTkdDTEUiLCByJ2JhbmdjbGV8c2VjbmVvJywKICAgICAiSU5GTyIsICLmoobmoobliqDlm7rnrb7lkI3moKHpqowiKSwKICAgICgiVEVOQ0VOVF9MRUdVIiwgcid0ZW5jZW50LipsZWd1fHNoZWxsLipsZWd1JywKICAgICAiSU5GTyIsICLohb7orq/kuZDlm7rnrb7lkI3moKHpqowiKSwKXQoKIyA9PT09PT09PT09IOihpeS4geaooeadvyA9PT09PT09PT09ClBBVENIX1RFTVBMQVRFUyA9IHsKICAgICMg5pa55rOV5ZCN5qih5byPIC0+ICjov5Tlm57nsbvlnossIOihpeS4geWAvCwg5o+P6L+wKQogICAgcidjaGVja1NpZ25hdHVyZXx2ZXJpZnlTaWduYXR1cmV8Y2hlY2tTaWdufGlzU2lnbmF0dXJlVmFsaWR8dmFsaWRhdGVTaWduYXR1cmUnOgogICAgICAgICgiWiIsICJjb25zdC80IHYwLCAweDFcbiAgICByZXR1cm4gdjAiLCAi6L+U5ZuedHJ1Ze+8iOetvuWQjeacieaViO+8iSIpLAogICAgcidnZXRTaWduYXR1cmV8Z2V0U2lnbmF0dXJlcyc6CiAgICAgICAgKCJMYW5kcm9pZC9jb250ZW50L3BtL1NpZ25hdHVyZTsiLCAiY29uc3QvNCB2MCwgMHgwXG4gICAgcmV0dXJuLW9iamVjdCB2MCIsICLov5Tlm55udWxs77yI5peg562+5ZCN77yJIiksCiAgICByJ2NoZWNrSW50ZWdyaXR5fHZlcmlmeUludGVncml0eXxpc0ludGVncml0eVZhbGlkJzoKICAgICAgICAoIloiLCAiY29uc3QvNCB2MCwgMHgxXG4gICAgcmV0dXJuIHYwIiwgIui/lOWbnnRydWXvvIjlrozmlbTmgKfpgJrov4fvvIkiKSwKICAgIHInaXNUYW1wZXJlZHx0YW1wZXJDaGVja3xpc01vZGlmaWVkJzoKICAgICAgICAoIloiLCAiY29uc3QvNCB2MCwgMHgwXG4gICAgcmV0dXJuIHYwIiwgIui/lOWbnmZhbHNl77yI5pyq56+h5pS577yJIiksCiAgICByJ2NoZWNrUGFja2FnZVNpZ258dmVyaWZ5UGFja2FnZVNpZ24nOgogICAgICAgICgiWiIsICJjb25zdC80IHYwLCAweDFcbiAgICByZXR1cm4gdjAiLCAi6L+U5ZuedHJ1Ze+8iOWMheetvuWQjeWMuemFje+8iSIpLAp9CgoKY2xhc3MgQXBrU2lnblBhdGNoOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhcmdldCwgbW9kZT0ic2NhbiIpOgogICAgICAgIHNlbGYudGFyZ2V0ID0gb3MucGF0aC5hYnNwYXRoKHRhcmdldCkKICAgICAgICBzZWxmLm1vZGUgPSBtb2RlICAjIHNjYW4sIHBhdGNoLCBib3RoCiAgICAgICAgc2VsZi5maW5kaW5ncyA9IFtdCiAgICAgICAgc2VsZi5wYXRjaGVzID0gW10KICAgICAgICBzZWxmLnNtYWxpX2RpciA9IE5vbmUKICAgICAgICBzZWxmLnRlbXBfZGlyID0gTm9uZQoKICAgIGRlZiBsb2coc2VsZiwgbXNnKToKICAgICAgICBwcmludChmIiAgWypdIHttc2d9IikKCiAgICBkZWYgb2soc2VsZiwgbXNnKToKICAgICAgICBwcmludChmIiAgWytdIHttc2d9IikKCiAgICBkZWYgd2FybihzZWxmLCBtc2cpOgogICAgICAgIHByaW50KGYiICBbIV0ge21zZ30iKQoKICAgIGRlZiBlcnIoc2VsZiwgbXNnKToKICAgICAgICBwcmludChmIiAgWy1dIHttc2d9IikKCiAgICBkZWYgaXNfYXBrKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5lbmRzd2l0aCgiLmFwayIpIG9yIChvcy5wYXRoLmlzZmlsZShzZWxmLnRhcmdldCkgYW5kCiAgICAgICAgICAgICAgICB6aXBmaWxlLmlzX3ppcGZpbGUoc2VsZi50YXJnZXQpKQoKICAgIGRlZiBpc19zbWFsaV9kaXIoc2VsZik6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNkaXIoc2VsZi50YXJnZXQpCgogICAgZGVmIGRlY29tcGlsZV9pZl9uZWVkZWQoc2VsZik6CiAgICAgICAgIiIi5aaC5p6c5pivQVBL5YWI5Y+N57yW6K+RIiIiCiAgICAgICAgaWYgc2VsZi5pc19zbWFsaV9kaXIoKToKICAgICAgICAgICAgc2VsZi5zbWFsaV9kaXIgPSBzZWxmLnRhcmdldAogICAgICAgICAgICBzZWxmLm9rKGYi5L2/55So546w5pyJc21hbGnnm67lvZU6IHtzZWxmLnNtYWxpX2Rpcn0iKQogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBpZiBub3Qgc2VsZi5pc19hcGsoKToKICAgICAgICAgICAgc2VsZi5lcnIoZiLnm67moIfkuI3mmK9BUEvkuZ/kuI3mmK9zbWFsaeebruW9lToge3NlbGYudGFyZ2V0fSIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICBzZWxmLnRlbXBfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9InNpZ25fcGF0Y2hfIikKICAgICAgICBzZWxmLnNtYWxpX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCAic21hbGlfb3V0IikKICAgICAgICBzZWxmLmxvZyhmIuWPjee8luivkUFQS+WIsDoge3NlbGYuc21hbGlfZGlyfSIpCiAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oCiAgICAgICAgICAgIGYiYXBrdG9vbCBkIC1mIC1vIHtzZWxmLnNtYWxpX2Rpcn0ge3NlbGYudGFyZ2V0fSIsCiAgICAgICAgICAgIHNoZWxsPVRydWUsIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRleHQ9VHJ1ZQogICAgICAgICkKICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZSAhPSAwOgogICAgICAgICAgICBzZWxmLmVycigi5Y+N57yW6K+R5aSx6LSlIikKICAgICAgICAgICAgcHJpbnQoZiIgICAge3Jlc3VsdC5zdGRlcnJbOjMwMF19IikKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgc2VsZi5vaygi5Y+N57yW6K+R5a6M5oiQIikKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBzY2FuX3NtYWxpKHNlbGYpOgogICAgICAgICIiIuaJq+aPj+aJgOaciXNtYWxp5paH5Lu2IiIiCiAgICAgICAgcHJpbnQoIlxuW+aJq+aPj10g5pCc57Si562+5ZCN6aqM6K+B5Luj56CBLi4uIikKCiAgICAgICAgc21hbGlfZGlycyA9IFtdCiAgICAgICAgZm9yIGl0ZW0gaW4gb3MubGlzdGRpcihzZWxmLnNtYWxpX2Rpcik6CiAgICAgICAgICAgIGlmIGl0ZW0uc3RhcnRzd2l0aCgic21hbGkiKSBhbmQgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5zbWFsaV9kaXIsIGl0ZW0pKToKICAgICAgICAgICAgICAgIHNtYWxpX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzZWxmLnNtYWxpX2RpciwgaXRlbSkpCgogICAgICAgIGlmIG5vdCBzbWFsaV9kaXJzOgogICAgICAgICAgICBzbWFsaV9kaXJzID0gW3NlbGYuc21hbGlfZGlyXQoKICAgICAgICB0b3RhbF9maWxlcyA9IDAKICAgICAgICBmb3Igc21hbGlfcm9vdCBpbiBzbWFsaV9kaXJzOgogICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzbWFsaV9yb290KToKICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRoKCIuc21hbGkiKToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICB0b3RhbF9maWxlcyArPSAxCiAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKCiAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIiwgZXJyb3JzPSJpZ25vcmUiKSBhcyBmaDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBmaC5yZWFkKCkKICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgICAgIGZvciBydWxlX25hbWUsIHBhdHRlcm4sIHNldmVyaXR5LCBkZXNjIGluIERFVEVDVF9SVUxFUzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHBhdHRlcm4sIGNvbnRlbnQsIHJlLklHTk9SRUNBU0UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZmlsZXBhdGgsIHNlbGYuc21hbGlfZGlyKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg5o+Q5Y+W5Yy56YWN6KGMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9saW5lcyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoY29udGVudC5zcGxpdCgiXG4iKSwgMSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHBhdHRlcm4sIGxpbmUsIHJlLklHTk9SRUNBU0UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9saW5lcy5hcHBlbmQoZiIgIEx7aX06IHtsaW5lLnN0cmlwKClbOjEwMF19IikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmRpbmdzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ1bGUiOiBydWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldmVyaXR5Ijogc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6IHJlbF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogZmlsZXBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdGNoZXMiOiBtYXRjaF9saW5lc1s6M10KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCgogICAgICAgIHNlbGYub2soZiLmiavmj4/lrozmiJA6IHt0b3RhbF9maWxlc30g5Liqc21hbGnmlofku7YsIOWPkeeOsCB7bGVuKHNlbGYuZmluZGluZ3MpfSDlpITljLnphY0iKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGdlbmVyYXRlX3BhdGNoZXMoc2VsZik6CiAgICAgICAgIiIi55Sf5oiQ6KGl5LiB5bu66K6uIiIiCiAgICAgICAgcHJpbnQoIlxuW+WIhuaekF0g55Sf5oiQ6KGl5LiB5bu66K6uLi4uIikKCiAgICAgICAgIyDmjInmlofku7bljrvph40KICAgICAgICB1bmlxdWVfZmlsZXMgPSB7fQogICAgICAgIGZvciBmIGluIHNlbGYuZmluZGluZ3M6CiAgICAgICAgICAgIGlmIGZbInNldmVyaXR5Il0gaW4gKCJISUdIIiwgIk1FRElVTSIpOgogICAgICAgICAgICAgICAgaWYgZlsicGF0aCJdIG5vdCBpbiB1bmlxdWVfZmlsZXM6CiAgICAgICAgICAgICAgICAgICAgdW5pcXVlX2ZpbGVzW2ZbInBhdGgiXV0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogZlsiZmlsZSJdLAogICAgICAgICAgICAgICAgICAgICAgICAicnVsZXMiOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiBmWyJwYXRoIl0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bmlxdWVfZmlsZXNbZlsicGF0aCJdXVsicnVsZXMiXS5hcHBlbmQoZlsicnVsZSJdKQoKICAgICAgICBmb3IgZmlsZXBhdGgsIGluZm8gaW4gdW5pcXVlX2ZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiLCBlcnJvcnM9Imlnbm9yZSIpIGFzIGZoOgogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBmaC5yZWFkKCkKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICMg5p+l5om+5Y+v6KGl5LiB55qE5pa55rOVCiAgICAgICAgICAgIG1ldGhvZHNfcGF0Y2hlZCA9IFtdCiAgICAgICAgICAgIGZvciBwYXR0ZXJuLCAocmV0X3R5cGUsIHBhdGNoX2JvZHksIGRlc2MpIGluIFBBVENIX1RFTVBMQVRFUy5pdGVtcygpOgogICAgICAgICAgICAgICAgIyDljLnphY3mlrnms5XlkI0KICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lcyA9IHJlLmZpbmRhbGwocmYnXC5tZXRob2RccysoPzpwdWJsaWN8cHJpdmF0ZXxwcm90ZWN0ZWR8c3RhdGljfGZpbmFsKSpccysoe3BhdHRlcm59KVxzKlwoJywgY29udGVudCwgcmUuSUdOT1JFQ0FTRSkKICAgICAgICAgICAgICAgIGZvciBtZXRob2RfbmFtZSBpbiBzZXQobWV0aG9kX25hbWVzKToKICAgICAgICAgICAgICAgICAgICBtZXRob2RzX3BhdGNoZWQuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGhvZCI6IG1ldGhvZF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuX3R5cGUiOiByZXRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGNoX2JvZHkiOiBwYXRjaF9ib2R5LAogICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiBkZXNjCiAgICAgICAgICAgICAgICAgICAgfSkKCiAgICAgICAgICAgIGlmIG1ldGhvZHNfcGF0Y2hlZDoKICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICJmaWxlIjogaW5mb1siZmlsZSJdLAogICAgICAgICAgICAgICAgICAgICJwYXRoIjogZmlsZXBhdGgsCiAgICAgICAgICAgICAgICAgICAgInJ1bGVzIjogaW5mb1sicnVsZXMiXSwKICAgICAgICAgICAgICAgICAgICAibWV0aG9kcyI6IG1ldGhvZHNfcGF0Y2hlZAogICAgICAgICAgICAgICAgfSkKCiAgICAgICAgaWYgc2VsZi5wYXRjaGVzOgogICAgICAgICAgICBzZWxmLm9rKGYi55Sf5oiQIHtsZW4oc2VsZi5wYXRjaGVzKX0g5Liq5paH5Lu255qE6KGl5LiB5bu66K6uIikKICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5wYXRjaGVzOgogICAgICAgICAgICAgICAgcHJpbnQoZiIgICAge3BbJ2ZpbGUnXX0iKQogICAgICAgICAgICAgICAgZm9yIG0gaW4gcFsibWV0aG9kcyJdOgogICAgICAgICAgICAgICAgICAgIHByaW50KGYiICAgICAgLT4ge21bJ21ldGhvZCddfSgpOiB7bVsnZGVzY3JpcHRpb24nXX0iKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYud2Fybigi5pyq5om+5Yiw5Y+v6Ieq5Yqo6KGl5LiB55qE5pa55rOV77yI5Y+v6IO96ZyA6KaB5omL5Yqo5L+u5pS577yJIikKCiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgYXBwbHlfcGF0Y2hlcyhzZWxmKToKICAgICAgICAiIiLlupTnlKjooaXkuIEiIiIKICAgICAgICBwcmludCgiXG5b6KGl5LiBXSDlupTnlKjooaXkuIEuLi4iKQoKICAgICAgICBjb3VudCA9IDAKICAgICAgICBmb3IgcGF0Y2ggaW4gc2VsZi5wYXRjaGVzOgogICAgICAgICAgICBmaWxlcGF0aCA9IHBhdGNoWyJwYXRoIl0KICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIsIGVycm9ycz0iaWdub3JlIikgYXMgZmg6CiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGZoLnJlYWQoKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgb3JpZ2luYWwgPSBjb250ZW50CiAgICAgICAgICAgIGZvciBtZXRob2RfaW5mbyBpbiBwYXRjaFsibWV0aG9kcyJdOgogICAgICAgICAgICAgICAgbWV0aG9kX25hbWUgPSBtZXRob2RfaW5mb1sibWV0aG9kIl0KICAgICAgICAgICAgICAgIHBhdGNoX2JvZHkgPSBtZXRob2RfaW5mb1sicGF0Y2hfYm9keSJdCgogICAgICAgICAgICAgICAgIyDljLnphY3lrozmlbTmlrnms5UKICAgICAgICAgICAgICAgIG1ldGhvZF9yZSA9IHJmJyhcLm1ldGhvZFxzK1teXG5dKlxie21ldGhvZF9uYW1lfVxzKlwoW14pXSpcKVteXG5dKlxuKScKICAgICAgICAgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKG1ldGhvZF9yZSwgY29udGVudCkKICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIG1ldGhvZF9kZWNsID0gbWF0Y2guZ3JvdXAoMSkKCiAgICAgICAgICAgICAgICAjIOaJvuWIsOaWueazleS9k+e7k+adnwogICAgICAgICAgICAgICAgZW5kX21hdGNoID0gcmUuc2VhcmNoKHInXC5lbmQgbWV0aG9kJywgY29udGVudFttYXRjaC5lbmQoKTpdKQogICAgICAgICAgICAgICAgaWYgbm90IGVuZF9tYXRjaDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIG1ldGhvZF9lbmQgPSBtYXRjaC5lbmQoKSArIGVuZF9tYXRjaC5zdGFydCgpCiAgICAgICAgICAgICAgICBvbGRfYm9keSA9IGNvbnRlbnRbbWF0Y2guZW5kKCk6bWV0aG9kX2VuZF0KCiAgICAgICAgICAgICAgICAjIOabv+aNouaWueazleS9kwogICAgICAgICAgICAgICAgbmV3X2JvZHkgPSBmIlxuICAgIC5sb2NhbHMgMVxuICAgIHtwYXRjaF9ib2R5fVxuIgogICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnRbOm1hdGNoLmVuZCgpXSArIG5ld19ib2R5ICsgY29udGVudFttZXRob2RfZW5kOl0KICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKCiAgICAgICAgICAgIGlmIGNvbnRlbnQgIT0gb3JpZ2luYWw6CiAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJ3IikgYXMgZmg6CiAgICAgICAgICAgICAgICAgICAgZmgud3JpdGUoY29udGVudCkKCiAgICAgICAgaWYgY291bnQgPiAwOgogICAgICAgICAgICBzZWxmLm9rKGYi5oiQ5Yqf5bqU55SoIHtjb3VudH0g5Liq6KGl5LiBIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLndhcm4oIuayoeacieiHquWKqOW6lOeUqOS7u+S9leihpeS4gSIpCiAgICAgICAgcmV0dXJuIGNvdW50CgogICAgZGVmIHByaW50X3JlcG9ydChzZWxmKToKICAgICAgICAiIiLmiZPljbDmiqXlkYoiIiIKICAgICAgICBwcmludCgiXG4iICsgIj0iICogNjApCiAgICAgICAgcHJpbnQoIiAgQVBL562+5ZCN6aqM6K+B5qOA5rWL5oql5ZGKIikKICAgICAgICBwcmludCgiPSIgKiA2MCkKCiAgICAgICAgaWYgbm90IHNlbGYuZmluZGluZ3M6CiAgICAgICAgICAgIHByaW50KCJcbiAg5pyq5Y+R546w562+5ZCN6aqM6K+B5Luj56CBIikKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICMg5oyJ5Lil6YeN57qn5Yir57uf6K6hCiAgICAgICAgc2V2ZXJpdHlfY291bnQgPSB7fQogICAgICAgIGZvciBmIGluIHNlbGYuZmluZGluZ3M6CiAgICAgICAgICAgIHNldiA9IGZbInNldmVyaXR5Il0KICAgICAgICAgICAgc2V2ZXJpdHlfY291bnRbc2V2XSA9IHNldmVyaXR5X2NvdW50LmdldChzZXYsIDApICsgMQoKICAgICAgICBwcmludChmIlxuICDmiavmj4/nu5Pmnpw6IHtsZW4oc2VsZi5maW5kaW5ncyl9IOWkhOWMuemFjSIpCiAgICAgICAgZm9yIHNldiBpbiBbIkhJR0giLCAiTUVESVVNIiwgIklORk8iXToKICAgICAgICAgICAgaWYgc2V2IGluIHNldmVyaXR5X2NvdW50OgogICAgICAgICAgICAgICAgaWNvbiA9IHsiSElHSCI6ICIhISEiLCAiTUVESVVNIjogIiEhIiwgIklORk8iOiAiaSJ9W3Nldl0KICAgICAgICAgICAgICAgIHByaW50KGYiICAgIFt7aWNvbn1dIHtzZXZ9OiB7c2V2ZXJpdHlfY291bnRbc2V2XX0g5aSEIikKCiAgICAgICAgIyDmjInmlofku7bliIbnu4TmmL7npLoKICAgICAgICBmaWxlX2ZpbmRpbmdzID0ge30KICAgICAgICBmb3IgZiBpbiBzZWxmLmZpbmRpbmdzOgogICAgICAgICAgICBpZiBmWyJmaWxlIl0gbm90IGluIGZpbGVfZmluZGluZ3M6CiAgICAgICAgICAgICAgICBmaWxlX2ZpbmRpbmdzW2ZbImZpbGUiXV0gPSBbXQogICAgICAgICAgICBmaWxlX2ZpbmRpbmdzW2ZbImZpbGUiXV0uYXBwZW5kKGYpCgogICAgICAgIHByaW50KGYiXG4gIOa2ieWPiuaWh+S7tjoge2xlbihmaWxlX2ZpbmRpbmdzKX0g5LiqIikKICAgICAgICBwcmludCgiLSIgKiA2MCkKICAgICAgICBmb3IgZmlsZXBhdGgsIGZpbmRpbmdzIGluIHNvcnRlZChmaWxlX2ZpbmRpbmdzLml0ZW1zKCkpOgogICAgICAgICAgICBwcmludChmIlxuICB7ZmlsZXBhdGh9IikKICAgICAgICAgICAgZm9yIGYgaW4gZmluZGluZ3M6CiAgICAgICAgICAgICAgICBwcmludChmIiAgICBbe2ZbJ3NldmVyaXR5J119XSB7ZlsncnVsZSddfToge2ZbJ2Rlc2NyaXB0aW9uJ119IikKICAgICAgICAgICAgICAgIGZvciBtYXRjaCBpbiBmWyJtYXRjaGVzIl06CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiIgICAge21hdGNofSIpCgogICAgICAgIGlmIHNlbGYucGF0Y2hlczoKICAgICAgICAgICAgcHJpbnQoZiJcbiAg6KGl5LiB5bu66K6uOiB7bGVuKHNlbGYucGF0Y2hlcyl9IOS4quaWh+S7tiIpCiAgICAgICAgICAgIHByaW50KCItIiAqIDYwKQogICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnBhdGNoZXM6CiAgICAgICAgICAgICAgICBwcmludChmIlxuICB7cFsnZmlsZSddfSIpCiAgICAgICAgICAgICAgICBmb3IgbSBpbiBwWyJtZXRob2RzIl06CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiIgICAge21bJ21ldGhvZCddfSgpIC0+IHttWydkZXNjcmlwdGlvbiddfSIpCgogICAgICAgIHByaW50KCJcbiIgKyAiPSIgKiA2MCkKCiAgICBkZWYgZXhwb3J0X2pzb24oc2VsZiwgb3V0cHV0X3BhdGgpOgogICAgICAgICIiIuWvvOWHukpTT07miqXlkYoiIiIKICAgICAgICByZXBvcnQgPSB7CiAgICAgICAgICAgICJ0YXJnZXQiOiBzZWxmLnRhcmdldCwKICAgICAgICAgICAgImZpbmRpbmdzX2NvdW50IjogbGVuKHNlbGYuZmluZGluZ3MpLAogICAgICAgICAgICAiZmluZGluZ3MiOiBzZWxmLmZpbmRpbmdzLAogICAgICAgICAgICAicGF0Y2hlc19jb3VudCI6IGxlbihzZWxmLnBhdGNoZXMpLAogICAgICAgICAgICAicGF0Y2hlcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZmlsZSI6IHBbImZpbGUiXSwKICAgICAgICAgICAgICAgICAgICAibWV0aG9kcyI6IHBbIm1ldGhvZHMiXSwKICAgICAgICAgICAgICAgICAgICAicnVsZXMiOiBwWyJydWxlcyJdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnBhdGNoZXMKICAgICAgICAgICAgXQogICAgICAgIH0KICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgsICJ3IiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAganNvbi5kdW1wKHJlcG9ydCwgZiwgZW5zdXJlX2FzY2lpPUZhbHNlLCBpbmRlbnQ9MikKICAgICAgICBzZWxmLm9rKGYiSlNPTuaKpeWRijoge291dHB1dF9wYXRofSIpCgogICAgZGVmIGNsZWFudXAoc2VsZik6CiAgICAgICAgaWYgc2VsZi50ZW1wX2RpcjoKICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlbXBfZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCgogICAgZGVmIHJ1bihzZWxmLCBqc29uX291dHB1dD1Ob25lKToKICAgICAgICAiIiLmiafooYzmiavmj48v6KGl5LiBIiIiCiAgICAgICAgcHJpbnQoIj0iICogNjApCiAgICAgICAgcHJpbnQoIiAgQVBL562+5ZCN6KGl5LiB5bel5YW3IHYxLjAiKQogICAgICAgIHByaW50KGYiICDnm67moIc6IHtzZWxmLnRhcmdldH0iKQogICAgICAgIHByaW50KGYiICDmqKHlvI86IHtzZWxmLm1vZGV9IikKICAgICAgICBwcmludCgiPSIgKiA2MCkKCiAgICAgICAgIyDlj43nvJbor5HvvIjlpoLmnpzpnIDopoHvvIkKICAgICAgICBpZiBub3Qgc2VsZi5kZWNvbXBpbGVfaWZfbmVlZGVkKCk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICAjIOaJq+aPjwogICAgICAgIGlmIG5vdCBzZWxmLnNjYW5fc21hbGkoKToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICMg55Sf5oiQ6KGl5LiB5bu66K6uCiAgICAgICAgc2VsZi5nZW5lcmF0ZV9wYXRjaGVzKCkKCiAgICAgICAgIyDmiZPljbDmiqXlkYoKICAgICAgICBzZWxmLnByaW50X3JlcG9ydCgpCgogICAgICAgICMg5bqU55So6KGl5LiBCiAgICAgICAgaWYgc2VsZi5tb2RlIGluICgicGF0Y2giLCAiYm90aCIpIGFuZCBzZWxmLnBhdGNoZXM6CiAgICAgICAgICAgIHNlbGYuYXBwbHlfcGF0Y2hlcygpCgogICAgICAgICMg5a+85Ye6SlNPTgogICAgICAgIGlmIGpzb25fb3V0cHV0OgogICAgICAgICAgICBzZWxmLmV4cG9ydF9qc29uKGpzb25fb3V0cHV0KQoKICAgICAgICBzZWxmLmNsZWFudXAoKQogICAgICAgIHJldHVybiBUcnVlCgoKZGVmIG1haW4oKToKICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgogICAgICAgIHByaW50KCLnlKjms5U6IHB5dGhvbjMgYXBrX3NpZ25fcGF0Y2gucHkgPGFwa+aIlnNtYWxp55uu5b2VPiBb6YCJ6aG5XSIpCiAgICAgICAgcHJpbnQoIiIpCiAgICAgICAgcHJpbnQoIumAiemhuToiKQogICAgICAgIHByaW50KCIgIC0tc2NhbiAgICAgICDlj6rmiavmj4/vvIzkuI3ooaXkuIHvvIjpu5jorqTvvIkiKQogICAgICAgIHByaW50KCIgIC0tcGF0Y2ggICAgICDmiavmj48r6Ieq5Yqo6KGl5LiBIikKICAgICAgICBwcmludCgiICAtLXJlcG9ydC5qc29uICDovpPlh7pKU09O5oql5ZGK5Yiw5oyH5a6a5paH5Lu2IikKICAgICAgICBwcmludCgiIikKICAgICAgICBwcmludCgi56S65L6LOiIpCiAgICAgICAgcHJpbnQoIiAgcHl0aG9uMyBhcGtfc2lnbl9wYXRjaC5weSBhcHAuYXBrICAgICAgICAgICAgICAgICAgICAjIOaJq+aPj+etvuWQjemqjOivgSIpCiAgICAgICAgcHJpbnQoIiAgcHl0aG9uMyBhcGtfc2lnbl9wYXRjaC5weSBhcHAuYXBrIC0tcGF0Y2ggICAgICAgICAgICAgIyDmiavmj48r5omT6KGl5LiBIikKICAgICAgICBwcmludCgiICBweXRob24zIGFwa19zaWduX3BhdGNoLnB5IHNtYWxpX291dC8gLS1zY2FuICAgICAgICAgICAjIOaJq+aPj3NtYWxp55uu5b2VIikKICAgICAgICBwcmludCgiICBweXRob24zIGFwa19zaWduX3BhdGNoLnB5IGFwcC5hcGsgLS1yZXBvcnQuanNvbiByZXAgICAjIOi+k+WHukpTT07miqXlkYoiKQogICAgICAgIHN5cy5leGl0KDEpCgogICAgdGFyZ2V0ID0gc3lzLmFyZ3ZbMV0KICAgIG1vZGUgPSAic2NhbiIKICAgIGpzb25fb3V0cHV0ID0gTm9uZQoKICAgIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMjpdOgogICAgICAgIGlmIGFyZyA9PSAiLS1zY2FuIjoKICAgICAgICAgICAgbW9kZSA9ICJzY2FuIgogICAgICAgIGVsaWYgYXJnID09ICItLXBhdGNoIjoKICAgICAgICAgICAgbW9kZSA9ICJwYXRjaCIKICAgICAgICBlbGlmIGFyZyA9PSAiLS1ib3RoIjoKICAgICAgICAgICAgbW9kZSA9ICJib3RoIgogICAgICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGgoIi0tcmVwb3J0Iik6CiAgICAgICAgICAgIGlmICI9IiBpbiBhcmc6CiAgICAgICAgICAgICAgICBqc29uX291dHB1dCA9IGFyZy5zcGxpdCgiPSIsIDEpWzFdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBqc29uX291dHB1dCA9ICJzaWduX3BhdGNoX3JlcG9ydC5qc29uIgoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXQpOgogICAgICAgIHByaW50KGYi6ZSZ6K+vOiDot6/lvoTkuI3lrZjlnKg6IHt0YXJnZXR9IikKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIHRvb2wgPSBBcGtTaWduUGF0Y2godGFyZ2V0LCBtb2RlKQogICAgc3VjY2VzcyA9IHRvb2wucnVuKGpzb25fb3V0cHV0KQogICAgc3lzLmV4aXQoMCBpZiBzdWNjZXNzIGVsc2UgMSkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCg==
B64EOF_apk_sign_patch.py
chmod +x "$DECODE_DIR/apk_sign_patch.py" 2>/dev/null

echo "恢复: auto_sign_patch.py ..."
base64 -d << 'B64EOF_auto_sign_patch.py' > "$DECODE_DIR/auto_sign_patch.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIK6Ieq5Yqo562+5ZCN5omT6KGl5LiB5bel5YW3IHYxLjAK55So5rOVOgogIHB5dGhvbjMgYXV0b19zaWduX3BhdGNoLnB5IDxhcGvmlofku7Y+IFvovpPlh7phcGtdCiAgcHl0aG9uMyBhdXRvX3NpZ25fcGF0Y2gucHkgYXBwLmFwawogIHB5dGhvbjMgYXV0b19zaWduX3BhdGNoLnB5IGFwcC5hcGsgb3V0cHV0LmFwawoK5Yqf6IO9OgogIC0g6Ieq5Yqo5Y+N57yW6K+RQVBLIChhcGt0b29sIGQpCiAgLSDmiavmj49zbWFsaeS4reeahOetvuWQjemqjOivgeS7o+eggQogIC0g6Ieq5Yqo5omT6KGl5LiB57uV6L+H562+5ZCN5qCh6aqMCiAgLSDph43mlrDmiZPljIUgKGFwa3Rvb2wgYikKICAtIHppcGFsaWdu5a+56b2QCiAgLSBhcGtzaWduZXLnrb7lkI0gKHYxK3YyK3YzKQogIC0g5YWo5rWB56iL5LiA6ZSu5a6M5oiQCgrkvp3otZY6IGFwa3Rvb2wsIHppcGFsaWduLCBhcGtzaWduZXIsIGtleXRvb2wKIiIiCgppbXBvcnQgb3MsIHN5cywgcmUsIHN1YnByb2Nlc3MsIHNodXRpbCwgdGVtcGZpbGUsIGpzb24sIHRpbWUKCiMgPT09PT09PT09PSDphY3nva4gPT09PT09PT09PQpBUEtUT09MID0gImFwa3Rvb2wiClpJUEFMSUdOID0gInppcGFsaWduIgpBUEtTSUdORVIgPSAiYXBrc2lnbmVyIgpLRVlUT09MID0gImtleXRvb2wiCgpERUZBVUxUX0tFWVNUT1JFID0gIi9kYXRhL3VzZXIvd29yay9zaWduX2tleXN0b3JlLmprcyIKREVGQVVMVF9BTElBUyA9ICJhdXRvc2lnbiIKREVGQVVMVF9QQVNTID0gImF1dG9zaWduIgoKIyDnrb7lkI3pqozor4HlhbPplK7or43vvIhzbWFsaeWxgu+8iQpTSUdOX1ZFUklGWV9QQVRURVJOUyA9IFsKICAgICMgUGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZUluZm8g5bimIEdFVF9TSUdOQVRVUkVTCiAgICByJ2dldFBhY2thZ2VJbmZvLipHRVRfU0lHTkFUVVJFUycsCiAgICByJ2dldFBhY2thZ2VJbmZvLioweDQwJywKICAgICMg562+5ZCN5q+U6L6DCiAgICByJ1BhY2thZ2VNYW5hZ2VyLipHRVRfU0lHTkFUVVJFUycsCiAgICByJ3NpZ25hdHVyZS4qZXF1YWxzJywKICAgIHInc2lnbmF0dXJlLipoYXNoQ29kZScsCiAgICByJ2dldFNpZ25hdHVyZXNBcnJheScsCiAgICByJ3BhY2thZ2VJbmZvXC5zaWduYXR1cmVzJywKICAgIHInIEJpbmRlcjstPmdldENhbGxpbmdVaWQnLAogICAgIyDluLjop4Hnrb7lkI3moKHpqoznsbsKICAgIHInU2lnbmF0dXJlVXRpbCcsCiAgICByJ1NpZ25hdHVyZUNoZWNrZXInLAogICAgcidTaWduQ2hlY2snLAogICAgcidBcHBTaWduQ2hlY2snLAogICAgcidQYWNrYWdlVmVyaWZ5JywKICAgIHInU2VjdXJpdHlDaGVjaycsCiAgICByJ0ludGVncml0eUNoZWNrJywKICAgICMg5Y+N5bCE6I635Y+W562+5ZCNCiAgICByJ3JlZmxlY3QuKmdldFBhY2thZ2VJbmZvJywKICAgIHIncmVmbGVjdC4qc2lnbmF0dXJlcycsCl0KCiMg5a6J5YWo55qE6KGl5LiB5qih5byP77ya5Y+q5L+u5pS56L+U5Zue5YC877yM5LiN5Yig5pa55rOV5L2TClNBRkVfUEFUQ0hFUyA9IHsKICAgICMg5pa55rOV5ZCNIC0+IOihpeS4geWQjueahOaWueazleS9kwogICAgImNoZWNrU2lnbmF0dXJlIjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MVxuICAgIHJldHVybiB2MCIsCiAgICAidmVyaWZ5U2lnbmF0dXJlIjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MVxuICAgIHJldHVybiB2MCIsCiAgICAiY2hlY2tTaWduIjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MVxuICAgIHJldHVybiB2MCIsCiAgICAiaXNTaWduYXR1cmVWYWxpZCI6ICIubG9jYWxzIDFcbiAgICBjb25zdC80IHYwLCAweDFcbiAgICByZXR1cm4gdjAiLAogICAgInZhbGlkYXRlU2lnbmF0dXJlIjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MVxuICAgIHJldHVybiB2MCIsCiAgICAiZ2V0U2lnbmF0dXJlIjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MFxuICAgIHJldHVybi1vYmplY3QgdjAiLAogICAgImNoZWNrSW50ZWdyaXR5IjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MVxuICAgIHJldHVybiB2MCIsCiAgICAidmVyaWZ5SW50ZWdyaXR5IjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MVxuICAgIHJldHVybiB2MCIsCiAgICAidGFtcGVyQ2hlY2siOiAiLmxvY2FscyAxXG4gICAgY29uc3QvNCB2MCwgMHgwXG4gICAgcmV0dXJuIHYwIiwKICAgICJpc1RhbXBlcmVkIjogIi5sb2NhbHMgMVxuICAgIGNvbnN0LzQgdjAsIDB4MFxuICAgIHJldHVybiB2MCIsCn0KCgpjbGFzcyBBdXRvU2lnblBhdGNoOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwa19wYXRoLCBvdXRwdXRfcGF0aD1Ob25lKToKICAgICAgICBzZWxmLmFwa19wYXRoID0gb3MucGF0aC5hYnNwYXRoKGFwa19wYXRoKQogICAgICAgIHNlbGYub3V0cHV0X3BhdGggPSBvdXRwdXRfcGF0aCBvciBhcGtfcGF0aC5yZXBsYWNlKCIuYXBrIiwgIl9zaWduZWQuYXBrIikKICAgICAgICBzZWxmLndvcmtfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9ImF1dG9fc2lnbl8iKQogICAgICAgIHNlbGYuc21hbGlfZGlyID0gb3MucGF0aC5qb2luKHNlbGYud29ya19kaXIsICJzbWFsaV9vdXQiKQogICAgICAgIHNlbGYua2V5c3RvcmUgPSBERUZBVUxUX0tFWVNUT1JFCiAgICAgICAgc2VsZi5hbGlhcyA9IERFRkFVTFRfQUxJQVMKICAgICAgICBzZWxmLnBhc3N3b3JkID0gREVGQVVMVF9QQVNTCiAgICAgICAgc2VsZi5wYXRjaGVzX2FwcGxpZWQgPSBbXQoKICAgIGRlZiBsb2coc2VsZiwgbXNnKToKICAgICAgICBwcmludChmIiAgWypdIHttc2d9IikKCiAgICBkZWYgb2soc2VsZiwgbXNnKToKICAgICAgICBwcmludChmIiAgWytdIHttc2d9IikKCiAgICBkZWYgZXJyKHNlbGYsIG1zZyk6CiAgICAgICAgcHJpbnQoZiIgIFstXSB7bXNnfSIpCgogICAgZGVmIHJ1bihzZWxmLCBjbWQsIGNoZWNrPVRydWUpOgogICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKGNtZCwgc2hlbGw9VHJ1ZSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKQogICAgICAgIGlmIGNoZWNrIGFuZCByZXN1bHQucmV0dXJuY29kZSAhPSAwOgogICAgICAgICAgICBzZWxmLmVycihmIuWRveS7pOWksei0pToge2NtZH0iKQogICAgICAgICAgICBpZiByZXN1bHQuc3RkZXJyOgogICAgICAgICAgICAgICAgcHJpbnQoZiIgICAgICB7cmVzdWx0LnN0ZGVycls6NTAwXX0iKQogICAgICAgIHJldHVybiByZXN1bHQKCiAgICBkZWYgc3RlcDFfZGVjb21waWxlKHNlbGYpOgogICAgICAgICIiIuWPjee8luivkUFQSyIiIgogICAgICAgIHByaW50KCJcblvmraXpqqQxXSDlj43nvJbor5FBUEsuLi4iKQogICAgICAgIHJlc3VsdCA9IHNlbGYucnVuKGYie0FQS1RPT0x9IGQgLWYgLW8ge3NlbGYuc21hbGlfZGlyfSB7c2VsZi5hcGtfcGF0aH0iKQogICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlICE9IDA6CiAgICAgICAgICAgIHNlbGYuZXJyKCLlj43nvJbor5HlpLHotKUiKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBzZWxmLm9rKGYi5Y+N57yW6K+R5a6M5oiQOiB7c2VsZi5zbWFsaV9kaXJ9IikKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBzdGVwMl9zY2FuX3NpZ25hdHVyZXMoc2VsZik6CiAgICAgICAgIiIi5omr5o+P562+5ZCN6aqM6K+B5Luj56CBIiIiCiAgICAgICAgcHJpbnQoIlxuW+atpemqpDJdIOaJq+aPj+etvuWQjemqjOivgeS7o+eggS4uLiIpCiAgICAgICAgZmluZGluZ3MgPSBbXQoKICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNtYWxpX2Rpcik6CiAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgogICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5zbWFsaSIpOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmKQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiLCBlcnJvcnM9Imlnbm9yZSIpIGFzIGZoOgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZmgucmVhZCgpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBTSUdOX1ZFUklGWV9QQVRURVJOUzoKICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgY29udGVudCwgcmUuSUdOT1JFQ0FTRSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbF9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGZpbGVwYXRoLCBzZWxmLnNtYWxpX2RpcikKICAgICAgICAgICAgICAgICAgICAgICAgZmluZGluZ3MuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogcmVsX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0dGVybiI6IHBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6IGZpbGVwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIH0pCgogICAgICAgIGlmIGZpbmRpbmdzOgogICAgICAgICAgICBzZWxmLm9rKGYi5Y+R546wIHtsZW4oZmluZGluZ3MpfSDlpITnrb7lkI3pqozor4Hku6PnoIEiKQogICAgICAgICAgICBmb3IgZiBpbiBmaW5kaW5nc1s6MjBdOgogICAgICAgICAgICAgICAgcHJpbnQoZiIgICAgICB7ZlsnZmlsZSddfSA8LSB7ZlsncGF0dGVybiddfSIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5sb2coIuacquWPkeeOsOaYjuaYvueahOetvuWQjemqjOivgeS7o+eggSIpCiAgICAgICAgcmV0dXJuIGZpbmRpbmdzCgogICAgZGVmIHN0ZXAzX2FwcGx5X3BhdGNoZXMoc2VsZiwgZmluZGluZ3MpOgogICAgICAgICIiIuW6lOeUqOihpeS4gSIiIgogICAgICAgIHByaW50KCJcblvmraXpqqQzXSDlupTnlKjnrb7lkI3ooaXkuIEuLi4iKQoKICAgICAgICBwYXRjaGVkX2NvdW50ID0gMAoKICAgICAgICAjIOaMieaWh+S7tuWOu+mHjQogICAgICAgIHVuaXF1ZV9maWxlcyA9IHt9CiAgICAgICAgZm9yIGYgaW4gZmluZGluZ3M6CiAgICAgICAgICAgIGlmIGZbInBhdGgiXSBub3QgaW4gdW5pcXVlX2ZpbGVzOgogICAgICAgICAgICAgICAgdW5pcXVlX2ZpbGVzW2ZbInBhdGgiXV0gPSBmWyJmaWxlIl0KCiAgICAgICAgZm9yIGZpbGVwYXRoLCByZWxfcGF0aCBpbiB1bmlxdWVfZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIsIGVycm9ycz0iaWdub3JlIikgYXMgZmg6CiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGZoLnJlYWQoKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgb3JpZ2luYWwgPSBjb250ZW50CgogICAgICAgICAgICAjIOWvueavj+S4quWuieWFqOihpeS4geaWueazleWQjei/m+ihjOWMuemFjQogICAgICAgICAgICBmb3IgbWV0aG9kX25hbWUsIHBhdGNoX2JvZHkgaW4gU0FGRV9QQVRDSEVTLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAjIOWMuemFjeaWueazleWumuS5iQogICAgICAgICAgICAgICAgbWV0aG9kX3BhdHRlcm4gPSByJyhcLm1ldGhvZFxzKyg/OnB1YmxpY3xwcml2YXRlfHByb3RlY3RlZHxzdGF0aWN8ZmluYWwpKlxzKycgKyByZS5lc2NhcGUobWV0aG9kX25hbWUpICsgcidccypcKFteKV0qXClbXntdKlx7W159XSo/KShcLmVuZCBtZXRob2QpJwogICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gobWV0aG9kX3BhdHRlcm4sIGNvbnRlbnQsIHJlLkRPVEFMTCkKCiAgICAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgICAgICAjIOS/neeVmeaWueazleWjsOaYju+8jOabv+aNouaWueazleS9kwogICAgICAgICAgICAgICAgICAgIG1ldGhvZF9kZWNsID0gcmUuc2VhcmNoKHInKFwubWV0aG9kXHMrW15cbl0rKScsIGNvbnRlbnQpLmdyb3VwKDEpCiAgICAgICAgICAgICAgICAgICAgbmV3X21ldGhvZCA9IGYie21ldGhvZF9kZWNsfVxuICAgIHtwYXRjaF9ib2R5fVxuLmVuZCBtZXRob2QiCiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHJlLnN1YihtZXRob2RfcGF0dGVybiwgbmV3X21ldGhvZCwgY29udGVudCwgY291bnQ9MSkKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoZXNfYXBwbGllZC5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6IHJlbF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIjogbWV0aG9kX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInJldHVybl9wYXRjaCIKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIHBhdGNoZWRfY291bnQgKz0gMQoKICAgICAgICAgICAgaWYgY29udGVudCAhPSBvcmlnaW5hbDoKICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInciKSBhcyBmaDoKICAgICAgICAgICAgICAgICAgICBmaC53cml0ZShjb250ZW50KQoKICAgICAgICAjIOmineWkluajgOafpe+8muaQnOe0ouaJgOaciXNtYWxp5Lit55qEZ2V0UGFja2FnZUluZm8rR0VUX1NJR05BVFVSRVPnu4TlkIgKICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNtYWxpX2Rpcik6CiAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgogICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5zbWFsaSIpOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmKQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiLCBlcnJvcnM9Imlnbm9yZSIpIGFzIGZoOgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZmgucmVhZCgpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBpZiAiR0VUX1NJR05BVFVSRVMiIGluIGNvbnRlbnQgYW5kICJnZXRQYWNrYWdlSW5mbyIgaW4gY29udGVudDoKICAgICAgICAgICAgICAgICAgICAjIOaKikdFVF9TSUdOQVRVUkVTKDB4NDAp5pS55oiQR0VUX01FVEFfREFUQSgweDgwKe+8jOiuqeetvuWQjeiOt+WPlui/lOWbnuepugogICAgICAgICAgICAgICAgICAgIHBhdGNoZWQgPSBjb250ZW50LnJlcGxhY2UoIjB4NDAiLCAiMHgwIikucmVwbGFjZSgiR0VUX1NJR05BVFVSRVMiLCAiR0VUX01FVEFfREFUQSIpCiAgICAgICAgICAgICAgICAgICAgaWYgcGF0Y2hlZCAhPSBjb250ZW50OgogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJ3IikgYXMgZmg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaC53cml0ZShwYXRjaGVkKQogICAgICAgICAgICAgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aChmaWxlcGF0aCwgc2VsZi5zbWFsaV9kaXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hlc19hcHBsaWVkLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6IHJlbF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGhvZCI6ICJnZXRQYWNrYWdlSW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJmbGFnX3BhdGNoIgogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVkX2NvdW50ICs9IDEKCiAgICAgICAgaWYgcGF0Y2hlZF9jb3VudCA+IDA6CiAgICAgICAgICAgIHNlbGYub2soZiLmiJDlip/miZPooaXkuIEge3BhdGNoZWRfY291bnR9IOWkhCIpCiAgICAgICAgICAgIGZvciBwIGluIHNlbGYucGF0Y2hlc19hcHBsaWVkOgogICAgICAgICAgICAgICAgcHJpbnQoZiIgICAgICB7cFsnZmlsZSddfSA6OiB7cFsnbWV0aG9kJ119ICh7cFsndHlwZSddfSkiKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYubG9nKCLml6DpnIDmiZPooaXkuIHvvIjmnKrlj5HnjrDlj6/oh6rliqjkv67ooaXnmoTnrb7lkI3pqozor4HvvIkiKQoKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBzdGVwNF9yZWJ1aWxkKHNlbGYpOgogICAgICAgICIiIumHjeaWsOaJk+WMhSIiIgogICAgICAgIHByaW50KCJcblvmraXpqqQ0XSDph43mlrDmiZPljIVBUEsuLi4iKQogICAgICAgIHVuc2lnbmVkX2FwayA9IG9zLnBhdGguam9pbihzZWxmLndvcmtfZGlyLCAidW5zaWduZWQuYXBrIikKICAgICAgICByZXN1bHQgPSBzZWxmLnJ1bihmIntBUEtUT09MfSBiIC1vIHt1bnNpZ25lZF9hcGt9IHtzZWxmLnNtYWxpX2Rpcn0iKQogICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlICE9IDA6CiAgICAgICAgICAgIHNlbGYuZXJyKCLmiZPljIXlpLHotKUiKQogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIHNlbGYub2soZiLmiZPljIXlrozmiJA6IHt1bnNpZ25lZF9hcGt9IikKICAgICAgICByZXR1cm4gdW5zaWduZWRfYXBrCgogICAgZGVmIHN0ZXA1X2FsaWduKHNlbGYsIGFwa19wYXRoKToKICAgICAgICAiIiJ6aXBhbGlnbuWvuem9kCIiIgogICAgICAgIHByaW50KCJcblvmraXpqqQ1XSBaSVDlr7npvZAuLi4iKQogICAgICAgIGFsaWduZWRfYXBrID0gYXBrX3BhdGgucmVwbGFjZSgiLmFwayIsICJfYWxpZ25lZC5hcGsiKQogICAgICAgIHJlc3VsdCA9IHNlbGYucnVuKGYie1pJUEFMSUdOfSAtZiAtdiA0IHthcGtfcGF0aH0ge2FsaWduZWRfYXBrfSIsIGNoZWNrPUZhbHNlKQogICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlICE9IDA6CiAgICAgICAgICAgIHNlbGYubG9nKCJ6aXBhbGlnbuWksei0pe+8jOS9v+eUqOacquWvuem9kOeJiOacrCIpCiAgICAgICAgICAgIHJldHVybiBhcGtfcGF0aAogICAgICAgIHNlbGYub2soZiLlr7npvZDlrozmiJA6IHthbGlnbmVkX2Fwa30iKQogICAgICAgIHJldHVybiBhbGlnbmVkX2FwawoKICAgIGRlZiBzdGVwNl9lbnN1cmVfa2V5c3RvcmUoc2VsZik6CiAgICAgICAgIiIi56Gu5L+d5a+G6ZKl5a2Y5ZyoIiIiCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5rZXlzdG9yZSk6CiAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgIHNlbGYubG9nKCLlr4bpkqXkuI3lrZjlnKjvvIzoh6rliqjnlJ/miJAuLi4iKQogICAgICAgIGNtZCA9IChmIntLRVlUT09MfSAtZ2Vua2V5IC12IC1rZXlzdG9yZSB7c2VsZi5rZXlzdG9yZX0gIgogICAgICAgICAgICAgICBmIi1rZXlhbGcgUlNBIC1rZXlzaXplIDIwNDggLXZhbGlkaXR5IDEwMDAwICIKICAgICAgICAgICAgICAgZiItYWxpYXMge3NlbGYuYWxpYXN9ICIKICAgICAgICAgICAgICAgZictZG5hbWUgIkNOPUF1dG9TaWduLCBPVT1SRSwgTz1YLCBMPVNILCBTVD1TSCwgQz1DTiIgJwogICAgICAgICAgICAgICBmIi1zdG9yZXBhc3Mge3NlbGYucGFzc3dvcmR9IC1rZXlwYXNzIHtzZWxmLnBhc3N3b3JkfSIpCiAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW4oY21kKQogICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlID09IDA6CiAgICAgICAgICAgIHNlbGYub2soZiLlr4bpkqXnlJ/miJA6IHtzZWxmLmtleXN0b3JlfSIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgc2VsZi5lcnIoIuWvhumSpeeUn+aIkOWksei0pSIpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHN0ZXA3X3NpZ24oc2VsZiwgYXBrX3BhdGgpOgogICAgICAgICIiIkFQS+etvuWQjSIiIgogICAgICAgIHByaW50KCJcblvmraXpqqQ2XSBBUEvnrb7lkI0gKHYxK3YyK3YzKS4uLiIpCiAgICAgICAgaWYgbm90IHNlbGYuc3RlcDZfZW5zdXJlX2tleXN0b3JlKCk6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIHNpZ25lZF9hcGsgPSBhcGtfcGF0aC5yZXBsYWNlKCIuYXBrIiwgIl9zaWduZWQuYXBrIikKICAgICAgICBjbWQgPSAoZiJ7QVBLU0lHTkVSfSBzaWduIC0ta3Mge3NlbGYua2V5c3RvcmV9ICIKICAgICAgICAgICAgICAgZiItLWtzLWtleS1hbGlhcyB7c2VsZi5hbGlhc30gIgogICAgICAgICAgICAgICBmIi0ta3MtcGFzcyBwYXNzOntzZWxmLnBhc3N3b3JkfSAiCiAgICAgICAgICAgICAgIGYiLS1rZXktcGFzcyBwYXNzOntzZWxmLnBhc3N3b3JkfSAiCiAgICAgICAgICAgICAgIGYiLS1vdXQge3NpZ25lZF9hcGt9IHthcGtfcGF0aH0iKQogICAgICAgIHJlc3VsdCA9IHNlbGYucnVuKGNtZCkKICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZSAhPSAwOgogICAgICAgICAgICBzZWxmLmVycigi562+5ZCN5aSx6LSlIikKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBzZWxmLm9rKGYi562+5ZCN5a6M5oiQOiB7c2lnbmVkX2Fwa30iKQogICAgICAgIHJldHVybiBzaWduZWRfYXBrCgogICAgZGVmIHN0ZXA4X3ZlcmlmeShzZWxmLCBhcGtfcGF0aCk6CiAgICAgICAgIiIi6aqM6K+B562+5ZCNIiIiCiAgICAgICAgcHJpbnQoIlxuW+atpemqpDddIOmqjOivgeetvuWQjS4uLiIpCiAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW4oZiJ7QVBLU0lHTkVSfSB2ZXJpZnkgLXYge2Fwa19wYXRofSIsIGNoZWNrPUZhbHNlKQogICAgICAgIG91dHB1dCA9IHJlc3VsdC5zdGRvdXQgKyByZXN1bHQuc3RkZXJyCiAgICAgICAgZm9yIHNjaGVtZSBpbiBbInYxIiwgInYyIiwgInYzIl06CiAgICAgICAgICAgIGlmIGYiVmVyaWZpZWQgdXNpbmcge3NjaGVtZX0gc2NoZW1lIiBpbiBvdXRwdXQgb3IgZiJ7c2NoZW1lfSBzY2hlbWU6IHRydWUiIGluIG91dHB1dDoKICAgICAgICAgICAgICAgIHNlbGYub2soZiJ7c2NoZW1lfSDnrb7lkI3pqozor4HpgJrov4ciKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5sb2coZiJ7c2NoZW1lfSDnrb7lkI3mnKrkvb/nlKgiKQogICAgICAgIHJldHVybiByZXN1bHQucmV0dXJuY29kZSA9PSAwCgogICAgZGVmIGNsZWFudXAoc2VsZik6CiAgICAgICAgIiIi5riF55CG5Li05pe25paH5Lu2IiIiCiAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLndvcmtfZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCgogICAgZGVmIHJ1bl9hbGwoc2VsZik6CiAgICAgICAgIiIi5omn6KGM5a6M5pW05rWB56iLIiIiCiAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgcHJpbnQoIj0iICogNTApCiAgICAgICAgcHJpbnQoIiAg6Ieq5Yqo562+5ZCN5omT6KGl5LiB5bel5YW3IHYxLjAiKQogICAgICAgIHByaW50KGYiICDovpPlhaU6IHtzZWxmLmFwa19wYXRofSIpCiAgICAgICAgcHJpbnQoZiIgIOi+k+WHujoge3NlbGYub3V0cHV0X3BhdGh9IikKICAgICAgICBwcmludCgiPSIgKiA1MCkKCiAgICAgICAgIyBTdGVwIDE6IOWPjee8luivkQogICAgICAgIGlmIG5vdCBzZWxmLnN0ZXAxX2RlY29tcGlsZSgpOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgIyBTdGVwIDI6IOaJq+aPj+etvuWQjemqjOivgQogICAgICAgIGZpbmRpbmdzID0gc2VsZi5zdGVwMl9zY2FuX3NpZ25hdHVyZXMoKQoKICAgICAgICAjIFN0ZXAgMzog5bqU55So6KGl5LiBCiAgICAgICAgc2VsZi5zdGVwM19hcHBseV9wYXRjaGVzKGZpbmRpbmdzKQoKICAgICAgICAjIFN0ZXAgNDog6YeN5paw5omT5YyFCiAgICAgICAgdW5zaWduZWQgPSBzZWxmLnN0ZXA0X3JlYnVpbGQoKQogICAgICAgIGlmIG5vdCB1bnNpZ25lZDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICMgU3RlcCA1OiDlr7npvZAKICAgICAgICBhbGlnbmVkID0gc2VsZi5zdGVwNV9hbGlnbih1bnNpZ25lZCkKCiAgICAgICAgIyBTdGVwIDYtNzog562+5ZCNCiAgICAgICAgc2lnbmVkID0gc2VsZi5zdGVwN19zaWduKGFsaWduZWQpCiAgICAgICAgaWYgbm90IHNpZ25lZDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICMgU3RlcCA4OiDpqozor4EKICAgICAgICBzZWxmLnN0ZXA4X3ZlcmlmeShzaWduZWQpCgogICAgICAgICMg5aSN5Yi25Yiw6L6T5Ye66Lev5b6ECiAgICAgICAgc2h1dGlsLmNvcHkyKHNpZ25lZCwgc2VsZi5vdXRwdXRfcGF0aCkKCiAgICAgICAgZWxhcHNlZCA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogICAgICAgIHByaW50KCJcbiIgKyAiPSIgKiA1MCkKICAgICAgICBwcmludChmIiAg5a6M5oiQISDogJfml7Yge2VsYXBzZWQ6LjFmfXMiKQogICAgICAgIHByaW50KGYiICDooaXkuIHmlbA6IHtsZW4oc2VsZi5wYXRjaGVzX2FwcGxpZWQpfSIpCiAgICAgICAgcHJpbnQoZiIgIOi+k+WHujoge3NlbGYub3V0cHV0X3BhdGh9IikKICAgICAgICBzaXplX21iID0gb3MucGF0aC5nZXRzaXplKHNlbGYub3V0cHV0X3BhdGgpIC8gMTAyNCAvIDEwMjQKICAgICAgICBwcmludChmIiAg5aSn5bCPOiB7c2l6ZV9tYjouMmZ9IE1CIikKICAgICAgICBwcmludCgiPSIgKiA1MCkKCiAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICByZXR1cm4gVHJ1ZQoKCmRlZiBtYWluKCk6CiAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKICAgICAgICBwcmludCgi55So5rOVOiBweXRob24zIGF1dG9fc2lnbl9wYXRjaC5weSA8YXBr5paH5Lu2PiBb6L6T5Ye6YXBrXSIpCiAgICAgICAgcHJpbnQoIuekuuS+izogcHl0aG9uMyBhdXRvX3NpZ25fcGF0Y2gucHkgYXBwLmFwayIpCiAgICAgICAgcHJpbnQoIiAgICAgIHB5dGhvbjMgYXV0b19zaWduX3BhdGNoLnB5IGFwcC5hcGsgb3V0cHV0LmFwayIpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBhcGtfcGF0aCA9IHN5cy5hcmd2WzFdCiAgICBvdXRwdXRfcGF0aCA9IHN5cy5hcmd2WzJdIGlmIGxlbihzeXMuYXJndikgPiAyIGVsc2UgTm9uZQoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcGtfcGF0aCk6CiAgICAgICAgcHJpbnQoZiLplJnor686IOaWh+S7tuS4jeWtmOWcqDoge2Fwa19wYXRofSIpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICB0b29sID0gQXV0b1NpZ25QYXRjaChhcGtfcGF0aCwgb3V0cHV0X3BhdGgpCiAgICBzdWNjZXNzID0gdG9vbC5ydW5fYWxsKCkKICAgIHN5cy5leGl0KDAgaWYgc3VjY2VzcyBlbHNlIDEpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo=
B64EOF_auto_sign_patch.py
chmod +x "$DECODE_DIR/auto_sign_patch.py" 2>/dev/null

echo "恢复: binary_patch.py ..."
base64 -d << 'B64EOF_binary_patch.py' > "$DECODE_DIR/binary_patch.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIK5LqM6L+b5Yi26KGl5LiB5bel5YW3IC0gUHl0aG9u54mICueUqOS6jue7mUFQSy9ERVgvU0/nrYnmlofku7bmiZPljYHlha3ov5vliLbooaXkuIEKCueUqOazlToKICBweXRob24zIGJpbmFyeV9wYXRjaC5weSA85paH5Lu2PiA85YGP56e7PiA85Y6f5aeLaGV4PiA86KGl5LiBaGV4PgogIHB5dGhvbjMgYmluYXJ5X3BhdGNoLnB5IGFwcC5hcGsgMHgxMjM0ICIxMiAzNCA1NiIgIkFCIENEIEVGIgogIHB5dGhvbjMgYmluYXJ5X3BhdGNoLnB5IGFwcC5hcGsgNDY2MCAiMTIzNDU2IiAiQUJDREVGIgoK5Yqf6IO9OgogIC0g5YGP56e75pSv5oyB5Y2B6L+b5Yi25oiW5Y2B5YWt6L+b5Yi2KDB45byA5aS0KQogIC0g6Ieq5Yqo5aSH5Lu95Y6f5paH5Lu2KC5iYWspCiAgLSDlrZfoioLmoKHpqozvvIjnoa7kv53kv67mlLnmraPnoa7kvY3nva7vvIkKICAtIOaJuemHj+ihpeS4geaUr+aMgSjpgJrov4dKU09O6YWN572u5paH5Lu2KQoiIiIKCmltcG9ydCBvcywgc3lzLCBqc29uLCBhcmdwYXJzZQoKZGVmIGhleF90b19ieXRlcyhoZXhfc3RyKToKICAgICIiIuWNgeWFrei/m+WItuWtl+espuS4sui9rOWtl+iKguaVsOe7hCIiIgogICAgY2xlYW4gPSBoZXhfc3RyLnJlcGxhY2UoJyAnLCAnJykucmVwbGFjZSgnXG4nLCAnJykubG93ZXIoKQogICAgaWYgbGVuKGNsZWFuKSAlIDIgIT0gMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCLljYHlha3ov5vliLblrZfnrKbkuLLplb/luqblv4XpobvmmK/lgbbmlbAiKQogICAgcmV0dXJuIGJ5dGVzLmZyb21oZXgoY2xlYW4pCgpkZWYgYnl0ZXNfdG9faGV4KGRhdGEpOgogICAgIiIi5a2X6IqC5pWw57uE6L2s5Y2B5YWt6L+b5Yi25a2X56ym5LiyIiIiCiAgICByZXR1cm4gZGF0YS5oZXgoKQoKZGVmIHBhdGNoX2ZpbGUoZmlsZV9wYXRoLCBvZmZzZXQsIG9yaWdpbmFsX2hleCwgcGF0Y2hfaGV4LCBjcmVhdGVfYmFja3VwPVRydWUpOgogICAgIiIiCiAgICDnu5nmlofku7bmiZPkuozov5vliLbooaXkuIEKICAgIAogICAgQXJnczoKICAgICAgICBmaWxlX3BhdGg6IOimgeihpeS4geeahOaWh+S7tui3r+W+hAogICAgICAgIG9mZnNldDog5YGP56e777yI5pSv5oyB5Y2B6L+b5Yi25oiWMHjlvIDlpLTnmoTljYHlha3ov5vliLbvvIkKICAgICAgICBvcmlnaW5hbF9oZXg6IOWOn+Wni+Wtl+iKguWNgeWFrei/m+WItu+8iOeUqOS6juagoemqjO+8iQogICAgICAgIHBhdGNoX2hleDog6KGl5LiB5a2X6IqC5Y2B5YWt6L+b5Yi2CiAgICAgICAgY3JlYXRlX2JhY2t1cDog5piv5ZCm5Yib5bu6LmJha+Wkh+S7vQogICAgCiAgICBSZXR1cm5zOgogICAgICAgIChzdWNjZXNzOiBib29sLCBtZXNzYWdlOiBzdHIpCiAgICAiIiIKICAgIHRyeToKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBmIuaWh+S7tuS4jeWtmOWcqDoge2ZpbGVfcGF0aH0iCiAgICAgICAgCiAgICAgICAgIyDop6PmnpDlgY/np7sKICAgICAgICBpZiBpc2luc3RhbmNlKG9mZnNldCwgc3RyKToKICAgICAgICAgICAgaWYgb2Zmc2V0LnN0YXJ0c3dpdGgoJzB4Jykgb3Igb2Zmc2V0LnN0YXJ0c3dpdGgoJzBYJyk6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSBpbnQob2Zmc2V0LCAxNikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG9mZnNldCA9IGludChvZmZzZXQpCiAgICAgICAgCiAgICAgICAgb3JpZ2luYWxfYnl0ZXMgPSBoZXhfdG9fYnl0ZXMob3JpZ2luYWxfaGV4KQogICAgICAgIHBhdGNoX2J5dGVzID0gaGV4X3RvX2J5dGVzKHBhdGNoX2hleCkKICAgICAgICAKICAgICAgICBpZiBsZW4ob3JpZ2luYWxfYnl0ZXMpICE9IGxlbihwYXRjaF9ieXRlcyk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZiLljp/lp4vlrZfoioIoe2xlbihvcmlnaW5hbF9ieXRlcyl9KeS4juihpeS4geWtl+iKgih7bGVuKHBhdGNoX2J5dGVzKX0p6ZW/5bqm5LiN5LiA6Ie0IgogICAgICAgIAogICAgICAgICMg5aSH5Lu9CiAgICAgICAgaWYgY3JlYXRlX2JhY2t1cDoKICAgICAgICAgICAgYmFrX3BhdGggPSBmaWxlX3BhdGggKyAnLmJhaycKICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3JiJykgYXMgc3JjLCBvcGVuKGJha19wYXRoLCAnd2InKSBhcyBkc3Q6CiAgICAgICAgICAgICAgICBkc3Qud3JpdGUoc3JjLnJlYWQoKSkKICAgICAgICAgICAgcHJpbnQoZiJb5aSH5Lu9XSDlt7LliJvlu7o6IHtiYWtfcGF0aH0iKQogICAgICAgIAogICAgICAgICMg6K+75Y+W5bm25qCh6aqMCiAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3IrYicpIGFzIGY6CiAgICAgICAgICAgIGYuc2VlayhvZmZzZXQpCiAgICAgICAgICAgIHJlYWRfYnl0ZXMgPSBmLnJlYWQobGVuKG9yaWdpbmFsX2J5dGVzKSkKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIHJlYWRfYnl0ZXMgIT0gb3JpZ2luYWxfYnl0ZXM6CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsICgKICAgICAgICAgICAgICAgICAgICBmIuWtl+iKguagoemqjOS4jeWMuemFjSFcbiIKICAgICAgICAgICAgICAgICAgICBmIiAg5YGP56e7OiAweHtvZmZzZXQ6WH0gKHtvZmZzZXR9KVxuIgogICAgICAgICAgICAgICAgICAgIGYiICDmnJ/mnJs6IHtieXRlc190b19oZXgob3JpZ2luYWxfYnl0ZXMpfVxuIgogICAgICAgICAgICAgICAgICAgIGYiICDlrp7pmYU6IHtieXRlc190b19oZXgocmVhZF9ieXRlcyl9IgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAKICAgICAgICAgICAgIyDlhpnlhaXooaXkuIEKICAgICAgICAgICAgZi5zZWVrKG9mZnNldCkKICAgICAgICAgICAgZi53cml0ZShwYXRjaF9ieXRlcykKICAgICAgICAKICAgICAgICByZXR1cm4gVHJ1ZSwgKAogICAgICAgICAgICBmIuihpeS4geaIkOWKnyFcbiIKICAgICAgICAgICAgZiIgIOaWh+S7tjoge2ZpbGVfcGF0aH1cbiIKICAgICAgICAgICAgZiIgIOWBj+enuzogMHh7b2Zmc2V0Olh9ICh7b2Zmc2V0fSlcbiIKICAgICAgICAgICAgZiIgIOmVv+W6pjoge2xlbihwYXRjaF9ieXRlcyl9IOWtl+iKglxuIgogICAgICAgICAgICBmIiAg5Y6f5aeLOiB7Ynl0ZXNfdG9faGV4KG9yaWdpbmFsX2J5dGVzKX1cbiIKICAgICAgICAgICAgZiIgIOihpeS4gToge2J5dGVzX3RvX2hleChwYXRjaF9ieXRlcyl9IgogICAgICAgICkKICAgIAogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHJldHVybiBGYWxzZSwgZiLplJnor686IHtzdHIoZSl9IgoKZGVmIHBhdGNoX2Zyb21fanNvbihmaWxlX3BhdGgsIGpzb25fcGF0aCwgY3JlYXRlX2JhY2t1cD1UcnVlKToKICAgICIiIgogICAg5LuOSlNPTumFjee9ruaWh+S7tuaJuemHj+aJk+ihpeS4gQogICAgCiAgICBKU09O5qC85byPOgogICAgWwogICAgICB7CiAgICAgICAgIm9mZnNldCI6ICIweDEyMzQiLAogICAgICAgICJvcmlnaW5hbCI6ICIxMiAzNCA1NiA3OCIsCiAgICAgICAgInBhdGNoIjogIkFCIENEIEVGIDAwIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAi6Lez6L+HVklQ5qOA5p+lIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm9mZnNldCI6ICIweDU2NzgiLAogICAgICAgICJvcmlnaW5hbCI6ICIwMCAwMCAwMCAwMCIsCiAgICAgICAgInBhdGNoIjogIjAxIDAwIDAwIDAwIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAi5by65Yi26L+U5ZuedHJ1ZSIKICAgICAgfQogICAgXQogICAgIiIiCiAgICB0cnk6CiAgICAgICAgd2l0aCBvcGVuKGpzb25fcGF0aCwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgogICAgICAgICAgICBwYXRjaGVzID0ganNvbi5sb2FkKGYpCiAgICAgICAgCiAgICAgICAgcHJpbnQoZiJb5om56YeP6KGl5LiBXSDlhbEge2xlbihwYXRjaGVzKX0g5Liq6KGl5LiBIikKICAgICAgICBzdWNjZXNzX2NvdW50ID0gMAogICAgICAgIAogICAgICAgIGZvciBpLCBwIGluIGVudW1lcmF0ZShwYXRjaGVzLCAxKToKICAgICAgICAgICAgZGVzYyA9IHAuZ2V0KCdkZXNjcmlwdGlvbicsIGYn6KGl5LiBICN7aX0nKQogICAgICAgICAgICBwcmludChmIlxuW3tpfS97bGVuKHBhdGNoZXMpfV0ge2Rlc2N9IikKICAgICAgICAgICAgCiAgICAgICAgICAgIHN1Y2Nlc3MsIG1zZyA9IHBhdGNoX2ZpbGUoCiAgICAgICAgICAgICAgICBmaWxlX3BhdGgsCiAgICAgICAgICAgICAgICBwWydvZmZzZXQnXSwKICAgICAgICAgICAgICAgIHBbJ29yaWdpbmFsJ10sCiAgICAgICAgICAgICAgICBwWydwYXRjaCddLAogICAgICAgICAgICAgICAgY3JlYXRlX2JhY2t1cD0oaSA9PSAxIGFuZCBjcmVhdGVfYmFja3VwKSAgIyDlj6rlpIfku73kuIDmrKEKICAgICAgICAgICAgKQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgc3VjY2VzczoKICAgICAgICAgICAgICAgIHByaW50KGYiICDinJMge21zZy5zcGxpdChjaHIoMTApKVswXX0iKQogICAgICAgICAgICAgICAgc3VjY2Vzc19jb3VudCArPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludChmIiAg4pyXIHttc2d9IikKICAgICAgICAKICAgICAgICBwcmludChmIlxuW+WujOaIkF0ge3N1Y2Nlc3NfY291bnR9L3tsZW4ocGF0Y2hlcyl9IOS4quihpeS4geaIkOWKnyIpCiAgICAgICAgcmV0dXJuIHN1Y2Nlc3NfY291bnQgPT0gbGVuKHBhdGNoZXMpCiAgICAKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludChmIlvplJnor69dIHtzdHIoZSl9IikKICAgICAgICByZXR1cm4gRmFsc2UKCmRlZiBzZWFyY2hfYnl0ZXMoZmlsZV9wYXRoLCBwYXR0ZXJuX2hleCk6CiAgICAiIiLlnKjmlofku7bkuK3mkJzntKLlrZfoioLmqKHlvI/vvIzov5Tlm57miYDmnInljLnphY3kvY3nva4iIiIKICAgIHRyeToKICAgICAgICBwYXR0ZXJuID0gaGV4X3RvX2J5dGVzKHBhdHRlcm5faGV4KQogICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICdyYicpIGFzIGY6CiAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgIAogICAgICAgIHBvc2l0aW9ucyA9IFtdCiAgICAgICAgc3RhcnQgPSAwCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgcG9zID0gZGF0YS5maW5kKHBhdHRlcm4sIHN0YXJ0KQogICAgICAgICAgICBpZiBwb3MgPT0gLTE6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBwb3NpdGlvbnMuYXBwZW5kKHBvcykKICAgICAgICAgICAgc3RhcnQgPSBwb3MgKyAxCiAgICAgICAgCiAgICAgICAgcHJpbnQoZiJb5pCc57SiXSDmqKHlvI86IHtwYXR0ZXJuX2hleH0iKQogICAgICAgIHByaW50KGYiW+aQnOe0ol0g5om+5YiwIHtsZW4ocG9zaXRpb25zKX0g5Liq5Yy56YWNOiIpCiAgICAgICAgZm9yIHBvcyBpbiBwb3NpdGlvbnNbOjIwXTogICMg5pyA5aSa5pi+56S6MjDkuKoKICAgICAgICAgICAgY29udGV4dCA9IGRhdGFbbWF4KDAscG9zLTgpOm1pbihsZW4oZGF0YSkscG9zK2xlbihwYXR0ZXJuKSs4KV0KICAgICAgICAgICAgcHJpbnQoZiIgIDB4e3BvczowOFh9OiAuLi57Ynl0ZXNfdG9faGV4KGNvbnRleHQpfS4uLiIpCiAgICAgICAgCiAgICAgICAgaWYgbGVuKHBvc2l0aW9ucykgPiAyMDoKICAgICAgICAgICAgcHJpbnQoZiIgIC4uLiDov5jmnIkge2xlbihwb3NpdGlvbnMpLTIwfSDkuKoiKQogICAgICAgIAogICAgICAgIHJldHVybiBwb3NpdGlvbnMKICAgIAogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KGYiW+mUmeivr10ge3N0cihlKX0iKQogICAgICAgIHJldHVybiBbXQoKZGVmIG1haW4oKToKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSfkuozov5vliLbooaXkuIHlt6XlhbcnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZScsIGhlbHA9J+ebruagh+aWh+S7ticpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW9mZnNldCcsICctbycsIGhlbHA9J+WBj+enu++8iOWNgei/m+WItuaIljB45Y2B5YWt6L+b5Yi277yJJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3JpZ2luYWwnLCAnLW9yaWcnLCBoZWxwPSfljp/lp4vlrZfoioJoZXgnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wYXRjaCcsICctcCcsIGhlbHA9J+ihpeS4geWtl+iKgmhleCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWpzb24nLCAnLWonLCBoZWxwPSdKU09O6KGl5LiB6YWN572u5paH5Lu2JykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2VhcmNoJywgJy1zJywgaGVscD0n5pCc57Si5a2X6IqC5qih5byPJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm8tYmFja3VwJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0n5LiN5Yib5bu65aSH5Lu9JykKICAgIAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIAogICAgaWYgYXJncy5zZWFyY2g6CiAgICAgICAgc2VhcmNoX2J5dGVzKGFyZ3MuZmlsZSwgYXJncy5zZWFyY2gpCiAgICBlbGlmIGFyZ3MuanNvbjoKICAgICAgICBwYXRjaF9mcm9tX2pzb24oYXJncy5maWxlLCBhcmdzLmpzb24sIG5vdCBhcmdzLm5vX2JhY2t1cCkKICAgIGVsaWYgYXJncy5vZmZzZXQgYW5kIGFyZ3Mub3JpZ2luYWwgYW5kIGFyZ3MucGF0Y2g6CiAgICAgICAgc3VjY2VzcywgbXNnID0gcGF0Y2hfZmlsZShhcmdzLmZpbGUsIGFyZ3Mub2Zmc2V0LCBhcmdzLm9yaWdpbmFsLCBhcmdzLnBhdGNoLCBub3QgYXJncy5ub19iYWNrdXApCiAgICAgICAgcHJpbnQobXNnKQogICAgICAgIHN5cy5leGl0KDAgaWYgc3VjY2VzcyBlbHNlIDEpCiAgICBlbHNlOgogICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKICAgICAgICBwcmludCgiXG7npLrkvos6IikKICAgICAgICBwcmludChmIiAge3N5cy5hcmd2WzBdfSBhcHAuYXBrIC1vIDB4MTIzNCAtb3JpZyBcIjEyIDM0IDU2XCIgLXAgXCJBQiBDRCBFRlwiIikKICAgICAgICBwcmludChmIiAge3N5cy5hcmd2WzBdfSBhcHAuYXBrIC1qIHBhdGNoZXMuanNvbiIpCiAgICAgICAgcHJpbnQoZiIgIHtzeXMuYXJndlswXX0gYXBwLmFwayAtcyBcIjAxIDAwIDAwIDAwXCIiKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo=
B64EOF_binary_patch.py
chmod +x "$DECODE_DIR/binary_patch.py" 2>/dev/null

echo "恢复: upload_server.py ..."
base64 -d << 'B64EOF_upload_server.py' > "$DECODE_DIR/upload_server.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIK5paH5Lu25LiK5Lyg5pyN5YqhIC0g6K6p55So5oi35Y+v5Lul55u05o6l5LiK5Lyg5paH5Lu25Yiw5bel5L2c5Yy6CuaUr+aMgTogQVBLLCBYQVBLLCBKQVIsIEFBUiwgWklQLCBUWFQsIOetieW4uOingeaWh+S7tgoiIiIKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0LCByZW5kZXJfdGVtcGxhdGVfc3RyaW5nLCBqc29uaWZ5CmZyb20gd2Vya3pldWcudXRpbHMgaW1wb3J0IHNlY3VyZV9maWxlbmFtZQoKVVBMT0FEX0ZPTERFUiA9ICIvd29ya3NwYWNlL3VwbG9hZHMiCkFMTE9XRURfRVhURU5TSU9OUyA9IHsKICAgICdhcGsnLCAneGFwaycsICdqYXInLCAnYWFyJywgJ3ppcCcsCiAgICAndHh0JywgJ21kJywgJ2pzb24nLCAneG1sJywgJ3NvJywgJ2RleCcsCiAgICAncGRmJywgJ2RvYycsICdkb2N4JywgJ3BuZycsICdqcGcnLCAnanBlZycKfQoKb3MubWFrZWRpcnMoVVBMT0FEX0ZPTERFUiwgZXhpc3Rfb2s9VHJ1ZSkKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQphcHAuY29uZmlnWydVUExPQURfRk9MREVSJ10gPSBVUExPQURfRk9MREVSCmFwcC5jb25maWdbJ01BWF9DT05URU5UX0xFTkdUSCddID0gNTAwICogMTAyNCAqIDEwMjQgICMg5pyA5aSnIDUwME1CCgpIVE1MX1BBR0UgPSAnJycKPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InpoLUNOIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+6YCG5ZCR5bel56iL5biIIC0g5paH5Lu25LiK5LygPC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxYTFhMmUgMCUsICMxNjIxM2UgNTAlLCAjMGYzNDYwIDEwMCUpOwogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIH0KICAgICAgICAuY29udGFpbmVyIHsKICAgICAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgICAgICAgbWF4LXdpZHRoOiA2MDBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMjVweCA1MHB4IHJnYmEoMCwwLDAsMC4zKTsKICAgICAgICB9CiAgICAgICAgaDEgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjhweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMDBkNGZmLCAjN2IyY2JmKTsKICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICB9CiAgICAgICAgLnN1YnRpdGxlIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lIHsKICAgICAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHJnYmEoMCwgMjEyLCAyNTUsIDAuNCk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDUwcHggMjBweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMjEyLCAyNTUsIDAuMDIpOwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lOmhvdmVyLCAuZHJvcC16b25lLmRyYWdvdmVyIHsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBkNGZmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDIxMiwgMjU1LCAwLjA4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICAuZHJvcC16b25lIC5pY29uIHsKICAgICAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgfQogICAgICAgIC5kcm9wLXpvbmUgcCB7CiAgICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5kcm9wLXpvbmUgLmhpbnQgewogICAgICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIH0KICAgICAgICAjZmlsZS1pbnB1dCB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgICAuZmlsZS1saXN0IHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICB9CiAgICAgICAgLmZpbGUtaXRlbSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgIH0KICAgICAgICAuZmlsZS1pbmZvIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIH0KICAgICAgICAuZmlsZS1uYW1lIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBjb2xvcjogI2RkZDsKICAgICAgICB9CiAgICAgICAgLmZpbGUtc2l6ZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgfQogICAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICAgIC5wcm9ncmVzcy1maWxsIHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMwMGQ0ZmYsICM3YjJjYmYpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgICAgIHdpZHRoOiAwJTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlOwogICAgICAgIH0KICAgICAgICAuc3RhdHVzIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgICAgICB9CiAgICAgICAgLnN0YXR1cy11cGxvYWRpbmcgeyBiYWNrZ3JvdW5kOiByZ2JhKDAsMjEyLDI1NSwwLjIpOyBjb2xvcjogIzAwZDRmZjsgfQogICAgICAgIC5zdGF0dXMtZG9uZSB7IGJhY2tncm91bmQ6IHJnYmEoMCwyNTUsMTM2LDAuMik7IGNvbG9yOiAjMDBmZjg4OyB9CiAgICAgICAgLnN0YXR1cy1lcnJvciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDAsNjgsMC4yKTsgY29sb3I6ICNmZjAwNDQ7IH0KICAgICAgICAudXBsb2FkLWJ0biB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzAwZDRmZiwgIzdiMmNiZik7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIC51cGxvYWQtYnRuOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMjEyLDI1NSwwLjMpOwogICAgICAgIH0KICAgICAgICAudXBsb2FkLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIH0KICAgICAgICAucmVzdWx0IHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgICAucmVzdWx0LnN1Y2Nlc3MgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDI1NSwxMzYsMC4xKTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLDI1NSwxMzYsMC4zKTsKICAgICAgICAgICAgY29sb3I6ICMwMGZmODg7CiAgICAgICAgfQogICAgICAgIC5yZXN1bHQuZXJyb3IgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMCw2OCwwLjEpOwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwwLDY4LDAuMyk7CiAgICAgICAgICAgIGNvbG9yOiAjZmYwMDQ0OwogICAgICAgIH0KICAgICAgICAuc3VwcG9ydGVkLWZvcm1hdHMgewogICAgICAgICAgICBtYXJnaW4tdG9wOiAyNXB4OwogICAgICAgICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICB9CiAgICAgICAgLnN1cHBvcnRlZC1mb3JtYXRzIGgzIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB9CiAgICAgICAgLmZvcm1hdC10YWdzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmZvcm1hdC10YWcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgIDxoMT7wn5OBIOmAhuWQkeW3peeoi+W4iOaWh+S7tuS4iuS8oDwvaDE+CiAgICAgICAgPHAgY2xhc3M9InN1YnRpdGxlIj7mioogQVBLIC8gWEFQSyAvIEpBUiDnrYnmlofku7bnm7TmjqXkvKDnu5nmiJHliIbmnpA8L3A+CgogICAgICAgIDxkaXYgY2xhc3M9ImRyb3Atem9uZSIgaWQ9ImRyb3Bab25lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbiI+4piB77iPPC9kaXY+CiAgICAgICAgICAgIDxwPueCueWHu+mAieaLqeaWh+S7tiDmiJYg5ouW5ou95paH5Lu25Yiw5q2k5aSEPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0iaGludCI+5pSv5oyBIEFQSywgWEFQSywgSkFSLCBBQVIsIFpJUCwgU08sIERFWCDnrYnmoLzlvI88L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iZmlsZS1pbnB1dCIgbXVsdGlwbGU+CgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbGlzdCIgaWQ9ImZpbGVMaXN0Ij48L2Rpdj4KCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0idXBsb2FkLWJ0biIgaWQ9InVwbG9hZEJ0biIgZGlzYWJsZWQ+5byA5aeL5LiK5LygPC9idXR0b24+CgogICAgICAgIDxkaXYgY2xhc3M9InJlc3VsdCIgaWQ9InJlc3VsdCI+PC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InN1cHBvcnRlZC1mb3JtYXRzIj4KICAgICAgICAgICAgPGgzPuaUr+aMgeeahOaWh+S7tuagvOW8jzwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm1hdC10YWdzIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb3JtYXQtdGFnIj4uYXBrPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm1hdC10YWciPi54YXBrPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm1hdC10YWciPi5qYXI8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybWF0LXRhZyI+LmFhcjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb3JtYXQtdGFnIj4uemlwPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm1hdC10YWciPi5zbzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb3JtYXQtdGFnIj4uZGV4PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm1hdC10YWciPi50eHQ8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybWF0LXRhZyI+Lmpzb248L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybWF0LXRhZyI+LnhtbDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICAgIGNvbnN0IGRyb3Bab25lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bab25lJyk7CiAgICAgICAgY29uc3QgZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtaW5wdXQnKTsKICAgICAgICBjb25zdCBmaWxlTGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTGlzdCcpOwogICAgICAgIGNvbnN0IHVwbG9hZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRCdG4nKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7CgogICAgICAgIGxldCBmaWxlc1RvVXBsb2FkID0gW107CgogICAgICAgIGRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gZmlsZUlucHV0LmNsaWNrKCkpOwoKICAgICAgICBkcm9wWm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIChlKSA9PiB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZHJvcFpvbmUuY2xhc3NMaXN0LmFkZCgnZHJhZ292ZXInKTsKICAgICAgICB9KTsKCiAgICAgICAgZHJvcFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgKCkgPT4gewogICAgICAgICAgICBkcm9wWm9uZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnb3ZlcicpOwogICAgICAgIH0pOwoKICAgICAgICBkcm9wWm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKGUpID0+IHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBkcm9wWm9uZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnb3ZlcicpOwogICAgICAgICAgICBoYW5kbGVGaWxlcyhlLmRhdGFUcmFuc2Zlci5maWxlcyk7CiAgICAgICAgfSk7CgogICAgICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICAgICAgICBoYW5kbGVGaWxlcyhlLnRhcmdldC5maWxlcyk7CiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZUZpbGVzKGZpbGVzKSB7CiAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHsKICAgICAgICAgICAgICAgIGZpbGVzVG9VcGxvYWQucHVzaChmaWxlKTsKICAgICAgICAgICAgICAgIGFkZEZpbGVUb0xpc3QoZmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXBsb2FkQnRuLmRpc2FibGVkID0gZmlsZXNUb1VwbG9hZC5sZW5ndGggPT09IDA7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBhZGRGaWxlVG9MaXN0KGZpbGUpIHsKICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICBpdGVtLmNsYXNzTmFtZSA9ICdmaWxlLWl0ZW0nOwogICAgICAgICAgICBpdGVtLmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pbmZvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtbmFtZSI+JHtmaWxlLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj4ke2Zvcm1hdFNpemUoZmlsZS5zaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtZmlsbCIgaWQ9InByb2dyZXNzLSR7ZmlsZS5uYW1lfSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0dXMgc3RhdHVzLXVwbG9hZGluZyIgaWQ9InN0YXR1cy0ke2ZpbGUubmFtZX0iPuetieW+heS4rTwvc3Bhbj4KICAgICAgICAgICAgYDsKICAgICAgICAgICAgZmlsZUxpc3QuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBmb3JtYXRTaXplKGJ5dGVzKSB7CiAgICAgICAgICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEInOwogICAgICAgICAgICBjb25zdCBrID0gMTAyNDsKICAgICAgICAgICAgY29uc3Qgc2l6ZXMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InXTsKICAgICAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpOwogICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKICAgICAgICB9CgogICAgICAgIHVwbG9hZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdXBsb2FkQnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmVzdWx0LmNsYXNzTmFtZSA9ICdyZXN1bHQnOwogICAgICAgICAgICByZXN1bHQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCiAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXNUb1VwbG9hZCkgewogICAgICAgICAgICAgICAgYXdhaXQgdXBsb2FkRmlsZShmaWxlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmVzdWx0LmNsYXNzTmFtZSA9ICdyZXN1bHQgc3VjY2Vzcyc7CiAgICAgICAgICAgIHJlc3VsdC50ZXh0Q29udGVudCA9ICfinIUg5omA5pyJ5paH5Lu25LiK5Lyg5a6M5oiQ77yB6YCG5ZCR5bel56iL5biI5bey5pS25Yiw5paH5Lu277yM5Y+v5Lul5byA5aeL5YiG5p6Q5LqG44CCJzsKICAgICAgICAgICAgZmlsZXNUb1VwbG9hZCA9IFtdOwogICAgICAgIH0pOwoKICAgICAgICBhc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlKGZpbGUpIHsKICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3NFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBwcm9ncmVzcy0ke2ZpbGUubmFtZX1gKTsKICAgICAgICAgICAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc3RhdHVzLSR7ZmlsZS5uYW1lfWApOwogICAgICAgICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICfkuIrkvKDkuK0uLi4nOwogICAgICAgICAgICBzdGF0dXNFbC5jbGFzc05hbWUgPSAnc3RhdHVzIHN0YXR1cy11cGxvYWRpbmcnOwoKICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7CgogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICAgICAgICAgIHhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCAoZSkgPT4gewogICAgICAgICAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVyY2VudCA9IChlLmxvYWRlZCAvIGUudG90YWwpICogMTAwOwogICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0VsLnN0eWxlLndpZHRoID0gcGVyY2VudCArICclJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAn5a6M5oiQJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0VsLmNsYXNzTmFtZSA9ICdzdGF0dXMgc3RhdHVzLWRvbmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NFbC5zdHlsZS53aWR0aCA9ICcxMDAlJzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ+Wksei0pSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNFbC5jbGFzc05hbWUgPSAnc3RhdHVzIHN0YXR1cy1lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICflpLHotKUnOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNFbC5jbGFzc05hbWUgPSAnc3RhdHVzIHN0YXR1cy1lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICflpLHotKUnOwogICAgICAgICAgICAgICAgICAgIHN0YXR1c0VsLmNsYXNzTmFtZSA9ICdzdGF0dXMgc3RhdHVzLWVycm9yJzsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB4aHIub3BlbignUE9TVCcsICcvdXBsb2FkJyk7CiAgICAgICAgICAgICAgICB4aHIuc2VuZChmb3JtRGF0YSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4KJycnCgoKZGVmIGFsbG93ZWRfZmlsZShmaWxlbmFtZSk6CiAgICByZXR1cm4gJy4nIGluIGZpbGVuYW1lIGFuZCBmaWxlbmFtZS5yc3BsaXQoJy4nLCAxKVsxXS5sb3dlcigpIGluIEFMTE9XRURfRVhURU5TSU9OUwoKCkBhcHAucm91dGUoJy8nKQpkZWYgaW5kZXgoKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGVfc3RyaW5nKEhUTUxfUEFHRSkKCgpAYXBwLnJvdXRlKCcvdXBsb2FkJywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIHVwbG9hZF9maWxlKCk6CiAgICBpZiAnZmlsZScgbm90IGluIHJlcXVlc3QuZmlsZXM6CiAgICAgICAgcmV0dXJuIGpzb25pZnkoeydzdWNjZXNzJzogRmFsc2UsICdlcnJvcic6ICfmsqHmnInmlofku7YnfSkKCiAgICBmaWxlID0gcmVxdWVzdC5maWxlc1snZmlsZSddCiAgICBpZiBmaWxlLmZpbGVuYW1lID09ICcnOgogICAgICAgIHJldHVybiBqc29uaWZ5KHsnc3VjY2Vzcyc6IEZhbHNlLCAnZXJyb3InOiAn5paH5Lu25ZCN5Li656m6J30pCgogICAgaWYgZmlsZSBhbmQgYWxsb3dlZF9maWxlKGZpbGUuZmlsZW5hbWUpOgogICAgICAgIGZpbGVuYW1lID0gc2VjdXJlX2ZpbGVuYW1lKGZpbGUuZmlsZW5hbWUpCiAgICAgICAgIyDlpoLmnpzmlofku7blt7LlrZjlnKjvvIzliqDml7bpl7TmiLPlkI7nvIAKICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihhcHAuY29uZmlnWydVUExPQURfRk9MREVSJ10sIGZpbGVuYW1lKQogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKICAgICAgICAgICAgbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKICAgICAgICAgICAgZmlsZW5hbWUgPSBmIntuYW1lfV97aW50KF9faW1wb3J0X18oJ3RpbWUnKS50aW1lKCkpfXtleHR9IgogICAgICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihhcHAuY29uZmlnWydVUExPQURfRk9MREVSJ10sIGZpbGVuYW1lKQoKICAgICAgICBmaWxlLnNhdmUoZmlsZXBhdGgpCiAgICAgICAgc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlcGF0aCkKCiAgICAgICAgcmV0dXJuIGpzb25pZnkoewogICAgICAgICAgICAnc3VjY2Vzcyc6IFRydWUsCiAgICAgICAgICAgICdmaWxlbmFtZSc6IGZpbGVuYW1lLAogICAgICAgICAgICAnc2l6ZSc6IHNpemUsCiAgICAgICAgICAgICdwYXRoJzogZmlsZXBhdGgKICAgICAgICB9KQoKICAgIHJldHVybiBqc29uaWZ5KHsKICAgICAgICAnc3VjY2Vzcyc6IEZhbHNlLAogICAgICAgICdlcnJvcic6IGYn5LiN5pSv5oyB55qE5paH5Lu25qC85byP44CC5pSv5oyB55qE5qC85byPOiB7IiwgIi5qb2luKEFMTE9XRURfRVhURU5TSU9OUyl9JwogICAgfSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcG9ydCA9IGludChvcy5lbnZpcm9uLmdldCgnUE9SVCcsIDgwODApKQogICAgcHJpbnQoZiI9IiAqIDUwKQogICAgcHJpbnQoZiIgIOaWh+S7tuS4iuS8oOacjeWKoeW3suWQr+WKqCIpCiAgICBwcmludChmIiAg6K6/6Zeu5Zyw5Z2AOiBodHRwOi8vMC4wLjAuMDp7cG9ydH0iKQogICAgcHJpbnQoZiIgIOS4iuS8oOebruW9lToge1VQTE9BRF9GT0xERVJ9IikKICAgIHByaW50KGYiPSIgKiA1MCkKICAgIGFwcC5ydW4oaG9zdD0nMC4wLjAuMCcsIHBvcnQ9cG9ydCwgZGVidWc9RmFsc2UpCg==
B64EOF_upload_server.py
chmod +x "$DECODE_DIR/upload_server.py" 2>/dev/null

echo "恢复: upload_to_mpimg.py ..."
base64 -d << 'B64EOF_upload_to_mpimg.py' > "$DECODE_DIR/upload_to_mpimg.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIK5LiK5Lyg5paH5Lu25YiwIG1waW1nLmNuIOe9keebmArmtYHnqIvvvJoKICAxLiDojrflj5bkuIrkvKDpobXpnaIgKyBDU1JGIHRva2Vu77yI5b+F6aG75bim5Lit5paHIEFjY2VwdC1MYW5ndWFnZe+8iQogIDIuIOiuoeeul+aWh+S7tiBNRDUKICAzLiDosIPnlKggcHJlX3VwbG9hZCDojrflj5bkuIrkvKDlj4LmlbAKICA0LiDliIbniYfkuIrkvKDmlofku7YKICA1LiDosIPnlKggY29tcGxldGVfdXBsb2FkIOWujOaIkO+8iOS7heesrOS4ieaWueS4iuS8oOmcgOimge+8iQoiIiIKaW1wb3J0IHN5cywgb3MsIHJlLCBoYXNobGliLCBqc29uCmltcG9ydCB1cmxsaWIucmVxdWVzdCwgdXJsbGliLnBhcnNlLCBodHRwLmNvb2tpZWphcgoKSEVBREVSU19CQVNFID0gewogICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyNi4wLjAuMCBTYWZhcmkvNTM3LjM2IEVkZy8xMjYuMC4wLjAiLAogICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJ6aC1DTix6aDtxPTAuOSxlbjtxPTAuOCIsCiAgICAiQWNjZXB0IjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsKi8qO3E9MC44IiwKICAgICJSZWZlcmVyIjogImh0dHBzOi8vbXBpbWcuY24vdXBsb2FkLnBocCIsCn0KCkJBU0VfVVJMID0gImh0dHBzOi8vbXBpbWcuY24iCgojIOWFqOWxgCBjb29raWUgamFy77yM5L+d5oyB5Lya6K+dCmNvb2tpZV9qYXIgPSBodHRwLmNvb2tpZWphci5Db29raWVKYXIoKQpvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIodXJsbGliLnJlcXVlc3QuSFRUUENvb2tpZVByb2Nlc3Nvcihjb29raWVfamFyKSkKCmN1cnJlbnRfdG9rZW4gPSAiIgoKZGVmIGZldGNoKHVybCwgZGF0YT1Ob25lLCBoZWFkZXJzPU5vbmUsIHRpbWVvdXQ9MTIwKToKICAgIGggPSB7KipIRUFERVJTX0JBU0UsICoqKGhlYWRlcnMgb3Ige30pfQogICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmwsIGRhdGE9ZGF0YSwgaGVhZGVycz1oLCBtZXRob2Q9IlBPU1QiIGlmIGRhdGEgZWxzZSAiR0VUIikKICAgIHJldHVybiBvcGVuZXIub3BlbihyZXEsIHRpbWVvdXQ9dGltZW91dCkKCmRlZiB1cGRhdGVfdG9rZW5fZnJvbV9yZXNwb25zZShkYXRhKToKICAgIGdsb2JhbCBjdXJyZW50X3Rva2VuCiAgICBpZiBkYXRhIGFuZCAiY3NyZl90b2tlbiIgaW4gZGF0YSBhbmQgZGF0YVsiY3NyZl90b2tlbiJdOgogICAgICAgIGN1cnJlbnRfdG9rZW4gPSBkYXRhWyJjc3JmX3Rva2VuIl0KICAgICAgICBwcmludChmIltUT0tFTl0g5pu05paw5Li6OiB7Y3VycmVudF90b2tlbn0iKQoKZGVmIGZldGNoX2NzcmZfdG9rZW4oKToKICAgIGdsb2JhbCBjdXJyZW50X3Rva2VuCiAgICByZXNwID0gZmV0Y2goZiJ7QkFTRV9VUkx9L3VwbG9hZC5waHAiKQogICAgaHRtbCA9IHJlc3AucmVhZCgpLmRlY29kZSgidXRmLTgiLCBlcnJvcnM9InJlcGxhY2UiKQogICAgbSA9IHJlLnNlYXJjaChyJ25hbWU9ImNzcmZfdG9rZW4iW14+XSt2YWx1ZT0iKFteIl0rKSInLCBodG1sKQogICAgaWYgbm90IG06CiAgICAgICAgbSA9IHJlLnNlYXJjaChyJ3ZhbHVlPSIoW14iXSspIltePl0qaWQ9ImNzcmZfdG9rZW4iJywgaHRtbCkKICAgIGlmIG5vdCBtOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigi5peg5rOV6I635Y+WIENTUkYgdG9rZW4iKQogICAgY3VycmVudF90b2tlbiA9IG0uZ3JvdXAoMSkKICAgIHByaW50KGYiW09LXSBDU1JGIHRva2VuOiB7Y3VycmVudF90b2tlbn0iKQogICAgcmV0dXJuIGN1cnJlbnRfdG9rZW4KCmRlZiBmaWxlX21kNShmaWxlcGF0aCk6CiAgICBoID0gaGFzaGxpYi5tZDUoKQogICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAicmIiKSBhcyBmOgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGNodW5rID0gZi5yZWFkKDgxOTIpCiAgICAgICAgICAgIGlmIG5vdCBjaHVuazoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGgudXBkYXRlKGNodW5rKQogICAgcmV0dXJuIGguaGV4ZGlnZXN0KCkKCmRlZiBwb3N0X2pzb24odXJsLCBkYXRhLCBjb250ZW50X3R5cGU9Tm9uZSk6CiAgICBoZWFkZXJzID0geyJYLVJlcXVlc3RlZC1XaXRoIjogIlhNTEh0dHBSZXF1ZXN0In0KICAgIGlmIGNvbnRlbnRfdHlwZToKICAgICAgICBoZWFkZXJzWyJDb250ZW50LVR5cGUiXSA9IGNvbnRlbnRfdHlwZQogICAgcmVzcCA9IGZldGNoKHVybCwgZGF0YT1kYXRhLCBoZWFkZXJzPWhlYWRlcnMpCiAgICByZXR1cm4ganNvbi5sb2FkcyhyZXNwLnJlYWQoKS5kZWNvZGUoInV0Zi04IiwgZXJyb3JzPSJyZXBsYWNlIikpCgpkZWYgcHJlX3VwbG9hZChuYW1lLCBzaXplLCBmaWxlX2hhc2gsIHNob3c9MSwgaXNwd2Q9MCwgcHdkPSIiKToKICAgIGdsb2JhbCBjdXJyZW50X3Rva2VuCiAgICBkYXRhID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSh7CiAgICAgICAgImNzcmZfdG9rZW4iOiBjdXJyZW50X3Rva2VuLAogICAgICAgICJuYW1lIjogbmFtZSwKICAgICAgICAiaGFzaCI6IGZpbGVfaGFzaCwKICAgICAgICAic2l6ZSI6IHNpemUsCiAgICAgICAgInNob3ciOiBzdHIoc2hvdyksCiAgICAgICAgImlzcHdkIjogc3RyKGlzcHdkKSwKICAgICAgICAicHdkIjogcHdkLAogICAgfSkuZW5jb2RlKCJ1dGYtOCIpCiAgICByZXN1bHQgPSBwb3N0X2pzb24oZiJ7QkFTRV9VUkx9L2FqYXgucGhwP2FjdD1wcmVfdXBsb2FkIiwgZGF0YSkKICAgIHByaW50KGYiW3ByZV91cGxvYWRdIGNvZGU9e3Jlc3VsdC5nZXQoJ2NvZGUnKX0sIG1zZz17cmVzdWx0LmdldCgnbXNnJyl9IikKICAgIHVwZGF0ZV90b2tlbl9mcm9tX3Jlc3BvbnNlKHJlc3VsdCkKICAgIHJldHVybiByZXN1bHQKCmRlZiB1cGxvYWRfcGFydChmaWxlX3BhdGgsIGNodW5rX251bSwgY2h1bmtfc2l6ZSwgZmlsZV9oYXNoKToKICAgICIiIuS4iuS8oOWNleS4quWIhueJh++8jOi/lOWbniBKU09OIiIiCiAgICBnbG9iYWwgY3VycmVudF90b2tlbgogICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgInJiIikgYXMgZjoKICAgICAgICBmLnNlZWsoKGNodW5rX251bSAtIDEpICogY2h1bmtfc2l6ZSkKICAgICAgICBibG9iID0gZi5yZWFkKGNodW5rX3NpemUpCgogICAgYm91bmRhcnkgPSAiLS0tLVdlYktpdEZvcm1Cb3VuZGFyeVVwbG9hZFBhcnQiCiAgICBib2R5ID0gKAogICAgICAgIGYiLS17Ym91bmRhcnl9XHJcbiIKICAgICAgICBmJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iZmlsZSI7IGZpbGVuYW1lPSJibG9iIlxyXG4nCiAgICAgICAgZiJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxyXG5cclxuIgogICAgKS5lbmNvZGUoInV0Zi04IikgKyBibG9iICsgZiJcclxuLS17Ym91bmRhcnl9XHJcbiIuZW5jb2RlKCJ1dGYtOCIpCiAgICBib2R5ICs9ICgKICAgICAgICBmJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iaGFzaCJcclxuXHJcbntmaWxlX2hhc2h9XHJcbicKICAgICAgICBmIi0te2JvdW5kYXJ5fVxyXG4iCiAgICAgICAgZidDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImNodW5rIlxyXG5cclxue2NodW5rX251bX1cclxuJwogICAgICAgIGYiLS17Ym91bmRhcnl9XHJcbiIKICAgICAgICBmJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iY3NyZl90b2tlbiJcclxuXHJcbntjdXJyZW50X3Rva2VufVxyXG4nCiAgICAgICAgZiItLXtib3VuZGFyeX0tLVxyXG4iCiAgICApLmVuY29kZSgidXRmLTgiKQoKICAgIHJlc3VsdCA9IHBvc3RfanNvbigKICAgICAgICBmIntCQVNFX1VSTH0vYWpheC5waHA/YWN0PXVwbG9hZF9wYXJ0IiwKICAgICAgICBib2R5LAogICAgICAgIGNvbnRlbnRfdHlwZT1mIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PXtib3VuZGFyeX0iLAogICAgKQogICAgdXBkYXRlX3Rva2VuX2Zyb21fcmVzcG9uc2UocmVzdWx0KQogICAgcmV0dXJuIHJlc3VsdAoKZGVmIGNvbXBsZXRlX3VwbG9hZChmaWxlX2hhc2gpOgogICAgZ2xvYmFsIGN1cnJlbnRfdG9rZW4KICAgIGRhdGEgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHsKICAgICAgICAiaGFzaCI6IGZpbGVfaGFzaCwKICAgICAgICAiY3NyZl90b2tlbiI6IGN1cnJlbnRfdG9rZW4sCiAgICB9KS5lbmNvZGUoInV0Zi04IikKICAgIHJlc3VsdCA9IHBvc3RfanNvbihmIntCQVNFX1VSTH0vYWpheC5waHA/YWN0PWNvbXBsZXRlX3VwbG9hZCIsIGRhdGEpCiAgICBwcmludChmIltjb21wbGV0ZV91cGxvYWRdIGNvZGU9e3Jlc3VsdC5nZXQoJ2NvZGUnKX0sIG1zZz17cmVzdWx0LmdldCgnbXNnJyl9IikKICAgIHVwZGF0ZV90b2tlbl9mcm9tX3Jlc3BvbnNlKHJlc3VsdCkKICAgIHJldHVybiByZXN1bHQKCmRlZiB1cGxvYWRfZmlsZShmaWxlX3BhdGgpOgogICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVfcGF0aCkKICAgIHNpemUgPSBvcy5wYXRoLmdldHNpemUoZmlsZV9wYXRoKQogICAgcHJpbnQoZiJbSU5GT10g5paH5Lu2OiB7ZmlsZW5hbWV9ICh7c2l6ZX0gYnl0ZXMgPSB7c2l6ZS8xMDI0LzEwMjQ6LjJmfSBNQikiKQoKICAgIGZldGNoX2NzcmZfdG9rZW4oKQogICAgZmlsZV9oYXNoID0gZmlsZV9tZDUoZmlsZV9wYXRoKQogICAgcHJpbnQoZiJbT0tdIE1ENToge2ZpbGVfaGFzaH0iKQoKICAgIHByZSA9IHByZV91cGxvYWQoZmlsZW5hbWUsIHNpemUsIGZpbGVfaGFzaCkKCiAgICBpZiBwcmUuZ2V0KCJjb2RlIikgPT0gMToKICAgICAgICBwcmludCgiW09LXSDmlofku7blt7LlrZjlnKjkuo7mnI3liqHlmajvvIznp5LkvKDmiJDlip/vvIEiKQogICAgICAgIHJldHVybiBwcmUKCiAgICBpZiBwcmUuZ2V0KCJjb2RlIikgIT0gMDoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJwcmVfdXBsb2FkIOWksei0pToge3ByZS5nZXQoJ21zZycpfSIpCgogICAgIyDnrKzkuInmlrnkuIrkvKDmiY3pnIDopoEgY29tcGxldGVfdXBsb2FkCiAgICBpc190aGlyZCA9IHByZS5nZXQoInRoaXJkIikKICAgIGlmIGlzX3RoaXJkOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigi56ys5LiJ5pa55LiK5Lyg5pqC5LiN5pSv5oyB77yM6K+35omL5Yqo5LiK5LygIikKCiAgICBjaHVua19zaXplID0gcHJlLmdldCgiY2h1bmtzaXplIiwgc2l6ZSkKICAgIGNodW5rcyA9IHByZS5nZXQoImNodW5rcyIsIDEpCiAgICBwcmludChmIltJTkZPXSDliIbniYflpKflsI86IHtjaHVua19zaXplfSBieXRlcywg5oC75YiG54mHOiB7Y2h1bmtzfSIpCgogICAgcmVzdWx0ID0gTm9uZQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgY2h1bmtzICsgMSk6CiAgICAgICAgcHJpbnQoZiJbVVBMT0FEXSDkuIrkvKDliIbniYcge2l9L3tjaHVua3N9IC4uLiIsIGVuZD0iICIsIGZsdXNoPVRydWUpCiAgICAgICAgcmVzID0gdXBsb2FkX3BhcnQoZmlsZV9wYXRoLCBpLCBjaHVua19zaXplLCBmaWxlX2hhc2gpCiAgICAgICAgaWYgcmVzLmdldCgiY29kZSIpIG5vdCBpbiAoMCwgMSk6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihmIuWIhueJhyB7aX0g5LiK5Lyg5aSx6LSlOiB7cmVzLmdldCgnbXNnJyl9IikKICAgICAgICBwcmludCgiT0siKQogICAgICAgIHJlc3VsdCA9IHJlcwoKICAgICMg55u05o6l5LiK5Lyg5pe277yM5pyA5ZCO5LiA5LiqIHVwbG9hZF9wYXJ0IOeahOi/lOWbnue7k+aenOWwseaYr+acgOe7iOe7k+aenAogICAgIyDnrKzkuInmlrnkuIrkvKDmiY3pnIDopoHosIPnlKggY29tcGxldGVfdXBsb2FkCiAgICBpZiBpc190aGlyZDoKICAgICAgICByZXN1bHQgPSBjb21wbGV0ZV91cGxvYWQoZmlsZV9oYXNoKQogICAgICAgIGlmIHJlc3VsdC5nZXQoImNvZGUiKSBub3QgaW4gKDAsIDEpOgogICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJjb21wbGV0ZV91cGxvYWQg5aSx6LSlOiB7cmVzdWx0LmdldCgnbXNnJyl9IikKCiAgICBwcmludCgiW09LXSDkuIrkvKDlrozmiJDvvIEiKQogICAgcmV0dXJuIHJlc3VsdAoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgogICAgICAgIHByaW50KGYi55So5rOVOiBweXRob24zIHtzeXMuYXJndlswXX0gPOaWh+S7tui3r+W+hD4iKQogICAgICAgIHN5cy5leGl0KDEpCgogICAgZmlsZXBhdGggPSBzeXMuYXJndlsxXQogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKICAgICAgICBwcmludChmIltFUlJPUl0g5paH5Lu25LiN5a2Y5ZyoOiB7ZmlsZXBhdGh9IikKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIHRyeToKICAgICAgICByZXN1bHQgPSB1cGxvYWRfZmlsZShmaWxlcGF0aCkKICAgICAgICBwcmludChmIlxu57uT5p6cOiB7anNvbi5kdW1wcyhyZXN1bHQsIGVuc3VyZV9hc2NpaT1GYWxzZSwgaW5kZW50PTIpfSIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoZiJbRVJST1JdIHtlfSIpCiAgICAgICAgc3lzLmV4aXQoMSkK
B64EOF_upload_to_mpimg.py
chmod +x "$DECODE_DIR/upload_to_mpimg.py" 2>/dev/null

echo "恢复: SrpatchAndroid.kt ..."
base64 -d << 'B64EOF_SrpatchAndroid.kt' > "$DECODE_DIR/SrpatchAndroid.kt"
aW1wb3J0IGphdmEuaW8uRmlsZQppbXBvcnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlCgpvYmplY3QgU3JwYXRjaEFuZHJvaWQgewoKICAgIC8qKgogICAgICog57uZ5paH5Lu25omT5LqM6L+b5Yi26KGl5LiBCiAgICAgKiBAcGFyYW0gZmlsZVBhdGgg6KaB6KGl5LiB55qE5paH5Lu26Lev5b6ECiAgICAgKiBAcGFyYW0gb2Zmc2V0IOWBj+enu++8iOWNgei/m+WItu+8iQogICAgICogQHBhcmFtIG9yaWdpbmFsSGV4IOWOn+Wni+Wtl+iKgueahOWNgeWFrei/m+WItuWtl+espuS4sgogICAgICogQHBhcmFtIHBhdGNoSGV4IOimgeabv+aNouaIkOeahOWNgeWFrei/m+WItuWtl+espuS4sgogICAgICogQHBhcmFtIGNyZWF0ZUJhY2t1cCDmmK/lkKbliJvlu7ogLmJhayDlpIfku70KICAgICAqLwogICAgZnVuIHBhdGNoRmlsZSgKICAgICAgICBmaWxlUGF0aDogU3RyaW5nLAogICAgICAgIG9mZnNldDogTG9uZywKICAgICAgICBvcmlnaW5hbEhleDogU3RyaW5nLAogICAgICAgIHBhdGNoSGV4OiBTdHJpbmcsCiAgICAgICAgY3JlYXRlQmFja3VwOiBCb29sZWFuID0gdHJ1ZQogICAgKTogUmVzdWx0PFVuaXQ+IHsKICAgICAgICByZXR1cm4gcnVuQ2F0Y2hpbmcgewogICAgICAgICAgICB2YWwgZmlsZSA9IEZpbGUoZmlsZVBhdGgpCiAgICAgICAgICAgIHJlcXVpcmUoZmlsZS5leGlzdHMoKSkgeyAi5paH5Lu25LiN5a2Y5ZyoIiB9CgogICAgICAgICAgICB2YWwgb3JpZ2luYWxCeXRlcyA9IGhleFRvQnl0ZXMob3JpZ2luYWxIZXgpCiAgICAgICAgICAgIHZhbCBwYXRjaEJ5dGVzID0gaGV4VG9CeXRlcyhwYXRjaEhleCkKICAgICAgICAgICAgcmVxdWlyZShvcmlnaW5hbEJ5dGVzLnNpemUgPT0gcGF0Y2hCeXRlcy5zaXplKSB7ICLljp/lp4vlrZfoioLkuI7ooaXkuIHlrZfoioLplb/luqbkuI3kuIDoh7QiIH0KCiAgICAgICAgICAgIC8vIOWkh+S7vQogICAgICAgICAgICBpZiAoY3JlYXRlQmFja3VwKSB7CiAgICAgICAgICAgICAgICB2YWwgYmFrRmlsZSA9IEZpbGUoZmlsZVBhdGggKyAiLmJhayIpCiAgICAgICAgICAgICAgICBmaWxlLmNvcHlUbyhiYWtGaWxlLCBvdmVyd3JpdGUgPSB0cnVlKQogICAgICAgICAgICB9CgogICAgICAgICAgICBSYW5kb21BY2Nlc3NGaWxlKGZpbGUsICJydyIpLnVzZSB7IHJhZiAtPgogICAgICAgICAgICAgICAgcmFmLnNlZWsob2Zmc2V0KQogICAgICAgICAgICAgICAgdmFsIHJlYWRCeXRlcyA9IEJ5dGVBcnJheShvcmlnaW5hbEJ5dGVzLnNpemUpCiAgICAgICAgICAgICAgICByYWYucmVhZChyZWFkQnl0ZXMpCgogICAgICAgICAgICAgICAgaWYgKCFyZWFkQnl0ZXMuY29udGVudEVxdWFscyhvcmlnaW5hbEJ5dGVzKSkgewogICAgICAgICAgICAgICAgICAgIGVycm9yKCLlrZfoioLmoKHpqozkuI3ljLnphY1cbuacn+acm++8miR7b3JpZ2luYWxIZXh9XG7lrp7pmYXvvJoke2J5dGVzVG9IZXgocmVhZEJ5dGVzKX0iKQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJhZi5zZWVrKG9mZnNldCkKICAgICAgICAgICAgICAgIHJhZi53cml0ZShwYXRjaEJ5dGVzKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIOWNgeWFrei/m+WItuWtl+espuS4siDihpIgQnl0ZUFycmF5CiAgICBwcml2YXRlIGZ1biBoZXhUb0J5dGVzKGhleDogU3RyaW5nKTogQnl0ZUFycmF5IHsKICAgICAgICB2YWwgY2xlYW4gPSBoZXgucmVwbGFjZSgiICIsICIiKS5sb3dlcmNhc2UoKQogICAgICAgIHJlcXVpcmUoY2xlYW4ubGVuZ3RoICUgMiA9PSAwKSB7ICLml6DmlYjljYHlha3ov5vliLYiIH0KICAgICAgICByZXR1cm4gY2xlYW4uY2h1bmtlZCgyKQogICAgICAgICAgICAubWFwIHsgaXQudG9JbnQoMTYpLnRvQnl0ZSgpIH0KICAgICAgICAgICAgLnRvQnl0ZUFycmF5KCkKICAgIH0KCiAgICAvLyBCeXRlQXJyYXkg4oaSIOWNgeWFrei/m+WItuWtl+espuS4sgogICAgcHJpdmF0ZSBmdW4gYnl0ZXNUb0hleChieXRlczogQnl0ZUFycmF5KTogU3RyaW5nIHsKICAgICAgICByZXR1cm4gYnl0ZXMuam9pblRvU3RyaW5nKCIiKSB7ICIlMDJ4Ii5mb3JtYXQoaXQpIH0KICAgIH0KfQo=
B64EOF_SrpatchAndroid.kt
chmod +x "$DECODE_DIR/SrpatchAndroid.kt" 2>/dev/null

echo "恢复: example_patches.json ..."
base64 -d << 'B64EOF_example_patches.json' > "$DECODE_DIR/example_patches.json"
WwogIHsKICAgICJvZmZzZXQiOiAiMHgxMjM0IiwKICAgICJvcmlnaW5hbCI6ICIxMiAzNCA1NiA3OCIsCiAgICAicGF0Y2giOiAiMDAgMDAgMDAgMDAiLAogICAgImRlc2NyaXB0aW9uIjogIuekuuS+izog5bCG5p+Q5Liq5Yik5pat5p2h5Lu2572u56m6IgogIH0sCiAgewogICAgIm9mZnNldCI6ICIweDU2NzgiLAogICAgIm9yaWdpbmFsIjogIjAwIDAwIDAwIDAwIiwKICAgICJwYXRjaCI6ICIwMSAwMCAwMCAwMCIsCiAgICAiZGVzY3JpcHRpb24iOiAi56S65L6LOiDlvLrliLbov5Tlm54gdHJ1ZSAoY29uc3QvNCB2MCwgMHgxKSIKICB9LAogIHsKICAgICJvZmZzZXQiOiAiMHg5QUJDIiwKICAgICJvcmlnaW5hbCI6ICIwRiAwMCIsCiAgICAicGF0Y2giOiAiMDAgMDAiLAogICAgImRlc2NyaXB0aW9uIjogIuekuuS+izog6Lez6L+H5p+Q5Liq6LCD55SoIChub3ApIgogIH0KXQo=
B64EOF_example_patches.json
chmod +x "$DECODE_DIR/example_patches.json" 2>/dev/null

echo "恢复: dex_vip_hunter.py ..."
base64 -d << 'B64EOF_dex_vip_hunter.py' > "$DECODE_DIR/dex_vip_hunter.py"
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIKREVYIFZJUCBIdW50ZXIgLSDlv6vpgJ/lrprkvY0gQW5kcm9pZCBBUEsg5Lit55qEIFZJUC/mnYPpmZDliKTmlq3pgLvovpEK5pSv5oyBIERFWCDnu5PmnoTop6PmnpAgKyBzbWFsaSDku6PnoIHliIbmnpAgKyDosIPnlKjpk77ov73ouKoKIiIiCgppbXBvcnQgc3RydWN0CmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQganNvbgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKY2xhc3MgRGV4UGFyc2VyOgogICAgIiIi6L276YeP57qnIERFWCDmlofku7bop6PmnpDlmagiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICAgICAgc2VsZi5kYXRhID0gZGF0YQogICAgICAgIHNlbGYucG9zID0gMAogICAgICAgIHNlbGYuX3BhcnNlX2hlYWRlcigpCgogICAgZGVmIF9wYXJzZV9oZWFkZXIoc2VsZik6CiAgICAgICAgaCA9IHNlbGYuZGF0YQogICAgICAgIG1hZ2ljID0gaFswOjhdCiAgICAgICAgaWYgbWFnaWNbOjRdIG5vdCBpbiAoYidkZXhcbicsIGInZGV4XHInKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBERVggbWFnaWM6ICIgKyByZXByKG1hZ2ljWzo0XSkpCgogICAgICAgIHNlbGYuc3RyaW5nX2lkc19zaXplLCBzZWxmLnN0cmluZ19pZHNfb2ZmID0gc3RydWN0LnVucGFja19mcm9tKCc8SUknLCBoLCA1NikKICAgICAgICBzZWxmLnR5cGVfaWRzX3NpemUsIHNlbGYudHlwZV9pZHNfb2ZmID0gc3RydWN0LnVucGFja19mcm9tKCc8SUknLCBoLCA2NCkKICAgICAgICBzZWxmLnByb3RvX2lkc19zaXplLCBzZWxmLnByb3RvX2lkc19vZmYgPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJSScsIGgsIDcyKQogICAgICAgIHNlbGYuZmllbGRfaWRzX3NpemUsIHNlbGYuZmllbGRfaWRzX29mZiA9IHN0cnVjdC51bnBhY2tfZnJvbSgnPElJJywgaCwgNzYpCiAgICAgICAgc2VsZi5tZXRob2RfaWRzX3NpemUsIHNlbGYubWV0aG9kX2lkc19vZmYgPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJSScsIGgsIDgwKQogICAgICAgIHNlbGYuY2xhc3NfZGVmc19zaXplLCBzZWxmLmNsYXNzX2RlZnNfb2ZmID0gc3RydWN0LnVucGFja19mcm9tKCc8SUknLCBoLCA4OCkKCiAgICBkZWYgX3JlYWRfdWxlYjEyOChzZWxmLCBvZmZzZXQpOgogICAgICAgIHZhbCA9IDAKICAgICAgICBzaGlmdCA9IDAKICAgICAgICBwb3MgPSBvZmZzZXQKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBiID0gc2VsZi5kYXRhW3Bvc10KICAgICAgICAgICAgdmFsIHw9IChiICYgMHg3ZikgPDwgc2hpZnQKICAgICAgICAgICAgcG9zICs9IDEKICAgICAgICAgICAgaWYgKGIgJiAweDgwKSA9PSAwOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgc2hpZnQgKz0gNwogICAgICAgIHJldHVybiB2YWwsIHBvcyAtIG9mZnNldAoKICAgIGRlZiBfcmVhZF9zdHJpbmcoc2VsZiwgaWR4KToKICAgICAgICBpZiBpZHggPj0gc2VsZi5zdHJpbmdfaWRzX3NpemU6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgb2ZmID0gc3RydWN0LnVucGFja19mcm9tKCc8SScsIHNlbGYuZGF0YSwgc2VsZi5zdHJpbmdfaWRzX29mZiArIGlkeCAqIDQpWzBdCiAgICAgICAgc3RybGVuLCBzbGVuID0gc2VsZi5fcmVhZF91bGViMTI4KG9mZikKICAgICAgICBvZmYgKz0gc2xlbgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtvZmY6b2ZmICsgc3RybGVuXS5kZWNvZGUoJ3V0Zi04JywgZXJyb3JzPSdyZXBsYWNlJykKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIF9yZWFkX3R5cGUoc2VsZiwgaWR4KToKICAgICAgICBpZiBpZHggPj0gc2VsZi50eXBlX2lkc19zaXplOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIHN0cl9pZHggPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJJywgc2VsZi5kYXRhLCBzZWxmLnR5cGVfaWRzX29mZiArIGlkeCAqIDQpWzBdCiAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfc3RyaW5nKHN0cl9pZHgpCgogICAgZGVmIGdldF9hbGxfY2xhc3NlcyhzZWxmKToKICAgICAgICBjbGFzc2VzID0gW10KICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLmNsYXNzX2RlZnNfc2l6ZSk6CiAgICAgICAgICAgIG9mZiA9IHNlbGYuY2xhc3NfZGVmc19vZmYgKyBpICogMzIKICAgICAgICAgICAgY2xhc3NfaWR4ID0gc3RydWN0LnVucGFja19mcm9tKCc8SScsIHNlbGYuZGF0YSwgb2ZmKVswXQogICAgICAgICAgICBhY2Nlc3NfZmxhZ3MgPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJJywgc2VsZi5kYXRhLCBvZmYgKyA0KVswXQogICAgICAgICAgICBzdXBlcmNsYXNzX2lkeCA9IHN0cnVjdC51bnBhY2tfZnJvbSgnPEknLCBzZWxmLmRhdGEsIG9mZiArIDgpWzBdCiAgICAgICAgICAgIGNsYXNzX25hbWUgPSBzZWxmLl9yZWFkX3R5cGUoY2xhc3NfaWR4KQogICAgICAgICAgICBpZiBjbGFzc19uYW1lOgogICAgICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICdpZHgnOiBpLAogICAgICAgICAgICAgICAgICAgICduYW1lJzogY2xhc3NfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnYWNjZXNzJzogYWNjZXNzX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICdzdXBlcic6IHNlbGYuX3JlYWRfdHlwZShzdXBlcmNsYXNzX2lkeCkgaWYgc3VwZXJjbGFzc19pZHggIT0gMHhGRkZGRkZGRiBlbHNlIE5vbmUKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgcmV0dXJuIGNsYXNzZXMKCiAgICBkZWYgZ2V0X2FsbF9tZXRob2RzKHNlbGYpOgogICAgICAgIG1ldGhvZHMgPSBbXQogICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubWV0aG9kX2lkc19zaXplKToKICAgICAgICAgICAgb2ZmID0gc2VsZi5tZXRob2RfaWRzX29mZiArIGkgKiA4CiAgICAgICAgICAgIGNsYXNzX2lkeCA9IHN0cnVjdC51bnBhY2tfZnJvbSgnPEgnLCBzZWxmLmRhdGEsIG9mZilbMF0KICAgICAgICAgICAgcHJvdG9faWR4ID0gc3RydWN0LnVucGFja19mcm9tKCc8SCcsIHNlbGYuZGF0YSwgb2ZmICsgMilbMF0KICAgICAgICAgICAgbmFtZV9pZHggPSBzdHJ1Y3QudW5wYWNrX2Zyb20oJzxJJywgc2VsZi5kYXRhLCBvZmYgKyA0KVswXQogICAgICAgICAgICBjbGFzc19uYW1lID0gc2VsZi5fcmVhZF90eXBlKGNsYXNzX2lkeCkKICAgICAgICAgICAgbWV0aG9kX25hbWUgPSBzZWxmLl9yZWFkX3N0cmluZyhuYW1lX2lkeCkKICAgICAgICAgICAgaWYgY2xhc3NfbmFtZSBhbmQgbWV0aG9kX25hbWU6CiAgICAgICAgICAgICAgICBtZXRob2RzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgJ2lkeCc6IGksCiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogY2xhc3NfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG1ldGhvZF9uYW1lLAogICAgICAgICAgICAgICAgfSkKICAgICAgICByZXR1cm4gbWV0aG9kcwoKCmNsYXNzIFNtYWxpQW5hbHl6ZXI6CiAgICAiIiJzbWFsaSDku6PnoIHliIbmnpDlmagiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgc21hbGlfcm9vdCk6CiAgICAgICAgc2VsZi5yb290ID0gc21hbGlfcm9vdAogICAgICAgIHNlbGYuY2xhc3NfZmlsZXMgPSB7fQogICAgICAgIHNlbGYubWV0aG9kX2luZGV4ID0gZGVmYXVsdGRpY3QobGlzdCkKICAgICAgICBzZWxmLmNhbGxfZ3JhcGggPSBkZWZhdWx0ZGljdChsaXN0KQogICAgICAgIHNlbGYuX2luZGV4X2FsbCgpCgogICAgZGVmIF9pbmRleF9hbGwoc2VsZik6CiAgICAgICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKHNlbGYucm9vdCk6CiAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlbmFtZXM6CiAgICAgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnNtYWxpJyk6CiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbikKICAgICAgICAgICAgICAgICAgICBjbHMgPSBzZWxmLl9jbGFzc19mcm9tX3BhdGgocGF0aCkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNsYXNzX2ZpbGVzW2Nsc10gPSBwYXRoCgogICAgZGVmIF9jbGFzc19mcm9tX3BhdGgoc2VsZiwgcGF0aCk6CiAgICAgICAgcmVsID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHNlbGYucm9vdCkKICAgICAgICByZWwgPSByZWwucmVwbGFjZShvcy5zZXAsICcvJykKICAgICAgICAjIHNtYWxpX2NsYXNzZXMyL2NvbS9ncmFzcy9taC8uLi4gLT4gY29tL2dyYXNzL21oLy4uLgogICAgICAgICMgc21hbGkvY29tL2FuZHJvaWR4Ly4uLiAtPiBjb20vYW5kcm9pZHgvLi4uCiAgICAgICAgZm9yIHByZWZpeCBpbiBbJ3NtYWxpX2NsYXNzZXMzLycsICdzbWFsaV9jbGFzc2VzMi8nLCAnc21hbGkvJ106CiAgICAgICAgICAgIGlmIHJlbC5zdGFydHN3aXRoKHByZWZpeCk6CiAgICAgICAgICAgICAgICByZWwgPSByZWxbbGVuKHByZWZpeCk6XQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICByZXR1cm4gJ0wnICsgcmVsLnJlcGxhY2UoJy5zbWFsaScsICc7JykKCiAgICBkZWYgc2VhcmNoX2NsYXNzZXMoc2VsZiwga2V5d29yZCk6CiAgICAgICAgcmVzdWx0cyA9IFtdCiAgICAgICAga3cgPSBrZXl3b3JkLmxvd2VyKCkKICAgICAgICBmb3IgY2xzIGluIHNvcnRlZChzZWxmLmNsYXNzX2ZpbGVzLmtleXMoKSk6CiAgICAgICAgICAgIGlmIGt3IGluIGNscy5sb3dlcigpOgogICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoY2xzKQogICAgICAgIHJldHVybiByZXN1bHRzCgogICAgZGVmIHNlYXJjaF9tZXRob2RzKHNlbGYsIGtleXdvcmQpOgogICAgICAgIHJlc3VsdHMgPSBbXQogICAgICAgIGt3ID0ga2V5d29yZC5sb3dlcigpCiAgICAgICAgZm9yIGNscywgcGF0aCBpbiBzZWxmLmNsYXNzX2ZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncicsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0naWdub3JlJykgYXMgZjoKICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBmLnJlYWQoKQogICAgICAgICAgICBmb3IgbSBpbiByZS5maW5kaXRlcihyJ1wubWV0aG9kXHMrKC4qP1xzKT8oW1x3XCQ8Pl0rKVwoKC4qPylcKSguKz8pXG4nLCBjb250ZW50KToKICAgICAgICAgICAgICAgIHByb3RvID0gbS5ncm91cCgwKS5zdHJpcCgpCiAgICAgICAgICAgICAgICBpZiBrdyBpbiBwcm90by5sb3dlcigpOgogICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtID0gY29udGVudFs6bS5zdGFydCgpXS5jb3VudCgnXG4nKSArIDEKICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICAgICdjbGFzcyc6IGNscywKICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGhvZCc6IG0uZ3JvdXAoMiksCiAgICAgICAgICAgICAgICAgICAgICAgICdwcm90byc6IHByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAnZmlsZSc6IHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lJzogbGluZV9udW0KICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZXN1bHRzCgogICAgZGVmIGdldF9tZXRob2RfYm9keShzZWxmLCBjbHMsIG1ldGhvZF9uYW1lKToKICAgICAgICBwYXRoID0gc2VsZi5jbGFzc19maWxlcy5nZXQoY2xzKQogICAgICAgIGlmIG5vdCBwYXRoOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIHdpdGggb3BlbihwYXRoLCAncicsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0naWdub3JlJykgYXMgZjoKICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCgogICAgICAgICMg57K+56Gu5Yy56YWNOiAubWV0aG9kIFvkv67ppbDnrKZdIG1ldGhvZE5hbWUo5Y+C5pWwKei/lOWbnuexu+WeiwogICAgICAgIHBhdHRlcm4gPSByJyhcLm1ldGhvZFxzKyg/OnB1YmxpYyB8cHJpdmF0ZSB8cHJvdGVjdGVkIHxzdGF0aWMgfGZpbmFsIHxhYnN0cmFjdCB8c3ludGhldGljICkqJyArIHJlLmVzY2FwZShtZXRob2RfbmFtZSkgKyByJ1woW14pXSpcKVteXG5dKlxuKSguKj8pKD89XC5lbmQgbWV0aG9kKScKICAgICAgICBtID0gcmUuc2VhcmNoKHBhdHRlcm4sIGNvbnRlbnQsIHJlLkRPVEFMTCkKICAgICAgICBpZiBub3QgbToKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBoZWFkZXIgPSBtLmdyb3VwKDEpLnN0cmlwKCkKICAgICAgICBib2R5ID0gbS5ncm91cCgyKQogICAgICAgIHN0YXJ0X2xpbmUgPSBjb250ZW50WzptLnN0YXJ0KCldLmNvdW50KCdcbicpICsgMQogICAgICAgIHJldHVybiB7J2hlYWRlcic6IGhlYWRlciwgJ2JvZHknOiBib2R5LCAnZmlsZSc6IHBhdGgsICdsaW5lJzogc3RhcnRfbGluZX0KCiAgICBkZWYgZmluZF9jYWxsZXJzKHNlbGYsIGNscywgbWV0aG9kX25hbWUpOgogICAgICAgIHRhcmdldF9pbnZva2UgPSBjbHMucmVwbGFjZSgnOycsICcnKSArICc7LT4nICsgbWV0aG9kX25hbWUKICAgICAgICBjYWxsZXJzID0gW10KICAgICAgICBmb3IgYywgcGF0aCBpbiBzZWxmLmNsYXNzX2ZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncicsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0naWdub3JlJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQogICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgogICAgICAgICAgICAgICAgaWYgdGFyZ2V0X2ludm9rZSBpbiBsaW5lOgogICAgICAgICAgICAgICAgICAgIGNhbGxlcnMuYXBwZW5kKHsnY2xhc3MnOiBjLCAnZmlsZSc6IHBhdGgsICdsaW5lJzogaSArIDEsICdpbnNuJzogbGluZS5zdHJpcCgpfSkKICAgICAgICByZXR1cm4gY2FsbGVycwoKICAgIGRlZiBmaW5kX3ZpcF9sb2dpYyhzZWxmKToKICAgICAgICAiIiLoh6rliqjmkJzntKIgVklQIOebuOWFs+WIpOaWremAu+i+kSIiIgogICAgICAgIGtleXdvcmRzID0gWyd2aXAnLCAnaXN2aXAnLCAnZ2V0dmlwJywgJ3ZpcGxldmVsJywgJ2NhbndhdGNoJywgJ2lzcGF5JywgJ3BheWdvbGQnLAogICAgICAgICAgICAgICAgICAgICdpc21lbWJlcicsICdwcmVtaXVtJywgJ3VubG9jaycsICduZWVkcGF5JywgJ25lZWRidXknLCAncmVjaGFyZ2UnXQogICAgICAgIGFsbF9tZXRob2RzID0gW10KICAgICAgICBmb3Iga3cgaW4ga2V5d29yZHM6CiAgICAgICAgICAgIGFsbF9tZXRob2RzLmV4dGVuZChzZWxmLnNlYXJjaF9tZXRob2RzKGt3KSkKCiAgICAgICAgc2VlbiA9IHNldCgpCiAgICAgICAgdW5pcXVlID0gW10KICAgICAgICBmb3IgbSBpbiBhbGxfbWV0aG9kczoKICAgICAgICAgICAga2V5ID0gbVsnY2xhc3MnXSArICctPicgKyBtWydtZXRob2QnXQogICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlZW46CiAgICAgICAgICAgICAgICBzZWVuLmFkZChrZXkpCiAgICAgICAgICAgICAgICB1bmlxdWUuYXBwZW5kKG0pCgogICAgICAgICMg5LyY5YWI5o6S5bqP77yaaXNWSVAgLyBpc0NhbldhdGNoIC8gZ2V0Q2FuV2F0Y2ggLyBpc1BheUdvbGQKICAgICAgICBkZWYgc29ydF9rZXkobSk6CiAgICAgICAgICAgIG5hbWUgPSBtWydtZXRob2QnXS5sb3dlcigpCiAgICAgICAgICAgIGlmIG5hbWUgaW4gKCdpc3ZpcCcsICdpc2NhbndhdGNoJywgJ2dldGNhbndhdGNoJywgJ2lzcGF5Z29sZCcpOgogICAgICAgICAgICAgICAgcmV0dXJuICgwLCBuYW1lKQogICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ2lzJykgb3IgbmFtZS5zdGFydHN3aXRoKCdnZXQnKToKICAgICAgICAgICAgICAgIHJldHVybiAoMSwgbmFtZSkKICAgICAgICAgICAgcmV0dXJuICgyLCBuYW1lKQoKICAgICAgICB1bmlxdWUuc29ydChrZXk9c29ydF9rZXkpCiAgICAgICAgcmV0dXJuIHVuaXF1ZQoKICAgIGRlZiBhbmFseXplX21ldGhvZChzZWxmLCBjbHMsIG1ldGhvZF9uYW1lLCBkZXB0aD0wKToKICAgICAgICAiIiLliIbmnpDkuIDkuKrmlrnms5XvvJrovpPlh7rlrozmlbTku6PnoIEgKyDosIPnlKjogIUiIiIKICAgICAgICBpbmZvID0gc2VsZi5nZXRfbWV0aG9kX2JvZHkoY2xzLCBtZXRob2RfbmFtZSkKICAgICAgICBpZiBub3QgaW5mbzoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgY2FsbGVycyA9IHNlbGYuZmluZF9jYWxsZXJzKGNscywgbWV0aG9kX25hbWUpCgogICAgICAgICMg566A5Y2V5oyH5Luk5YiG5p6QCiAgICAgICAgYm9keV9saW5lcyA9IGluZm9bJ2JvZHknXS5zdHJpcCgpLnNwbGl0KCdcbicpCiAgICAgICAgYW5hbHlzaXMgPSB7CiAgICAgICAgICAgICdyZXR1cm5zX3RydWUnOiBGYWxzZSwKICAgICAgICAgICAgJ3JldHVybnNfZmFsc2UnOiBGYWxzZSwKICAgICAgICAgICAgJ3JldHVybnNfZmllbGQnOiBGYWxzZSwKICAgICAgICAgICAgJ2hhc19pZic6IEZhbHNlLAogICAgICAgICAgICAnaGFzX2ludm9rZSc6IFtdLAogICAgICAgICAgICAncmV0dXJuX3R5cGUnOiBOb25lCiAgICAgICAgfQoKICAgICAgICBmb3IgbGluZSBpbiBib2R5X2xpbmVzOgogICAgICAgICAgICBzID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgncmV0dXJuLScpOgogICAgICAgICAgICAgICAgaWYgJ2NvbnN0LzQnIGluIHMgb3IgJ2NvbnN0IHYnIGluIHM6CiAgICAgICAgICAgICAgICAgICAgaWYgJzB4MScgaW4gczoKICAgICAgICAgICAgICAgICAgICAgICAgYW5hbHlzaXNbJ3JldHVybnNfdHJ1ZSddID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIGVsaWYgJzB4MCcgaW4gczoKICAgICAgICAgICAgICAgICAgICAgICAgYW5hbHlzaXNbJ3JldHVybnNfZmFsc2UnXSA9IFRydWUKICAgICAgICAgICAgICAgIGVsaWYgJ2lnZXQnIGluIHMgb3IgJ2lnZXQtYm9vbGVhbicgaW4gczoKICAgICAgICAgICAgICAgICAgICBhbmFseXNpc1sncmV0dXJuc19maWVsZCddID0gVHJ1ZQogICAgICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoJ2lmLScpOgogICAgICAgICAgICAgICAgYW5hbHlzaXNbJ2hhc19pZiddID0gVHJ1ZQogICAgICAgICAgICBpZiAnaW52b2tlLScgaW4gczoKICAgICAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocidpbnZva2UtXHcrIFx7Lio/XH0sIChMW1x3L10rOy0+W1x3XCQ8Pl0rKScsIHMpCiAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgIGFuYWx5c2lzWydoYXNfaW52b2tlJ10uYXBwZW5kKG0uZ3JvdXAoMSkpCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdtZXRob2QnOiBpbmZvLAogICAgICAgICAgICAnY2FsbGVycyc6IGNhbGxlcnMsCiAgICAgICAgICAgICdhbmFseXNpcyc6IGFuYWx5c2lzLAogICAgICAgICAgICAnYm9keV9saW5lcyc6IGJvZHlfbGluZXMKICAgICAgICB9CgoKZGVmIG1haW4oKToKICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgogICAgICAgIHByaW50KCLnlKjms5U6IHB5dGhvbjMgZGV4X3ZpcF9odW50ZXIucHkgPHNtYWxpX3Jvb3Q+IFvlkb3ku6RdIikKICAgICAgICBwcmludCgi5ZG95LukOiIpCiAgICAgICAgcHJpbnQoIiAgLS1jbGFzc2VzIDxrdz4gICAgICDmkJzntKLnsbvlkI0iKQogICAgICAgIHByaW50KCIgIC0tbWV0aG9kcyA8a3c+ICAgICAg5pCc57Si5pa55rOV5ZCNIikKICAgICAgICBwcmludCgiICAtLWFuYWx5emUgPGNscz4gPG1ldGhvZD4gIOWIhuaekOaWueazleS9kyIpCiAgICAgICAgcHJpbnQoIiAgLS1jYWxsZXJzIDxjbHM+IDxtZXRob2Q+ICDmn6Xmib7osIPnlKjogIUiKQogICAgICAgIHByaW50KCIgIC0tdmlwICAgICAgICAgICAgICAg6Ieq5Yqo5pCc57SiIFZJUCDpgLvovpEiKQogICAgICAgIHByaW50KCIgIC0tZGV4IDxkZXhfZmlsZT4gICAg6Kej5p6QIERFWCDliJflh7rnsbvlkI0iKQogICAgICAgIHN5cy5leGl0KDEpCgogICAgc21hbGlfcm9vdCA9IHN5cy5hcmd2WzFdCiAgICBjbWQgPSBzeXMuYXJndlsyXSBpZiBsZW4oc3lzLmFyZ3YpID4gMiBlbHNlICctLXZpcCcKCiAgICBpZiBjbWQgPT0gJy0tZGV4JzoKICAgICAgICBkZXhfcGF0aCA9IHN5cy5hcmd2WzNdCiAgICAgICAgd2l0aCBvcGVuKGRleF9wYXRoLCAncmInKSBhcyBmOgogICAgICAgICAgICBwYXJzZXIgPSBEZXhQYXJzZXIoZi5yZWFkKCkpCiAgICAgICAgY2xhc3NlcyA9IHBhcnNlci5nZXRfYWxsX2NsYXNzZXMoKQogICAgICAgIHByaW50KGYiW0RFWF0g5YWxIHtsZW4oY2xhc3Nlcyl9IOS4quexuyIpCiAgICAgICAgZm9yIGMgaW4gY2xhc3Nlc1s6NTBdOgogICAgICAgICAgICBwcmludChmIiAge2NbJ25hbWUnXX0iKQogICAgICAgIHJldHVybgoKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNtYWxpX3Jvb3QpOgogICAgICAgIHByaW50KGYi6ZSZ6K+vOiDnm67lvZXkuI3lrZjlnKg6IHtzbWFsaV9yb290fSIpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBhbmFseXplciA9IFNtYWxpQW5hbHl6ZXIoc21hbGlfcm9vdCkKICAgIHByaW50KGYiW+e0ouW8leWujOaIkF0g5YWxIHtsZW4oYW5hbHl6ZXIuY2xhc3NfZmlsZXMpfSDkuKogc21hbGkg5paH5Lu2IikKCiAgICBpZiBjbWQgPT0gJy0tY2xhc3Nlcyc6CiAgICAgICAga3cgPSBzeXMuYXJndlszXQogICAgICAgIHJlc3VsdHMgPSBhbmFseXplci5zZWFyY2hfY2xhc3NlcyhrdykKICAgICAgICBwcmludChmIlxuW+exu+WQjeaQnOe0ojoge2t3fV0g5om+5YiwIHtsZW4ocmVzdWx0cyl9IOS4que7k+aenCIpCiAgICAgICAgZm9yIHIgaW4gcmVzdWx0c1s6MzBdOgogICAgICAgICAgICBwcmludChmIiAge3J9IikKCiAgICBlbGlmIGNtZCA9PSAnLS1tZXRob2RzJzoKICAgICAgICBrdyA9IHN5cy5hcmd2WzNdCiAgICAgICAgcmVzdWx0cyA9IGFuYWx5emVyLnNlYXJjaF9tZXRob2RzKGt3KQogICAgICAgIHByaW50KGYiXG5b5pa55rOV5pCc57SiOiB7a3d9XSDmib7liLAge2xlbihyZXN1bHRzKX0g5Liq57uT5p6cIikKICAgICAgICBmb3IgciBpbiByZXN1bHRzWzozMF06CiAgICAgICAgICAgIHByaW50KGYiICB7clsnY2xhc3MnXX0gLT4ge3JbJ21ldGhvZCddfSAgKHtyWydmaWxlJ119OntyWydsaW5lJ119KSIpCgogICAgZWxpZiBjbWQgPT0gJy0tYW5hbHl6ZSc6CiAgICAgICAgY2xzID0gc3lzLmFyZ3ZbM10KICAgICAgICBtZXRob2QgPSBzeXMuYXJndls0XQogICAgICAgIHJlc3VsdCA9IGFuYWx5emVyLmFuYWx5emVfbWV0aG9kKGNscywgbWV0aG9kKQogICAgICAgIGlmIG5vdCByZXN1bHQ6CiAgICAgICAgICAgIHByaW50KGYi5pyq5om+5Yiw5pa55rOVOiB7Y2xzfS0+e21ldGhvZH0iKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBwcmludChmIlxueyc9Jyo2MH0iKQogICAgICAgIHByaW50KGYiW+WIhuaekOaWueazlV0ge2Nsc30tPnttZXRob2R9IikKICAgICAgICBwcmludChmInsnPScqNjB9IikKICAgICAgICBwcmludChmIuaWh+S7tjoge3Jlc3VsdFsnbWV0aG9kJ11bJ2ZpbGUnXX06e3Jlc3VsdFsnbWV0aG9kJ11bJ2xpbmUnXX0iKQogICAgICAgIHByaW50KGYiXG4tLS0gc21hbGkg5Luj56CBIC0tLSIpCiAgICAgICAgcHJpbnQocmVzdWx0WydtZXRob2QnXVsnaGVhZGVyJ10pCiAgICAgICAgcHJpbnQocmVzdWx0WydtZXRob2QnXVsnYm9keSddKQogICAgICAgIHByaW50KCIuZW5kIG1ldGhvZCIpCgogICAgICAgIGEgPSByZXN1bHRbJ2FuYWx5c2lzJ10KICAgICAgICBwcmludChmIlxuLS0tIOeugOWNleWIhuaekCAtLS0iKQogICAgICAgIHByaW50KGYiICDlvLrliLbov5Tlm54gdHJ1ZToge2FbJ3JldHVybnNfdHJ1ZSddfSIpCiAgICAgICAgcHJpbnQoZiIgIOW8uuWItui/lOWbniBmYWxzZToge2FbJ3JldHVybnNfZmFsc2UnXX0iKQogICAgICAgIHByaW50KGYiICDov5Tlm57lrZfmrrXlgLw6IHthWydyZXR1cm5zX2ZpZWxkJ119IikKICAgICAgICBwcmludChmIiAg5YyF5ZCr5p2h5Lu25YiG5pSvOiB7YVsnaGFzX2lmJ119IikKICAgICAgICBpZiBhWydoYXNfaW52b2tlJ106CiAgICAgICAgICAgIHByaW50KGYiICDosIPnlKjlpJbpg6jmlrnms5U6IHtsZW4oYVsnaGFzX2ludm9rZSddKX0g5aSEIikKICAgICAgICAgICAgZm9yIGludiBpbiBhWydoYXNfaW52b2tlJ11bOjEwXToKICAgICAgICAgICAgICAgIHByaW50KGYiICAgIC0+IHtpbnZ9IikKCiAgICAgICAgaWYgcmVzdWx0WydjYWxsZXJzJ106CiAgICAgICAgICAgIHByaW50KGYiXG4tLS0g6LCD55So6ICFICh7bGVuKHJlc3VsdFsnY2FsbGVycyddKX0g5aSEKSAtLS0iKQogICAgICAgICAgICBmb3IgYyBpbiByZXN1bHRbJ2NhbGxlcnMnXVs6MTVdOgogICAgICAgICAgICAgICAgcHJpbnQoZiIgIHtjWydjbGFzcyddfSAgKHtjWydmaWxlJ119OntjWydsaW5lJ119KSIpCiAgICAgICAgICAgICAgICBwcmludChmIiAgICB7Y1snaW5zbiddfSIpCgogICAgZWxpZiBjbWQgPT0gJy0tY2FsbGVycyc6CiAgICAgICAgY2xzID0gc3lzLmFyZ3ZbM10KICAgICAgICBtZXRob2QgPSBzeXMuYXJndls0XQogICAgICAgIGNhbGxlcnMgPSBhbmFseXplci5maW5kX2NhbGxlcnMoY2xzLCBtZXRob2QpCiAgICAgICAgcHJpbnQoZiJcblvosIPnlKjogIVdIHtjbHN9LT57bWV0aG9kfSDlhbEge2xlbihjYWxsZXJzKX0g5aSEIikKICAgICAgICBmb3IgYyBpbiBjYWxsZXJzOgogICAgICAgICAgICBwcmludChmIiAge2NbJ2NsYXNzJ119IOihjHtjWydsaW5lJ119OiB7Y1snaW5zbiddfSIpCgogICAgZWxpZiBjbWQgPT0gJy0tdmlwJzoKICAgICAgICByZXN1bHRzID0gYW5hbHl6ZXIuZmluZF92aXBfbG9naWMoKQogICAgICAgIHByaW50KGYiXG5bVklQIOiHquWKqOaQnOe0ol0g5om+5YiwIHtsZW4ocmVzdWx0cyl9IOS4quebuOWFs+aWueazlSIpCiAgICAgICAgcHJpbnQoZiJ7Jz0nKjcwfSIpCgogICAgICAgICMg54m55Yir5YWz5rOo5Yeg5Liq5qC45b+D5pa55rOVCiAgICAgICAgY29yZV9tZXRob2RzID0gWwogICAgICAgICAgICAoJ0xjb20vYW5kcm9pZHgvbHYvYmFzZS9iZWFuL1VzZXJJbmZvOycsICdpc1ZJUCcpLAogICAgICAgICAgICAoJ0xjb20vYW5kcm9pZHgvbHYvYmFzZS9iZWFuL1VzZXJJbmZvOycsICdnZXRWaXBUeXBlJyksCiAgICAgICAgICAgICgnTGNvbS9hbmRyb2lkeC9sdi9iYXNlL2JlYW4vVmlkZW9CZWFuOycsICdpc0NhbldhdGNoJyksCiAgICAgICAgICAgICgnTGNvbS9hbmRyb2lkeC9sdi9iYXNlL2JlYW4vQ2FuV2F0Y2hCZWFuOycsICdnZXRDYW5XYXRjaCcpLAogICAgICAgIF0KCiAgICAgICAgZm9yIGNscywgbWV0aG9kIGluIGNvcmVfbWV0aG9kczoKICAgICAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZXIuYW5hbHl6ZV9tZXRob2QoY2xzLCBtZXRob2QpCiAgICAgICAgICAgIGlmIHJlc3VsdDoKICAgICAgICAgICAgICAgIHByaW50KGYiXG4+Pj4gW3tjbHN9LT57bWV0aG9kfV0iKQogICAgICAgICAgICAgICAgcHJpbnQoZiLmlofku7Y6IHtyZXN1bHRbJ21ldGhvZCddWydmaWxlJ119OntyZXN1bHRbJ21ldGhvZCddWydsaW5lJ119IikKICAgICAgICAgICAgICAgIHByaW50KGYi5Luj56CBOiIpCiAgICAgICAgICAgICAgICBwcmludChyZXN1bHRbJ21ldGhvZCddWydoZWFkZXInXSkKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdFsnYm9keV9saW5lcyddOgogICAgICAgICAgICAgICAgICAgIHByaW50KCIgICAgIiArIGxpbmUucnN0cmlwKCkpCiAgICAgICAgICAgICAgICBwcmludCgiICAgIC5lbmQgbWV0aG9kIikKICAgICAgICAgICAgICAgIGEgPSByZXN1bHRbJ2FuYWx5c2lzJ10KICAgICAgICAgICAgICAgIHByaW50KGYiW+WIhuaekF0g6L+U5Zue5a2X5q615YC8PXthWydyZXR1cm5zX2ZpZWxkJ119LCDlvLrliLZ0cnVlPXthWydyZXR1cm5zX3RydWUnXX0sIOadoeS7tuWIhuaUrz17YVsnaGFzX2lmJ119IikKICAgICAgICAgICAgICAgIGlmIHJlc3VsdFsnY2FsbGVycyddOgogICAgICAgICAgICAgICAgICAgIHByaW50KGYiW+iiq+iwg+eUqF0ge2xlbihyZXN1bHRbJ2NhbGxlcnMnXSl9IOWkhCIpCiAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmVzdWx0WydjYWxsZXJzJ11bOjhdOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludChmIiAgICB7Y1snY2xhc3MnXX06e2NbJ2xpbmUnXX0ge2NbJ2luc24nXVs6MTAwXX0iKQogICAgICAgICAgICAgICAgcHJpbnQoIi0iICogNjApCgogICAgICAgICMg5YW25LuWIFZJUCDnm7jlhbPmlrnms5XliJfooagKICAgICAgICBwcmludChmIlxuW+WFtuS7liBWSVAg55u45YWz5pa55rOVXSIpCiAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKICAgICAgICAgICAgaWYgbm90IGFueShyWydjbGFzcyddID09IGNscyBhbmQgclsnbWV0aG9kJ10gPT0gbSBmb3IgY2xzLCBtIGluIGNvcmVfbWV0aG9kcyk6CiAgICAgICAgICAgICAgICBwcmludChmIiAge3JbJ2NsYXNzJ119IC0+IHtyWydtZXRob2QnXX0gICh7clsnZmlsZSddfTp7clsnbGluZSddfSkiKQoKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoZiLmnKrnn6Xlkb3ku6Q6IHtjbWR9IikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCg==
B64EOF_dex_vip_hunter.py
chmod +x "$DECODE_DIR/dex_vip_hunter.py" 2>/dev/null
echo "恢复: init_re_env.sh ..."
base64 -d << 'B64EOF_init_re_env.sh' > "$DECODE_DIR/init_re_env.sh"
IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgIOmAhuWQkeW3peeoi+eOr+Wig+WFqOWxgOWIneWni+WMluiEmuacrAojICDlip/og706IOaWsOeql+WPo+aJk+W8gOWQjui/kOihjOatpOiEmuacrO+8jOiHquWKqOmFjee9ruaJgOaciemAhuWQkeW3peWFt1BBVEgKIyAg55So5rOVOiBzb3VyY2UgL3dvcmtzcGFjZS9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdC9pbml0X3JlX2Vudi5zaAojICAgICAgICDmiJYKIyAgICAgICAgYmFzaCAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L2luaXRfcmVfZW52LnNoCiMgIOS9nOiAhTogQUnpgIblkJHlt6XnqIvluIgKIyAg5pel5pyfOiAyMDI2LTA3LTE1CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKc2V0IC1lCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8gIiAgIOmAhuWQkeW3peeoi+eOr+Wig+WIneWni+WMliB2MS4wIgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgoKIyA9PT0g6aKc6Imy5a6a5LmJID09PQpSRUQ9J1wwMzNbMDszMW0nCkdSRUVOPSdcMDMzWzA7MzJtJwpZRUxMT1c9J1wwMzNbMTszM20nCkJMVUU9J1wwMzNbMDszNG0nCk5DPSdcMDMzWzBtJwoKIyA9PT0gUEFUSCDphY3nva4gPT09CmV4cG9ydCBQQVRIPSIvdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluOi91c3Ivc2Jpbjovc2JpbiIKZXhwb3J0IFBBVEg9IiRQQVRIOi9vcHQvamFkeC9iaW4iCmV4cG9ydCBQQVRIPSIkUEFUSDovb3B0L2RleDJqYXIvZGV4LXRvb2xzLXYyLjQiCmV4cG9ydCBQQVRIPSIkUEFUSDovcm9vdC8ubnZtL3ZlcnNpb25zL25vZGUvdjIyLjIzLjEvYmluIgpleHBvcnQgUEFUSD0iJFBBVEg6JEhPTUUvLmxvY2FsL2JpbiIKZXhwb3J0IFBBVEg9IiRQQVRIOi93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQvdG9vbHMiCmV4cG9ydCBQQVRIPSIkUEFUSDovd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L3NjcmlwdHMiCmV4cG9ydCBQQVRIPSIkUEFUSDovd29ya3NwYWNlIgoKIyA9PT0gSmF2YSDnjq/looMgPT09CmV4cG9ydCBKQVZBX0hPTUU9JChkaXJuYW1lICQoZGlybmFtZSAkKHJlYWRsaW5rIC1mICQod2hpY2ggamF2YSkpKSkKZXhwb3J0IEFORFJPSURfSE9NRT0vb3B0L2FuZHJvaWQtc2RrCmV4cG9ydCBDTEFTU1BBVEg9Ii46L3dvcmtzcGFjZS9yZXZlcnNlLWVuZ2luZWVyaW5nLWtpdC90b29scy9hcGt0b29sL2Fwa3Rvb2wuamFyIgoKIyA9PT0gUHl0aG9uIOeOr+WigyA9PT0KZXhwb3J0IFBZVEhPTlBBVEg9Ii93b3Jrc3BhY2UvcmV2ZXJzZS1lbmdpbmVlcmluZy1raXQ6JFBZVEhPTlBBVEgiCgojID09PSDliKvlkI0gKOW/q+aNt+WRveS7pCkgPT09CmFsaWFzIGFway1kPSJqYXZhIC1qYXIgL3Vzci9sb2NhbC9iaW4vYXBrdG9vbC5qYXIgZCAtZiIKYWxpYXMgYXBrLWI9ImphdmEgLWphciAvdXNyL2xvY2FsL2Jpbi9hcGt0b29sLmphciBiIgphbGlhcyBhcGstcz0iYXBrc2lnbmVyIHNpZ24gLS1rcyAvZGF0YS91c2VyL3dvcmsvc2lnbl9rZXlzdG9yZS5qa3MgLS1rcy1rZXktYWxpYXMgYXV0b3NpZ24gLS1rcy1wYXNzIHBhc3M6YXV0b3NpZ24gLS1rZXktcGFzcyBwYXNzOmF1dG9zaWduIgphbGlhcyBkZXgyamFyPSJkMmotZGV4MmphciIKYWxpYXMgc2lnbi1jaGVjaz0iYXBrc2lnbmVyIHZlcmlmeSAtdiIKYWxpYXMgYWxpZ249InppcGFsaWduIC1mIC12IDQiCgojID09PSDlh73mlbA6IOW/q+mAn+WIhuaekEFQSyA9PT0KcXVpY2tfYW5hbHlzaXMoKSB7CiAgICBsb2NhbCBhcGs9IiQxIgogICAgaWYgWyAteiAiJGFwayIgXTsgdGhlbgogICAgICAgIGVjaG8gIueUqOazlTogcXVpY2tfYW5hbHlzaXMgPGFwa+aWh+S7tj4iCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBlY2hvICI9PT0gQVBL5L+h5oGvID09PSIKICAgIGZpbGUgIiRhcGsiCiAgICBscyAtbGggIiRhcGsiCiAgICBlY2hvICI9PT0g5YyF5ZCNL+eJiOacrCA9PT0iCiAgICBhYXB0IGR1bXAgYmFkZ2luZyAiJGFwayIgMj4vZGV2L251bGwgfCBoZWFkIC01CiAgICBlY2hvICI9PT0gREVY5paH5Lu2ID09PSIKICAgIHVuemlwIC1sICIkYXBrIiB8IGdyZXAgIlwuZGV4JCIKICAgIGVjaG8gIj09PSBTT+W6kyA9PT0iCiAgICB1bnppcCAtbCAiJGFwayIgfCBncmVwICJcLnNvJCIgfCBoZWFkIC0xMAogICAgZWNobyAiPT09IOadg+mZkCA9PT0iCiAgICBhYXB0IGR1bXAgcGVybWlzc2lvbnMgIiRhcGsiIDI+L2Rldi9udWxsIHwgaGVhZCAtMTAKICAgIGVjaG8gIj09PSDnrb7lkI0gPT09IgogICAgYXBrc2lnbmVyIHZlcmlmeSAtdiAiJGFwayIgMj4mMSB8IGdyZXAgLUUgInYxfHYyfHYzfFZlcmlmaWVzIgp9CgojID09PSDlh73mlbA6IOS4gOmUruWPjee8luivkSA9PT0KZGVjb21waWxlKCkgewogICAgbG9jYWwgYXBrPSIkMSIKICAgIGxvY2FsIG91dD0iJHsyOi0kKGJhc2VuYW1lICIkYXBrIiAuYXBrKV9zbWFsaX0iCiAgICBpZiBbIC16ICIkYXBrIiBdOyB0aGVuCiAgICAgICAgZWNobyAi55So5rOVOiBkZWNvbXBpbGUgPGFwa+aWh+S7tj4gW+i+k+WHuuebruW9lV0iCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBlY2hvICLlj43nvJbor5E6ICRhcGsgLT4gJG91dCIKICAgIGFwa3Rvb2wgZCAtZiAtbyAiJG91dCIgIiRhcGsiCiAgICBlY2hvICLlrozmiJA6ICRvdXQiCn0KCiMgPT09IOWHveaVsDog5LiA6ZSu6YeN5omT5YyF562+5ZCNID09PQpyZXBhY2soKSB7CiAgICBsb2NhbCBkaXI9IiQxIgogICAgbG9jYWwgb3V0PSIkezI6LSQoYmFzZW5hbWUgIiRkaXIiKV9wYWNrZWQuYXBrfSIKICAgIGxvY2FsIGtleXN0b3JlPSIkezM6LS9kYXRhL3VzZXIvd29yay9zaWduX2tleXN0b3JlLmprc30iCiAgICBpZiBbIC16ICIkZGlyIiBdOyB0aGVuCiAgICAgICAgZWNobyAi55So5rOVOiByZXBhY2sgPOWPjee8luivkeebruW9lT4gW+i+k+WHumFwa10gW2tleXN0b3Jl6Lev5b6EXSIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGVjaG8gIuaJk+WMhTogJGRpciAtPiAkb3V0IgogICAgbG9jYWwgdG1wPSIvdG1wL3JlcGFja18kKGRhdGUgKyVzKS5hcGsiCiAgICBhcGt0b29sIGIgLW8gIiR0bXAiICIkZGlyIgogICAgbG9jYWwgYWxpZ25lZD0iL3RtcC9yZXBhY2tfYWxpZ25lZF8kKGRhdGUgKyVzKS5hcGsiCiAgICB6aXBhbGlnbiAtZiAtdiA0ICIkdG1wIiAiJGFsaWduZWQiIDI+JjEgfCB0YWlsIC0zCiAgICBhcGtzaWduZXIgc2lnbiAtLWtzICIka2V5c3RvcmUiIC0ta3Mta2V5LWFsaWFzIGF1dG9zaWduIC0ta3MtcGFzcyBwYXNzOmF1dG9zaWduIC0ta2V5LXBhc3MgcGFzczphdXRvc2lnbiAtLW91dCAiJG91dCIgIiRhbGlnbmVkIgogICAgcm0gLWYgIiR0bXAiICIkYWxpZ25lZCIKICAgIGFwa3NpZ25lciB2ZXJpZnkgLXYgIiRvdXQiIDI+JjEgfCBncmVwIC1FICJ2MXx2Mnx2M3xWZXJpZmllcyIKICAgIGxzIC1saCAiJG91dCIKICAgIGVjaG8gIuWujOaIkDogJG91dCIKfQoKIyA9PT0g5Ye95pWwOiDkuIrkvKDliLBtcGltZy5jbiA9PT0KdXBsb2FkX21waW1nKCkgewogICAgbG9jYWwgZmlsZT0iJDEiCiAgICBpZiBbIC16ICIkZmlsZSIgXTsgdGhlbgogICAgICAgIGVjaG8gIueUqOazlTogdXBsb2FkX21waW1nIDzmlofku7Y+IgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgcHl0aG9uMyAvd29ya3NwYWNlL3JldmVyc2UtZW5naW5lZXJpbmcta2l0L3VwbG9hZF90b19tcGltZy5weSAiJGZpbGUiCn0KCiMgPT09IOWHveaVsDog5qOA5rWLQVBL5qGG5p62ID09PQpkZXRlY3RfZnJhbWV3b3JrKCkgewogICAgbG9jYWwgYXBrPSIkMSIKICAgIGlmIFsgLXogIiRhcGsiIF07IHRoZW4KICAgICAgICBlY2hvICLnlKjms5U6IGRldGVjdF9mcmFtZXdvcmsgPGFwa+aWh+S7tj4iCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBlY2hvICI9PT0g5qGG5p625qOA5rWLID09PSIKICAgIGlmIHVuemlwIC1sICIkYXBrIiB8IGdyZXAgLXEgImxpYmZsdXR0ZXIuc28iOyB0aGVuCiAgICAgICAgZWNobyAi5qGG5p62OiBGbHV0dGVyIgogICAgZWxpZiB1bnppcCAtbCAiJGFwayIgfCBncmVwIC1xICJsaWJ4YW1hcmluIjsgdGhlbgogICAgICAgIGVjaG8gIuahhuaetjogWGFtYXJpbiIKICAgIGVsaWYgdW56aXAgLWwgIiRhcGsiIHwgZ3JlcCAtcSAibGlicmVhY3RuYXRpdmUiOyB0aGVuCiAgICAgICAgZWNobyAi5qGG5p62OiBSZWFjdCBOYXRpdmUiCiAgICBlbGlmIHVuemlwIC1sICIkYXBrIiB8IGdyZXAgLXEgImFzc2V0cy9hcHBzL19fVU5JIjsgdGhlbgogICAgICAgIGVjaG8gIuahhuaetjogdW5pLWFwcCAoRENsb3VkKSIKICAgIGVsaWYgdW56aXAgLWwgIiRhcGsiIHwgZ3JlcCAtcSAibGlidW5pdHkiOyB0aGVuCiAgICAgICAgZWNobyAi5qGG5p62OiBVbml0eSIKICAgIGVsaWYgdW56aXAgLWwgIiRhcGsiIHwgZ3JlcCAtcSAibGlicHlidW5kbGVcfGxpYm1haW4uc28uKnB5dGhvbiI7IHRoZW4KICAgICAgICBlY2hvICLmoYbmnrY6IFB5dGhvbi9LaXZ5IChQNEEpIgogICAgZWxzZQogICAgICAgIGVjaG8gIuahhuaetjog5Y6f55SfQW5kcm9pZCIKICAgIGZpCiAgICBlY2hvICI9PT0g5aOz5qOA5rWLID09PSIKICAgIGFwa2lkICIkYXBrIiAyPi9kZXYvbnVsbCB8fCBlY2hvICJhcGtpZOS4jeWPr+eUqCIKfQoKIyA9PT0g6aqM6K+B5omA5pyJ5bel5YW3ID09PQplY2hvICIiCmVjaG8gLWUgIiR7QkxVRX09PT0g5bel5YW36aqM6K+BID09PSR7TkN9Igp0b29sc19vaz0wCnRvb2xzX2ZhaWw9MAoKY2hlY2tfdG9vbCgpIHsKICAgIGlmIGNvbW1hbmQgLXYgIiQxIiAmPi9kZXYvbnVsbCB8fCBbIC1mICIkMiIgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIiAgJHtHUkVFTn3inIUke05DfSAkMSIKICAgICAgICAoKHRvb2xzX29rKyspKQogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIiAgJHtSRUR94p2MJHtOQ30gJDEiCiAgICAgICAgKCh0b29sc19mYWlsKyspKQogICAgZmkKfQoKZWNobyAtZSAiJHtZRUxMT1d9W0FuZHJvaWTmnoTlu7rlt6XlhbddJHtOQ30iCmNoZWNrX3Rvb2wgImphdmEiCmNoZWNrX3Rvb2wgImtleXRvb2wiCmNoZWNrX3Rvb2wgImFwa3Rvb2wiCmNoZWNrX3Rvb2wgInppcGFsaWduIgpjaGVja190b29sICJhcGtzaWduZXIiCmNoZWNrX3Rvb2wgImFhcHQiCmNoZWNrX3Rvb2wgImFhcHQyIgoKZWNobyAtZSAiJHtZRUxMT1d9W+WPjee8luivkeW3peWFt10ke05DfSIKY2hlY2tfdG9vbCAiamFkeCIKY2hlY2tfdG9vbCAiZDJqLWRleDJqYXIiCmNoZWNrX3Rvb2wgImJha3NtYWxpIgpjaGVja190b29sICJzbWFsaSIKCmVjaG8gLWUgIiR7WUVMTE9XfVvliqjmgIHliIbmnpBdJHtOQ30iCmNoZWNrX3Rvb2wgImZyaWRhIgpjaGVja190b29sICJvYmplY3Rpb24iCgplY2hvIC1lICIke1lFTExPV31bRmx1dHRlcumAhuWQkV0ke05DfSIKY2hlY2tfdG9vbCAicmVmbHV0dGVyIgpjaGVja190b29sICJhcGtpZCIKCmVjaG8gLWUgIiR7WUVMTE9XfVvpnZnmgIHliIbmnpBdJHtOQ30iCmNoZWNrX3Rvb2wgImFuZHJvZ3VhcmQiCmNoZWNrX3Rvb2wgInF1YXJrIgpjaGVja190b29sICJiaW53YWxrIgoKZWNobyAtZSAiJHtZRUxMT1d9W+WfuuehgOW3peWFt10ke05DfSIKY2hlY2tfdG9vbCAicHl0aG9uMyIKY2hlY2tfdG9vbCAibm9kZSIKY2hlY2tfdG9vbCAiY3VybCIKY2hlY2tfdG9vbCAid2dldCIKY2hlY2tfdG9vbCAiZ2l0IgoKZWNobyAiIgplY2hvIC1lICIke0dSRUVOfT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8gIiAg5bCx57uqOiAkdG9vbHNfb2sg5Liq5bel5YW3ICDnvLrlpLE6ICR0b29sc19mYWlsIOS4qiIKZWNobyAiICDlv6vmjbflkb3ku6Q6IHF1aWNrX2FuYWx5c2lzIC8gZGVjb21waWxlIC8gcmVwYWNrIgplY2hvICIgIOS4iuS8oOWRveS7pDogdXBsb2FkX21waW1nIDzmlofku7Y+IgplY2hvICIgIOahhuaetuajgOa1izogZGV0ZWN0X2ZyYW1ld29yayA8YXBrPiIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSR7TkN9Igo=
B64EOF_init_re_env.sh

# init_re_env.sh复制到kit目录
mkdir -p "$DECODE_DIR/reverse-engineering-kit"
[ -f "$DECODE_DIR/init_re_env.sh" ] && cp "$DECODE_DIR/init_re_env.sh" "$DECODE_DIR/reverse-engineering-kit/"
[ -f "$DECODE_DIR/restore_android_re_env.sh" ] && cp "$DECODE_DIR/restore_android_re_env.sh" "$DECODE_DIR/reverse-engineering-kit/"
[ -f "$DECODE_DIR/one_click_restore.sh" ] && cp "$DECODE_DIR/one_click_restore.sh" "$DECODE_DIR/reverse-engineering-kit/"

echo ""
echo "=============================================="
echo "  全部脚本恢复完成!"
echo "  目录: $DECODE_DIR"
echo ""
echo "  下一步: source $DECODE_DIR/reverse-engineering-kit/init_re_env.sh"
echo "=============================================="
