From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: =?utf-8?q?=5BPATCH_04/25=5D_autoconf=3A_trim_the_conf?= =?utf-8?q?igure_script=3B_use_autoheader?= Date: Wed, 25 Apr 2012 16:55:32 +0100 Message-ID: <1335369353-13012-5-git-send-email-ian.jackson@eu.citrix.com> References: <1335369353-13012-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1335369353-13012-1-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Roger Pau Monne , Ian Jackson List-Id: xen-devel@lists.xenproject.org UmVtb3ZlIGEgbG90IG9mIHVubmVjZXNzYXJ5IHRlc3RzLiAgU3BlY2lmaWNhbGx5LCB3ZSBubyBs b25nZXIgdGVzdApmb3Igc3RhbmRhcmQgUE9TSVggZmFjaWxpdGllcyB3aGljaCB3ZSBleHBlY3Qg dG8gYmUgcHJvdmlkZWQKZXZlcnl3aGVyZSBhbmQgd2hpY2ggd2UgZG9uJ3QgaW4gYW55IGNhc2Ug aGF2ZSBhbnkgYWx0ZXJuYXRpdmUgZm9yLgoKU3dpdGNoIHRvIGdlbmVyYXRpbmcgY29uZmlnLmgu aW4gd2l0aCBhdXRvaGVhZGVyLgoKU2lnbmVkLW9mZi1ieTogSWFuIEphY2tzb24gPGlhbi5qYWNr c29uQGV1LmNpdHJpeC5jb20+CkNjOiBSb2dlciBQYXUgTW9ubmUgPHJvZ2VyLnBhdUBlbnRlbC51 cGMuZWR1PgoKQ2hhbmdlcyBzaW5jZSB2NzoKICogUmVtb3ZlZCBBWF9DSEVDS19QVFlGVU5DUyAo c251Y2sgaW4gZnJvbSBwcmV2aW91cyBwYXRjaCkKLS0tCiBhdXRvZ2VuLnNoICAgICAgICAgfCAg ICAxICsKIHRvb2xzL2NvbmZpZy5oLmluICB8ICAgNzMgKy0KIHRvb2xzL2NvbmZpZ3VyZSAgICB8 IDg4MjUgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogdG9vbHMvY29uZmlndXJlLmFjIHwgICA2MCArLQogNCBmaWxlcyBjaGFuZ2VkLCAyOTgxIGlu c2VydGlvbnMoKyksIDU5NzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXV0b2dlbi5zaCBi L2F1dG9nZW4uc2gKaW5kZXggYzI4OGI3MS4uNThhNzFjZSAxMDA3NTUKLS0tIGEvYXV0b2dlbi5z aAorKysgYi9hdXRvZ2VuLnNoCkBAIC0xLDMgKzEsNCBAQAogIyEvYmluL3NoIC1lCiBjZCB0b29s cwogYXV0b2NvbmYKK2F1dG9oZWFkZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbmZpZy5oLmluIGIv dG9vbHMvY29uZmlnLmguaW4KaW5kZXggZjhmOTZkYy4uMTdjODkxMyAxMDA2NDQKLS0tIGEvdG9v bHMvY29uZmlnLmguaW4KKysrIGIvdG9vbHMvY29uZmlnLmguaW4KQEAgLTEsMTkgKzEsNjQgQEAK LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkCi0gKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIu MSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCi0gKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmli ZWQgaW4gZmlsZSBMSUNFTlNFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICov CisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVh ZGVyLiAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBo ZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEg aWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS4gKi8KKyN1bmRlZiBI QVZFX0xJQkNSWVBUTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHlhamwnIGxp YnJhcnkgKC1seWFqbCkuICovCisjdW5kZWYgSEFWRV9MSUJZQUpMCisKKy8qIERlZmluZSB0byAx IGlmIHlvdSBoYXZlIHRoZSBgeicgbGlicmFyeSAoLWx6KS4gKi8KKyN1bmRlZiBIQVZFX0xJQloK KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUu ICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0 aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8q IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwor I3VuZGVmIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz dHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERl ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3Vu ZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv c3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVm aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisj dW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg PHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICiAKIC8qIERl ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8eWFqbC95YWpsX3ZlcnNpb24uaD4gaGVhZGVyIGZp bGUuICovCiAjdW5kZWYgSEFWRV9ZQUpMX1lBSkxfVkVSU0lPTl9ICiAKLS8qIERlZmluZSBjdXJz ZXMgaGVhZGVyIHRvIGluY2x1ZGUuICovCisvKiBEZWZpbmUgY3Vyc2VzIGhlYWRlciB0byB1c2Ug Ki8KICN1bmRlZiBJTkNMVURFX0NVUlNFU19ICisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3 aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3Vu ZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRo aXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBm dWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0Vf U1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMg cGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBo b21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBE ZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0Vf VkVSU0lPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBm aWxlcy4gKi8KKyN1bmRlZiBTVERDX0hFQURFUlMKZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbmZpZ3Vy ZSBiL3Rvb2xzL2NvbmZpZ3VyZQppbmRleCA4OTdlMDYxLi5kODkxOGZlIDEwMDc1NQotLS0gYS90 b29scy9jb25maWd1cmUKKysrIGIvdG9vbHMvY29uZmlndXJlCkBAIC01OTUsMTIgKzU5NSw4IEBA IGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYiCiAK LWFjX2hlYWRlcl9saXN0PQotYWNfZnVuY19saXN0PQogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpT Ci1QT1dfTElCCiBMSUJPQkpTCi1BTExPQ0EKIGxpYmljb252CiBQVEhSRUFEX0xJQlMKIFBUSFJF QURfTERGTEFHUwpAQCAtNjE2LDYgKzYxMiw5IEBAIFBLR19DT05GSUdfTElCRElSCiBQS0dfQ09O RklHX1BBVEgKIFBLR19DT05GSUcKIENVUlNFU19MSUJTCitFR1JFUAorR1JFUAorQ1BQCiBweWNv bmZpZwogUFlUSE9OUEFUSAogT0NBTUxCVUlMRApAQCAtNjM1LDggKzYzNCwxMyBAQCBJTlNUQUxM X0RBVEEKIElOU1RBTExfU0NSSVBUCiBJTlNUQUxMX1BST0dSQU0KIFNFVF9NQUtFCi1MTl9TCi1T RUQKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUwor Q0MKIElBU0wKIEJDQwogTEQ4NgpAQCAtNjY1LDI0ICs2NjksNiBAQCB4ZW5hcGkKIHZ0cG0KIG1v bml0b3JzCiBnaXRodHRwCi1ob3N0X29zCi1ob3N0X3ZlbmRvcgotaG9zdF9jcHUKLWhvc3QKLWJ1 aWxkX29zCi1idWlsZF92ZW5kb3IKLWJ1aWxkX2NwdQotYnVpbGQKLUVHUkVQCi1HUkVQCi1DUFAK LU9CSkVYVAotRVhFRVhUCi1hY19jdF9DQwotQ1BQRkxBR1MKLUxERkxBR1MKLUNGTEFHUwotQ0MK IHRhcmdldF9hbGlhcwogaG9zdF9hbGlhcwogYnVpbGRfYWxpYXMKQEAgLTc0MCwxMiArNzI2LDYg QEAgZW5hYmxlX2RlYnVnCiAgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcwogaG9z dF9hbGlhcwogdGFyZ2V0X2FsaWFzCi1DQwotQ0ZMQUdTCi1MREZMQUdTCi1MSUJTCi1DUFBGTEFH UwotQ1BQCiBQUkVQRU5EX0lOQ0xVREVTCiBQUkVQRU5EX0xJQgogQVBQRU5EX0lOQ0xVREVTCkBA IC03NjIsNiArNzQyLDEyIEBAIEFTODYKIExEODYKIEJDQwogSUFTTAorQ0MKK0NGTEFHUworTERG TEFHUworTElCUworQ1BQRkxBR1MKK0NQUAogUEtHX0NPTkZJRwogUEtHX0NPTkZJR19QQVRICiBQ S0dfQ09ORklHX0xJQkRJUgpAQCAtMTM2NSwxMCArMTM1MSw2IEBAIEZpbmUgdHVuaW5nIG9mIHRo ZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CiBfQUNFT0YKIAogICBjYXQgPDxcX0FDRU9GCi0K LVN5c3RlbSB0eXBlczoKLSAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJlIGZvciBidWlsZGlu ZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KLSAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0 byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCiBfQUNFT0YKIGZpCiAKQEAg LTEzOTksMTQgKzEzODEsNiBAQCBPcHRpb25hbCBGZWF0dXJlczoKICAgLS1kaXNhYmxlLWRlYnVn ICAgICAgICAgRGlzYWJsZSBkZWJ1ZyBidWlsZCBvZiB0b29scyAoZGVmYXVsdCBpcyBFTkFCTEVE KQogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKLSAgQ0MgICAgICAg ICAgQyBjb21waWxlciBjb21tYW5kCi0gIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKLSAg TERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxp YnJhcmllcyBpbiBhCi0gICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRp cj4KLSAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAt bDxsaWJyYXJ5PgotICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3Ig ZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCi0gICAgICAgICAgICAgIHlvdSBoYXZlIGhl YWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgotICBDUFAgICAg ICAgICBDIHByZXByb2Nlc3NvcgogICBQUkVQRU5EX0lOQ0xVREVTCiAgICAgICAgICAgICAgIExp c3Qgb2YgaW5jbHVkZSBmb2xkZXJzIHRvIHByZXBlbmQgdG8gQ0ZMQUdTICh3aXRob3V0IC1JKQog ICBQUkVQRU5EX0xJQiBMaXN0IG9mIGxpYnJhcnkgZm9sZGVycyB0byBwcmVwZW5kIHRvIExERkxB R1MgKHdpdGhvdXQgLUwpCkBAIC0xNDI1LDYgKzEzOTksMTQgQEAgU29tZSBpbmZsdWVudGlhbCBl bnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgIExEODYgICAgICAgIFBhdGggdG8gbGQ4NiB0b29sCiAg IEJDQyAgICAgICAgIFBhdGggdG8gYmNjIHRvb2wKICAgSUFTTCAgICAgICAgUGF0aCB0byBpYXNs IHRvb2wKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMg Y29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBk aXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJk IGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8g dGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBD L0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAg ICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1 ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgogICBQS0dfQ09ORklHICBwYXRo IHRvIHBrZy1jb25maWcgdXRpbGl0eQogICBQS0dfQ09ORklHX1BBVEgKICAgICAgICAgICAgICAg ZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aApAQCAtMTc5Nywz MTEgKzE3NzksNiBAQCBmaQogICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKIAogfSAjIGFj X2ZuX2NfdHJ5X2xpbmsKLQotIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCi0j IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBGVU5D IGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5Ci1hY19m bl9jX2NoZWNrX2Z1bmMgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xp bmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1Ci0kYXNf ZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIGV2YWwgInRlc3QgXCJcJHsk MytzZXR9XCIiID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVs c2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5k IGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBp biBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFp IDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJDIgaW5ub2N1 b3VzXyQyCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhv cGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFy ICQyICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9f U1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBm cmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUg PGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVm ICQyCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFu IGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0 eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUg d291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0j ZW5kaWYKLWNoYXIgJDIgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9y IGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBF Tk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcg c3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNp ZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCi1jaG9rZSBtZQotI2Vu ZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuICQyICgpOwotICA7Ci0gIHJldHVybiAwOwot fQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwg IiQzPXllcyIKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0 LiRhY19leHQKLWZpCi1ldmFsIGFjX3Jlcz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIk YWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVu b19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KLQotfSAjIGFj X2ZuX2NfY2hlY2tfZnVuYwotCi0jIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIg SU5DTFVERVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURF Uywgc2V0dGluZyBjYWNoZQotIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCi1hY19mbl9jX2No ZWNrX3R5cGUgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19z dGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1Ci0kYXNfZWNob19u ICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIGV2YWwgInRlc3QgXCJcJHskMytzZXR9 XCIiID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAg ZXZhbCAiJDM9bm8iCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci1pbnQKLW1haW4gKCkKLXsKLWlmIChzaXpl b2YgKCQyKSkKLQkgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFj X2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWlu dAotbWFpbiAoKQotewotaWYgKHNpemVvZiAoKCQyKSkpCi0JICAgIHJldHVybiAwOwotICA7Ci0g IHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsg dGhlbiA6Ci0KLWVsc2UKLSAgZXZhbCAiJDM9eWVzIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2 YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQot ICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYg eyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQotCi19ICMgYWNfZm5fY19jaGVja190eXBl Ci0KLSMgYWNfZm5fY19maW5kX2ludFhfdCBMSU5FTk8gQklUUyBWQVIKLSMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmluZHMgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdp dGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKLSMgYWNjb3JkaW5nbHku Ci1hY19mbl9jX2ZpbmRfaW50WF90ICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEi fSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50JDJf dCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50JDJfdC4uLiAiID4mNjsgfQotaWYg ZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNgotZWxzZQotICBldmFsICIkMz1ubyIKLSAgICAgIyBPcmRlciBpcyBpbXBv cnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCi0g ICAgICMgdGhhbiBoYWxmIG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgd2lkdGguCi0gICAgIGZvciBh Y190eXBlIGluIGludCQyX3QgJ2ludCcgJ2xvbmcgaW50JyBcCi0JICdsb25nIGxvbmcgaW50JyAn c2hvcnQgaW50JyAnc2lnbmVkIGNoYXInOyBkbwotICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNs dWRlc19kZWZhdWx0Ci0JICAgICBlbnVtIHsgTiA9ICQyIC8gMiAtIDEgfTsKLWludAotbWFpbiAo KQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoMCA8ICgkYWNfdHlwZSkgKCgo KCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpKV07Ci10ZXN0X2FycmF5IFsw XSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21w aWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0 Ci0JICAgICAgICBlbnVtIHsgTiA9ICQyIC8gMiAtIDEgfTsKLWludAotbWFpbiAoKQotewotc3Rh dGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAx IDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMSkKLQkJIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBl KSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMikpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0g IDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5F Tk8iOyB0aGVuIDoKLQotZWxzZQotICBjYXNlICRhY190eXBlIGluICMoCi0gIGludCQyX3QpIDoK LSAgICBldmFsICIkMz15ZXMiIDs7ICMoCi0gICopIDoKLSAgICBldmFsICIkMz1cJGFjX3R5cGUi IDs7Ci1lc2FjCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiQz IlwiID0geCJubyI7IHRoZW4gOgotCi1lbHNlCi0gIGJyZWFrCi1maQotICAgICBkb25lCi1maQot ZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9 Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAm JiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9Ci0KLX0gIyBhY19mbl9jX2ZpbmRfaW50 WF90Ci0KLSMgYWNfZm5fY19jaGVja19tZW1iZXIgTElORU5PIEFHR1IgTUVNQkVSIFZBUiBJTkNM VURFUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0jIFRyaWVzIHRvIGZpbmQgaWYgdGhlIGZpZWxkIE1FTUJFUiBleGlzdHMgaW4gdHlwZSBB R0dSLCBhZnRlciBpbmNsdWRpbmcKLSMgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUg VkFSIGFjY29yZGluZ2x5LgotYWNfZm5fY19jaGVja19tZW1iZXIgKCkKLXsKLSAgYXNfbGluZW5v PSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xp bmVub19zdGFjawotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkMi4kMyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuJDMuLi4g IiA+JjY7IH0KLWlmIGV2YWwgInRlc3QgXCJcJHskNCtzZXR9XCIiID0gc2V0OyB0aGVuIDoKLSAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDUKLWludAot bWFpbiAoKQotewotc3RhdGljICQyIGFjX2FnZ3I7Ci1pZiAoYWNfYWdnci4kMykKLXJldHVybiAw OwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQ0PXllcyIKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDUK LWludAotbWFpbiAoKQotewotc3RhdGljICQyIGFjX2FnZ3I7Ci1pZiAoc2l6ZW9mIGFjX2FnZ3Iu JDMpCi1yZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190 cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkND15ZXMiCi1lbHNlCi0gIGV2 YWwgIiQ0PW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDQKLQkgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19y ZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3Rh Y2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBh c19saW5lbm87fQotCi19ICMgYWNfZm5fY19jaGVja19tZW1iZXIKLQotIyBhY19mbl9jX2ZpbmRf dWludFhfdCBMSU5FTk8gQklUUyBWQVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0jIEZpbmRzIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHdpZHRoIEJJVFMs IHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCi0jIGFjY29yZGluZ2x5LgotYWNfZm5fY19maW5k X3VpbnRYX3QgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19z dGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aW50JDJfdCIgPiY1Ci0kYXNf ZWNob19uICJjaGVja2luZyBmb3IgdWludCQyX3QuLi4gIiA+JjY7IH0KLWlmIGV2YWwgInRlc3Qg XCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi0gICAgICMgT3JkZXIgaXMgaW1wb3J0YW50IC0gbmV2 ZXIgY2hlY2sgYSB0eXBlIHRoYXQgaXMgcG90ZW50aWFsbHkgc21hbGxlcgotICAgICAjIHRoYW4g aGFsZiBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHdpZHRoLgotICAgICBmb3IgYWNfdHlwZSBpbiB1 aW50JDJfdCAndW5zaWduZWQgaW50JyAndW5zaWduZWQgbG9uZyBpbnQnIFwKLQkgJ3Vuc2lnbmVk IGxvbmcgbG9uZyBpbnQnICd1bnNpZ25lZCBzaG9ydCBpbnQnICd1bnNpZ25lZCBjaGFyJzsgZG8K LSAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBl bmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17 Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKCRhY190eXBlKSAtMSA+PiAoJDIg LyAyIC0gMSkpID4+ICgkMiAvIDIgLSAxKSA9PSAzKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQot ICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElO RU5PIjsgdGhlbiA6Ci0gIGNhc2UgJGFjX3R5cGUgaW4gIygKLSAgdWludCQyX3QpIDoKLSAgICBl dmFsICIkMz15ZXMiIDs7ICMoCi0gICopIDoKLSAgICBldmFsICIkMz1cJGFjX3R5cGUiIDs7Ci1l c2FjCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC4kYWNfZXh0Ci0gICAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiQzIlwiID0geCJubyI7IHRo ZW4gOgotCi1lbHNlCi0gIGJyZWFrCi1maQotICAgICBkb25lCi1maQotZXZhbCBhY19yZXM9XCQk MwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xp bmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07 IHVuc2V0IGFzX2xpbmVubzt9Ci0KLX0gIyBhY19mbl9jX2ZpbmRfdWludFhfdAogY2F0ID5jb25m aWcubG9nIDw8X0FDRU9GCiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2Vk IGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcg aWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KQEAgLTIzODYsMTEgKzIwNjMsNiBAQCAkYXNf ZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgPiRjYWNo ZV9maWxlCiBmaQogCi1hc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvdGltZS5oIgot YXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiCi1hc19mbl9hcHBlbmQgYWNf ZnVuY19saXN0ICIgYWxhcm0iCi1hc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzdGRsaWIu aCIKLWFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN5cy9wYXJhbS5oIgogIyBDaGVjayB0 aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0 aGUgc2FtZQogIyB2YWx1ZS4KIGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQpAQCAtMjUwOCwxNzMw ICsyMTgwLDQwIEBAIEFQUEVORF9JTkNMVURFUyBhbmQgQVBQRU5EX0xJQiBpbnN0ZWFkIHdoZW4g cG9zc2libGUuIiA+JjI7fQogCiBmaQogCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFH UycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0 ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxB R1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9 JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVu Ci0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9v bF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2lu ZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9 IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlm IHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNl ciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9T RVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAg dGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycg JGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2Nj IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAg ZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0 ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkQ0MiID4mNQotJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci1lbHNlCi0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0k YXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2df Q0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2Yg ImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkg Z2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFj X3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9 IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRl c3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0ND IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJ RlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0k YXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNf ZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0 IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGly LyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9 ImdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25l Ci0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJv Z19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLSRhc19l Y2hvICIkYWNfY3RfQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZp Ci0KLSAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCi0gICAgQ0M9IiIKLSAgZWxzZQot ICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3Nz IHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFz X21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRy aXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBDQz0kYWNfY3Rf Q0MKLSAgZmkKLWVsc2UKLSAgQ0M9IiRhY19jdl9wcm9nX0NDIgotZmkKLQotaWYgdGVzdCAteiAi JENDIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4K LSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9v bF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5n IGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0i ID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYg dGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAk YWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIK LSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGly LyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRv bmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVz dCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFz X2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBmaQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRo ZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHBy b2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+ JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVz dCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9n X0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotICBhY19w cm9nX3JlamVjdGVkPW5vCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1m b3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRh c19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRh YmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07 IHRoZW4KLSAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNy L3VjYi9jYyI7IHRoZW4KLSAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwotICAgICAgIGNvbnRp bnVlCi0gICAgIGZpCi0gICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZT Ci0KLWlmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KLSAgIyBXZSBmb3VuZCBh IGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgotICBzZXQg ZHVtbXkgJGFjX2N2X3Byb2dfQ0MKLSAgc2hpZnQKLSAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCi0g ICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCi0g ICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxs IGJlIGNob3NlbgotICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1l OyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgotICAgIHNoaWZ0Ci0gICAgYWNfY3ZfcHJvZ19DQz0i JGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCi0gIGZpCi1maQotZmkKLWZpCi1DQz0kYWNfY3Zf cHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsg fQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXog IiRDQyI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3Ig YWNfcHJvZyBpbiBjbC5leGUKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2Yg IiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdp dGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgot eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFj X3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9 Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFj X2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNl Ci1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQ QVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rp cj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7 IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFz X3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19j dl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMK LQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUK LSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZp Ci0KLQotICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXog IiRDQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gIGZvciBhY19wcm9nIGluIGNsLmV4ZQotZG8K LSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBh IHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKLSAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0ND IjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAk YWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1J RlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MK LWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0 X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVz dCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhawotZG9uZQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0Mi ID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6 JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBo b3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3Mg dG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJu ZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1maQotCi1maQotCi0KLXRl c3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4g XGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBp bGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIg IiRMSU5FTk8iIDUgOyB9Ci0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBj b21waWxlci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBp bGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0g IHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3Ry eSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICop IGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5 X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5j b25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0 aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4u Ci0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0 ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+ JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi1jYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAot bWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVz X3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEu b3V0IGEub3V0LmRTWU0gYS5leGUgYi5vdXQiCi0jIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJs ZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCi0jIEl0IHdpbGwgaGVscCB1cyBk aWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCi0j IG9mIGV4ZWV4dC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVj a2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9Ci1hY19saW5rX2Rl ZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8n YAotCi0jIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6Ci1hY19maWxlcz0iYS5vdXQgY29uZnRl c3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgotCi1hY19y bWZpbGVzPQotZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCi1kbwotICBjYXNlICRhY19maWxlIGlu Ci0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0g fCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7 OwotICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OwotICBlc2FjCi1k b25lCi1ybSAtZiAkYWNfcm1maWxlcwotCi1pZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0 IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hv PVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3Ry eV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgot JGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGlua19kZWZhdWx0 IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07 IHRoZW4gOgotICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFy aWFibGUgdG8gYG5vJy4KLSMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRo aXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCi0jIGluIGEgTWFrZWZpbGUuICBXZSBzaG91 bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAotIyBzbyB0aGF0 IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25v d24gdG8KLSMgQXV0b2NvbmYuCi1mb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKLWRvCi0gIHRl c3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4k YWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwg Ki5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQotCTs7Ci0gICAg W2FiXS5vdXQgKQotCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4 dD0nJyBpcyBtb3N0Ci0JIyBjZXJ0YWlubHkgcmlnaHQuCi0JYnJlYWs7OwotICAgICouKiApCi0J aWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4 dCIgIT0gbm87Ci0JdGhlbiA6OyBlbHNlCi0JICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmls ZSIgOiAnW14uXSpcKFwuLipcKSdgCi0JZmkKLQkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBi ZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKLQkjIHNhZmU6IGNyb3NzIGNvbXBp bGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKLQkjIGFyZ3VtZW50 LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KLQkjIEV2 ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YK LQkjIGFjdHVhbGx5IHdvcmtpbmcuCi0JYnJlYWs7OwotICAgICogKQotCWJyZWFrOzsKLSAgZXNh YwotZG9uZQotdGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9Ci0KLWVs c2UKLSAgYWNfZmlsZT0nJwotZmkKLWlmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6Ci0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0k YXNfZWNobyAibm8iID4mNjsgfQotJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2Fz OiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4m NQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5f ZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29u ZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9Ci1lbHNlCi0gIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFz X2VjaG8gInllcyIgPiY2OyB9Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUi ID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQg ZmlsZSBuYW1lLi4uICIgPiY2OyB9Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0K LWFjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0Ci0KLXJtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5l eGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0Ci1hY19jbGVhbl9maWxlcz0kYWNfY2xlYW5f ZmlsZXNfc2F2ZQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5n IGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KLWlmIHsgeyBhY190cnk9IiRh Y19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3Ry eV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFs IGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNo b1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGluayIp IDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0 aGVuIDoKLSAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJl c2VudCcgKHdlbGwsIG9ic2VydmFibGUpCi0jIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGlu c3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKLSMgd29yayBwcm9wZXJseSAo aS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCi0jIGBy bScuCi1mb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8K LSAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAg ICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICou YmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7Ci0g ICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdg Ci0JICBicmVhazs7Ci0gICAgKiApIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotZWxzZQotICB7IHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3 ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30K LWFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNh bm5vdCBjb21waWxlIGFuZCBsaW5rCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxz IiAiJExJTkVOTyIgNSA7IH0KLWZpCi1ybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVl eHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf Y3ZfZXhlZXh0IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KLQotcm0gLWYg Y29uZnRlc3QuJGFjX2V4dAotRVhFRVhUPSRhY19jdl9leGVleHQKLWFjX2V4ZWV4dD0kRVhFRVhU Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29u ZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAoKQotewotRklMRSAq ZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKLSByZXR1cm4gZmVycm9yIChmKSB8fCBm Y2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotYWNfY2xlYW5f ZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCi0jIENoZWNrIHRoYXQgdGhlIGNv bXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgot IyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoteyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBj cm9zcyBjb21waWxpbmciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUg Y3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAh PSB5ZXM7IHRoZW4KLSAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGlu Ci0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190 cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hv IjsgfSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1 Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNf Y3ZfZXhlZXh0JwotICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpc XCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1l c2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRh Y190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIk YWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9 IDA7IH07IH07IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bm8KLSAgZWxzZQotICAgIGlmIHRl c3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KLQljcm9zc19jb21waWxpbmc9eWVz Ci0gICAgZWxzZQotCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBl cnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxg JGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBw cm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgot U2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9Ci0gICAg ZmkKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci0kYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIg PiY2OyB9Ci0KLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNv bmZ0ZXN0Lm91dAotYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBv YmplY3QgZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmpl Y3QgZmlsZXMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0 OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAq LwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAt ZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagotaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1j YXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRh Y190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2Vj aG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNf ZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQot ICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog XCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgot ICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbwot ICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7Ci0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAg ICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICou YmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OwotICAgICopIGFjX2N2X29i amV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAotICAgICAgIGJyZWFrOzsKLSAg ZXNhYwotZG9uZQotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6 IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoteyB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1 Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9l cnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNv bXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsg fQotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zf b2JqZXh0IiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KLU9CSkVYVD0kYWNf Y3Zfb2JqZXh0Ci1hY19vYmpleHQ9JE9CSkVYVAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29t cGlsZXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhl IEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJf Z251K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVs c2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5k IGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgX19HTlVDX18KLSAg ICAgICBjaG9rZSBtZQotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYg YWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jb21waWxlcl9nbnU9 eWVzCi1lbHNlCi0gIGFjX2NvbXBpbGVyX2dudT1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY19jb21waWxl cl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1Ci0kYXNfZWNo byAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KLWlmIHRlc3QgJGFjX2NvbXBpbGVyX2du dSA9IHllczsgdGhlbgotICBHQ0M9eWVzCi1lbHNlCi0gIEdDQz0KLWZpCi1hY190ZXN0X0NGTEFH Uz0ke0NGTEFHUytzZXR9Ci1hY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWci ID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4m NjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9 JGFjX2Nfd2Vycm9yX2ZsYWcKLSAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCi0gICBhY19jdl9wcm9n X2NjX2c9bm8KLSAgIENGTEFHUz0iLWciCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQot ewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19nPXllcwotZWxzZQotICBDRkxBR1M9 IiIKLSAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8q IGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4g MDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgot Ci1lbHNlCi0gIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwotCSBDRkxB R1M9Ii1nIgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0v KiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJu IDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoK LSAgYWNfY3ZfcHJvZ19jY19nPXllcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgYWNf Y193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCi1maQoteyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQot JGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQotaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZM QUdTIiA9IHNldDsgdGhlbgotICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCi1lbGlmIHRlc3QgJGFj X2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgot ICAgIENGTEFHUz0iLWcgLU8yIgotICBlbHNlCi0gICAgQ0ZMQUdTPSItZyIKLSAgZmkKLWVsc2UK LSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1PMiIKLSAgZWxzZQot ICAgIENGTEFHUz0KLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKLSRh c19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIg PiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoK LSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY3ZfcHJvZ19jY19jODk9 bm8KLWFjX3NhdmVfQ0M9JENDCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5j bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3Rh dC5oPgotLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1Mg NS43J3Mgc3JjL2NvbmYuc2guICAqLwotc3RydWN0IGJ1ZiB7IGludCB4OyB9OwotRklMRSAqICgq cmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKLXN0YXRpYyBjaGFy ICplIChwLCBpKQotICAgICBjaGFyICoqcDsKLSAgICAgaW50IGk7Ci17Ci0gIHJldHVybiBwW2ld OwotfQotc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoq cCwgLi4uKQotewotICBjaGFyICpzOwotICB2YV9saXN0IHY7Ci0gIHZhX3N0YXJ0ICh2LHApOwot ICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOwotICB2YV9lbmQgKHYpOwotICByZXR1cm4gczsK LX0KLQotLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5 IGRlZmF1bHQuICBJdCBoYXMKLSAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQg bm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KLSAgIFRoZXNlIGRvbid0IHByb3Zv a2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAot ICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlz IGFkZGVkIHRvIGdldAotICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4 JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgotICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4g IEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCi0gICB0 aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCi1pbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAn ID09IDAgPyAxIDogLTFdOwotCi0vKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkg ZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKLSAgIGluc2lkZSBzdHJp bmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KLSNkZWZpbmUgRk9PKHgpICd4JwotaW50 IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07Ci0KLWludCB0ZXN0IChpbnQg aSwgZG91YmxlIHgpOwotc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Ci1zdHJ1Y3QgczIg e2ludCAoKmYpIChkb3VibGUgYSk7fTsKLWludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklM RSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOwotaW50 IGFyZ2M7Ci1jaGFyICoqYXJndjsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgKGUsIGFyZ3Ys IDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOwotICA7Ci0gIHJl dHVybiAwOwotfQotX0FDRU9GCi1mb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFs YW5nbHZsPWFuc2kgLXN0ZCBcCi0JLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VY VEVOU0lPTlNfXyIKLWRvCi0gIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBpZiBhY19mbl9j X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19h cmcKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Ci0gIHRl c3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCi1kb25lCi1ybSAtZiBj b25mdGVzdC4kYWNfZXh0Ci1DQz0kYWNfc2F2ZV9DQwotCi1maQotIyBBQ19DQUNIRV9WQUwKLWNh c2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCi0gIHgpCi0gICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLSRhc19lY2hv ICJub25lIG5lZWRlZCIgPiY2OyB9IDs7Ci0gIHhubykKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQotJGFzX2VjaG8g InVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKLSAgKikKLSAgICBDQz0iJENDICRhY19jdl9wcm9nX2Nj X2M4OSIKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODki ID4mNjsgfSA7OwotZXNhYwotaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0 aGVuIDoKLQotZmkKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21w aWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19s aW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdT IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2Nv bXBpbGVyX2dudQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29t cGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNf bGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFH UyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19j b21waWxlcl9nbnUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQotJGFzX2VjaG9fbiAiY2hl Y2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KLSMgT24gU3Vu cywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCi1pZiB0ZXN0IC1uICIkQ1BQIiAm JiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgotICBDUFA9Ci1maQotaWYgdGVzdCAteiAiJENQUCI7IHRo ZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVj YXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIk Q0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgotICAgIGRvCi0gICAgICBhY19wcmVw cm9jX29rPWZhbHNlCi1mb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0g ICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcg Z2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVy IDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQot ICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAg IyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidz IHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVy ZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBp bmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0J CSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7 IHRoZW4gOgotCi1lbHNlCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRp bnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAot Ci0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlz dGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8K LSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAg IiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4K LWNvbnRpbnVlCi1lbHNlCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToK LWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4 dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xl YW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKLSAgYnJlYWsKLWZpCi0K LSAgICBkb25lCi0gICAgYWNfY3ZfcHJvZ19DUFA9JENQUAotCi1maQotICBDUFA9JGFjX2N2X3By b2dfQ1BQCi1lbHNlCi0gIGFjX2N2X3Byb2dfQ1BQPSRDUFAKLWZpCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1Ci0kYXNfZWNobyAiJENQ UCIgPiY2OyB9Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxh ZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdj Yywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIg d29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBp cyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5k aW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJv dWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5 bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNp ZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFz c2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIGFjX2ZuX2Nf dHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gICMgQnJva2VuOiBmYWlscyBvbiB2 YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0Lmkg Y29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hl Y2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBo b3cuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVu ZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1p ZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBCcm9rZW46IHN1Y2Nlc3Mg b24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gICMgUGFzc2VzIGJvdGggdGVzdHMu Ci1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LmkgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BS RVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0 LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVu IDoKLQotZWxzZQotICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog ZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBc YCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBc IiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMi ICIkTElORU5PIiA1IDsgfQotZmkKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1Mn Ci1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+ JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdT ICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRh Y19jdl9jX2NvbXBpbGVyX2dudQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1l IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxp bmVzIGFuZCAtZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIg PSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0 ZXN0IC16ICIkR1JFUCI7IHRoZW4KLSAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCi0gICMgTG9v cCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1M SVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIg aW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCi1kbwotICBJRlM9JGFzX3NhdmVf SUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4g Z3JlcCBnZ3JlcDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVf ZXh0ZW5zaW9uczsgZG8KLSAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19l eGVjX2V4dCIKLSAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAi JGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKLSMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dS RVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05VICRhY19w YXRoX0dSRVAKLWNhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KLSpHTlUq KQotICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06 OzsKLSopCi0gIGFjX2NvdW50PTAKLSAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3Qu aW4iCi0gIHdoaWxlIDoKLSAgZG8KLSAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4i ID4iY29uZnRlc3QudG1wIgotICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKLSAg ICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKLSAgICAkYXNfZWNobyAnR1JFUCcgPj4g ImNvbmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5v dCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8 IGJyZWFrCi0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwg Mj4mMSB8fCBicmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9 JGFzX3ZhbAotICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07 IHRoZW4KLSAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcg Zm9yIGEgYmV0dGVyIG9uZQotICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgot ICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKLSAgICBmaQotICAgICMgMTAqKDJeMTAp IGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRhY19jb3Vu dCAtZ3QgMTAgJiYgYnJlYWsKLSAgZG9uZQotICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50 bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKLWVzYWMKLQotICAgICAgJGFjX3BhdGhfR1JF UF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2 ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KLSAgICBhc19mbl9l cnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhf U0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKLSAgZmkKLWVsc2UKLSAgYWNfY3Zf cGF0aF9HUkVQPSRHUkVQCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQotJGFzX2VjaG8gIiRhY19j dl9wYXRoX0dSRVAiID4mNjsgfQotIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCi0KLQoteyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4m NQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIk e2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNgotZWxzZQotICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251 bGwgMj4mMQotICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKLSAgIGVsc2UKLSAg ICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgotICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNl Ci0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQ Uk9HTkFNRS1MSVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZv ciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCi1kbwotICBJRlM9 JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFj X3Byb2cgaW4gZWdyZXA7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRh YmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9n JGFjX2V4ZWNfZXh0IgotICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rl c3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNf cGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBH TlUgJGFjX3BhdGhfRUdSRVAKLWNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFg IGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhf RUdSRVBfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4 OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIg ImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29u ZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2Vj aG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAk JyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0g ICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBi cmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAot ICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCi0g ICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJl dHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgotICAgICAg YWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFy cyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0 IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNv bmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0VHUkVQX2Zv dW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lG UwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJv ciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NF UEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3Bh dGhfRUdSRVA9JEVHUkVQCi1maQotCi0gICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1Ci0kYXNfZWNo byAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQotIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIK LQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJ IEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRj K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UK LSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNv bmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgot I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLWludAotbWFpbiAoKQot ewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCi1lbHNlCi0gIGFjX2N2 X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0g eWVzOyB0aGVuCi0gICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwg Y29udHJhcnkgdG8gQU5TSS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1f QUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVH UkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVh ZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3Zf aGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3Qg ZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8 c3RkbGliLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIp IDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0KLWVsc2UK LSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYg dGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyAvYmluL2NjIGluIElyaXgt NC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBp ZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIDoKLWVsc2UKLSAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZz LmguICAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaWYgKCgn ICcgJiAweDBGRikgPT0gMHgwMjApCi0jIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYm IChjKSA8PSAneicpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChj KSAtICdhJykgOiAoYykpCi0jZWxzZQotIyBkZWZpbmUgSVNMT1dFUihjKSBcCi0JCSAgICgoJ2En IDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCi0JCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9 ICdyJykgXAotCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQotIyBkZWZpbmUg VE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKLSNlbmRpZgotCi0j ZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQotaW50Ci1t YWluICgpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgaWYg KFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQotCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQ RVIgKGkpKQotICAgICAgcmV0dXJuIDI7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19m bl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBhY19jdl9oZWFkZXJfc3Rk Yz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLWZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci0kYXNf ZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9z dGRjID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNv bmZkZWZzLmgKLQotZmkKLQotIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5o IGFyZSBjb25mbGljdGluZy4KLWZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQu aCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAotCQkgIGludHR5cGVzLmgg c3RkaW50LmggdW5pc3RkLmgKLWRvIDoKLSAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3Zf aGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19oZWFkZXJfY29t cGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVz X2RlZmF1bHQKLSIKLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMi OyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgJGFzX2VjaG8g IkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQot Ci0KLQotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWluaXgvY29u ZmlnLmgiICJhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVs dCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA9IHgiInllczsgdGhl biA6Ci0gIE1JTklYPXllcwotZWxzZQotICBNSU5JWD0KLWZpCi0KLQotICBpZiB0ZXN0ICIkTUlO SVgiID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9TT1VSQ0UgMSIgPj5j b25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYXzFfU09VUkNFIDIiID4+Y29u ZmRlZnMuaAotCi0KLSRhc19lY2hvICIjZGVmaW5lIF9NSU5JWCAxIiA+PmNvbmZkZWZzLmgKLQot ICBmaQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fIiA+JjUKLSRh c19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJ T05TX18uLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRl bnNpb25zX18rc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m NgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0v KiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQotCSAg JGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7 Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAg YWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzCi1lbHNlCi0gIGFjX2N2X3Nh ZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zYWZlX3RvX2RlZmlu ZV9fX2V4dGVuc2lvbnNfXyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19f ZXh0ZW5zaW9uc19fIiA+JjY7IH0KLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRl bnNpb25zX18gPSB5ZXMgJiYKLSAgICAkYXNfZWNobyAiI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAx IiA+PmNvbmZkZWZzLmgKLQotICAkYXNfZWNobyAiI2RlZmluZSBfQUxMX1NPVVJDRSAxIiA+PmNv bmZkZWZzLmgKLQotICAkYXNfZWNobyAiI2RlZmluZSBfR05VX1NPVVJDRSAxIiA+PmNvbmZkZWZz LmgKLQotICAkYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMSIgPj5j b25mZGVmcy5oCi0KLSAgJGFzX2VjaG8gIiNkZWZpbmUgX1RBTkRFTV9TT1VSQ0UgMSIgPj5jb25m ZGVmcy5oCi0KLQotIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgotJFNIRUxMICIk YWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAotICBhc19mbl9l cnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5F Tk8iIDUKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0 ZW0gdHlwZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsg dGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2J1aWxkX2Fs aWFzPSRidWlsZF9hbGlhcwotdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCi0gIGFjX2J1 aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCi10ZXN0ICJ4JGFj X2J1aWxkX2FsaWFzIiA9IHggJiYKLSAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWls ZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKLWFjX2N2X2J1aWxkPWAk U0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKLSAgYXNf Zm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlh cyBmYWlsZWQiICIkTElORU5PIiA1Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKLSRhc19lY2hvICIkYWNfY3Zf YnVpbGQiID4mNjsgfQotY2FzZSAkYWNfY3ZfYnVpbGQgaW4KLSotKi0qKSA7OwotKikgYXNfZm5f ZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNSA7 OwotZXNhYwotYnVpbGQ9JGFjX2N2X2J1aWxkCi1hY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCi1z ZXQgeCAkYWNfY3ZfYnVpbGQKLXNoaWZ0Ci1idWlsZF9jcHU9JDEKLWJ1aWxkX3ZlbmRvcj0kMgot c2hpZnQ7IHNoaWZ0Ci0jIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1 c2VkIHRvIGNyZWF0ZSAkKiwKLSMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKLWJ1aWxkX29zPSQq Ci1JRlM9JGFjX3NhdmVfSUZTCi1jYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNo byAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwotCi0KLXsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1 Ci0kYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9Ci1pZiB0 ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgotICBh Y19jdl9ob3N0PSRhY19jdl9idWlsZAotZWxzZQotICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19h dXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAotICAgIGFzX2ZuX2Vycm9yICQ/ICIk U0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5P IiA1Ci1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9Ci1j YXNlICRhY19jdl9ob3N0IGluCi0qLSotKikgOzsKLSopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlk IHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNSA7OwotZXNhYwotaG9zdD0kYWNf Y3ZfaG9zdAotYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwotc2V0IHggJGFjX2N2X2hvc3QKLXNo aWZ0Ci1ob3N0X2NwdT0kMQotaG9zdF92ZW5kb3I9JDIKLXNoaWZ0OyBzaGlmdAotIyBSZW1lbWJl ciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCi0jIGV4 Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Ci1ob3N0X29zPSQqCi1JRlM9JGFjX3NhdmVfSUZTCi1jYXNl ICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0v ZydgOzsgZXNhYwotCi0KLQotIyBNNCBNYWNybyBpbmNsdWRlcwotCi0KLQotCi0KLQotCi0KLQot Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0K LQotCi0KLQotCi0KLQotCi0KLSMgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlz ZSBwa2ctY29uZmlnLiAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLSMgc2VyaWFsIDEgKHBr Zy1jb25maWctMC4yNCkKLSMKLSMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFu dCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK LSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwg NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K LSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3Jh bSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1 dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9u IHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0jIFBL R19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotIyBQS0dfUFJPR19QS0dfQ09ORklHCi0KLSMgUEtHX0NIRUNLX0VYSVNU UyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQotIwot IyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3Rz LiAgU2ltaWxhcgotIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZh cmlhYmxlcyBvciBwcmludCBlcnJvcnMuCi0jCi0jIFBsZWFzZSByZW1lbWJlciB0aGF0IG00IGV4 cGFuZHMgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCi0jIG9ubHkgYXQgdGhlIGZp cnN0IG9jY3VyZW5jZSBpbiBjb25maWd1cmUuYWMsIHNvIGlmIHRoZSBmaXJzdCBwbGFjZQotIyBp dCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBhbiAi aWYiLCB5b3UKLSMgaGF2ZSB0byBjYWxsIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKLSMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLQotCi0jIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQot IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgX1BLR19D T05GSUcKLQotIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKLSMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECi0KLQotIyBQS0df Q0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRd LAotIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCi0jCi0jCi0jIE5vdGUgdGhhdCBpZiB0aGVyZSBp cyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCi0jIFBLR19DSEVDS19NT0RVTEVTIG1p Z2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCi0jIGV4cGxp Y2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYwotIwot IwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIyBQS0dfQ0hFQ0tfTU9EVUxFUwotCi0KLQotIyBXZSBkZWZpbmUsIHNlcGFy YXRlbHksIFBUSFJFQURfQ0ZMQUdTLCBfTERGTEFHUyBhbmQgX0xJQlMKLSMgZXZlbiB0aG91Z2gg Y3VycmVudGx5IHdlIGRvbid0IHNldCB0aGVtIHZlcnkgc2VwYXJhdGVseS4KLSMgVGhpcyBtZWFu cyB0aGF0IHRoZSBtYWtlZmlsZXMgd2lsbCBub3QgbmVlZCB0byBjaGFuZ2UgaW4KLSMgdGhlIGZ1 dHVyZSBpZiB3ZSBtYWtlIHRoZSB0ZXN0IG1vcmUgc29waGlzdGljYXRlZC4KLQotCi0KLSMgV2Ug aW52b2tlIEFYX1BUSFJFQURfVkFSUyB3aXRoIHRoZSBuYW1lIG9mIGFub3RoZXIgbWFjcm8KLSMg d2hpY2ggaXMgdGhlbiBleHBhbmRlZCBvbmNlIGZvciBlYWNoIHZhcmlhYmxlLgotCi0KLQotCi0K LQotCi0KLSMgRW5hYmxlL2Rpc2FibGUgb3B0aW9ucwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFi bGUtZ2l0aHR0cCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9naXRodHRwK3NldH0iID0g c2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ2l0aHR0cDsKLWZpCi0KLQotaWYgdGVz dCAieCRlbmFibGVfZ2l0aHR0cCIgPSAieG5vIjsgdGhlbiA6Ci0KLSAgICBheF9jdl9naXRodHRw PSJuIgotCi1lbGlmIHRlc3QgIngkZW5hYmxlX2dpdGh0dHAiID0gInh5ZXMiOyB0aGVuIDoKLQot ICAgIGF4X2N2X2dpdGh0dHA9InkiCi0KLWVsaWYgdGVzdCAteiAkYXhfY3ZfZ2l0aHR0cDsgdGhl biA6Ci0KLSAgICBheF9jdl9naXRodHRwPSJuIgotCi1maQotZ2l0aHR0cD0kYXhfY3ZfZ2l0aHR0 cAotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1vbml0b3JzIHdhcyBnaXZlbi4KLWlm IHRlc3QgIiR7ZW5hYmxlX21vbml0b3JzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFs PSRlbmFibGVfbW9uaXRvcnM7Ci1maQotCi0KLWlmIHRlc3QgIngkZW5hYmxlX21vbml0b3JzIiA9 ICJ4bm8iOyB0aGVuIDoKLQotICAgIGF4X2N2X21vbml0b3JzPSJuIgotCi1lbGlmIHRlc3QgIngk ZW5hYmxlX21vbml0b3JzIiA9ICJ4eWVzIjsgdGhlbiA6Ci0KLSAgICBheF9jdl9tb25pdG9ycz0i eSIKLQotZWxpZiB0ZXN0IC16ICRheF9jdl9tb25pdG9yczsgdGhlbiA6Ci0KLSAgICBheF9jdl9t b25pdG9ycz0ieSIKLQotZmkKLW1vbml0b3JzPSRheF9jdl9tb25pdG9ycwotCi0KLQotIyBDaGVj ayB3aGV0aGVyIC0tZW5hYmxlLXZ0cG0gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdnRw bStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3Z0cG07Ci1maQotCi0K LWlmIHRlc3QgIngkZW5hYmxlX3Z0cG0iID0gInhubyI7IHRoZW4gOgotCi0gICAgYXhfY3ZfdnRw bT0ibiIKLQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV92dHBtIiA9ICJ4eWVzIjsgdGhlbiA6Ci0KLSAg ICBheF9jdl92dHBtPSJ5IgotCi1lbGlmIHRlc3QgLXogJGF4X2N2X3Z0cG07IHRoZW4gOgotCi0g ICAgYXhfY3ZfdnRwbT0ibiIKLQotZmkKLXZ0cG09JGF4X2N2X3Z0cG0KLQotCi0KLSMgQ2hlY2sg d2hldGhlciAtLWVuYWJsZS14ZW5hcGkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfeGVu YXBpK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfeGVuYXBpOwotZmkK LQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV94ZW5hcGkiID0gInhubyI7IHRoZW4gOgotCi0gICAgYXhf Y3ZfeGVuYXBpPSJuIgotCi1lbGlmIHRlc3QgIngkZW5hYmxlX3hlbmFwaSIgPSAieHllcyI7IHRo ZW4gOgotCi0gICAgYXhfY3ZfeGVuYXBpPSJ5IgotCi1lbGlmIHRlc3QgLXogJGF4X2N2X3hlbmFw aTsgdGhlbiA6Ci0KLSAgICBheF9jdl94ZW5hcGk9Im4iCi0KLWZpCi14ZW5hcGk9JGF4X2N2X3hl bmFwaQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB5dGhvbnRvb2xzIHdhcyBnaXZl bi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3B5dGhvbnRvb2xzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAg ZW5hYmxldmFsPSRlbmFibGVfcHl0aG9udG9vbHM7Ci1maQotCi0KLWlmIHRlc3QgIngkZW5hYmxl X3B5dGhvbnRvb2xzIiA9ICJ4bm8iOyB0aGVuIDoKLQotICAgIGF4X2N2X3B5dGhvbnRvb2xzPSJu IgotCi1lbGlmIHRlc3QgIngkZW5hYmxlX3B5dGhvbnRvb2xzIiA9ICJ4eWVzIjsgdGhlbiA6Ci0K LSAgICBheF9jdl9weXRob250b29scz0ieSIKLQotZWxpZiB0ZXN0IC16ICRheF9jdl9weXRob250 b29sczsgdGhlbiA6Ci0KLSAgICBheF9jdl9weXRob250b29scz0ieSIKLQotZmkKLXB5dGhvbnRv b2xzPSRheF9jdl9weXRob250b29scwotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9j YW1sdG9vbHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfb2NhbWx0b29scytzZXR9IiA9 IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX29jYW1sdG9vbHM7Ci1maQotCi0KLWlm IHRlc3QgIngkZW5hYmxlX29jYW1sdG9vbHMiID0gInhubyI7IHRoZW4gOgotCi0gICAgYXhfY3Zf b2NhbWx0b29scz0ibiIKLQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV9vY2FtbHRvb2xzIiA9ICJ4eWVz IjsgdGhlbiA6Ci0KLSAgICBheF9jdl9vY2FtbHRvb2xzPSJ5IgotCi1lbGlmIHRlc3QgLXogJGF4 X2N2X29jYW1sdG9vbHM7IHRoZW4gOgotCi0gICAgYXhfY3Zfb2NhbWx0b29scz0ieSIKLQotZmkK LW9jYW1sdG9vbHM9JGF4X2N2X29jYW1sdG9vbHMKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVu YWJsZS1taW5pdGVybSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taW5pdGVybStzZXR9 IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX21pbml0ZXJtOwotZmkKLQotCi1p ZiB0ZXN0ICJ4JGVuYWJsZV9taW5pdGVybSIgPSAieG5vIjsgdGhlbiA6Ci0KLSAgICBheF9jdl9t aW5pdGVybT0ibiIKLQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV9taW5pdGVybSIgPSAieHllcyI7IHRo ZW4gOgotCi0gICAgYXhfY3ZfbWluaXRlcm09InkiCi0KLWVsaWYgdGVzdCAteiAkYXhfY3ZfbWlu aXRlcm07IHRoZW4gOgotCi0gICAgYXhfY3ZfbWluaXRlcm09Im4iCi0KLWZpCi1taW5pdGVybT0k YXhfY3ZfbWluaXRlcm0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sb21vdW50IHdh cyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xvbW91bnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgot ICBlbmFibGV2YWw9JGVuYWJsZV9sb21vdW50OwotZmkKLQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9s b21vdW50IiA9ICJ4bm8iOyB0aGVuIDoKLQotICAgIGF4X2N2X2xvbW91bnQ9Im4iCi0KLWVsaWYg dGVzdCAieCRlbmFibGVfbG9tb3VudCIgPSAieHllcyI7IHRoZW4gOgotCi0gICAgYXhfY3ZfbG9t b3VudD0ieSIKLQotZWxpZiB0ZXN0IC16ICRheF9jdl9sb21vdW50OyB0aGVuIDoKLQotICAgIGF4 X2N2X2xvbW91bnQ9Im4iCi0KLWZpCi1sb21vdW50PSRheF9jdl9sb21vdW50Ci0KLQotCi0jIENo ZWNrIHdoZXRoZXIgLS1lbmFibGUtb3ZtZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9v dm1mK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfb3ZtZjsKLWZpCi0K LQotaWYgdGVzdCAieCRlbmFibGVfb3ZtZiIgPSAieG5vIjsgdGhlbiA6Ci0KLSAgICBheF9jdl9v dm1mPSJuIgotCi1lbGlmIHRlc3QgIngkZW5hYmxlX292bWYiID0gInh5ZXMiOyB0aGVuIDoKLQot ICAgIGF4X2N2X292bWY9InkiCi0KLWVsaWYgdGVzdCAteiAkYXhfY3Zfb3ZtZjsgdGhlbiA6Ci0K LSAgICBheF9jdl9vdm1mPSJuIgotCi1maQotb3ZtZj0kYXhfY3Zfb3ZtZgorIyBNNCBNYWNybyBp bmNsdWRlcwogCiAKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJvbWJpb3Mgd2FzIGdpdmVu LgotaWYgdGVzdCAiJHtlbmFibGVfcm9tYmlvcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJs ZXZhbD0kZW5hYmxlX3JvbWJpb3M7Ci1maQogCiAKLWlmIHRlc3QgIngkZW5hYmxlX3JvbWJpb3Mi ID0gInhubyI7IHRoZW4gOgogCi0gICAgYXhfY3Zfcm9tYmlvcz0ibiIKIAotZWxpZiB0ZXN0ICJ4 JGVuYWJsZV9yb21iaW9zIiA9ICJ4eWVzIjsgdGhlbiA6CiAKLSAgICBheF9jdl9yb21iaW9zPSJ5 IgogCi1lbGlmIHRlc3QgLXogJGF4X2N2X3JvbWJpb3M7IHRoZW4gOgogCi0gICAgYXhfY3Zfcm9t Ymlvcz0ieSIKIAotZmkKLXJvbWJpb3M9JGF4X2N2X3JvbWJpb3MKIAogCiAKLSMgQ2hlY2sgd2hl dGhlciAtLWVuYWJsZS1zZWFiaW9zIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NlYWJp b3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zZWFiaW9zOwotZmkK IAogCi1pZiB0ZXN0ICJ4JGVuYWJsZV9zZWFiaW9zIiA9ICJ4bm8iOyB0aGVuIDoKIAotICAgIGF4 X2N2X3NlYWJpb3M9Im4iCiAKLWVsaWYgdGVzdCAieCRlbmFibGVfc2VhYmlvcyIgPSAieHllcyI7 IHRoZW4gOgogCi0gICAgYXhfY3Zfc2VhYmlvcz0ieSIKIAotZWxpZiB0ZXN0IC16ICRheF9jdl9z ZWFiaW9zOyB0aGVuIDoKIAotICAgIGF4X2N2X3NlYWJpb3M9InkiCiAKLWZpCi1zZWFiaW9zPSRh eF9jdl9zZWFiaW9zCiAKIAogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWcgd2FzIGdp dmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFi bGV2YWw9JGVuYWJsZV9kZWJ1ZzsKLWZpCiAKIAotaWYgdGVzdCAieCRlbmFibGVfZGVidWciID0g InhubyI7IHRoZW4gOgogCi0gICAgYXhfY3ZfZGVidWc9Im4iCiAKLWVsaWYgdGVzdCAieCRlbmFi bGVfZGVidWciID0gInh5ZXMiOyB0aGVuIDoKIAotICAgIGF4X2N2X2RlYnVnPSJ5IgogCi1lbGlm IHRlc3QgLXogJGF4X2N2X2RlYnVnOyB0aGVuIDoKIAotICAgIGF4X2N2X2RlYnVnPSJ5IgogCi1m aQotZGVidWc9JGF4X2N2X2RlYnVnCiAKIAogCkBAIC00MjQwLDkzMCArMjIyMiw0MzIgQEAgZGVi dWc9JGF4X2N2X2RlYnVnCiAKIAogCi1mb3IgY2ZsYWcgaW4gJFBSRVBFTkRfSU5DTFVERVMKLWRv Ci0gICAgUFJFUEVORF9DRkxBR1MrPSIgLUkkY2ZsYWciCi1kb25lCi1mb3IgbGRmbGFnIGluICRQ UkVQRU5EX0xJQgotZG8KLSAgICBQUkVQRU5EX0xERkxBR1MrPSIgLUwkbGRmbGFnIgotZG9uZQot Zm9yIGNmbGFnIGluICRBUFBFTkRfSU5DTFVERVMKLWRvCi0gICAgQVBQRU5EX0NGTEFHUys9IiAt SSRjZmxhZyIKLWRvbmUKLWZvciBsZGZsYWcgaW4gJEFQUEVORF9MSUIKLWRvCi0gICAgQVBQRU5E X0xERkxBR1MrPSIgLUwkbGRmbGFnIgotZG9uZQotQ0ZMQUdTPSIkUFJFUEVORF9DRkxBR1MgJENG TEFHUyAkQVBQRU5EX0NGTEFHUyIKLUxERkxBR1M9IiRQUkVQRU5EX0xERkxBR1MgJExERkxBR1Mg JEFQUEVORF9MREZMQUdTIgogCiAKIAogCiAKIAorIyBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRl IGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBz ZXJpYWwgMSAocGtnLWNvbmZpZy0wLjI0KQorIworIyBDb3B5cmlnaHQgwqkgMjAwNCBTY290dCBK YW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0 aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEt MTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQg b2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5l cmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBk aXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dy YW0uCiAKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBLR19QUk9HX1BLR19DT05GSUcKIAorIyBQS0df Q0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1G T1VORF0pCisjCisjIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9k dWxlcyBleGlzdHMuICBTaW1pbGFyCisjIHRvIFBLR19DSEVDS19NT0RVTEVTKCksIGJ1dCBkb2Vz IG5vdCBzZXQgdmFyaWFibGVzIG9yIHByaW50IGVycm9ycy4KKyMKKyMgUGxlYXNlIHJlbWVtYmVy IHRoYXQgbTQgZXhwYW5kcyBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyMgb25s eSBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIGluIGNvbmZpZ3VyZS5hYywgc28gaWYgdGhlIGZpcnN0 IHBsYWNlCisjIGl0J3MgY2FsbGVkIG1pZ2h0IGJlIHNraXBwZWQgKHN1Y2ggYXMgaWYgaXQgaXMg d2l0aGluIGFuICJpZiIsIHlvdQorIyBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51 YWxseQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogCiAKKyMgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBb TU9EVUxFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIyBfUEtHX0NPTkZJRwogCisjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQK IAogCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElP Ti1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0 IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNL X01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUg YW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmln dXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBLR19DSEVDS19NT0RVTEVTCiAKLSMgQ2hlY2tzIGZv ciBwcm9ncmFtcy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKLSRhc19l Y2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4u LiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbiA6 Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICAgICAgICAgICBhY19zY3Jp cHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmIvCi0gICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCi0g ICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKLSAgICAgZG9uZQot ICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNl ZAotICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9Ci0gICAgIGlmIHRlc3QgLXog IiRTRUQiOyB0aGVuCi0gIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCi0gICMgTG9vcCB0aHJvdWdo IHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi0gIGFz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgK LWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4K LSAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4g JycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGFjX3BhdGhfU0VEPSIkYXNf ZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQi ICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKLSMgQ2hlY2sgZm9y IEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNr IGZvciBHTlUgJGFjX3BhdGhfU0VECi1jYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4m MWAgaW4KLSpHTlUqKQotICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NF RF9mb3VuZD06OzsKLSopCi0gIGFjX2NvdW50PTAKLSAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4i Y29uZnRlc3QuaW4iCi0gIHdoaWxlIDoKLSAgZG8KLSAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29u ZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgotICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVz dC5pbiIKLSAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKLSAgICAkYXNfZWNobyAn JyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwg ImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICBk aWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFr Ci0gICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCi0gICAg aWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCi0gICAgICAj IEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBv bmUKLSAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCi0gICAgICBhY19wYXRoX1NF RF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBz ZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFr Ci0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNv bmZ0ZXN0Lm91dDs7Ci1lc2FjCiAKLSAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAz Ci0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAt eiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRh YmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Ci0gIGZpCi1lbHNl Ci0gIGFjX2N2X3BhdGhfU0VEPSRTRUQKLWZpCiAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKLSRhc19lY2hv ICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQotIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgotICBybSAt ZiBjb25mdGVzdC5zZWQKKyMgV2UgZGVmaW5lLCBzZXBhcmF0ZWx5LCBQVEhSRUFEX0NGTEFHUywg X0xERkxBR1MgYW5kIF9MSUJTCisjIGV2ZW4gdGhvdWdoIGN1cnJlbnRseSB3ZSBkb24ndCBzZXQg dGhlbSB2ZXJ5IHNlcGFyYXRlbHkuCisjIFRoaXMgbWVhbnMgdGhhdCB0aGUgbWFrZWZpbGVzIHdp bGwgbm90IG5lZWQgdG8gY2hhbmdlIGluCisjIHRoZSBmdXR1cmUgaWYgd2UgbWFrZSB0aGUgdGVz dCBtb3JlIHNvcGhpc3RpY2F0ZWQuCiAKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdT JwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQg PiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFH UyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0k YWNfY3ZfY19jb21waWxlcl9nbnUKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4K LSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29s X3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5n IGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0i ID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYg dGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAk YWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2Mi Ci0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBk b25lCi1JRlM9JGFzX3NhdmVfSUZTCiAKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRl c3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRh c19lY2hvICJubyIgPiY2OyB9Ci1maQogCisjIFdlIGludm9rZSBBWF9QVEhSRUFEX1ZBUlMgd2l0 aCB0aGUgbmFtZSBvZiBhbm90aGVyIG1hY3JvCisjIHdoaWNoIGlzIHRoZW4gZXhwYW5kZWQgb25j ZSBmb3IgZWFjaCB2YXJpYWJsZS4KIAotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsg dGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2Mi LCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsg YWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3Jk Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7 IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1u ICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBM ZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJ RlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3Nh dmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNf ZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2Mi Ci0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBk b25lCi1JRlM9JGFzX3NhdmVfSUZTCiAKLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNf Y3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAi JGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQogCi0g IGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBj YXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29s cyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTog V0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0 IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0g IGZpCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCiAKLWlmIHRlc3QgLXogIiRDQyI7 IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAg IyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQg Y2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJl Zml4fWNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Ig JGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNl dDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3Qg LW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVy cmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFU T1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAt eiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4 ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1J RlM9JGFzX3NhdmVfSUZTCiAKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4g IiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hv ICJubyIgPiY2OyB9Ci1maQogCiAKLSAgZmkKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0g ICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFt IG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0k YXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7 YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0i JENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19y ZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFz X2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGly IiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9l eHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVu Ci0gICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2Iv Y2MiOyB0aGVuCi0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKLSAgICAgICBjb250aW51ZQot ICAgICBmaQotICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4m NQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwogCi1p ZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dv biBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15 ICRhY19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMg V2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMg SG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBj aG9zZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNl IHRoZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19k aXIvJGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2df Q0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVs c2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5v IiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9CisjIEVuYWJsZS9kaXNhYmxlIG9wdGlvbnMKKwor IyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdpdGh0dHAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtl bmFibGVfZ2l0aHR0cCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2dp dGh0dHA7CiBmaQogCiAKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4g IiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCi0gIGRvCi0g ICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIs IHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rv b2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0ND K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UK LSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRo ZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQ QVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lG UwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBp biAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4 JGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91 bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQot ZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCitpZiB0ZXN0ICJ4JGVuYWJsZV9naXRodHRw IiA9ICJ4bm8iOyB0aGVuIDoKIAotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAt biAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2Vj aG8gIm5vIiA+JjY7IH0KLWZpCisgICAgYXhfY3ZfZ2l0aHR0cD0ibiIKIAorZWxpZiB0ZXN0ICJ4 JGVuYWJsZV9naXRodHRwIiA9ICJ4eWVzIjsgdGhlbiA6CiAKLSAgICB0ZXN0IC1uICIkQ0MiICYm IGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRD QwotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29y ZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgot c2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJj aGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19h Y19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19j dF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UK LWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBB VEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGly PS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsg ZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNf dGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2 X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAg IGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUworICAgIGF4X2N2 X2dpdGh0dHA9InkiCisKK2VsaWYgdGVzdCAteiAkYXhfY3ZfZ2l0aHR0cDsgdGhlbiA6CisKKyAg ICBheF9jdl9naXRodHRwPSJuIgogCiBmaQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0 X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRh Y19jdF9DQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKK2dpdGh0 dHA9JGF4X2N2X2dpdGh0dHAKIAogCi0gIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKLWRv bmUKIAotICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KLSAgICBDQz0iIgotICBlbHNl Ci0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jv c3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIk YXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3Qg dHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIENDPSRhY19j dF9DQwotICBmaQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1vbml0b3JzIHdhcyBnaXZlbi4K K2lmIHRlc3QgIiR7ZW5hYmxlX21vbml0b3JzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxl dmFsPSRlbmFibGVfbW9uaXRvcnM7CiBmaQogCi1maQogCitpZiB0ZXN0ICJ4JGVuYWJsZV9tb25p dG9ycyIgPSAieG5vIjsgdGhlbiA6CiAKLXRlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0k YXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJv ciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29u ZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisgICAgYXhfY3ZfbW9u aXRvcnM9Im4iCiAKLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxl ci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBD IGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQy Ci1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBh Y190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4K LSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3Ry eV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8i OyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVz dC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0g ICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAg ICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVy MSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAg dGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQorZWxpZiB0ZXN0ICJ4JGVuYWJsZV9tb25pdG9y cyIgPSAieHllcyI7IHRoZW4gOgogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIg PiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMg Y29tcGlsZXIuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0 fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRl ZnMuaC4gICovCisgICAgYXhfY3ZfbW9uaXRvcnM9InkiCiAKLWludAotbWFpbiAoKQotewotI2lm bmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKK2VsaWYgdGVzdCAteiAkYXhf Y3ZfbW9uaXRvcnM7IHRoZW4gOgogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFj X2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY29tcGlsZXJfZ251PXll cwotZWxzZQotICBhY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2NfY29tcGlsZXJf Z251PSRhY19jb21waWxlcl9nbnUKKyAgICBheF9jdl9tb25pdG9ycz0ieSIKIAogZmkKLXsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21w aWxlcl9nbnUiID4mNQotJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1p ZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KLSAgR0NDPXllcwotZWxzZQotICBH Q0M9Ci1maQotYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQotYWNfc2F2ZV9DRkxBR1M9JENG TEFHUwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg JENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3Nl dH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAg YWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCi0gICBhY19jX3dlcnJvcl9m bGFnPXllcwotICAgYWNfY3ZfcHJvZ19jY19nPW5vCi0gICBDRkxBR1M9Ii1nIgotICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmgu ICAqLworbW9uaXRvcnM9JGF4X2N2X21vbml0b3JzCiAKLWludAotbWFpbiAoKQotewogCi0gIDsK LSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8i OyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19nPXllcwotZWxzZQotICBDRkxBR1M9IiIKLSAgICAg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25m ZGVmcy5oLiAgKi8KIAotaW50Ci1tYWluICgpCi17CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUt dnRwbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV92dHBtK3NldH0iID0gc2V0OyB0aGVu IDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdnRwbTsKK2ZpCiAKLSAgOwotICByZXR1cm4gMDsKLX0K LV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCi1lbHNl Ci0gIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwotCSBDRkxBR1M9Ii1n IgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQg Y29uZmRlZnMuaC4gICovCitpZiB0ZXN0ICJ4JGVuYWJsZV92dHBtIiA9ICJ4bm8iOyB0aGVuIDoK IAotaW50Ci1tYWluICgpCi17CisgICAgYXhfY3ZfdnRwbT0ibiIKKworZWxpZiB0ZXN0ICJ4JGVu YWJsZV92dHBtIiA9ICJ4eWVzIjsgdGhlbiA6CisKKyAgICBheF9jdl92dHBtPSJ5IgorCitlbGlm IHRlc3QgLXogJGF4X2N2X3Z0cG07IHRoZW4gOgorCisgICAgYXhfY3ZfdnRwbT0ibiIKIAotICA7 Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1y bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19l eHQKLSAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwotZmkKLXsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19j Y19nIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KLWlmIHRlc3QgIiRh Y190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwotZWxp ZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5 ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0iLWciCi0g IGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItTzIi Ci0gIGVsc2UKLSAgICBDRkxBR1M9Ci0gIGZpCiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4 OSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNP IEM4OS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNl dDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3By b2dfY2NfYzg5PW5vCi1hY19zYXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFy Zy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVk ZSA8c3lzL3N0YXQuaD4KLS8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVu IGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KLXN0cnVjdCBidWYgeyBpbnQgeDsgfTsK LUZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Ci1z dGF0aWMgY2hhciAqZSAocCwgaSkKLSAgICAgY2hhciAqKnA7Ci0gICAgIGludCBpOwotewotICBy ZXR1cm4gcFtpXTsKLX0KLXN0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50 KSwgY2hhciAqKnAsIC4uLikKLXsKLSAgY2hhciAqczsKLSAgdmFfbGlzdCB2OwotICB2YV9zdGFy dCAodixwKTsKLSAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKLSAgdmFfZW5kICh2KTsKLSAg cmV0dXJuIHM7Ci19Cit2dHBtPSRheF9jdl92dHBtCiAKLS8qIE9TRiA0LjAgQ29tcGFxIGNjIGlz IHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCi0gICBmdW5jdGlv biBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25z dGFudHMuCi0gICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGlu c3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5k dWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJ IG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3Ig YW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgw MCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAq LwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKIAotLyogSUJNIEMg NiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNy byBwYXJhbWV0ZXJzCi0gICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4g ICovCi0jZGVmaW5lIEZPTyh4KSAneCcKLWludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcg PyAxIDogLTFdOwogCi1pbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKLXN0cnVjdCBzMSB7aW50 ICgqZikgKGludCBhKTt9Owotc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Ci1pbnQg cGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBz dGF0ICosIGludCksIGludCwgaW50KTsKLWludCBhcmdjOwotY2hhciAqKmFyZ3Y7Ci1pbnQKLW1h aW4gKCkKLXsKLXJldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJn diwgMSkgIT0gYXJndlsxXTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2Fy ZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAotCS1BZSAiLUFh IC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3Nh dmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4g OgotICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUt eGVuYXBpIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3hlbmFwaStzZXR9IiA9IHNldDsg dGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3hlbmFwaTsKIGZpCi1ybSAtZiBjb3JlIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Ci0gIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODki ICE9ICJ4bm8iICYmIGJyZWFrCi1kb25lCi1ybSAtZiBjb25mdGVzdC4kYWNfZXh0Ci1DQz0kYWNf c2F2ZV9DQworCisKK2lmIHRlc3QgIngkZW5hYmxlX3hlbmFwaSIgPSAieG5vIjsgdGhlbiA6CisK KyAgICBheF9jdl94ZW5hcGk9Im4iCisKK2VsaWYgdGVzdCAieCRlbmFibGVfeGVuYXBpIiA9ICJ4 eWVzIjsgdGhlbiA6CisKKyAgICBheF9jdl94ZW5hcGk9InkiCisKK2VsaWYgdGVzdCAteiAkYXhf Y3ZfeGVuYXBpOyB0aGVuIDoKKworICAgIGF4X2N2X3hlbmFwaT0ibiIKIAogZmkKLSMgQUNfQ0FD SEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgotICB4KQotICAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1 Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUK LSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNf Y3ZfcHJvZ19jY19jODkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3By b2dfY2NfYzg5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODki ICE9IHhubzsgdGhlbiA6Cit4ZW5hcGk9JGF4X2N2X3hlbmFwaQorCiAKKworIyBDaGVjayB3aGV0 aGVyIC0tZW5hYmxlLXB5dGhvbnRvb2xzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B5 dGhvbnRvb2xzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcHl0aG9u dG9vbHM7CiBmaQogCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBp bGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xp bms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1Mg Y29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29t cGlsZXJfZ251CiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9Ci1MTl9TPSRhc19sbl9zCi1pZiB0ZXN0ICIkTE5f UyIgPSAibG4gLXMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlCi0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcg JExOX1MiID4mNQotJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitpZiB0ZXN0ICJ4 JGVuYWJsZV9weXRob250b29scyIgPSAieG5vIjsgdGhlbiA6CisKKyAgICBheF9jdl9weXRob250 b29scz0ibiIKKworZWxpZiB0ZXN0ICJ4JGVuYWJsZV9weXRob250b29scyIgPSAieHllcyI7IHRo ZW4gOgorCisgICAgYXhfY3ZfcHl0aG9udG9vbHM9InkiCisKK2VsaWYgdGVzdCAteiAkYXhfY3Zf cHl0aG9udG9vbHM7IHRoZW4gOgorCisgICAgYXhfY3ZfcHl0aG9udG9vbHM9InkiCisKIGZpCitw eXRob250b29scz0kYXhfY3ZfcHl0aG9udG9vbHMKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1B S0UpIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMg XCQoTUFLRSkuLi4gIiA+JjY7IH0KLXNldCB4ICR7TUFLRS1tYWtlfQotYWNfbWFrZT1gJGFzX2Vj aG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi1pZiBldmFsICJ0 ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiIgPSBzZXQ7IHRo ZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0 Lm1ha2UgPDxcX0FDRU9GCi1TSEVMTCA9IC9iaW4vc2gKLWFsbDoKLQlAZWNobyAnQEBAJSUlPSQo TUFLRSk9QEBAJSUlJwotX0FDRU9GCi0jIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2Vb MV06IEVudGVyaW5nIC4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCi1jYXNlIGAke01BS0Ut bWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KLSAgKkBAQCUlJT0/Kj1AQEAl JSUqKQotICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7Ci0gICop Ci0gICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OwotZXNhYwotcm0g LWYgY29uZnRlc3QubWFrZQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vY2FtbHRvb2xz IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX29jYW1sdG9vbHMrc2V0fSIgPSBzZXQ7IHRo ZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vY2FtbHRvb2xzOwogZmkKLWlmIGV2YWwgdGVzdCBc JGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hv ICJ5ZXMiID4mNjsgfQotICBTRVRfTUFLRT0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9 Ci0gIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKKworCitpZiB0ZXN0ICJ4JGVuYWJsZV9v Y2FtbHRvb2xzIiA9ICJ4bm8iOyB0aGVuIDoKKworICAgIGF4X2N2X29jYW1sdG9vbHM9Im4iCisK K2VsaWYgdGVzdCAieCRlbmFibGVfb2NhbWx0b29scyIgPSAieHllcyI7IHRoZW4gOgorCisgICAg YXhfY3Zfb2NhbWx0b29scz0ieSIKKworZWxpZiB0ZXN0IC16ICRheF9jdl9vY2FtbHRvb2xzOyB0 aGVuIDoKKworICAgIGF4X2N2X29jYW1sdG9vbHM9InkiCisKIGZpCitvY2FtbHRvb2xzPSRheF9j dl9vY2FtbHRvb2xzCiAKLSMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVy IGEgQyBwcm9ncmFtIChmYXN0ZXIpLAotIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5v dGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCi0jIGluY29tcGF0aWJsZSB2ZXJzaW9uczoK LSMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCi0jIFN1bk9TIC91c3IvZXRj L2luc3RhbGwKLSMgSVJJWCAvc2Jpbi9pbnN0YWxsCi0jIEFJWCAvYmluL2luc3RhbGwKLSMgQW1p Z2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNj cwotIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91 dCBhIC1nIGZsYWcKLSMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRs ZXMgbm9uZXhpc3RlbnQgYXJncwotIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVz IHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgotIyBPUy8yJ3Mgc3lzdGVtIGlu c3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCi0jIC4vaW5z dGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5z dGFsbC5zaC4KLSMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBt dWx0aXBsZSBmaWxlcy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci0kYXNfZWNob19uICJj aGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0 IC16ICIkSU5TVEFMTCI7IHRoZW4KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0i ID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXNf c2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAot ZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9Lgot ICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRI IGVsZW1lbnRzLgotY2FzZSAkYXNfZGlyLyBpbiAjKCgKLSAgLi8gfCAuLy8gfCAvW2NDXS8qIHwg XAotICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9h ZnN3cy9iaW4vKiB8IFwKLSAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11P UzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCi0gIC91c3IvdWNiLyogKSA7OwotICAqKQotICAgICMg T1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCi0g ICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVm ZiBhcyByb290Ci0gICAgIyBieSBkZWZhdWx0LgotICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxs IHNjb2luc3QgaW5zdGFsbDsgZG8KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhl Y3V0YWJsZV9leHRlbnNpb25zOyBkbwotCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRh Y19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7 IH07IHRoZW4KLQkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgZHNw bXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4K LQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252 ZW50aW9uLgotCSAgICA6Ci0JICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAg IGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+ JjE7IHRoZW4KLQkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkg SFAgcHdwbHVzLS1kb24ndCB1c2UuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgcm0gLXJmIGNvbmZ0 ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0JICAgIGVjaG8gb25lID4gY29uZnRl c3Qub25lCi0JICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCi0JICAgIG1rZGlyIGNvbmZ0ZXN0 LmRpcgotCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qu b25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgotCSAgICAgIHRlc3QgLXMg Y29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCi0JICAgICAgdGVzdCAtcyBj b25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIv Y29uZnRlc3QudHdvCi0JICAgIHRoZW4KLQkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19k aXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCi0JICAgICAgYnJlYWsgMwotCSAgICBmaQotCSAg ZmkKLQlmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICA7OwotZXNhYwogCi0gIGRvbmUKLUlG Uz0kYXNfc2F2ZV9JRlMKIAotcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRl c3QuZGlyCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWluaXRlcm0gd2FzIGdpdmVuLgoraWYg dGVzdCAiJHtlbmFibGVfbWluaXRlcm0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9 JGVuYWJsZV9taW5pdGVybTsKK2ZpCisKKworaWYgdGVzdCAieCRlbmFibGVfbWluaXRlcm0iID0g InhubyI7IHRoZW4gOgorCisgICAgYXhfY3ZfbWluaXRlcm09Im4iCisKK2VsaWYgdGVzdCAieCRl bmFibGVfbWluaXRlcm0iID0gInh5ZXMiOyB0aGVuIDoKKworICAgIGF4X2N2X21pbml0ZXJtPSJ5 IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X21pbml0ZXJtOyB0aGVuIDoKKworICAgIGF4X2N2X21p bml0ZXJtPSJuIgogCiBmaQotICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9 IHNldDsgdGhlbgotICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAotICBlbHNlCi0gICAg IyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2Fj aGUgYQotICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwg YmVjYXVzZSB0aGF0IHdpbGwKLSAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBj YWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcwotICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVl IGlzIGEgcmVsYXRpdmUgbmFtZS4KLSAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCi0gIGZpCitt aW5pdGVybT0kYXhfY3ZfbWluaXRlcm0KKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1s b21vdW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xvbW91bnQrc2V0fSIgPSBzZXQ7 IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9sb21vdW50OwogZmkKLXsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1Ci0kYXNfZWNo byAiJElOU1RBTEwiID4mNjsgfQogCi0jIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1p c2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCi0jIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xv c2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgotdGVzdCAteiAiJElOU1RB TExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JwogCi10ZXN0IC16ICIk SU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworaWYgdGVzdCAi eCRlbmFibGVfbG9tb3VudCIgPSAieG5vIjsgdGhlbiA6CiAKLXRlc3QgLXogIiRJTlNUQUxMX0RB VEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisgICAgYXhfY3ZfbG9tb3Vu dD0ibiIKIAotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJiaXNvbiIsIHNvIGl0IGNhbiBi ZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYmlzb247IGFjX3dvcmQ9JDIK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0JJU09OK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkQklTT04gaW4KLSAgW1xcL10q IHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfQklTT049IiRCSVNPTiIgIyBMZXQgdGhlIHVzZXIg b3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZT PSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElG Uz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3Ig YWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0 ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNf ZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhfQklTT049 IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1 Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCitlbGlm IHRlc3QgIngkZW5hYmxlX2xvbW91bnQiID0gInh5ZXMiOyB0aGVuIDoKKworICAgIGF4X2N2X2xv bW91bnQ9InkiCisKK2VsaWYgdGVzdCAteiAkYXhfY3ZfbG9tb3VudDsgdGhlbiA6CisKKyAgICBh eF9jdl9sb21vdW50PSJuIgogCi0gIDs7Ci1lc2FjCiBmaQotQklTT049JGFjX2N2X3BhdGhfQklT T04KLWlmIHRlc3QgLW4gIiRCSVNPTiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRCSVNPTiIgPiY1Ci0kYXNfZWNobyAiJEJJU09OIiA+ JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Citsb21vdW50PSRheF9jdl9sb21v dW50CisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3ZtZiB3YXMgZ2l2ZW4uCitpZiB0 ZXN0ICIke2VuYWJsZV9vdm1mK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFi bGVfb3ZtZjsKIGZpCiAKIAotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJmbGV4Iiwgc28g aXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBmbGV4OyBhY193 b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4g IiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GTEVYK3NldH0iID0gc2V0OyB0aGVuIDoK LSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkRkxFWCBpbgotICBb XFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9GTEVYPSIkRkxFWCIgIyBMZXQgdGhlIHVz ZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVf SUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0g IElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBm b3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYg eyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhfRkxF WD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+ JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKK2lm IHRlc3QgIngkZW5hYmxlX292bWYiID0gInhubyI7IHRoZW4gOgorCisgICAgYXhfY3Zfb3ZtZj0i biIKKworZWxpZiB0ZXN0ICJ4JGVuYWJsZV9vdm1mIiA9ICJ4eWVzIjsgdGhlbiA6CisKKyAgICBh eF9jdl9vdm1mPSJ5IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X292bWY7IHRoZW4gOgorCisgICAg YXhfY3Zfb3ZtZj0ibiIKIAotICA7OwotZXNhYwogZmkKLUZMRVg9JGFjX2N2X3BhdGhfRkxFWAot aWYgdGVzdCAtbiAiJEZMRVgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkRkxFWCIgPiY1Ci0kYXNfZWNobyAiJEZMRVgiID4mNjsgfQot ZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog bm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KK292bWY9JGF4X2N2X292bWYKKworCisKKyMg Q2hlY2sgd2hldGhlciAtLWVuYWJsZS1yb21iaW9zIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5h YmxlX3JvbWJpb3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yb21i aW9zOwogZmkKIAogCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBlcmwiLCBzbyBpdCBj YW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBlcmw7IGFjX3dvcmQ9 JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y ICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4m NjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX1BFUkwrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRQRVJMIGluCi0gIFtcXC9d KiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1BFUkw9IiRQRVJMIiAjIExldCB0aGUgdXNlciBv dmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9 JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZT PSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBh Y19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRl c3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QRVJMPSIk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQot ICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUworaWYgdGVz dCAieCRlbmFibGVfcm9tYmlvcyIgPSAieG5vIjsgdGhlbiA6CisKKyAgICBheF9jdl9yb21iaW9z PSJuIgorCitlbGlmIHRlc3QgIngkZW5hYmxlX3JvbWJpb3MiID0gInh5ZXMiOyB0aGVuIDoKKwor ICAgIGF4X2N2X3JvbWJpb3M9InkiCisKK2VsaWYgdGVzdCAteiAkYXhfY3Zfcm9tYmlvczsgdGhl biA6CisKKyAgICBheF9jdl9yb21iaW9zPSJ5IgogCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX1BF UkwiICYmIGFjX2N2X3BhdGhfUEVSTD0ibm8iCi0gIDs7Ci1lc2FjCiBmaQotUEVSTD0kYWNfY3Zf cGF0aF9QRVJMCi1pZiB0ZXN0IC1uICIkUEVSTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQRVJMIiA+JjUKLSRhc19lY2hvICIkUEVS TCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQorcm9tYmlvcz0kYXhfY3Zf cm9tYmlvcworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlYWJpb3Mgd2FzIGdpdmVu LgoraWYgdGVzdCAiJHtlbmFibGVfc2VhYmlvcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJs ZXZhbD0kZW5hYmxlX3NlYWJpb3M7CitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX3NlYWJpb3Mi ID0gInhubyI7IHRoZW4gOgorCisgICAgYXhfY3Zfc2VhYmlvcz0ibiIKKworZWxpZiB0ZXN0ICJ4 JGVuYWJsZV9zZWFiaW9zIiA9ICJ4eWVzIjsgdGhlbiA6CisKKyAgICBheF9jdl9zZWFiaW9zPSJ5 IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X3NlYWJpb3M7IHRoZW4gOgorCisgICAgYXhfY3Zfc2Vh Ymlvcz0ieSIKKworZmkKK3NlYWJpb3M9JGF4X2N2X3NlYWJpb3MKKworCisKKyMgQ2hlY2sgd2hl dGhlciAtLWVuYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1Zytz ZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnOworZmkKKworCitp ZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1ZyIgPSAieG5vIjsgdGhlbiA6CisKKyAgICBheF9jdl9kZWJ1 Zz0ibiIKKworZWxpZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1ZyIgPSAieHllcyI7IHRoZW4gOgorCisg ICAgYXhfY3ZfZGVidWc9InkiCisKK2VsaWYgdGVzdCAteiAkYXhfY3ZfZGVidWc7IHRoZW4gOgor CisgICAgYXhfY3ZfZGVidWc9InkiCisKIGZpCitkZWJ1Zz0kYXhfY3ZfZGVidWcKKworCisKKwor CisKKworCitmb3IgY2ZsYWcgaW4gJFBSRVBFTkRfSU5DTFVERVMKK2RvCisgICAgUFJFUEVORF9D RkxBR1MrPSIgLUkkY2ZsYWciCitkb25lCitmb3IgbGRmbGFnIGluICRQUkVQRU5EX0xJQgorZG8K KyAgICBQUkVQRU5EX0xERkxBR1MrPSIgLUwkbGRmbGFnIgorZG9uZQorZm9yIGNmbGFnIGluICRB UFBFTkRfSU5DTFVERVMKK2RvCisgICAgQVBQRU5EX0NGTEFHUys9IiAtSSRjZmxhZyIKK2RvbmUK K2ZvciBsZGZsYWcgaW4gJEFQUEVORF9MSUIKK2RvCisgICAgQVBQRU5EX0xERkxBR1MrPSIgLUwk bGRmbGFnIgorZG9uZQorQ0ZMQUdTPSIkUFJFUEVORF9DRkxBR1MgJENGTEFHUyAkQVBQRU5EX0NG TEFHUyIKK0xERkxBR1M9IiRQUkVQRU5EX0xERkxBR1MgJExERkxBR1MgJEFQUEVORF9MREZMQUdT IgorCisKIAogCi1pZiB0ZXN0IHgiJHtQRVJMfSIgPT0geCJubyIKLXRoZW4KLSAgICBhc19mbl9l cnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgcGVybCwgcGxlYXNlIGluc3RhbGwgcGVybCIgIiRMSU5F Tk8iIDUKLWZpCi1pZiB0ZXN0ICJ4JHhhcGkiID0gInh5IjsgdGhlbiA6CiAKLSAgICAjIEV4dHJh Y3QgdGhlIGZpcnN0IHdvcmQgb2YgImN1cmwtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3Jh bSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBjdXJsLWNvbmZpZzsgYWNfd29yZD0kMgorCisK KworCisKKworCisKKworIyBDaGVja3MgZm9yIHByb2dyYW1zLgorYWNfZXh0PWMKK2FjX2NwcD0n JENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29u ZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRD RkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNf Y29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xf cHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9w cmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBk dW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2 X3BhdGhfQ1VSTCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mr c2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQot ICBjYXNlICRDVVJMIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0NVUkw9 IiRDVVJMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAg OzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBpZiB0 ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIg b3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQ QVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRl c3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRh Y19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX0NVUkw9IiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCiAgICAg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAtNTE3MSw0NCArMjY1 NSwzOSBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAotICB0ZXN0IC16ICIkYWNf Y3ZfcGF0aF9DVVJMIiAmJiBhY19jdl9wYXRoX0NVUkw9Im5vIgotICA7OwotZXNhYwogZmkKLUNV Ukw9JGFjX2N2X3BhdGhfQ1VSTAotaWYgdGVzdCAtbiAiJENVUkwiOyB0aGVuCi0gIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1VSTCIgPiY1Ci0kYXNf ZWNobyAiJENVUkwiID4mNjsgfQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIk Q0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAi bm8iID4mNjsgfQogZmkKIAogCi1pZiB0ZXN0IHgiJHtDVVJMfSIgPT0geCJubyIKLXRoZW4KLSAg ICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgY3VybC1jb25maWcsIHBsZWFzZSBpbnN0 YWxsIGN1cmwtY29uZmlnIiAiJExJTkVOTyIgNQogZmkKLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0 IHdvcmQgb2YgInhtbDItY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGgg YXJncy4KLXNldCBkdW1teSB4bWwyLWNvbmZpZzsgYWNfd29yZD0kMgoraWYgdGVzdCAteiAiJGFj X2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0 IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitz ZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2lu ZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9YTUwrc2V0 fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0g c2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAk WE1MIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1hNTD0iJFhNTCIgIyBM ZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0g IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAiJGFj X2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRo ZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQ QVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lG UwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBp biAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9YTUw9IiRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgogICAgICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTUyMTYsMzkgKzI2OTUsNDMg QEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAgdGVzdCAteiAiJGFjX2N2X3Bh dGhfWE1MIiAmJiBhY19jdl9wYXRoX1hNTD0ibm8iCi0gIDs7Ci1lc2FjCiBmaQotWE1MPSRhY19j dl9wYXRoX1hNTAotaWYgdGVzdCAtbiAiJFhNTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYTUwiID4mNQotJGFzX2VjaG8gIiRYTUwi ID4mNjsgfQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIk YWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBl bHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu byIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotCi1pZiB0ZXN0IHgiJHtYTUx9IiA9 PSB4Im5vIgotdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCB4bWwyLWNv bmZpZywgcGxlYXNlIGluc3RhbGwgeG1sMi1jb25maWciICIkTElORU5PIiA1Ci1maQotCisgIGlm IHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNl ICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBu b3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FS TklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+ JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZp CitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKIGZpCi1pZiB0ZXN0ICJ4JG9jYW1sdG9vbHMi ID0gInh5IjsgdGhlbiA6CiAKLSAgICAgICMgY2hlY2tpbmcgZm9yIG9jYW1sYwotICBpZiB0ZXN0 IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBv ZiAiJHthY190b29sX3ByZWZpeH1vY2FtbGMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUg d2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxjOyBhY193b3JkPSQy CitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xf cHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29s X3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQg ZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2 X3Byb2dfT0NBTUxDK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19D QytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNl Ci0gIGlmIHRlc3QgLW4gIiRPQ0FNTEMiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxDPSIkT0NB TUxDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAtbiAiJEND IjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRo ZSB0ZXN0LgogZWxzZQogYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9y IGFzX2RpciBpbiAkUEFUSApAQCAtNTI1Nyw3ICsyNzQwLDcgQEAgZG8KICAgdGVzdCAteiAiJGFz X2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFi bGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsg dGhlbgotICAgIGFjX2N2X3Byb2dfT0NBTUxDPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sYyIKKyAg ICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgogICAgICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTUyNjcsMjkgKzI3NTAsMzAgQEAgSUZTPSRh c19zYXZlX0lGUwogCiBmaQogZmkKLU9DQU1MQz0kYWNfY3ZfcHJvZ19PQ0FNTEMKLWlmIHRlc3Qg LW4gIiRPQ0FNTEMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkT0NBTUxDIiA+JjUKLSRhc19lY2hvICIkT0NBTUxDIiA+JjY7IH0KK0ND PSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRD QyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCisgIGZpCiBm aQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxDIjsgdGhlbgotICBhY19jdF9PQ0FNTEM9 JE9DQU1MQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sYyIsIHNvIGl0IGNh biBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2NhbWxjOyBhY193b3Jk PSQyCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBv ZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15 IGNjOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFj X3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEMrc2V0 fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0 aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAi JGFjX2N0X09DQU1MQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEM9IiRhY19jdF9P Q0FNTEMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBpZiB0ZXN0IC1uICIk Q0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUg dGhlIHRlc3QuCiBlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KIGFzX3NhdmVfSUZTPSRJRlM7 IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCkBAIC01Mjk3LDcg KzI3ODEsMTEgQEAgZG8KICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3Ig YWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0 ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNf ZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3Rf T0NBTUxDPSJvY2FtbGMiCisgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAg ICAgICBjb250aW51ZQorICAgICBmaQorICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgogICAgICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTUzMDUsNjEgKzI3OTMsNDQg QEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKK2lmIHRlc3QgJGFjX3Byb2dfcmVq ZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBt YWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAg c2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVu dCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhl IHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3Qg aWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1l LgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9 JEAiCisgIGZpCiBmaQogZmkKLWFjX2N0X09DQU1MQz0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEMK LWlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTEMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxDIiA+JjUKLSRhc19lY2hv ICIkYWNfY3RfT0NBTUxDIiA+JjY7IH0KK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAt biAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQogICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2Vj aG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgaWYgdGVzdCAieCRhY19jdF9PQ0FNTEMiID0geDsgdGhl bgotICAgIE9DQU1MQz0ibm8iCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFj X3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0 IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9v bHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9 eWVzIDs7Ci1lc2FjCi0gICAgT0NBTUxDPSRhY19jdF9PQ0FNTEMKLSAgZmkKLWVsc2UKLSAgT0NB TUxDPSIkYWNfY3ZfcHJvZ19PQ0FNTEMiCi1maQotCi0KLSAgaWYgdGVzdCAiJE9DQU1MQyIgIT0g Im5vIjsgdGhlbgotICAgICBPQ0FNTFZFUlNJT049YCRPQ0FNTEMgLXYgfCBzZWQgLW4gLWUgJ3N8 Lip2ZXJzaW9uKiAqXCguKlwpJHxcMXxwJ2AKLSAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE9DYW1sIHZlcnNpb24gaXMgJE9DQU1MVkVSU0lPTiIg PiY1Ci0kYXNfZWNobyAiT0NhbWwgdmVyc2lvbiBpcyAkT0NBTUxWRVJTSU9OIiA+JjY7IH0KLSAg ICAgIyBJZiBPQ0FNTExJQiBpcyBzZXQsIHVzZSBpdAotICAgICBpZiB0ZXN0ICIkT0NBTUxMSUIi ID0gIiI7IHRoZW4KLSAgICAgICAgT0NBTUxMSUI9YCRPQ0FNTEMgLXdoZXJlIDI+L2Rldi9udWxs IHx8ICRPQ0FNTEMgLXZ8dGFpbCAtMXxjdXQgLWQgJyAnIC1mIDRgCi0gICAgIGVsc2UKLSAgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE9DQU1M TElCIHByZXZpb3VzbHkgc2V0OyBwcmVzZXJ2aW5nIGl0LiIgPiY1Ci0kYXNfZWNobyAiT0NBTUxM SUIgcHJldmlvdXNseSBzZXQ7IHByZXNlcnZpbmcgaXQuIiA+JjY7IH0KLSAgICAgZmkKLSAgICAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE9DYW1sIGxp YnJhcnkgcGF0aCBpcyAkT0NBTUxMSUIiID4mNQotJGFzX2VjaG8gIk9DYW1sIGxpYnJhcnkgcGF0 aCBpcyAkT0NBTUxMSUIiID4mNjsgfQotCi0KIAotCi0gICAgICMgY2hlY2tpbmcgZm9yIG9jYW1s b3B0Ci0gICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0 IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sb3B0Iiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4 fW9jYW1sb3B0OyBhY193b3JkPSQyCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0 ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQor ICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFj X3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15 ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNo b19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zf cHJvZ19PQ0FNTE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2df Q0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxz ZQotICBpZiB0ZXN0IC1uICIkT0NBTUxPUFQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxPUFQ9 IiRPQ0FNTE9QVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGlmIHRlc3Qg LW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVy cmlkZSB0aGUgdGVzdC4KIGVsc2UKIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFU T1IKIGZvciBhc19kaXIgaW4gJFBBVEgKQEAgLTUzNjgsNyArMjgzOSw3IEBAIGRvCiAgIHRlc3Qg LXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19l eGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29y ZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX09DQU1MT1BUPSIke2FjX3Rvb2xfcHJlZml4fW9j YW1sb3B0IgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgogICAg ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTUzNzgsMjggKzI4 NDksMzIgQEAgSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKLU9DQU1MT1BUPSRhY19jdl9wcm9n X09DQU1MT1BUCi1pZiB0ZXN0IC1uICIkT0NBTUxPUFQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxPUFQiID4mNQotJGFzX2Vj aG8gIiRPQ0FNTE9QVCIgPiY2OyB9CitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJEND IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5v IiA+JjY7IH0KIGZpCiAKIAorICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQogZmkK LWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1MT1BUIjsgdGhlbgotICBhY19jdF9PQ0FNTE9Q VD0kT0NBTUxPUFQKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbG9wdCIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2NhbWxvcHQ7 IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZv ciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIk YWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVt bXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5n IGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09D QU1MT1BUK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9D QytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNl Ci0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE9QVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19j dF9PQ0FNTE9QVD0iJGFjX2N0X09DQU1MT1BUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUg dGVzdC4KKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0 X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxzZQog YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFU SApAQCAtNTQwOCw3ICsyODgzLDcgQEAgZG8KICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGly PS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsg ZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNf dGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2 X3Byb2dfYWNfY3RfT0NBTUxPUFQ9Im9jYW1sb3B0IgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9 IiRhY19wcm9nIgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZv dW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkK QEAgLTU0MTYsMTkgKzI4OTEsMjMgQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAK LWZpCi1maQotYWNfY3RfT0NBTUxPUFQ9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxPUFQKLWlmIHRl c3QgLW4gIiRhY19jdF9PQ0FNTE9QVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTE9QVCIgPiY1Ci0kYXNfZWNobyAi JGFjX2N0X09DQU1MT1BUIiA+JjY7IH0KK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNf Y3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAi JGFjX2N0X0NDIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0g IGlmIHRlc3QgIngkYWNfY3RfT0NBTUxPUFQiID0geDsgdGhlbgotICAgIE9DQU1MT1BUPSJubyIK KworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRh Y19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKICAgZWxzZQogICAgIGNhc2UgJGNyb3NzX2Nv bXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KIHllczopCkBAIC01NDM2LDM5NiArMjkxNSw2NDkg QEAgeWVzOikKICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5v dCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KIGFjX3Rvb2xfd2FybmVkPXllcyA7 OwogZXNhYwotICAgIE9DQU1MT1BUPSRhY19jdF9PQ0FNTE9QVAorICAgIENDPSRhY19jdF9DQwog ICBmaQotZWxzZQotICBPQ0FNTE9QVD0iJGFjX2N2X3Byb2dfT0NBTUxPUFQiCiBmaQogCi0gICAg IE9DQU1MQkVTVD1ieXRlCi0gICAgIGlmIHRlc3QgIiRPQ0FNTE9QVCIgPSAibm8iOyB0aGVuCi0J eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW5ub3Qg ZmluZCBvY2FtbG9wdDsgYnl0ZWNvZGUgY29tcGlsYXRpb24gb25seS4iID4mNQotJGFzX2VjaG8g IiRhc19tZTogV0FSTklORzogQ2Fubm90IGZpbmQgb2NhbWxvcHQ7IGJ5dGVjb2RlIGNvbXBpbGF0 aW9uIG9ubHkuIiA+JjI7fQotICAgICBlbHNlCi0JVE1QVkVSU0lPTj1gJE9DQU1MT1BUIC12IHwg c2VkIC1uIC1lICdzfC4qdmVyc2lvbiogKlwoLipcKSR8XDF8cCcgYAotCWlmIHRlc3QgIiRUTVBW RVJTSU9OIiAhPSAiJE9DQU1MVkVSU0lPTiIgOyB0aGVuCi0JICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB2ZXJzaW9ucyBkaWZmZXJzIGZyb20gb2Nh bWxjOyBvY2FtbG9wdCBkaXNjYXJkZWQuIiA+JjUKLSRhc19lY2hvICJ2ZXJzaW9ucyBkaWZmZXJz IGZyb20gb2NhbWxjOyBvY2FtbG9wdCBkaXNjYXJkZWQuIiA+JjY7IH0KLQkgICAgT0NBTUxPUFQ9 bm8KLQllbHNlCi0JICAgIE9DQU1MQkVTVD1vcHQKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7 IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFj X3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYy O30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQ QVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0K KworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIg dmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19v cHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFj X2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwg KlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFj X3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Cisg IChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBh Y19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEw YVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScg Y29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBm aQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19z dGF0dXMgPSAwOyB9Citkb25lCisKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAg OworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5f ZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBh LmV4ZSBiLm91dCIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmly c3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBj b21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgoreyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRo ZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhl IEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8g IiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisKKyMgVGhlIHBvc3Np YmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3Qg YS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNf ZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQg fCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8 ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3Jt ZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19y bWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190 cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAq KSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3Ry eV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0 YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAk YWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0 b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgor IyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRv IGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUg YWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNo b3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29u Zi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUi IHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2Zm IHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwg Ki5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBX ZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkj IGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2 X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVu IDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4u KlwpJ2AKIAlmaQotICAgICBmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2Ug dGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1h eSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdl IG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0 aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0 dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25l Cit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBh Y19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hv ICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUK K3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNf ZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3 NyAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9n JyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAi eWVzIiA+JjY7IH0KK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1Cisk YXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5h bWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQorYWNfZXhl ZXh0PSRhY19jdl9leGVleHQKKworcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25m dGVzdCRhY19jdl9leGVleHQgYi5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19z YXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1 ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsi CitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89 XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5 X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisk YXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQor ICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog XCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgor ICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAo d2VsbCwgb2JzZXJ2YWJsZSkKKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ug d2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorIyB3b3JrIHByb3Blcmx5IChpLmUuLCBy ZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKyMgYHJtJy4KK2Zv ciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworICB0ZXN0 IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFj X2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICou YmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiog KSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwkgIGJy ZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIHsgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4m NQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5f ZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNv bXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElO RU5PIiA1IDsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVl eHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQogCitybSAtZiBjb25mdGVz dC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2NhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5o LiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9w ZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAo ZikgIT0gMDsKIAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlcz0i JGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIg cHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBj b21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNv bXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBj b21waWxpbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsg dGhlbgorICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwi KiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hv PSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4m NQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVz dCAkYWNfc3RhdHVzID0gMDsgfQorICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVl eHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNf dHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2 YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9l Y2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnki KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsg fTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNy b3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBl bHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBp biBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdk JzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1z LgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBj b25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KKyAgICBmaQorICBm aQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Y3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0K IAotICAgICAjIGNoZWNraW5nIGZvciBvY2FtbGMub3B0Ci0gICAgIGlmIHRlc3QgLW4gIiRhY190 b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rv b2xfcHJlZml4fW9jYW1sYy5vcHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBh cmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxjLm9wdDsgYWNfd29yZD0kMgot eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFj X3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9 Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxDRE9UT1BUK3NldH0iID0gc2V0OyB0aGVuIDoK K3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91 dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmls ZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMu Li4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuIDoK ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJE9DQU1M Q0RPVE9QVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PQ0FNTENET1RPUFQ9IiRPQ0FNTENET1RPUFQi ICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElG UzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRh c19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19l eGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3Qg LWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQ0FNTENET1RP UFQ9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxjLm9wdCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+ JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKKyAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZk ZWZzLmguICAqLwogCi1maQotZmkKLU9DQU1MQ0RPVE9QVD0kYWNfY3ZfcHJvZ19PQ0FNTENET1RP UFQKLWlmIHRlc3QgLW4gIiRPQ0FNTENET1RPUFQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxDRE9UT1BUIiA+JjUKLSRhc19l Y2hvICIkT0NBTUxDRE9UT1BUIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9 Ci1maQoraW50CittYWluICgpCit7CiAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0g LWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgor Y2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwk YWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9l Y2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFz X2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUK KyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoK KyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8K KyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisg ICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAq LmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKyAgICAqKSBhY19jdl9v YmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7Cisg IGVzYWMKK2RvbmUKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2Fz OiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKK3sgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4m NQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5f ZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBj b21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7 IH0KIGZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTENET1RPUFQiOyB0aGVuCi0gIGFj X2N0X09DQU1MQ0RPVE9QVD0kT0NBTUxDRE9UT1BUCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29y ZCBvZiAib2NhbWxjLm9wdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3Mu Ci1zZXQgZHVtbXkgb2NhbWxjLm9wdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3By b2dfYWNfY3RfT0NBTUxDRE9UT1BUK3NldH0iID0gc2V0OyB0aGVuIDoKK3JtIC1mIGNvbmZ0ZXN0 LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hv ICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9 JE9CSkVYVAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9f biAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIg PiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVu IDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFj X2N0X09DQU1MQ0RPVE9QVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTENET1RPUFQ9 IiRhY19jdF9PQ0FNTENET1RPUFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lgot ZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBp biAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBh c19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNp b25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYm ICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAg YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTENET1RPUFQ9Im9jYW1sYy5vcHQiCi0gICAgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3Nh dmVfSUZTCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8q IGVuZCBjb25mZGVmcy5oLiAgKi8KIAotZmkKLWZpCi1hY19jdF9PQ0FNTENET1RPUFQ9JGFjX2N2 X3Byb2dfYWNfY3RfT0NBTUxDRE9UT1BUCi1pZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxDRE9UT1BU IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N0X09DQU1MQ0RPVE9QVCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09DQU1MQ0RPVE9Q VCIgPiY2OyB9CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9r ZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190 cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCiBlbHNl Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIg PiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQorICBhY19jb21waWxlcl9nbnU9bm8KIGZpCitybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQK K2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKIAotICBpZiB0ZXN0ICJ4JGFj X2N0X09DQU1MQ0RPVE9QVCIgPSB4OyB0aGVuCi0gICAgT0NBTUxDRE9UT1BUPSJubyIKLSAgZWxz ZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNy b3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAi JGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0 IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBPQ0FNTENE T1RPUFQ9JGFjX2N0X09DQU1MQ0RPVE9QVAotICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQor JGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21w aWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcwogZWxzZQotICBPQ0FNTENET1RPUFQ9IiRh Y19jdl9wcm9nX09DQU1MQ0RPVE9QVCIKKyAgR0NDPQogZmkKLQotICAgICBpZiB0ZXN0ICIkT0NB TUxDRE9UT1BUIiAhPSAibm8iOyB0aGVuCi0JVE1QVkVSU0lPTj1gJE9DQU1MQ0RPVE9QVCAtdiB8 IHNlZCAtbiAtZSAnc3wuKnZlcnNpb24qICpcKC4qXCkkfFwxfHAnIGAKLQlpZiB0ZXN0ICIkVE1Q VkVSU0lPTiIgIT0gIiRPQ0FNTFZFUlNJT04iIDsgdGhlbgotCSAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdmVyc2lvbnMgZGlmZmVycyBmcm9tIG9j YW1sYzsgb2NhbWxjLm9wdCBkaXNjYXJkZWQuIiA+JjUKLSRhc19lY2hvICJ2ZXJzaW9ucyBkaWZm ZXJzIGZyb20gb2NhbWxjOyBvY2FtbGMub3B0IGRpc2NhcmRlZC4iID4mNjsgfQotCWVsc2UKLQkg ICAgT0NBTUxDPSRPQ0FNTENET1RPUFQKLQlmaQotICAgICBmaQotCi0gICAgICMgY2hlY2tpbmcg Zm9yIG9jYW1sb3B0Lm9wdAotICAgICBpZiB0ZXN0ICIkT0NBTUxPUFQiICE9ICJubyIgOyB0aGVu Ci0JaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZp cnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxvcHQub3B0Iiwgc28gaXQgY2FuIGJl IGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9j YW1sb3B0Lm9wdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxPUFRE T1RPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQor YWNfc2F2ZV9DRkxBR1M9JENGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7 YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJE9DQU1MT1BURE9UT1BUIjsgdGhlbgotICBh Y19jdl9wcm9nX09DQU1MT1BURE9UT1BUPSIkT0NBTUxPUFRET1RPUFQiICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAk YWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQ0FNTE9QVERPVE9QVD0iJHthY190b29s X3ByZWZpeH1vY2FtbG9wdC5vcHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJl YWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCisgIGFjX3NhdmVfY193 ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAg IGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotZmkK LWZpCi1PQ0FNTE9QVERPVE9QVD0kYWNfY3ZfcHJvZ19PQ0FNTE9QVERPVE9QVAotaWYgdGVzdCAt biAiJE9DQU1MT1BURE9UT1BUIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MT1BURE9UT1BUIiA+JjUKLSRhc19lY2hvICIkT0NB TUxPUFRET1RPUFQiID4mNjsgfQoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsK K30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBh Y19jdl9wcm9nX2NjX2c9eWVzCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKKyAg Q0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKK2ludAorbWFpbiAoKQorewogCi1maQotaWYg dGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxPUFRET1RPUFQiOyB0aGVuCi0gIGFjX2N0X09DQU1M T1BURE9UT1BUPSRPQ0FNTE9QVERPVE9QVAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2Yg Im9jYW1sb3B0Lm9wdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1z ZXQgZHVtbXkgb2NhbWxvcHQub3B0OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19u ICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJv Z19hY19jdF9PQ0FNTE9QVERPVE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE9QVERPVE9Q VCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE9QVERPVE9QVD0iJGFjX2N0X09DQU1M T1BURE9UT1BUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRv Ci0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAg ICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAg aWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94 ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2df YWNfY3RfT0NBTUxPUFRET1RPUFQ9Im9jYW1sb3B0Lm9wdCIKLSAgICAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMK KyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJ TkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJy b3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQorewog CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRM SU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcwogZmkKK3JtIC1mIGNvcmUgY29u ZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWFjX2N0 X09DQU1MT1BURE9UT1BUPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MT1BURE9UT1BUCi1pZiB0ZXN0 IC1uICIkYWNfY3RfT0NBTUxPUFRET1RPUFQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxPUFRET1RPUFQiID4mNQot JGFzX2VjaG8gIiRhY19jdF9PQ0FNTE9QVERPVE9QVCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNo byAibm8iID4mNjsgfQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotCi0gIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxPUFRET1RP UFQiID0geDsgdGhlbgotICAgIE9DQU1MT1BURE9UT1BUPSJubyIKK3JtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJy b3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2Vj aG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9 IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3By b2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENG TEFHUz0iLWcgLU8yIgogICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29s X3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlw bGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5v dCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7 OwotZXNhYwotICAgIE9DQU1MT1BURE9UT1BUPSRhY19jdF9PQ0FNTE9QVERPVE9QVAorICAgIENG TEFHUz0iLWciCiAgIGZpCiBlbHNlCi0gIE9DQU1MT1BURE9UT1BUPSIkYWNfY3ZfcHJvZ19PQ0FN TE9QVERPVE9QVCIKLWZpCi0KLQlpZiB0ZXN0ICIkT0NBTUxPUFRET1RPUFQiICE9ICJubyI7IHRo ZW4KLQkgICBUTVBWRVJTSU9OPWAkT0NBTUxPUFRET1RPUFQgLXYgfCBzZWQgLW4gLWUgJ3N8Lip2 ZXJzaW9uKiAqXCguKlwpJHxcMXxwJyBgCi0JICAgaWYgdGVzdCAiJFRNUFZFUlNJT04iICE9ICIk T0NBTUxWRVJTSU9OIiA7IHRoZW4KLQkgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogdmVyc2lvbiBkaWZmZXJzIGZyb20gb2NhbWxjOyBvY2FtbG9w dC5vcHQgZGlzY2FyZGVkLiIgPiY1Ci0kYXNfZWNobyAidmVyc2lvbiBkaWZmZXJzIGZyb20gb2Nh bWxjOyBvY2FtbG9wdC5vcHQgZGlzY2FyZGVkLiIgPiY2OyB9Ci0JICAgZWxzZQotCSAgICAgIE9D QU1MT1BUPSRPQ0FNTE9QVERPVE9QVAotCSAgIGZpCi0gICAgICAgIGZpCi0gICAgIGZpCi0KLQor ICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisg ICAgQ0ZMQUdTPQogICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+ JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4gOgor ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1u bworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1 LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpy Y3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIg KmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07 Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipw LCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7Cisg IHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOwor fQogCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkg ZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBu b3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9r ZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisg ICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMg YWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gn IGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAg SXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRo YXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcg PT0gMCA/IDEgOiAtMV07CiAKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBk ZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmlu Z3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQg eGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKIAotICAjIGNoZWNraW5nIGZv ciBvY2FtbCB0b3BsZXZlbAotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0g ICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2FtbCIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29s X3ByZWZpeH1vY2FtbDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUwr c2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQot ICBpZiB0ZXN0IC1uICIkT0NBTUwiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUw9IiRPQ0FNTCIg IyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZT OyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICitpbnQgdGVzdCAoaW50 IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMy IHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJ TEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2lu dCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2 LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICBy ZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1x bGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19F WFRFTlNJT05TX18iCiBkbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIi ICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4 dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4K LSAgICBhY19jdl9wcm9nX09DQU1MPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sIgotICAgICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKKyAgQ0M9IiRhY19zYXZlX0NDICRh Y19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNf Y3ZfcHJvZ19jY19jODk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYg YnJlYWsKIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUworcm0gLWYgY29uZnRlc3QuJGFj X2V4dAorQ0M9JGFjX3NhdmVfQ0MKIAogZmkKLWZpCi1PQ0FNTD0kYWNfY3ZfcHJvZ19PQ0FNTAot aWYgdGVzdCAtbiAiJE9DQU1MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MIiA+JjUKLSRhc19lY2hvICIkT0NBTUwiID4mNjsg fQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4 JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9u ZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1 cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODki CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7 IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6 CisKIGZpCiAKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0n JENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0n JENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25m dGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxl cl9nbnUKIAotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1MIjsgdGhlbgotICBhY19j dF9PQ0FNTD0kT0NBTUwKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbCIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2NhbWw7IGFj X3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4u LiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MK3NldH0iID0gc2V0 OyB0aGVuIDoKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJj aGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9Citz ZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7 IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3Byb2dfbWFr ZV8ke2FjX21ha2V9X3NldCtzZXR9XCIiID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MIjsgdGhlbgotICBh Y19jdl9wcm9nX2FjX2N0X09DQU1MPSIkYWNfY3RfT0NBTUwiICMgTGV0IHRoZSB1c2VyIG92ZXJy aWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRP UgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16 ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhl Y3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi OyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTD0ib2NhbWwiCi0gICAgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFz X3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT0NBTUw9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUwK LWlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTCIgPiY1Ci0kYXNfZWNobyAi JGFjX2N0X09DQU1MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQot Ci0gIGlmIHRlc3QgIngkYWNfY3RfT0NBTUwiID0geDsgdGhlbgotICAgIE9DQU1MPSJubyIKLSAg ZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczop Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5n IGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNo byAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBo b3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKKyAgY2F0ID5jb25mdGVz dC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0k KE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtl WzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtF LW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBA JSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAq KQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKIGVzYWMKLSAg ICBPQ0FNTD0kYWNfY3RfT0NBTUwKLSAgZmkKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBl dmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1 CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CiBlbHNlCi0gIE9DQU1MPSIkYWNf Y3ZfcHJvZ19PQ0FNTCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtF PSR7TUFLRS1tYWtlfSIKIGZpCiAKLQotICAjIGNoZWNraW5nIGZvciBvY2FtbGRlcAotICBpZiB0 ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29y ZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2FtbGRlcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0g bmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbGRlcDsgYWNf d29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4u ICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxERVArc2V0fSIgPSBzZXQ7IHRo ZW4gOgorIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dy YW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0 IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9l dGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAor IyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2lu c3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0 IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxh ZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlz dGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRo ZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hp Y2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGlj aCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgor IyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZp bGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZv ciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNU QUxMIjsgdGhlbgoraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRo ZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0IC1uICIk T0NBTUxERVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxERVA9IiRPQ0FNTERFUCIgIyBMZXQg dGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9 JFBBVEhfU0VQQVJBVE9SCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IK IGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1 dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Ijsg fTsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0NBTUxERVA9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxk ZXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFz X2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQor ICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRI IGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbiAjKCgKKyAgLi8gfCAuLy8gfCAvW2NDXS8qIHwg XAorICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9h ZnN3cy9iaW4vKiB8IFwKKyAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11P UzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCisgIC91c3IvdWNiLyogKSA7OworICAqKQorICAgICMg T1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisg ICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVm ZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxs IHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhl Y3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRh Y19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7 IH07IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgZHNw bXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4K KwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252 ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAg IGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+ JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkg SFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgcm0gLXJmIGNvbmZ0 ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRl c3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0 LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qu b25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMg Y29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBj b25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIv Y29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19k aXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQorCSAg ZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworCiAgIGRvbmUKIElG Uz0kYXNfc2F2ZV9JRlMKIAorcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRl c3QuZGlyCisKIGZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0 OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFz IGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBh CisgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNh dXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hl IGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMg YSByZWxhdGl2ZSBuYW1lLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKIGZpCi1P Q0FNTERFUD0kYWNfY3ZfcHJvZ19PQ0FNTERFUAotaWYgdGVzdCAtbiAiJE9DQU1MREVQIjsgdGhl bgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9D QU1MREVQIiA+JjUKLSRhc19lY2hvICIkT0NBTUxERVAiID4mNjsgfQotZWxzZQotICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2Vj aG8gIm5vIiA+JjY7IH0KLWZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KIAor IyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zh ci12YWx9LgorIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlh YmxlIHN1YnN0aXR1dGlvbi4KK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExf UFJPR1JBTT0nJHtJTlNUQUxMfScKIAotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1M REVQIjsgdGhlbgotICBhY19jdF9PQ0FNTERFUD0kT0NBTUxERVAKLSAgIyBFeHRyYWN0IHRoZSBm aXJzdCB3b3JkIG9mICJvY2FtbGRlcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRo IGFyZ3MuCi1zZXQgZHVtbXkgb2NhbWxkZXA7IGFjX3dvcmQ9JDIKK3Rlc3QgLXogIiRJTlNUQUxM X1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNU QUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKKyMgRXh0cmFj dCB0aGUgZmlyc3Qgd29yZCBvZiAiYmlzb24iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUg d2l0aCBhcmdzLgorc2V0IGR1bW15IGJpc29uOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNf ZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNf Y3ZfcHJvZ19hY19jdF9PQ0FNTERFUCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2Fj X2N2X3BhdGhfQklTT04rc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgogZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxERVAiOyB0aGVuCi0gIGFj X2N2X3Byb2dfYWNfY3RfT0NBTUxERVA9IiRhY19jdF9PQ0FNTERFUCIgIyBMZXQgdGhlIHVzZXIg b3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQ QVJBVE9SCisgIGNhc2UgJEJJU09OIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9w YXRoX0JJU09OPSIkQklTT04iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGgg YSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJB VE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3Qg LXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19l eGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29y ZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09DQU1MREVQPSJvY2FtbGRlcCIKKyAg ICBhY19jdl9wYXRoX0JJU09OPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgogICAgICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTU4MzMsNTMgKzM1NjUs MzkgQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKKyAgOzsKK2VzYWMKIGZpCi1m aQotYWNfY3RfT0NBTUxERVA9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxERVAKLWlmIHRlc3QgLW4g IiRhY19jdF9PQ0FNTERFUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTERFUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0 X09DQU1MREVQIiA+JjY7IH0KK0JJU09OPSRhY19jdl9wYXRoX0JJU09OCitpZiB0ZXN0IC1uICIk QklTT04iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkQklTT04iID4mNQorJGFzX2VjaG8gIiRCSVNPTiIgPiY2OyB9CiBlbHNlCiAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAk YXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MREVQIiA9 IHg7IHRoZW4KLSAgICBPQ0FNTERFUD0ibm8iCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21w aWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQg d2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcg Y3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9v bF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT0NBTUxERVA9JGFjX2N0X09DQU1MREVQCi0gIGZp Ci1lbHNlCi0gIE9DQU1MREVQPSIkYWNfY3ZfcHJvZ19PQ0FNTERFUCIKLWZpCi0KIAotICAjIGNo ZWNraW5nIGZvciBvY2FtbG1rdG9wCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRo ZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1s bWt0b3AiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15 ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxta3RvcDsgYWNfd29yZD0kMgorIyBFeHRyYWN0IHRoZSBm aXJzdCB3b3JkIG9mICJmbGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJn cy4KK3NldCBkdW1teSBmbGV4OyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJj aGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19P Q0FNTE1LVE9QK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GTEVY K3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UK LSAgaWYgdGVzdCAtbiAiJE9DQU1MTUtUT1AiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxNS1RP UD0iJE9DQU1MTUtUT1AiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQot YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBjYXNlICRGTEVYIGluCisg IFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0ZMRVg9IiRGTEVYIiAjIExldCB0aGUg dXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2 ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8K ICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAg IGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBp ZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3gg IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19P Q0FNTE1LVE9QPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sbWt0b3AiCisgICAgYWNfY3ZfcGF0aF9G TEVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgogICAgICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi ID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTU4ODcsMzkgKzM2MDUsMzkgQEAgZG9uZQogICBk b25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKKyAgOzsKK2VzYWMKIGZpCi1maQotT0NBTUxNS1RPUD0k YWNfY3ZfcHJvZ19PQ0FNTE1LVE9QCi1pZiB0ZXN0IC1uICIkT0NBTUxNS1RPUCI7IHRoZW4KLSAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTE1L VE9QIiA+JjUKLSRhc19lY2hvICIkT0NBTUxNS1RPUCIgPiY2OyB9CitGTEVYPSRhY19jdl9wYXRo X0ZMRVgKK2lmIHRlc3QgLW4gIiRGTEVYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEZMRVgiID4mNQorJGFzX2VjaG8gIiRGTEVYIiA+ JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKLWZpCi1pZiB0ZXN0 IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTE1LVE9QIjsgdGhlbgotICBhY19jdF9PQ0FNTE1LVE9QPSRP Q0FNTE1LVE9QCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxta3RvcCIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2NhbWxta3Rv cDsgYWNfd29yZD0kMgorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQg Y2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwZXJsOyBhY193b3Jk PSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+ JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE1LVE9QK3NldH0iID0gc2V0 OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QRVJMK3NldH0iID0gc2V0OyB0aGVuIDoK ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0 X09DQU1MTUtUT1AiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxNS1RPUD0iJGFjX2N0 X09DQU1MTUtUT1AiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNf c2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBjYXNlICRQRVJMIGluCisgIFtc XC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BFUkw9IiRQRVJMIiAjIExldCB0aGUgdXNl ciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9J RlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAg SUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZv ciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7 IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19j dF9PQ0FNTE1LVE9QPSJvY2FtbG1rdG9wIgorICAgIGFjX2N2X3BhdGhfUEVSTD0iJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVh ayAyCiAgIGZpCkBAIC01OTI3LDUzICszNjQ1LDQ2IEBAIGRvbmUKICAgZG9uZQogSUZTPSRhc19z YXZlX0lGUwogCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1BFUkwiICYmIGFjX2N2X3BhdGhfUEVS TD0ibm8iCisgIDs7Citlc2FjCiBmaQotZmkKLWFjX2N0X09DQU1MTUtUT1A9JGFjX2N2X3Byb2df YWNfY3RfT0NBTUxNS1RPUAotaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MTUtUT1AiOyB0aGVuCi0g IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Rf T0NBTUxNS1RPUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09DQU1MTUtUT1AiID4mNjsgfQorUEVS TD0kYWNfY3ZfcGF0aF9QRVJMCitpZiB0ZXN0IC1uICIkUEVSTCI7IHRoZW4KKyAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQRVJMIiA+JjUKKyRhc19l Y2hvICIkUEVSTCIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAot ICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MTUtUT1AiID0geDsgdGhlbgotICAgIE9DQU1MTUtUT1A9 Im5vIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBp bgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklO RzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUK LSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhl ZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwot ICAgIE9DQU1MTUtUT1A9JGFjX2N0X09DQU1MTUtUT1AKLSAgZmkKLWVsc2UKLSAgT0NBTUxNS1RP UD0iJGFjX2N2X3Byb2dfT0NBTUxNS1RPUCIKLWZpCiAKK2lmIHRlc3QgeCIke1BFUkx9IiA9PSB4 Im5vIgordGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBwZXJsLCBwbGVh c2UgaW5zdGFsbCBwZXJsIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgIngkeGFwaSIgPSAieHki OyB0aGVuIDoKIAotICAjIGNoZWNraW5nIGZvciBvY2FtbG1rbGliCi0gIGlmIHRlc3QgLW4gIiRh Y190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2Fj X3Rvb2xfcHJlZml4fW9jYW1sbWtsaWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0 aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxta2xpYjsgYWNfd29yZD0k MgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY3VybC1jb25maWciLCBzbyBpdCBj YW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGN1cmwtY29uZmlnOyBh Y193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQu Li4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQ0FNTE1LTElCK3NldH0iID0gc2V0 OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9DVVJMK3NldH0iID0gc2V0OyB0aGVuIDoK ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJE9DQU1M TUtMSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxNS0xJQj0iJE9DQU1MTUtMSUIiICMgTGV0 IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZT PSRQQVRIX1NFUEFSQVRPUgorICBjYXNlICRDVVJMIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQor ICBhY19jdl9wYXRoX0NVUkw9IiRDVVJMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVz dCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRI X1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwog ICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAn JyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQ0FNTE1LTElCPSIke2FjX3Rvb2xf cHJlZml4fW9jYW1sbWtsaWIiCisgICAgYWNfY3ZfcGF0aF9DVVJMPSIkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAg ZmkKQEAgLTU5ODEsMzkgKzM2OTIsNDQgQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZT CiAKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQ1VSTCIgJiYgYWNfY3ZfcGF0aF9DVVJMPSJubyIK KyAgOzsKK2VzYWMKIGZpCi1maQotT0NBTUxNS0xJQj0kYWNfY3ZfcHJvZ19PQ0FNTE1LTElCCi1p ZiB0ZXN0IC1uICIkT0NBTUxNS0xJQiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTE1LTElCIiA+JjUKLSRhc19lY2hvICIkT0NB TUxNS0xJQiIgPiY2OyB9CitDVVJMPSRhY19jdl9wYXRoX0NVUkwKK2lmIHRlc3QgLW4gIiRDVVJM IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJENVUkwiID4mNQorJGFzX2VjaG8gIiRDVVJMIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hv ICJubyIgPiY2OyB9CiBmaQogCiAKK2lmIHRlc3QgeCIke0NVUkx9IiA9PSB4Im5vIgordGhlbgor ICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBjdXJsLWNvbmZpZywgcGxlYXNlIGlu c3RhbGwgY3VybC1jb25maWciICIkTElORU5PIiA1CiBmaQotaWYgdGVzdCAteiAiJGFjX2N2X3By b2dfT0NBTUxNS0xJQiI7IHRoZW4KLSAgYWNfY3RfT0NBTUxNS0xJQj0kT0NBTUxNS0xJQgotICAj IEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sbWtsaWIiLCBzbyBpdCBjYW4gYmUgYSBw cm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sbWtsaWI7IGFjX3dvcmQ9JDIK KyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhtbDItY29uZmlnIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4bWwyLWNvbmZpZzsgYWNf d29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4u ICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0NBTUxNS0xJQitzZXR9IiA9 IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfWE1MK3NldH0iID0gc2V0OyB0aGVu IDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFj X2N0X09DQU1MTUtMSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxNS0xJQj0iJGFj X2N0X09DQU1MTUtMSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQot YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBjYXNlICRYTUwgaW4KKyAg W1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfWE1MPSIkWE1MIiAjIExldCB0aGUgdXNl ciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9J RlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAg SUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZv ciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7 IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19j dF9PQ0FNTE1LTElCPSJvY2FtbG1rbGliIgorICAgIGFjX2N2X3BhdGhfWE1MPSIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFr IDIKICAgZmkKQEAgLTYwMjEsNDQgKzM3MzcsMzkgQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3Nh dmVfSUZTCiAKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfWE1MIiAmJiBhY19jdl9wYXRoX1hNTD0i bm8iCisgIDs7Citlc2FjCiBmaQotZmkKLWFjX2N0X09DQU1MTUtMSUI9JGFjX2N2X3Byb2dfYWNf Y3RfT0NBTUxNS0xJQgotaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MTUtMSUIiOyB0aGVuCi0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NB TUxNS0xJQiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09DQU1MTUtMSUIiID4mNjsgfQorWE1MPSRh Y19jdl9wYXRoX1hNTAoraWYgdGVzdCAtbiAiJFhNTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYTUwiID4mNQorJGFzX2VjaG8gIiRY TUwiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgaWYgdGVz dCAieCRhY19jdF9PQ0FNTE1LTElCIiA9IHg7IHRoZW4KLSAgICBPQ0FNTE1LTElCPSJubyIKLSAg ZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczop Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5n IGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNo byAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBo b3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBPQ0FN TE1LTElCPSRhY19jdF9PQ0FNTE1LTElCCi0gIGZpCi1lbHNlCi0gIE9DQU1MTUtMSUI9IiRhY19j dl9wcm9nX09DQU1MTUtMSUIiCisKK2lmIHRlc3QgeCIke1hNTH0iID09IHgibm8iCit0aGVuCisg ICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIHhtbDItY29uZmlnLCBwbGVhc2UgaW5z dGFsbCB4bWwyLWNvbmZpZyIgIiRMSU5FTk8iIDUKIGZpCiAKK2ZpCitpZiB0ZXN0ICJ4JG9jYW1s dG9vbHMiID0gInh5IjsgdGhlbiA6CiAKLSAgIyBjaGVja2luZyBmb3Igb2NhbWxkb2MKKyAgICAg ICMgY2hlY2tpbmcgZm9yIG9jYW1sYwogICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0 aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2Ft bGRvYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkg JHthY190b29sX3ByZWZpeH1vY2FtbGRvYzsgYWNfd29yZD0kMgorICAjIEV4dHJhY3QgdGhlIGZp cnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxjIiwgc28gaXQgY2FuIGJlIGEgcHJv Z3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sYzsg YWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3Jk Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxET0Mrc2V0fSIgPSBzZXQ7 IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MQytzZXR9IiA9IHNldDsgdGhlbiA6 CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRPQ0FN TERPQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PQ0FNTERPQz0iJE9DQU1MRE9DIiAjIExldCB0aGUg dXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAtbiAiJE9DQU1MQyI7IHRoZW4KKyAg YWNfY3ZfcHJvZ19PQ0FNTEM9IiRPQ0FNTEMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0 ZXN0LgogZWxzZQogYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFz X2RpciBpbiAkUEFUSApAQCAtNjA2Nyw3ICszNzc4LDcgQEAgZG8KICAgdGVzdCAteiAiJGFzX2Rp ciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVf ZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhl bgotICAgIGFjX2N2X3Byb2dfT0NBTUxET0M9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxkb2MiCisg ICAgYWNfY3ZfcHJvZ19PQ0FNTEM9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxjIgogICAgICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTYwNzcsMTAgKzM3ODgsMTAg QEAgSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKLU9DQU1MRE9DPSRhY19jdl9wcm9nX09DQU1M RE9DCi1pZiB0ZXN0IC1uICIkT0NBTUxET0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxET0MiID4mNQotJGFzX2VjaG8gIiRP Q0FNTERPQyIgPiY2OyB9CitPQ0FNTEM9JGFjX2N2X3Byb2dfT0NBTUxDCitpZiB0ZXN0IC1uICIk T0NBTUxDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJE9DQU1MQyIgPiY1CiskYXNfZWNobyAiJE9DQU1MQyIgPiY2OyB9CiBlbHNlCiAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1 CiAkYXNfZWNobyAibm8iID4mNjsgfQpAQCAtNjA4OCwxNyArMzc5OSwxNyBAQCBmaQogCiAKIGZp Ci1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTERPQyI7IHRoZW4KLSAgYWNfY3RfT0NBTUxE T0M9JE9DQU1MRE9DCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxkb2MiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sZG9j OyBhY193b3JkPSQyCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTEMiOyB0aGVuCisgIGFj X2N0X09DQU1MQz0kT0NBTUxDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxj Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvY2Ft bGM7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNf d29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MRE9DK3Nl dH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEMrc2V0 fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBp ZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxET0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NB TUxET0M9IiRhY19jdF9PQ0FNTERPQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qu CisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTEMiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3Rf T0NBTUxDPSIkYWNfY3RfT0NBTUxDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4K IGVsc2UKIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIg aW4gJFBBVEgKQEAgLTYxMDcsNyArMzgxOCw3IEBAIGRvCiAgIHRlc3QgLXogIiRhc19kaXIiICYm IGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVu c2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIg JiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAg ICBhY19jdl9wcm9nX2FjX2N0X09DQU1MRE9DPSJvY2FtbGRvYyIKKyAgICBhY19jdl9wcm9nX2Fj X2N0X09DQU1MQz0ib2NhbWxjIgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFr IDIKICAgZmkKQEAgLTYxMTcsMTcgKzM4MjgsMTcgQEAgSUZTPSRhc19zYXZlX0lGUwogCiBmaQog ZmkKLWFjX2N0X09DQU1MRE9DPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MRE9DCi1pZiB0ZXN0IC1u ICIkYWNfY3RfT0NBTUxET0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxET0MiID4mNQotJGFzX2VjaG8gIiRhY19j dF9PQ0FNTERPQyIgPiY2OyB9CithY19jdF9PQ0FNTEM9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxD CitpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MQyIgPiY1CiskYXNfZWNo byAiJGFjX2N0X09DQU1MQyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQog ZmkKIAotICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MRE9DIiA9IHg7IHRoZW4KLSAgICBPQ0FNTERP Qz0ibm8iCisgIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxDIiA9IHg7IHRoZW4KKyAgICBPQ0FNTEM9 Im5vIgogICBlbHNlCiAgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBp bgogeWVzOikKQEAgLTYxMzUsMjQgKzM4NDYsNDEgQEAgeWVzOikKICRhc19lY2hvICIkYXNfbWU6 IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxl dCIgPiYyO30KIGFjX3Rvb2xfd2FybmVkPXllcyA7OwogZXNhYwotICAgIE9DQU1MRE9DPSRhY19j dF9PQ0FNTERPQworICAgIE9DQU1MQz0kYWNfY3RfT0NBTUxDCiAgIGZpCiBlbHNlCi0gIE9DQU1M RE9DPSIkYWNfY3ZfcHJvZ19PQ0FNTERPQyIKKyAgT0NBTUxDPSIkYWNfY3ZfcHJvZ19PQ0FNTEMi CiBmaQogCiAKLSAgIyBjaGVja2luZyBmb3Igb2NhbWxidWlsZAotICBpZiB0ZXN0IC1uICIkYWNf dG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190 b29sX3ByZWZpeH1vY2FtbGJ1aWxkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGgg YXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sYnVpbGQ7IGFjX3dvcmQ9JDIK KyAgaWYgdGVzdCAiJE9DQU1MQyIgIT0gIm5vIjsgdGhlbgorICAgICBPQ0FNTFZFUlNJT049YCRP Q0FNTEMgLXYgfCBzZWQgLW4gLWUgJ3N8Lip2ZXJzaW9uKiAqXCguKlwpJHxcMXxwJ2AKKyAgICAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE9DYW1sIHZl cnNpb24gaXMgJE9DQU1MVkVSU0lPTiIgPiY1CiskYXNfZWNobyAiT0NhbWwgdmVyc2lvbiBpcyAk T0NBTUxWRVJTSU9OIiA+JjY7IH0KKyAgICAgIyBJZiBPQ0FNTExJQiBpcyBzZXQsIHVzZSBpdAor ICAgICBpZiB0ZXN0ICIkT0NBTUxMSUIiID0gIiI7IHRoZW4KKyAgICAgICAgT0NBTUxMSUI9YCRP Q0FNTEMgLXdoZXJlIDI+L2Rldi9udWxsIHx8ICRPQ0FNTEMgLXZ8dGFpbCAtMXxjdXQgLWQgJyAn IC1mIDRgCisgICAgIGVsc2UKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6IE9DQU1MTElCIHByZXZpb3VzbHkgc2V0OyBwcmVzZXJ2aW5nIGl0 LiIgPiY1CiskYXNfZWNobyAiT0NBTUxMSUIgcHJldmlvdXNseSBzZXQ7IHByZXNlcnZpbmcgaXQu IiA+JjY7IH0KKyAgICAgZmkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IE9DYW1sIGxpYnJhcnkgcGF0aCBpcyAkT0NBTUxMSUIiID4mNQorJGFz X2VjaG8gIk9DYW1sIGxpYnJhcnkgcGF0aCBpcyAkT0NBTUxMSUIiID4mNjsgfQorCisKKworCisg ICAgICMgY2hlY2tpbmcgZm9yIG9jYW1sb3B0CisgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3By ZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJl Zml4fW9jYW1sb3B0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3Nl dCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sb3B0OyBhY193b3JkPSQyCiB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1 CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3Qg IiR7YWNfY3ZfcHJvZ19PQ0FNTEJVSUxEK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7 YWNfY3ZfcHJvZ19PQ0FNTE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRPQ0FNTEJVSUxEIjsgdGhlbgotICBh Y19jdl9wcm9nX09DQU1MQlVJTEQ9IiRPQ0FNTEJVSUxEIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAtbiAiJE9DQU1MT1BUIjsgdGhlbgorICBhY19jdl9wcm9n X09DQU1MT1BUPSIkT0NBTUxPUFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lgog ZWxzZQogYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBp biAkUEFUSApAQCAtNjE2MSw3ICszODg5LDcgQEAgZG8KICAgdGVzdCAteiAiJGFzX2RpciIgJiYg YXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5z aW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAm JiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAg IGFjX2N2X3Byb2dfT0NBTUxCVUlMRD0iJHthY190b29sX3ByZWZpeH1vY2FtbGJ1aWxkIgorICAg IGFjX2N2X3Byb2dfT0NBTUxPUFQ9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxvcHQiCiAgICAgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29y ZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAtNjE3MSwxMCArMzg5OSwx MCBAQCBJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQotT0NBTUxCVUlMRD0kYWNfY3ZfcHJvZ19P Q0FNTEJVSUxECi1pZiB0ZXN0IC1uICIkT0NBTUxCVUlMRCI7IHRoZW4KLSAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTEJVSUxEIiA+JjUKLSRh c19lY2hvICIkT0NBTUxCVUlMRCIgPiY2OyB9CitPQ0FNTE9QVD0kYWNfY3ZfcHJvZ19PQ0FNTE9Q VAoraWYgdGVzdCAtbiAiJE9DQU1MT1BUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MT1BUIiA+JjUKKyRhc19lY2hvICIkT0NB TUxPUFQiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KQEAgLTYxODIsMTcg KzM5MTAsMTcgQEAgZmkKIAogCiBmaQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxCVUlM RCI7IHRoZW4KLSAgYWNfY3RfT0NBTUxCVUlMRD0kT0NBTUxCVUlMRAotICAjIEV4dHJhY3QgdGhl IGZpcnN0IHdvcmQgb2YgIm9jYW1sYnVpbGQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUg d2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sYnVpbGQ7IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXog IiRhY19jdl9wcm9nX09DQU1MT1BUIjsgdGhlbgorICBhY19jdF9PQ0FNTE9QVD0kT0NBTUxPUFQK KyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbG9wdCIsIHNvIGl0IGNhbiBiZSBh IHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2NhbWxvcHQ7IGFjX3dvcmQ9JDIK IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQrc2V0fSIgPSBzZXQ7IHRo ZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MT1BUK3NldH0iID0gc2V0OyB0 aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAi JGFjX2N0X09DQU1MQlVJTEQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxCVUlMRD0i JGFjX2N0X09DQU1MQlVJTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBp ZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxPUFQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0NB TUxPUFQ9IiRhY19jdF9PQ0FNTE9QVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qu CiBlbHNlCiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGly IGluICRQQVRICkBAIC02MjAxLDcgKzM5MjksNyBAQCBkbwogICB0ZXN0IC16ICIkYXNfZGlyIiAm JiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRl bnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi ICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0g ICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEJVSUxEPSJvY2FtbGJ1aWxkIgorICAgIGFjX2N2X3By b2dfYWNfY3RfT0NBTUxPUFQ9Im9jYW1sb3B0IgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQog ICAgIGJyZWFrIDIKICAgZmkKQEAgLTYyMTEsMTcgKzM5MzksMTcgQEAgSUZTPSRhc19zYXZlX0lG UwogCiBmaQogZmkKLWFjX2N0X09DQU1MQlVJTEQ9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxCVUlM RAotaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MQlVJTEQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxCVUlMRCIgPiY1 Ci0kYXNfZWNobyAiJGFjX2N0X09DQU1MQlVJTEQiID4mNjsgfQorYWNfY3RfT0NBTUxPUFQ9JGFj X2N2X3Byb2dfYWNfY3RfT0NBTUxPUFQKK2lmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE9QVCI7IHRo ZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdF9PQ0FNTE9QVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09DQU1MT1BUIiA+JjY7IH0KIGVs c2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5v IiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gIGlmIHRlc3QgIngkYWNfY3RfT0NB TUxCVUlMRCIgPSB4OyB0aGVuCi0gICAgT0NBTUxCVUlMRD0ibm8iCisgIGlmIHRlc3QgIngkYWNf Y3RfT0NBTUxPUFQiID0geDsgdGhlbgorICAgIE9DQU1MT1BUPSJubyIKICAgZWxzZQogICAgIGNh c2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KIHllczopCkBAIC02MjI5LDQ0 ICszOTU3LDg5IEBAIHllczopCiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9z cyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CiBhY190b29sX3dh cm5lZD15ZXMgOzsKIGVzYWMKLSAgICBPQ0FNTEJVSUxEPSRhY19jdF9PQ0FNTEJVSUxECisgICAg T0NBTUxPUFQ9JGFjX2N0X09DQU1MT1BUCiAgIGZpCiBlbHNlCi0gIE9DQU1MQlVJTEQ9IiRhY19j dl9wcm9nX09DQU1MQlVJTEQiCisgIE9DQU1MT1BUPSIkYWNfY3ZfcHJvZ19PQ0FNTE9QVCIKIGZp CiAKKyAgICAgT0NBTUxCRVNUPWJ5dGUKKyAgICAgaWYgdGVzdCAiJE9DQU1MT1BUIiA9ICJubyI7 IHRoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6 IENhbm5vdCBmaW5kIG9jYW1sb3B0OyBieXRlY29kZSBjb21waWxhdGlvbiBvbmx5LiIgPiY1Cisk YXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW5ub3QgZmluZCBvY2FtbG9wdDsgYnl0ZWNvZGUg Y29tcGlsYXRpb24gb25seS4iID4mMjt9CisgICAgIGVsc2UKKwlUTVBWRVJTSU9OPWAkT0NBTUxP UFQgLXYgfCBzZWQgLW4gLWUgJ3N8Lip2ZXJzaW9uKiAqXCguKlwpJHxcMXxwJyBgCisJaWYgdGVz dCAiJFRNUFZFUlNJT04iICE9ICIkT0NBTUxWRVJTSU9OIiA7IHRoZW4KKwkgICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHZlcnNpb25zIGRpZmZlcnMg ZnJvbSBvY2FtbGM7IG9jYW1sb3B0IGRpc2NhcmRlZC4iID4mNQorJGFzX2VjaG8gInZlcnNpb25z IGRpZmZlcnMgZnJvbSBvY2FtbGM7IG9jYW1sb3B0IGRpc2NhcmRlZC4iID4mNjsgfQorCSAgICBP Q0FNTE9QVD1ubworCWVsc2UKKwkgICAgT0NBTUxCRVNUPW9wdAorCWZpCisgICAgIGZpCiAKLSAg ICBpZiB0ZXN0ICJ4JE9DQU1MQyIgPSAieG5vIjsgdGhlbiA6CiAKLSAgICAgICAgaWYgdGVzdCAi eCRlbmFibGVfb2NhbWx0b29scyIgPSAieHllcyI7IHRoZW4gOgogCi0gICAgICAgICAgICBhc19m bl9lcnJvciAkPyAiT2NhbWwgdG9vbHMgZW5hYmxlZCwgYnV0IHVuYWJsZSB0byBmaW5kIE9jYW1s IiAiJExJTkVOTyIgNQotZmkKLSAgICAgICAgb2NhbWx0b29scz0ibiIKKyAgICAgIyBjaGVja2lu ZyBmb3Igb2NhbWxjLm9wdAorICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVu CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2FtbGMu b3B0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAk e2FjX3Rvb2xfcHJlZml4fW9jYW1sYy5vcHQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19l Y2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19j dl9wcm9nX09DQU1MQ0RPVE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQ0FNTENET1RPUFQiOyB0aGVuCisg IGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUPSIkT0NBTUxDRE9UT1BUIiAjIExldCB0aGUgdXNlciBv dmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBB UkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVz dCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFj X2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUPSIke2FjX3Rvb2xfcHJl Zml4fW9jYW1sYy5vcHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgor ICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCitmaQorT0NBTUxDRE9U T1BUPSRhY19jdl9wcm9nX09DQU1MQ0RPVE9QVAoraWYgdGVzdCAtbiAiJE9DQU1MQ0RPVE9QVCI7 IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRPQ0FNTENET1RPUFQiID4mNQorJGFzX2VjaG8gIiRPQ0FNTENET1RPUFQiID4mNjsgfQorZWxz ZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8i ID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKIAogZmkKLSMgRXh0cmFjdCB0aGUgZmly c3Qgd29yZCBvZiAiYmFzaCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3Mu Ci1zZXQgZHVtbXkgYmFzaDsgYWNfd29yZD0kMgoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NB TUxDRE9UT1BUIjsgdGhlbgorICBhY19jdF9PQ0FNTENET1RPUFQ9JE9DQU1MQ0RPVE9QVAorICAj IEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sYy5vcHQiLCBzbyBpdCBjYW4gYmUgYSBw cm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9jYW1sYy5vcHQ7IGFjX3dvcmQ9JDIK IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0JBU0grc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVz dCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MQ0RPVE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CiAg ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhc2UgJEJBU0ggaW4KLSAgW1xc L10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfQkFTSD0iJEJBU0giICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lG Uz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTENE T1RPUFQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxDRE9UT1BUPSIkYWNfY3RfT0NB TUxDRE9UT1BUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRv CiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAg ICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAg aWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94 ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhf QkFTSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICBhY19jdl9wcm9nX2FjX2N0 X09DQU1MQ0RPVE9QVD0ib2NhbWxjLm9wdCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAg ICBicmVhayAyCiAgIGZpCkBAIC02Mjc0LDU2ICs0MDQ3LDYzIEBAIGRvbmUKICAgZG9uZQogSUZT PSRhc19zYXZlX0lGUwogCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX0JBU0giICYmIGFjX2N2X3Bh dGhfQkFTSD0ibm8iCi0gIDs7Ci1lc2FjCiBmaQotQkFTSD0kYWNfY3ZfcGF0aF9CQVNICi1pZiB0 ZXN0IC1uICIkQkFTSCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRCQVNIIiA+JjUKLSRhc19lY2hvICIkQkFTSCIgPiY2OyB9CitmaQor YWNfY3RfT0NBTUxDRE9UT1BUPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MQ0RPVE9QVAoraWYgdGVz dCAtbiAiJGFjX2N0X09DQU1MQ0RPVE9QVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTENET1RPUFQiID4mNQorJGFz X2VjaG8gIiRhY19jdF9PQ0FNTENET1RPUFQiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5v IiA+JjY7IH0KIGZpCiAKLQotaWYgdGVzdCB4IiR7QkFTSH0iID09IHgibm8iCi10aGVuCi0gICAg YXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGJhc2gsIHBsZWFzZSBpbnN0YWxsIGJhc2gi ICIkTElORU5PIiA1CisgIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxDRE9UT1BUIiA9IHg7IHRoZW4K KyAgICBPQ0FNTENET1RPUFQ9Im5vIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5n OiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGgg aG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3Nz IHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2Fy bmVkPXllcyA7OworZXNhYworICAgIE9DQU1MQ0RPVE9QVD0kYWNfY3RfT0NBTUxDRE9UT1BUCisg IGZpCitlbHNlCisgIE9DQU1MQ0RPVE9QVD0iJGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUIgogZmkK LWlmIHRlc3QgIngkcHl0aG9udG9vbHMiID0gInh5IjsgdGhlbiA6Ci0KLSAgICBpZiBlY2hvICIk UFlUSE9OIiB8IGdyZXAgLXEgIl4vIjsgdGhlbiA6CiAKLSAgICAgICAgUFlUSE9OUEFUSD0kUFlU SE9OCi0gICAgICAgIFBZVEhPTj1gYmFzZW5hbWUgJFBZVEhPTlBBVEhgCisgICAgIGlmIHRlc3Qg IiRPQ0FNTENET1RPUFQiICE9ICJubyI7IHRoZW4KKwlUTVBWRVJTSU9OPWAkT0NBTUxDRE9UT1BU IC12IHwgc2VkIC1uIC1lICdzfC4qdmVyc2lvbiogKlwoLipcKSR8XDF8cCcgYAorCWlmIHRlc3Qg IiRUTVBWRVJTSU9OIiAhPSAiJE9DQU1MVkVSU0lPTiIgOyB0aGVuCisJICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB2ZXJzaW9ucyBkaWZmZXJzIGZy b20gb2NhbWxjOyBvY2FtbGMub3B0IGRpc2NhcmRlZC4iID4mNQorJGFzX2VjaG8gInZlcnNpb25z IGRpZmZlcnMgZnJvbSBvY2FtbGM7IG9jYW1sYy5vcHQgZGlzY2FyZGVkLiIgPiY2OyB9CisJZWxz ZQorCSAgICBPQ0FNTEM9JE9DQU1MQ0RPVE9QVAorCWZpCisgICAgIGZpCiAKLWVsaWYgdGVzdCAt eiAiJFBZVEhPTiI7IHRoZW4gOgotICBQWVRIT049InB5dGhvbiIKLWVsc2UKLSAgYXNfZm5fZXJy b3IgJD8gIlBZVEhPTiBzcGVjaWZpZWQsIGJ1dCBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCIgIiRM SU5FTk8iIDUKLWZpCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkUFlUSE9OIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkUFlUSE9O OyBhY193b3JkPSQyCisgICAgICMgY2hlY2tpbmcgZm9yIG9jYW1sb3B0Lm9wdAorICAgICBpZiB0 ZXN0ICIkT0NBTUxPUFQiICE9ICJubyIgOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJl Zml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVm aXh9b2NhbWxvcHQub3B0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4K K3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sb3B0Lm9wdDsgYWNfd29yZD0kMgogeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dv cmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1p ZiB0ZXN0ICIke2FjX2N2X3BhdGhfUFlUSE9OUEFUSCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0 ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxPUFRET1RPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXNlICRQWVRIT05QQVRIIGluCi0g IFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1BZVEhPTlBBVEg9IiRQWVRIT05QQVRI IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAg KikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBpZiB0ZXN0IC1u ICIkT0NBTUxPUFRET1RPUFQiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0NBTUxPUFRET1RPUFQ9IiRP Q0FNTE9QVERPVE9QVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCith c19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRI CiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0u CiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRv CiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rl c3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9w YXRoX1BZVEhPTlBBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgYWNfY3Zf cHJvZ19PQ0FNTE9QVERPVE9QVD0iJHthY190b29sX3ByZWZpeH1vY2FtbG9wdC5vcHQiCiAgICAg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAtNjMzMSw2MiArNDEx MSwzOSBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAotICB0ZXN0IC16ICIkYWNf Y3ZfcGF0aF9QWVRIT05QQVRIIiAmJiBhY19jdl9wYXRoX1BZVEhPTlBBVEg9Im5vIgotICA7Owot ZXNhYwogZmkKLVBZVEhPTlBBVEg9JGFjX2N2X3BhdGhfUFlUSE9OUEFUSAotaWYgdGVzdCAtbiAi JFBZVEhPTlBBVEgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkUFlUSE9OUEFUSCIgPiY1Ci0kYXNfZWNobyAiJFBZVEhPTlBBVEgiID4m NjsgfQorZmkKK09DQU1MT1BURE9UT1BUPSRhY19jdl9wcm9nX09DQU1MT1BURE9UT1BUCitpZiB0 ZXN0IC1uICIkT0NBTUxPUFRET1RPUFQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxPUFRET1RPUFQiID4mNQorJGFzX2VjaG8g IiRPQ0FNTE9QVERPVE9QVCIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQog ZmkKIAogCi1pZiB0ZXN0IHgiJHtQWVRIT05QQVRIfSIgPT0geCJubyIKLXRoZW4KLSAgICBhc19m bl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgJFBZVEhPTiwgcGxlYXNlIGluc3RhbGwgJFBZVEhP TiIgIiRMSU5FTk8iIDUKLWZpCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgcHl0aG9uIHZlcnNpb24gPj0gMi4zICIgPiY1Ci0kYXNfZWNo b19uICJjaGVja2luZyBmb3IgcHl0aG9uIHZlcnNpb24gPj0gMi4zIC4uLiAiID4mNjsgfQotYCRQ WVRIT04gLWMgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KGV2YWwoInN5cy52ZXJzaW9uX2luZm8gPCAo MiwgMykiKSknYAotaWYgdGVzdCAiJD8iICE9ICIwIgotdGhlbgotICAgIHB5dGhvbl92ZXJzaW9u PWAkUFlUSE9OIC1WIDI+JjFgCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgYXNfZm5f ZXJyb3IgJD8gIiRweXRob25fdmVyc2lvbiBpcyB0b28gb2xkLCBtaW5pbXVtIHJlcXVpcmVkIHZl cnNpb24gaXMgMi4zIiAiJExJTkVOTyIgNQotZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2 OyB9CiBmaQotCi1hY19wcmV2aW91c19jcHBmbGFncz0kQ1BQRkxBR1MKLWFjX3ByZXZpb3VzX2xk ZmxhZ3M9JExERkxBR1MKLWFjX3B5dGhvbl92ZXJzaW9uPWAkUFlUSE9OIC1jICdpbXBvcnQgZGlz dHV0aWxzLnN5c2NvbmZpZzsgXAotICAgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2Nv bmZpZ192YXIoIlZFUlNJT04iKSdgCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRQWVRI T04tY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBk dW1teSAkUFlUSE9OLWNvbmZpZzsgYWNfd29yZD0kMgoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2df T0NBTUxPUFRET1RPUFQiOyB0aGVuCisgIGFjX2N0X09DQU1MT1BURE9UT1BUPSRPQ0FNTE9QVERP VE9QVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sb3B0Lm9wdCIsIHNvIGl0 IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2NhbWxvcHQub3B0 OyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dv cmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9weWNvbmZpZytzZXR9IiA9IHNl dDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0NBTUxPUFRET1RPUFQrc2V0 fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBj YXNlICRweWNvbmZpZyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9weWNv bmZpZz0iJHB5Y29uZmlnIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEg cGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRP UgorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxPUFRET1RPUFQiOyB0aGVuCisgIGFjX2N2X3By b2dfYWNfY3RfT0NBTUxPUFRET1RPUFQ9IiRhY19jdF9PQ0FNTE9QVERPVE9QVCIgIyBMZXQgdGhl IHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBB VEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZT CiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGlu ICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX3B5Y29uZmlnPSIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxPUFRET1RPUFQ9 Im9jYW1sb3B0Lm9wdCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAg IGZpCkBAIC02Mzk0LDEyNyArNDE1MSw2OCBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9J RlMKIAotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9weWNvbmZpZyIgJiYgYWNfY3ZfcGF0aF9weWNv bmZpZz0ibm8iCi0gIDs7Ci1lc2FjCiBmaQotcHljb25maWc9JGFjX2N2X3BhdGhfcHljb25maWcK LWlmIHRlc3QgLW4gIiRweWNvbmZpZyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRweWNvbmZpZyIgPiY1Ci0kYXNfZWNobyAiJHB5Y29u ZmlnIiA+JjY7IH0KK2ZpCithY19jdF9PQ0FNTE9QVERPVE9QVD0kYWNfY3ZfcHJvZ19hY19jdF9P Q0FNTE9QVERPVE9QVAoraWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MT1BURE9UT1BUIjsgdGhlbgor ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0 X09DQU1MT1BURE9UT1BUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0NBTUxPUFRET1RPUFQiID4m NjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQotaWYgdGVzdCB4IiRw eWNvbmZpZyIgPT0geCJubyI7IHRoZW4gOgotCi0gICAgICAgIENQUEZMQUdTPSIkQ0ZMQUdTIGAk UFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgXAotICAgICAgICBwcmludCAi LUkiICsgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERVBZIiknYCIK LSAgICBDUFBGTEFHUz0iJENQUEZMQUdTIGAkUFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5 c2NvbmZpZzsgXAotICAgICAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdf dmFyKCJDRkxBR1MiKSdgIgotICAgIExERkxBR1M9IiRMREZMQUdTIGAkUFlUSE9OIC1jICdpbXBv cnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgXAotICAgICAgICBwcmludCBkaXN0dXRpbHMuc3lzY29u ZmlnLmdldF9jb25maWdfdmFyKCJMSUJTIiknYCIKLSAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZ VEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKLSAgICAgICAgcHJpbnQgZGlz dHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiU1lTTElCUyIpJ2AiCi0gICAgTERGTEFH Uz0iJExERkxBR1MgYCRQWVRIT04gLWMgJ2ltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyBcCi0g ICAgICAgIHByaW50ICItTCIgKyBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBs YXRfc3BlY2lmaWM9MSxcCi0gICAgICAgIHN0YW5kYXJkX2xpYj0xKSArICIvY29uZmlnIidgIgot ICAgIExERkxBR1M9IiRMREZMQUdTIGAkUFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2Nv bmZpZzsgXAotICAgICAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFy KCJMSU5LRk9SU0hBUkVEIiknYCIKLSAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZVEhPTiAtYyAn aW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKLSAgICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5 c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTERGTEFHUyIpJ2AiCi0KLWVsc2UKLQotICAgICAgICBD UFBGTEFHUz0iJENGTEFHUyBgJFBZVEhPTi1jb25maWcgLS1jZmxhZ3NgIgotICAgIExERkxBR1M9 IiRMREZMQUdTIGAkUFlUSE9OLWNvbmZpZyAtLWxkZmxhZ3NgIgotCi1maQotCi1hY19mbl9jX2No ZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiUHl0aG9uLmgiICJhY19jdl9oZWFkZXJfUHl0 aG9uX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX1B5 dGhvbl9oIiA9IHgiInllczsgdGhlbiA6Ci0KKyAgaWYgdGVzdCAieCRhY19jdF9PQ0FNTE9QVERP VE9QVCIgPSB4OyB0aGVuCisgICAgT0NBTUxPUFRET1RPUFQ9Im5vIgorICBlbHNlCisgICAgY2Fz ZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMg bm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdB Uk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIg PiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9DQU1MT1BURE9UT1BUPSRh Y19jdF9PQ0FNTE9QVERPVE9QVAorICBmaQogZWxzZQotICBhc19mbl9lcnJvciAkPyAiVW5hYmxl IHRvIGZpbmQgUHl0aG9uIGRldmVsb3BtZW50IGhlYWRlcnMiICIkTElORU5PIiA1CisgIE9DQU1M T1BURE9UT1BUPSIkYWNfY3ZfcHJvZ19PQ0FNTE9QVERPVE9QVCIKIGZpCiAKKwlpZiB0ZXN0ICIk T0NBTUxPUFRET1RPUFQiICE9ICJubyI7IHRoZW4KKwkgICBUTVBWRVJTSU9OPWAkT0NBTUxPUFRE T1RPUFQgLXYgfCBzZWQgLW4gLWUgJ3N8Lip2ZXJzaW9uKiAqXCguKlwpJHxcMXxwJyBgCisJICAg aWYgdGVzdCAiJFRNUFZFUlNJT04iICE9ICIkT0NBTUxWRVJTSU9OIiA7IHRoZW4KKwkgICAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdmVyc2lvbiBk aWZmZXJzIGZyb20gb2NhbWxjOyBvY2FtbG9wdC5vcHQgZGlzY2FyZGVkLiIgPiY1CiskYXNfZWNo byAidmVyc2lvbiBkaWZmZXJzIGZyb20gb2NhbWxjOyBvY2FtbG9wdC5vcHQgZGlzY2FyZGVkLiIg PiY2OyB9CisJICAgZWxzZQorCSAgICAgIE9DQU1MT1BUPSRPQ0FNTE9QVERPVE9QVAorCSAgIGZp CisgICAgICAgIGZpCisgICAgIGZpCiAKLWFzX2FjX0xpYj1gJGFzX2VjaG8gImFjX2N2X2xpYl9w eXRob24kYWNfcHl0aG9uX3ZlcnNpb24nJ19QeUFyZ19QYXJzZVR1cGxlIiB8ICRhc190cl9zaGAK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFB5 QXJnX1BhcnNlVHVwbGUgaW4gLWxweXRob24kYWNfcHl0aG9uX3ZlcnNpb24iID4mNQotJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIFB5QXJnX1BhcnNlVHVwbGUgaW4gLWxweXRob24kYWNfcHl0aG9u X3ZlcnNpb24uLi4gIiA+JjY7IH0KLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfTGliK3NldH1c IiIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBh Y19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHB5dGhvbiRhY19weXRob25fdmVy c2lvbiAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwg cHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWln aHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0 cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3Bs dXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgUHlBcmdfUGFyc2VUdXBsZSAoKTsKLWlu dAotbWFpbiAoKQotewotcmV0dXJuIFB5QXJnX1BhcnNlVHVwbGUgKCk7Ci0gIDsKLSAgcmV0dXJu IDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAg ZXZhbCAiJGFzX2FjX0xpYj15ZXMiCi1lbHNlCi0gIGV2YWwgIiRhc19hY19MaWI9bm8iCi1maQot cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRl c3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJ QlMKLWZpCi1ldmFsIGFjX3Jlcz1cJCRhc19hY19MaWIKLQkgICAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8g IiRhY19yZXMiID4mNjsgfQotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19MaWIiXCIgPSB4Inll cyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNo byAiSEFWRV9MSUJweXRob24kYWNfcHl0aG9uX3ZlcnNpb24iIHwgJGFzX3RyX2NwcGAgMQotX0FD RU9GCi0KLSAgTElCUz0iLWxweXRob24kYWNfcHl0aG9uX3ZlcnNpb24gJExJQlMiCiAKLWVsc2UK LSAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgcHl0aG9uIGRldmVs b3BtZW50IGxpYnJhcnkiICIkTElORU5PIiA1Ci1maQorICBmaQogCi1DUFBGTEFHUz0kYWNfcHJl dmlvdXNfY3BwZmxhZ3MKLUxETEZBR1M9JGFjX3ByZXZpb3VzX2xkZmxhZ3MKIAogCi1maQotIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dy YW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKKyAgIyBj aGVja2luZyBmb3Igb2NhbWwgdG9wbGV2ZWwKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4 IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9 b2NhbWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15 ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWw7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hv X24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9w YXRoX1hHRVRURVhUK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19P Q0FNTCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBl bHNlCi0gIGNhc2UgJFhHRVRURVhUIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9w YXRoX1hHRVRURVhUPSIkWEdFVFRFWFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0 IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhf U0VQQVJBVE9SCisgIGlmIHRlc3QgLW4gIiRPQ0FNTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQ0FN TD0iJE9DQU1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRv CiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAg ICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAg aWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94 ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhf WEdFVFRFWFQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgYWNfY3ZfcHJvZ19P Q0FNTD0iJHthY190b29sX3ByZWZpeH1vY2FtbCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUK ICAgICBicmVhayAyCiAgIGZpCkBAIC02NTIyLDQ0ICs0MjIwLDM5IEBAIGRvbmUKICAgZG9uZQog SUZTPSRhc19zYXZlX0lGUwogCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX1hHRVRURVhUIiAmJiBh Y19jdl9wYXRoX1hHRVRURVhUPSJubyIKLSAgOzsKLWVzYWMKIGZpCi1YR0VUVEVYVD0kYWNfY3Zf cGF0aF9YR0VUVEVYVAotaWYgdGVzdCAtbiAiJFhHRVRURVhUIjsgdGhlbgotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKLSRh c19lY2hvICIkWEdFVFRFWFQiID4mNjsgfQorZmkKK09DQU1MPSRhY19jdl9wcm9nX09DQU1MCitp ZiB0ZXN0IC1uICIkT0NBTUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkT0NBTUwiID4mNQorJGFzX2VjaG8gIiRPQ0FNTCIgPiY2OyB9 CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCi1pZiB0ZXN0IHgiJHtYR0VU VEVYVH0iID09IHgibm8iCi10aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5k IHhnZXR0ZXh0LCBwbGVhc2UgaW5zdGFsbCB4Z2V0dGV4dCIgIiRMSU5FTk8iIDUKIGZpCi0jIEV4 dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzODYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5h bWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGFzODY7IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXogIiRh Y19jdl9wcm9nX09DQU1MIjsgdGhlbgorICBhY19jdF9PQ0FNTD0kT0NBTUwKKyAgIyBFeHRyYWN0 IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3 aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2NhbWw7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19l Y2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19j dl9wYXRoX0FTODYrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2Fj X2N0X09DQU1MK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKIGVsc2UKLSAgY2FzZSAkQVM4NiBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3Zf cGF0aF9BUzg2PSIkQVM4NiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBh IHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFU T1IKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0 X09DQU1MPSIkYWNfY3RfT0NBTUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lgor ZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBp biAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBh c19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNp b25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYm ICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAg YWNfY3ZfcGF0aF9BUzg2PSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgIGFjX2N2 X3Byb2dfYWNfY3RfT0NBTUw9Im9jYW1sIgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAg IGJyZWFrIDIKICAgZmkKQEAgLTY1NjcsNDQgKzQyNjAsNTMgQEAgZG9uZQogICBkb25lCiBJRlM9 JGFzX3NhdmVfSUZTCiAKLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQVM4NiIgJiYgYWNfY3ZfcGF0 aF9BUzg2PSJubyIKLSAgOzsKLWVzYWMKIGZpCi1BUzg2PSRhY19jdl9wYXRoX0FTODYKLWlmIHRl c3QgLW4gIiRBUzg2IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJEFTODYiID4mNQotJGFzX2VjaG8gIiRBUzg2IiA+JjY7IH0KK2ZpCith Y19jdF9PQ0FNTD0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTAoraWYgdGVzdCAtbiAiJGFjX2N0X09D QU1MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGFjX2N0X09DQU1MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0NBTUwiID4mNjsgfQog ZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog bm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQotaWYgdGVzdCB4IiR7QVM4Nn0i ID09IHgibm8iCi10aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGFzODYs IHBsZWFzZSBpbnN0YWxsIGFzODYiICIkTElORU5PIiA1CisgIGlmIHRlc3QgIngkYWNfY3RfT0NB TUwiID0geDsgdGhlbgorICAgIE9DQU1MPSJubyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2Nv bXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhl ZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2lu ZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190 b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQ0FNTD0kYWNfY3RfT0NBTUwKKyAgZmkKK2Vs c2UKKyAgT0NBTUw9IiRhY19jdl9wcm9nX09DQU1MIgogZmkKLSMgRXh0cmFjdCB0aGUgZmlyc3Qg d29yZCBvZiAibGQ4NiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1z ZXQgZHVtbXkgbGQ4NjsgYWNfd29yZD0kMgorCisKKyAgIyBjaGVja2luZyBmb3Igb2NhbWxkZXAK KyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZp cnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxkZXAiLCBzbyBpdCBjYW4gYmUgYSBw cm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxk ZXA7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNf d29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0xEODYrc2V0fSIgPSBzZXQ7 IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MREVQK3NldH0iID0gc2V0OyB0aGVu IDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAkTEQ4NiBpbgot ICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9MRDg2PSIkTEQ4NiIgIyBMZXQgdGhl IHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAiJE9DQU1MREVQ IjsgdGhlbgorICBhY19jdl9wcm9nX09DQU1MREVQPSIkT0NBTUxERVAiICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAk YWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9MRDg2PSIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfT0NBTUxERVA9IiR7YWNfdG9vbF9wcmVmaXh9b2Nh bWxkZXAiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQg JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAt NjYxMiw0NCArNDMxNCwzOSBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAotICB0 ZXN0IC16ICIkYWNfY3ZfcGF0aF9MRDg2IiAmJiBhY19jdl9wYXRoX0xEODY9Im5vIgotICA7Owot ZXNhYwogZmkKLUxEODY9JGFjX2N2X3BhdGhfTEQ4NgotaWYgdGVzdCAtbiAiJExEODYiOyB0aGVu Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQ4 NiIgPiY1Ci0kYXNfZWNobyAiJExEODYiID4mNjsgfQorZmkKK09DQU1MREVQPSRhY19jdl9wcm9n X09DQU1MREVQCitpZiB0ZXN0IC1uICIkT0NBTUxERVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxERVAiID4mNQorJGFzX2Vj aG8gIiRPQ0FNTERFUCIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkK IAogCi1pZiB0ZXN0IHgiJHtMRDg2fSIgPT0geCJubyIKLXRoZW4KLSAgICBhc19mbl9lcnJvciAk PyAiVW5hYmxlIHRvIGZpbmQgbGQ4NiwgcGxlYXNlIGluc3RhbGwgbGQ4NiIgIiRMSU5FTk8iIDUK IGZpCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImJjYyIsIHNvIGl0IGNhbiBiZSBhIHBy b2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYmNjOyBhY193b3JkPSQyCitpZiB0ZXN0 IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTERFUCI7IHRoZW4KKyAgYWNfY3RfT0NBTUxERVA9JE9DQU1M REVQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxkZXAiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9jYW1sZGVwOyBhY193b3Jk PSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+ JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9CQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYg dGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MREVQK3NldH0iID0gc2V0OyB0aGVuIDoKICAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAkQkNDIGluCi0gIFtcXC9d KiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0JDQz0iJEJDQyIgIyBMZXQgdGhlIHVzZXIgb3Zl cnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJ RlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MREVQIjsg dGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MREVQPSIkYWNfY3RfT0NBTUxERVAiICMgTGV0 IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZT PSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZl X0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4 dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9CQ0M9IiRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERFUD0ib2NhbWxk ZXAiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFz X2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAtNjY1 NywyODMgKzQzNTQsMjQxIEBAIGRvbmUKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCi0gIHRl c3QgLXogIiRhY19jdl9wYXRoX0JDQyIgJiYgYWNfY3ZfcGF0aF9CQ0M9Im5vIgotICA7OwotZXNh YwogZmkKLUJDQz0kYWNfY3ZfcGF0aF9CQ0MKLWlmIHRlc3QgLW4gIiRCQ0MiOyB0aGVuCi0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQkNDIiA+JjUK LSRhc19lY2hvICIkQkNDIiA+JjY7IH0KK2ZpCithY19jdF9PQ0FNTERFUD0kYWNfY3ZfcHJvZ19h Y19jdF9PQ0FNTERFUAoraWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MREVQIjsgdGhlbgorICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1M REVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0NBTUxERVAiID4mNjsgfQogZWxzZQogICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFz X2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQotaWYgdGVzdCB4IiR7QkNDfSIgPT0geCJubyIKLXRo ZW4KLSAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgYmNjLCBwbGVhc2UgaW5zdGFs bCBiY2MiICIkTElORU5PIiA1CisgIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxERVAiID0geDsgdGhl bgorICAgIE9DQU1MREVQPSJubyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzok YWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhv c3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0 b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5l ZD15ZXMgOzsKK2VzYWMKKyAgICBPQ0FNTERFUD0kYWNfY3RfT0NBTUxERVAKKyAgZmkKK2Vsc2UK KyAgT0NBTUxERVA9IiRhY19jdl9wcm9nX09DQU1MREVQIgogZmkKLSMgRXh0cmFjdCB0aGUgZmly c3Qgd29yZCBvZiAiaWFzbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3Mu Ci1zZXQgZHVtbXkgaWFzbDsgYWNfd29yZD0kMgorCisKKyAgIyBjaGVja2luZyBmb3Igb2NhbWxt a3RvcAorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0 aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2FtbG1rdG9wIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4 fW9jYW1sbWt0b3A7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5n IGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0lBU0wrc2V0 fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MTUtUT1Arc2V0fSIg PSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXNl ICRJQVNMIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0lBU0w9IiRJQVNM IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAg KikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBpZiB0ZXN0IC1u ICIkT0NBTUxNS1RPUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQ0FNTE1LVE9QPSIkT0NBTUxNS1RP UCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0k SUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9 JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFj X2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVz dCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX0lBU0w9IiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgYWNfY3ZfcHJvZ19PQ0FNTE1LVE9QPSIk e2FjX3Rvb2xfcHJlZml4fW9jYW1sbWt0b3AiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAg ICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVz dCAteiAiJGFjX2N2X3BhdGhfSUFTTCIgJiYgYWNfY3ZfcGF0aF9JQVNMPSJubyIKLSAgOzsKLWVz YWMKLWZpCi1JQVNMPSRhY19jdl9wYXRoX0lBU0wKLWlmIHRlc3QgLW4gIiRJQVNMIjsgdGhlbgot ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElBU0wi ID4mNQotJGFzX2VjaG8gIiRJQVNMIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2 OyB9Ci1maQotCi0KLWlmIHRlc3QgeCIke0lBU0x9IiA9PSB4Im5vIgotdGhlbgotICAgIGFzX2Zu X2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBpYXNsLCBwbGVhc2UgaW5zdGFsbCBpYXNsIiAiJExJ TkVOTyIgNQotZmkKLQotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInV1 aWQvdXVpZC5oIiAiYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1 bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCIgPSB4IiJ5ZXM7IHRoZW4g OgotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgdXVpZF9jbGVhciBpbiAtbHV1aWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IHV1aWRfY2xlYXIgaW4gLWx1dWlkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl91 dWlkX3V1aWRfY2xlYXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHV1 aWQgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAot LyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHBy b3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0 IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMg YXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVz cGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIHV1aWRfY2xlYXIgKCk7Ci1pbnQKLW1haW4g KCkKLXsKLXJldHVybiB1dWlkX2NsZWFyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9G Ci1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl91dWlk X3V1aWRfY2xlYXI9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl91dWlkX3V1aWRfY2xlYXI9bm8KLWZp Ci1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25m dGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVf TElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkYWNfY3ZfbGliX3V1aWRfdXVpZF9jbGVhciIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl91 dWlkX3V1aWRfY2xlYXIiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfdXVpZF91dWlkX2Ns ZWFyIiA9IHgiInllczsgdGhlbiA6Ci0gIGxpYnV1aWQ9InkiCi1maQotCisgIGZpCitkb25lCisg IGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKLQotCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9t b25ncmVsICIkTElORU5PIiAidXVpZC5oIiAiYWNfY3ZfaGVhZGVyX3V1aWRfaCIgIiRhY19pbmNs dWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdXVpZF9oIiA9IHgiInllczsg dGhlbiA6Ci0gIGxpYnV1aWQ9InkiCiBmaQotCi0KLWlmIHRlc3QgIiRsaWJ1dWlkIiAhPSAieSI7 IHRoZW4gOgotCi0gICAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGEgdmFsaWQgdXVpZCBs aWJyYXJ5IiAiJExJTkVOTyIgNQotCitPQ0FNTE1LVE9QPSRhY19jdl9wcm9nX09DQU1MTUtUT1AK K2lmIHRlc3QgLW4gIiRPQ0FNTE1LVE9QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MTUtUT1AiID4mNQorJGFzX2VjaG8gIiRP Q0FNTE1LVE9QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAK LWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJjdXJzZXMuaCIgImFjX2N2 X2hlYWRlcl9jdXJzZXNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19j dl9oZWFkZXJfY3Vyc2VzX2giID0geCIieWVzOyB0aGVuIDoKLQotICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNsZWFyIGluIC1sY3Vyc2Vz IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBjbGVhciBpbiAtbGN1cnNlcy4uLiAiID4m NjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfY3Vyc2VzX2NsZWFyK3NldH0iID0gc2V0OyB0aGVu IDoKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTE1LVE9QIjsgdGhlbgorICBhY19j dF9PQ0FNTE1LVE9QPSRPQ0FNTE1LVE9QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAi b2NhbWxta3RvcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQg ZHVtbXkgb2NhbWxta3RvcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNf Y3RfT0NBTUxNS1RPUCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sY3Vy c2VzICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK LS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBw cm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdo dCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRz IGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1 c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBjbGVhciAoKTsKLWludAotbWFpbiAoKQot ewotcmV0dXJuIGNsZWFyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19m bl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9jdXJzZXNfY2xlYXI9 eWVzCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE1LVE9QIjsgdGhlbgorICBhY19jdl9wcm9n X2FjX2N0X09DQU1MTUtUT1A9IiRhY19jdF9PQ0FNTE1LVE9QIiAjIExldCB0aGUgdXNlciBvdmVy cmlkZSB0aGUgdGVzdC4KIGVsc2UKLSAgYWNfY3ZfbGliX2N1cnNlc19jbGVhcj1ubworYXNfc2F2 ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8K KyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAg IGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBp ZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3gg IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19h Y19jdF9PQ0FNTE1LVE9QPSJvY2FtbG1rdG9wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQor ICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCiBmaQot cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRl c3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJ QlMKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2N2X2xpYl9jdXJzZXNfY2xlYXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfY3Vyc2Vz X2NsZWFyIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2N1cnNlc19jbGVhciIgPSB4IiJ5 ZXM7IHRoZW4gOgotICBjdXJzZXM9InkiCithY19jdF9PQ0FNTE1LVE9QPSRhY19jdl9wcm9nX2Fj X2N0X09DQU1MTUtUT1AKK2lmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE1LVE9QIjsgdGhlbgorICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09D QU1MTUtUT1AiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQ0FNTE1LVE9QIiA+JjY7IH0KIGVsc2UK LSAgY3Vyc2VzPSJuIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQorICBpZiB0ZXN0 ICJ4JGFjX2N0X09DQU1MTUtUT1AiID0geDsgdGhlbgorICAgIE9DQU1MTUtUT1A9Im5vIgorICBl bHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcg Y3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hv ICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhv c3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9DQU1M TUtUT1A9JGFjX2N0X09DQU1MTUtUT1AKKyAgZmkKIGVsc2UKLSAgY3Vyc2VzPSJuIgorICBPQ0FN TE1LVE9QPSIkYWNfY3ZfcHJvZ19PQ0FNTE1LVE9QIgogZmkKIAogCi1hY19mbl9jX2NoZWNrX2hl YWRlcl9tb25ncmVsICIkTElORU5PIiAibmN1cnNlcy5oIiAiYWNfY3ZfaGVhZGVyX25jdXJzZXNf aCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmN1cnNl c19oIiA9IHgiInllczsgdGhlbiA6Ci0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjbGVhciBpbiAtbG5jdXJzZXMiID4mNQotJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIGNsZWFyIGluIC1sbmN1cnNlcy4uLiAiID4mNjsgfQotaWYgdGVz dCAiJHthY19jdl9saWJfbmN1cnNlc19jbGVhcitzZXR9IiA9IHNldDsgdGhlbiA6CisgICMgY2hl Y2tpbmcgZm9yIG9jYW1sbWtsaWIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhl bgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxt a2xpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkg JHthY190b29sX3ByZWZpeH1vY2FtbG1rbGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNf ZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNf Y3ZfcHJvZ19PQ0FNTE1LTElCK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0i LWxuY3Vyc2VzICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRl cm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGlu dCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRo ZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYg X19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBjbGVhciAoKTsKLWludAotbWFp biAoKQotewotcmV0dXJuIGNsZWFyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1p ZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9uY3Vyc2Vz X2NsZWFyPXllcworICBpZiB0ZXN0IC1uICIkT0NBTUxNS0xJQiI7IHRoZW4KKyAgYWNfY3ZfcHJv Z19PQ0FNTE1LTElCPSIkT0NBTUxNS0xJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRl c3QuCiBlbHNlCi0gIGFjX2N2X2xpYl9uY3Vyc2VzX2NsZWFyPW5vCithc19zYXZlX0lGUz0kSUZT OyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFz X3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4 ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAt ZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09DQU1MTUtMSUI9 IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxta2xpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUK KyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKwogZmkK LXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9M SUJTCiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRhY19jdl9saWJfbmN1cnNlc19jbGVhciIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9uY3Vy c2VzX2NsZWFyIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX25jdXJzZXNfY2xlYXIiID0g eCIieWVzOyB0aGVuIDoKLSAgbmN1cnNlcz0ieSIKK09DQU1MTUtMSUI9JGFjX2N2X3Byb2dfT0NB TUxNS0xJQgoraWYgdGVzdCAtbiAiJE9DQU1MTUtMSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxNS0xJQiIgPiY1CiskYXNf ZWNobyAiJE9DQU1MTUtMSUIiID4mNjsgfQogZWxzZQotICBuY3Vyc2VzPSJuIgorICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2Vj aG8gIm5vIiA+JjY7IH0KIGZpCiAKIAotZWxzZQotICBuY3Vyc2VzPSJuIgogZmkKLQotCi1pZiB0 ZXN0ICIkY3Vyc2VzIiA9ICJuIiAmJiB0ZXN0ICIkbmN1cnNlcyIgPSAibiI7IHRoZW4gOgotCi0g ICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgY3Vyc2VzIGxpYnJh cnkiICIkTElORU5PIiA1CitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTE1LTElCIjsgdGhl bgorICBhY19jdF9PQ0FNTE1LTElCPSRPQ0FNTE1LTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qg d29yZCBvZiAib2NhbWxta2xpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFy Z3MuCitzZXQgZHVtbXkgb2NhbWxta2xpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2 X3Byb2dfYWNfY3RfT0NBTUxNS0xJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE1LTElCIjsg dGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MTUtMSUI9IiRhY19jdF9PQ0FNTE1LTElCIiAj IExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7 IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNf c2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhl Y19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1m ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxN S0xJQj0ib2NhbWxta2xpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAy CisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKLSMgUHJlZmVyIG5j dXJzZXMgb3ZlciBjdXJzZXMgaWYgYm90aCBhcmUgcHJlc2VudAotaWYgdGVzdCAiJG5jdXJzZXMi ID0gInkiOyB0aGVuIDoKLQotICAgIENVUlNFU19MSUJTPSItbG5jdXJzZXMiCi0KLSRhc19lY2hv ICIjZGVmaW5lIElOQ0xVREVfQ1VSU0VTX0ggPG5jdXJzZXMuaD4iID4+Y29uZmRlZnMuaAotCi0K K2ZpCithY19jdF9PQ0FNTE1LTElCPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MTUtMSUIKK2lmIHRl c3QgLW4gIiRhY19jdF9PQ0FNTE1LTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MTUtMSUIiID4mNQorJGFzX2Vj aG8gIiRhY19jdF9PQ0FNTE1LTElCIiA+JjY7IH0KIGVsc2UKLQotICAgIENVUlNFU19MSUJTPSIt bGN1cnNlcyIKLQotJGFzX2VjaG8gIiNkZWZpbmUgSU5DTFVERV9DVVJTRVNfSCA8Y3Vyc2VzLmg+ IiA+PmNvbmZkZWZzLmgKLQotCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorICBpZiB0 ZXN0ICJ4JGFjX2N0X09DQU1MTUtMSUIiID0geDsgdGhlbgorICAgIE9DQU1MTUtMSUI9Im5vIgor ICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVz OikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNp bmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19l Y2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRo IGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9D QU1MTUtMSUI9JGFjX2N0X09DQU1MTUtMSUIKKyAgZmkKK2Vsc2UKKyAgT0NBTUxNS0xJQj0iJGFj X2N2X3Byb2dfT0NBTUxNS0xJQiIKK2ZpCiAKIAotCi0KLQotCi0KLWlmIHRlc3QgIngkYWNfY3Zf ZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KLQlpZiB0ZXN0IC1uICIkYWNfdG9v bF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29s X3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJn cy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKKyAg IyBjaGVja2luZyBmb3Igb2NhbWxkb2MKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4Ijsg dGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2Nh bWxkb2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15 ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxkb2M7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19l Y2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19j dl9wYXRoX1BLR19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9w cm9nX09DQU1MRE9DK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYKIGVsc2UKLSAgY2FzZSAkUEtHX0NPTkZJRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikK LSAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3Zl cnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJ RlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAiJE9DQU1MRE9DIjsgdGhlbgor ICBhY19jdl9wcm9nX09DQU1MRE9DPSIkT0NBTUxET0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRl IHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgog Zm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIk YXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0 YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9 OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfT0NBTUxET0M9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxk b2MiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFz X2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAtNjk0 MSwxMyArNDU5NiwxMiBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAotICA7Owot ZXNhYwogZmkKLVBLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRwotaWYgdGVzdCAtbiAi JFBLR19DT05GSUciOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1Ci0kYXNfZWNobyAiJFBLR19DT05GSUciID4m NjsgfQorZmkKK09DQU1MRE9DPSRhY19jdl9wcm9nX09DQU1MRE9DCitpZiB0ZXN0IC1uICIkT0NB TUxET0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkT0NBTUxET0MiID4mNQorJGFzX2VjaG8gIiRPQ0FNTERPQyIgPiY2OyB9CiBlbHNl CiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIg PiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQpAQCAtNjk1NSwyOCArNDYwOSwyNiBAQCBmaQogCiAK IGZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgotICBhY19wdF9Q S0dfQ09ORklHPSRQS0dfQ09ORklHCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtn LWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVt bXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxE T0MiOyB0aGVuCisgIGFjX2N0X09DQU1MRE9DPSRPQ0FNTERPQworICAjIEV4dHJhY3QgdGhlIGZp cnN0IHdvcmQgb2YgIm9jYW1sZG9jIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGgg YXJncy4KK3NldCBkdW1teSBvY2FtbGRvYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2 X3BhdGhfYWNfcHRfUEtHX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2Fj X2N2X3Byb2dfYWNfY3RfT0NBTUxET0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCi0gIFtc XC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9Q S0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4K LSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBp ZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxET0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0NB TUxET0M9IiRhY19jdF9PQ0FNTERPQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qu CitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGly IGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYm IGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVu c2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIg JiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAg ICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERPQz0ib2NhbWxkb2MiCiAgICAgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAtNjk4NCwyMCArNDYzNiwxOSBA QCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAotICA7OwotZXNhYwogZmkKLWFjX3B0 X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRwotaWYgdGVzdCAtbiAiJGFj X3B0X1BLR19DT05GSUciOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1Ci0kYXNfZWNobyAiJGFjX3B0 X1BLR19DT05GSUciID4mNjsgfQorZmkKK2FjX2N0X09DQU1MRE9DPSRhY19jdl9wcm9nX2FjX2N0 X09DQU1MRE9DCitpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxET0MiOyB0aGVuCisgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxET0Mi ID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQ0FNTERPQyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNo byAibm8iID4mNjsgfQogZmkKIAotICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsg dGhlbgotICAgIFBLR19DT05GSUc9IiIKKyAgaWYgdGVzdCAieCRhY19jdF9PQ0FNTERPQyIgPSB4 OyB0aGVuCisgICAgT0NBTUxET0M9Im5vIgogICBlbHNlCiAgICAgY2FzZSAkY3Jvc3NfY29tcGls aW5nOiRhY190b29sX3dhcm5lZCBpbgogeWVzOikKQEAgLTcwMDUsNjI0ICs0NjU2LDcxOCBAQCB5 ZXM6KQogJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHBy ZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQogYWNfdG9vbF93YXJuZWQ9eWVzIDs7CiBl c2FjCi0gICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICAgIE9DQU1MRE9DPSRhY19j dF9PQ0FNTERPQwogICBmaQogZWxzZQotICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09O RklHIgotZmkKLQotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotCV9wa2dfbWlu X3ZlcnNpb249MC45LjAKLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lv biIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNp b24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KLQlpZiAkUEtHX0NPTkZJRyAtLWF0bGVh c3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KLQkJeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNo byAieWVzIiA+JjY7IH0KLQllbHNlCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCQlQS0dfQ09O RklHPSIiCi0JZmkKLWZpCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdsaWIiID4mNQotJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIGdsaWIuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJGdsaWJfQ0ZMQUdTIjsg dGhlbgotICAgIHBrZ19jdl9nbGliX0NGTEFHUz0iJGdsaWJfQ0ZMQUdTIgotIGVsaWYgdGVzdCAt biAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwK LSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09O RklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2xpYi0yLjBcIiI7IH0gPiY1Ci0gICgkUEtH X0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAiKSAyPiY1Ci0gIGFjX3N0 YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAk YWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3Zf Z2xpYl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJnbGliLTIuMCIgMj4vZGV2L251bGxg Ci1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotIGVsc2UKLSAgICBwa2dfZmFpbGVkPXVudHJp ZWQKLWZpCi1pZiB0ZXN0IC1uICIkZ2xpYl9MSUJTIjsgdGhlbgotICAgIHBrZ19jdl9nbGliX0xJ QlM9IiRnbGliX0xJQlMiCi0gZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBp ZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMg XCJnbGliLTIuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJy b3JzICJnbGliLTIuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19z dGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9nbGliX0xJQlM9YCRQS0dfQ09ORklHIC0tbGli cyAiZ2xpYi0yLjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSBl bHNlCi0gICAgcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxl ZCA9IHllczsgdGhlbgotICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi1pZiAkUEtHX0NPTkZJ RyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3No b3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3Jz X3N1cHBvcnRlZD1ubworICBPQ0FNTERPQz0iJGFjX2N2X3Byb2dfT0NBTUxET0MiCiBmaQotICAg ICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkg ICAgICAgIGdsaWJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmlu dC1lcnJvcnMgImdsaWItMi4wIiAyPiYxYAotICAgICAgICBlbHNlCi0JICAgICAgICBnbGliX1BL R19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICJnbGliLTIuMCIgMj4mMWAKLSAg ICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdo ZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkZ2xpYl9QS0dfRVJST1JTIiA+JjUKLQotCWFzX2ZuX2Vy cm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoZ2xpYi0yLjApIHdlcmUgbm90IG1ldDoKLQot JGdsaWJfUEtHX0VSUk9SUwotCi1Db25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFU SCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKLWluc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5v bi1zdGFuZGFyZCBwcmVmaXguCi0KLUFsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZp cm9ubWVudCB2YXJpYWJsZXMgZ2xpYl9DRkxBR1MKLWFuZCBnbGliX0xJQlMgdG8gYXZvaWQgdGhl IG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgotU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZv ciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50 cmllZDsgdGhlbgotICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0JeyB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0k YXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJv ciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28g b2xkLiAgTWFrZSBzdXJlIGl0Ci1pcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklH IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCi1wYXRoIHRvIHBrZy1jb25maWcuCiAK LUFsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZ2xp Yl9DRkxBR1MKLWFuZCBnbGliX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29u ZmlnLgotU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCiAKLVRv IGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+ LgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9Cisg ICMgY2hlY2tpbmcgZm9yIG9jYW1sYnVpbGQKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4 IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9 b2NhbWxidWlsZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQg ZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbGJ1aWxkOyBhY193b3JkPSQyCit7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1 CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3Qg IiR7YWNfY3ZfcHJvZ19PQ0FNTEJVSUxEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLQlnbGliX0NGTEFHUz0kcGtnX2N2X2dsaWJfQ0ZMQUdT Ci0JZ2xpYl9MSUJTPSRwa2dfY3ZfZ2xpYl9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIg PiY2OyB9Ci0KLWZpCi0KLSMgQ2hlY2sgbGlicmFyeSBwYXRoCi1pZiB0ZXN0ICJcJHtleGVjX3By ZWZpeH0vbGliIiA9ICIkbGliZGlyIjsgdGhlbiA6Ci0gIGlmIHRlc3QgIiRleGVjX3ByZWZpeCIg PSAiTk9ORSIgJiYgdGVzdCAiJHByZWZpeCIgIT0gIk5PTkUiOyB0aGVuIDoKLSAgZXhlY19wcmVm aXg9JHByZWZpeAotZmkKLSAgICBpZiB0ZXN0ICIkZXhlY19wcmVmaXgiID0gIk5PTkUiOyB0aGVu IDoKLSAgZXhlY19wcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Ci1maQotICAgIGlmIHRlc3QgLWQg IiR7ZXhlY19wcmVmaXh9L2xpYjY0IjsgdGhlbiA6Ci0KLSAgICAgICAgTElCX1BBVEg9ImxpYjY0 IgotCisgIGlmIHRlc3QgLW4gIiRPQ0FNTEJVSUxEIjsgdGhlbgorICBhY19jdl9wcm9nX09DQU1M QlVJTEQ9IiRPQ0FNTEJVSUxEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVs c2UKLQotICAgICAgICBMSUJfUEFUSD0ibGliIgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRI X1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUwor ICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAn JyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQ0FNTEJVSUxEPSIke2FjX3Rvb2xf cHJlZml4fW9jYW1sYnVpbGQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsg MgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCi0KLWVsc2UKLQot ICAgIExJQl9QQVRIPSIke2xpYmRpcjpgZXhwciBsZW5ndGggIiRleGVjX3ByZWZpeCIgKyAxYH0i Ci0KIGZpCi0KLQotIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KLWFjX2ZuX2NfY2hlY2tfaGVhZGVy X21vbmdyZWwgIiRMSU5FTk8iICJiemxpYi5oIiAiYWNfY3ZfaGVhZGVyX2J6bGliX2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2J6bGliX2giID0geCIi eWVzOyB0aGVuIDoKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3IgQloyX2J6RGVjb21wcmVzc0luaXQgaW4gLWxiejIiID4mNQotJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yIEJaMl9iekRlY29tcHJlc3NJbml0IGluIC1sYnoyLi4uICIgPiY2OyB9 Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzc0luaXQrc2V0fSIgPSBz ZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVj a19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGJ6MiAgJExJQlMiCi1jYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0K LS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9y LgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9m IGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQg c3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYK LWNoYXIgQloyX2J6RGVjb21wcmVzc0luaXQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBC WjJfYnpEZWNvbXByZXNzSW5pdCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYg YWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfYnoyX0JaMl9i ekRlY29tcHJlc3NJbml0PXllcworT0NBTUxCVUlMRD0kYWNfY3ZfcHJvZ19PQ0FNTEJVSUxECitp ZiB0ZXN0IC1uICIkT0NBTUxCVUlMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTEJVSUxEIiA+JjUKKyRhc19lY2hvICIkT0NB TUxCVUlMRCIgPiY2OyB9CiBlbHNlCi0gIGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzc0lu aXQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwK LSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tf bGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3ZfbGliX2J6Ml9CWjJfYnpEZWNvbXByZXNzSW5pdCIgPiY1Ci0kYXNf ZWNobyAiJGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzc0luaXQiID4mNjsgfQotaWYgdGVz dCAieCRhY19jdl9saWJfYnoyX0JaMl9iekRlY29tcHJlc3NJbml0IiA9IHgiInllczsgdGhlbiA6 Ci0gIHpsaWI9IiR6bGliIC1ESEFWRV9CWkxJQiAtbGJ6MiIKKyAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2 OyB9CiBmaQogCiAKIGZpCi0KLQotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVO TyIgImx6bWEuaCIgImFjX2N2X2hlYWRlcl9sem1hX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIK LWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2x6bWFfaCIgPSB4IiJ5ZXM7IHRoZW4gOgotCi17ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsem1hX3N0 cmVhbV9kZWNvZGVyIGluIC1sbHptYSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgbHpt YV9zdHJlYW1fZGVjb2RlciBpbiAtbGx6bWEuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zf bGliX2x6bWFfbHptYV9zdHJlYW1fZGVjb2RlcitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0 IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTEJVSUxEIjsgdGhlbgorICBhY19jdF9PQ0FNTEJVSUxEPSRP Q0FNTEJVSUxECisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxidWlsZCIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2NhbWxidWls ZDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193 b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0NBTUxCVUlMRCtz ZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0g IGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbHptYSAgJExJQlMiCi1jYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMu aC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lk IGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVy biB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5 cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMi Ci0jZW5kaWYKLWNoYXIgbHptYV9zdHJlYW1fZGVjb2RlciAoKTsKLWludAotbWFpbiAoKQotewot cmV0dXJuIGx6bWFfc3RyZWFtX2RlY29kZXIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNF T0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2x6 bWFfbHptYV9zdHJlYW1fZGVjb2Rlcj15ZXMKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MQlVJ TEQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxCVUlMRD0iJGFjX2N0X09DQU1MQlVJ TEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxzZQotICBhY19jdl9saWJf bHptYV9sem1hX3N0cmVhbV9kZWNvZGVyPW5vCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhf U0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisg IHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcn ICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQ9Im9jYW1s YnVpbGQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQg JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9u ZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKIGZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3Qu JGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2x6bWFfbHptYV9z dHJlYW1fZGVjb2RlciIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9sem1hX2x6bWFfc3RyZWFt X2RlY29kZXIiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbHptYV9sem1hX3N0cmVhbV9k ZWNvZGVyIiA9IHgiInllczsgdGhlbiA6Ci0gIHpsaWI9IiR6bGliIC1ESEFWRV9MWk1BIC1sbHpt YSIKK2FjX2N0X09DQU1MQlVJTEQ9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxCVUlMRAoraWYgdGVz dCAtbiAiJGFjX2N0X09DQU1MQlVJTEQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxCVUlMRCIgPiY1CiskYXNfZWNo byAiJGFjX2N0X09DQU1MQlVJTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7 IH0KIGZpCiAKLQorICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MQlVJTEQiID0geDsgdGhlbgorICAg IE9DQU1MQlVJTEQ9Im5vIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190 b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0 cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xz IG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXll cyA7OworZXNhYworICAgIE9DQU1MQlVJTEQ9JGFjX2N0X09DQU1MQlVJTEQKKyAgZmkKK2Vsc2UK KyAgT0NBTUxCVUlMRD0iJGFjX2N2X3Byb2dfT0NBTUxCVUlMRCIKIGZpCiAKIAotYWNfZm5fY19j aGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImx6by9sem8xeC5oIiAiYWNfY3ZfaGVhZGVy X2x6b19sem8xeF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hl YWRlcl9sem9fbHpvMXhfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICAgIGlmIHRlc3QgIngkT0NBTUxD IiA9ICJ4bm8iOyB0aGVuIDoKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgbHpvMXhfZGVjb21wcmVzcyBpbiAtbGx6bzIiID4mNQotJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIGx6bzF4X2RlY29tcHJlc3MgaW4gLWxsem8yLi4uICIgPiY2OyB9 Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3Mrc2V0fSIgPSBzZXQ7 IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19s aWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGx6bzIgICRMSUJTIgotY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLworICAg ICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9vY2FtbHRvb2xzIiA9ICJ4eWVzIjsgdGhlbiA6CiAKLS8q IE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgot ICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEg R0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3Rp bGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNo YXIgbHpvMXhfZGVjb21wcmVzcyAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGx6bzF4X2Rl Y29tcHJlc3MgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21wcmVz cz15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21wcmVzcz1ubwotZmkKLXJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJT CisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiT2NhbWwgdG9vbHMgZW5hYmxlZCwgYnV0IHVu YWJsZSB0byBmaW5kIE9jYW1sIiAiJExJTkVOTyIgNQogZmkKLXsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21w cmVzcyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3MiID4m NjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzIiA9IHgiInll czsgdGhlbiA6Ci0gIHpsaWI9IiR6bGliIC1ESEFWRV9MWk8xWCAtbGx6bzIiCisgICAgICAgIG9j YW1sdG9vbHM9Im4iCisKIGZpCiAKK2ZpCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImJh c2giLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGJh c2g7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNf d29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0JBU0grc2V0fSIgPSBzZXQ7 IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRCQVNI IGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0JBU0g9IiRCQVNIIiAjIExl dCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAg YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFU SAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9 LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBk bworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190 ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3Zf cGF0aF9CQVNIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZl X0lGUwogCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0JBU0giICYmIGFjX2N2X3BhdGhfQkFTSD0i bm8iCisgIDs7Citlc2FjCitmaQorQkFTSD0kYWNfY3ZfcGF0aF9CQVNICitpZiB0ZXN0IC1uICIk QkFTSCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRCQVNIIiA+JjUKKyRhc19lY2hvICIkQkFTSCIgPiY2OyB9CitlbHNlCisgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNf ZWNobyAibm8iID4mNjsgfQogZmkKIAogCitpZiB0ZXN0IHgiJHtCQVNIfSIgPT0geCJubyIKK3Ro ZW4KKyAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgYmFzaCwgcGxlYXNlIGluc3Rh bGwgYmFzaCIgIiRMSU5FTk8iIDUKK2ZpCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlvX3NldHVwIGluIC1sYWlvIiA+JjUKLSRhc19lY2hv X24gImNoZWNraW5nIGZvciBpb19zZXR1cCBpbiAtbGFpby4uLiAiID4mNjsgfQotaWYgdGVzdCAi JHthY19jdl9saWJfYWlvX2lvX3NldHVwK3NldH0iID0gc2V0OyB0aGVuIDoKK2FjX2V4dD1jCith Y19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZM QUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4m NScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVw cm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVw cm9jZXNzb3IuLi4gIiA+JjY7IH0KKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBk aXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBD UFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgdGVzdCAiJHthY19jdl9wcm9n X0NQUCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBl bHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sYWlvICAkTElCUyIK LWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICMgRG91 YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAg aW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8K KyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGlu ICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBz byBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jr cy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRl ZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcg Y29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2gg dGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4 IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBP dmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAg IFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdD QwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxs IGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgorI2lmZGVmIF9fU1RE Q19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CiAj ZW5kaWYKLWNoYXIgaW9fc2V0dXAgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBpb19zZXR1 cCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KKwkJICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgot aWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfYWlvX2lv X3NldHVwPXllcworaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKIGVsc2UK LSAgYWNfY3ZfbGliX2Fpb19pb19zZXR1cD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4k YWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgICMgQnJva2VuOiBmYWlscyBv biB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYWlvX2lvX3NldHVwIiA+JjUKLSRhc19l Y2hvICIkYWNfY3ZfbGliX2Fpb19pb19zZXR1cCIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xp Yl9haW9faW9fc2V0dXAiID0geCIieWVzOyB0aGVuIDoKLSAgc3lzdGVtX2Fpbz0ieSIKK3JtIC1m IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3Jr cyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwor ICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNf bm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhl biA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQogZWxz ZQotICBzeXN0ZW1fYWlvPSJuIgorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19v az06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRh Y19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdz IGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCiBm aQogCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKIAoteyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTUQ1IGluIC1sY3J5cHRvIiA+ JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBNRDUgaW4gLWxjcnlwdG8uLi4gIiA+JjY7IH0K LWlmIHRlc3QgIiR7YWNfY3ZfbGliX2NyeXB0b19NRDUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAogZWxz ZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGNyeXB0byAgJExJQlMi Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X3By b2dfQ1BQPSRDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CithY19wcmVwcm9jX29r PWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNl IGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMK KyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1p dHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxs aW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0 aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNl ciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBj YXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRl cm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGlu dCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRo ZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYg X19jcGx1c3BsdXMKLWV4dGVybiAiQyIKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1p dHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgogI2VuZGlmCi1jaGFyIE1ENSAoKTsK LWludAotbWFpbiAoKQotewotcmV0dXJuIE1ENSAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KKwkJ ICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7 IHRoZW4gOgotICBhY19jdl9saWJfY3J5cHRvX01ENT15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAi JExJTkVOTyI7IHRoZW4gOgorCiBlbHNlCi0gIGFjX2N2X2xpYl9jcnlwdG9fTUQ1PW5vCi1maQot cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRl c3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJ QlMKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKIGZpCi17ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9j cnlwdG9fTUQ1IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2NyeXB0b19NRDUiID4mNjsgfQot aWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX01ENSIgPSB4IiJ5ZXM7IHRoZW4gOgotICBjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEKK3JtIC1mIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBv biBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAj IGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9u ZXhpc3RlbnQuaD4KIF9BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6 CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQor ICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1m IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAotICBMSUJTPSItbGNy eXB0byAkTElCUyIKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVM U0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgogCiBlbHNl Ci0gIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBsaWJjcnlwdG8iICIkTElORU5PIiA1 CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4g XGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6 IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNh bml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8i IDUgOyB9CiBmaQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciBleHQyZnNfb3BlbjIgaW4gLWxleHQyZnMiID4mNQotJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIGV4dDJmc19vcGVuMiBpbiAtbGV4dDJmcy4uLiAiID4mNjsgfQotaWYgdGVzdCAi JHthY19jdl9saWJfZXh0MmZzX2V4dDJmc19vcGVuMitzZXR9IiA9IHNldDsgdGhlbiA6CithY19l eHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdT ICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVz dCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAk TElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0 aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiB0 ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJ QlM9Ii1sZXh0MmZzICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0 aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNl cidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lG Uz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQ QVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIk YXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisg ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisg ICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7 IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9 IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQg aWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAi JGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9H UkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3Vu dD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6Cisg IGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIK KyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0Lmlu IiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAg ICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29u ZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYg ImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAg ICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0 ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJl c3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUK KyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JF UF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBz ZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFr CisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNv bmZ0ZXN0Lm91dDs7Citlc2FjCiAKLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90 eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0 Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1 bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVz Ci1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZXh0MmZzX29wZW4yICgpOwotaW50Ci1tYWluICgp Ci17Ci1yZXR1cm4gZXh0MmZzX29wZW4yICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9G Ci1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9leHQy ZnNfZXh0MmZzX29wZW4yPXllcworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAz CisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAt eiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0 YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0 L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKIGVsc2UKLSAgYWNfY3ZfbGliX2V4dDJmc19leHQyZnNf b3BlbjI9bm8KKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCiBmaQotcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0 ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKwogZmkKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2V4dDJm c19leHQyZnNfb3BlbjIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfZXh0MmZzX2V4dDJmc19v cGVuMiIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9leHQyZnNfZXh0MmZzX29wZW4yIiA9 IHgiInllczsgdGhlbiA6Ci0gIGxpYmV4dDJmcz0ieSIKK3sgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hv ICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVn cmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYg dGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgbGliZXh0MmZzPSJuIgorICBpZiBlY2hvIGEgfCAk R1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQ PSIkR1JFUCAtRSIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICBh Y19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0 aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7 IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1Iv dXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIi ICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgICAgZm9yIGFjX2V4 ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRo X0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIk YWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRp bnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlz IGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0 aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0i JGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0w CisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRv CisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAg ICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAi Y29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAg IiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQi IDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3Qu bmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCAr IDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3Bh dGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBi dXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9 IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAg ZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdo CisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29u ZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisK KyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUK KyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JF UCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBi ZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1 CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCiBmaQogCisgICBmaQorZmkK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zf cGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVH UkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2NyeV9tZF9oYXNoX2J1ZmZlciBpbiAtbGdjcnlwdCIg PiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2NyeV9tZF9oYXNoX2J1ZmZlciBpbiAtbGdj cnlwdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZ2NyeXB0X2djcnlfbWRfaGFz aF9idWZmZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRh c19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9Citp ZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElC UwotTElCUz0iLWxnY3J5cHQgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk ZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KIAot LyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3Iu Ci0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2Yg YSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBz dGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgot Y2hhciBnY3J5X21kX2hhc2hfYnVmZmVyICgpOwogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gZ2Ny eV9tZF9oYXNoX2J1ZmZlciAoKTsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1pZiBh Y19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9nY3J5cHRfZ2Ny eV9tZF9oYXNoX2J1ZmZlcj15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCiBlbHNlCi0gIGFjX2N2X2xpYl9nY3J5cHRf Z2NyeV9tZF9oYXNoX2J1ZmZlcj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0 Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBm aQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9saWJfZ2NyeXB0X2djcnlfbWRfaGFzaF9idWZmZXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9s aWJfZ2NyeXB0X2djcnlfbWRfaGFzaF9idWZmZXIiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9s aWJfZ2NyeXB0X2djcnlfbWRfaGFzaF9idWZmZXIiID0geCIieWVzOyB0aGVuIDoKLSAgbGliZ2Ny eXB0PSJ5Igorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisg ICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8g QU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyog ZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChl dmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIi ID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKLSAgbGliZ2NyeXB0PSJuIgorICBhY19j dl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCiBmaQogCitpZiB0ZXN0ICRh Y19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2Vz IG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNs dWRlIDxzdGRsaWIuaD4KIAorX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNf ZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKIAot ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IHB0aHJlYWQgZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZCBmbGFn Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2F4X2N2X3B0aHJlYWRfZmxhZ3Mrc2V0fSIgPSBzZXQ7 IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQorICBhY19jdl9oZWFk ZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgogCi0gICAgICAgIGF4X2N2X3B0aHJlYWRf ZmxhZ3M9LXB0aHJlYWQKK2ZpCiAKLSAgICBQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X3B0aHJlYWRf ZmxhZ3MiCi0gICAgUFRIUkVBRF9MREZMQUdTPSIkYXhfY3ZfcHRocmVhZF9mbGFncyIKLSAgICBQ VEhSRUFEX0xJQlM9IiIKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisg ICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVz cyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4g OgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dF UihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNM T1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9X RVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgn aicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykg PD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkg OiAoYykpCisjZW5kaWYKIAorI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEo ZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8 IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0 b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsK K30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAKLSAgICBz YXZlZF9DRkxBR1M9IiRDRkxBR1MiCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQor cm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVz dCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRl c3QuJGFjX2V4dAorZmkKIAotICAgIHNhdmVkX0xERkxBR1M9IiRMREZMQUdTIgorZmkKK2ZpCit7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hl YWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYg dGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KIAotICAgIHNhdmVkX0xJQlM9IiRM SUJTIgorJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAogCitm aQogCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyMgT24gSVJJWCA1LjMs IHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitmb3IgYWNfaGVhZGVy IGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3Ry aW5ncy5oIFwKKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbyA6CisgIGFzX2Fj X0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAK K2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFz X2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQi JGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAg MQorX0FDRU9GCiAKLSAgICBMREZMQUdTPSIkTERGTEFHUyAkUFRIUkVBRF9MREZMQUdTIgorZmkK IAotICAgIExJQlM9IiRMSUJTICRQVEhSRUFEX0xJQlMiCitkb25lCiAKLSAgICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmgu ICAqLwogCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotaW50IG1haW4odm9pZCkgewotICBwdGhyZWFk X2F0Zm9yaygwLDAsMCk7Ci0gIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOwotfQoraWYgdGVzdCAi eCRweXRob250b29scyIgPSAieHkiOyB0aGVuIDoKIAotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9s aW5rICIkTElORU5PIjsgdGhlbiA6CisgICAgaWYgZWNobyAiJFBZVEhPTiIgfCBncmVwIC1xICJe LyI7IHRoZW4gOgogCisgICAgICAgIFBZVEhPTlBBVEg9JFBZVEhPTgorICAgICAgICBQWVRIT049 YGJhc2VuYW1lICRQWVRIT05QQVRIYAorCitlbGlmIHRlc3QgLXogIiRQWVRIT04iOyB0aGVuIDoK KyAgUFlUSE9OPSJweXRob24iCiBlbHNlCi0gIGF4X2N2X3B0aHJlYWRfZmxhZ3M9ZmFpbGVkCisg IGFzX2ZuX2Vycm9yICQ/ICJQWVRIT04gc3BlY2lmaWVkLCBidXQgaXMgbm90IGFuIGFic29sdXRl IHBhdGgiICIkTElORU5PIiA1CiBmaQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3Qu JGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAg ICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRQWVRIT04iLCBzbyBpdCBjYW4gYmUgYSBw cm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRQWVRIT047IGFjX3dvcmQ9JDIKK3sg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193 b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQor aWYgdGVzdCAiJHthY19jdl9wYXRoX1BZVEhPTlBBVEgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQWVRIT05QQVRIIGluCisg IFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BZVEhPTlBBVEg9IiRQWVRIT05QQVRI IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAg KikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBp biAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBh c19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNp b25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYm ICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAg YWNfY3ZfcGF0aF9QWVRIT05QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAg ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQor SUZTPSRhc19zYXZlX0lGUwogCi0gICAgQ0ZMQUdTPSIkc2F2ZWRfQ0ZMQUdTIgorICB0ZXN0IC16 ICIkYWNfY3ZfcGF0aF9QWVRIT05QQVRIIiAmJiBhY19jdl9wYXRoX1BZVEhPTlBBVEg9Im5vIgor ICA7OworZXNhYworZmkKK1BZVEhPTlBBVEg9JGFjX2N2X3BhdGhfUFlUSE9OUEFUSAoraWYgdGVz dCAtbiAiJFBZVEhPTlBBVEgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkUFlUSE9OUEFUSCIgPiY1CiskYXNfZWNobyAiJFBZVEhPTlBB VEgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKLSAgICBMREZM QUdTPSIkc2F2ZWRfTERGTEFHUyIKIAotICAgIExJQlM9IiRzYXZlZF9MSUJTIgoraWYgdGVzdCB4 IiR7UFlUSE9OUEFUSH0iID09IHgibm8iCit0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJs ZSB0byBmaW5kICRQWVRIT04sIHBsZWFzZSBpbnN0YWxsICRQWVRIT04iICIkTElORU5PIiA1Citm aQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIHB5dGhvbiB2ZXJzaW9uID49IDIuMyAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IHB5dGhvbiB2ZXJzaW9uID49IDIuMyAuLi4gIiA+JjY7IH0KK2AkUFlUSE9OIC1jICdpbXBvcnQg c3lzOyBzeXMuZXhpdChldmFsKCJzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDMpIikpJ2AKK2lmIHRl c3QgIiQ/IiAhPSAiMCIKK3RoZW4KKyAgICBweXRob25fdmVyc2lvbj1gJFBZVEhPTiAtViAyPiYx YAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu byIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICIkcHl0aG9u X3ZlcnNpb24gaXMgdG9vIG9sZCwgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIGlzIDIuMyIgIiRM SU5FTk8iIDUKK2Vsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZmkKIAorYWNfcHJl dmlvdXNfY3BwZmxhZ3M9JENQUEZMQUdTCithY19wcmV2aW91c19sZGZsYWdzPSRMREZMQUdTCith Y19weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7 IFwKKyAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJWRVJTSU9O IiknYAorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkUFlUSE9OLWNvbmZpZyIsIHNvIGl0 IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJFBZVEhPTi1jb25m aWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNf d29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX3B5Y29uZmlnK3NldH0iID0g c2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAk cHljb25maWcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfcHljb25maWc9 IiRweWNvbmZpZyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGgu CisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2Zv ciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFz X2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFi bGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsg dGhlbgorICAgIGFjX2N2X3BhdGhfcHljb25maWc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFz X2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQor ICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfcHljb25m aWciICYmIGFjX2N2X3BhdGhfcHljb25maWc9Im5vIgorICA7OworZXNhYworZmkKK3B5Y29uZmln PSRhY19jdl9wYXRoX3B5Y29uZmlnCitpZiB0ZXN0IC1uICIkcHljb25maWciOyB0aGVuCisgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcHljb25maWci ID4mNQorJGFzX2VjaG8gIiRweWNvbmZpZyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8i ID4mNjsgfQogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkYXhfY3ZfcHRocmVhZF9mbGFncyIgPiY1Ci0kYXNfZWNobyAiJGF4X2N2X3B0aHJlYWRf ZmxhZ3MiID4mNjsgfQotICAgIGlmIHRlc3QgIngkYXhfY3ZfcHRocmVhZF9mbGFncyIgPSB4ZmFp bGVkOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICItcHRocmVhZCBkb2VzIG5vdCB3b3Jr IiAiJExJTkVOTyIgNQotICAgIGZpCi0KLSAgICBQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X3B0aHJl YWRfZmxhZ3MiCi0gICAgUFRIUkVBRF9MREZMQUdTPSIkYXhfY3ZfcHRocmVhZF9mbGFncyIKLSAg ICBQVEhSRUFEX0xJQlM9IiIKIAogCitpZiB0ZXN0IHgiJHB5Y29uZmlnIiA9PSB4Im5vIjsgdGhl biA6CiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIGNsb2NrX2dldHRpbWUgaW4gLWxydCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Ig Y2xvY2tfZ2V0dGltZSBpbiAtbHJ0Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9y dF9jbG9ja19nZXR0aW1lK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxy dCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0v KiBlbmQgY29uZmRlZnMuaC4gICovCisgICAgICAgIENQUEZMQUdTPSIkQ0ZMQUdTIGAkUFlUSE9O IC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgXAorICAgICAgICBwcmludCAiLUkiICsg ZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERVBZIiknYCIKKyAgICBD UFBGTEFHUz0iJENQUEZMQUdTIGAkUFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZp ZzsgXAorICAgICAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJD RkxBR1MiKSdgIgorICAgIExERkxBR1M9IiRMREZMQUdTIGAkUFlUSE9OIC1jICdpbXBvcnQgZGlz dHV0aWxzLnN5c2NvbmZpZzsgXAorICAgICAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdl dF9jb25maWdfdmFyKCJMSUJTIiknYCIKKyAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZVEhPTiAt YyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKKyAgICAgICAgcHJpbnQgZGlzdHV0aWxz LnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiU1lTTElCUyIpJ2AiCisgICAgTERGTEFHUz0iJExE RkxBR1MgYCRQWVRIT04gLWMgJ2ltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyBcCisgICAgICAg IHByaW50ICItTCIgKyBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3Bl Y2lmaWM9MSxcCisgICAgICAgIHN0YW5kYXJkX2xpYj0xKSArICIvY29uZmlnIidgIgorICAgIExE RkxBR1M9IiRMREZMQUdTIGAkUFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsg XAorICAgICAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSU5L Rk9SU0hBUkVEIiknYCIKKyAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0 IGRpc3R1dGlscy5zeXNjb25maWc7IFwKKyAgICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZp Zy5nZXRfY29uZmlnX3ZhcigiTERGTEFHUyIpJ2AiCiAKLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50 ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBp bnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0 aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVm IF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgY2xvY2tfZ2V0dGltZSAoKTsK LWludAotbWFpbiAoKQotewotcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7Ci0gIDsKLSAgcmV0dXJu IDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAg YWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWU9eWVzCiBlbHNlCi0gIGFjX2N2X2xpYl9ydF9jbG9j a19nZXR0aW1lPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29i amV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFj X2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA+JjUKLSRhc19l Y2hvICIkYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWUiID4mNjsgfQotaWYgdGVzdCAieCRhY19j dl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPSB4IiJ5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCUlQgMQotX0FDRU9GCiAKLSAgTElCUz0iLWxy dCAkTElCUyIKKyAgICAgICAgQ1BQRkxBR1M9IiRDRkxBR1MgYCRQWVRIT04tY29uZmlnIC0tY2Zs YWdzYCIKKyAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZVEhPTi1jb25maWcgLS1sZGZsYWdzYCIK IAogZmkKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgeWFqbF9hbGxvYyBpbiAtbHlhamwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IHlhamxfYWxsb2MgaW4gLWx5YWpsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl95 YWpsX3lhamxfYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHlh amwgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAot LyogZW5kIGNvbmZkZWZzLmguICAqLworYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJ TkVOTyIgIlB5dGhvbi5oIiAiYWNfY3ZfaGVhZGVyX1B5dGhvbl9oIiAiJGFjX2luY2x1ZGVzX2Rl ZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9QeXRob25faCIgPSB4IiJ5ZXM7IHRoZW4g OgogCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBl cnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlw ZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdv dWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2Vu ZGlmCi1jaGFyIHlhamxfYWxsb2MgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiB5YWpsX2Fs bG9jICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5r ICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl95YWpsX3lhamxfYWxsb2M9eWVzCiBlbHNl Ci0gIGFjX2N2X2xpYl95YWpsX3lhamxfYWxsb2M9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRl c3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworICBhc19mbl9lcnJvciAk PyAiVW5hYmxlIHRvIGZpbmQgUHl0aG9uIGRldmVsb3BtZW50IGhlYWRlcnMiICIkTElORU5PIiA1 CiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9saWJfeWFqbF95YWpsX2FsbG9jIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX3lhamxf eWFqbF9hbGxvYyIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl95YWpsX3lhamxfYWxsb2Mi ID0geCIieWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBI QVZFX0xJQllBSkwgMQotX0FDRU9GCi0KLSAgTElCUz0iLWx5YWpsICRMSUJTIgogCi1lbHNlCi0g IGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCB5YWpsIiAiJExJTkVOTyIgNQotZmkKIAot eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGVm bGF0ZUNvcHkgaW4gLWx6IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBkZWZsYXRlQ29w eSBpbiAtbHouLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3pfZGVmbGF0ZUNvcHkr c2V0fSIgPSBzZXQ7IHRoZW4gOgorYXNfYWNfTGliPWAkYXNfZWNobyAiYWNfY3ZfbGliX3B5dGhv biRhY19weXRob25fdmVyc2lvbicnX1B5QXJnX1BhcnNlVHVwbGUiIHwgJGFzX3RyX3NoYAoreyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUHlBcmdf UGFyc2VUdXBsZSBpbiAtbHB5dGhvbiRhY19weXRob25fdmVyc2lvbiIgPiY1CiskYXNfZWNob19u ICJjaGVja2luZyBmb3IgUHlBcmdfUGFyc2VUdXBsZSBpbiAtbHB5dGhvbiRhY19weXRob25fdmVy c2lvbi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19MaWIrc2V0fVwiIiA9 IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2No ZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1seiAgJExJQlMiCitMSUJTPSItbHB5dGhv biRhY19weXRob25fdmVyc2lvbiAgJExJQlMiCiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKQEAgLTc2MzIsMTg5MyAr NTM3NywxMTczIEBAIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK ICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi1jaGFyIGRlZmxhdGVDb3B5 ICgpOworY2hhciBQeUFyZ19QYXJzZVR1cGxlICgpOwogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4g ZGVmbGF0ZUNvcHkgKCk7CityZXR1cm4gUHlBcmdfUGFyc2VUdXBsZSAoKTsKICAgOwogICByZXR1 cm4gMDsKIH0KIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgot ICBhY19jdl9saWJfel9kZWZsYXRlQ29weT15ZXMKKyAgZXZhbCAiJGFzX2FjX0xpYj15ZXMiCiBl bHNlCi0gIGFjX2N2X2xpYl96X2RlZmxhdGVDb3B5PW5vCisgIGV2YWwgIiRhc19hY19MaWI9bm8i CiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAg Y29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9z YXZlX0xJQlMKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGFjX2N2X2xpYl96X2RlZmxhdGVDb3B5IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGli X3pfZGVmbGF0ZUNvcHkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfel9kZWZsYXRlQ29w eSIgPSB4IiJ5ZXM7IHRoZW4gOgorZXZhbCBhY19yZXM9XCQkYXNfYWNfTGliCisJICAgICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+ JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNf TGliIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2Rl ZmluZSBIQVZFX0xJQlogMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfTElCcHl0aG9uJGFjX3B5 dGhvbl92ZXJzaW9uIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgogCi0gIExJQlM9Ii1seiAkTElC UyIKLQotZWxzZQotICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgemxpYiIgIiRMSU5F Tk8iIDUKLWZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIGxpYmljb252X29wZW4gaW4gLWxpY29udiIgPiY1Ci0kYXNfZWNob19uICJjaGVj a2luZyBmb3IgbGliaWNvbnZfb3BlbiBpbiAtbGljb252Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIk e2FjX2N2X2xpYl9pY29udl9saWJpY29udl9vcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0k TElCUwotTElCUz0iLWxpY29udiAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCisgIExJQlM9Ii1scHl0aG9u JGFjX3B5dGhvbl92ZXJzaW9uICRMSUJTIgogCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFs IHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1p Z2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBp dHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2Nw bHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGxpYmljb252X29wZW4gKCk7Ci1pbnQK LW1haW4gKCkKLXsKLXJldHVybiBsaWJpY29udl9vcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwot fQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2 X2xpYl9pY29udl9saWJpY29udl9vcGVuPXllcwotZWxzZQotICBhY19jdl9saWJfaWNvbnZfbGli aWNvbnZfb3Blbj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRh Y19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaWNvbnZfbGliaWNvbnZfb3BlbiIgPiY1Ci0k YXNfZWNobyAiJGFjX2N2X2xpYl9pY29udl9saWJpY29udl9vcGVuIiA+JjY7IH0KLWlmIHRlc3Qg IngkYWNfY3ZfbGliX2ljb252X2xpYmljb252X29wZW4iID0geCIieWVzOyB0aGVuIDoKLSAgbGli aWNvbnY9InkiCiBlbHNlCi0gIGxpYmljb252PSJuIgorICBhc19mbl9lcnJvciAkPyAiVW5hYmxl IHRvIGZpbmQgYSBzdWl0YWJsZSBweXRob24gZGV2ZWxvcG1lbnQgbGlicmFyeSIgIiRMSU5FTk8i IDUKIGZpCiAKK0NQUEZMQUdTPSRhY19wcmV2aW91c19jcHBmbGFncworTERMRkFHUz0kYWNfcHJl dmlvdXNfbGRmbGFncwogCiAKLSMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCi0jIFRoZSBVbHRy aXggNC4yIG1pcHMgYnVpbHRpbiBhbGxvY2EgZGVjbGFyZWQgYnkgYWxsb2NhLmggb25seSB3b3Jr cwotIyBmb3IgY29uc3RhbnQgYXJndW1lbnRzLiAgVXNlbGVzcyEKLXsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmgiID4m NQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmguLi4gIiA+JjY7IH0K LWlmIHRlc3QgIiR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCtzZXR9IiA9IHNldDsgdGhlbiA6Citm aQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBh IHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1hHRVRURVhUK3NldH0iID0gc2V0OyB0aGVuIDoKICAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUg PGFsbG9jYS5oPgotaW50Ci1tYWluICgpCi17Ci1jaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgy ICogc2l6ZW9mIChpbnQpKTsKLQkJCSAgaWYgKHApIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAw OwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFj X2N2X3dvcmtpbmdfYWxsb2NhX2g9eWVzCi1lbHNlCi0gIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9 bm8KKyAgY2FzZSAkWEdFVFRFWFQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3Bh dGhfWEdFVFRFWFQ9IiRYR0VUVEVYVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qg d2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9T RVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAg dGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycg JGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IiRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgor ICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2 X3BhdGhfWEdFVFRFWFQiICYmIGFjX2N2X3BhdGhfWEdFVFRFWFQ9Im5vIgorICA7OworZXNhYwog ZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNv bmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitYR0VUVEVYVD0kYWNfY3ZfcGF0aF9Y R0VUVEVYVAoraWYgdGVzdCAtbiAiJFhHRVRURVhUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKKyRhc19lY2hv ICIkWEdFVFRFWFQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCi17 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3dv cmtpbmdfYWxsb2NhX2giID4mNQotJGFzX2VjaG8gIiRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+ JjY7IH0KLWlmIHRlc3QgJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4KIAotJGFz X2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxIiA+PmNvbmZkZWZzLmgKIAoraWYgdGVzdCB4 IiR7WEdFVFRFWFR9IiA9PSB4Im5vIgordGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUg dG8gZmluZCB4Z2V0dGV4dCwgcGxlYXNlIGluc3RhbGwgeGdldHRleHQiICIkTElORU5PIiA1CiBm aQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBhbGxvY2EiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9mdW5jX2FsbG9jYV93b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6 CisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzODYiLCBzbyBpdCBjYW4gYmUgYSBwcm9n cmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFzODY7IGFjX3dvcmQ9JDIKK3sgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+ JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVz dCAiJHthY19jdl9wYXRoX0FTODYrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19HTlVDX18KLSMgZGVm aW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCi0jZWxzZQotIyBpZmRlZiBfTVNDX1ZFUgotIyAg aW5jbHVkZSA8bWFsbG9jLmg+Ci0jICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgZWxzZQotIyAg aWZkZWYgSEFWRV9BTExPQ0FfSAotIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgotIyAgZWxzZQotIyAg IGlmZGVmIF9BSVgKLSAjcHJhZ21hIGFsbG9jYQotIyAgIGVsc2UKLSMgICAgaWZuZGVmIGFsbG9j YSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KLWNoYXIgKmFsbG9jYSAoKTsK LSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZgotCi1pbnQK LW1haW4gKCkKLXsKLWNoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDEpOwotCQkJCSAgICBpZiAo cCkgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9eWVzCi1l bHNlCi0gIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0 ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUKLSRhc19lY2hvICIkYWNfY3Zf ZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQotCi1pZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93 b3JrcyA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQSAxIiA+PmNv bmZkZWZzLmgKKyAgY2FzZSAkQVM4NiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3Zf cGF0aF9BUzg2PSIkQVM4NiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBh IHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFU T1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAt eiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4 ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfQVM4Nj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25l CisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9BUzg2 IiAmJiBhY19jdl9wYXRoX0FTODY9Im5vIgorICA7OworZXNhYworZmkKK0FTODY9JGFjX2N2X3Bh dGhfQVM4NgoraWYgdGVzdCAtbiAiJEFTODYiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVM4NiIgPiY1CiskYXNfZWNobyAiJEFTODYi ID4mNjsgfQogZWxzZQotICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNv bnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucwotIyB0aGF0IGNhdXNlIHRyb3VibGUuICBTb21l IHZlcnNpb25zIGRvIG5vdCBldmVuIGNvbnRhaW4gYWxsb2NhIG9yCi0jIGNvbnRhaW4gYSBidWdn eSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFsbG9jYSwKLSMgdXNl IGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2YgY29tcGlsaW5nIGFs bG9jYS5jLgotCi1BTExPQ0E9XCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0Ci0KLSRhc19l Y2hvICIjZGVmaW5lIENfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAorICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+ JjY7IH0KK2ZpCiAKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQotJGFzX2Vj aG9fbiAiY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzLi4uICIg PiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29zX2NyYXkrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYg dGVzdCB4IiR7QVM4Nn0iID09IHgibm8iCit0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJs ZSB0byBmaW5kIGFzODYsIHBsZWFzZSBpbnN0YWxsIGFzODYiICIkTElORU5PIiA1CitmaQorIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsZDg2Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBu YW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsZDg2OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cisk YXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7 YWNfY3ZfcGF0aF9MRDg2K3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKIGVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmIGRlZmluZWQgQ1JBWSAmJiAhIGRlZmlu ZWQgQ1JBWTIKLXdlYmVjcmF5Ci0jZWxzZQotd2Vub3RiZWNyYXkKLSNlbmRpZgorICBjYXNlICRM RDg2IGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0xEODY9IiRMRDg2IiAj IExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikK KyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAk UEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19k aXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25z OyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRh c190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNf Y3ZfcGF0aF9MRDg2PSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19z YXZlX0lGUwogCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAy PiY1IHwKLSAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSAgYWNf Y3Zfb3NfY3JheT15ZXMKLWVsc2UKLSAgYWNfY3Zfb3NfY3JheT1ubworICB0ZXN0IC16ICIkYWNf Y3ZfcGF0aF9MRDg2IiAmJiBhY19jdl9wYXRoX0xEODY9Im5vIgorICA7OworZXNhYwogZmkKLXJt IC1mIGNvbmZ0ZXN0KgotCitMRDg2PSRhY19jdl9wYXRoX0xEODYKK2lmIHRlc3QgLW4gIiRMRDg2 IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJExEODYiID4mNQorJGFzX2VjaG8gIiRMRDg2IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hv ICJubyIgPiY2OyB9CiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfb3NfY3JheSIg PiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9vc19jcmF5ID0geWVzOyB0aGVuCi0gIGZvciBhY19mdW5j IGluIF9nZXRiNjcgR0VUQjY3IGdldGI2NzsgZG8KLSAgICBhc19hY192YXI9YCRhc19lY2hvICJh Y19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJ TkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNf dmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2Rl ZmluZSBDUkFZX1NUQUNLU0VHX0VORCAkYWNfZnVuYwotX0FDRU9GCiAKLSAgICBicmVhawotZmkK IAotICBkb25lCitpZiB0ZXN0IHgiJHtMRDg2fSIgPT0geCJubyIKK3RoZW4KKyAgICBhc19mbl9l cnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgbGQ4NiwgcGxlYXNlIGluc3RhbGwgbGQ4NiIgIiRMSU5F Tk8iIDUKIGZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1Ci0kYXNfZWNob19uICJjaGVj a2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIk e2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyMgRXh0cmFjdCB0 aGUgZmlyc3Qgd29yZCBvZiAiYmNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGgg YXJncy4KK3NldCBkdW1teSBiY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRo X0JDQytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBl bHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3Zf Y19zdGFja19kaXJlY3Rpb249MAotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVm YXVsdAotaW50Ci1maW5kX3N0YWNrX2RpcmVjdGlvbiAoKQotewotICBzdGF0aWMgY2hhciAqYWRk ciA9IDA7Ci0gIGF1dG8gY2hhciBkdW1teTsKLSAgaWYgKGFkZHIgPT0gMCkKLSAgICB7Ci0gICAg ICBhZGRyID0gJmR1bW15OwotICAgICAgcmV0dXJuIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpOwot ICAgIH0KLSAgZWxzZQotICAgIHJldHVybiAoJmR1bW15ID4gYWRkcikgPyAxIDogLTE7Ci19Cisg IGNhc2UgJEJDQyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9CQ0M9IiRC Q0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7Owor ICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGly IGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYm IGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVu c2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIg JiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAg ICBhY19jdl9wYXRoX0JDQz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0k YXNfc2F2ZV9JRlMKIAotaW50Ci1tYWluICgpCi17Ci0gIHJldHVybiBmaW5kX3N0YWNrX2RpcmVj dGlvbiAoKSA8IDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRo ZW4gOgotICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0xCi1lbHNlCi0gIGFjX2N2X2Nfc3RhY2tf ZGlyZWN0aW9uPS0xCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9CQ0Mi ICYmIGFjX2N2X3BhdGhfQkNDPSJubyIKKyAgOzsKK2VzYWMKIGZpCi0KK0JDQz0kYWNfY3ZfcGF0 aF9CQ0MKK2lmIHRlc3QgLW4gIiRCQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQkNDIiA+JjUKKyRhc19lY2hvICIkQkNDIiA+JjY7 IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQoteyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIg PiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjY7IH0KLWNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU1RBQ0tfRElSRUNUSU9OICRhY19jdl9jX3N0YWNr X2RpcmVjdGlvbgotX0FDRU9GCiAKIAoraWYgdGVzdCB4IiR7QkNDfSIgPT0geCJubyIKK3RoZW4K KyAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgYmNjLCBwbGVhc2UgaW5zdGFsbCBi Y2MiICIkTElORU5PIiA1CiBmaQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJpYXNsIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBpYXNsOyBh Y193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQu Li4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9JQVNMK3NldH0iID0gc2V0OyB0aGVu IDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkSUFTTCBpbgor ICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9JQVNMPSIkSUFTTCIgIyBMZXQgdGhl IHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2Rv CisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAg ICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAg aWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94 ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhf SUFTTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMK IAotZm9yIGFjX2hlYWRlciBpbiAgXAotICAgICAgICAgICAgICAgIGFycGEvaW5ldC5oIGZjbnRs LmggaW50dHlwZXMuaCBsaWJpbnRsLmggbGltaXRzLmggbWFsbG9jLmggXAotICAgICAgICAgICAg ICAgIG5ldGRiLmggbmV0aW5ldC9pbi5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGxpYi5oIHN0cmlu Zy5oIFwKLSAgICAgICAgICAgICAgICBzdHJpbmdzLmggc3lzL2ZpbGUuaCBzeXMvaW9jdGwuaCBz eXMvbW91bnQuaCBzeXMvcGFyYW0uaCBcCi0gICAgICAgICAgICAgICAgc3lzL3NvY2tldC5oIHN5 cy9zdGF0dmZzLmggc3lzL3RpbWUuaCBzeXNsb2cuaCB0ZXJtaW9zLmggXAotICAgICAgICAgICAg ICAgIHVuaXN0ZC5oIHlhamwveWFqbF92ZXJzaW9uLmggXAorICB0ZXN0IC16ICIkYWNfY3ZfcGF0 aF9JQVNMIiAmJiBhY19jdl9wYXRoX0lBU0w9Im5vIgorICA7OworZXNhYworZmkKK0lBU0w9JGFj X2N2X3BhdGhfSUFTTAoraWYgdGVzdCAtbiAiJElBU0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSUFTTCIgPiY1CiskYXNfZWNobyAi JElBU0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKLWRvIDoK LSAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFz X3RyX3NoYAotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFk ZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiBldmFsIHRlc3Qg XCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3Ry X2NwcGAgMQotX0FDRU9GCiAKK2lmIHRlc3QgeCIke0lBU0x9IiA9PSB4Im5vIgordGhlbgorICAg IGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBpYXNsLCBwbGVhc2UgaW5zdGFsbCBpYXNs IiAiJExJTkVOTyIgNQogZmkKIAotZG9uZQotCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVs ICIkTElORU5PIiAidXVpZC91dWlkLmgiICJhY19jdl9oZWFkZXJfdXVpZF91dWlkX2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oIiA9 IHgiInllczsgdGhlbiA6CiAKLSMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5k IGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OSIg PiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8g Qzk5Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIg PSBzZXQ7IHRoZW4gOgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIHV1aWRfY2xlYXIgaW4gLWx1dWlkIiA+JjUKKyRhc19lY2hvX24gImNo ZWNraW5nIGZvciB1dWlkX2NsZWFyIGluIC1sdXVpZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHth Y19jdl9saWJfdXVpZF91dWlkX2NsZWFyK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHV1 aWQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAog LyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2lmbmRlZiBi b29sCi0gImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgotI2VuZGlmCi0jaWZuZGVmIGZhbHNl Ci0gImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKLSNlbmRpZgotI2lmIGZhbHNlCi0gImVy cm9yOiBmYWxzZSBpcyBub3QgMCIKLSNlbmRpZgotI2lmbmRlZiB0cnVlCi0gImVycm9yOiB0cnVl IGlzIG5vdCBkZWZpbmVkIgotI2VuZGlmCi0jaWYgdHJ1ZSAhPSAxCi0gImVycm9yOiB0cnVlIGlz IG5vdCAxIgotI2VuZGlmCi0jaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCi0g ImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKy8q IE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgor ICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEg R0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3Rp bGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCiAjZW5kaWYKLQot CXN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOwotCi0JY2hhciBhW3RydWUgPT0g MSA/IDEgOiAtMV07Ci0JY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOwotCWNoYXIgY1tfX2Jv b2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKLQljaGFyIGRbKGJvb2wp IDAuNSA9PSB0cnVlID8gMSA6IC0xXTsKLQlib29sIGUgPSAmczsKLQljaGFyIGZbKF9Cb29sKSAw LjAgPT0gZmFsc2UgPyAxIDogLTFdOwotCWNoYXIgZ1t0cnVlXTsKLQljaGFyIGhbc2l6ZW9mIChf Qm9vbCldOwotCWNoYXIgaVtzaXplb2Ygcy50XTsKLQllbnVtIHsgaiA9IGZhbHNlLCBrID0gdHJ1 ZSwgbCA9IGZhbHNlICogdHJ1ZSwgbSA9IHRydWUgKiAyNTYgfTsKLQkvKiBUaGUgZm9sbG93aW5n IGZhaWxzIGZvcgotCSAgIEhQIGFDKysvQU5TSSBDIEIzOTEwQiBBLjA1LjU1IFtEZWMgMDQgMjAw M10uICovCi0JX0Jvb2wgblttXTsKLQljaGFyIG9bc2l6ZW9mIG4gPT0gbSAqIHNpemVvZiBuWzBd ID8gMSA6IC0xXTsKLQljaGFyIHBbLTEgLSAoX0Jvb2wpIDAgPCAwICYmIC0xIC0gKGJvb2wpIDAg PCAwID8gMSA6IC0xXTsKLSMJaWYgZGVmaW5lZCBfX3hsY19fIHx8IGRlZmluZWQgX19HTlVDX18K LQkgLyogQ2F0Y2ggYSBidWcgaW4gSUJNIEFJWCB4bGMgY29tcGlsZXIgdmVyc2lvbiA2LjAuMC4w Ci0JICAgIHJlcG9ydGVkIGJ5IEphbWVzIExlbWxleSBvbiAyMDA1LTEwLTA1OyBzZWUKLQkgICAg aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMC9t c2cwMDA4Ni5odG1sCi0JICAgIFRoaXMgdGVzdCBpcyBub3QgcXVpdGUgcmlnaHQsIHNpbmNlIHhs YyBpcyBhbGxvd2VkIHRvCi0JICAgIHJlamVjdCB0aGlzIHByb2dyYW0sIGFzIHRoZSBpbml0aWFs aXplciBmb3IgeGxjYnVnIGlzCi0JICAgIG5vdCBvbmUgb2YgdGhlIGZvcm1zIHRoYXQgQyByZXF1 aXJlcyBzdXBwb3J0IGZvci4KLQkgICAgSG93ZXZlciwgZG9pbmcgdGhlIHRlc3QgcmlnaHQgd291 bGQgcmVxdWlyZSBhIHJ1bnRpbWUKLQkgICAgdGVzdCwgYW5kIHRoYXQgd291bGQgbWFrZSBjcm9z cy1jb21waWxhdGlvbiBoYXJkZXIuCi0JICAgIExldCB1cyBob3BlIHRoYXQgSUJNIGZpeGVzIHRo ZSB4bGMgYnVnLCBhbmQgYWxzbyBhZGRzCi0JICAgIHN1cHBvcnQgZm9yIHRoaXMga2luZCBvZiBj b25zdGFudCBleHByZXNzaW9uLiAgSW4gdGhlCi0JICAgIG1lYW50aW1lLCB0aGlzIHRlc3Qgd2ls bCByZWplY3QgeGxjLCB3aGljaCBpcyBPSywgc2luY2UKLQkgICAgb3VyIHN0ZGJvb2wuaCBzdWJz dGl0dXRlIHNob3VsZCBzdWZmaWNlLiAgV2UgYWxzbyB0ZXN0Ci0JICAgIHRoaXMgd2l0aCBHQ0Ms IHdoZXJlIGl0IHNob3VsZCB3b3JrLCB0byBkZXRlY3QgbW9yZQotCSAgICBxdWlja2x5IHdoZXRo ZXIgc29tZW9uZSBtZXNzZXMgdXAgdGhlIHRlc3QgaW4gdGhlCi0JICAgIGZ1dHVyZS4gICovCi0J IGNoYXIgZGlnc1tdID0gIjAxMjM0NTY3ODkiOwotCSBpbnQgeGxjYnVnID0gMSAvICgmKGRpZ3Mg KyA1KVstMiArIChib29sKSAxXSA9PSAmZGlnc1s0XSA/IDEgOiAtMSk7Ci0jCWVuZGlmCi0JLyog Q2F0Y2ggYSBidWcgaW4gYW4gSFAtVVggQyBjb21waWxlci4gIFNlZQotCSAgIGh0dHA6Ly9nY2Mu Z251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDAzLTEyL21zZzAyMzAzLmh0bWwKLQkgICBodHRwOi8v bGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYx Lmh0bWwKLQkgKi8KLQlfQm9vbCBxID0gdHJ1ZTsKLQlfQm9vbCAqcHEgPSAmcTsKLQorY2hhciB1 dWlkX2NsZWFyICgpOwogaW50CiBtYWluICgpCiB7Ci0KLQkqcHEgfD0gcTsKLQkqcHEgfD0gISBx OwotCS8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBv cHRpbWl6YXRpb25zLiAgKi8KLQlyZXR1cm4gKCFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiAr ICFnICsgIWggKyAhaSArICEhaiArICFrICsgISFsCi0JCSsgIW0gKyAhbiArICFvICsgIXAgKyAh cSArICFwcSk7Ci0KK3JldHVybiB1dWlkX2NsZWFyICgpOwogICA7CiAgIHJldHVybiAwOwogfQog X0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2 X2hlYWRlcl9zdGRib29sX2g9eWVzCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRib29sX2g9bm8K LWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQotJGFzX2VjaG8gIiRhY19jdl9oZWFk ZXJfc3RkYm9vbF9oIiA+JjY7IH0KLWFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIl9Cb29s IiAiYWNfY3ZfdHlwZV9fQm9vbCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRh Y19jdl90eXBlX19Cb29sIiA9IHgiInllczsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YKLSNkZWZpbmUgSEFWRV9fQk9PTCAxCi1fQUNFT0YKLQotCi1maQotCi1pZiB0ZXN0ICRh Y19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhB VkVfU1REQk9PTF9IIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi17ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaCIg PiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmguLi4gIiA+ JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aWRfdCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0g ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNf ZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAidWlkX3QiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0g IGFjX2N2X3R5cGVfdWlkX3Q9eWVzCi1lbHNlCi0gIGFjX2N2X3R5cGVfdWlkX3Q9bm8KLWZpCi1y bSAtZiBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aWRfdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3R5 cGVfdWlkX3QiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aWRfdCA9IG5vOyB0aGVuCi0K LSRhc19lY2hvICIjZGVmaW5lIHVpZF90IGludCIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8g IiNkZWZpbmUgZ2lkX3QgaW50IiA+PmNvbmZkZWZzLmgKLQotZmkKLQoteyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKLSRhc19l Y2hvX24gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zf Y19pbmxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m NgotZWxzZQotICBhY19jdl9jX2lubGluZT1ubwotZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGlu ZV9fIF9faW5saW5lOyBkbwotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBl ZGVmIGludCBmb29fdDsKLXN0YXRpYyAkYWNfa3cgZm9vX3Qgc3RhdGljX2ZvbyAoKSB7cmV0dXJu IDA7IH0KLSRhY19rdyBmb29fdCBmb28gKCkge3JldHVybiAwOyB9Ci0jZW5kaWYKLQotX0FDRU9G Ci1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2NfaW5s aW5lPSRhY19rdworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19j dl9saWJfdXVpZF91dWlkX2NsZWFyPXllcworZWxzZQorICBhY19jdl9saWJfdXVpZF91dWlkX2Ns ZWFyPW5vCiBmaQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC4kYWNfZXh0Ci0gIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsK LWRvbmUKLQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisg ICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xp Yl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X2xpYl91dWlkX3V1aWRfY2xlYXIiID4mNQorJGFzX2VjaG8gIiRhY19j dl9saWJfdXVpZF91dWlkX2NsZWFyIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3V1aWRf dXVpZF9jbGVhciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsaWJ1dWlkPSJ5IgogZmkKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUi ID4mNQotJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CiAKLWNhc2UgJGFjX2N2X2Nf aW5saW5lIGluCi0gIGlubGluZSB8IHllcykgOzsKLSAgKikKLSAgICBjYXNlICRhY19jdl9jX2lu bGluZSBpbgotICAgICAgbm8pIGFjX3ZhbD07OwotICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lu bGluZTs7Ci0gICAgZXNhYwotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNpZm5kZWYg X19jcGx1c3BsdXMKLSNkZWZpbmUgaW5saW5lICRhY192YWwKLSNlbmRpZgotX0FDRU9GCi0gICAg OzsKLWVzYWMKIAotYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjE2IiAiYWNfY3ZfY19p bnQxNl90IgotY2FzZSAkYWNfY3ZfY19pbnQxNl90IGluICMoCi0gIG5vfHllcykgOzsgIygKLSAg KikKK2ZpCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgaW50MTZfdCAkYWNf Y3ZfY19pbnQxNl90Ci1fQUNFT0YKLTs7Ci1lc2FjCiAKLWFjX2ZuX2NfZmluZF9pbnRYX3QgIiRM SU5FTk8iICIzMiIgImFjX2N2X2NfaW50MzJfdCIKLWNhc2UgJGFjX2N2X2NfaW50MzJfdCBpbiAj KAotICBub3x5ZXMpIDs7ICMoCi0gICopCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIk TElORU5PIiAidXVpZC5oIiAiYWNfY3ZfaGVhZGVyX3V1aWRfaCIgIiRhY19pbmNsdWRlc19kZWZh dWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdXVpZF9oIiA9IHgiInllczsgdGhlbiA6Cisg IGxpYnV1aWQ9InkiCitmaQogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGlu dDMyX3QgJGFjX2N2X2NfaW50MzJfdAotX0FDRU9GCi07OwotZXNhYwogCi1hY19mbl9jX2ZpbmRf aW50WF90ICIkTElORU5PIiAiNjQiICJhY19jdl9jX2ludDY0X3QiCi1jYXNlICRhY19jdl9jX2lu dDY0X3QgaW4gIygKLSAgbm98eWVzKSA7OyAjKAotICAqKQoraWYgdGVzdCAiJGxpYnV1aWQiICE9 ICJ5IjsgdGhlbiA6CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgaW50NjRf dCAkYWNfY3ZfY19pbnQ2NF90Ci1fQUNFT0YKLTs7Ci1lc2FjCisgICAgYXNfZm5fZXJyb3IgJD8g ImNhbm5vdCBmaW5kIGEgdmFsaWQgdXVpZCBsaWJyYXJ5IiAiJExJTkVOTyIgNQogCi1hY19mbl9j X2ZpbmRfaW50WF90ICIkTElORU5PIiAiOCIgImFjX2N2X2NfaW50OF90IgotY2FzZSAkYWNfY3Zf Y19pbnQ4X3QgaW4gIygKLSAgbm98eWVzKSA7OyAjKAotICAqKQorZmkKIAotY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBpbnQ4X3QgJGFjX2N2X2NfaW50OF90Ci1fQUNFT0YKLTs7 Ci1lc2FjCiAKLWFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm1vZGVfdCIgImFjX2N2X3R5 cGVfbW9kZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVf bW9kZV90IiA9IHgiInllczsgdGhlbiA6CithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIk TElORU5PIiAiY3Vyc2VzLmgiICJhY19jdl9oZWFkZXJfY3Vyc2VzX2giICIkYWNfaW5jbHVkZXNf ZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2N1cnNlc19oIiA9IHgiInllczsgdGhl biA6CiAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBjbGVhciBpbiAtbGN1cnNlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Ig Y2xlYXIgaW4gLWxjdXJzZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2N1cnNl c19jbGVhcitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 CiBlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY3Vyc2VzICAk TElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVu ZCBjb25mZGVmcy5oLiAgKi8KIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBt b2RlX3QgaW50CisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9p ZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1 cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90 eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD IgorI2VuZGlmCitjaGFyIGNsZWFyICgpOworaW50CittYWluICgpCit7CityZXR1cm4gY2xlYXIg KCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLQoraWYgYWNfZm5fY190cnlfbGluayAi JExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfY3Vyc2VzX2NsZWFyPXllcworZWxzZQorICBh Y19jdl9saWJfY3Vyc2VzX2NsZWFyPW5vCiBmaQotCi1hY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5F Tk8iICJvZmZfdCIgImFjX2N2X3R5cGVfb2ZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlm IHRlc3QgIngkYWNfY3ZfdHlwZV9vZmZfdCIgPSB4IiJ5ZXM7IHRoZW4gOgotCitybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVl eHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGli X2N1cnNlc19jbGVhciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jdXJzZXNfY2xlYXIiID4m NjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfY3Vyc2VzX2NsZWFyIiA9IHgiInllczsgdGhlbiA6 CisgIGN1cnNlcz0ieSIKIGVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmlu ZSBvZmZfdCBsb25nIGludAotX0FDRU9GCi0KKyAgY3Vyc2VzPSJuIgogZmkKIAotYWNfZm5fY19j aGVja190eXBlICIkTElORU5PIiAicGlkX3QiICJhY19jdl90eXBlX3BpZF90IiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcGlkX3QiID0geCIieWVzOyB0aGVu IDoKIAogZWxzZQorICBjdXJzZXM9Im4iCitmaQogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G Ci0jZGVmaW5lIHBpZF90IGludAotX0FDRU9GCiAKLWZpCithY19mbl9jX2NoZWNrX2hlYWRlcl9t b25ncmVsICIkTElORU5PIiAibmN1cnNlcy5oIiAiYWNfY3ZfaGVhZGVyX25jdXJzZXNfaCIgIiRh Y19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmN1cnNlc19oIiA9 IHgiInllczsgdGhlbiA6CiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQiID4mNQotJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3Qg IiR7YWNfY3ZfY19yZXN0cmljdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY2xlYXIgaW4gLWxuY3Vy c2VzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjbGVhciBpbiAtbG5jdXJzZXMuLi4g IiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX25jdXJzZXNfY2xlYXIrc2V0fSIgPSBzZXQ7 IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jdl9jX3Jl c3RyaWN0PW5vCi0gICAjIFRoZSBvcmRlciBoZXJlIGNhdGVycyB0byB0aGUgZmFjdCB0aGF0IEMr KyBkb2VzIG5vdCByZXF1aXJlIHJlc3RyaWN0LgotICAgZm9yIGFjX2t3IGluIF9fcmVzdHJpY3Qg X19yZXN0cmljdF9fIF9SZXN0cmljdCByZXN0cmljdDsgZG8KLSAgICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRM SUJTCitMSUJTPSItbG5jdXJzZXMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotdHlwZWRlZiBpbnQgKiBp bnRfcHRyOwotCWludCBmb28gKGludF9wdHIgJGFjX2t3IGlwKSB7Ci0JcmV0dXJuIGlwWzBdOwot ICAgICAgIH0KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZv aWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0 dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3Rv dHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAi QyIKKyNlbmRpZgorY2hhciBjbGVhciAoKTsKIGludAogbWFpbiAoKQogewotaW50IHNbMV07Ci0J aW50ICogJGFjX2t3IHQgPSBzOwotCXRbMF0gPSAwOwotCXJldHVybiBmb28odCkKK3JldHVybiBj bGVhciAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9jX3Jlc3RyaWN0PSRhY19rdworaWYgYWNf Zm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbmN1cnNlc19jbGVh cj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25jdXJzZXNfY2xlYXI9bm8KIGZpCi1ybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAg dGVzdCAiJGFjX2N2X2NfcmVzdHJpY3QiICE9IG5vICYmIGJyZWFrCi0gICBkb25lCi0KK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFj X2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBm aQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9jX3Jlc3RyaWN0IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY19yZXN0cmljdCIgPiY2OyB9Ci0K LSBjYXNlICRhY19jdl9jX3Jlc3RyaWN0IGluCi0gICByZXN0cmljdCkgOzsKLSAgIG5vKSAkYXNf ZWNobyAiI2RlZmluZSByZXN0cmljdCAvKiovIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgKikgIGNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgcmVzdHJpY3QgJGFjX2N2X2NfcmVzdHJp Y3QKLV9BQ0VPRgotIDs7Ci0gZXNhYwotCi1hY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJz aXplX3QiICJhY19jdl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVz dCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4IiJ5ZXM7IHRoZW4gOgotCit7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uY3Vyc2VzX2Ns ZWFyIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25jdXJzZXNfY2xlYXIiID4mNjsgfQoraWYg dGVzdCAieCRhY19jdl9saWJfbmN1cnNlc19jbGVhciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBuY3Vy c2VzPSJ5IgogZWxzZQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIHNpemVf dCB1bnNpZ25lZCBpbnQKLV9BQ0VPRgotCisgIG5jdXJzZXM9Im4iCiBmaQogCi1hY19mbl9jX2No ZWNrX3R5cGUgIiRMSU5FTk8iICJzc2l6ZV90IiAiYWNfY3ZfdHlwZV9zc2l6ZV90IiAiJGFjX2lu Y2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3NpemVfdCIgPSB4IiJ5ZXM7 IHRoZW4gOgogCiBlbHNlCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgc3Np emVfdCBpbnQKLV9BQ0VPRgotCisgIG5jdXJzZXM9Im4iCiBmaQogCi1hY19mbl9jX2NoZWNrX21l bWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfYmxrc2l6ZSIgImFjX2N2X21lbWJlcl9z dHJ1Y3Rfc3RhdF9zdF9ibGtzaXplIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4 JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibGtzaXplIiA9IHgiInllczsgdGhlbiA6CiAK LWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9C TEtTSVpFIDEKLV9BQ0VPRgoraWYgdGVzdCAiJGN1cnNlcyIgPSAibiIgJiYgdGVzdCAiJG5jdXJz ZXMiID0gIm4iOyB0aGVuIDoKIAorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBh IHN1aXRhYmxlIGN1cnNlcyBsaWJyYXJ5IiAiJExJTkVOTyIgNQogCiBmaQorIyBQcmVmZXIgbmN1 cnNlcyBvdmVyIGN1cnNlcyBpZiBib3RoIGFyZSBwcmVzZW50CitpZiB0ZXN0ICIkbmN1cnNlcyIg PSAieSI7IHRoZW4gOgogCi1hY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBz dGF0IiAic3RfYmxvY2tzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsb2NrcyIgIiRh Y19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRf c3RfYmxvY2tzIiA9IHgiInllczsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YK LSNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MgMQotX0FDRU9GCisgICAgQ1VSU0VT X0xJQlM9Ii1sbmN1cnNlcyIKIAorJGFzX2VjaG8gIiNkZWZpbmUgSU5DTFVERV9DVVJTRVNfSCA8 bmN1cnNlcy5oPiIgPj5jb25mZGVmcy5oCiAKLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RfQkxP Q0tTIDEiID4+Y29uZmRlZnMuaAogCiBlbHNlCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoi IGZpbGVibG9ja3MuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGZp bGVibG9ja3MuJGFjX29iamV4dCIKLSA7OwotZXNhYwotCi1maQotCiAKLWFjX2ZuX2NfY2hlY2tf bWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJzdF9yZGV2IiAiYWNfY3ZfbWVtYmVyX3N0 cnVjdF9zdGF0X3N0X3JkZXYiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNf Y3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X3JkZXYiID0geCIieWVzOyB0aGVuIDoKKyAgICBDVVJT RVNfTElCUz0iLWxjdXJzZXMiCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUg SEFWRV9TVFJVQ1RfU1RBVF9TVF9SREVWIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSU5D TFVERV9DVVJTRVNfSCA8Y3Vyc2VzLmg+IiA+PmNvbmZkZWZzLmgKIAogCiBmaQogCi1hY19mbl9j X2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjE2IiAiYWNfY3ZfY191aW50MTZfdCIKLWNhc2UgJGFj X2N2X2NfdWludDE2X3QgaW4gIygKLSAgbm98eWVzKSA7OyAjKAotICAqKQogCiAKLWNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgdWludDE2X3QgJGFjX2N2X2NfdWludDE2X3QKLV9B Q0VPRgotOzsKLSAgZXNhYwogCi1hY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjMyIiAi YWNfY3ZfY191aW50MzJfdCIKLWNhc2UgJGFjX2N2X2NfdWludDMyX3QgaW4gIygKLSAgbm98eWVz KSA7OyAjKAotICAqKQogCi0kYXNfZWNobyAiI2RlZmluZSBfVUlOVDMyX1QgMSIgPj5jb25mZGVm cy5oCiAKIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSB1aW50MzJfdCAkYWNf Y3ZfY191aW50MzJfdAotX0FDRU9GCi07OwotICBlc2FjCiAKLWFjX2ZuX2NfZmluZF91aW50WF90 ICIkTElORU5PIiAiNjQiICJhY19jdl9jX3VpbnQ2NF90IgotY2FzZSAkYWNfY3ZfY191aW50NjRf dCBpbiAjKAotICBub3x5ZXMpIDs7ICMoCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklH X3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhl bgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNv bmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkg JHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNf ZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNf Y3ZfcGF0aF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/Oltc XC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVz ZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CiAgICopCisgIGFzX3NhdmVf SUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisg IElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBm b3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYg eyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtH X0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9J RlMKIAotJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQ2NF9UIDEiID4+Y29uZmRlZnMuaAotCisgIDs7 Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1u ICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHX0NPTkZJRyIg PiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKIAotY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRgotI2RlZmluZSB1aW50NjRfdCAkYWNfY3ZfY191aW50NjRfdAotX0FDRU9G Ci07OwotICBlc2FjCiAKLWFjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiOCIgImFjX2N2 X2NfdWludDhfdCIKLWNhc2UgJGFjX2N2X2NfdWludDhfdCBpbiAjKAotICBub3x5ZXMpIDs7ICMo CitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRf UEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBr Zy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1 bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNr aW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX2FjX3B0 X1BLR19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xc L10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAj IExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKICAgKikK KyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAk UEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19k aXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25z OyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRh c190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNf Y3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Igor ICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9u ZQorSUZTPSRhc19zYXZlX0lGUwogCi0kYXNfZWNobyAiI2RlZmluZSBfVUlOVDhfVCAxIiA+PmNv bmZkZWZzLmgKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIHVpbnQ4X3Qg JGFjX2N2X2NfdWludDhfdAotX0FDRU9GCi07OwotICBlc2FjCi0KLWFjX2ZuX2NfY2hlY2tfdHlw ZSAiJExJTkVOTyIgInB0cmRpZmZfdCIgImFjX2N2X3R5cGVfcHRyZGlmZl90IiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRyZGlmZl90IiA9IHgiInllczsg dGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QVFJESUZG X1QgMQotX0FDRU9GCi0KLQorICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2 X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0 aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk YWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsg fQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQotIyBDaGVja3MgZm9yIGxp YnJhcnkgZnVuY3Rpb25zLgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgZXJyb3JfYXRfbGluZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBm b3IgZXJyb3JfYXRfbGluZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZXJyb3Jf YXRfbGluZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8q IGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxlcnJvci5oPgotaW50Ci1tYWluICgpCi17 Ci1lcnJvcl9hdF9saW5lICgwLCAwLCAiIiwgMCwgImFuIGVycm9yIG9jY3VycmVkIik7Ci0gIDsK LSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0 aGVuIDoKLSAgYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9eWVzCisgIGlmIHRlc3QgIngkYWNfcHRf UEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2Fz ZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMg bm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdB Uk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIg PiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFBLR19DT05GSUc9JGFjX3B0 X1BLR19DT05GSUcKKyAgZmkKIGVsc2UKLSAgYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9bm8KLWZp Ci1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25m dGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0 aF9QS0dfQ09ORklHIgogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNQotJGFzX2VjaG8gIiRhY19j dl9saWJfZXJyb3JfYXRfbGluZSIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRf bGluZSA9IG5vOyB0aGVuCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGVycm9yLiRhY19v YmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0Igot IDs7Ci1lc2FjCiAKIGZpCi0KLWZvciBhY19oZWFkZXIgaW4gdmZvcmsuaAotZG8gOgotICBhY19m bl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidmZvcmsuaCIgImFjX2N2X2hlYWRl cl92Zm9ya19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRl cl92Zm9ya19oIiA9IHgiInllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YK LSNkZWZpbmUgSEFWRV9WRk9SS19IIDEKLV9BQ0VPRgotCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJ RyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPTAuOS4wCisJeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNp b24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZp ZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisJaWYg JFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9u OyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJZWxzZQorCQl7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5v IiA+JjY7IH0KKwkJUEtHX0NPTkZJRz0iIgorCWZpCiBmaQogCi1kb25lCi0KLWZvciBhY19mdW5j IGluIGZvcmsgdmZvcmsKLWRvIDoKLSAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18k YWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNf ZnVuYyIgIiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgi eWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19l Y2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQor cGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3IgZ2xpYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2xpYi4uLiAi ID4mNjsgfQogCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9yayIgPSB4eWVzOyB0aGVuCi0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtp bmcgZm9yayIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBmb3JrLi4uICIg PiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZm9ya193b3JrcytzZXR9IiA9IHNldDsgdGhl biA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgIiRjcm9z c19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPWNyb3Nz CitpZiB0ZXN0IC1uICIkZ2xpYl9DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X2dsaWJfQ0ZMQUdT PSIkZ2xpYl9DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBp ZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMg XCJnbGliLTIuMFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJy b3JzICJnbGliLTIuMCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19z dGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9nbGliX0NGTEFHUz1gJFBLR19DT05GSUcgLS1j ZmxhZ3MgImdsaWItMi4wIiAyPi9kZXYvbnVsbGAKIGVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2lu Y2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotCi0JICAvKiBCeSBSdWVkaWdlciBLdWhs bWFubi4gKi8KLQkgIHJldHVybiBmb3JrICgpIDwgMDsKLQotICA7Ci0gIHJldHVybiAwOwotfQot X0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfZnVu Y19mb3JrX3dvcmtzPXllcworICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2Zh aWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJGdsaWJfTElCUyI7IHRoZW4KKyAgICBwa2df Y3ZfZ2xpYl9MSUJTPSIkZ2xpYl9MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0 aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJp bnQtZXJyb3JzIFwiZ2xpYi0yLjBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAt LXByaW50LWVycm9ycyAiZ2xpYi0yLjAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAg dGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfZ2xpYl9MSUJTPWAkUEtHX0NP TkZJRyAtLWxpYnMgImdsaWItMi4wIiAyPi9kZXYvbnVsbGAKIGVsc2UKLSAgYWNfY3ZfZnVuY19m b3JrX3dvcmtzPW5vCisgIHBrZ19mYWlsZWQ9eWVzCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29y ZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorIGVsc2UKKyAg ICBwa2dfZmFpbGVkPXVudHJpZWQKIGZpCiAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPiY1Ci0kYXNf ZWNobyAiJGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPiY2OyB9CiAKKworaWYgdGVzdCAkcGtnX2Zh aWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NP TkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtn X3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCiBlbHNlCi0gIGFjX2N2X2Z1bmNfZm9ya193b3Jr cz0kYWNfY3ZfZnVuY19mb3JrCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1u bwogZmkKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgot ICBjYXNlICRob3N0IGluCi0gICAgKi0qLWFtaWdhb3MqIHwgKi0qLW1zZG9zZGpncHAqKQotICAg ICAgIyBPdmVycmlkZSwgYXMgdGhlc2Ugc3lzdGVtcyBoYXZlIG9ubHkgYSBkdW1teSBmb3JrKCkg c3R1YgotICAgICAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPW5vCi0gICAgICA7OwotICAgICopCi0g ICAgICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogcmVzdWx0ICRhY19j dl9mdW5jX2Zvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+ JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJlc3VsdCAkYWNfY3ZfZnVuY19mb3JrX3dv cmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiYyO30KLWZpCi1hY19j dl9mdW5jX3Zmb3JrX3dvcmtzPSRhY19jdl9mdW5jX3Zmb3JrCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfdmZvcmsiID0geHllczsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHZmb3JrIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIGZvciB3b3JraW5nIHZmb3JrLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1 bmNfdmZvcmtfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 Ci0gIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9Y3Jvc3MKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyog VGhhbmtzIHRvIFBhdWwgRWdnZXJ0IGZvciB0aGlzIHRlc3QuICAqLwotJGFjX2luY2x1ZGVzX2Rl ZmF1bHQKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2lmZGVmIEhBVkVfVkZPUktfSAotIyBpbmNs dWRlIDx2Zm9yay5oPgotI2VuZGlmCi0vKiBPbiBzb21lIHNwYXJjIHN5c3RlbXMsIGNoYW5nZXMg YnkgdGhlIGNoaWxkIHRvIGxvY2FsIGFuZCBpbmNvbWluZwotICAgYXJndW1lbnQgcmVnaXN0ZXJz IGFyZSBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIHBhcmVudC4gIFRoZSBjb21waWxlcgotICAgaXMg dG9sZCBhYm91dCB0aGlzIHdpdGggI2luY2x1ZGUgPHZmb3JrLmg+LCBidXQgc29tZSBjb21waWxl cnMKLSAgIChlLmcuIGdjYyAtTykgZG9uJ3QgZ3JvayA8dmZvcmsuaD4uICBUZXN0IGZvciB0aGlz IGJ5IHVzaW5nIGEKLSAgIHN0YXRpYyB2YXJpYWJsZSB3aG9zZSBhZGRyZXNzIGlzIHB1dCBpbnRv IGEgcmVnaXN0ZXIgdGhhdCBpcwotICAgY2xvYmJlcmVkIGJ5IHRoZSB2Zm9yay4gICovCi1zdGF0 aWMgdm9pZAotI2lmZGVmIF9fY3BsdXNwbHVzCi1zcGFyY19hZGRyZXNzX3Rlc3QgKGludCBhcmcp Ci0jIGVsc2UKLXNwYXJjX2FkZHJlc3NfdGVzdCAoYXJnKSBpbnQgYXJnOwotI2VuZGlmCi17Ci0g IHN0YXRpYyBwaWRfdCBjaGlsZDsKLSAgaWYgKCFjaGlsZCkgewotICAgIGNoaWxkID0gdmZvcmsg KCk7Ci0gICAgaWYgKGNoaWxkIDwgMCkgewotICAgICAgcGVycm9yICgidmZvcmsiKTsKLSAgICAg IF9leGl0KDIpOwotICAgIH0KLSAgICBpZiAoIWNoaWxkKSB7Ci0gICAgICBhcmcgPSBnZXRwaWQo KTsKLSAgICAgIHdyaXRlKC0xLCAiIiwgMCk7Ci0gICAgICBfZXhpdCAoYXJnKTsKLSAgICB9Ci0g IH0KLX0KKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVz OyB0aGVuCisJICAgICAgICBnbGliX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJy b3JzIC0tcHJpbnQtZXJyb3JzICJnbGliLTIuMCIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAg ICAgZ2xpYl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAi IDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29u ZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJGdsaWJfUEtHX0VSUk9SUyIgPiY1CiAK LWludAotbWFpbiAoKQotewotICBwaWRfdCBwYXJlbnQgPSBnZXRwaWQgKCk7Ci0gIHBpZF90IGNo aWxkOwotCi0gIHNwYXJjX2FkZHJlc3NfdGVzdCAoMCk7Ci0KLSAgY2hpbGQgPSB2Zm9yayAoKTsK LQotICBpZiAoY2hpbGQgPT0gMCkgewotICAgIC8qIEhlcmUgaXMgYW5vdGhlciB0ZXN0IGZvciBz cGFyYyB2Zm9yayByZWdpc3RlciBwcm9ibGVtcy4gIFRoaXMKLSAgICAgICB0ZXN0IHVzZXMgbG90 cyBvZiBsb2NhbCB2YXJpYWJsZXMsIGF0IGxlYXN0IGFzIG1hbnkgbG9jYWwKLSAgICAgICB2YXJp YWJsZXMgYXMgbWFpbiBoYXMgYWxsb2NhdGVkIHNvIGZhciBpbmNsdWRpbmcgY29tcGlsZXIKLSAg ICAgICB0ZW1wb3Jhcmllcy4gIDQgbG9jYWxzIGFyZSBlbm91Z2ggZm9yIGdjYyAxLjQwLjMgb24g YSBTb2xhcmlzCi0gICAgICAgNC4xLjMgc3BhcmMsIGJ1dCB3ZSB1c2UgOCB0byBiZSBzYWZlLiAg QSBidWdneSBjb21waWxlciBzaG91bGQKLSAgICAgICByZXVzZSB0aGUgcmVnaXN0ZXIgb2YgcGFy ZW50IGZvciBvbmUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcywKLSAgICAgICBzaW5jZSBpdCB3aWxs IHRoaW5rIHRoYXQgcGFyZW50IGNhbid0IHBvc3NpYmx5IGJlIHVzZWQgYW55IG1vcmUKLSAgICAg ICBpbiB0aGlzIHJvdXRpbmUuICBBc3NpZ25pbmcgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHdpbGwg dGh1cwotICAgICAgIG11bmdlIHBhcmVudCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICAqLwotICAg IHBpZF90Ci0gICAgICBwID0gZ2V0cGlkKCksIHAxID0gZ2V0cGlkKCksIHAyID0gZ2V0cGlkKCks IHAzID0gZ2V0cGlkKCksCi0gICAgICBwNCA9IGdldHBpZCgpLCBwNSA9IGdldHBpZCgpLCBwNiA9 IGdldHBpZCgpLCBwNyA9IGdldHBpZCgpOwotICAgIC8qIENvbnZpbmNlIHRoZSBjb21waWxlciB0 aGF0IHAuLnA3IGFyZSBsaXZlOyBvdGhlcndpc2UsIGl0IG1pZ2h0Ci0gICAgICAgdXNlIHRoZSBz YW1lIGhhcmR3YXJlIHJlZ2lzdGVyIGZvciBhbGwgOCBsb2NhbCB2YXJpYWJsZXMuICAqLwotICAg IGlmIChwICE9IHAxIHx8IHAgIT0gcDIgfHwgcCAhPSBwMyB8fCBwICE9IHA0Ci0JfHwgcCAhPSBw NSB8fCBwICE9IHA2IHx8IHAgIT0gcDcpCi0gICAgICBfZXhpdCgxKTsKLQotICAgIC8qIE9uIHNv bWUgc3lzdGVtcyAoZS5nLiBJUklYIDMuMyksIHZmb3JrIGRvZXNuJ3Qgc2VwYXJhdGUgcGFyZW50 Ci0gICAgICAgZnJvbSBjaGlsZCBmaWxlIGRlc2NyaXB0b3JzLiAgSWYgdGhlIGNoaWxkIGNsb3Nl cyBhIGRlc2NyaXB0b3IKLSAgICAgICBiZWZvcmUgaXQgZXhlY3Mgb3IgZXhpdHMsIHRoaXMgbXVu Z2VzIHRoZSBwYXJlbnQncyBkZXNjcmlwdG9yCi0gICAgICAgYXMgd2VsbC4gIFRlc3QgZm9yIHRo aXMgYnkgY2xvc2luZyBzdGRvdXQgaW4gdGhlIGNoaWxkLiAgKi8KLSAgICBfZXhpdChjbG9zZShm aWxlbm8oc3Rkb3V0KSkgIT0gMCk7Ci0gIH0gZWxzZSB7Ci0gICAgaW50IHN0YXR1czsKLSAgICBz dHJ1Y3Qgc3RhdCBzdDsKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKGds aWItMi4wKSB3ZXJlIG5vdCBtZXQ6CiAKLSAgICB3aGlsZSAod2FpdCgmc3RhdHVzKSAhPSBjaGls ZCkKLSAgICAgIDsKLSAgICByZXR1cm4gKAotCSAvKiBXYXMgdGhlcmUgc29tZSBwcm9ibGVtIHdp dGggdmZvcmtpbmc/ICAqLwotCSBjaGlsZCA8IDAKKyRnbGliX1BLR19FUlJPUlMKIAotCSAvKiBE aWQgdGhlIGNoaWxkIGZhaWw/ICAoVGhpcyBzaG91bGRuJ3QgaGFwcGVuLikgICovCi0JIHx8IHN0 YXR1cworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQg dmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJl Zml4LgogCi0JIC8qIERpZCB0aGUgdmZvcmsvY29tcGlsZXIgYnVnIG9jY3VyPyAgKi8KLQkgfHwg cGFyZW50ICE9IGdldHBpZCgpCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJv bm1lbnQgdmFyaWFibGVzIGdsaWJfQ0ZMQUdTCithbmQgZ2xpYl9MSUJTIHRvIGF2b2lkIHRoZSBu ZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3Ig bW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJp ZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFz X2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3Ig JD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9s ZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBl bnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgogCi0J IC8qIERpZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1ZyBvY2N1cj8gICovCi0JIHx8IGZzdGF0KGZp bGVubyhzdGRvdXQpLCAmc3QpICE9IDAKLQkgKTsKLSAgfQotfQotX0FDRU9GCi1pZiBhY19mbl9j X3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY192Zm9ya193b3Jrcz15ZXMK K0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZ2xp Yl9DRkxBR1MKK2FuZCBnbGliX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29u ZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1Rv IGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+ LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CiBl bHNlCi0gIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBj b3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNv bmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQorCWds aWJfQ0ZMQUdTPSRwa2dfY3ZfZ2xpYl9DRkxBR1MKKwlnbGliX0xJQlM9JHBrZ19jdl9nbGliX0xJ QlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIAogZmkKLXsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY192Zm9ya193b3Jr cyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNjsgfQogCi1maTsK LWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgotICBhY19j dl9mdW5jX3Zmb3JrX3dvcmtzPSRhY19jdl9mdW5jX3Zmb3JrCi0gIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX3Zmb3Jr X3dvcmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiY1Ci0kYXNfZWNo byAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MgZ3Vlc3Nl ZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQorIyBDaGVjayBsaWJyYXJ5IHBh dGgKK2lmIHRlc3QgIlwke2V4ZWNfcHJlZml4fS9saWIiID0gIiRsaWJkaXIiOyB0aGVuIDoKKyAg aWYgdGVzdCAiJGV4ZWNfcHJlZml4IiA9ICJOT05FIiAmJiB0ZXN0ICIkcHJlZml4IiAhPSAiTk9O RSI7IHRoZW4gOgorICBleGVjX3ByZWZpeD0kcHJlZml4CiBmaQorICAgIGlmIHRlc3QgIiRleGVj X3ByZWZpeCIgPSAiTk9ORSI7IHRoZW4gOgorICBleGVjX3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVm aXgKK2ZpCisgICAgaWYgdGVzdCAtZCAiJHtleGVjX3ByZWZpeH0vbGliNjQiOyB0aGVuIDoKIAot aWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIiA9IHh5ZXM7IHRoZW4KLQotJGFzX2Vj aG8gIiNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEiID4+Y29uZmRlZnMuaAorICAgICAgICBM SUJfUEFUSD0ibGliNjQiCiAKIGVsc2UKIAotJGFzX2VjaG8gIiNkZWZpbmUgdmZvcmsgZm9yayIg Pj5jb25mZGVmcy5oCisgICAgICAgIExJQl9QQVRIPSJsaWIiCiAKIGZpCi1pZiB0ZXN0ICJ4JGFj X2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCiAKLSRhc19lY2hvICIjZGVmaW5lIEhB VkVfV09SS0lOR19GT1JLIDEiID4+Y29uZmRlZnMuaAorZWxzZQogCi1maQorICAgIExJQl9QQVRI PSIke2xpYmRpcjpgZXhwciBsZW5ndGggIiRleGVjX3ByZWZpeCIgKyAxYH0iCiAKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVf U09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMu Li4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2Urc2V0fSIg PSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICB3aGls ZSA6OyBkbwotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0v KiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZf dCAqLwotICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAoKQotewotaW50ICgqZnAp IChGSUxFICosIG9mZl90LCBpbnQpID0gZnNlZWtvOwotICAgICByZXR1cm4gZnNlZWtvIChzdGRp biwgMCwgMCkgJiYgZnAgKHN0ZGluLCAwLCAwKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VP RgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zeXNfbGFy Z2VmaWxlX3NvdXJjZT1ubzsgYnJlYWsKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4 dAotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQg Y29uZmRlZnMuaC4gICovCi0jZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKLSNpbmNsdWRlIDxz eXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCi0gICAgICNpbmNsdWRlIDxzdGRpby5oPgotaW50 Ci1tYWluICgpCi17Ci1pbnQgKCpmcCkgKEZJTEUgKiwgb2ZmX3QsIGludCkgPSBmc2Vla287Ci0g ICAgIHJldHVybiBmc2Vla28gKHN0ZGluLCAwLCAwKSAmJiBmcCAoc3RkaW4sIDAsIDApOwotICA7 Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsg dGhlbiA6Ci0gIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTE7IGJyZWFrCiBmaQotcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9dW5r bm93bgotICBicmVhawotZG9uZQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNQotJGFzX2Vj aG8gIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgPiY2OyB9Ci1jYXNlICRhY19jdl9zeXNf bGFyZ2VmaWxlX3NvdXJjZSBpbiAjKAotICBubyB8IHVua25vd24pIDs7Ci0gICopCi1jYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFICRhY19jdl9zeXNf bGFyZ2VmaWxlX3NvdXJjZQotX0FDRU9GCi07OwotZXNhYwotcm0gLXJmIGNvbmZ0ZXN0KgotCi0j IFdlIHVzZWQgdG8gdHJ5IGRlZmluaW5nIF9YT1BFTl9TT1VSQ0U9NTAwIHRvbywgdG8gd29yayBh cm91bmQgYSBidWcKLSMgaW4gZ2xpYmMgMi4xLjMsIGJ1dCB0aGF0IGJyZWFrcyB0b28gbWFueSBv dGhlciB0aGluZ3MuCi0jIElmIHlvdSB3YW50IGZzZWVrbyBhbmQgZnRlbGxvIHdpdGggZ2xpYmMs IHVwZ3JhZGUgdG8gYSBmaXhlZCBnbGliYy4KLWlmIHRlc3QgJGFjX2N2X3N5c19sYXJnZWZpbGVf c291cmNlICE9IHVua25vd247IHRoZW4KIAotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GU0VFS08g MSIgPj5jb25mZGVmcy5oCiAKLWZpCisjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorYWNfZm5fY19j aGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImJ6bGliLmgiICJhY19jdl9oZWFkZXJfYnps aWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYnps aWJfaCIgPSB4IiJ5ZXM7IHRoZW4gOgogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRsZXMgdHJhaWxp bmcgc2xhc2giID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsc3RhdCBjb3JyZWN0 bHkgaGFuZGxlcyB0cmFpbGluZyBzbGFzaC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9m dW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsrc2V0fSIgPSBzZXQ7IHRoZW4g OgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig QloyX2J6RGVjb21wcmVzc0luaXQgaW4gLWxiejIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIEJaMl9iekRlY29tcHJlc3NJbml0IGluIC1sYnoyLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIk e2FjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzc0luaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgog ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBybSAtZiBjb25mdGVzdC5zeW0g Y29uZnRlc3QuZmlsZQotZWNobyA+Y29uZnRlc3QuZmlsZQotaWYgdGVzdCAiJGFzX2xuX3MiID0g ImxuIC1zIiAmJiBsbiAtcyBjb25mdGVzdC5maWxlIGNvbmZ0ZXN0LnN5bTsgdGhlbgotICBpZiB0 ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfbHN0YXRf ZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubwotZWxzZQotICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJ QlMKK0xJQlM9Ii1sYnoyICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0 CisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVy cm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBl IG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291 bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5k aWYKK2NoYXIgQloyX2J6RGVjb21wcmVzc0luaXQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLXN0cnVj dCBzdGF0IHNidWY7Ci0gICAgIC8qIExpbnV4IHdpbGwgZGVyZWZlcmVuY2UgdGhlIHN5bWxpbmsg YW5kIGZhaWwsIGFzIHJlcXVpcmVkIGJ5IFBPU0lYLgotCVRoYXQgaXMgYmV0dGVyIGluIHRoZSBz ZW5zZSB0aGF0IGl0IG1lYW5zIHdlIHdpbGwgbm90Ci0JaGF2ZSB0byBjb21waWxlIGFuZCB1c2Ug dGhlIGxzdGF0IHdyYXBwZXIuICAqLwotICAgICByZXR1cm4gbHN0YXQgKCJjb25mdGVzdC5zeW0v IiwgJnNidWYpID09IDA7CityZXR1cm4gQloyX2J6RGVjb21wcmVzc0luaXQgKCk7CiAgIDsKICAg cmV0dXJuIDA7CiB9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4g OgotICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzCi1l bHNlCi0gIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubwot ZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29u ZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNv bmZ0ZXN0LiRhY19leHQKLWZpCi0KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVu IDoKKyAgYWNfY3ZfbGliX2J6Ml9CWjJfYnpEZWNvbXByZXNzSW5pdD15ZXMKIGVsc2UKLSAgIyBJ ZiB0aGUgYGxuIC1zJyBjb21tYW5kIGZhaWxlZCwgdGhlbiB3ZSBwcm9iYWJseSBkb24ndCBldmVu Ci0gICMgaGF2ZSBhbiBsc3RhdCBmdW5jdGlvbi4KLSAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVy ZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisgIGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVz c0luaXQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQotCitybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19l eGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zf bGliX2J6Ml9CWjJfYnpEZWNvbXByZXNzSW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9i ejJfQloyX2J6RGVjb21wcmVzc0luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfYnoy X0JaMl9iekRlY29tcHJlc3NJbml0IiA9IHgiInllczsgdGhlbiA6CisgIHpsaWI9IiR6bGliIC1E SEFWRV9CWkxJQiAtbGJ6MiIKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3lt bGluayIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNo ZWRfc3ltbGluayIgPiY2OyB9Ci0KLXRlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2Vz X3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0j ZGVmaW5lIExTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIDEKLV9BQ0VPRgogCitmaQogCi1p ZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIg PSB4bm87IHRoZW4KLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgbHN0YXQuJGFjX29iamV4 dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGxzdGF0LiRhY19vYmpleHQiCi0gOzsK LWVzYWMKIAotZmkKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsem1h LmgiICJhY19jdl9oZWFkZXJfbHptYV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0 ICJ4JGFjX2N2X2hlYWRlcl9sem1hX2giID0geCIieWVzOyB0aGVuIDoKIAoteyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN5cy90eXBlcy5o IGRlZmluZXMgbWFrZWRldiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN5cy90 eXBlcy5oIGRlZmluZXMgbWFrZWRldi4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFk ZXJfc3lzX3R5cGVzX2hfbWFrZWRlditzZXR9IiA9IHNldDsgdGhlbiA6Cit7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsem1hX3N0cmVhbV9kZWNv ZGVyIGluIC1sbHptYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbHptYV9zdHJlYW1f ZGVjb2RlciBpbiAtbGx6bWEuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2x6bWFf bHptYV9zdHJlYW1fZGVjb2RlcitzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxsem1hICAk TElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVu ZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogT3ZlcnJpZGUg YW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hh ciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1 aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4g ICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBsem1hX3N0 cmVhbV9kZWNvZGVyICgpOwogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gbWFrZWRldigwLCAwKTsK K3JldHVybiBsem1hX3N0cmVhbV9kZWNvZGVyICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FD RU9GCiBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2hlYWRl cl9zeXNfdHlwZXNfaF9tYWtlZGV2PXllcworICBhY19jdl9saWJfbHptYV9sem1hX3N0cmVhbV9k ZWNvZGVyPXllcwogZWxzZQotICBhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRldj1ubwor ICBhY19jdl9saWJfbHptYV9sem1hX3N0cmVhbV9kZWNvZGVyPW5vCiBmaQogcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0 IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXYiID4mNQot JGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRldiIgPiY2OyB9Ci0KLWlm IHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaF9tYWtlZGV2ID0gbm87IHRoZW4KLWFjX2Zu X2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvbWtkZXYuaCIgImFjX2N2X2hl YWRlcl9zeXNfbWtkZXZfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19j dl9oZWFkZXJfc3lzX21rZGV2X2giID0geCIieWVzOyB0aGVuIDoKLQotJGFzX2VjaG8gIiNkZWZp bmUgTUFKT1JfSU5fTUtERVYgMSIgPj5jb25mZGVmcy5oCi0KK0xJQlM9JGFjX2NoZWNrX2xpYl9z YXZlX0xJQlMKIGZpCi0KLQotCi0gIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfbWtkZXZfaCA9 IG5vOyB0aGVuCi0gICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5 cy9zeXNtYWNyb3MuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3lzbWFjcm9zX2giICIkYWNfaW5jbHVk ZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zeXNtYWNyb3NfaCIgPSB4 IiJ5ZXM7IHRoZW4gOgotCi0kYXNfZWNobyAiI2RlZmluZSBNQUpPUl9JTl9TWVNNQUNST1MgMSIg Pj5jb25mZGVmcy5oCi0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkYWNfY3ZfbGliX2x6bWFfbHptYV9zdHJlYW1fZGVjb2RlciIgPiY1CiskYXNfZWNo byAiJGFjX2N2X2xpYl9sem1hX2x6bWFfc3RyZWFtX2RlY29kZXIiID4mNjsgfQoraWYgdGVzdCAi eCRhY19jdl9saWJfbHptYV9sem1hX3N0cmVhbV9kZWNvZGVyIiA9IHgiInllczsgdGhlbiA6Cisg IHpsaWI9IiR6bGliIC1ESEFWRV9MWk1BIC1sbHptYSIKIGZpCiAKIAotICBmaQogZmkKIAotZm9y IGFjX2hlYWRlciBpbiBzdGRsaWIuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25n cmVsICIkTElORU5PIiAic3RkbGliLmgiICJhY19jdl9oZWFkZXJfc3RkbGliX2giICIkYWNfaW5j bHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oIiA9IHgiInll czsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVERM SUJfSCAxCi1fQUNFT0YKLQotZmkKIAotZG9uZQorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3Jl bCAiJExJTkVOTyIgImx6by9sem8xeC5oIiAiYWNfY3ZfaGVhZGVyX2x6b19sem8xeF9oIiAiJGFj X2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9sem9fbHpvMXhfaCIg PSB4IiJ5ZXM7IHRoZW4gOgogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBHTlUgbGliYyBjb21wYXRpYmxlIG1hbGxvYyIgPiY1Ci0kYXNfZWNo b19uICJjaGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBtYWxsb2MuLi4gIiA+JjY7IH0K LWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsK3NldH0iID0gc2V0OyB0aGVu IDoKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGx6bzF4X2RlY29tcHJlc3MgaW4gLWxsem8yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZv ciBsem8xeF9kZWNvbXByZXNzIGluIC1sbHpvMi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19j dl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIg PSB5ZXM7IHRoZW4gOgotICBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8KLWVsc2UKLSAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19s aWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGx6bzIgICRMSUJTIgorY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lm IGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVERMSUJfSAotIyBpbmNsdWRl IDxzdGRsaWIuaD4KLSNlbHNlCi1jaGFyICptYWxsb2MgKCk7Ci0jZW5kaWYKIAorLyogT3ZlcnJp ZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2Ug Y2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAg IGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBs eS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBsem8x eF9kZWNvbXByZXNzICgpOwogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gISBtYWxsb2MgKDApOwor cmV0dXJuIGx6bzF4X2RlY29tcHJlc3MgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YK LWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9mdW5jX21hbGxv Y18wX25vbm51bGw9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Cisg IGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3M9eWVzCiBlbHNlCi0gIGFjX2N2X2Z1bmNf bWFsbG9jXzBfbm9ubnVsbD1ubworICBhY19jdl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzPW5v CiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBj b25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0g Y29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29i amV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFj X2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21wcmVzcyIgPiY1 CiskYXNfZWNobyAiJGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3MiID4mNjsgfQoraWYg dGVzdCAieCRhY19jdl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzIiA9IHgiInllczsgdGhlbiA6 CisgIHpsaWI9IiR6bGliIC1ESEFWRV9MWk8xWCAtbGx6bzIiCiBmaQoteyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21hbGxvY18wX25v bm51bGwiID4mNQotJGFzX2VjaG8gIiRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNjsg fQotaWYgdGVzdCAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsID0geWVzOyB0aGVuIDoKLQot JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQUxMT0MgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAg JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQUxMT0MgMCIgPj5jb25mZGVmcy5oCi0KLSAgIGNhc2Ug IiAkTElCT0JKUyAiIGluCi0gICoiIG1hbGxvYy4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElC T0JKUz0iJExJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQogCi0kYXNfZWNo byAiI2RlZmluZSBtYWxsb2MgcnBsX21hbGxvYyIgPj5jb25mZGVmcy5oCiAKIGZpCiAKIAoteyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRp bWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1Ci0kYXNfZWNob19u ICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNs dWRlZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGltZStzZXR9IiA9IHNl dDsgdGhlbiA6CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIGlvX3NldHVwIGluIC1sYWlvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZv ciBpb19zZXR1cCBpbiAtbGFpby4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfYWlv X2lvX3NldHVwK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKIGVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAor ICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGFpbyAgJExJQlMiCitjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMu aC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNp bmNsdWRlIDx0aW1lLmg+CiAKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBl IHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2gg dGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVu dCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitl eHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgaW9fc2V0dXAgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWlm ICgoc3RydWN0IHRtICopIDApCi1yZXR1cm4gMDsKK3JldHVybiBpb19zZXR1cCAoKTsKICAgOwog ICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOgotICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRM SU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2Fpb19pb19zZXR1cD15ZXMKIGVsc2UKLSAgYWNf Y3ZfaGVhZGVyX3RpbWU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKLSRhc19lY2hv ICIkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RpbWUg PSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEiID4+ Y29uZmRlZnMuaAotCisgIGFjX2N2X2xpYl9haW9faW9fc2V0dXA9bm8KIGZpCi0KLQotCi0KLSAg Zm9yIGFjX2hlYWRlciBpbiAkYWNfaGVhZGVyX2xpc3QKLWRvIDoKLSAgYXNfYWNfSGVhZGVyPWAk YXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19j aGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVy IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVh ZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2Rl ZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YK LQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29u ZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZl X0xJQlMKIGZpCi0KLWRvbmUKLQotCi0KLQotCi0KLQotCi0gIGZvciBhY19mdW5jIGluICRhY19m dW5jX2xpc3QKLWRvIDoKLSAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVu YyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIg IiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsg dGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJI QVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9haW9faW9fc2V0dXAi ID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfYWlvX2lvX3NldHVwIiA+JjY7IH0KK2lmIHRlc3Qg IngkYWNfY3ZfbGliX2Fpb19pb19zZXR1cCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBzeXN0ZW1fYWlv PSJ5IgorZWxzZQorICBzeXN0ZW1fYWlvPSJuIgogZmkKLWRvbmUKLQogCiAKLQotCi17ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1r dGltZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBta3RpbWUuLi4gIiA+ JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY193b3JraW5nX21rdGltZStzZXR9IiA9IHNldDsg dGhlbiA6Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBNRDUgaW4gLWxjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1ENSBp biAtbGNyeXB0by4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfY3J5cHRvX01ENStz ZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0g IGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY193 b3JraW5nX21rdGltZT1ubwotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0CisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY3J5 cHRvICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIFRlc3QgcHJvZ3JhbSBmcm9tIFBhdWwgRWdnZXJ0 IGFuZCBUb255IExlbmVpcy4gICovCi0jaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGluY2x1 ZGUgPHN5cy90aW1lLmg+Ci0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmZGVmIEhBVkVf U1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8 dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRl IDxzdGRsaWIuaD4KIAotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+ Ci0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0FMQVJNCi0jIGRlZmluZSBhbGFybShYKSAvKiBlbXB0 eSAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4g ZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5 cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3 b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKICNl bmRpZgotCi0vKiBXb3JrIGFyb3VuZCByZWRlZmluaXRpb24gdG8gcnBsX3B1dGVudiBieSBvdGhl ciBjb25maWcgdGVzdHMuICAqLwotI3VuZGVmIHB1dGVudgotCi1zdGF0aWMgdGltZV90IHRpbWVf dF9tYXg7Ci1zdGF0aWMgdGltZV90IHRpbWVfdF9taW47Ci0KLS8qIFZhbHVlcyB3ZSdsbCB1c2Ug dG8gc2V0IHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCi1zdGF0aWMgY29uc3QgY2hh ciAqdHpfc3RyaW5nc1tdID0gewotICAoY29uc3QgY2hhciAqKSAwLCAiVFo9R01UMCIsICJUWj1K U1QtOSIsCi0gICJUWj1FU1QrM0VEVCsyLE0xMC4xLjAvMDA6MDA6MDAsTTIuMy4wLzAwOjAwOjAw IgotfTsKLSNkZWZpbmUgTl9TVFJJTkdTIChzaXplb2YgKHR6X3N0cmluZ3MpIC8gc2l6ZW9mICh0 el9zdHJpbmdzWzBdKSkKLQotLyogUmV0dXJuIDAgaWYgbWt0aW1lIGZhaWxzIHRvIGNvbnZlcnQg YSBkYXRlIGluIHRoZSBzcHJpbmctZm9yd2FyZCBnYXAuCi0gICBCYXNlZCBvbiBhIHByb2JsZW0g cmVwb3J0IGZyb20gQW5kcmVhcyBKYWVnZXIuICAqLwotc3RhdGljIGludAotc3ByaW5nX2Zvcndh cmRfZ2FwICgpCi17Ci0gIC8qIGdsaWJjICh1cCB0byBhYm91dCAxOTk4LTEwLTA3KSBmYWlsZWQg dGhpcyB0ZXN0LiAqLwotICBzdHJ1Y3QgdG0gdG07Ci0KLSAgLyogVXNlIHRoZSBwb3J0YWJsZSBQ T1NJWC4xIHNwZWNpZmljYXRpb24gIlRaPVBTVDhQRFQsTTQuMS4wLE0xMC41LjAiCi0gICAgIGlu c3RlYWQgb2YgIlRaPUFtZXJpY2EvVmFuY291dmVyIiBpbiBvcmRlciB0byBkZXRlY3QgdGhlIGJ1 ZyBldmVuCi0gICAgIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBPbHNvbiBleHRl bnNpb24sIG9yIGRvbid0IGhhdmUgdGhlCi0gICAgIGZ1bGwgem9uZWluZm8gdGFibGVzIGluc3Rh bGxlZC4gICovCi0gIHB1dGVudiAoKGNoYXIqKSAiVFo9UFNUOFBEVCxNNC4xLjAsTTEwLjUuMCIp OwotCi0gIHRtLnRtX3llYXIgPSA5ODsKLSAgdG0udG1fbW9uID0gMzsKLSAgdG0udG1fbWRheSA9 IDU7Ci0gIHRtLnRtX2hvdXIgPSAyOwotICB0bS50bV9taW4gPSAwOwotICB0bS50bV9zZWMgPSAw OwotICB0bS50bV9pc2RzdCA9IC0xOwotICByZXR1cm4gbWt0aW1lICgmdG0pICE9ICh0aW1lX3Qp IC0xOwotfQotCi1zdGF0aWMgaW50Ci1ta3RpbWVfdGVzdDEgKHRpbWVfdCBub3cpCi17Ci0gIHN0 cnVjdCB0bSAqbHQ7Ci0gIHJldHVybiAhIChsdCA9IGxvY2FsdGltZSAoJm5vdykpIHx8IG1rdGlt ZSAobHQpID09IG5vdzsKLX0KLQotc3RhdGljIGludAotbWt0aW1lX3Rlc3QgKHRpbWVfdCBub3cp Ci17Ci0gIHJldHVybiAobWt0aW1lX3Rlc3QxIChub3cpCi0JICAmJiBta3RpbWVfdGVzdDEgKCh0 aW1lX3QpICh0aW1lX3RfbWF4IC0gbm93KSkKLQkgICYmIG1rdGltZV90ZXN0MSAoKHRpbWVfdCkg KHRpbWVfdF9taW4gKyBub3cpKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWlyaXhfNl80X2J1ZyAoKQot ewotICAvKiBCYXNlZCBvbiBjb2RlIGZyb20gQXJpZWwgRmFpZ29uLiAgKi8KLSAgc3RydWN0IHRt IHRtOwotICB0bS50bV95ZWFyID0gOTY7Ci0gIHRtLnRtX21vbiA9IDM7Ci0gIHRtLnRtX21kYXkg PSAwOwotICB0bS50bV9ob3VyID0gMDsKLSAgdG0udG1fbWluID0gMDsKLSAgdG0udG1fc2VjID0g MDsKLSAgdG0udG1faXNkc3QgPSAtMTsKLSAgbWt0aW1lICgmdG0pOwotICByZXR1cm4gdG0udG1f bW9uID09IDIgJiYgdG0udG1fbWRheSA9PSAzMTsKLX0KLQotc3RhdGljIGludAotYmlndGltZV90 ZXN0IChpbnQgaikKLXsKLSAgc3RydWN0IHRtIHRtOwotICB0aW1lX3Qgbm93OwotICB0bS50bV95 ZWFyID0gdG0udG1fbW9uID0gdG0udG1fbWRheSA9IHRtLnRtX2hvdXIgPSB0bS50bV9taW4gPSB0 bS50bV9zZWMgPSBqOwotICBub3cgPSBta3RpbWUgKCZ0bSk7Ci0gIGlmIChub3cgIT0gKHRpbWVf dCkgLTEpCi0gICAgewotICAgICAgc3RydWN0IHRtICpsdCA9IGxvY2FsdGltZSAoJm5vdyk7Ci0g ICAgICBpZiAoISAobHQKLQkgICAgICYmIGx0LT50bV95ZWFyID09IHRtLnRtX3llYXIKLQkgICAg ICYmIGx0LT50bV9tb24gPT0gdG0udG1fbW9uCi0JICAgICAmJiBsdC0+dG1fbWRheSA9PSB0bS50 bV9tZGF5Ci0JICAgICAmJiBsdC0+dG1faG91ciA9PSB0bS50bV9ob3VyCi0JICAgICAmJiBsdC0+ dG1fbWluID09IHRtLnRtX21pbgotCSAgICAgJiYgbHQtPnRtX3NlYyA9PSB0bS50bV9zZWMKLQkg ICAgICYmIGx0LT50bV95ZGF5ID09IHRtLnRtX3lkYXkKLQkgICAgICYmIGx0LT50bV93ZGF5ID09 IHRtLnRtX3dkYXkKLQkgICAgICYmICgobHQtPnRtX2lzZHN0IDwgMCA/IC0xIDogMCA8IGx0LT50 bV9pc2RzdCkKLQkJICA9PSAodG0udG1faXNkc3QgPCAwID8gLTEgOiAwIDwgdG0udG1faXNkc3Qp KSkpCi0JcmV0dXJuIDA7Ci0gICAgfQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAoteWVh cl8yMDUwX3Rlc3QgKCkKLXsKLSAgLyogVGhlIGNvcnJlY3QgYW5zd2VyIGZvciAyMDUwLTAyLTAx IDAwOjAwOjAwIGluIFBhY2lmaWMgdGltZSwKLSAgICAgaWdub3JpbmcgbGVhcCBzZWNvbmRzLiAg Ki8KLSAgdW5zaWduZWQgbG9uZyBpbnQgYW5zd2VyID0gMjUyNzMxNTIwMFVMOwotCi0gIHN0cnVj dCB0bSB0bTsKLSAgdGltZV90IHQ7Ci0gIHRtLnRtX3llYXIgPSAyMDUwIC0gMTkwMDsKLSAgdG0u dG1fbW9uID0gMiAtIDE7Ci0gIHRtLnRtX21kYXkgPSAxOwotICB0bS50bV9ob3VyID0gdG0udG1f bWluID0gdG0udG1fc2VjID0gMDsKLSAgdG0udG1faXNkc3QgPSAtMTsKLQotICAvKiBVc2UgdGhl IHBvcnRhYmxlIFBPU0lYLjEgc3BlY2lmaWNhdGlvbiAiVFo9UFNUOFBEVCxNNC4xLjAsTTEwLjUu MCIKLSAgICAgaW5zdGVhZCBvZiAiVFo9QW1lcmljYS9WYW5jb3V2ZXIiIGluIG9yZGVyIHRvIGRl dGVjdCB0aGUgYnVnIGV2ZW4KLSAgICAgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhl IE9sc29uIGV4dGVuc2lvbiwgb3IgZG9uJ3QgaGF2ZSB0aGUKLSAgICAgZnVsbCB6b25laW5mbyB0 YWJsZXMgaW5zdGFsbGVkLiAgKi8KLSAgcHV0ZW52ICgoY2hhciopICJUWj1QU1Q4UERULE00LjEu MCxNMTAuNS4wIik7Ci0KLSAgdCA9IG1rdGltZSAoJnRtKTsKLQotICAvKiBDaGVjayB0aGF0IHRo ZSByZXN1bHQgaXMgZWl0aGVyIGEgZmFpbHVyZSwgb3IgY2xvc2UgZW5vdWdoCi0gICAgIHRvIHRo ZSBjb3JyZWN0IGFuc3dlciB0aGF0IHdlIGNhbiBhc3N1bWUgdGhlIGRpc2NyZXBhbmN5IGlzCi0g ICAgIGR1ZSB0byBsZWFwIHNlY29uZHMuICAqLwotICByZXR1cm4gKHQgPT0gKHRpbWVfdCkgLTEK LQkgIHx8ICgwIDwgdCAmJiBhbnN3ZXIgLSAxMjAgPD0gdCAmJiB0IDw9IGFuc3dlciArIDEyMCkp OwotfQotCitjaGFyIE1ENSAoKTsKIGludAogbWFpbiAoKQogewotICB0aW1lX3QgdCwgZGVsdGE7 Ci0gIGludCBpLCBqOwotCi0gIC8qIFRoaXMgdGVzdCBtYWtlcyBzb21lIGJ1Z2d5IG1rdGltZSBp bXBsZW1lbnRhdGlvbnMgbG9vcC4KLSAgICAgR2l2ZSB1cCBhZnRlciA2MCBzZWNvbmRzOyBhIG1r dGltZSBzbG93ZXIgdGhhbiB0aGF0Ci0gICAgIGlzbid0IHdvcnRoIHVzaW5nIGFueXdheS4gICov Ci0gIGFsYXJtICg2MCk7Ci0KLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB0ID0gKHRpbWVfdF9t YXggPDwgMSkgKyAxOwotICAgICAgaWYgKHQgPD0gdGltZV90X21heCkKLQlicmVhazsKLSAgICAg IHRpbWVfdF9tYXggPSB0OwotICAgIH0KLSAgdGltZV90X21pbiA9IC0gKCh0aW1lX3QpIH4gKHRp bWVfdCkgMCA9PSAodGltZV90KSAtMSkgLSB0aW1lX3RfbWF4OwotCi0gIGRlbHRhID0gdGltZV90 X21heCAvIDk5NzsgLyogYSBzdWl0YWJsZSBwcmltZSBudW1iZXIgKi8KLSAgZm9yIChpID0gMDsg aSA8IE5fU1RSSU5HUzsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0el9zdHJpbmdzW2ldKQotCXB1 dGVudiAoKGNoYXIqKSB0el9zdHJpbmdzW2ldKTsKLQotICAgICAgZm9yICh0ID0gMDsgdCA8PSB0 aW1lX3RfbWF4IC0gZGVsdGE7IHQgKz0gZGVsdGEpCi0JaWYgKCEgbWt0aW1lX3Rlc3QgKHQpKQot CSAgcmV0dXJuIDE7Ci0gICAgICBpZiAoISAobWt0aW1lX3Rlc3QgKCh0aW1lX3QpIDEpCi0JICAg ICAmJiBta3RpbWVfdGVzdCAoKHRpbWVfdCkgKDYwICogNjApKQotCSAgICAgJiYgbWt0aW1lX3Rl c3QgKCh0aW1lX3QpICg2MCAqIDYwICogMjQpKSkpCi0JcmV0dXJuIDE7Ci0KLSAgICAgIGZvciAo aiA9IDE7IDsgaiA8PD0gMSkKLQlpZiAoISBiaWd0aW1lX3Rlc3QgKGopKQotCSAgcmV0dXJuIDE7 Ci0JZWxzZSBpZiAoSU5UX01BWCAvIDIgPCBqKQotCSAgYnJlYWs7Ci0gICAgICBpZiAoISBiaWd0 aW1lX3Rlc3QgKElOVF9NQVgpKQotCXJldHVybiAxOwotICAgIH0KLSAgcmV0dXJuICEgKGlyaXhf Nl80X2J1ZyAoKSAmJiBzcHJpbmdfZm9yd2FyZF9nYXAgKCkgJiYgeWVhcl8yMDUwX3Rlc3QgKCkp OworcmV0dXJuIE1ENSAoKTsKKyAgOworICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotaWYgYWNfZm5f Y190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWU9 eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9j cnlwdG9fTUQ1PXllcwogZWxzZQotICBhY19jdl9mdW5jX3dvcmtpbmdfbWt0aW1lPW5vCi1maQot cm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVz dCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRl c3QuJGFjX2V4dAotZmkKLQorICBhY19jdl9saWJfY3J5cHRvX01ENT1ubwogZmkKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY193b3Jr aW5nX21rdGltZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWUiID4m NjsgfQotaWYgdGVzdCAkYWNfY3ZfZnVuY193b3JraW5nX21rdGltZSA9IG5vOyB0aGVuCi0gIGNh c2UgIiAkTElCT0JKUyAiIGluCi0gICoiIG1rdGltZS4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikg TElCT0JKUz0iJExJQk9CSlMgbWt0aW1lLiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQorcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZp Ci0KLQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBnZXRwYWdlc2l6ZQotZG8gOgotICBhY19mbl9j X2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRwYWdlc2l6ZSIgImFjX2N2X2Z1bmNfZ2V0cGFnZXNp emUiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiID0geCIieWVzOyB0aGVuIDoK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zf bGliX2NyeXB0b19NRDUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3J5cHRvX01ENSIgPiY2 OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fTUQ1IiA9IHgiInllczsgdGhlbiA6CiAg IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCisj ZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEKIF9BQ0VPRgogCisgIExJQlM9Ii1sY3J5cHRvICRMSUJT IgorCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBsaWJjcnlwdG8iICIk TElORU5PIiA1CiBmaQotZG9uZQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIHdvcmtpbmcgbW1hcC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21t YXBfZml4ZWRfbWFwcGVkK3NldH0iID0gc2V0OyB0aGVuIDoKK3sgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGV4dDJmc19vcGVuMiBpbiAtbGV4dDJm cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZXh0MmZzX29wZW4yIGluIC1sZXh0MmZz Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9leHQyZnNfZXh0MmZzX29wZW4yK3Nl dH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAg aWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9mdW5jX21t YXBfZml4ZWRfbWFwcGVkPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxl eHQyZnMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLS8qIG1hbGxv YyBtaWdodCBoYXZlIGJlZW4gcmVuYW1lZCBhcyBycGxfbWFsbG9jLiAqLwotI3VuZGVmIG1hbGxv YwotCi0vKiBUaGFua3MgdG8gTWlrZSBIYWVydGVsIGFuZCBKaW0gQXZlcmEgZm9yIHRoaXMgdGVz dC4KLSAgIEhlcmUgaXMgYSBtYXRyaXggb2YgbW1hcCBwb3NzaWJpbGl0aWVzOgotCW1tYXAgcHJp dmF0ZSBub3QgZml4ZWQKLQltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRs eSB1bm1hcHBlZAotCW1tYXAgcHJpdmF0ZSBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBw ZWQKLQltbWFwIHNoYXJlZCBub3QgZml4ZWQKLQltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hl cmUgY3VycmVudGx5IHVubWFwcGVkCi0JbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGFs cmVhZHkgbWFwcGVkCi0gICBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgd2Ugc2hvdWxkIHZlcmlmeSB0 aGF0IGNoYW5nZXMgY2Fubm90IGJlIHJlYWQoKQotICAgYmFjayBmcm9tIHRoZSBmaWxlLCBub3Ig bW1hcCdzIGJhY2sgZnJvbSB0aGUgZmlsZSBhdCBhIGRpZmZlcmVudAotICAgYWRkcmVzcy4gIChU aGVyZSBoYXZlIGJlZW4gc3lzdGVtcyB3aGVyZSBwcml2YXRlIHdhcyBub3QgY29ycmVjdGx5Ci0g ICBpbXBsZW1lbnRlZCBsaWtlIHRoZSBpbmZhbW91cyBpMzg2IHN2cjQuMCwgYW5kIHN5c3RlbXMg d2hlcmUgdGhlCi0gICBWTSBwYWdlIGNhY2hlIHdhcyBub3QgY29oZXJlbnQgd2l0aCB0aGUgZmls ZSBzeXN0ZW0gYnVmZmVyIGNhY2hlCi0gICBsaWtlIGVhcmx5IHZlcnNpb25zIG9mIEZyZWVCU0Qg YW5kIHBvc3NpYmx5IGNvbnRlbXBvcmFyeSBOZXRCU0QuKQotICAgRm9yIHNoYXJlZCBtYXBwaW5n cywgd2Ugc2hvdWxkIGNvbnZlcnNlbHkgdmVyaWZ5IHRoYXQgY2hhbmdlcyBnZXQKLSAgIHByb3Bh Z2F0ZWQgYmFjayB0byBhbGwgdGhlIHBsYWNlcyB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlLgotCi0g ICBHcmVwIHdhbnRzIHByaXZhdGUgZml4ZWQgYWxyZWFkeSBtYXBwZWQuCi0gICBUaGUgbWFpbiB0 aGluZ3MgZ3JlcCBuZWVkcyB0byBrbm93IGFib3V0IG1tYXAgYXJlOgotICAgKiBkb2VzIGl0IGV4 aXN0IGFuZCBpcyBpdCBzYWZlIHRvIHdyaXRlIGludG8gdGhlIG1tYXAnZCBhcmVhCi0gICAqIGhv dyB0byB1c2UgaXQgKEJTRCB2YXJpYW50cykgICovCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2lu Y2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgIWRlZmlu ZWQgSEFWRV9TVERMSUJfSAotY2hhciAqbWFsbG9jICgpOwotI2VuZGlmCi0KLS8qIFRoaXMgbWVz cyB3YXMgY29waWVkIGZyb20gdGhlIEdOVSBnZXRwYWdlc2l6ZS5oLiAgKi8KLSNpZm5kZWYgSEFW RV9HRVRQQUdFU0laRQotIyBpZmRlZiBfU0NfUEFHRVNJWkUKLSMgIGRlZmluZSBnZXRwYWdlc2l6 ZSgpIHN5c2NvbmYoX1NDX1BBR0VTSVpFKQotIyBlbHNlIC8qIG5vIF9TQ19QQUdFU0laRSAqLwot IyAgaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotIyAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotIyAg IGlmZGVmIEVYRUNfUEFHRVNJWkUKLSMgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgRVhFQ19QQUdF U0laRQotIyAgIGVsc2UgLyogbm8gRVhFQ19QQUdFU0laRSAqLwotIyAgICBpZmRlZiBOQlBHCi0j ICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBOQlBHICogQ0xTSVpFCi0jICAgICBpZm5kZWYgQ0xT SVpFCi0jICAgICAgZGVmaW5lIENMU0laRSAxCi0jICAgICBlbmRpZiAvKiBubyBDTFNJWkUgKi8K LSMgICAgZWxzZSAvKiBubyBOQlBHICovCi0jICAgICBpZmRlZiBOQlBDCi0jICAgICAgZGVmaW5l IGdldHBhZ2VzaXplKCkgTkJQQwotIyAgICAgZWxzZSAvKiBubyBOQlBDICovCi0jICAgICAgaWZk ZWYgUEFHRVNJWkUKLSMgICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgUEFHRVNJWkUKLSMgICAg ICBlbmRpZiAvKiBQQUdFU0laRSAqLwotIyAgICAgZW5kaWYgLyogbm8gTkJQQyAqLwotIyAgICBl bmRpZiAvKiBubyBOQlBHICovCi0jICAgZW5kaWYgLyogbm8gRVhFQ19QQUdFU0laRSAqLwotIyAg ZWxzZSAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCi0jICAgZGVmaW5lIGdldHBhZ2VzaXplKCkg ODE5MgkvKiBwdW50IHRvdGFsbHkgKi8KLSMgIGVuZGlmIC8qIG5vIEhBVkVfU1lTX1BBUkFNX0gg Ki8KLSMgZW5kaWYgLyogbm8gX1NDX1BBR0VTSVpFICovCi0KLSNlbmRpZiAvKiBubyBIQVZFX0dF VFBBR0VTSVpFICovCiAKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRv IGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhl IHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBw cm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl cm4gIkMiCisjZW5kaWYKK2NoYXIgZXh0MmZzX29wZW4yICgpOwogaW50CiBtYWluICgpCiB7Ci0g IGNoYXIgKmRhdGEsICpkYXRhMiwgKmRhdGEzOwotICBjb25zdCBjaGFyICpjZGF0YTI7Ci0gIGlu dCBpLCBwYWdlc2l6ZTsKLSAgaW50IGZkLCBmZDI7Ci0KLSAgcGFnZXNpemUgPSBnZXRwYWdlc2l6 ZSAoKTsKLQotICAvKiBGaXJzdCwgbWFrZSBhIGZpbGUgd2l0aCBzb21lIGtub3duIGdhcmJhZ2Ug aW4gaXQuICovCi0gIGRhdGEgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKLSAgaWYgKCFk YXRhKQotICAgIHJldHVybiAxOwotICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKLSAg ICAqKGRhdGEgKyBpKSA9IHJhbmQgKCk7Ci0gIHVtYXNrICgwKTsKLSAgZmQgPSBjcmVhdCAoImNv bmZ0ZXN0Lm1tYXAiLCAwNjAwKTsKLSAgaWYgKGZkIDwgMCkKLSAgICByZXR1cm4gMjsKLSAgaWYg KHdyaXRlIChmZCwgZGF0YSwgcGFnZXNpemUpICE9IHBhZ2VzaXplKQotICAgIHJldHVybiAzOwot ICBjbG9zZSAoZmQpOwotCi0gIC8qIE5leHQsIGNoZWNrIHRoYXQgdGhlIHRhaWwgb2YgYSBwYWdl IGlzIHplcm8tZmlsbGVkLiAgRmlsZSBtdXN0IGhhdmUKLSAgICAgbm9uLXplcm8gbGVuZ3RoLCBv dGhlcndpc2Ugd2UgcmlzayBTSUdCVVMgZm9yIGVudGlyZSBwYWdlLiAgKi8KLSAgZmQyID0gb3Bl biAoImNvbmZ0ZXN0LnR4dCIsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKLSAg aWYgKGZkMiA8IDApCi0gICAgcmV0dXJuIDQ7Ci0gIGNkYXRhMiA9ICIiOwotICBpZiAod3JpdGUg KGZkMiwgY2RhdGEyLCAxKSAhPSAxKQotICAgIHJldHVybiA1OwotICBkYXRhMiA9IChjaGFyICop IG1tYXAgKDAsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBm ZDIsIDBMKTsKLSAgaWYgKGRhdGEyID09IE1BUF9GQUlMRUQpCi0gICAgcmV0dXJuIDY7Ci0gIGZv ciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQotICAgIGlmICgqKGRhdGEyICsgaSkpCi0gICAg ICByZXR1cm4gNzsKLSAgY2xvc2UgKGZkMik7Ci0gIGlmIChtdW5tYXAgKGRhdGEyLCBwYWdlc2l6 ZSkpCi0gICAgcmV0dXJuIDg7Ci0KLSAgLyogTmV4dCwgdHJ5IHRvIG1tYXAgdGhlIGZpbGUgYXQg YSBmaXhlZCBhZGRyZXNzIHdoaWNoIGFscmVhZHkgaGFzCi0gICAgIHNvbWV0aGluZyBlbHNlIGFs bG9jYXRlZCBhdCBpdC4gIElmIHdlIGNhbiwgYWxzbyBtYWtlIHN1cmUgdGhhdAotICAgICB3ZSBz ZWUgdGhlIHNhbWUgZ2FyYmFnZS4gICovCi0gIGZkID0gb3BlbiAoImNvbmZ0ZXN0Lm1tYXAiLCBP X1JEV1IpOwotICBpZiAoZmQgPCAwKQotICAgIHJldHVybiA5OwotICBpZiAoZGF0YTIgIT0gbW1h cCAoZGF0YTIsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotCQkgICAgIE1BUF9Q UklWQVRFIHwgTUFQX0ZJWEVELCBmZCwgMEwpKQotICAgIHJldHVybiAxMDsKLSAgZm9yIChpID0g MDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgaWYgKCooZGF0YSArIGkpICE9ICooZGF0YTIgKyBp KSkKLSAgICAgIHJldHVybiAxMTsKLQotICAvKiBGaW5hbGx5LCBtYWtlIHN1cmUgdGhhdCBjaGFu Z2VzIHRvIHRoZSBtYXBwZWQgYXJlYSBkbyBub3QKLSAgICAgcGVyY29sYXRlIGJhY2sgdG8gdGhl IGZpbGUgYXMgc2VlbiBieSByZWFkKCkuICAoVGhpcyBpcyBhIGJ1ZyBvbgotICAgICBzb21lIHZh cmlhbnRzIG9mIGkzODYgc3ZyNC4wLikgICovCi0gIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsg KytpKQotICAgICooZGF0YTIgKyBpKSA9ICooZGF0YTIgKyBpKSArIDE7Ci0gIGRhdGEzID0gKGNo YXIgKikgbWFsbG9jIChwYWdlc2l6ZSk7Ci0gIGlmICghZGF0YTMpCi0gICAgcmV0dXJuIDEyOwot ICBpZiAocmVhZCAoZmQsIGRhdGEzLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCi0gICAgcmV0dXJu IDEzOwotICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKLSAgICBpZiAoKihkYXRhICsg aSkgIT0gKihkYXRhMyArIGkpKQotICAgICAgcmV0dXJuIDE0OwotICBjbG9zZSAoZmQpOworcmV0 dXJuIGV4dDJmc19vcGVuMiAoKTsKKyAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotaWYgYWNf Zm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9t YXBwZWQ9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2 X2xpYl9leHQyZnNfZXh0MmZzX29wZW4yPXllcwogZWxzZQotICBhY19jdl9mdW5jX21tYXBfZml4 ZWRfbWFwcGVkPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQorICBhY19jdl9saWJfZXh0MmZzX2V4 dDJmc19vcGVuMj1ubwogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPiY1Ci0kYXNfZWNobyAi JGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfZnVu Y19tbWFwX2ZpeGVkX21hcHBlZCA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZF X01NQVAgMSIgPj5jb25mZGVmcy5oCi0KK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitM SUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotcm0gLWYgY29uZnRlc3QubW1hcCBjb25m dGVzdC50eHQKLQotZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaAotZG8gOgotICBhY19mbl9jX2No ZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkbGliLmgiICJhY19jdl9oZWFkZXJfc3Rk bGliX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0 ZGxpYl9oIiA9IHgiInllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNk ZWZpbmUgSEFWRV9TVERMSUJfSCAxCi1fQUNFT0YKLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZXh0MmZzX2V4dDJmc19vcGVuMiIg PiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9leHQyZnNfZXh0MmZzX29wZW4yIiA+JjY7IH0KK2lm IHRlc3QgIngkYWNfY3ZfbGliX2V4dDJmc19leHQyZnNfb3BlbjIiID0geCIieWVzOyB0aGVuIDoK KyAgbGliZXh0MmZzPSJ5IgorZWxzZQorICBsaWJleHQyZnM9Im4iCiBmaQogCi1kb25lCiAKLXsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBs aWJjIGNvbXBhdGlibGUgcmVhbGxvYyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR05V IGxpYmMgY29tcGF0aWJsZSByZWFsbG9jLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1 bmNfcmVhbGxvY18wX25vbm51bGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgoreyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2NyeV9tZF9oYXNoX2J1ZmZl ciBpbiAtbGdjcnlwdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2NyeV9tZF9oYXNo X2J1ZmZlciBpbiAtbGdjcnlwdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZ2Ny eXB0X2djcnlfbWRfaGFzaF9idWZmZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHll czsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8KLWVsc2UKLSAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19saWJf c2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdjcnlwdCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWYg ZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NURExJQl9ICi0jIGluY2x1ZGUg PHN0ZGxpYi5oPgotI2Vsc2UKLWNoYXIgKnJlYWxsb2MgKCk7Ci0jZW5kaWYKIAorLyogT3ZlcnJp ZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2Ug Y2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAg IGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBs eS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnY3J5 X21kX2hhc2hfYnVmZmVyICgpOwogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gISByZWFsbG9jICgw LCAwKTsKK3JldHVybiBnY3J5X21kX2hhc2hfYnVmZmVyICgpOwogICA7CiAgIHJldHVybiAwOwog fQogX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zf ZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8i OyB0aGVuIDoKKyAgYWNfY3ZfbGliX2djcnlwdF9nY3J5X21kX2hhc2hfYnVmZmVyPXllcwogZWxz ZQotICBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCisgIGFjX2N2X2xpYl9nY3J5cHRf Z2NyeV9tZF9oYXNoX2J1ZmZlcj1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRl c3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25m dGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9nY3J5 cHRfZ2NyeV9tZF9oYXNoX2J1ZmZlciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9nY3J5cHRf Z2NyeV9tZF9oYXNoX2J1ZmZlciIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9nY3J5cHRf Z2NyeV9tZF9oYXNoX2J1ZmZlciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsaWJnY3J5cHQ9InkiCitl bHNlCisgIGxpYmdjcnlwdD0ibiIKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwiID4mNQotJGFz X2VjaG8gIiRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjY7IH0KLWlmIHRlc3QgJGFj X2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwgPSB5ZXM7IHRoZW4gOgogCi0kYXNfZWNobyAiI2Rl ZmluZSBIQVZFX1JFQUxMT0MgMSIgPj5jb25mZGVmcy5oCiAKKworICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWQgZmxhZyIgPiY1 CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZCBmbGFnLi4uICIgPiY2OyB9CitpZiB0 ZXN0ICIke2F4X2N2X3B0aHJlYWRfZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1JFQUxM T0MgMCIgPj5jb25mZGVmcy5oCiAKLSAgIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIHJlYWxs b2MuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIHJlYWxsb2MuJGFj X29iamV4dCIKLSA7OwotZXNhYworICAgICAgICBheF9jdl9wdGhyZWFkX2ZsYWdzPS1wdGhyZWFk CisKKyAgICBQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X3B0aHJlYWRfZmxhZ3MiCisgICAgUFRIUkVB RF9MREZMQUdTPSIkYXhfY3ZfcHRocmVhZF9mbGFncyIKKyAgICBQVEhSRUFEX0xJQlM9IiIKKwor CisgICAgc2F2ZWRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisgICAgc2F2ZWRfTERGTEFHUz0iJExERkxB R1MiCisKKyAgICBzYXZlZF9MSUJTPSIkTElCUyIKKworCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQ VEhSRUFEX0NGTEFHUyIKKworICAgIExERkxBR1M9IiRMREZMQUdTICRQVEhSRUFEX0xERkxBR1Mi CisKKyAgICBMSUJTPSIkTElCUyAkUFRIUkVBRF9MSUJTIgorCisgICAgICAgIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8K KworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludCBtYWluKHZvaWQpIHsKKyAgcHRocmVhZF9hdGZv cmsoMCwwLDApOworICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsKK30KKworX0FDRU9GCitpZiBh Y19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYXhfY3ZfcHRocmVh ZF9mbGFncz1mYWlsZWQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAg Q0ZMQUdTPSIkc2F2ZWRfQ0ZMQUdTIgorCisgICAgTERGTEFHUz0iJHNhdmVkX0xERkxBR1MiCiAK KyAgICBMSUJTPSIkc2F2ZWRfTElCUyIKIAotJGFzX2VjaG8gIiNkZWZpbmUgcmVhbGxvYyBycGxf cmVhbGxvYyIgPj5jb25mZGVmcy5oCiAKIGZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X3B0aHJlYWRfZmxhZ3MiID4mNQorJGFzX2VjaG8g IiRheF9jdl9wdGhyZWFkX2ZsYWdzIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGF4X2N2X3B0aHJl YWRfZmxhZ3MiID0geGZhaWxlZDsgdGhlbgorICAgICAgICBhc19mbl9lcnJvciAkPyAiLXB0aHJl YWQgZG9lcyBub3Qgd29yayIgIiRMSU5FTk8iIDUKKyAgICBmaQorCisgICAgUFRIUkVBRF9DRkxB R1M9IiRheF9jdl9wdGhyZWFkX2ZsYWdzIgorICAgIFBUSFJFQURfTERGTEFHUz0iJGF4X2N2X3B0 aHJlYWRfZmxhZ3MiCisgICAgUFRIUkVBRF9MSUJTPSIiCisKIAogCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5sZW4iID4m NQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3Rybmxlbi4uLiAiID4mNjsgfQot aWYgdGVzdCAiJHthY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZytzZXR9IiA9IHNldDsgdGhlbiA6 Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB5 YWpsX2FsbG9jIGluIC1seWFqbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgeWFqbF9h bGxvYyBpbiAtbHlhamwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3lhamxfeWFq bF9hbGxvYytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNf Y3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9bm8KLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitM SUJTPSItbHlhamwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwor LyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3Iu CisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2Yg YSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBz dGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgor Y2hhciB5YWpsX2FsbG9jICgpOwogaW50CiBtYWluICgpCiB7Ci0KLSNkZWZpbmUgUyAiZm9vYmFy IgotI2RlZmluZSBTX0xFTiAoc2l6ZW9mIFMgLSAxKQotCi0gIC8qIEF0IGxlYXN0IG9uZSBpbXBs ZW1lbnRhdGlvbiBpcyBidWdneTogdGhhdCBvZiBBSVggNC4zIHdvdWxkCi0gICAgIGdpdmUgc3Ry bmxlbiAoUywgMSkgPT0gMy4gICovCi0KLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBTX0xF TiArIDE7ICsraSkKLSAgICB7Ci0gICAgICBpbnQgZXhwZWN0ZWQgPSBpIDw9IFNfTEVOID8gaSA6 IFNfTEVOOwotICAgICAgaWYgKHN0cm5sZW4gKFMsIGkpICE9IGV4cGVjdGVkKQotCXJldHVybiAx OwotICAgIH0KLSAgcmV0dXJuIDA7Ci0KK3JldHVybiB5YWpsX2FsbG9jICgpOwogICA7CiAgIHJl dHVybiAwOwogfQogX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoK LSAgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIk TElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl95YWpsX3lhamxfYWxsb2M9eWVzCiBlbHNlCi0g IGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPW5vCisgIGFjX2N2X2xpYl95YWpsX3lhamxfYWxs b2M9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIu b3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3Qu YmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElC Uz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3lhamxfeWFqbF9hbGxvYyIgPiY1Cisk YXNfZWNobyAiJGFjX2N2X2xpYl95YWpsX3lhamxfYWxsb2MiID4mNjsgfQoraWYgdGVzdCAieCRh Y19jdl9saWJfeWFqbF95YWpsX2FsbG9jIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJZQUpMIDEKK19BQ0VPRgogCi1maQoteyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5j X3N0cm5sZW5fd29ya2luZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3Jr aW5nIiA+JjY7IH0KLXRlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm8gJiYgY2Fz ZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgc3Rybmxlbi4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikg TElCT0JKUz0iJExJQk9CSlMgc3Rybmxlbi4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCisgIExJQlM9 Ii1seWFqbCAkTElCUyIKIAorZWxzZQorICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQg eWFqbCIgIiRMSU5FTk8iIDUKK2ZpCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RydG9kIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIGZvciB3b3JraW5nIHN0cnRvZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9m dW5jX3N0cnRvZCtzZXR9IiA9IHNldDsgdGhlbiA6Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkZWZsYXRlQ29weSBpbiAtbHoiID4mNQorJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRlZmxhdGVDb3B5IGluIC1sei4uLiAiID4mNjsgfQoraWYg dGVzdCAiJHthY19jdl9saWJfel9kZWZsYXRlQ29weStzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxp bmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19zdHJ0b2Q9bm8KLWVsc2UKLSAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19saWJfc2F2 ZV9MSUJTPSRMSUJTCitMSUJTPSItbHogICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0kYWNfaW5jbHVk ZXNfZGVmYXVsdAotI2lmbmRlZiBzdHJ0b2QKLWRvdWJsZSBzdHJ0b2QgKCk7CisvKiBPdmVycmlk ZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBj aGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAg YnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5 LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgogI2VuZGlmCitjaGFyIGRlZmxh dGVDb3B5ICgpOwogaW50Ci1tYWluKCkKK21haW4gKCkKIHsKLSAgewotICAgIC8qIFNvbWUgdmVy c2lvbnMgb2YgTGludXggc3RydG9kIG1pcy1wYXJzZSBzdHJpbmdzIHdpdGggbGVhZGluZyAnKycu ICAqLwotICAgIGNoYXIgKnN0cmluZyA9ICIgKzY5IjsKLSAgICBjaGFyICp0ZXJtOwotICAgIGRv dWJsZSB2YWx1ZTsKLSAgICB2YWx1ZSA9IHN0cnRvZCAoc3RyaW5nLCAmdGVybSk7Ci0gICAgaWYg KHZhbHVlICE9IDY5IHx8IHRlcm0gIT0gKHN0cmluZyArIDQpKQotICAgICAgcmV0dXJuIDE7Ci0g IH0KLQotICB7Ci0gICAgLyogVW5kZXIgU29sYXJpcyAyLjQsIHN0cnRvZCByZXR1cm5zIHRoZSB3 cm9uZyB2YWx1ZSBmb3IgdGhlCi0gICAgICAgdGVybWluYXRpbmcgY2hhcmFjdGVyIHVuZGVyIHNv bWUgY29uZGl0aW9ucy4gICovCi0gICAgY2hhciAqc3RyaW5nID0gIk5hTiI7Ci0gICAgY2hhciAq dGVybTsKLSAgICBzdHJ0b2QgKHN0cmluZywgJnRlcm0pOwotICAgIGlmICh0ZXJtICE9IHN0cmlu ZyAmJiAqKHRlcm0gLSAxKSA9PSAwKQotICAgICAgcmV0dXJuIDE7Ci0gIH0KK3JldHVybiBkZWZs YXRlQ29weSAoKTsKKyAgOwogICByZXR1cm4gMDsKIH0KLQogX0FDRU9GCi1pZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19zdHJ0b2Q9eWVzCitpZiBhY19m bl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl96X2RlZmxhdGVDb3B5 PXllcwogZWxzZQotICBhY19jdl9mdW5jX3N0cnRvZD1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3Jl IGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKKyAgYWNf Y3ZfbGliX3pfZGVmbGF0ZUNvcHk9bm8KIGZpCi0KK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNf ZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3N0cnRvZCIgPiY1Ci0k YXNfZWNobyAiJGFjX2N2X2Z1bmNfc3RydG9kIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2Z1bmNf c3RydG9kID0gbm87IHRoZW4KLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgc3RydG9kLiRh Y19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJ0b2QuJGFjX29iamV4 dCIKLSA7OwotZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRhY19jdl9saWJfel9kZWZsYXRlQ29weSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xp Yl96X2RlZmxhdGVDb3B5IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3pfZGVmbGF0ZUNv cHkiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmlu ZSBIQVZFX0xJQlogMQorX0FDRU9GCiAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInBv dyIgImFjX2N2X2Z1bmNfcG93IgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3BvdyIgPSB4IiJ5ZXM7 IHRoZW4gOgorICBMSUJTPSItbHogJExJQlMiCiAKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIkNv dWxkIG5vdCBmaW5kIHpsaWIiICIkTElORU5PIiA1CiBmaQogCi1pZiB0ZXN0ICRhY19jdl9mdW5j X3BvdyA9IG5vOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIHBvdyBpbiAtbG0iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IHBvdyBpbiAtbG0uLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX21fcG93K3NldH0i ID0gc2V0OyB0aGVuIDoKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIGxpYmljb252X29wZW4gaW4gLWxpY29udiIgPiY1CiskYXNfZWNob19uICJj aGVja2luZyBmb3IgbGliaWNvbnZfb3BlbiBpbiAtbGljb252Li4uICIgPiY2OyB9CitpZiB0ZXN0 ICIke2FjX2N2X2xpYl9pY29udl9saWJpY29udl9vcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKICAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElC Uz0kTElCUwotTElCUz0iLWxtICAkTElCUyIKK0xJQlM9Ii1saWNvbnYgICRMSUJTIgogY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmgu ICAqLwogCkBAIC05NTI4LDU1ICs2NTUzLDQ1IEBAIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlm Ci1jaGFyIHBvdyAoKTsKK2NoYXIgbGliaWNvbnZfb3BlbiAoKTsKIGludAogbWFpbiAoKQogewot cmV0dXJuIHBvdyAoKTsKK3JldHVybiBsaWJpY29udl9vcGVuICgpOwogICA7CiAgIHJldHVybiAw OwogfQogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFj X2N2X2xpYl9tX3Bvdz15ZXMKKyAgYWNfY3ZfbGliX2ljb252X2xpYmljb252X29wZW49eWVzCiBl bHNlCi0gIGFjX2N2X2xpYl9tX3Bvdz1ubworICBhY19jdl9saWJfaWNvbnZfbGliaWNvbnZfb3Bl bj1ubwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAog ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19s aWJfc2F2ZV9MSUJTCiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRhY19jdl9saWJfbV9wb3ciID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbV9w b3ciID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbV9wb3ciID0geCIieWVzOyB0aGVuIDoK LSAgUE9XX0xJQj0tbG0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkYWNfY3ZfbGliX2ljb252X2xpYmljb252X29wZW4iID4mNQorJGFzX2VjaG8gIiRh Y19jdl9saWJfaWNvbnZfbGliaWNvbnZfb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xp Yl9pY29udl9saWJpY29udl9vcGVuIiA9IHgiInllczsgdGhlbiA6CisgIGxpYmljb252PSJ5Igog ZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6 IGNhbm5vdCBmaW5kIGxpYnJhcnkgY29udGFpbmluZyBkZWZpbml0aW9uIG9mIHBvdyIgPiY1Ci0k YXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgZmluZCBsaWJyYXJ5IGNvbnRhaW5pbmcg ZGVmaW5pdGlvbiBvZiBwb3ciID4mMjt9Ci1maQotCisgIGxpYmljb252PSJuIgogZmkKIAotZmkK IAotZm9yIGFjX2Z1bmMgaW4gIFwKLSAgICAgICAgICAgICAgICBhbGFybSBhdGV4aXQgYnplcm8g Y2xvY2tfZ2V0dGltZSBkdXAyIGZkYXRhc3luYyBmdHJ1bmNhdGUgXAotICAgICAgICAgICAgICAg IGdldGN3ZCBnZXRob3N0YnluYW1lIGdldGhvc3RuYW1lIGdldHBhZ2VzaXplIGdldHRpbWVvZmRh eSBcCi0gICAgICAgICAgICAgICAgaW5ldF9udG9hIGlzYXNjaWkgbG9jYWx0aW1lX3IgbWVtY2hy IG1lbW1vdmUgbWVtc2V0IG1rZGlyIFwKLSAgICAgICAgICAgICAgICBta2ZpZm8gbXVubWFwIHBh dGhjb25mIHJlYWxwYXRoIHJlZ2NvbXAgcm1kaXIgc2VsZWN0IHNldGVudiBcCi0gICAgICAgICAg ICAgICAgc29ja2V0IHN0cmNhc2VjbXAgc3RyY2hyIHN0cmNzcG4gc3RyZHVwIHN0cmVycm9yIHN0 cm5kdXAgXAotICAgICAgICAgICAgICAgIHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHN0 cnRvbCBzdHJ0b3VsIHN0cnRvdWxsIHR6c2V0IFwKLSAgICAgICAgICAgICAgICB1bmFtZSBcCiAK KyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitmb3IgYWNfaGVhZGVyIGluIHlhamwveWFqbF92 ZXJzaW9uLmgKIGRvIDoKLSAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVu YyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIg IiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsg dGhlbiA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ5YWpsL3lh amxfdmVyc2lvbi5oIiAiYWNfY3ZfaGVhZGVyX3lhamxfeWFqbF92ZXJzaW9uX2giICIkYWNfaW5j bHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3lhamxfeWFqbF92ZXJzaW9u X2giID0geCIieWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmlu ZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZF X1lBSkxfWUFKTF9WRVJTSU9OX0ggMQogX0FDRU9GCiAKIGZpCisKIGRvbmUKIAogCmRpZmYgLS1n aXQgYS90b29scy9jb25maWd1cmUuYWMgYi90b29scy9jb25maWd1cmUuYWMKaW5kZXggNTdjODg3 ZC4uZGViODQ4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvY29uZmlndXJlLmFjCisrKyBiL3Rvb2xzL2Nv bmZpZ3VyZS5hYwpAQCAtMTksOSArMTksNiBAQCByZWNvbW1lbmRlZCwgdXNlIFBSRVBFTkRfSU5D TFVERVMsIFBSRVBFTkRfTElCLCBcCiBBUFBFTkRfSU5DTFVERVMgYW5kIEFQUEVORF9MSUIgaW5z dGVhZCB3aGVuIHBvc3NpYmxlLl0pCiBdKQogCi1BQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKLUFD X0NBTk9OSUNBTF9IT1NUCi0KICMgTTQgTWFjcm8gaW5jbHVkZXMKIG00X2luY2x1ZGUoW200L3Nh dmV2YXIubTRdKQogbTRfaW5jbHVkZShbbTQvZmVhdHVyZXMubTRdKQpAQCAtNzUsOSArNzIsNyBA QCBBQ19BUkdfVkFSKFtCQ0NdLCBbUGF0aCB0byBiY2MgdG9vbF0pCiBBQ19BUkdfVkFSKFtJQVNM XSwgW1BhdGggdG8gaWFzbCB0b29sXSkKIAogIyBDaGVja3MgZm9yIHByb2dyYW1zLgotQUNfUFJP R19TRUQKIEFDX1BST0dfQ0MKLUFDX1BST0dfTE5fUwogQUNfUFJPR19NQUtFX1NFVAogQUNfUFJP R19JTlNUQUxMCiBBQ19QQVRIX1BST0coW0JJU09OXSwgW2Jpc29uXSkKQEAgLTEzNyw3ICsxMzIs NiBAQCBBQ19TVUJTVChsaWJleHQyZnMpCiBBQ19DSEVDS19MSUIoW2djcnlwdF0sIFtnY3J5X21k X2hhc2hfYnVmZmVyXSwgW2xpYmdjcnlwdD0ieSJdLCBbbGliZ2NyeXB0PSJuIl0pCiBBQ19TVUJT VChsaWJnY3J5cHQpCiBBWF9DSEVDS19QVEhSRUFECi1BQ19DSEVDS19MSUIoW3J0XSwgW2Nsb2Nr X2dldHRpbWVdKQogQUNfQ0hFQ0tfTElCKFt5YWpsXSwgW3lhamxfYWxsb2NdLCBbXSwKICAgICBb QUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCB5YWpsXSldKQogQUNfQ0hFQ0tfTElCKFt6XSwg W2RlZmxhdGVDb3B5XSwgW10sIFtBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIHpsaWJdKV0p CkBAIC0xNDUsNTggKzEzOSw2IEBAIEFDX0NIRUNLX0xJQihbaWNvbnZdLCBbbGliaWNvbnZfb3Bl bl0sIFtsaWJpY29udj0ieSJdLCBbbGliaWNvbnY9Im4iXSkKIEFDX1NVQlNUKGxpYmljb252KQog CiAjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgotQUNfRlVOQ19BTExPQ0EKLUFDX0NIRUNLX0hF QURFUlMoWyBcCi0gICAgICAgICAgICAgICAgYXJwYS9pbmV0LmggZmNudGwuaCBpbnR0eXBlcy5o IGxpYmludGwuaCBsaW1pdHMuaCBtYWxsb2MuaCBcCi0gICAgICAgICAgICAgICAgbmV0ZGIuaCBu ZXRpbmV0L2luLmggc3RkZGVmLmggc3RkaW50Lmggc3RkbGliLmggc3RyaW5nLmggXAotICAgICAg ICAgICAgICAgIHN0cmluZ3MuaCBzeXMvZmlsZS5oIHN5cy9pb2N0bC5oIHN5cy9tb3VudC5oIHN5 cy9wYXJhbS5oIFwKLSAgICAgICAgICAgICAgICBzeXMvc29ja2V0Lmggc3lzL3N0YXR2ZnMuaCBz eXMvdGltZS5oIHN5c2xvZy5oIHRlcm1pb3MuaCBcCi0gICAgICAgICAgICAgICAgdW5pc3RkLmgg eWFqbC95YWpsX3ZlcnNpb24uaCBcCi0gICAgICAgICAgICAgICAgXSkKLQotIyBDaGVja3MgZm9y IHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgotQUNf SEVBREVSX1NUREJPT0wKLUFDX1RZUEVfVUlEX1QKLUFDX0NfSU5MSU5FCi1BQ19UWVBFX0lOVDE2 X1QKLUFDX1RZUEVfSU5UMzJfVAotQUNfVFlQRV9JTlQ2NF9UCi1BQ19UWVBFX0lOVDhfVAotQUNf VFlQRV9NT0RFX1QKLUFDX1RZUEVfT0ZGX1QKLUFDX1RZUEVfUElEX1QKLUFDX0NfUkVTVFJJQ1QK LUFDX1RZUEVfU0laRV9UCi1BQ19UWVBFX1NTSVpFX1QKLUFDX0NIRUNLX01FTUJFUlMoW3N0cnVj dCBzdGF0LnN0X2Jsa3NpemVdKQotQUNfU1RSVUNUX1NUX0JMT0NLUwotQUNfQ0hFQ0tfTUVNQkVS Uyhbc3RydWN0IHN0YXQuc3RfcmRldl0pCi1BQ19UWVBFX1VJTlQxNl9UCi1BQ19UWVBFX1VJTlQz Ml9UCi1BQ19UWVBFX1VJTlQ2NF9UCi1BQ19UWVBFX1VJTlQ4X1QKLUFDX0NIRUNLX1RZUEVTKFtw dHJkaWZmX3RdKQotCi0jIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCi1BQ19GVU5DX0VS Uk9SX0FUX0xJTkUKLUFDX0ZVTkNfRk9SSwotQUNfRlVOQ19GU0VFS08KLUFDX0ZVTkNfTFNUQVRf Rk9MTE9XU19TTEFTSEVEX1NZTUxJTksKLUFDX0hFQURFUl9NQUpPUgotQUNfRlVOQ19NQUxMT0MK LUFDX0ZVTkNfTUtUSU1FCi1BQ19GVU5DX01NQVAKLUFDX0ZVTkNfUkVBTExPQwotQUNfRlVOQ19T VFJOTEVOCi1BQ19GVU5DX1NUUlRPRAotQUNfQ0hFQ0tfRlVOQ1MoWyBcCi0gICAgICAgICAgICAg ICAgYWxhcm0gYXRleGl0IGJ6ZXJvIGNsb2NrX2dldHRpbWUgZHVwMiBmZGF0YXN5bmMgZnRydW5j YXRlIFwKLSAgICAgICAgICAgICAgICBnZXRjd2QgZ2V0aG9zdGJ5bmFtZSBnZXRob3N0bmFtZSBn ZXRwYWdlc2l6ZSBnZXR0aW1lb2ZkYXkgXAotICAgICAgICAgICAgICAgIGluZXRfbnRvYSBpc2Fz Y2lpIGxvY2FsdGltZV9yIG1lbWNociBtZW1tb3ZlIG1lbXNldCBta2RpciBcCi0gICAgICAgICAg ICAgICAgbWtmaWZvIG11bm1hcCBwYXRoY29uZiByZWFscGF0aCByZWdjb21wIHJtZGlyIHNlbGVj dCBzZXRlbnYgXAotICAgICAgICAgICAgICAgIHNvY2tldCBzdHJjYXNlY21wIHN0cmNociBzdHJj c3BuIHN0cmR1cCBzdHJlcnJvciBzdHJuZHVwIFwKLSAgICAgICAgICAgICAgICBzdHJwYnJrIHN0 cnJjaHIgc3Ryc3BuIHN0cnN0ciBzdHJ0b2wgc3RydG91bCBzdHJ0b3VsbCB0enNldCBcCi0gICAg ICAgICAgICAgICAgdW5hbWUgXAotICAgICAgICAgICAgICAgIF0pCitBQ19DSEVDS19IRUFERVJT KFt5YWpsL3lhamxfdmVyc2lvbi5oXSkKIAogQUNfT1VUUFVUKCkKLS0gCjEuNy4yLjUKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=