ZGlmZiAtLWdpdCBhL2FwL2FwcC9TY3JpcHQvc2NyaXB0cy91ZGhjcGMuc2ggYi9hcC9hcHAvU2NyaXB0L3NjcmlwdHMvdWRoY3BjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZGVhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvU2NyaXB0L3NjcmlwdHMvdWRoY3BjLnNoCkBAIC0wLDAgKzEsMTU1IEBACisjIS9iaW4vc2gKKyMgdWRoY3BjIHNjcmlwdCBlZGl0ZWQgYnkgVGltIFJpa2VyIDxUaW1AUmlrZXJzLm9yZz4KKworcGF0aF9zaD1gbnYgZ2V0IHBhdGhfc2hgCisuICRwYXRoX3NoL2dsb2JhbC5zaAorCitlY2hvICJJbmZvOiB1ZGhjcGMuc2ggJDEgJDIgc3RhcnQiID4+ICR0ZXN0X2xvZworCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK1JFU09MVl9DT05GPSRwYXRoX2NvbmYiL3Jlc29sdi5jb25mIgorI2Jyb2FkY2FzdLTm1NrKsbryo6zJ6NbDQlJPQURDQVNUCitbIC1uICIkYnJvYWRjYXN0IiBdICYmIEJST0FEQ0FTVD0iYnJvYWRjYXN0ICRicm9hZGNhc3QiCisjc3VibmV0tObU2sqxuvKjrMno1sNORVRNQVNLCitbIC1uICIkc3VibmV0IiBdICYmIE5FVE1BU0s9Im5ldG1hc2sgJHN1Ym5ldCIKKworZGVjb25maWdfd2FuKCkKK3sgICAKKyAgICBudiBzZXQgJDEiX2lwIj0wLjAuMC4wCisgICAgbnYgc2V0ICQxIl9ubSI9MC4wLjAuMAorICAgIG52IHNldCAkMSJfZ3ciPTAuMC4wLjAKKyAgICBudiBzZXQgJDEiX3ByaWRucyI9MC4wLjAuMAorICAgIG52IHNldCAkMSJfc2VjZG5zIj0wLjAuMC4wCQorfQorCitnZXRfd2FuX25hbWUoKQoreworICAgIGNfaWQ9IjAiCisJcHNfbmFtZT1gbnYgZ2V0IHBzd2FuYAorCXJqNDVfbmFtZT1gbnYgZ2V0IGV0aHdhbmAKKwl3aWZpX25hbWU9YG52IGdldCB3aWZpd2FuYAorCWNhc2UgIiQxIiBpbgorCSAgICAkcHNfbmFtZSIxIikKKyAgICAgICAgICAgIHdhbm5hbWU9InBzd2FuIgkKKwkJCWNfaWQ9IjEiIDs7CisJCSRwc19uYW1lIjIiKQorICAgICAgICAgICAgd2FubmFtZT0icHN3YW4iCQorCQkJY19pZD0iMiIgOzsKKwkJJHBzX25hbWUiMyIpCisgICAgICAgICAgICB3YW5uYW1lPSJwc3dhbiIJCisJCQljX2lkPSIzIiA7OworCQkkcHNfbmFtZSI0IikKKyAgICAgICAgICAgIHdhbm5hbWU9InBzd2FuIgkKKwkJCWNfaWQ9IjQiIDs7CisgICAgICAgICRyajQ1X25hbWUpCisgICAgICAgICAgICB3YW5uYW1lPSJldGh3YW4iICA7OworICAgICAgICAkd2lmaV9uYW1lKQorICAgICAgICAgICAgd2FubmFtZT0id2lmaXdhbiIgOzsJCQorICAgIGVzYWMJCit9CisKKworY2FzZSAiJDEiIGluCisgICAgZGVjb25maWcpCisgICAJCWVjaG8gImNhc2UgZGVjb25maWcgIgorICAgICAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIDAuMC4wLjAgMj4+JHRlc3RfbG9nCisgICAgICAgIGlmIFsgJD8gLW5lIDAgXTt0aGVuCisJICAgICAgICBlY2hvICJFcnJvcjogaWZjb25maWcgJGludGVyZmFjZSAwLjAuMC4wIGZhaWxlZC4iID4+ICR0ZXN0X2xvZworICAgICAgICBmaQorCQlkZWNvbmZpZ193YW4gJGludGVyZmFjZSAyPj4kdGVzdF9sb2cKKwkJKHJvdXRlcl9tc2dfcHJveHkgaXB2NCB1ZGhjcGMuc2ggPj4gJHRlc3RfbG9nIDI+JjEgfHwgZWNobyAiRXJyb3I6IHJvdXRlcl9tc2dfcHJveHkgaXB2NCB1ZGhjcGMuc2ggZmFpbGVkLiIgPj4gJHRlc3RfbG9nKSAmCisgICAgICAgICBlY2hvICJjYXNlIGRlY29uZmlnIG92ZXIiCisJCSAKKwkJIHN0ZXA9YG52cmFtX2dldCAyODYwIHN0ZXBfdG1wYAorCQkgaWYgWyAiLSRzdGVwIiA9ICItIiBdO3RoZW4KKwkJCXN0ZXA9MAorCQkgZmkKKwkJIAorCQkgZWNobyAic3RlcD0kc3RlcCIKKwkJIAorCQkgc3RlcD1gZXhwciAkc3RlcCArIDFgCisJCSBudiBzZXQgc3RlcF90bXA9JHN0ZXAKKwkJIAorCQkgaWYgWyAiLSRzdGVwIiA9ICItMyIgXTt0aGVuCisJCQludiBzZXQgc3RlcF90bXA9MAorCQkgZmkKKwkJIAkgCisgICAgICAgIDs7CisKKyAgICByZW5ld3xib3VuZCkKKyAgICAJZWNobyAiY2FzZSByZW5ldyBib3VuZCIKKyAgICAgICAgCisJCWdldF93YW5fbmFtZSAkaW50ZXJmYWNlCQorCQlpZiBbICItJHdhbm5hbWUiID09ICItZXRod2FuIiAtbyAiLSR3YW5uYW1lIiA9PSAiLXdpZml3YW4iIF07IHRoZW4KKwkJCShyb3V0ZXJfbXNnX3Byb3h5IGRlbF90aW1lciAkd2FubmFtZSA+PiAkdGVzdF9sb2cgMj4mMSB8fCBlY2hvICJFcnJvcjogcm91dGVyX21zZ19wcm94eSBkZWxfdGltZXIgZmFpbGVkLiIgPj4gJHRlc3RfbG9nKSAmCisJCWZpCisKKyAgICAgICAgI7X308O4w73Fsb7G8HVkaGNwyrG68qOsxdC2z2ludGVyZmFjZcrHt/G6zWV0aHdhbsalxeSjrMalxeTU8sbwZXRod2FuLLfx1PLTw9StaW50ZXJmYWNlCisJCWV0aHdhbl90bXA9YG52IGdldCBldGh3YW5gCisgICAgICAgIHN3MF9mbGFnPWBlY2hvICRldGh3YW5fdG1wIHwgZ3JlcCAkaW50ZXJmYWNlYAorICAgICAgICBpZiBbICItJHtzdzBfZmxhZ30iICE9ICItIiBdO3RoZW4KKyAgICAgICAgICAgIGludGVyZmFjZT0ke2V0aHdhbl90bXB9CisgICAgICAgIGZpCisJCWlmY29uZmlnICRpbnRlcmZhY2UgJGlwICRCUk9BRENBU1QgJE5FVE1BU0sgMj4+JHRlc3RfbG9nCisJCWlmIFsgJD8gLW5lIDAgXTt0aGVuCisJICAgICAgICBlY2hvICJFcnJvcjogaWZjb25maWcgJGludGVyZmFjZSAkaXAgJEJST0FEQ0FTVCAkTkVUTUFTSyBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKKyAgICAgICAgZmkKKwkJaWYgWyAiLSR3YW5uYW1lIiA9PSAiLXdpZml3YW4iIF07IHRoZW4KKwkJCW52IHNldCB3aWZpX3N0YXRlPSJ3b3JraW5nIgorCSAgICBlbGlmIFsgIi0kd2FubmFtZSIgPT0gIi1ldGh3YW4iIF07IHRoZW4KKwkJICAgICPX1MrK06ajrGRoY3C78cihaXCzybmm1PLJscvAcHBwb2W9+LPMCisJCSAgICBwcHBvZV9waWQ9YHBzIHwgZ3JlcCAtdiBncmVwIHwgZ3JlcCAkaW50ZXJmYWNlIHwgZ3JlcCBwcHBvZWNkIHwgYXdrICd7cHJpbnQgJDF9J2AKKwkJCWtpbGwgJHBwcG9lX3BpZAorCQkJbnYgc2V0IHJqNDVfc3RhdGU9IndvcmtpbmciCisJCQludiBzZXQgZXRoX2N1cm1vZGU9ImRoY3AiCisJICAgIGZpCisJCQorICAgICAgICBlY2hvICJpbnRlcmZhY2U6JGludGVyZmFjZSwgaXA6JGlwLCBORVRNQVNLOiRzdWJuZXQiCisgICAgICAgIGVjaG8gInJvdXRlcjokcm91dGVyIgorICAgICAgICBlY2hvICJkbnM6JGRucyIKKyAgICAgICAKKyAgICAgICAgI3NldCBuZXcgdmFsdWUgdG8gaXAsIG5ldG1hc2ssIGdhdGV3YXkgYW5kIGRucyBpbiBudiAKKyAgICAgICAgbnYgc2V0ICRpbnRlcmZhY2UiX2lwIj0kaXAKKyAgICAgICAgbnYgc2V0ICRpbnRlcmZhY2UiX25tIj0kc3VibmV0CisgICAgICAgIG52IHNldCAkaW50ZXJmYWNlIl9ndyI9JHJvdXRlcgorCQkjc2V0IGRucyB0byBudgorICAgICAgICBmb3IgaSBpbiAkZG5zIDsgZG8KKyAgICAgICAgICAgIFsgLW4gIiRwc3ByaWRucyIgXSB8fCB7IG52IHNldCAkaW50ZXJmYWNlIl9wcmlkbnMiPSRpOyBwc3ByaWRucz0icHNwcmlkbnMiOyB9CisgICAgICAgICAgICBudiBzZXQgJGludGVyZmFjZSJfc2VjZG5zIj0kaSAgIAorICAgICAgICBkb25lCisJCQkKKwkJI2NfaWQ9MNTyysdyajQ1u/JXaUZpo6xjX2lkPWRlZmF1bHTU8s6q08PT2s3izfi1xHBzv9oKKyAgICAgICAgZGVmX2NpZD1gbnYgZ2V0IGRlZmF1bHRfY2lkYAorCSAgICBpZiBbICItJGNfaWQiID09ICItMCIgLW8gIi0kY19pZCIgPT0gIi0kZGVmX2NpZCIgXTsgdGhlbgorCQkJKHJvdXRlcl9tc2dfcHJveHkgaXB2NCB1ZGhjcGMuc2ggPj4gJHRlc3RfbG9nIDI+JjEgfHwgZWNobyAiRXJyb3I6IHJvdXRlcl9tc2dfcHJveHkgaXB2NCB1ZGhjcGMuc2ggZmFpbGVkLiIgPj4gJHRlc3RfbG9nKSAmCisJCWVsc2UKKwkJCSNwb2xpY3kgcm91dGVyCisJCQl3YW5fcHJpPWBudiBnZXQgJHdhbm5hbWUiX3ByaW9yaXR5ImAKKwkJCXJ0X251bT1gZXhwciAkd2FuX3ByaSBcKiAxMCArICRjX2lkYAorCQkJaXAgcnVsZSBhZGQgZnJvbSAkaXAgdGFibGUgJHJ0X251bSAyPj4kdGVzdF9sb2cKKwkJCWlmIFsgJD8gLW5lIDAgXTt0aGVuCisJCQkJZWNobyAiRXJyb3I6IGlwIHJ1bGUgYWRkIGZyb20gJGlwIHRhYmxlICRydF9udW0gZmFpbGVkLiIgPj4gJHRlc3RfbG9nCisJCQlmaQorCQkJaXAgcm91dGUgYWRkIGRlZmF1bHQgdmlhICRyb3V0ZXIgdGFibGUgJHJ0X251bSAyPj4kdGVzdF9sb2cKKwkJCWlmIFsgJD8gLW5lIDAgXTt0aGVuCisJCQkJZWNobyAiRXJyb3I6IGlwIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAkcm91dGVyIHRhYmxlICRydF9udW0gZmFpbGVkLiIgPj4gJHRlc3RfbG9nCisJCQlmaQorCQkJaXAgcm91dGUgZmx1c2ggY2FjaGUgMj4+JHRlc3RfbG9nCisJCQlpZiBbICQ/IC1uZSAwIF07dGhlbgorCQkJCWVjaG8gIkVycm9yOiBpcCByb3V0ZSBmbHVzaCBjYWNoZSBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKKwkJCWZpCisJICAgIGZpCisgICAgIAorCQkjIG5vdGlmeSBnb2FoZWFkIHdoZW4gdGhlIFdBTiBJUCBoYXMgYmVlbiBhY3F1aXJlZC4gLS15eQorCQllY2hvICJjYXNlIHJlbmV3IGJvdW5kIG92ZXIiCisJCQorICAgICAgICAjbnYgc2V0IHBwcF9zdGF0dXM9cHBwX2Nvbm5lY3RlZAorCQludiBzZXQgc3RlcF90bXA9MAorCQk7OworZXNhYworCisKKworZXhpdCAwCisK