From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?U8OpcmdpbyBCYXN0byA8c2VyZ2lvQHNlcmp1eC5jb20+?= To: git-commits@fedoraproject.org Subject: [rpms/opencv] opencv5: Deleted patches 0, 10, 11, 12, 13 and 14 . Date: Fri, 28 Aug 2026 13:30:27 GMT Message-ID: <178792382751.1.4203530789631210137.rpms-opencv-33e994221ba3@fedoraproject.org> List-ID: X-Git-Repo: rpms/opencv X-Git-Branch: opencv5 X-Git-Rev: 33e994221ba3b11fbb807bd376d4ab18cd28ac15 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbmN2CiAgICAgICAgICAgIEJyYW5jaCA6IG9wZW5jdjUKICAgICAgICAg ICAgQ29tbWl0IDogMzNlOTk0MjIxYmEzYjExZmJiODA3YmQzNzZkNGFiMThjZDI4YWMxNQogICAg ICAgICAgICBBdXRob3IgOiBTw6lyZ2lvIEJhc3RvIDxzZXJnaW9Ac2VyanV4LmNvbT4KICAgICAg ICAgICAgRGF0ZSAgIDogMjAxNS0wNS0xM1QxNjo0Mzo1NCswMTowMAogICAgICAgICAgICBTdGF0 cyAgOiArMC8tMjI1NCBpbiA2IGZpbGUocykKICAgICAgICAgICAgVVJMICAgIDogaHR0cHM6Ly9z cmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9vcGVuY3YvYy8zM2U5OTQyMjFiYTNiMTFmYmI4MDdi ZDM3NmQ0YWIxOGNkMjhhYzE1P2JyYW5jaD1vcGVuY3Y1CgogICAgICAgICAgICBMb2c6CiAgICAg ICAgICAgIERlbGV0ZWQgcGF0Y2hlcyAwLCAxMCwgMTEsIDEyLCAxMyBhbmQgMTQgLgoKZGVsZXRl ZDogMDU1MC1ib21iLWNvbW1pdC1vZi1nc3RyZWFtZXItdmlkZW9jYXB0dXJlLWFuZC12aWRlb3dy aXRlLnBhdGNoCmRlbGV0ZWQ6IDA1NTItZWxpbWluYXRlZC13YXJuaW5ncy5wYXRjaApkZWxldGVk OiAwNTg3LUZpeC1idWlsZC13aXRoLWdzdHJlYW1lci0wLjEwLjI4LnBhdGNoCmRlbGV0ZWQ6IDA4 NjUtZ3N0cmVhbWVyLWNsZWFuaW5nLXVwLXJlc291cmNlcy5wYXRjaApkZWxldGVkOiAwODcxLWFs bG93LWZvci1hcmJpdHJhdHktbnVtYmVyLW9mLXNvdXJjZXMtYW5kLXNpbmtzLnBhdGNoCmRlbGV0 ZWQ6IG9wZW5jdi1wa2djbWFrZS5wYXRjaAoKLS0tCmRpZmYgLS1naXQgYS8wNTUwLWJvbWItY29t bWl0LW9mLWdzdHJlYW1lci12aWRlb2NhcHR1cmUtYW5kLXZpZGVvd3JpdGUucGF0Y2ggYi8wNTUw LWJvbWItY29tbWl0LW9mLWdzdHJlYW1lci12aWRlb2NhcHR1cmUtYW5kLXZpZGVvd3JpdGUucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTQxZTQuLjAwMDAwMDAKLS0tIGEv MDU1MC1ib21iLWNvbW1pdC1vZi1nc3RyZWFtZXItdmlkZW9jYXB0dXJlLWFuZC12aWRlb3dyaXRl LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTg0NCArMCwwIEBACi1kaWZmIC11cCBvcGVuY3Yt Mi40LjkvQ01ha2VMaXN0cy50eHQuMTAgb3BlbmN2LTIuNC45L0NNYWtlTGlzdHMudHh0Ci0tLS0g b3BlbmN2LTIuNC45L0NNYWtlTGlzdHMudHh0LjEwCTIwMTQtMDQtMTEgMDU6MTU6MjYuMDAwMDAw MDAwIC0wNTAwCi0rKysgb3BlbmN2LTIuNC45L0NNYWtlTGlzdHMudHh0CTIwMTQtMDctMjQgMTY6 MzQ6MjkuNTI4NDQwMjE3IC0wNTAwCi1AQCAtMTM2LDYgKzEzNiw3IEBAIE9DVl9PUFRJT04oV0lU SF9FSUdFTiAgICAgICAgICAiSW5jbHVkZQotIE9DVl9PUFRJT04oV0lUSF9WRlcgICAgICAgICAg ICAiSW5jbHVkZSBWaWRlbyBmb3IgV2luZG93cyBzdXBwb3J0IiAgICAgICAgICAgT04gICBJRiBX SU4zMiApCi0gT0NWX09QVElPTihXSVRIX0ZGTVBFRyAgICAgICAgICJJbmNsdWRlIEZGTVBFRyBz dXBwb3J0IiAgICAgICAgICAgICAgICAgICAgICBPTiAgIElGIChOT1QgQU5EUk9JRCBBTkQgTk9U IElPUykpCi0gT0NWX09QVElPTihXSVRIX0dTVFJFQU1FUiAgICAgICJJbmNsdWRlIEdzdHJlYW1l ciBzdXBwb3J0IiAgICAgICAgICAgICAgICAgICBPTiAgIElGIChVTklYIEFORCBOT1QgQVBQTEUg QU5EIE5PVCBBTkRST0lEKSApCi0rT0NWX09QVElPTihXSVRIX0dTVFJFQU1FUl8xX1ggICJJbmNs dWRlIEdzdHJlYW1lciAxLnggc3VwcG9ydCIgICAgICAgICAgICAgICBPRkYpCi0gT0NWX09QVElP TihXSVRIX0dUSyAgICAgICAgICAgICJJbmNsdWRlIEdUSyBzdXBwb3J0IiAgICAgICAgICAgICAg ICAgICAgICAgICBPTiAgIElGIChVTklYIEFORCBOT1QgQVBQTEUgQU5EIE5PVCBBTkRST0lEKSAp Ci0gT0NWX09QVElPTihXSVRIX0lNQUdFSU8gICAgICAgICJJbWFnZUlPIHN1cHBvcnQgZm9yIE9T IFgiICAgICAgICAgICAgICAgICAgICBPRkYgIElGIEFQUExFICkKLSBPQ1ZfT1BUSU9OKFdJVEhf SVBQICAgICAgICAgICAgIkluY2x1ZGUgSW50ZWwgSVBQIHN1cHBvcnQiICAgICAgICAgICAgICAg ICAgIE9GRiAgSUYgKE1TVkMgT1IgWDg2IE9SIFg4Nl82NCkgKQotQEAgLTg2MSwxMCArODYyLDEy IEBAIGVuZGlmKERFRklORUQgV0lUSF9GRk1QRUcpCi0gaWYoREVGSU5FRCBXSVRIX0dTVFJFQU1F UikKLSAgIHN0YXR1cygiICAgIEdTdHJlYW1lcjoiICAgICAgSEFWRV9HU1RSRUFNRVIgICAgICBU SEVOICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTFNFIE5PKQot ICAgaWYoSEFWRV9HU1RSRUFNRVIpCi0tICAgIHN0YXR1cygiICAgICAgYmFzZToiICAgICAgICJZ RVMgKHZlciAke0FMSUFTT0ZfZ3N0cmVhbWVyLWJhc2UtMC4xMF9WRVJTSU9OfSkiKQotLSAgICBz dGF0dXMoIiAgICAgIGFwcDoiICAgICAgICAiWUVTICh2ZXIgJHtBTElBU09GX2dzdHJlYW1lci1h cHAtMC4xMF9WRVJTSU9OfSkiKQotLSAgICBzdGF0dXMoIiAgICAgIHZpZGVvOiIgICAgICAiWUVT ICh2ZXIgJHtBTElBU09GX2dzdHJlYW1lci12aWRlby0wLjEwX1ZFUlNJT059KSIpCi0tICBlbmRp ZigpCi0rICAgIHN0YXR1cygiICAgICAgYmFzZToiICAgICAgICJZRVMgKHZlciAke0dTVFJFQU1F Ul9CQVNFX1ZFUlNJT059KSIpCi0rICAgIHN0YXR1cygiICAgICAgdmlkZW86IiAgICAgICJZRVMg KHZlciAke0dTVFJFQU1FUl9WSURFT19WRVJTSU9OfSkiKQotKyAgICBzdGF0dXMoIiAgICAgIGFw cDoiICAgICAgICAiWUVTICh2ZXIgJHtHU1RSRUFNRVJfQVBQX1ZFUlNJT059KSIpCi0rICAgIHN0 YXR1cygiICAgICAgcmlmZjoiICAgICAgICJZRVMgKHZlciAke0dTVFJFQU1FUl9SSUZGX1ZFUlNJ T059KSIpCi0rICAgIHN0YXR1cygiICAgICAgcGJ1dGlsczoiICAgICJZRVMgKHZlciAke0dTVFJF QU1FUl9QQlVUSUxTX1ZFUlNJT059KSIpCi0rICBlbmRpZihIQVZFX0dTVFJFQU1FUikKLSBlbmRp ZihERUZJTkVEIFdJVEhfR1NUUkVBTUVSKQotIAotIGlmKERFRklORUQgV0lUSF9PUEVOTkkpCi1k aWZmIC11cCBvcGVuY3YtMi40LjkvY21ha2UvT3BlbkNWRmluZExpYnNWaWRlby5jbWFrZS4xMCBv cGVuY3YtMi40LjkvY21ha2UvT3BlbkNWRmluZExpYnNWaWRlby5jbWFrZQotLS0tIG9wZW5jdi0y LjQuOS9jbWFrZS9PcGVuQ1ZGaW5kTGlic1ZpZGVvLmNtYWtlLjEwCTIwMTQtMDQtMTEgMDU6MTU6 MjYuMDAwMDAwMDAwIC0wNTAwCi0rKysgb3BlbmN2LTIuNC45L2NtYWtlL09wZW5DVkZpbmRMaWJz VmlkZW8uY21ha2UJMjAxNC0wNy0yNCAxNjozMDo1My4yNzIwODczODQgLTA1MDAKLUBAIC0xMiwx NSArMTIsNDQgQEAgZW5kaWYoV0lUSF9WRlcpCi0gCi0gIyAtLS0gR1N0cmVhbWVyIC0tLQotIG9j dl9jbGVhcl92YXJzKEhBVkVfR1NUUkVBTUVSKQotLWlmKFdJVEhfR1NUUkVBTUVSKQotLSAgQ0hF Q0tfTU9EVUxFKGdzdHJlYW1lci1iYXNlLTAuMTAgSEFWRV9HU1RSRUFNRVIpCi0tICBpZihIQVZF X0dTVFJFQU1FUikKLS0gICAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci1hcHAtMC4xMCBIQVZFX0dT VFJFQU1FUikKLSsjIHRyeSB0byBmaW5kIGdzdHJlYW1lciAwLjEwIGZpcnN0Ci0raWYoV0lUSF9H U1RSRUFNRVIgQU5EIE5PVCBXSVRIX0dTVFJFQU1FUl8xX1gpCi0rICBDSEVDS19NT0RVTEUoZ3N0 cmVhbWVyLWJhc2UtMC4xMCBIQVZFX0dTVFJFQU1FUl9CQVNFKQotKyAgQ0hFQ0tfTU9EVUxFKGdz dHJlYW1lci12aWRlby0wLjEwIEhBVkVfR1NUUkVBTUVSX1ZJREVPKQotKyAgQ0hFQ0tfTU9EVUxF KGdzdHJlYW1lci1hcHAtMC4xMCBIQVZFX0dTVFJFQU1FUl9BUFApCi0rICBDSEVDS19NT0RVTEUo Z3N0cmVhbWVyLXJpZmYtMC4xMCBIQVZFX0dTVFJFQU1FUl9SSUZGKQotKyAgQ0hFQ0tfTU9EVUxF KGdzdHJlYW1lci1wYnV0aWxzLTAuMTAgSEFWRV9HU1RSRUFNRVJfUEJVVElMUykKLSsKLSsgIGlm KEhBVkVfR1NUUkVBTUVSX0JBU0UgQU5EIEhBVkVfR1NUUkVBTUVSX1ZJREVPIEFORCBIQVZFX0dT VFJFQU1FUl9BUFAgQU5EIEhBVkVfR1NUUkVBTUVSX1JJRkYgQU5EIEhBVkVfR1NUUkVBTUVSX1BC VVRJTFMpCi0rICAgICAgc2V0KEhBVkVfR1NUUkVBTUVSIFRSVUUpCi0rICAgICAgc2V0KEdTVFJF QU1FUl9CQVNFX1ZFUlNJT04gJHtBTElBU09GX2dzdHJlYW1lci1iYXNlLTAuMTBfVkVSU0lPTn0p Ci0rICAgICAgc2V0KEdTVFJFQU1FUl9WSURFT19WRVJTSU9OICR7QUxJQVNPRl9nc3RyZWFtZXIt dmlkZW8tMC4xMF9WRVJTSU9OfSkKLSsgICAgICBzZXQoR1NUUkVBTUVSX0FQUF9WRVJTSU9OICR7 QUxJQVNPRl9nc3RyZWFtZXItYXBwLTAuMTBfVkVSU0lPTn0pCi0rICAgICAgc2V0KEdTVFJFQU1F Ul9SSUZGX1ZFUlNJT04gJHtBTElBU09GX2dzdHJlYW1lci1yaWZmLTAuMTBfVkVSU0lPTn0pCi0r ICAgICAgc2V0KEdTVFJFQU1FUl9QQlVUSUxTX1ZFUlNJT04gJHtBTElBU09GX2dzdHJlYW1lci1w YnV0aWxzLTAuMTBfVkVSU0lPTn0pCi0gICBlbmRpZigpCi0tICBpZihIQVZFX0dTVFJFQU1FUikK LS0gICAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci12aWRlby0wLjEwIEhBVkVfR1NUUkVBTUVSKQot KyAgCi0rZW5kaWYoV0lUSF9HU1RSRUFNRVIgQU5EIE5PVCBXSVRIX0dTVFJFQU1FUl8xX1gpCi0r Ci0rIyBpZiBnc3RyZWFtZXIgMC4xMCB3YXMgbm90IGZvdW5kLCBvciB3ZSBzcGVjaWZpZWQgd2Ug d2FudGVkIDEueCwgdHJ5IHRvIGZpbmQgaXQKLStpZihXSVRIX0dTVFJFQU1FUl8xX1ggT1IgTk9U IEhBVkVfR1NUUkVBTUVSKQotKyAgI2NoZWNrIGZvciAxLngKLSsgIENIRUNLX01PRFVMRShnc3Ry ZWFtZXItYmFzZS0xLjAgSEFWRV9HU1RSRUFNRVJfQkFTRSkKLSsgIENIRUNLX01PRFVMRShnc3Ry ZWFtZXItdmlkZW8tMS4wIEhBVkVfR1NUUkVBTUVSX1ZJREVPKQotKyAgQ0hFQ0tfTU9EVUxFKGdz dHJlYW1lci1hcHAtMS4wIEhBVkVfR1NUUkVBTUVSX0FQUCkKLSsgIENIRUNLX01PRFVMRShnc3Ry ZWFtZXItcmlmZi0xLjAgSEFWRV9HU1RSRUFNRVJfUklGRikKLSsgIENIRUNLX01PRFVMRShnc3Ry ZWFtZXItcGJ1dGlscy0xLjAgSEFWRV9HU1RSRUFNRVJfUEJVVElMUykKLSsgIAotKyAgaWYoSEFW RV9HU1RSRUFNRVJfQkFTRSBBTkQgSEFWRV9HU1RSRUFNRVJfVklERU8gQU5EIEhBVkVfR1NUUkVB TUVSX0FQUCBBTkQgSEFWRV9HU1RSRUFNRVJfUklGRiBBTkQgSEFWRV9HU1RSRUFNRVJfUEJVVElM UykKLSsgICAgICBzZXQoSEFWRV9HU1RSRUFNRVIgVFJVRSkKLSsgICAgICBzZXQoR1NUUkVBTUVS X0JBU0VfVkVSU0lPTiAke0FMSUFTT0ZfZ3N0cmVhbWVyLWJhc2UtMS4wX1ZFUlNJT059KQotKyAg ICAgIHNldChHU1RSRUFNRVJfVklERU9fVkVSU0lPTiAke0FMSUFTT0ZfZ3N0cmVhbWVyLXZpZGVv LTEuMF9WRVJTSU9OfSkKLSsgICAgICBzZXQoR1NUUkVBTUVSX0FQUF9WRVJTSU9OICR7QUxJQVNP Rl9nc3RyZWFtZXItYXBwLTEuMF9WRVJTSU9OfSkKLSsgICAgICBzZXQoR1NUUkVBTUVSX1JJRkZf VkVSU0lPTiAke0FMSUFTT0ZfZ3N0cmVhbWVyLXJpZmYtMS4wX1ZFUlNJT059KQotKyAgICAgIHNl dChHU1RSRUFNRVJfUEJVVElMU19WRVJTSU9OICR7QUxJQVNPRl9nc3RyZWFtZXItcGJ1dGlscy0x LjBfVkVSU0lPTn0pCi0gICBlbmRpZigpCi0tZW5kaWYoV0lUSF9HU1RSRUFNRVIpCi0rICAKLStl bmRpZihXSVRIX0dTVFJFQU1FUl8xX1ggT1IgTk9UIEhBVkVfR1NUUkVBTUVSKQotIAotICMgLS0t IHVuaWNhcCAtLS0KLSBvY3ZfY2xlYXJfdmFycyhIQVZFX1VOSUNBUCkKLWRpZmYgLXVwIG9wZW5j di0yLjQuOS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwLjEwIG9wZW5jdi0y LjQuOS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwCi0tLS0gb3BlbmN2LTIu NC45L21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAuMTAJMjAxNC0wNC0xMSAw NToxNToyNi4wMDAwMDAwMDAgLTA1MDAKLSsrKyBvcGVuY3YtMi40LjkvbW9kdWxlcy9oaWdoZ3Vp L3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAkyMDE0LTA3LTI0IDE2OjMwOjUzLjI3MzA4NzM3MSAtMDUw MAotQEAgLTM5LDI1ICszOSwyNyBAQAotIC8vCi0gLy9NKi8KLSAKLS0vLyBBdXRob3I6IE5pbHMg SGFzbGVyIDxoYXNsZXJAbXBpLWluZi5tcGcuZGU+Ci0tLy8KLS0vLyAgICAgICAgIE1heC1QbGFu Y2stSW5zdGl0dXQgSW5mb3JtYXRpawotLS8vCi0tLy8gdGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMg aW5zcGlyZWQgYnkgZ25hc2gncyBnc3RyZWFtZXIgaW50ZXJmYWNlCi0tCi0tLy8KLS0vLyB1c2Ug R1N0cmVhbWVyIHRvIHJlYWQgYSB2aWRlbwotLS8vCi0tCi0rLyohCi0rICogXGZpbGUgY2FwX2dz dHJlYW1lci5jcHAKLSsgKiBcYXV0aG9yIE5pbHMgSGFzbGVyIDxoYXNsZXJAbXBpLWluZi5tcGcu ZGU+Ci0rICogICAgICAgICBNYXgtUGxhbmNrLUluc3RpdHV0IEluZm9ybWF0aWsKLSsgKiBcYXV0 aG9yIERpcmsgVmFuIEhhZXJlbmJvcmdoIDx2aGRpcmtAZ21haWwuY29tPgotKyAqCi0rICogXGJy aWVmIFVzZSBHU3RyZWFtZXIgdG8gcmVhZC93cml0ZSB2aWRlbwotKyAqLwotICNpbmNsdWRlICJw cmVjb21wLmhwcCIKLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgot LSNpbmNsdWRlIDxtYXA+Ci0gI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSsjaW5jbHVkZSA8Z3N0L2dz dGJ1ZmZlci5oPgotICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSAjaW5jbHVkZSA8Z3N0 L2FwcC9nc3RhcHBzaW5rLmg+Ci0gI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+Ci0gI2lu Y2x1ZGUgPGdzdC9yaWZmL3JpZmYtbWVkaWEuaD4KLSsjaW5jbHVkZSA8Z3N0L3BidXRpbHMvZW5j b2RpbmctcHJvZmlsZS5oPgotKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMu aD4KLSsvLyNpbmNsdWRlIDxnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oPgotKwotIAotICNp ZmRlZiBOREVCVUcKLSAjZGVmaW5lIENWX1dBUk4obWVzc2FnZSkKLUBAIC02NSw5ICs2NywyMyBA QAotICNkZWZpbmUgQ1ZfV0FSTihtZXNzYWdlKSBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6ICVz ICglczolZClcbiIsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXykKLSAjZW5kaWYKLSAKLSsj aWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCi0rI2RlZmluZSBDT0xPUl9FTEVNICJ2aWRlb2NvbnZl cnQiCi0rI2Vsc2UKLSsjZGVmaW5lIENPTE9SX0VMRU0gImZmbXBlZ2NvbG9yc3BhY2UiCi0rI2Vu ZGlmCi0rCi0rCi0rdm9pZCB0b0ZyYWN0aW9uKGRvdWJsZSBkZWNpbWFsLCBkb3VibGUgJm51bWVy YXRvciwgZG91YmxlICZkZW5vbWluYXRvcik7Ci0rdm9pZCBoYW5kbGVNZXNzYWdlKEdzdEVsZW1l bnQgKiBwaXBlbGluZSk7Ci0rCi0rCi0gc3RhdGljIGN2OjpNdXRleCBnc3RfaW5pdGlhbGl6ZXJf bXV0ZXg7Ci0gCi0tY2xhc3MgZ3N0X2luaXRpYWxpemVyCi0rLyohCi0rICogXGJyaWVmIFRoZSBn c3RfaW5pdGlhbGl6ZXIgY2xhc3MKLSsgKiBJbml0aWFsaXplcyBnc3RyZWFtZXIgb25jZSBpbiB0 aGUgd2hvbGUgcHJvY2VzcwotKyAqL2NsYXNzIGdzdF9pbml0aWFsaXplcgotIHsKLSBwdWJsaWM6 Ci0gICAgIHN0YXRpYyB2b2lkIGluaXQoKQotQEAgLTgwLDkgKzk2LDE2IEBAIHByaXZhdGU6Ci0g ICAgIGdzdF9pbml0aWFsaXplcigpCi0gICAgIHsKLSAgICAgICAgIGdzdF9pbml0KE5VTEwsIE5V TEwpOwotKy8vICAgICAgICBnc3RfZGVidWdfc2V0X2FjdGl2ZShUUlVFKTsKLSsvLyAgICAgICAg Z3N0X2RlYnVnX3NldF9jb2xvcmVkKFRSVUUpOwotKy8vICAgICAgICBnc3RfZGVidWdfc2V0X2Rl ZmF1bHRfdGhyZXNob2xkKEdTVF9MRVZFTF9JTkZPKTsKLSAgICAgfQotIH07Ci0gCi0rLyohCi0r ICogXGJyaWVmIFRoZSBDdkNhcHR1cmVfR1N0cmVhbWVyIGNsYXNzCi0rICogVXNlIEdTdHJlYW1l ciB0byBjYXB0dXJlIHZpZGVvCi0rICovCi0gY2xhc3MgQ3ZDYXB0dXJlX0dTdHJlYW1lciA6IHB1 YmxpYyBDdkNhcHR1cmUKLSB7Ci0gcHVibGljOgotQEAgLTEwMCwyNTkgKzEyMyw0ODYgQEAgcHVi bGljOgotIHByb3RlY3RlZDoKLSAgICAgdm9pZCBpbml0KCk7Ci0gICAgIGJvb2wgcmVvcGVuKCk7 Ci0tICAgIHZvaWQgaGFuZGxlTWVzc2FnZSgpOwotKyAgICBib29sIGlzUGlwZWxpbmVQbGF5aW5n KCk7Ci0rICAgIHZvaWQgc3RhcnRQaXBlbGluZSgpOwotKyAgICB2b2lkIHN0b3BQaXBlbGluZSgp OwotICAgICB2b2lkIHJlc3RhcnRQaXBlbGluZSgpOwotLSAgICB2b2lkIHNldEZpbHRlcihjb25z dCBjaGFyKiwgaW50LCBpbnQsIGludCk7Ci0rICAgIHZvaWQgc2V0RmlsdGVyKGNvbnN0IGNoYXIq IHByb3AsIGludCB0eXBlLCBpbnQgdjEsIGludCB2MiA9IE5VTEwpOwotICAgICB2b2lkIHJlbW92 ZUZpbHRlcihjb25zdCBjaGFyICpmaWx0ZXIpOwotLSAgICB2b2lkIHN0YXRpYyBuZXdQYWQoR3N0 RWxlbWVudCAqbXllbGVtZW50LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFk ICAgICAqcGFkLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgZGF0 YSk7Ci0tICAgIEdzdEVsZW1lbnQgICAgICAgICAgICpwaXBlbGluZTsKLS0gICAgR3N0RWxlbWVu dCAgICAgICAgICAgKnVyaWRlY29kZWJpbjsKLS0gICAgR3N0RWxlbWVudCAgICAgICAgICAgKmNv bG9yOwotLSAgICBHc3RFbGVtZW50ICAgICAgICAgICAqc2luazsKLS0KLS0gICAgR3N0QnVmZmVy ICAgICAgICAgICAqYnVmZmVyOwotLSAgICBHc3RDYXBzICAgICAgICAgICAgKmNhcHM7Ci0tICAg IElwbEltYWdlICAgICAgICAgICAqZnJhbWU7Ci0rICAgIHN0YXRpYyB2b2lkIG5ld1BhZChHc3RF bGVtZW50ICpteWVsZW1lbnQsCi0rICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWQgICAgICpw YWQsCi0rICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICBkYXRhKTsKLSsgICAgR3N0 RWxlbWVudCogICBwaXBlbGluZTsKLSsgICAgR3N0RWxlbWVudCogICB1cmlkZWNvZGViaW47Ci0r ICAgIEdzdEVsZW1lbnQqICAgY29sb3I7Ci0rICAgIEdzdEVsZW1lbnQqICAgc2luazsKLSsjaWYg R1NUX1ZFUlNJT05fTUFKT1IgPiAwCi0rICAgIEdzdFNhbXBsZSogICAgc2FtcGxlOwotKyAgICBH c3RNYXBJbmZvKiAgIGluZm87Ci0rI2VuZGlmCi0rICAgIEdzdEJ1ZmZlciogICAgYnVmZmVyOwot KyAgICBHc3RDYXBzKiAgICAgIGNhcHM7Ci0rICAgIEdzdENhcHMqICAgICAgYnVmZmVyX2NhcHM7 Ci0rICAgIElwbEltYWdlKiAgICAgZnJhbWU7Ci0gfTsKLSAKLSsvKiEKLSsgKiBcYnJpZWYgQ3ZD YXB0dXJlX0dTdHJlYW1lcjo6aW5pdAotKyAqIGluaXRzIHRoZSBjbGFzcwotKyAqLwotIHZvaWQg Q3ZDYXB0dXJlX0dTdHJlYW1lcjo6aW5pdCgpCi0gewotLSAgICBwaXBlbGluZT0wOwotLSAgICBm cmFtZT0wOwotLSAgICBidWZmZXI9MDsKLS0gICAgZnJhbWU9MDsKLS0KLSsgICAgcGlwZWxpbmUg PSBOVUxMOwotKyAgICBmcmFtZSA9IE5VTEw7Ci0rICAgIGJ1ZmZlciA9IE5VTEw7Ci0rICAgIGJ1 ZmZlcl9jYXBzID0gTlVMTDsKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCi0rICAgIHNhbXBs ZSA9IE5VTEw7Ci0rICAgIGluZm8gPSBuZXcgR3N0TWFwSW5mbzsKLSsjZW5kaWYKLSB9Ci0gCi0t dm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKCkKLSsvKiEKLSsgKiBcYnJp ZWYgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6Y2xvc2UKLSsgKiBDbG9zZXMgdGhlIHBpcGVsaW5lIGFu ZCBkZXN0cm95cyBhbGwgaW5zdGFuY2VzCi0rICovCi0rdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVy OjpjbG9zZSgpCi0gewotLSAgICBHc3RCdXMqIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMocGlw ZWxpbmUpOwotLQotLSAgICB3aGlsZShnc3RfYnVzX2hhdmVfcGVuZGluZyhidXMpKSB7Ci0tICAg ICAgICBHc3RNZXNzYWdlKiBtc2cgPSBnc3RfYnVzX3BvcChidXMpOwotLQotLS8vICAgICAgICBw cmludGYoIkdvdCAlcyBtZXNzYWdlXG4iLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobXNnKSk7Ci0t Ci0tICAgICAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKLS0gICAgICAgIGNh c2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDoKLS0gICAgICAgICAgICBHc3RTdGF0ZSBvbGRz dGF0ZSwgbmV3c3RhdGUsIHBlbmRzdGF0ZTsKLS0gICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJz ZV9zdGF0ZV9jaGFuZ2VkKG1zZywgJm9sZHN0YXRlLCAmbmV3c3RhdGUsICZwZW5kc3RhdGUpOwot LS8vICAgICAgICAgICAgcHJpbnRmKCJzdGF0ZSBjaGFuZ2VkIGZyb20gJWQgdG8gJWQgKCVkKVxu Iiwgb2xkc3RhdGUsIG5ld3N0YXRlLCBwZW5kc3RhdGUpOwotLSAgICAgICAgICAgIGJyZWFrOwot LSAgICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogewotLSAgICAgICAgICAgIEdFcnJvciAq ZXJyOwotLSAgICAgICAgICAgIGdjaGFyICpkZWJ1ZzsKLS0gICAgICAgICAgICBnc3RfbWVzc2Fn ZV9wYXJzZV9lcnJvcihtc2csICZlcnIsICZkZWJ1Zyk7Ci0tCi0tICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJHU3RyZWFtZXIgUGx1Z2luOiBFbWJlZGRlZCB2aWRlbyBwbGF5YmFjayBoYWx0 ZWQ7IG1vZHVsZSAlcyByZXBvcnRlZDogJXNcbiIsCi0tICAgICAgICAgICAgICAgICAgZ3N0X2Vs ZW1lbnRfZ2V0X25hbWUoR1NUX01FU1NBR0VfU1JDIChtc2cpKSwgZXJyLT5tZXNzYWdlKTsKLS0K LS0gICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKLS0gICAgICAgICAgICBnX2ZyZWUoZGVi dWcpOwotLQotLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShwaXBlbGluZSwgR1NU X1NUQVRFX05VTEwpOwotLQotLSAgICAgICAgICAgIGJyZWFrOwotLSAgICAgICAgICAgIH0KLS0g ICAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotLS8vICAgICAgICAgICAgQ1ZfV0FSTigiTmV0 U3RyZWFtIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4iKTsKLS0KLS0gICAgICAg ICAgICBicmVhazsKLS0gICAgICAgIGRlZmF1bHQ6Ci0tLy8gICAgICAgICAgICBDVl9XQVJOKCJ1 bmhhbmRsZWQgbWVzc2FnZVxuIik7Ci0tICAgICAgICAgICAgYnJlYWs7Ci0tICAgICAgICB9Ci0r ICAgIGlmIChpc1BpcGVsaW5lUGxheWluZygpKQotKyAgICAgICAgdGhpcy0+c3RvcFBpcGVsaW5l KCk7Ci0gCi0tICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtc2cpOwotKyAgICBpZihwaXBlbGlu ZSkgewotKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKEdTVF9FTEVNRU5UKHBpcGVsaW5l KSwgR1NUX1NUQVRFX05VTEwpOwotKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNU KHBpcGVsaW5lKSk7Ci0rICAgIH0KLSsgICAgaWYodXJpZGVjb2RlYmluKXsKLSsgICAgICAgIGdz dF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVCh1cmlkZWNvZGViaW4pKTsKLSsgICAgfQotKyAgICBp Zihjb2xvcil7Ci0rICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpFQ1QoY29sb3IpKTsK LSsgICAgfQotKyAgICBpZihzaW5rKXsKLSsgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09C SkVDVChzaW5rKSk7Ci0rICAgIH0KLSsgICAgaWYoYnVmZmVyKQotKyAgICAgICAgZ3N0X2J1ZmZl cl91bnJlZihidWZmZXIpOwotKyAgICBpZihmcmFtZSkgewotKyAgICAgICAgZnJhbWUtPmltYWdl RGF0YSA9IDA7Ci0rICAgICAgICBjdlJlbGVhc2VJbWFnZSgmZnJhbWUpOwotKyAgICB9Ci0rICAg IGlmKGNhcHMpewotKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgIH0KLSsgICAg aWYoYnVmZmVyX2NhcHMpewotKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYoYnVmZmVyX2NhcHMpOwot KyAgICB9Ci0rI2lmIEdTVF9WRVJTSU9OX01BSk9SID4gMAotKyAgICBpZihzYW1wbGUpewotKyAg ICAgICAgZ3N0X3NhbXBsZV91bnJlZihzYW1wbGUpOwotKyAgICB9Ci0rI2VuZGlmCi0gCi0tICAg IGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChidXMpKTsKLSB9Ci0gCi0tLy8KLS0vLyBzdGFy dCB0aGUgcGlwZWxpbmUsIGdyYWIgYSBidWZmZXIsIGFuZCBwYXVzZSBhZ2FpbgotLS8vCi0rLyoh Ci0rICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OmdyYWJGcmFtZQotKyAqIFxyZXR1cm4K LSsgKiBHcmFicyBhIHNhbXBsZSBmcm9tIHRoZSBwaXBlbGluZSwgYXdhaXRpbmcgY29uc3VtYXRp b24gYnkgcmV0cmVpdmVGcmFtZS4KLSsgKiBUaGUgcGlwZWxpbmUgaXMgc3RhcnRlZCBpZiBpdCB3 YXMgbm90IHJ1bm5pbmcgeWV0Ci0rICovCi0gYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpncmFi RnJhbWUoKQotIHsKLS0KLSAgICAgaWYoIXBpcGVsaW5lKQotICAgICAgICAgcmV0dXJuIGZhbHNl OwotIAotKyAgICAvLyBzdGFydCB0aGUgcGlwZWxpbmUgaWYgaXQgd2FzIG5vdCBpbiBwbGF5aW5n IHN0YXRlIHlldAotKyAgICBpZighdGhpcy0+aXNQaXBlbGluZVBsYXlpbmcoKSkKLSsgICAgICAg IHRoaXMtPnN0YXJ0UGlwZWxpbmUoKTsKLSsKLSsgICAgLy8gYmFpbCBvdXQgaWYgRU9TCi0gICAg IGlmKGdzdF9hcHBfc2lua19pc19lb3MoR1NUX0FQUF9TSU5LKHNpbmspKSkKLSAgICAgICAgIHJl dHVybiBmYWxzZTsKLSAKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAotICAgICBpZihidWZm ZXIpCi0gICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7Ci0tICAgIGhhbmRsZU1lc3Nh Z2UoKTsKLSAKLSAgICAgYnVmZmVyID0gZ3N0X2FwcF9zaW5rX3B1bGxfYnVmZmVyKEdTVF9BUFBf U0lOSyhzaW5rKSk7Ci0rI2Vsc2UKLSsgICAgaWYoc2FtcGxlKQotKyAgICAgICAgZ3N0X3NhbXBs ZV91bnJlZihzYW1wbGUpOwotKwotKyAgICBzYW1wbGUgPSBnc3RfYXBwX3NpbmtfcHVsbF9zYW1w bGUoR1NUX0FQUF9TSU5LKHNpbmspKTsKLSsKLSsgICAgaWYoIXNhbXBsZSkKLSsgICAgICAgIHJl dHVybiBmYWxzZTsKLSsKLSsgICAgYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBs ZSk7Ci0rI2VuZGlmCi0rCi0gICAgIGlmKCFidWZmZXIpCi0gICAgICAgICByZXR1cm4gZmFsc2U7 Ci0gCi0gICAgIHJldHVybiB0cnVlOwotIH0KLSAKLS0vLwotLS8vIGRlY29kZSBidWZmZXIKLS0v LwotKy8qIQotKyAqIFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVyOjpyZXRyaWV2ZUZyYW1lCi0r ICogXHJldHVybiBJcGxJbWFnZSBwb2ludGVyLiBbVHJhbnNmZXIgRnVsbF0KLSsgKiAgUmV0cmVp dmUgdGhlIHByZXZpb3VzbHkgZ3JhYmJlZCBidWZmZXIsIGFuZCB3cmFwIGl0IGluIGFuIElQTElt YWdlIHN0cnVjdHVyZQotKyAqLwotIElwbEltYWdlICogQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6cmV0 cmlldmVGcmFtZShpbnQpCi0gewotICAgICBpZighYnVmZmVyKQotICAgICAgICAgcmV0dXJuIDA7 Ci0gCi0tICAgIGlmKCFmcmFtZSkgewotKyAgICAvL2NvbnN0cnVjdCBhIGZyYW1lIGhlYWRlciBp ZiB3ZSBkaWQgbm90IGhhdmUgYW55IHlldAotKyAgICBpZighZnJhbWUpCi0rICAgIHsKLSAgICAg ICAgIGdpbnQgaGVpZ2h0LCB3aWR0aDsKLS0gICAgICAgIEdzdENhcHMgKmJ1ZmZfY2FwcyA9IGdz dF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKLS0gICAgICAgIGFzc2VydChnc3RfY2Fwc19nZXRf c2l6ZShidWZmX2NhcHMpID09IDEpOwotLSAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUg PSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGJ1ZmZfY2FwcywgMCk7Ci0gCi0rICAgICAgICAvL3Jl dXNlIHRoZSBjYXBzIHB0cgotKyAgICAgICAgaWYgKGJ1ZmZlcl9jYXBzKQotKyAgICAgICAgICAg IGdzdF9jYXBzX3VucmVmKGJ1ZmZlcl9jYXBzKTsKLSsKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1Ig PT0gMAotKyAgICAgICAgYnVmZmVyX2NhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7 Ci0rI2Vsc2UKLSsgICAgICAgIGJ1ZmZlcl9jYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1w bGUpOwotKyNlbmRpZgotKyAgICAgICAgLy8gYmFpbCBvdXQgaW4gbm8gY2FwcwotKyAgICAgICAg YXNzZXJ0KGdzdF9jYXBzX2dldF9zaXplKGJ1ZmZlcl9jYXBzKSA9PSAxKTsKLSsgICAgICAgIEdz dFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShidWZmZXJfY2Fw cywgMCk7Ci0rCi0rICAgICAgICAvLyBiYWlsIG91dCBpZiB3aWR0aCBvciBoZWlnaHQgYXJlIDAK LSAgICAgICAgIGlmKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAid2lkdGgiLCAm d2lkdGgpIHx8Ci0tICAgICAgICAgICAhZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwg ImhlaWdodCIsICZoZWlnaHQpKQotKyAgICAgICAgICAgICAgICAhZ3N0X3N0cnVjdHVyZV9nZXRf aW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpKQotKyAgICAgICAgewotKyAgICAgICAg ICAgIHJldHVybiAwOwotKyAgICAgICAgfQotKwotKwotKyAgICAgICAgaW50IGRlcHRoID0gMzsK LSsjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCi0rICAgICAgICBkZXB0aCA9IDA7Ci0rICAgICAg ICBjb25zdCBnY2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsK LSsgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmco c3RydWN0dXJlLCAiZm9ybWF0Iik7Ci0rCi0rICAgICAgICBpZiAoIW5hbWUgfHwgIWZvcm1hdCkK LSAgICAgICAgICAgICByZXR1cm4gMDsKLSAKLS0gICAgICAgIGZyYW1lID0gY3ZDcmVhdGVJbWFn ZUhlYWRlcihjdlNpemUod2lkdGgsIGhlaWdodCksIElQTF9ERVBUSF84VSwgMyk7Ci0tICAgICAg ICBnc3RfY2Fwc191bnJlZihidWZmX2NhcHMpOwotKyAgICAgICAgLy8gd2Ugc3VwcG9ydCAzIHR5 cGVzIG9mIGRhdGE6Ci0rICAgICAgICAvLyAgICAgdmlkZW8veC1yYXcsIGZvcm1hdD1CR1IgICAt PiA4Yml0LCAzIGNoYW5uZWxzCi0rICAgICAgICAvLyAgICAgdmlkZW8veC1yYXcsIGZvcm1hdD1H UkFZOCAtPiA4Yml0LCAxIGNoYW5uZWwKLSsgICAgICAgIC8vICAgICB2aWRlby94LWJheWVyICAg ICAgICAgICAgIC0+IDhiaXQsIDEgY2hhbm5lbAotKyAgICAgICAgLy8gYmF5ZXIgZGF0YSBpcyBu ZXZlciBkZWNvZGVkLCB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgdGhhdAotKyAgICAgICAg Ly8gZXZlcnl0aGluZyBpcyA4IGJpdCwgc28gd2UganVzdCB0ZXN0IHRoZSBjYXBzIGZvciBiaXQg ZGVwdGgKLSsKLSsgICAgICAgIGlmIChzdHJjYXNlY21wKG5hbWUsICJ2aWRlby94LXJhdyIpID09 IDApCi0rICAgICAgICB7Ci0rICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAoZm9ybWF0LCAiQkdS IikgPT0gMCkgewotKyAgICAgICAgICAgICAgICBkZXB0aCA9IDM7Ci0rICAgICAgICAgICAgfQot KyAgICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNtcChmb3JtYXQsICJHUkFZOCIpID09IDApewot KyAgICAgICAgICAgICAgICBkZXB0aCA9IDE7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQot KyAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChuYW1lLCAidmlkZW8veC1iYXllciIpID09IDAp Ci0rICAgICAgICB7Ci0rICAgICAgICAgICAgZGVwdGggPSAxOwotKyAgICAgICAgfQotKyNlbmRp ZgotKyAgICAgICAgaWYgKGRlcHRoID4gMCkgewotKyAgICAgICAgICAgIGZyYW1lID0gY3ZDcmVh dGVJbWFnZUhlYWRlcihjdlNpemUod2lkdGgsIGhlaWdodCksIElQTF9ERVBUSF84VSwgZGVwdGgp OwotKyAgICAgICAgfWVsc2V7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0g ICAgIH0KLSAKLS0gICAgLy8gbm8gbmVlZCB0byBtZW1jcHksIGp1c3QgdXNlIGdzdHJlYW1lcidz IGJ1ZmZlciA6LSkKLSsgICAgLy8gZ3N0cmVhbWVyIGV4cGVjdHMgdXMgdG8gaGFuZGxlIHRoZSBt ZW1vcnkgYXQgdGhpcyBwb2ludAotKyAgICAvLyBzbyB3ZSBjYW4ganVzdCB3cmFwIHRoZSByYXcg YnVmZmVyIGFuZCBiZSBkb25lIHdpdGggaXQKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAot ICAgICBmcmFtZS0+aW1hZ2VEYXRhID0gKGNoYXIgKilHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKTsK LS0gICAgLy9tZW1jcHkgKGZyYW1lLT5pbWFnZURhdGEsIEdTVF9CVUZGRVJfREFUQShidWZmZXIp LCBHU1RfQlVGRkVSX1NJWkUgKGJ1ZmZlcikpOwotLSAgICAvL2dzdF9idWZmZXJfdW5yZWYoYnVm ZmVyKTsKLS0gICAgLy9idWZmZXIgPSAwOwotKyNlbHNlCi0rICAgIC8vIHRoZSBkYXRhIHB0ciBp biBHc3RNYXBJbmZvIGlzIG9ubHkgdmFsaWQgdGhyb3VnaG91dCB0aGUgbWFwaWZvIG9iamVjdHMg bGlmZS4KLSsgICAgLy8gVE9ETzogY2hlY2sgaWYgcmV1c2luZyB0aGUgbWFwaW5mbyBvYmplY3Qg aXMgb2suCi0rCi0rICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBnc3RfYnVmZmVyX21hcChidWZmZXIs aW5mbywgKEdzdE1hcEZsYWdzKUdTVF9NQVBfUkVBRCk7Ci0rICAgIGlmICghc3VjY2Vzcyl7Ci0r ICAgICAgICAvL3NvbWV0aGluZyB3ZWlyZCB3ZW50IHdyb25nIGhlcmUuIGFib3J0LiBhYm9ydC4K LSsgICAgICAgIC8vZnByaW50ZihzdGRlcnIsIkdTdHJlYW1lcjogdW5hYmxlIHRvIG1hcCBidWZm ZXIiKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGZyYW1lLT5pbWFnZURhdGEg PSAoY2hhciopaW5mby0+ZGF0YTsKLSsgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsaW5mbyk7 Ci0rI2VuZGlmCi0rCi0gICAgIHJldHVybiBmcmFtZTsKLSB9Ci0gCi0tdm9pZCBDdkNhcHR1cmVf R1N0cmVhbWVyOjpyZXN0YXJ0UGlwZWxpbmUoKQotKwotKy8qIQotKyAqIFxicmllZiBDdkNhcHR1 cmVfR1N0cmVhbWVyOjppc1BpcGVsaW5lUGxheWluZwotKyAqIFxyZXR1cm4gaWYgdGhlIHBpcGVs aW5lIGlzIGN1cnJlbnRseSBwbGF5aW5nLgotKyAqLwotK2Jvb2wgQ3ZDYXB0dXJlX0dTdHJlYW1l cjo6aXNQaXBlbGluZVBsYXlpbmcoKQotK3sKLSsgICAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGlu ZzsKLSsgICAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQgPSA1KkdTVF9TRUNPTkQ7Ci0rICAgIGlmKCFH U1RfSVNfRUxFTUVOVChwaXBlbGluZSkpewotKyAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICB9 Ci0rCi0rICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0 ZShHU1RfRUxFTUVOVChwaXBlbGluZSksJmN1cnJlbnQsICZwZW5kaW5nLCB0aW1lb3V0KTsKLSsg ICAgaWYgKCFyZXQpewotKyAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgIkdTdHJlYW1lcjogdW5h YmxlIHRvIHF1ZXJ5IHBpcGVsaW5lIHN0YXRlXG4iKTsKLSsgICAgICAgIHJldHVybiBmYWxzZTsK LSsgICAgfQotKwotKyAgICByZXR1cm4gY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORzsKLSt9 Ci0rCi0rLyohCi0rICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OnN0YXJ0UGlwZWxpbmUK LSsgKiBTdGFydCB0aGUgcGlwZWxpbmUgYnkgc2V0dGluZyBpdCB0byB0aGUgcGxheWluZyBzdGF0 ZQotKyAqLwotK3ZvaWQgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6c3RhcnRQaXBlbGluZSgpCi0gewot LSAgICBDVl9GVU5DTkFNRSgiaWN2UmVzdGFydFBpcGVsaW5lIik7Ci0rICAgIENWX0ZVTkNOQU1F KCJpY3ZTdGFydFBpcGVsaW5lIik7Ci0gCi0gICAgIF9fQkVHSU5fXzsKLSAKLS0gICAgcHJpbnRm KCJyZXN0YXJ0aW5nIHBpcGVsaW5lLCBnb2luZyB0byByZWFkeVxuIik7Ci0tCi0tICAgIGlmKGdz dF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSksIEdTVF9TVEFURV9SRUFE WSkgPT0KLS0gICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0rICAgIC8vZnByaW50 ZihzdGRlcnIsICJyZWxpbmtlZCwgcGF1c2luZ1xuIik7Ci0rICAgIGlmKGdzdF9lbGVtZW50X3Nl dF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKSA9PQotKyAg ICAgICAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgICAgICAgQ1ZfRVJST1Io Q1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IHVuYWJsZSB0byBzdGFydCBwaXBlbGluZVxuIik7Ci0r ICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHBpcGVsaW5lKTsKLSAgICAgICAgIHJldHVybjsKLSAg ICAgfQotIAotLSAgICBwcmludGYoInJlYWR5LCByZWxpbmtpbmdcbiIpOwotKyAgICAvL3ByaW50 Zigic3RhdGUgbm93IHBsYXlpbmdcbiIpOwotKyAgICBoYW5kbGVNZXNzYWdlKHBpcGVsaW5lKTsK LSsgICAgX19FTkRfXzsKLSt9Ci0rCi0gCi0tICAgIGdzdF9lbGVtZW50X3VubGluayh1cmlkZWNv ZGViaW4sIGNvbG9yKTsKLS0gICAgcHJpbnRmKCJmaWx0ZXJpbmcgd2l0aCAlc1xuIiwgZ3N0X2Nh cHNfdG9fc3RyaW5nKGNhcHMpKTsKLS0gICAgZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCh1cmlk ZWNvZGViaW4sIGNvbG9yLCBjYXBzKTsKLSsvKiEKLSsgKiBcYnJpZWYgQ3ZDYXB0dXJlX0dTdHJl YW1lcjo6c3RvcFBpcGVsaW5lCi0rICogU3RvcCB0aGUgcGlwZWxpbmUgYnkgc2V0dGluZyBpdCB0 byBOVUxMCi0rICovCi0rdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpzdG9wUGlwZWxpbmUoKQot K3sKLSsgICAgQ1ZfRlVOQ05BTUUoImljdlN0b3BQaXBlbGluZSIpOwotIAotLSAgICBwcmludGYo InJlbGlua2VkLCBwYXVzaW5nXG4iKTsKLSsgICAgX19CRUdJTl9fOwotIAotLSAgICBpZihnc3Rf ZWxlbWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlO RykgPT0KLS0gICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0tICAgICAgICBDVl9F UlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogdW5hYmxlIHRvIHN0YXJ0IHBpcGVsaW5lXG4i KTsKLSsgICAgLy9mcHJpbnRmKHN0ZGVyciwgInJlc3RhcnRpbmcgcGlwZWxpbmUsIGdvaW5nIHRv IHJlYWR5XG4iKTsKLSsgICAgaWYoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKEdTVF9FTEVNRU5UKHBp cGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpID09Ci0rICAgICAgICAgICAgR1NUX1NUQVRFX0NIQU5H RV9GQUlMVVJFKSB7Ci0rICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjog dW5hYmxlIHRvIHN0b3AgcGlwZWxpbmVcbiIpOwotKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihw aXBlbGluZSk7Ci0gICAgICAgICByZXR1cm47Ci0gICAgIH0KLSsgICAgX19FTkRfXzsKLSt9Ci0g Ci0tICAgIHByaW50Zigic3RhdGUgbm93IHBhdXNlZFxuIik7Ci0rLyohCi0rICogXGJyaWVmIEN2 Q2FwdHVyZV9HU3RyZWFtZXI6OnJlc3RhcnRQaXBlbGluZQotKyAqIFJlc3RhcnQgdGhlIHBpcGVs aW5lCi0rICovCi0rdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpyZXN0YXJ0UGlwZWxpbmUoKQot K3sKLSsgICAgaGFuZGxlTWVzc2FnZShwaXBlbGluZSk7Ci0gCi0tICAgICBfX0VORF9fOwotKyAg ICB0aGlzLT5zdG9wUGlwZWxpbmUoKTsKLSsgICAgdGhpcy0+c3RhcnRQaXBlbGluZSgpOwotIH0K LSAKLS12b2lkIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OnNldEZpbHRlcihjb25zdCBjaGFyICpwcm9w ZXJ0eSwgaW50IHR5cGUsIGludCB2MSwgaW50IHYyKQotLXsKLSAKLS0gICAgaWYoIWNhcHMpIHsK LS0gICAgICAgIGlmKHR5cGUgPT0gR19UWVBFX0lOVCkKLS0gICAgICAgICAgICBjYXBzID0gZ3N0 X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXctcmdiIiwgcHJvcGVydHksIHR5cGUsIHYxLCBO VUxMKTsKLS0gICAgICAgIGVsc2UKLS0gICAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3Np bXBsZSgidmlkZW8veC1yYXctcmdiIiwgcHJvcGVydHksIHR5cGUsIHYxLCB2MiwgTlVMTCk7Ci0t ICAgIH0gZWxzZSB7Ci0tICAgICAgICAvL3ByaW50ZigiY2FwcyBiZWZvcmUgc2V0dGluZyAlc1xu IiwgZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMpKTsKLSsvKiEKLSsgKiBcYnJpZWYgQ3ZDYXB0dXJl X0dTdHJlYW1lcjo6c2V0RmlsdGVyCi0rICogXHBhcmFtIHByb3AgdGhlIHByb3BlcnR5IG5hbWUK LSsgKiBccGFyYW0gdHlwZSBnbGliIHByb3BlcnR5IHR5cGUKLSsgKiBccGFyYW0gdjEgdGhlIHZh bHVlCi0rICogXHBhcmFtIHYyIHNlY29uZCB2YWx1ZSBvZiBwcm9wZXJ0eSB0eXBlIHJlcXVpcmVz IGl0LCBlbHNlIE5VTEwKLSsgKiBGaWx0ZXIgdGhlIG91dHB1dCBmb3JtYXRzIGJ5IHNldHRpbmcg YXBwc2luayBjYXBzIHByb3BlcnRpZXMKLSsgKi8KLSt2b2lkIEN2Q2FwdHVyZV9HU3RyZWFtZXI6 OnNldEZpbHRlcihjb25zdCBjaGFyICpwcm9wLCBpbnQgdHlwZSwgaW50IHYxLCBpbnQgdjIpCi0r ewotKyAgICAvL3ByaW50ZigiR1N0cmVhbWVyOiBzZXRGaWx0ZXIgXG4iKTsKLSsgICAgaWYoIWNh cHMgfHwgISggR1NUX0lTX0NBUFMgKGNhcHMpICkpCi0rICAgIHsKLSAgICAgICAgIGlmKHR5cGUg PT0gR19UWVBFX0lOVCkKLS0gICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMsICJ2 aWRlby94LXJhdy1yZ2IiLCBwcm9wZXJ0eSwgdHlwZSwgdjEsIE5VTEwpOwotKyAgICAgICAgewot KyNpZiBHU1RfVkVSU0lPTl9NQUpPUiA9PSAwCi0rICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBz X25ld19zaW1wbGUoInZpZGVvL3gtcmF3LXJnYiIsIHByb3AsIHR5cGUsIHYxLCBOVUxMKTsKLSsj ZWxzZQotKyAgICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlKCJ2aWRlby94LXJh dyIsImZvcm1hdCIsR19UWVBFX1NUUklORywiQkdSIiwgcHJvcCwgdHlwZSwgdjEsIE5VTEwpOwot KyNlbmRpZgotKyAgICAgICAgfQotICAgICAgICAgZWxzZQotLSAgICAgICAgICAgIGdzdF9jYXBz X3NldF9zaW1wbGUoY2FwcywgInZpZGVvL3gtcmF3LXJnYiIsIHByb3BlcnR5LCB0eXBlLCB2MSwg djIsIE5VTEwpOwotKyAgICAgICAgewotKyNpZiBHU1RfVkVSU0lPTl9NQUpPUiA9PSAwCi0rICAg ICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3LXJnYiIsIHBy b3AsIHR5cGUsIHYxLCB2MiwgTlVMTCk7Ci0rI2Vsc2UKLSsgICAgICAgICAgICBjYXBzID0gZ3N0 X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLCJmb3JtYXQiLEdfVFlQRV9TVFJJTkcsIkJH UiIsIHByb3AsIHR5cGUsIHYxLCB2MiwgTlVMTCk7Ci0rI2VuZGlmCi0rICAgICAgICB9Ci0rICAg IH0KLSsgICAgZWxzZQotKyAgICB7Ci0rI2lmIEdTVF9WRVJTSU9OX01BSk9SID4gMAotKyAgICAg ICAgaWYgKCEgZ3N0X2NhcHNfaXNfd3JpdGFibGUoY2FwcykpCi0rICAgICAgICAgICAgY2FwcyA9 IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotKyNlbmRpZgotKyAgICAgICAgaWYodHlw ZSA9PSBHX1RZUEVfSU5UKXsKLSsgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMs IHByb3AsIHR5cGUsIHYxLCBOVUxMKTsKLSsgICAgICAgIH1lbHNlewotKyAgICAgICAgICAgIGdz dF9jYXBzX3NldF9zaW1wbGUoY2FwcywgcHJvcCwgdHlwZSwgdjEsIHYyLCBOVUxMKTsKLSsgICAg ICAgIH0KLSAgICAgfQotIAotLSAgICByZXN0YXJ0UGlwZWxpbmUoKTsKLSsjaWYgR1NUX1ZFUlNJ T05fTUFKT1IgPiAwCi0rICAgIGNhcHMgPSBnc3RfY2Fwc19maXhhdGUoY2Fwcyk7Ci0rI2VuZGlm Ci0rCi0rICAgIGdzdF9hcHBfc2lua19zZXRfY2FwcyhHU1RfQVBQX1NJTksoc2luayksIGNhcHMp OwotKyAgICAvL3ByaW50ZigiZmlsdGVyaW5nIHdpdGggJXNcbiIsIGdzdF9jYXBzX3RvX3N0cmlu ZyhjYXBzKSk7Ci0gfQotIAotKwotKy8qIQotKyAqIFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVy OjpyZW1vdmVGaWx0ZXIKLSsgKiBccGFyYW0gZmlsdGVyIGZpbHRlciB0byByZW1vdmUKLSsgKiBy ZW1vdmUgdGhlIHNwZWNpZmllZCBmaWx0ZXIgZnJvbSB0aGUgYXBwc2luayB0ZW1wbGF0ZSBjYXBz Ci0rICovCi0gdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpyZW1vdmVGaWx0ZXIoY29uc3QgY2hh ciAqZmlsdGVyKQotIHsKLSAgICAgaWYoIWNhcHMpCi0gICAgICAgICByZXR1cm47Ci0gCi0rI2lm IEdTVF9WRVJTSU9OX01BSk9SID4gMAotKyAgICBpZiAoISBnc3RfY2Fwc19pc193cml0YWJsZShj YXBzKSkKLSsgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSsj ZW5kaWYKLSsKLSAgICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShj YXBzLCAwKTsKLSAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQocywgZmlsdGVyKTsKLSAK LS0gICAgcmVzdGFydFBpcGVsaW5lKCk7Ci0rICAgIGdzdF9hcHBfc2lua19zZXRfY2FwcyhHU1Rf QVBQX1NJTksoc2luayksIGNhcHMpOwotIH0KLSAKLS0KLS0vLwotLS8vIGNvbm5lY3QgdXJpZGVj b2RlYmluIGR5bmFtaWNhbGx5IGNyZWF0ZWQgc291cmNlIHBhZHMgdG8gY29sb3VyY29udmVydGVy Ci0tLy8KLS12b2lkIEN2Q2FwdHVyZV9HU3RyZWFtZXI6Om5ld1BhZChHc3RFbGVtZW50ICogLyp1 cmlkZWNvZGViaW4qLywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZCAgICAg KnBhZCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCi0r LyohCi0rICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6Om5ld1BhZCBsaW5rIGR5bmFtaWMg cGFkZAotKyAqIFxwYXJhbSBwYWQKLSsgKiBccGFyYW0gZGF0YQotKyAqIGRlY29kZWJpbiBjcmVh dGVzIHBhZHMgYmFzZWQgb24gc3RyZWFtIGluZm9ybWF0aW9uLCB3aGljaCBpcyBub3Qga25vd24g dXBmcm9udAotKyAqIG9uIHJlY2VpdmluZyB0aGUgcGFkLWFkZGVkIHNpZ25hbCwgd2UgY29ubmVj dCBpdCB0byB0aGUgY29sb3JzcGFjZSBjb252ZXJzaW9uIGVsZW1lbnQKLSsgKi8KLSt2b2lkIEN2 Q2FwdHVyZV9HU3RyZWFtZXI6Om5ld1BhZChHc3RFbGVtZW50ICogLyplbGVtKi8sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkICAgICAqcGFkLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCi0gewotICAgICBHc3RQYWQg KnNpbmtwYWQ7Ci0gICAgIEdzdEVsZW1lbnQgKmNvbG9yID0gKEdzdEVsZW1lbnQgKikgZGF0YTsK LSAKLS0KLSAgICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChjb2xvciwg InNpbmsiKTsKLS0KLS0vLyAgcHJpbnRmKCJsaW5raW5nIGR5bmFtaWMgcGFkIHRvIGNvbG91cmNv bnZlcnRlciAlcCAlcFxuIiwgdXJpZGVjb2RlYmluLCBwYWQpOwotKyAgICBpZiAoIXNpbmtwYWQp ewotKyAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgIkdzdHJlYW1lcjogbm8gcGFkIG5hbWVkIHNp bmtcbiIpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICB9Ci0gCi0gICAgIGdzdF9wYWRfbGluayAo cGFkLCBzaW5rcGFkKTsKLS0KLSAgICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gfQot IAotKy8qIQotKyAqIFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVyOjpvcGVuIE9wZW4gdGhlIGdp dmVuIGZpbGUgd2l0aCBnc3RyZWFtZXIKLSsgKiBccGFyYW0gdHlwZSBDdkNhcHR1cmUgdHlwZS4g T25lIG9mIENWX0NBUF9HU1RSRUFNRVJfKgotKyAqIFxwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSB0 byBvcGVuIGluIGNhc2Ugb2YgQ1ZfQ0FQX0dTVFJFQU1FUl9GSUxFCi0rICogXHJldHVybiBib29s ZWFuLiBTcGVjaWZpZXMgaWYgb3BlbmluZyB3YXMgc3VjY2VzZnVsLgotKyAqCi0rICogSW4gY2Fz ZSBvZiBDVl9DQVBfR1NUUkVBTUVSX1Y0TCgyKSwgYSBwaXBlbGluIGlzIGNvbnN0cnVjdGVkIGFz IGZvbGxvd3M6Ci0rICogICAgdjRsMnNyYyAhIGF1dG9jb252ZXJ0ICEgYXBwc2luawotKyAqCi0r ICoKLSsgKiBUaGUgJ2ZpbGVuYW1lJyBwYXJhbWV0ZXIgaXMgbm90IGxpbWl0ZWQgdG8gZmlsZXN5 c3RlbSBwYXRocywgYW5kIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSsgKgotKyAqICAt IGEgbm9ybWFsIGZpbGVzeXN0ZW0gcGF0aDoKLSsgKiAgICAgICAgZS5nLiB2aWRlby5hdmkgb3Ig L3BhdGgvdG8vdmlkZW8uYXZpIG9yIEM6XFx2aWRlby5hdmkKLSsgKiAgLSBhbiB1cmk6Ci0rICog ICAgICAgIGUuZy4gZmlsZTovLy9wYXRoL3RvL3ZpZGVvLmF2aSBvciBydHNwOi8vL3BhdGgvdG8v c3RyZWFtLmFzZgotKyAqICAtIGEgZ3N0cmVhbWVyIHBpcGVsaW5lIGRlc2NyaXB0aW9uOgotKyAq ICAgICAgICBlLmcuIHZpZGVvdGVzdHNyYyAhIHZpZGVvY29udmVydCAhIGFwcHNpbmsKLSsgKiAg ICAgICAgdGhlIGFwcHNpbmsgbmFtZSBzaG91bGQgYmUgZWl0aGVyICdhcHBzaW5rMCcgKHRoZSBk ZWZhdWx0KSBvciAnb3BlbmN2c2luaycKLSsgKgotKyAqICBXaGVuIGRlYWxpbmcgd2l0aCBhIGZp bGUsIEN2Q2FwdHVyZV9HU3RyZWFtZXIgd2lsbCBub3QgZHJvcCBmcmFtZXMgaWYgdGhlIGdyYWJi aW5nIGludGVydmFsCi0rICogIGxhcmdlciB0aGFuIHRoZSBmcmFtZXJhdGUgcGVyaW9kLiAoVW5s aWtlIHRoZSB1cmkgb3IgbWFudWFsIHBpcGVsaW5lIGRlc2NyaXB0aW9uLCB3aGljaCBhc3N1bWUK LSsgKiAgYSBsaXZlIHNvdXJjZSkKLSsgKgotKyAqICBUaGUgcGlwZWxpbmUgd2lsbCBvbmx5IGJl IHN0YXJ0ZWQgd2hlbmV2ZXIgdGhlIGZpcnN0IGZyYW1lIGlzIGdyYWJiZWQuIFNldHRpbmcgcGlw ZWxpbmUgcHJvcGVydGllcwotKyAqICBpcyByZWFsbHkgc2xvdyBpZiB3ZSBuZWVkIHRvIHJlc3Rh cnQgdGhlIHBpcGVsaW5lIG92ZXIgYW5kIG92ZXIgYWdhaW4uCi0rICoKLSsgKiAgVE9ETzogdGhl ICd0eXBlJyBwYXJhbWV0ZXIgaXMgaW1vIHVubmVlZGVkLiBmb3IgdjRsMiwgZmlsZW5hbWUgJ3Y0 bDI6Ly8vZGV2L3ZpZGVvMCcgY2FuIGJlIHVzZWQuCi0rICogIEkgZXhwZWN0IHRoaXMgdG8gYmUg dGhlIHNhbWUgZm9yIENWX0NBUF9HU1RSRUFNRVJfMTM5NC4gSXMgYW55b25lIGFjdHVhbGx5IHN0 aWxsIHVzaW5nIHY0bCAodjEpPwotKyAqCi0rICovCi0gYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVy OjpvcGVuKCBpbnQgdHlwZSwgY29uc3QgY2hhciogZmlsZW5hbWUgKQotIHsKLS0gICAgY2xvc2Uo KTsKLSAgICAgQ1ZfRlVOQ05BTUUoImN2Q2FwdHVyZUZyb21DQU1fR1N0cmVhbWVyIik7Ci0gCi0g ICAgIF9fQkVHSU5fXzsKLSAKLSAgICAgZ3N0X2luaXRpYWxpemVyOjppbml0KCk7Ci0gCi0tLy8g ICAgaWYoIWlzSW5pdGVkKSB7Ci0tLy8gICAgICAgIHByaW50ZigiZ3N0X2luaXRcbiIpOwotLS8v ICAgICAgICBnc3RfaW5pdCAoTlVMTCwgTlVMTCk7Ci0tCi0tLy8gICAgICAgIGdzdF9kZWJ1Z19z ZXRfYWN0aXZlKFRSVUUpOwotLS8vICAgICAgICBnc3RfZGVidWdfc2V0X2NvbG9yZWQoVFJVRSk7 Ci0tLy8gICAgICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoR1NUX0xFVkVMX1dB Uk5JTkcpOwotLQotLS8vICAgICAgICBpc0luaXRlZCA9IHRydWU7Ci0tLy8gICAgfQotICAgICBi b29sIHN0cmVhbSA9IGZhbHNlOwotICAgICBib29sIG1hbnVhbHBpcGVsaW5lID0gZmFsc2U7Ci0g ICAgIGNoYXIgKnVyaSA9IE5VTEw7Ci0gICAgIHVyaWRlY29kZWJpbiA9IE5VTEw7Ci0tICAgIGlm KHR5cGUgIT0gQ1ZfQ0FQX0dTVFJFQU1FUl9GSUxFKSB7Ci0tICAgICAgICBjbG9zZSgpOwotLSAg ICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICBHc3RFbGVtZW50RmFjdG9yeSAqIHRlc3RmYWM7Ci0r Ci0rICAgIGlmICh0eXBlID09IENWX0NBUF9HU1RSRUFNRVJfVjRMKXsKLSsgICAgICAgIHRlc3Rm YWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoInY0bHNyYyIpOwotKyAgICAgICAgaWYgKCF0 ZXN0ZmFjKXsKLSsgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0rICAgICAgICB9Ci0rICAgICAg ICBnX29iamVjdF91bnJlZihHX09CSkVDVCh0ZXN0ZmFjKSk7Ci0rICAgICAgICBmaWxlbmFtZSA9 ICJ2NGxzcmMgISAiQ09MT1JfRUxFTSIgISBhcHBzaW5rIjsKLSAgICAgfQotKyAgICBpZiAodHlw ZSA9PSBDVl9DQVBfR1NUUkVBTUVSX1Y0TDIpewotKyAgICAgICAgdGVzdGZhYyA9IGdzdF9lbGVt ZW50X2ZhY3RvcnlfZmluZCgidjRsMnNyYyIpOwotKyAgICAgICAgaWYgKCF0ZXN0ZmFjKXsKLSsg ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0rICAgICAgICB9Ci0rICAgICAgICBnX29iamVjdF91 bnJlZihHX09CSkVDVCh0ZXN0ZmFjKSk7Ci0rICAgICAgICBmaWxlbmFtZSA9ICJ2NGwyc3JjICEg IkNPTE9SX0VMRU0iICEgYXBwc2luayI7Ci0rICAgIH0KLSsKLSAKLS0gICAgaWYoIWdzdF91cmlf aXNfdmFsaWQoZmlsZW5hbWUpKSB7Ci0rICAgIC8vIHRlc3QgaWYgd2UgaGF2ZSBhIHZhbGlkIHVy aS4gSWYgc28sIG9wZW4gaXQgd2l0aCBhbiB1cmlkZWNvZGViaW4KLSsgICAgLy8gZWxzZSwgd2Ug bWlnaHQgaGF2ZSBhIGZpbGUgb3IgYSBtYW51YWwgcGlwZWxpbmUuCi0rICAgIC8vIGlmIGdzdHJl YW1lciBjYW5ub3QgcGFyc2UgdGhlIG1hbnVhbCBwaXBlbGluZSwgd2UgYXNzdW1lIHdlIHdlcmUg Z2l2ZW4gYW5kCi0rICAgIC8vIG9yZGluYXJ5IGZpbGUgcGF0aC4KLSsgICAgaWYoIWdzdF91cmlf aXNfdmFsaWQoZmlsZW5hbWUpKQotKyAgICB7Ci0gICAgICAgICB1cmkgPSByZWFscGF0aChmaWxl bmFtZSwgTlVMTCk7Ci0tICAgICAgICBzdHJlYW09ZmFsc2U7Ci0tICAgICAgICBpZih1cmkpIHsK LSsgICAgICAgIHN0cmVhbSA9IGZhbHNlOwotKyAgICAgICAgaWYodXJpKQotKyAgICAgICAgewot ICAgICAgICAgICAgIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpKHVyaSwgTlVMTCwgTlVMTCk7Ci0g ICAgICAgICAgICAgaWYoIXVyaSkgewotICAgICAgICAgICAgICAgICBDVl9XQVJOKCJHU3RyZWFt ZXI6IEVycm9yIG9wZW5pbmcgZmlsZVxuIik7Ci0gICAgICAgICAgICAgICAgIGNsb3NlKCk7Ci0g ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICB9Ci0tICAgICAgICB9 IGVsc2UgewotKyAgICAgICAgfQotKyAgICAgICAgZWxzZQotKyAgICAgICAgewotICAgICAgICAg ICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLS0gICAgICAgICAgICAvL3VyaWRlY29kZWJpbiA9IGdz dF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbihmaWxlbmFtZSwgRkFMU0UsICZlcnIpOwotICAg ICAgICAgICAgIHVyaWRlY29kZWJpbiA9IGdzdF9wYXJzZV9sYXVuY2goZmlsZW5hbWUsICZlcnIp OwotICAgICAgICAgICAgIGlmKCF1cmlkZWNvZGViaW4pIHsKLS0gICAgICAgICAgICAgICAgQ1Zf V0FSTigiR1N0cmVhbWVyOiBFcnJvciBvcGVuaW5nIGJpblxuIik7Ci0tICAgICAgICAgICAgICAg IGNsb3NlKCk7Ci0rICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJHU3RyZWFtZXI6 IEVycm9yIG9wZW5pbmcgYmluOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKLSsgICAgICAgICAgICAg ICAgLy9jbG9zZSgpOwotICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg ICAgfQotICAgICAgICAgICAgIHN0cmVhbSA9IHRydWU7Ci1AQCAtMzYzLDMyICs2MTMsNzUgQEAg Ym9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpvcGVuKCBpbnQgdHlwZQotICAgICAgICAgdXJpID0g Z19zdHJkdXAoZmlsZW5hbWUpOwotICAgICB9Ci0gCi0tICAgIGlmKCF1cmlkZWNvZGViaW4pIHsK LS0gICAgICAgIHVyaWRlY29kZWJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVyaWRl Y29kZWJpbiIsIE5VTEwpOwotLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHVyaWRlY29k ZWJpbiksInVyaSIsdXJpLCBOVUxMKTsKLSsgICAgYm9vbCBlbGVtZW50X2Zyb21fdXJpID0gZmFs c2U7Ci0rICAgIGlmKCF1cmlkZWNvZGViaW4pCi0rICAgIHsKLSsgICAgICAgIC8vIEF0IHRoaXMg d3JpdGluZywgdGhlIHY0bDIgZWxlbWVudCAoYW5kIG1heWJlIG90aGVycyB0b28pIGRvZXMgbm90 IHN1cHBvcnQgY2FwcyByZW5lZ290aWF0aW9uLgotKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0 IHdlIGNhbm5vdCB1c2UgYW4gdXJpZGVjb2RlYmluIHdoZW4gZGVhbGluZyB3aXRoIHY0bDIsIHNp bmNlIHNldHRpbmcKLSsgICAgICAgIC8vIGNhcHR1cmUgcHJvcGVydGllcyB3aWxsIG5vdCB3b3Jr LgotKyAgICAgICAgLy8gVGhlIHNvbHV0aW9uIChwcm9iYWJseSBvbmx5IHVudGlsIGdzdHJlYW1l ciAxLjIpIGlzIHRvIG1ha2UgYW4gZWxlbWVudCBmcm9tIHVyaSB3aGVuIGRlYWxpbmcgd2l0aCB2 NGwyLgotKyAgICAgICAgZ2NoYXIgKiBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sKHVy aSk7Ci0rICAgICAgICBpZiAoIXN0cmNhc2VjbXAocHJvdG9jb2wgLCAidjRsMiIpKQotKyAgICAg ICAgewotKyNpZiBHU1RfVkVSU0lPTl9NQUpPUiA9PSAwCi0rICAgICAgICAgICAgdXJpZGVjb2Rl YmluID0gZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaShHU1RfVVJJX1NSQywgdXJpLCAic3JjIik7 Ci0rI2Vsc2UKLSsgICAgICAgICAgICB1cmlkZWNvZGViaW4gPSBnc3RfZWxlbWVudF9tYWtlX2Zy b21fdXJpKEdTVF9VUklfU1JDLCB1cmksICJzcmMiLCBOVUxMKTsKLSsjZW5kaWYKLSsgICAgICAg ICAgICBlbGVtZW50X2Zyb21fdXJpID0gdHJ1ZTsKLSsgICAgICAgIH1lbHNlewotKyAgICAgICAg ICAgIHVyaWRlY29kZWJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVyaWRlY29kZWJp biIsIE5VTEwpOwotKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVCh1cmlkZWNvZGVi aW4pLCJ1cmkiLHVyaSwgTlVMTCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBnX2ZyZWUocHJvdG9j b2wpOwotKwotICAgICAgICAgaWYoIXVyaWRlY29kZWJpbikgewotLSAgICAgICAgICAgIENWX1dB Uk4oIkdTdHJlYW1lcjogRmFpbGVkIHRvIGNyZWF0ZSB1cmlkZWNvZGViaW5cbiIpOwotKyAgICAg ICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJHU3RyZWFtZXI6IEVycm9yIG9wZW5pbmcgYmluOiAl c1xuIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgICAgICBjbG9zZSgpOwotICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKLSAgICAgICAgIH0KLSAgICAgfQotIAotLSAgICBpZihtYW51YWxwaXBl bGluZSkgewotKyAgICBpZihtYW51YWxwaXBlbGluZSkKLSsgICAgewotKyNpZiBHU1RfVkVSU0lP Tl9NQUpPUiA9PSAwCi0gICAgICAgICBHc3RJdGVyYXRvciAqaXQgPSBnc3RfYmluX2l0ZXJhdGVf c2lua3MoR1NUX0JJTih1cmlkZWNvZGViaW4pKTsKLSAgICAgICAgIGlmKGdzdF9pdGVyYXRvcl9u ZXh0KGl0LCAoZ3BvaW50ZXIgKikmc2luaykgIT0gR1NUX0lURVJBVE9SX09LKSB7Ci0tICAgICAg ICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogY2Fubm90IGZpbmQgYXBwc2luayBp biBtYW51YWwgcGlwZWxpbmVcbiIpOwotLSAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICAgICAg ICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBzaW5r IGluIG1hbnVhbCBwaXBlbGluZVxuIik7Ci0rICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAg ICAgICAgfQotKyNlbHNlCi0rICAgICAgICBzaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1Rf QklOKHVyaWRlY29kZWJpbiksICJvcGVuY3ZzaW5rIik7Ci0rICAgICAgICBpZiAoIXNpbmspewot KyAgICAgICAgICAgIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4odXJpZGVjb2Rl YmluKSwgImFwcHNpbmswIik7Ci0gICAgICAgICB9Ci0gCi0tICAgIHBpcGVsaW5lID0gdXJpZGVj b2RlYmluOwotLSAgICB9IGVsc2UgewotLSAgICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcg KE5VTEwpOwotLQotLSAgICAgICAgY29sb3IgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZm bXBlZ2NvbG9yc3BhY2UiLCBOVUxMKTsKLSsgICAgICAgIGlmICghc2luayl7Ci0rICAgICAgICAg ICAgQ1ZfRVJST1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IGNhbm5vdCBmaW5kIGFwcHNpbmsg aW4gbWFudWFsIHBpcGVsaW5lXG4iKTsKLSsgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0rICAg ICAgICB9Ci0rI2VuZGlmCi0rICAgICAgICBwaXBlbGluZSA9IHVyaWRlY29kZWJpbjsKLSsgICAg fQotKyAgICBlbHNlCi0rICAgIHsKLSsgICAgICAgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25l dyAoTlVMTCk7Ci0rICAgICAgICAvLyB2aWRlb2NvbnZlcnQgKGluIDAuMTA6IGZmbXBlZ2NvbG9y c3BhY2UpIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgY29ycmVjdCBjb2xvcnNwYWNlCi0rICAg ICAgICAvLyBjb252ZXJzaW9uIGJhc2VkIG9uIGNhcHMuCi0rICAgICAgICBjb2xvciA9IGdzdF9l bGVtZW50X2ZhY3RvcnlfbWFrZShDT0xPUl9FTEVNLCBOVUxMKTsKLSAgICAgICAgIHNpbmsgPSBn c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBOVUxMKTsKLSAKLSAgICAgICAgIGdz dF9iaW5fYWRkX21hbnkoR1NUX0JJTihwaXBlbGluZSksIHVyaWRlY29kZWJpbiwgY29sb3IsIHNp bmssIE5VTEwpOwotLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh1cmlkZWNvZGViaW4sICJwYWQt YWRkZWQiLCBHX0NBTExCQUNLKG5ld1BhZCksIGNvbG9yKTsKLSsKLSsgICAgICAgIGlmKGVsZW1l bnRfZnJvbV91cmkpIHsKLSsgICAgICAgICAgICBpZighZ3N0X2VsZW1lbnRfbGluayh1cmlkZWNv ZGViaW4sIGNvbG9yKSkgewotKyAgICAgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwg IkdTdHJlYW1lcjogY2Fubm90IGxpbmsgY29sb3IgLT4gc2lua1xuIik7Ci0rICAgICAgICAgICAg ICAgIGdzdF9vYmplY3RfdW5yZWYocGlwZWxpbmUpOwotKyAgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfWVsc2V7Ci0rICAgICAgICAgICAgZ19z aWduYWxfY29ubmVjdCh1cmlkZWNvZGViaW4sICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKG5ld1Bh ZCksIGNvbG9yKTsKLSsgICAgICAgIH0KLSAKLSAgICAgICAgIGlmKCFnc3RfZWxlbWVudF9saW5r KGNvbG9yLCBzaW5rKSkgewotICAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0 cmVhbWVyOiBjYW5ub3QgbGluayBjb2xvciAtPiBzaW5rXG4iKTsKLUBAIC0zOTcsMjY2ICs2OTAs MTMxIEBAIGJvb2wgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6b3BlbiggaW50IHR5cGUKLSAgICAgICAg IH0KLSAgICAgfQotIAotKyAgICAvL1RPRE86IGlzIDEgc2luZ2xlIGJ1ZmZlciByZWFsbHkgaGln aCBlbm91Z2g/Ci0gICAgIGdzdF9hcHBfc2lua19zZXRfbWF4X2J1ZmZlcnMgKEdTVF9BUFBfU0lO SyhzaW5rKSwgMSk7Ci0gICAgIGdzdF9hcHBfc2lua19zZXRfZHJvcCAoR1NUX0FQUF9TSU5LKHNp bmspLCBzdHJlYW0pOwotKyAgICAvL2RvIG5vdCBlbWl0IHNpZ25hbHM6IGFsbCBjYWxscyB3aWxs IGJlIHN5bmNocm9ub3VzIGFuZCBibG9ja2luZwotKyAgICBnc3RfYXBwX3Npbmtfc2V0X2VtaXRf c2lnbmFscyAoR1NUX0FQUF9TSU5LKHNpbmspLCBGQUxTRSk7Ci0rCi0rI2lmIEdTVF9WRVJTSU9O X01BSk9SID09IDAKLSAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3 LXJnYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWRfbWFzayIsICAgR19U WVBFX0lOVCwgMHgwMDAwRkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmVl bl9tYXNrIiwgR19UWVBFX0lOVCwgMHgwMEZGMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJibHVlX21hc2siLCAgR19UWVBFX0lOVCwgMHhGRjAwMDAsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwpOwotKyNlbHNlCi0rICAgIC8vIHN1cHBvcnQgMSBhbmQg MyBjaGFubmVsIDggYml0IGRhdGEsIGFzIHdlbGwgYXMgYmF5ZXIgKGFsc28gIDEgY2hhbm5lbCwg OGJpdCkKLSsgICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9y bWF0PShzdHJpbmcpe0JHUiwgR1JBWTh9OyB2aWRlby94LWJheWVyLGZvcm1hdD0oc3RyaW5nKXty Z2diLGJnZ3IsZ3JiZyxnYnJnfSIpOwotKyNlbmRpZgotICAgICBnc3RfYXBwX3Npbmtfc2V0X2Nh cHMoR1NUX0FQUF9TSU5LKHNpbmspLCBjYXBzKTsKLSAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7 Ci0gCi0tICAgIGlmKGdzdF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSks IEdTVF9TVEFURV9SRUFEWSkgPT0KLS0gICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7 Ci0tICAgICAgICBDVl9XQVJOKCJHU3RyZWFtZXI6IHVuYWJsZSB0byBzZXQgcGlwZWxpbmUgdG8g cmVhZHlcbiIpOwotLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihwaXBlbGluZSk7Ci0tICAgICAg ICByZXR1cm4gZmFsc2U7Ci0tICAgIH0KLS0KLS0gICAgaWYoZ3N0X2VsZW1lbnRfc2V0X3N0YXRl KEdTVF9FTEVNRU5UKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BMQVlJTkcpID09Ci0tICAgICAgIEdT VF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl KEdTVF9FTEVNRU5UKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpOwotLSAgICAgICAgQ1ZfV0FS TigiR1N0cmVhbWVyOiB1bmFibGUgdG8gc2V0IHBpcGVsaW5lIHRvIHBsYXlpbmdcbiIpOwotLSAg ICAgICAgZ3N0X29iamVjdF91bnJlZihwaXBlbGluZSk7Ci0tICAgICAgICByZXR1cm4gZmFsc2U7 Ci0tICAgIH0KLS0KLS0KLS0KLS0gICAgaGFuZGxlTWVzc2FnZSgpOwotLQotKyAgICAvL3dlIGRv IG5vdCBzdGFydCByZWNvcmRpbmcgaGVyZSBqdXN0IHlldC4KLSsgICAgLy8gdGhlIHVzZXIgcHJv YmFibHkgd2FudHMgdG8gc2V0IGNhcHR1cmUgcHJvcGVydGllcyBmaXJzdCwgc28gc3RhcnQgcmVj b3JkaW5nIHdoZW5ldmVyIHRoZSBmaXJzdCBmcmFtZSBpcyByZXF1ZXN0ZWQKLSAgICAgX19FTkRf XzsKLSAKLSAgICAgcmV0dXJuIHRydWU7Ci0gfQotIAotLS8vCi0tLy8KLS0vLyBnc3RyZWFtZXIg aW1hZ2Ugc2VxdWVuY2Ugd3JpdGVyCi0tLy8KLS0vLwotLWNsYXNzIEN2VmlkZW9Xcml0ZXJfR1N0 cmVhbWVyIDogcHVibGljIEN2VmlkZW9Xcml0ZXIKLSsvKiEKLSsgKiBcYnJpZWYgQ3ZDYXB0dXJl X0dTdHJlYW1lcjo6Z2V0UHJvcGVydHkgcmV0cmVpdmUgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSBm cm9tIHRoZSBwaXBlbGluZQotKyAqIFxwYXJhbSBwcm9wSWQgcmVxdWVzdGVkIHByb3BlcnR5Ci0r ICogXHJldHVybiBwcm9wZXJ0eSB2YWx1ZQotKyAqCi0rICogVGhlcmUgYXJlIHR3byB3YXlzIHRo ZSBwcm9wZXJ0aWVzIGNhbiBiZSByZXRyZWl2ZWQuIEZvciBzZWVrLWJhc2VkIHByb3BlcnRpZXMg d2UgY2FuIHF1ZXJ5IHRoZSBwaXBlbGluZS4KLSsgKiBGb3IgZnJhbWUtYmFzZWQgcHJvcGVydGll cywgd2UgdXNlIHRoZSBjYXBzIG9mIHRoZSBsYXNzdCByZWNlaXZlZiBzYW1wbGUuIFRoaXMgbWVh bnMgdGhhdCBzb21lIHByb3BlcnRpZXMKLSsgKiBhcmUgbm90IGF2YWlsYWJsZSB1bnRpbCBhIGZp cnN0IGZyYW1lIHdhcyByZWNlaXZlZAotKyAqLwotK2RvdWJsZSBDdkNhcHR1cmVfR1N0cmVhbWVy OjpnZXRQcm9wZXJ0eSggaW50IHByb3BJZCApCi0gewotLXB1YmxpYzoKLS0gICAgQ3ZWaWRlb1dy aXRlcl9HU3RyZWFtZXIoKSB7IGluaXQoKTsgfQotLSAgICB2aXJ0dWFsIH5DdlZpZGVvV3JpdGVy X0dTdHJlYW1lcigpIHsgY2xvc2UoKTsgfQotKyAgICBHc3RGb3JtYXQgZm9ybWF0OwotKyAgICBn aW50NjQgdmFsdWU7Ci0rICAgIGdib29sZWFuIHN0YXR1czsKLSAKLS0gICAgdmlydHVhbCBib29s IG9wZW4oIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZm91cmNjLAotLSAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlIGZwcywgQ3ZTaXplIGZyYW1lU2l6ZSwgYm9vbCBpc0NvbG9yICk7Ci0t ICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwotLSAgICB2aXJ0dWFsIGJvb2wgd3JpdGVGcmFtZSgg Y29uc3QgSXBsSW1hZ2UqIGltYWdlICk7Ci0tcHJvdGVjdGVkOgotLSAgICB2b2lkIGluaXQoKTsK LS0gICAgc3RkOjptYXA8aW50LCBjaGFyKj4gZW5jczsKLS0gICAgR3N0RWxlbWVudCogc291cmNl OwotLSAgICBHc3RFbGVtZW50KiBmaWxlOwotLSAgICBHc3RFbGVtZW50KiBlbmM7Ci0tICAgIEdz dEVsZW1lbnQqIG11eDsKLS0gICAgR3N0RWxlbWVudCogY29sb3I7Ci0tICAgIEdzdEJ1ZmZlciog YnVmZmVyOwotLSAgICBHc3RFbGVtZW50KiBwaXBlbGluZTsKLS0gICAgaW50IGlucHV0X3BpeF9m bXQ7Ci0tfTsKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAotKyNkZWZpbmUgRk9STUFUICZm b3JtYXQKLSsjZWxzZQotKyNkZWZpbmUgRk9STUFUIGZvcm1hdAotKyNlbmRpZgotIAotLXZvaWQg Q3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OmluaXQoKQotLXsKLS0gICAgZW5jc1tDVl9GT1VSQ0Mo J0QnLCdSJywnQScsJ0MnKV09KGNoYXIqKSJkaXJhY2VuYyI7Ci0tICAgIGVuY3NbQ1ZfRk9VUkND KCdIJywnRicsJ1knLCdVJyldPShjaGFyKikiZmZlbmNfaHVmZnl1diI7Ci0tICAgIGVuY3NbQ1Zf Rk9VUkNDKCdKJywnUCcsJ0UnLCdHJyldPShjaGFyKikianBlZ2VuYyI7Ci0tICAgIGVuY3NbQ1Zf Rk9VUkNDKCdNJywnSicsJ1AnLCdHJyldPShjaGFyKikianBlZ2VuYyI7Ci0tICAgIGVuY3NbQ1Zf Rk9VUkNDKCdNJywnUCcsJzEnLCdWJyldPShjaGFyKikibXBlZzJlbmMiOwotLSAgICBlbmNzW0NW X0ZPVVJDQygnTScsJ1AnLCcyJywnVicpXT0oY2hhciopIm1wZWcyZW5jIjsKLS0gICAgZW5jc1tD Vl9GT1VSQ0MoJ1QnLCdIJywnRScsJ08nKV09KGNoYXIqKSJ0aGVvcmFlbmMiOwotLSAgICBlbmNz W0NWX0ZPVVJDQygnVicsJ1AnLCc4JywnMCcpXT0oY2hhciopInZwOGVuYyI7Ci0tICAgIGVuY3Nb Q1ZfRk9VUkNDKCdIJywnMicsJzYnLCc0JyldPShjaGFyKikieDI2NGVuYyI7Ci0tICAgIGVuY3Nb Q1ZfRk9VUkNDKCdYJywnMicsJzYnLCc0JyldPShjaGFyKikieDI2NGVuYyI7Ci0tICAgIGVuY3Nb Q1ZfRk9VUkNDKCdYJywnVicsJ0knLCdEJyldPShjaGFyKikieHZpZGVuYyI7Ci0tICAgIGVuY3Nb Q1ZfRk9VUkNDKCdGJywnRicsJ1knLCdVJyldPShjaGFyKikieTRtZW5jIjsKLS0gICAgLy9lbmNz W0NWX0ZPVVJDQygnSCcsJ0YnLCdZJywnVScpXT0oY2hhciopInk0bWVuYyI7Ci0tICAgIHBpcGVs aW5lPTA7Ci0tICAgIGJ1ZmZlcj0wOwotLX0KLS12b2lkIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVy OjpjbG9zZSgpCi0tewotLSAgICBpZiAocGlwZWxpbmUpIHsKLS0gICAgICAgIGdzdF9hcHBfc3Jj X2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMoc291cmNlKSk7Ci0tICAgICAgICBnc3RfZWxlbWVu dF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0tICAgICAgICBnc3Rfb2Jq ZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOwotKyAgICBpZighcGlwZWxpbmUpIHsK LSsgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogbm8gcGlwZWxpbmUiKTsKLSsgICAgICAgIHJl dHVybiBmYWxzZTsKLSAgICAgfQotLX0KLS1ib29sIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjpv cGVuKCBjb25zdCBjaGFyICogZmlsZW5hbWUsIGludCBmb3VyY2MsCi0tICAgICAgICBkb3VibGUg ZnBzLCBDdlNpemUgZnJhbWVTaXplLCBib29sIGlzX2NvbG9yICkKLS17Ci0tICAgIENWX0ZVTkNO QU1FKCJDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6b3BlbiIpOwotLQotLSAgICBfX0JFR0lOX187 Ci0tICAgIC8vYWN0dWFsbHkgZG9lc24ndCBzdXBwb3J0IGZvdXJjYyBwYXJhbWV0ZXIgYW5kIGVu Y29kZSBhbiBhdmkgd2l0aCBqcGVnZW5jCi0tICAgIC8vd2UgbmVlZCB0byBmaW5kIGEgY29tbW9u IGFwaSBiZXR3ZWVuIGJhY2tlbmQgdG8gc3VwcG9ydCBmb3VyY2MgZm9yIGF2aQotLSAgICAvL2J1 dCBhbHNvIHRvIGNob29zZSBpbiBhIGNvbW1vbiB3YXkgY29kZWMgYW5kIGNvbnRhaW5lciBmb3Jt YXQgKG9nZyxkaXJhYyxtYXRyb3NrYSkKLS0gICAgLy8gY2hlY2sgYXJndW1lbnRzCi0gCi0tICAg IGFzc2VydCAoZmlsZW5hbWUpOwotLSAgICBhc3NlcnQgKGZwcyA+IDApOwotLSAgICBhc3NlcnQg KGZyYW1lU2l6ZS53aWR0aCA+IDAgICYmICBmcmFtZVNpemUuaGVpZ2h0ID4gMCk7Ci0tICAgIHN0 ZDo6bWFwPGludCxjaGFyKj46Oml0ZXJhdG9yIGVuY2l0OwotLSAgICBlbmNpdD1lbmNzLmZpbmQo Zm91cmNjKTsKLS0gICAgaWYgKGVuY2l0PT1lbmNzLmVuZCgpKQotLSAgICAgICAgQ1ZfRVJST1Io IENWX1N0c1Vuc3VwcG9ydGVkRm9ybWF0LCJHc3RyZWFtZXIgT3BlbmN2IGJhY2tlbmQgZG9lc24n dCBzdXBwb3J0IHRoaXMgY29kZWMgYWN1dGFsbHkuIik7Ci0tLy8gICAgaWYoIWlzSW5pdGVkKSB7 Ci0tLy8gICAgICAgIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKLS0vLyAgICAgICAgaXNJbml0ZWQg PSB0cnVlOwotLS8vICAgIH0KLS0gICAgZ3N0X2luaXRpYWxpemVyOjppbml0KCk7Ci0tICAgIGNs b3NlKCk7Ci0tICAgIHNvdXJjZT1nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNyYyIsTlVM TCk7Ci0tICAgIGZpbGU9Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmaWxlc2luayIsIE5VTEwp OwotLSAgICBlbmM9Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVuY2l0LT5zZWNvbmQsIE5VTEwp OwotLSAgICBtdXg9Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdmltdXgiLCBOVUxMKTsKLS0g ICAgY29sb3IgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZmbXBlZ2NvbG9yc3BhY2UiLCBO VUxMKTsKLS0gICAgaWYgKCFlbmMpCi0tICAgICAgICBDVl9FUlJPUiggQ1ZfU3RzVW5zdXBwb3J0 ZWRGb3JtYXQsICJZb3VyIHZlcnNpb24gb2YgR3N0cmVhbWVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlz IGNvZGVjIGFjdXRhbGx5IG9yIG5lZWRlZCBwbHVnaW4gbWlzc2luZy4iKTsKLS0gICAgZ19vYmpl Y3Rfc2V0KEdfT0JKRUNUKGZpbGUpLCAibG9jYXRpb24iLCBmaWxlbmFtZSwgTlVMTCk7Ci0tICAg IHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0tICAgIEdzdENhcHMqIGNhcHM7 Ci0tICAgIGlmIChpc19jb2xvcikgewotLSAgICAgICAgaW5wdXRfcGl4X2ZtdD0xOwotLSAgICAg ICAgY2Fwcz0gZ3N0X3ZpZGVvX2Zvcm1hdF9uZXdfY2FwcyhHU1RfVklERU9fRk9STUFUX0JHUiwK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVTaXplLndpZHRo LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVNpemUuaGVp Z2h0LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSAoZnBz ICogMTAwMCksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAs Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwotLSAgICB9Ci0tICAgIGVsc2UgIHsK LS0gICAgICAgIGlucHV0X3BpeF9mbXQ9MDsKLS0gICAgICAgIGNhcHM9IGdzdF9jYXBzX25ld19z aW1wbGUoInZpZGVvL3gtcmF3LWdyYXkiLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBmcmFtZVNpemUud2lkdGgsCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBmcmFtZVNpemUuaGVp Z2h0LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NU X1RZUEVfRlJBQ1RJT04sIGludChmcHMpLDEsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJicHAiLEdfVFlQRV9JTlQsOCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImRlcHRoIixHX1RZUEVfSU5ULDgsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwpOwotLSAgICB9Ci0tICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKEdTVF9BUFBf U1JDKHNvdXJjZSksIGNhcHMpOwotLSAgICBpZiAoZm91cmNjPT1DVl9GT1VSQ0NfREVGQVVMVCkg ewotLSAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHBpcGVsaW5lKSwgc291cmNlLCBj b2xvcixtdXgsIGZpbGUsIE5VTEwpOwotLSAgICAgICAgaWYoIWdzdF9lbGVtZW50X2xpbmtfbWFu eShzb3VyY2UsY29sb3IsZW5jLG11eCxmaWxlLE5VTEwpKSB7Ci0tICAgICAgICAgICAgQ1ZfRVJS T1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IGNhbm5vdCBsaW5rIGVsZW1lbnRzXG4iKTsKLS0g ICAgICAgIH0KLS0gICAgfQotLSAgICBlbHNlIHsKLS0gICAgICAgIGdzdF9iaW5fYWRkX21hbnko R1NUX0JJTihwaXBlbGluZSksIHNvdXJjZSwgY29sb3IsZW5jLG11eCwgZmlsZSwgTlVMTCk7Ci0t ICAgICAgICBpZighZ3N0X2VsZW1lbnRfbGlua19tYW55KHNvdXJjZSxjb2xvcixlbmMsbXV4LGZp bGUsTlVMTCkpIHsKLS0gICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1l cjogY2Fubm90IGxpbmsgZWxlbWVudHNcbiIpOwotLSAgICAgICAgfQotLSAgICB9Ci0tCi0tCi0t ICAgIGlmKGdzdF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSksIEdTVF9T VEFURV9QTEFZSU5HKSA9PQotLSAgICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0t ICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IGNhbm5vdCBwdXQg cGlwZWxpbmUgdG8gcGxheVxuIik7Ci0tICAgIH0KLS0gICAgX19FTkRfXzsKLS0gICAgcmV0dXJu IHRydWU7Ci0tfQotLWJvb2wgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OndyaXRlRnJhbWUoIGNv bnN0IElwbEltYWdlICogaW1hZ2UgKQotLXsKLS0KLS0gICAgQ1ZfRlVOQ05BTUUoIkN2VmlkZW9X cml0ZXJfR1N0cmVhbWVyOjp3cml0ZXJGcmFtZSIpOwotLQotLSAgICBfX0JFR0lOX187Ci0tICAg IGlmIChpbnB1dF9waXhfZm10ID09IDEpIHsKLS0gICAgICAgIGlmIChpbWFnZS0+bkNoYW5uZWxz ICE9IDMgfHwgaW1hZ2UtPmRlcHRoICE9IElQTF9ERVBUSF84VSkgewotLSAgICAgICAgICAgIENW X0VSUk9SKENWX1N0c1Vuc3VwcG9ydGVkRm9ybWF0LCAiY3ZXcml0ZUZyYW1lKCkgbmVlZHMgaW1h Z2VzIHdpdGggZGVwdGggPSBJUExfREVQVEhfOFUgYW5kIG5DaGFubmVscyA9IDMuIik7Ci0tICAg ICAgICB9Ci0tICAgIH0KLS0gICAgZWxzZSBpZiAoaW5wdXRfcGl4X2ZtdCA9PSAwKSB7Ci0tICAg ICAgICBpZiAoaW1hZ2UtPm5DaGFubmVscyAhPSAxIHx8IGltYWdlLT5kZXB0aCAhPSBJUExfREVQ VEhfOFUpIHsKLS0gICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNVbnN1cHBvcnRlZEZvcm1hdCwg ImN2V3JpdGVGcmFtZSgpIG5lZWRzIGltYWdlcyB3aXRoIGRlcHRoID0gSVBMX0RFUFRIXzhVIGFu ZCBuQ2hhbm5lbHMgPSAxLiIpOwotLSAgICAgICAgfQotLSAgICB9Ci0tICAgIGVsc2UgewotLSAg ICAgICAgYXNzZXJ0KGZhbHNlKTsKLS0gICAgfQotLSAgICBpbnQgc2l6ZTsKLS0gICAgc2l6ZSA9 IGltYWdlLT5pbWFnZVNpemU7Ci0tICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxv YyAoc2l6ZSk7Ci0tICAgIC8vZ3N0X2J1ZmZlcl9zZXRfZGF0YSAoYnVmZmVyLChndWludDgqKWlt YWdlLT5pbWFnZURhdGEsIHNpemUpOwotLSAgICBtZW1jcHkgKEdTVF9CVUZGRVJfREFUQShidWZm ZXIpLGltYWdlLT5pbWFnZURhdGEsIHNpemUpOwotLSAgICBnc3RfYXBwX3NyY19wdXNoX2J1ZmZl cihHU1RfQVBQX1NSQyhzb3VyY2UpLGJ1ZmZlcik7Ci0tICAgIC8vZ3N0X2J1ZmZlcl91bnJlZihi dWZmZXIpOwotLSAgICAvL2J1ZmZlciA9IDA7Ci0tICAgIF9fRU5EX187Ci0tICAgIHJldHVybiB0 cnVlOwotLX0KLS1DdlZpZGVvV3JpdGVyKiBjdkNyZWF0ZVZpZGVvV3JpdGVyX0dTdHJlYW1lcihj b25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZvdXJjYywgZG91YmxlIGZwcywKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3ZTaXplIGZyYW1lU2l6ZSwgaW50IGlz Q29sb3IgKQotLXsKLS0gICAgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXIqIHdydCA9IG5ldyBDdlZp ZGVvV3JpdGVyX0dTdHJlYW1lcjsKLS0gICAgaWYoIHdydC0+b3BlbihmaWxlbmFtZSwgZm91cmNj LCBmcHMsZnJhbWVTaXplLCBpc0NvbG9yKSkKLS0gICAgICAgIHJldHVybiB3cnQ7Ci0tCi0tICAg IGRlbGV0ZSB3cnQ7Ci0tICAgIHJldHVybiAwOwotLX0KLS0KLS12b2lkIEN2Q2FwdHVyZV9HU3Ry ZWFtZXI6OmNsb3NlKCkKLS17Ci0tICAgIGlmKHBpcGVsaW5lKSB7Ci0tICAgICAgICBnc3RfZWxl bWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0t ICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpFQ1QocGlwZWxpbmUpKTsKLS0gICAgfQot LSAgICBpZihidWZmZXIpCi0tICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7Ci0tICAg IGlmKGZyYW1lKSB7Ci0tICAgICAgICBmcmFtZS0+aW1hZ2VEYXRhID0gMDsKLS0gICAgICAgIGN2 UmVsZWFzZUltYWdlKCZmcmFtZSk7Ci0tICAgIH0KLS19Ci0tCi0tZG91YmxlIEN2Q2FwdHVyZV9H U3RyZWFtZXI6OmdldFByb3BlcnR5KCBpbnQgcHJvcElkICkKLS17Ci0tICAgIEdzdEZvcm1hdCBm b3JtYXQ7Ci0tICAgIC8vR3N0UXVlcnkgcTsKLS0gICAgZ2ludDY0IHZhbHVlOwotLQotLSAgICBp ZighcGlwZWxpbmUpIHsKLS0gICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogbm8gcGlwZWxpbmUi KTsKLS0gICAgICAgIHJldHVybiBmYWxzZTsKLS0gICAgfQotLQotLSAgICBzd2l0Y2gocHJvcElk KSB7Ci0tICAgIGNhc2UgQ1ZfQ0FQX1BST1BfUE9TX01TRUM6Ci0tICAgICAgICBmb3JtYXQgPSBH U1RfRk9STUFUX1RJTUU7Ci0tICAgICAgICBpZighZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24o c2luaywgJmZvcm1hdCwgJnZhbHVlKSkgewotLSAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1l cjogdW5hYmxlIHRvIHF1ZXJ5IHBvc2l0aW9uIG9mIHN0cmVhbSIpOwotLSAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKLSsgICAgc3dpdGNoKHByb3BJZCkgewotKyAgICBjYXNlIENWX0NBUF9QUk9Q X1BPU19NU0VDOgotKyAgICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotKyAgICAgICAg c3RhdHVzID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24oc2luaywgRk9STUFULCAmdmFsdWUp OwotKyAgICAgICAgaWYoIXN0YXR1cykgewotKyAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1l cjogdW5hYmxlIHRvIHF1ZXJ5IHBvc2l0aW9uIG9mIHN0cmVhbSIpOwotKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKLSAgICAgICAgIH0KLSAgICAgICAgIHJldHVybiB2YWx1ZSAqIDFlLTY7IC8v IG5hbm8gc2Vjb25kcyB0byBtaWxsaSBzZWNvbmRzCi0gICAgIGNhc2UgQ1ZfQ0FQX1BST1BfUE9T X0ZSQU1FUzoKLSAgICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfREVGQVVMVDsKLS0gICAgICAg IGlmKCFnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbihzaW5rLCAmZm9ybWF0LCAmdmFsdWUpKSB7 Ci0rICAgICAgICBzdGF0dXMgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbihzaW5rLCBGT1JN QVQsICZ2YWx1ZSk7Ci0rICAgICAgICBpZighc3RhdHVzKSB7Ci0gICAgICAgICAgICAgQ1ZfV0FS TigiR1N0cmVhbWVyOiB1bmFibGUgdG8gcXVlcnkgcG9zaXRpb24gb2Ygc3RyZWFtIik7Ci0gICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgfQotICAgICAgICAgcmV0dXJuIHZhbHVl OwotICAgICBjYXNlIENWX0NBUF9QUk9QX1BPU19BVklfUkFUSU86Ci0gICAgICAgICBmb3JtYXQg PSBHU1RfRk9STUFUX1BFUkNFTlQ7Ci0tICAgICAgICBpZighZ3N0X2VsZW1lbnRfcXVlcnlfcG9z aXRpb24ocGlwZWxpbmUsICZmb3JtYXQsICZ2YWx1ZSkpIHsKLSsgICAgICAgIHN0YXR1cyA9IGdz dF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uKHNpbmssIEZPUk1BVCwgJnZhbHVlKTsKLSsgICAgICAg IGlmKCFzdGF0dXMpIHsKLSAgICAgICAgICAgICBDVl9XQVJOKCJHU3RyZWFtZXI6IHVuYWJsZSB0 byBxdWVyeSBwb3NpdGlvbiBvZiBzdHJlYW0iKTsKLSAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 Ci0gICAgICAgICB9Ci0gICAgICAgICByZXR1cm4gKChkb3VibGUpIHZhbHVlKSAvIEdTVF9GT1JN QVRfUEVSQ0VOVF9NQVg7Ci0tICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlJBTUVfV0lEVEg6Ci0tICAg IGNhc2UgQ1ZfQ0FQX1BST1BfRlJBTUVfSEVJR0hUOgotLSAgICBjYXNlIENWX0NBUF9QUk9QX0ZQ UzoKLSsgICAgY2FzZSBDVl9DQVBfUFJPUF9GUkFNRV9XSURUSDogewotKyAgICAgICAgaWYgKCFi dWZmZXJfY2Fwcyl7Ci0rICAgICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1bmFibGUgdG8g cXVlcnkgd2lkdGggb2YgZnJhbWU7IG5vIGZyYW1lIGdyYWJiZWQgeWV0Iik7Ci0rICAgICAgICAg ICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy ZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYnVmZmVyX2NhcHMsIDApOwotKyAgICAgICAgZ2lu dCB3aWR0aCA9IDA7Ci0rICAgICAgICBpZighZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVy ZSwgIndpZHRoIiwgJndpZHRoKSl7Ci0rICAgICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1 bmFibGUgdG8gcXVlcnkgd2lkdGggb2YgZnJhbWUiKTsKLSsgICAgICAgICAgICByZXR1cm4gMDsK LSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiB3aWR0aDsKLSsgICAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlJBTUVfSEVJR0hUOiB7Ci0rICAgICAgICBpZiAo IWJ1ZmZlcl9jYXBzKXsKLSsgICAgICAgICAgICBDVl9XQVJOKCJHU3RyZWFtZXI6IHVuYWJsZSB0 byBxdWVyeSBoZWlnaHQgb2YgZnJhbWU7IG5vIGZyYW1lIGdyYWJiZWQgeWV0Iik7Ci0rICAgICAg ICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVj dHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYnVmZmVyX2NhcHMsIDApOwotKyAgICAgICAg Z2ludCBoZWlnaHQgPSAwOwotKyAgICAgICAgaWYoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1 Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KSl7Ci0rICAgICAgICAgICAgQ1ZfV0FSTigiR1N0cmVh bWVyOiB1bmFibGUgdG8gcXVlcnkgaGVpZ2h0IG9mIGZyYW1lIik7Ci0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gaGVpZ2h0OwotKyAgICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSBDVl9DQVBfUFJPUF9GUFM6IHsKLSsgICAgICAgIGlmICgh YnVmZmVyX2NhcHMpewotKyAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRv IHF1ZXJ5IGZyYW1lcmF0ZSBvZiBzdHJlYW07IG5vIGZyYW1lIGdyYWJiZWQgeWV0Iik7Ci0rICAg ICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0 cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYnVmZmVyX2NhcHMsIDApOwotKyAgICAg ICAgZ2ludCBudW0gPSAwLCBkZW5vbT0xOwotKyAgICAgICAgaWYoIWdzdF9zdHJ1Y3R1cmVfZ2V0 X2ZyYWN0aW9uKHN0cnVjdHVyZSwgImZyYW1lcmF0ZSIsICZudW0sICZkZW5vbSkpewotKyAgICAg ICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRvIHF1ZXJ5IGZyYW1lcmF0ZSBvZiBz dHJlYW0iKTsKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgICAgIHJl dHVybiAoZG91YmxlKW51bS8oZG91YmxlKWRlbm9tOwotKyAgICAgICAgYnJlYWs7Ci0rICAgIH0K LSAgICAgY2FzZSBDVl9DQVBfUFJPUF9GT1VSQ0M6Ci0gICAgICAgICBicmVhazsKLSAgICAgY2Fz ZSBDVl9DQVBfUFJPUF9GUkFNRV9DT1VOVDoKLSAgICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRf REVGQVVMVDsKLS0gICAgICAgIGlmKCFnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihwaXBlbGlu ZSwgJmZvcm1hdCwgJnZhbHVlKSkgewotKyAgICAgICAgc3RhdHVzID0gZ3N0X2VsZW1lbnRfcXVl cnlfcG9zaXRpb24oc2luaywgRk9STUFULCAmdmFsdWUpOwotKyAgICAgICAgaWYoIXN0YXR1cykg ewotICAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRvIHF1ZXJ5IHBvc2l0 aW9uIG9mIHN0cmVhbSIpOwotICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgIH0K LUBAIC02NzIsMjAgKzgzMCwzMSBAQCBkb3VibGUgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6Z2V0UHJv cGVydHkoCi0gICAgICAgICBicmVhazsKLSAgICAgY2FzZSBDVl9DQVBfR1NUUkVBTUVSX1FVRVVF X0xFTkdUSDoKLSAgICAgICAgIGlmKCFzaW5rKSB7Ci0tICAgICAgICAgICAgICAgIENWX1dBUk4o IkdTdHJlYW1lcjogdGhlcmUgaXMgbm8gc2luayB5ZXQiKTsKLS0gICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOwotKyAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdGhlcmUgaXMgbm8g c2luayB5ZXQiKTsKLSsgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICB9Ci0gICAg ICAgICByZXR1cm4gZ3N0X2FwcF9zaW5rX2dldF9tYXhfYnVmZmVycyhHU1RfQVBQX1NJTksoc2lu aykpOwotICAgICBkZWZhdWx0OgotICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1bmhhbmRs ZWQgcHJvcGVydHkiKTsKLSAgICAgICAgIGJyZWFrOwotICAgICB9Ci0rCi0rI3VuZGVmIEZPUk1B VAotKwotICAgICByZXR1cm4gZmFsc2U7Ci0gfQotIAotKy8qIQotKyAqIFxicmllZiBDdkNhcHR1 cmVfR1N0cmVhbWVyOjpzZXRQcm9wZXJ0eQotKyAqIFxwYXJhbSBwcm9wSWQKLSsgKiBccGFyYW0g dmFsdWUKLSsgKiBccmV0dXJuIHN1Y2Nlc3MKLSsgKiBTZXRzIHRoZSBkZXNpcmVkIHByb3BlcnR5 IGlkIHdpdGggdmFsLiBJZiB0aGUgcGlwZWxpbmUgaXMgcnVubmluZywKLSsgKiBpdCBpcyBicmll Zmx5IHN0b3BwZWQgYW5kIHN0YXJ0ZWQgYWdhaW4gYWZ0ZXIgdGhlIHByb3BlcnR5IHdhcyBzZXQK LSsgKi8KLSBib29sIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OnNldFByb3BlcnR5KCBpbnQgcHJvcElk LCBkb3VibGUgdmFsdWUgKQotIHsKLS0gICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSsgICAgR3N0 Rm9ybWF0IGZvcm1hdDsKLSAgICAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotIAotICAgICBpZighcGlw ZWxpbmUpIHsKLUBAIC02OTMsMTIgKzg2MiwxNyBAQCBib29sIEN2Q2FwdHVyZV9HU3RyZWFtZXI6 OnNldFByb3BlcnR5KCBpCi0gICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgIH0KLSAKLSsgICAg Ym9vbCB3YXNQbGF5aW5nID0gdGhpcy0+aXNQaXBlbGluZVBsYXlpbmcoKTsKLSsgICAgaWYgKHdh c1BsYXlpbmcpCi0rICAgICAgICB0aGlzLT5zdG9wUGlwZWxpbmUoKTsKLSsKLSsKLSAgICAgc3dp dGNoKHByb3BJZCkgewotICAgICBjYXNlIENWX0NBUF9QUk9QX1BPU19NU0VDOgotICAgICAgICAg Zm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgICAgICAgZmxhZ3MgPSAoR3N0U2Vla0ZsYWdz KSAoR1NUX1NFRUtfRkxBR19GTFVTSHxHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKTsKLSAgICAgICAg IGlmKCFnc3RfZWxlbWVudF9zZWVrX3NpbXBsZShHU1RfRUxFTUVOVChwaXBlbGluZSksIGZvcm1h dCwKLS0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgKGdpbnQ2NCkgKHZhbHVlICogR1NU X01TRUNPTkQpKSkgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdz LCAoZ2ludDY0KSAodmFsdWUgKiBHU1RfTVNFQ09ORCkpKSB7Ci0gICAgICAgICAgICAgQ1ZfV0FS TigiR1N0cmVhbWVyOiB1bmFibGUgdG8gc2VlayIpOwotICAgICAgICAgfQotICAgICAgICAgYnJl YWs7Ci1AQCAtNzA2LDcgKzg4MCw3IEBAIGJvb2wgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6c2V0UHJv cGVydHkoIGkKLSAgICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfREVGQVVMVDsKLSAgICAgICAg IGZsYWdzID0gKEdzdFNlZWtGbGFncykgKEdTVF9TRUVLX0ZMQUdfRkxVU0h8R1NUX1NFRUtfRkxB R19BQ0NVUkFURSk7Ci0gICAgICAgICBpZighZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUoR1NUX0VM RU1FTlQocGlwZWxpbmUpLCBmb3JtYXQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3Ms IChnaW50NjQpIHZhbHVlKSkgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsYWdzLCAoZ2ludDY0KSB2YWx1ZSkpIHsKLSAgICAgICAgICAgICBDVl9XQVJOKCJHU3RyZWFt ZXI6IHVuYWJsZSB0byBzZWVrIik7Ci0gICAgICAgICB9Ci0gICAgICAgICBicmVhazsKLUBAIC03 MTQsNyArODg4LDcgQEAgYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpzZXRQcm9wZXJ0eSggaQot ICAgICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9QRVJDRU5UOwotICAgICAgICAgZmxhZ3MgPSAo R3N0U2Vla0ZsYWdzKSAoR1NUX1NFRUtfRkxBR19GTFVTSHxHU1RfU0VFS19GTEFHX0FDQ1VSQVRF KTsKLSAgICAgICAgIGlmKCFnc3RfZWxlbWVudF9zZWVrX3NpbXBsZShHU1RfRUxFTUVOVChwaXBl bGluZSksIGZvcm1hdCwKLS0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgKGdpbnQ2NCkg KHZhbHVlICogR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCkpKSB7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmxhZ3MsIChnaW50NjQpICh2YWx1ZSAqIEdTVF9GT1JNQVRfUEVS Q0VOVF9NQVgpKSkgewotICAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRv IHNlZWsiKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGJyZWFrOwotQEAgLTczMiwxNSArOTA2LDkg QEAgYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpzZXRQcm9wZXJ0eSggaQotICAgICAgICAgYnJl YWs7Ci0gICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlBTOgotICAgICAgICAgaWYodmFsdWUgPiAwKSB7 Ci0tICAgICAgICAgICAgaW50IG51bSwgZGVub207Ci0tICAgICAgICAgICAgbnVtID0gKGludCkg dmFsdWU7Ci0tICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVtKSB7IC8vIEZJWE1FIHRoaXMgc3Vw cG9ydHMgb25seSBmcmFjdGlvbnMgeC8xIGFuZCB4LzIKLS0gICAgICAgICAgICAgICAgbnVtID0g KGludCkgKHZhbHVlICogMik7Ci0tICAgICAgICAgICAgICAgIGRlbm9tID0gMjsKLS0gICAgICAg ICAgICB9IGVsc2UKLS0gICAgICAgICAgICAgICAgZGVub20gPSAxOwotLQotLSAgICAgICAgICAg IHNldEZpbHRlcigiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIG51bSwgZGVub20pOwot KyAgICAgICAgICAgIGRvdWJsZSBudW09MCwgZGVub20gPSAxOwotKyAgICAgICAgICAgIHRvRnJh Y3Rpb24odmFsdWUsIG51bSwgIGRlbm9tKTsKLSsgICAgICAgICAgICBzZXRGaWx0ZXIoImZyYW1l cmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCB2YWx1ZSwgZGVub20pOwotICAgICAgICAgfSBlbHNl Ci0gICAgICAgICAgICAgcmVtb3ZlRmlsdGVyKCJmcmFtZXJhdGUiKTsKLSAgICAgICAgIGJyZWFr OwotQEAgLTc2Myw4ICs5MzEsMTkgQEAgYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpzZXRQcm9w ZXJ0eSggaQotICAgICBkZWZhdWx0OgotICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1bmhh bmRsZWQgcHJvcGVydHkiKTsKLSAgICAgfQotKwotKyAgICBpZiAod2FzUGxheWluZykKLSsgICAg ICAgIHRoaXMtPnN0YXJ0UGlwZWxpbmUoKTsKLSsKLSAgICAgcmV0dXJuIGZhbHNlOwotIH0KLSsK LSsvKiEKLSsgKiBcYnJpZWYgY3ZDcmVhdGVDYXB0dXJlX0dTdHJlYW1lcgotKyAqIFxwYXJhbSB0 eXBlCi0rICogXHBhcmFtIGZpbGVuYW1lCi0rICogXHJldHVybgotKyAqLwotIEN2Q2FwdHVyZSog Y3ZDcmVhdGVDYXB0dXJlX0dTdHJlYW1lcihpbnQgdHlwZSwgY29uc3QgY2hhciogZmlsZW5hbWUg KQotIHsKLSAgICAgQ3ZDYXB0dXJlX0dTdHJlYW1lciogY2FwdHVyZSA9IG5ldyBDdkNhcHR1cmVf R1N0cmVhbWVyOwotQEAgLTc3NSwzICs5NTQsNDk4IEBAIEN2Q2FwdHVyZSogY3ZDcmVhdGVDYXB0 dXJlX0dTdHJlYW1lcihpbnQKLSAgICAgZGVsZXRlIGNhcHR1cmU7Ci0gICAgIHJldHVybiAwOwot IH0KLSsKLSsKLSsvKiEKLSsgKiBcYnJpZWYgVGhlIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyIGNs YXNzCi0rICogVXNlIEdzdHJlYW1lciB0byB3cml0ZSB2aWRlbwotKyAqLwotK2NsYXNzIEN2Vmlk ZW9Xcml0ZXJfR1N0cmVhbWVyIDogcHVibGljIEN2VmlkZW9Xcml0ZXIKLSt7Ci0rcHVibGljOgot KyAgICBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcigpIHsgaW5pdCgpOyB9Ci0rICAgIHZpcnR1YWwg fkN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyKCkgeyBjbG9zZSgpOyB9Ci0rCi0rICAgIHZpcnR1YWwg Ym9vbCBvcGVuKCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZvdXJjYywKLSsgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSBmcHMsIEN2U2l6ZSBmcmFtZVNpemUsIGJvb2wgaXNDb2xvciAp OwotKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKLSsgICAgdmlydHVhbCBib29sIHdyaXRlRnJh bWUoIGNvbnN0IElwbEltYWdlKiBpbWFnZSApOwotK3Byb3RlY3RlZDoKLSsgICAgdm9pZCBpbml0 KCk7Ci0rICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lVG9NaW1ldHlwZShjb25zdCBjaGFyKiBmaWxl bmFtZSk7Ci0rICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lOwotKyAgICBHc3RFbGVtZW50KiBzb3Vy Y2U7Ci0rICAgIEdzdEVsZW1lbnQqIGVuY29kZWJpbjsKLSsgICAgR3N0RWxlbWVudCogZmlsZTsK LSsKLSsgICAgR3N0QnVmZmVyKiBidWZmZXI7Ci0rICAgIGludCBpbnB1dF9waXhfZm10OwotKyAg ICBpbnQgbnVtX2ZyYW1lczsKLSsgICAgZG91YmxlIGZyYW1lcmF0ZTsKLSt9OwotKwotKy8qIQot KyAqIFxicmllZiBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6aW5pdAotKyAqIGluaXRpYWxpc2Ug YWxsIHZhcmlhYmxlcwotKyAqLwotK3ZvaWQgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OmluaXQo KQotK3sKLSsgICAgcGlwZWxpbmUgPSBOVUxMOwotKyAgICBzb3VyY2UgPSBOVUxMOwotKyAgICBl bmNvZGViaW4gPSBOVUxMOwotKyAgICBmaWxlID0gTlVMTDsKLSsgICAgYnVmZmVyID0gTlVMTDsK LSsKLSsgICAgbnVtX2ZyYW1lcyA9IDA7Ci0rICAgIGZyYW1lcmF0ZSA9IDA7Ci0rfQotKwotKy8q IQotKyAqIFxicmllZiBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6Y2xvc2UKLSsgKiBlbmRzIHRo ZSBwaXBlbGluZSBieSBzZW5kaW5nIEVPUyBhbmQgZGVzdHJveXMgdGhlIHBpcGVsaW5lIGFuZCBh bGwKLSsgKiBlbGVtZW50cyBhZnRlcndhcmRzCi0rICovCi0rdm9pZCBDdlZpZGVvV3JpdGVyX0dT dHJlYW1lcjo6Y2xvc2UoKQotK3sKLSsgICAgaWYgKHBpcGVsaW5lKSB7Ci0rICAgICAgICBHc3RG bG93UmV0dXJuIHJldDsKLSsgICAgICAgIHJldCA9IGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0o R1NUX0FQUF9TUkMoc291cmNlKSk7Ci0rCi0rICAgICAgICAvL3dhaXQgZm9yIEVPUyB0byB0cmlj a2xlIGRvd24gdGhlIHBpcGVsaW5lLiBUaGlzIHdpbGwgbGV0IGFsbCBlbGVtZW50cyBmaW5pc2gg cHJvcGVybHkKLSsgICAgICAgIEdzdEJ1cyogYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyhwaXBl bGluZSk7Ci0rICAgICAgICBHc3RNZXNzYWdlICptc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0 ZXJlZChidXMsIEdTVF9DTE9DS19USU1FX05PTkUsIChHc3RNZXNzYWdlVHlwZSkoR1NUX01FU1NB R0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FT1MpKTsKLSsgICAgICAgIGlmKG1zZyAhPSBOVUxMKXsK LSsgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtc2cpOwotKyAgICAgICAgICAgIGdfb2Jq ZWN0X3VucmVmKEdfT0JKRUNUKGJ1cykpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgZ3N0X2Vs ZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotKyAgICAgICAgaGFu ZGxlTWVzc2FnZShwaXBlbGluZSk7Ci0rCi0rICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1Rf T0JKRUNUIChwaXBlbGluZSkpOwotKyAgICB9Ci0rfQotKwotKwotKy8qIQotKyAqIFxicmllZiBD dlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6ZmlsZW5hbWVUb01pbWV0eXBlCi0rICogXHBhcmFtIGZp bGVuYW1lCi0rICogXHJldHVybiBtaW1ldHlwZQotKyAqIFJlc3R1cm5zIGEgY29udGFpbmVyIG1p bWUgdHlwZSBmb3IgYSBnaXZlbiBmaWxlbmFtZSBieSBsb29raW5nIGF0IGl0J3MgZXh0ZW5zaW9u Ci0rICovCi0rY29uc3QgY2hhciogQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OmZpbGVuYW1lVG9N aW1ldHlwZShjb25zdCBjaGFyICpmaWxlbmFtZSkKLSt7Ci0rICAgIC8vZ2V0IGV4dGVuc2lvbgot KyAgICBjb25zdCBjaGFyICpleHQgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOwotKyAgICBpZigh ZXh0IHx8IGV4dCA9PSBmaWxlbmFtZSkgcmV0dXJuIE5VTEw7Ci0rICAgIGV4dCArPSAxOyAvL2V4 Y2x1ZGUgdGhlIGRvdAotKwotKyAgICAvLyByZXR1cm4gYSBjb250YWluZXIgbWltZSBiYXNlZCBv biB0aGUgZ2l2ZW4gZXh0ZW5zaW9uLgotKyAgICAvLyBnc3RyZWFtZXIncyBmdW5jdGlvbiByZXR1 cm5zIHRvbyBtdWNoIHBvc3NpYmlsaXRpZXMsIHdoaWNoIGlzIG5vdCB1c2VmdWwgdG8gdXMKLSsK LSsgICAgLy9yZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG1pbWUKLSsgICAgaWYgKHN0cm5jYXNlY21w KGV4dCwiYXZpIiwgMykgPT0gMCkKLSsgICAgICAgIHJldHVybiAoY29uc3QgY2hhciopInZpZGVv L3gtbXN2aWRlbyI7Ci0rCi0rICAgIGlmIChzdHJuY2FzZWNtcChleHQsIm1rdiIsIDMpID09IDAg fHwgc3RybmNhc2VjbXAoZXh0LCJtazNkIiw0KSA9PSAwICB8fCBzdHJuY2FzZWNtcChleHQsIndl Ym0iLDQpID09IDAgKQotKyAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKikidmlkZW8veC1tYXRy b3NrYSI7Ci0rCi0rICAgIGlmIChzdHJuY2FzZWNtcChleHQsIndtdiIsIDMpID09IDApCi0rICAg ICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSJ2aWRlby94LW1zLWFzZiI7Ci0rCi0rICAgIGlmIChz dHJuY2FzZWNtcChleHQsIm1vdiIsIDMpID09IDApCi0rICAgICAgICByZXR1cm4gKGNvbnN0IGNo YXIqKSJ2aWRlby94LXF1aWNrdGltZSI7Ci0rCi0rICAgIGlmIChzdHJuY2FzZWNtcChleHQsIm9n ZyIsIDMpID09IDAgfHwgc3RybmNhc2VjbXAoZXh0LCJvZ3YiLCAzKSA9PSAwKQotKyAgICAgICAg cmV0dXJuIChjb25zdCBjaGFyKikiYXBwbGljYXRpb24vb2dnIjsKLSsKLSsgICAgaWYgKHN0cm5j YXNlY21wKGV4dCwicm0iLCAzKSA9PSAwKQotKyAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKiki dm5kLnJuLXJlYWxtZWRpYSI7Ci0rCi0rICAgIGlmIChzdHJuY2FzZWNtcChleHQsInN3ZiIsIDMp ID09IDApCi0rICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSJhcHBsaWNhdGlvbi94LXNob2Nr d2F2ZS1mbGFzaCI7Ci0rCi0rICAgIGlmIChzdHJuY2FzZWNtcChleHQsIm1wNCIsIDMpID09IDAp Ci0rICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSJ2aWRlby94LXF1aWNrdGltZSwgdmFyaWFu dD0oc3RyaW5nKWlzbyI7Ci0rCi0rICAgIC8vZGVmYXVsdCB0byBhdmkKLSsgICAgcmV0dXJuIChj b25zdCBjaGFyKikidmlkZW8veC1tc3ZpZGVvIjsKLSt9Ci0rCi0rCi0rLyohCi0rICogXGJyaWVm IEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjpvcGVuCi0rICogXHBhcmFtIGZpbGVuYW1lIGZpbGVu YW1lIHRvIG91dHB1dCB0bwotKyAqIFxwYXJhbSBmb3VyY2MgZGVzaXJlZCBjb2RlYyBmb3VyY2MK LSsgKiBccGFyYW0gZnBzIGRlc2lyZWQgZnJhbWVyYXRlCi0rICogXHBhcmFtIGZyYW1lU2l6ZSB0 aGUgc2l6ZSBvZiB0aGUgZXhwZWN0ZWQgZnJhbWVzCi0rICogXHBhcmFtIGlzX2NvbG9yIGNvbG9y IG9yIGdyYXlzY2FsZQotKyAqIFxyZXR1cm4gc3VjY2VzcwotKyAqCi0rICogV2Ugc3VwcG9ydCAy IG1vZGVzIG9mIG9wZXJhdGlvbi4gRWl0aGVyIHRoZSB1c2VyIGVudGVycyBhIGZpbGVuYW1lIGFu ZCBhIGZvdXJjYwotKyAqIGNvZGUsIG9yIGVudGVycyBhIG1hbnVhbCBwaXBlbGluZSBkZXNjcmlw dGlvbiBsaWtlIGluIEN2VmlkZW9DYXB0dXJlX0dzdHJlYW1lci4KLSsgKiBJbiB0aGUgbGF0dGVy IGNhc2UsIHdlIGp1c3QgcHVzaCBmcmFtZXMgb24gdGhlIGFwcHNpbmsgd2l0aCBhcHByb3ByaWF0 ZSBjYXBzLgotKyAqIEluIHRoZSBmb3JtZXIgY2FzZSwgd2UgdHJ5IHRvIGRlZHVjZSB0aGUgY29y cmVjdCBjb250YWluZXIgZnJvbSB0aGUgZmlsZW5hbWUsCi0rICogYW5kIHRoZSBjb3JyZWN0IGVu Y29kZXIgZnJvbSB0aGUgZm91cmNjIHByb2ZpbGUuCi0rICoKLSsgKiBJZiB0aGUgZmlsZSBleHRl bnNpb24gZGlkIHdhcyBub3QgcmVjb2duaXplLCBhbiBhdmkgY29udGFpbmVyIGlzIHVzZWQKLSsg KgotKyAqLwotK2Jvb2wgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6Om9wZW4oIGNvbnN0IGNoYXIg KiBmaWxlbmFtZSwgaW50IGZvdXJjYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgZnBzLCBDdlNpemUgZnJhbWVTaXplLCBib29sIGlzX2NvbG9yICkKLSt7Ci0r ICAgIENWX0ZVTkNOQU1FKCJDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6b3BlbiIpOwotKwotKyAg ICAvLyBjaGVjayBhcmd1bWVudHMKLSsgICAgYXNzZXJ0IChmaWxlbmFtZSk7Ci0rICAgIGFzc2Vy dCAoZnBzID4gMCk7Ci0rICAgIGFzc2VydCAoZnJhbWVTaXplLndpZHRoID4gMCAgJiYgIGZyYW1l U2l6ZS5oZWlnaHQgPiAwKTsKLSsKLSsgICAgLy8gaW5pdCBnc3RyZWFtZXIKLSsgICAgZ3N0X2lu aXRpYWxpemVyOjppbml0KCk7Ci0rCi0rICAgIC8vIGluaXQgdmFycwotKyAgICBib29sIG1hbnVh bHBpcGVsaW5lID0gdHJ1ZTsKLSsgICAgaW50ICBidWZzaXplID0gMDsKLSsgICAgR0Vycm9yICpl cnIgPSBOVUxMOwotKyAgICBjb25zdCBjaGFyKiBtaW1lID0gTlVMTDsKLSsgICAgR3N0U3RhdGVD aGFuZ2VSZXR1cm4gc3RhdGVyZXQ7Ci0rCi0rICAgIEdzdENhcHMqIGNhcHMgPSBOVUxMOwotKyAg ICBHc3RDYXBzKiB2aWRlb2NhcHMgPSBOVUxMOwotKyAgICBHc3RDYXBzKiBjb250YWluZXJjYXBz ID0gTlVMTDsKLSsgICAgR3N0RW5jb2RpbmdDb250YWluZXJQcm9maWxlKiBjb250YWluZXJwcm9m aWxlID0gTlVMTDsKLSsgICAgR3N0RW5jb2RpbmdWaWRlb1Byb2ZpbGUqIHZpZGVvcHJvZmlsZSA9 IE5VTEw7Ci0rCi0rI2lmIEdTVF9WRVJTSU9OX01BSk9SID09IDAKLSsgICAgR3N0SXRlcmF0b3Ig Kml0ID0gTlVMTDsKLSsjZW5kaWYKLSsKLSsgICAgLy8gd2UgZmlyc3QgdHJ5IHRvIGNvbnN0cnVj dCBhIHBpcGVsaW5lIGZyb20gdGhlIGdpdmVuIHN0cmluZy4KLSsgICAgLy8gaWYgdGhhdCBmYWls cywgd2UgYXNzdW1lIGl0IGlzIGFuIG9yZGluYXJ5IGZpbGVuYW1lCi0rCi0rICAgIF9fQkVHSU5f XzsKLSsKLSsgICAgZW5jb2RlYmluID0gZ3N0X3BhcnNlX2xhdW5jaChmaWxlbmFtZSwgJmVycik7 Ci0rICAgIGlmKCFlbmNvZGViaW4pIHsKLSsgICAgICAgIG1hbnVhbHBpcGVsaW5lID0gZmFsc2U7 Ci0rICAgIH0KLSsKLSsgICAgaWYobWFudWFscGlwZWxpbmUpCi0rICAgIHsKLSsjaWYgR1NUX1ZF UlNJT05fTUFKT1IgPT0gMAotKyAgICAgICAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfc291cmNlcyhH U1RfQklOKGVuY29kZWJpbikpOwotKyAgICAgICAgaWYoZ3N0X2l0ZXJhdG9yX25leHQoaXQsIChn cG9pbnRlciAqKSZzb3VyY2UpICE9IEdTVF9JVEVSQVRPUl9PSykgewotKyAgICAgICAgICAgIENW X0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBzaW5rIGluIG1h bnVhbCBwaXBlbGluZVxuIik7Ci0rICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICAgICAg fQotKyNlbHNlCi0rICAgICAgICBzb3VyY2UgPSBnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4o ZW5jb2RlYmluKSwgIm9wZW5jdnNyYyIpOwotKyAgICAgICAgaWYgKCFzb3VyY2UpewotKyAgICAg ICAgICAgIHNvdXJjZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTihlbmNvZGViaW4pLCAi YXBwc3JjMCIpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCFzb3VyY2UpewotKyAgICAg ICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBz cmMgaW4gbWFudWFsIHBpcGVsaW5lXG4iKTsKLSsgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0r ICAgICAgICB9Ci0rI2VuZGlmCi0rICAgICAgICBwaXBlbGluZSA9IGVuY29kZWJpbjsKLSsgICAg fQotKyAgICBlbHNlCi0rICAgIHsKLSsgICAgICAgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25l dyAoTlVMTCk7Ci0rCi0rICAgICAgICAvLyB3ZSBqdXN0IGdvdCBhIGZpbGVuYW1lIGFuZCBhIGZv dXJjYyBjb2RlLgotKyAgICAgICAgLy8gZmlyc3QsIHRyeSB0byBndWVzcyB0aGUgY29udGFpbmVy IGZyb20gdGhlIGZpbGVuYW1lCi0rICAgICAgICAvL2VuY29kZWJpbiA9IGdzdF9lbGVtZW50X2Zh Y3RvcnlfbWFrZSgiZW5jb2RlYmluIiwgTlVMTCk7Ci0rCi0rICAgICAgICAvL3Byb3h5IG9sZCBu b24gZXhpc3RpbmcgZm91cmNjIGlkcy4gVGhlc2Ugd2VyZSB1c2VkIGluIHByZXZpb3VzIG9wZW5j diB2ZXJzaW9ucywKLSsgICAgICAgIC8vYnV0IGRvIG5vdCBldmVuIGV4aXN0IGluIGdzdHJlYW1l ciBhbnkgbW9yZQotKyAgICAgICAgaWYgKGZvdXJjYyA9PSBDVl9GT1VSQ0MoJ00nLCdQJywnMScs J1YnKSkgZm91cmNjID0gQ1ZfRk9VUkNDKCdNJywgJ1AnLCAnRycgLCcxJyk7Ci0rICAgICAgICBp ZiAoZm91cmNjID09IENWX0ZPVVJDQygnTScsJ1AnLCcyJywnVicpKSBmb3VyY2MgPSBDVl9GT1VS Q0MoJ00nLCAnUCcsICdHJyAsJzInKTsKLSsgICAgICAgIGlmIChmb3VyY2MgPT0gQ1ZfRk9VUkND KCdEJywnUicsJ0EnLCdDJykpIGZvdXJjYyA9IENWX0ZPVVJDQygnZCcsICdyJywgJ2EnICwnYycp OwotKwotKyAgICAgICAgLy9jcmVhdGUgZW5jb2RlciBjYXBzIGZyb20gZm91cmNjCi0rICAgICAg ICB2aWRlb2NhcHMgPSBnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwcyhmb3VyY2MsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotKyAgICAgICAgaWYgKCF2aWRlb2NhcHMpewotKyAgICAg ICAgICAgIENWX0VSUk9SKCBDVl9TdHNVbnN1cHBvcnRlZEZvcm1hdCwgIkdzdHJlYW1lciBPcGVu Y3YgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29kZWMuIik7Ci0rICAgICAgICB9Ci0r Ci0rICAgICAgICAvL2NyZWF0ZSBjb250YWluZXIgY2FwcyBmcm9tIGZpbGUgZXh0ZW5zaW9uCi0r ICAgICAgICBtaW1lID0gZmlsZW5hbWVUb01pbWV0eXBlKGZpbGVuYW1lKTsKLSsgICAgICAgIGlm ICghbWltZSkgewotKyAgICAgICAgICAgIENWX0VSUk9SKCBDVl9TdHNVbnN1cHBvcnRlZEZvcm1h dCwgIkdzdHJlYW1lciBPcGVuY3YgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZSB0 eXBlLiIpOwotKyAgICAgICAgfQotKyAgICAgICAgY29udGFpbmVyY2FwcyA9IGdzdF9jYXBzX2Zy b21fc3RyaW5nKG1pbWUpOwotKwotKyAgICAgICAgLy9jcmVhdGUgZW5jb2RlYmluIHByb2ZpbGUK LSsgICAgICAgIGNvbnRhaW5lcnByb2ZpbGUgPSBnc3RfZW5jb2RpbmdfY29udGFpbmVyX3Byb2Zp bGVfbmV3KCJjb250YWluZXIiLCAiY29udGFpbmVyIiwgY29udGFpbmVyY2FwcywgTlVMTCk7Ci0r ICAgICAgICB2aWRlb3Byb2ZpbGUgPSBnc3RfZW5jb2RpbmdfdmlkZW9fcHJvZmlsZV9uZXcodmlk ZW9jYXBzLCBOVUxMLCBOVUxMLCAxKTsKLSsgICAgICAgIGdzdF9lbmNvZGluZ19jb250YWluZXJf cHJvZmlsZV9hZGRfcHJvZmlsZShjb250YWluZXJwcm9maWxlLCAoR3N0RW5jb2RpbmdQcm9maWxl ICopIHZpZGVvcHJvZmlsZSk7Ci0rCi0rICAgICAgICAvL2NyZWF0ZSBwaXBlbGluZSBlbGVtZW50 cwotKyAgICAgICAgZW5jb2RlYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJlbmNvZGVi aW4iLCBOVUxMKTsKLSsgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChlbmNvZGViaW4pLCAi cHJvZmlsZSIsIGNvbnRhaW5lcnByb2ZpbGUsIE5VTEwpOwotKyAgICAgICAgc291cmNlID0gZ3N0 X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBOVUxMKTsKLSsgICAgICAgIGZpbGUgPSBn c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZpbGVzaW5rIiwgTlVMTCk7Ci0rICAgICAgICBnX29i amVjdF9zZXQoR19PQkpFQ1QoZmlsZSksICJsb2NhdGlvbiIsIGZpbGVuYW1lLCBOVUxMKTsKLSsg ICAgfQotKwotKyAgICBpZiAoaXNfY29sb3IpCi0rICAgIHsKLSsgICAgICAgIGlucHV0X3BpeF9m bXQgPSBHU1RfVklERU9fRk9STUFUX0JHUjsKLSsgICAgICAgIGJ1ZnNpemUgPSBmcmFtZVNpemUu d2lkdGggKiBmcmFtZVNpemUuaGVpZ2h0ICogMzsKLSsKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1Ig PT0gMAotKyAgICAgICAgY2FwcyA9IGdzdF92aWRlb19mb3JtYXRfbmV3X2NhcHMoR1NUX1ZJREVP X0ZPUk1BVF9CR1IsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm cmFtZVNpemUud2lkdGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcmFtZVNpemUuaGVpZ2h0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50KGZwcyksIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLCAxKTsKLSsjZWxzZQotKyAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUo InZpZGVvL3gtcmF3IiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Jt YXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGZyYW1lU2l6ZS53aWR0aCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBmcmFtZVNpemUu aGVpZ2h0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lcmF0ZSIs IEdTVF9UWVBFX0ZSQUNUSU9OLCBpbnQoZnBzKSwgMSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwpOwotKyAgICAgICAgY2FwcyA9IGdzdF9jYXBzX2ZpeGF0ZShjYXBz KTsKLSsKLSsjZW5kaWYKLSsKLSsgICAgfQotKyAgICBlbHNlCi0rICAgIHsKLSsgICAgICAgIGlu cHV0X3BpeF9mbXQgPSBHU1RfVklERU9fRk9STUFUX0dSQVk4OwotKyAgICAgICAgYnVmc2l6ZSA9 IGZyYW1lU2l6ZS53aWR0aCAqIGZyYW1lU2l6ZS5oZWlnaHQ7Ci0rCi0rI2lmIEdTVF9WRVJTSU9O X01BSk9SID09IDAKLSsgICAgICAgIGNhcHMgPSBnc3RfdmlkZW9fZm9ybWF0X25ld19jYXBzKEdT VF9WSURFT19GT1JNQVRfR1JBWTgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmcmFtZVNpemUud2lkdGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmcmFtZVNpemUuaGVpZ2h0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50KGZwcyksIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCAxKTsKLSsjZWxzZQotKyAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25l d19zaW1wbGUoInZpZGVvL3gtcmF3IiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiR1JBWTgiLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgZnJhbWVTaXplLndpZHRoLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQs IGZyYW1lU2l6ZS5oZWlnaHQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi ZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIGludChmcHMpLCAxLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0rICAgICAgICBjYXBzID0gZ3N0X2NhcHNf Zml4YXRlKGNhcHMpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rICAgIGdzdF9hcHBfc3JjX3NldF9j YXBzKEdTVF9BUFBfU1JDKHNvdXJjZSksIGNhcHMpOwotKyAgICBnc3RfYXBwX3NyY19zZXRfc3Ry ZWFtX3R5cGUoR1NUX0FQUF9TUkMoc291cmNlKSwgR1NUX0FQUF9TVFJFQU1fVFlQRV9TVFJFQU0p OwotKyAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZSAoR1NUX0FQUF9TUkMoc291cmNlKSwgLTEpOwot KwotKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc291cmNlKSwgImZvcm1hdCIsIEdTVF9GT1JN QVRfVElNRSwgTlVMTCk7Ci0rICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzb3VyY2UpLCAiYmxv Y2siLCBUUlVFLCBOVUxMKTsKLSsgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNvdXJjZSksICJp cy1saXZlIiwgRkFMU0UsIE5VTEwpOwotKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc291cmNl KSwgImVtaXQtc2lnbmFscyIsIFRSVUUsIE5VTEwpOwotKwotKyAgICBpZighbWFudWFscGlwZWxp bmUpCi0rICAgIHsKLSsgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChmaWxlKSwgImJ1ZmZl ci1zaXplIiwgYnVmc2l6ZSwgTlVMTCk7Ci0rICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9C SU4ocGlwZWxpbmUpLCBzb3VyY2UsIGVuY29kZWJpbiwgZmlsZSwgTlVMTCk7Ci0rICAgICAgICBp ZighZ3N0X2VsZW1lbnRfbGlua19tYW55KHNvdXJjZSwgZW5jb2RlYmluLCBmaWxlLCBOVUxMKSkg ewotKyAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3Qg bGluayBlbGVtZW50c1xuIik7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgc3RhdGVyZXQg PSBnc3RfZWxlbWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBHU1RfU1RBVEVf UExBWUlORyk7Ci0rICAgIGlmKHN0YXRlcmV0ICA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUp IHsKLSsgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgcHV0 IHBpcGVsaW5lIHRvIHBsYXlcbiIpOwotKyAgICB9Ci0rICAgIGhhbmRsZU1lc3NhZ2UocGlwZWxp bmUpOwotKwotKyAgICBmcmFtZXJhdGUgPSBmcHM7Ci0rICAgIG51bV9mcmFtZXMgPSAwOwotKwot KyAgICBfX0VORF9fOwotKwotKyAgICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rCi0rLyohCi0rICog XGJyaWVmIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjp3cml0ZUZyYW1lCi0rICogXHBhcmFtIGlt YWdlCi0rICogXHJldHVybgotKyAqIFB1c2hlcyB0aGUgZ2l2ZW4gZnJhbWUgb24gdGhlIHBpcGVs aW5lLgotKyAqIFRoZSB0aW1lc3RhbXAgZm9yIHRoZSBidWZmZXIgaXMgZ2VuZXJhdGVkIGZyb20g dGhlIGZyYW1lcmF0ZSBzZXQgaW4gb3BlbgotKyAqIGFuZCBlbnN1cmVzIGEgc21vb3RoIHZpZGVv Ci0rICovCi0rYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6d3JpdGVGcmFtZSggY29uc3Qg SXBsSW1hZ2UgKiBpbWFnZSApCi0rewotKwotKyAgICBDVl9GVU5DTkFNRSgiQ3ZWaWRlb1dyaXRl cl9HU3RyZWFtZXI6OndyaXRlckZyYW1lIik7Ci0rCi0rICAgIEdzdENsb2NrVGltZSBkdXJhdGlv biwgdGltZXN0YW1wOwotKyAgICBHc3RGbG93UmV0dXJuIHJldDsKLSsgICAgaW50IHNpemU7Ci0r Ci0rICAgIF9fQkVHSU5fXzsKLSsgICAgaGFuZGxlTWVzc2FnZShwaXBlbGluZSk7Ci0rCi0rICAg IGlmIChpbnB1dF9waXhfZm10ID09IEdTVF9WSURFT19GT1JNQVRfQkdSKSB7Ci0rICAgICAgICBp ZiAoaW1hZ2UtPm5DaGFubmVscyAhPSAzIHx8IGltYWdlLT5kZXB0aCAhPSBJUExfREVQVEhfOFUp IHsKLSsgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNVbnN1cHBvcnRlZEZvcm1hdCwgImN2V3Jp dGVGcmFtZSgpIG5lZWRzIGltYWdlcyB3aXRoIGRlcHRoID0gSVBMX0RFUFRIXzhVIGFuZCBuQ2hh bm5lbHMgPSAzLiIpOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIGVsc2UgaWYgKGlucHV0X3Bp eF9mbXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9HUkFZOCkgewotKyAgICAgICAgaWYgKGltYWdlLT5u Q2hhbm5lbHMgIT0gMSB8fCBpbWFnZS0+ZGVwdGggIT0gSVBMX0RFUFRIXzhVKSB7Ci0rICAgICAg ICAgICAgQ1ZfRVJST1IoQ1ZfU3RzVW5zdXBwb3J0ZWRGb3JtYXQsICJjdldyaXRlRnJhbWUoKSBu ZWVkcyBpbWFnZXMgd2l0aCBkZXB0aCA9IElQTF9ERVBUSF84VSBhbmQgbkNoYW5uZWxzID0gMS4i KTsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICBlbHNlIHsKLSsgICAgICAgIGFzc2VydChmYWxz ZSk7Ci0rICAgIH0KLSsKLSsgICAgc2l6ZSA9IGltYWdlLT5pbWFnZVNpemU7Ci0rICAgIGR1cmF0 aW9uID0gKChkb3VibGUpMS9mcmFtZXJhdGUpICogR1NUX1NFQ09ORDsKLSsgICAgdGltZXN0YW1w ID0gbnVtX2ZyYW1lcyAqIGR1cmF0aW9uOwotKwotKyAgICAvL2dzdF9hcHBfc3JjX3B1c2hfYnVm ZmVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyLCBzbyB3ZSBuZWVkIHRvIHN1cHBseSBp dCBhIGNvcHkKLSsjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAotKyAgICBidWZmZXIgPSBnc3Rf YnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotKyAgICBtZW1jcHkoR1NUX0JVRkZFUl9EQVRB IChidWZmZXIpLCAoZ3VpbnQ4KilpbWFnZS0+aW1hZ2VEYXRhLCBzaXplKTsKLSsgICAgR1NUX0JV RkZFUl9EVVJBVElPTihidWZmZXIpID0gZHVyYXRpb247Ci0rICAgIEdTVF9CVUZGRVJfVElNRVNU QU1QKGJ1ZmZlcikgPSB0aW1lc3RhbXA7Ci0rI2Vsc2UKLSsgICAgYnVmZmVyID0gZ3N0X2J1ZmZl cl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemUsIE5VTEwpOwotKyAgICBHc3RNYXBJbmZvIGluZm87 Ci0rICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8sIChHc3RNYXBGbGFncylHU1RfTUFQ X1JFQUQpOwotKyAgICBtZW1jcHkoaW5mby5kYXRhLCAoZ3VpbnQ4KilpbWFnZS0+aW1hZ2VEYXRh LCBzaXplKTsKLSsgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZpbmZvKTsKLSsgICAgR1NU X0JVRkZFUl9EVVJBVElPTihidWZmZXIpID0gZHVyYXRpb247Ci0rICAgIEdTVF9CVUZGRVJfUFRT KGJ1ZmZlcikgPSB0aW1lc3RhbXA7Ci0rICAgIEdTVF9CVUZGRVJfRFRTKGJ1ZmZlcikgPSB0aW1l c3RhbXA7Ci0rI2VuZGlmCi0rICAgIC8vc2V0IHRoZSBjdXJyZW50IG51bWJlciBpbiB0aGUgZnJh bWUKLSsgICAgR1NUX0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9ICBudW1fZnJhbWVzOwotKwotKyAg ICByZXQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhzb3VyY2UpLCBidWZm ZXIpOwotKyAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0rICAgICAgICAvKiBzb21ldGhp bmcgd3JvbmcsIHN0b3AgcHVzaGluZyAqLwotKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSsgICAg fQotKyAgICAvL2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUgKEdTVF9CSU4ocGlwZWxpbmUpLCBH U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJwaXBlbGluZSIpOwotKyAgICArK251bV9mcmFtZXM7 Ci0rCi0rICAgIF9fRU5EX187Ci0rICAgIHJldHVybiB0cnVlOwotK30KLSsKLSsvKiEKLSsgKiBc YnJpZWYgY3ZDcmVhdGVWaWRlb1dyaXRlcl9HU3RyZWFtZXIKLSsgKiBccGFyYW0gZmlsZW5hbWUK LSsgKiBccGFyYW0gZm91cmNjCi0rICogXHBhcmFtIGZwcwotKyAqIFxwYXJhbSBmcmFtZVNpemUK LSsgKiBccGFyYW0gaXNDb2xvcgotKyAqIFxyZXR1cm4KLSsgKiBDb25zdHJ1Y3RvcgotKyAqLwot K0N2VmlkZW9Xcml0ZXIqIGN2Q3JlYXRlVmlkZW9Xcml0ZXJfR1N0cmVhbWVyKGNvbnN0IGNoYXIq IGZpbGVuYW1lLCBpbnQgZm91cmNjLCBkb3VibGUgZnBzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEN2U2l6ZSBmcmFtZVNpemUsIGludCBpc0NvbG9yICkK LSt7Ci0rICAgIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyKiB3cnQgPSBuZXcgQ3ZWaWRlb1dyaXRl cl9HU3RyZWFtZXI7Ci0rICAgIGlmKCB3cnQtPm9wZW4oZmlsZW5hbWUsIGZvdXJjYywgZnBzLGZy YW1lU2l6ZSwgaXNDb2xvcikpCi0rICAgICAgICByZXR1cm4gd3J0OwotKwotKyAgICBkZWxldGUg d3J0OwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rLy8gdXRpbGl0eSBmdW5jdGlvbnMKLSsKLSsv KiEKLSsgKiBcYnJpZWYgdG9GcmFjdGlvbgotKyAqIFxwYXJhbSBkZWNpbWFsCi0rICogXHBhcmFt IG51bWVyYXRvcgotKyAqIFxwYXJhbSBkZW5vbWluYXRvcgotKyAqIFNwbGl0IGEgZmxvYXRpbmcg cG9pbnQgdmFsdWUgaW50byBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yCi0rICovCi0rdm9pZCB0 b0ZyYWN0aW9uKGRvdWJsZSBkZWNpbWFsLCBkb3VibGUgJm51bWVyYXRvciwgZG91YmxlICZkZW5v bWluYXRvcikKLSt7Ci0rICAgIGRvdWJsZSBkdW1teTsKLSsgICAgZG91YmxlIHdob2xlOwotKyAg ICBkZWNpbWFsID0gbW9kZiAoZGVjaW1hbCwgJndob2xlKTsKLSsgICAgZm9yIChkZW5vbWluYXRv ciA9IDE7IGRlbm9taW5hdG9yPD0xMDA7IGRlbm9taW5hdG9yKyspewotKyAgICAgICAgaWYgKG1v ZGYoZGVub21pbmF0b3IgKiBkZWNpbWFsLCAmZHVtbXkpIDwgMC4wMDFmKQotKyAgICAgICAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIG51bWVyYXRvciA9IGRlbm9taW5hdG9yICogZGVjaW1hbDsK LSt9Ci0rCi0rCi0rLyohCi0rICogXGJyaWVmIGhhbmRsZU1lc3NhZ2UKLSsgKiBIYW5kbGVzIGdz dHJlYW1lciBidXMgbWVzc2FnZXMuIE1haW5seSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFuZCBl bnN1cmluZyBjbGVhbiBzaHV0ZG93biBvbiBlcnJvcgotKyAqLwotK3ZvaWQgaGFuZGxlTWVzc2Fn ZShHc3RFbGVtZW50ICogcGlwZWxpbmUpCi0rewotKyAgICBDVl9GVU5DTkFNRSgiaGFuZGxlbWVz c2FnZSIpOwotKwotKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0rICAgIGdjaGFyICpkZWJ1ZyA9 IE5VTEw7Ci0rICAgIEdzdEJ1cyogYnVzID0gTlVMTDsKLSsgICAgR3N0U3RyZWFtU3RhdHVzVHlw ZSB0cDsKLSsgICAgR3N0RWxlbWVudCAqIGVsZW0gPSBOVUxMOwotKyAgICBHc3RNZXNzYWdlKiBt c2cgID0gTlVMTDsKLSsKLSsgICAgX19CRUdJTl9fOwotKyAgICBidXMgPSBnc3RfZWxlbWVudF9n ZXRfYnVzKHBpcGVsaW5lKTsKLSsKLSsgICAgd2hpbGUoZ3N0X2J1c19oYXZlX3BlbmRpbmcoYnVz KSkgewotKyAgICAgICAgbXNnID0gZ3N0X2J1c19wb3AoYnVzKTsKLSsKLSsgICAgICAgIC8vcHJp bnRmKCJHb3QgJXMgbWVzc2FnZVxuIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1zZykpOwotKwot KyAgICAgICAgaWYoZ3N0X2lzX21pc3NpbmdfcGx1Z2luX21lc3NhZ2UobXNnKSkKLSsgICAgICAg IHsKLSsgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogeW91ciBn c3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSByZXF1aXJlZCBwbHVnaW5cbiIpOwot KyAgICAgICAgfQotKyAgICAgICAgZWxzZQotKyAgICAgICAgewotKyAgICAgICAgICAgIHN3aXRj aCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotKyAgICAgICAgICAgIGNhc2UgR1NUX01FU1NB R0VfU1RBVEVfQ0hBTkdFRDoKLSsgICAgICAgICAgICAgICAgR3N0U3RhdGUgb2xkc3RhdGUsIG5l d3N0YXRlLCBwZW5kc3RhdGU7Ci0rICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0 YXRlX2NoYW5nZWQobXNnLCAmb2xkc3RhdGUsICZuZXdzdGF0ZSwgJnBlbmRzdGF0ZSk7Ci0rICAg ICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJzdGF0ZSBjaGFuZ2VkIGZyb20gJXMgdG8g JXMgKHBlbmRpbmc6ICVzKVxuIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUob2xkc3RhdGUp LAotKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9n ZXRfbmFtZShuZXdzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRzdGF0ZSkp OwotKyAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgICAgICBjYXNlIEdTVF9NRVNTQUdF X0VSUk9SOgotKyAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcihtc2csICZl cnIsICZkZWJ1Zyk7Ci0rCi0rICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJHU3Ry ZWFtZXIgUGx1Z2luOiBFbWJlZGRlZCB2aWRlbyBwbGF5YmFjayBoYWx0ZWQ7IG1vZHVsZSAlcyBy ZXBvcnRlZDogJXNcbiIsCi0rICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGdzdF9l bGVtZW50X2dldF9uYW1lKEdTVF9NRVNTQUdFX1NSQyAobXNnKSksIGVyci0+bWVzc2FnZSk7Ci0r Ci0rICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnIpOwotKyAgICAgICAgICAgICAgICBn X2ZyZWUoZGVidWcpOwotKwotKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo R1NUX0VMRU1FTlQocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0rICAgICAgICAgICAgICAg IGJyZWFrOwotKyAgICAgICAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotKyAgICAgICAgICAg ICAgICAvL2ZwcmludGYoc3RkZXJyLCAicmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIik7 Ci0rICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIGNhc2UgR1NUX01FU1NBR0Vf U1RSRUFNX1NUQVRVUzoKLSsKLSsgICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3Ry ZWFtX3N0YXR1cyhtc2csJnRwLCZlbGVtKTsKLSsgICAgICAgICAgICAgICAgLy9mcHJpbnRmKHN0 ZGVyciwgInN0cmVhbSBzdGF0dXM6IGVsZW0gJXMsICVpXG4iLCBHU1RfRUxFTUVOVF9OQU1FKGVs ZW0pLCB0cCk7Ci0rICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIGRlZmF1bHQ6 Ci0rICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJ1bmhhbmRsZWQgbWVzc2FnZVxu Iik7Ci0rICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0K LSsgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1zZyk7Ci0rICAgIH0KLSsKLSsgICAgZ3N0X29i amVjdF91bnJlZihHU1RfT0JKRUNUKGJ1cykpOwotKwotKyAgICBfX0VORF9fCi0rfQoKZGlmZiAt LWdpdCBhLzA1NTItZWxpbWluYXRlZC13YXJuaW5ncy5wYXRjaCBiLzA1NTItZWxpbWluYXRlZC13 YXJuaW5ncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwOTdkZi4uMDAw MDAwMAotLS0gYS8wNTUyLWVsaW1pbmF0ZWQtd2FybmluZ3MucGF0Y2gKKysrIC9kZXYvbnVsbApA QCAtMSwzOSArMCwwIEBACi1Gcm9tIDkyMTY3NWM0ZTIzM2Q4ZjllNzg3ODY1NTBkNTQ5ZTllMDVm ZmViMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEaXJrIFZhbiBIYWVyZW5ib3Jn aCA8dmhkaXJrQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMjEgTWFyIDIwMTMgMTY6MTE6NTMgKzAx MDAKLVN1YmplY3Q6IFtQQVRDSCAwNTUyLzMxNTJdIGVsaW1pbmF0ZWQgd2FybmluZ3MKLQotLS0t Ci0gbW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcCB8IDkgKysrKystLS0tCi0g MSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAt LWdpdCBhL21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAgYi9tb2R1bGVzL2hp Z2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwCi1pbmRleCBiMWEyY2EwLi45ZWYwYTNmIDEwMDY0 NAotLS0tIGEvbW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotKysrIGIvbW9k dWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotQEAgLTgzLDcgKzgzLDggQEAgc3Rh dGljIGN2OjpNdXRleCBnc3RfaW5pdGlhbGl6ZXJfbXV0ZXg7Ci0gLyohCi0gICogXGJyaWVmIFRo ZSBnc3RfaW5pdGlhbGl6ZXIgY2xhc3MKLSAgKiBJbml0aWFsaXplcyBnc3RyZWFtZXIgb25jZSBp biB0aGUgd2hvbGUgcHJvY2VzcwotLSAqL2NsYXNzIGdzdF9pbml0aWFsaXplcgotKyAqLwotK2Ns YXNzIGdzdF9pbml0aWFsaXplcgotIHsKLSBwdWJsaWM6Ci0gICAgIHN0YXRpYyB2b2lkIGluaXQo KQotQEAgLTEwMDcsOSArMTAwOCw5IEBAIHZvaWQgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6Omlu aXQoKQotICAqLwotIHZvaWQgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OmNsb3NlKCkKLSB7Ci0t ICAgIGlmIChwaXBlbGluZSkgewotLSAgICAgICAgR3N0Rmxvd1JldHVybiByZXQ7Ci0tICAgICAg ICByZXQgPSBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHNvdXJjZSkpOwot KyAgICBpZiAocGlwZWxpbmUpCi0rICAgIHsKLSsgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9z dHJlYW0oR1NUX0FQUF9TUkMoc291cmNlKSk7Ci0gCi0gICAgICAgICAvL3dhaXQgZm9yIEVPUyB0 byB0cmlja2xlIGRvd24gdGhlIHBpcGVsaW5lLiBUaGlzIHdpbGwgbGV0IGFsbCBlbGVtZW50cyBm aW5pc2ggcHJvcGVybHkKLSAgICAgICAgIEdzdEJ1cyogYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1 cyhwaXBlbGluZSk7Ci0tLSAKLTEuOS4zCi0KCmRpZmYgLS1naXQgYS8wNTg3LUZpeC1idWlsZC13 aXRoLWdzdHJlYW1lci0wLjEwLjI4LnBhdGNoIGIvMDU4Ny1GaXgtYnVpbGQtd2l0aC1nc3RyZWFt ZXItMC4xMC4yOC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4ZDYyNy4u MDAwMDAwMAotLS0gYS8wNTg3LUZpeC1idWlsZC13aXRoLWdzdHJlYW1lci0wLjEwLjI4LnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLUZyb20gNjM3NzkyMjcxNmYzN2IwMGU0 ZjhmNWVhYjg3YThmYmNiMTY0MjJlNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFu ZHJleSBLYW1hZXYgPGFuZHJleS5rYW1hZXZAaXRzZWV6LmNvbT4KLURhdGU6IFR1ZSwgMjYgTWFy IDIwMTMgMTI6Mjc6MzkgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwNTg3LzMxNTJdIEZpeCBidWls ZCB3aXRoIGdzdHJlYW1lciAwLjEwLjI4Ci0KLS0tLQotIG1vZHVsZXMvaGlnaGd1aS9zcmMvY2Fw X2dzdHJlYW1lci5jcHAgfCAyMiArKysrKysrKysrKysrKysrKysrKystCi0gMSBmaWxlIGNoYW5n ZWQsIDIxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL21vZHVs ZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAgYi9tb2R1bGVzL2hpZ2hndWkvc3JjL2Nh cF9nc3RyZWFtZXIuY3BwCi1pbmRleCA5ZWYwYTNmLi5iOGM3ZjRmIDEwMDY0NAotLS0tIGEvbW9k dWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotKysrIGIvbW9kdWxlcy9oaWdoZ3Vp L3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotQEAgLTU2LDkgKzU2LDE1IEBACi0gI2luY2x1ZGUgPGdz dC9hcHAvZ3N0YXBwc2luay5oPgotICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgotICNp bmNsdWRlIDxnc3QvcmlmZi9yaWZmLW1lZGlhLmg+Ci0tI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2Vu Y29kaW5nLXByb2ZpbGUuaD4KLSAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5z Lmg+Ci0rCi0rI2RlZmluZSBWRVJTSU9OX05VTShtYWpvciwgbWlub3IsIG1pY3JvKSAobWFqb3Ig KiAxMDAwMDAwICsgbWlub3IgKiAxMDAwICsgbWljcm8pCi0rI2RlZmluZSBGVUxMX0dTVF9WRVJT SU9OIFZFUlNJT05fTlVNKEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiwgR1NU X1ZFUlNJT05fTUlDUk8pCi0rCi0rI2lmIEZVTExfR1NUX1ZFUlNJT04gPj0gVkVSU0lPTl9OVU0o MCwxMCwzMikKLSsjaW5jbHVkZSA8Z3N0L3BidXRpbHMvZW5jb2RpbmctcHJvZmlsZS5oPgotIC8v I2luY2x1ZGUgPGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg+Ci0rI2VuZGlmCi0gCi0gCi0g I2lmZGVmIE5ERUJVRwotQEAgLTExMTQsOSArMTEyMCwxMiBAQCBib29sIEN2VmlkZW9Xcml0ZXJf R1N0cmVhbWVyOjpvcGVuKCBjb25zdCBjaGFyICogZmlsZW5hbWUsIGludCBmb3VyY2MsCi0gCi0g ICAgIEdzdENhcHMqIGNhcHMgPSBOVUxMOwotICAgICBHc3RDYXBzKiB2aWRlb2NhcHMgPSBOVUxM OwotKwotKyNpZiBGVUxMX0dTVF9WRVJTSU9OID49IFZFUlNJT05fTlVNKDAsMTAsMzIpCi0gICAg IEdzdENhcHMqIGNvbnRhaW5lcmNhcHMgPSBOVUxMOwotICAgICBHc3RFbmNvZGluZ0NvbnRhaW5l clByb2ZpbGUqIGNvbnRhaW5lcnByb2ZpbGUgPSBOVUxMOwotICAgICBHc3RFbmNvZGluZ1ZpZGVv UHJvZmlsZSogdmlkZW9wcm9maWxlID0gTlVMTDsKLSsjZW5kaWYKLSAKLSAjaWYgR1NUX1ZFUlNJ T05fTUFKT1IgPT0gMAotICAgICBHc3RJdGVyYXRvciAqaXQgPSBOVUxMOwotQEAgLTExNzgsMTYg KzExODcsMjEgQEAgYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6b3BlbiggY29uc3QgY2hh ciAqIGZpbGVuYW1lLCBpbnQgZm91cmNjLAotICAgICAgICAgaWYgKCFtaW1lKSB7Ci0gICAgICAg ICAgICAgQ1ZfRVJST1IoIENWX1N0c1Vuc3VwcG9ydGVkRm9ybWF0LCAiR3N0cmVhbWVyIE9wZW5j diBiYWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlIHR5cGUuIik7Ci0gICAgICAgICB9 Ci0rCi0rI2lmIEZVTExfR1NUX1ZFUlNJT04gPj0gVkVSU0lPTl9OVU0oMCwxMCwzMikKLSAgICAg ICAgIGNvbnRhaW5lcmNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyhtaW1lKTsKLSAKLSAgICAg ICAgIC8vY3JlYXRlIGVuY29kZWJpbiBwcm9maWxlCi0gICAgICAgICBjb250YWluZXJwcm9maWxl ID0gZ3N0X2VuY29kaW5nX2NvbnRhaW5lcl9wcm9maWxlX25ldygiY29udGFpbmVyIiwgImNvbnRh aW5lciIsIGNvbnRhaW5lcmNhcHMsIE5VTEwpOwotICAgICAgICAgdmlkZW9wcm9maWxlID0gZ3N0 X2VuY29kaW5nX3ZpZGVvX3Byb2ZpbGVfbmV3KHZpZGVvY2FwcywgTlVMTCwgTlVMTCwgMSk7Ci0g ICAgICAgICBnc3RfZW5jb2RpbmdfY29udGFpbmVyX3Byb2ZpbGVfYWRkX3Byb2ZpbGUoY29udGFp bmVycHJvZmlsZSwgKEdzdEVuY29kaW5nUHJvZmlsZSAqKSB2aWRlb3Byb2ZpbGUpOwotKyNlbmRp ZgotIAotICAgICAgICAgLy9jcmVhdGUgcGlwZWxpbmUgZWxlbWVudHMKLSAgICAgICAgIGVuY29k ZWJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZW5jb2RlYmluIiwgTlVMTCk7Ci0rI2lm IEZVTExfR1NUX1ZFUlNJT04gPj0gVkVSU0lPTl9OVU0oMCwxMCwzMikKLSAgICAgICAgIGdfb2Jq ZWN0X3NldChHX09CSkVDVChlbmNvZGViaW4pLCAicHJvZmlsZSIsIGNvbnRhaW5lcnByb2ZpbGUs IE5VTEwpOwotKyNlbmRpZgotICAgICAgICAgc291cmNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t YWtlKCJhcHBzcmMiLCBOVUxMKTsKLSAgICAgICAgIGZpbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5 X21ha2UoImZpbGVzaW5rIiwgTlVMTCk7Ci0gICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qo ZmlsZSksICJsb2NhdGlvbiIsIGZpbGVuYW1lLCBOVUxMKTsKLUBAIC0xMjE4LDYgKzEyMzIsNyBA QCBib29sIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjpvcGVuKCBjb25zdCBjaGFyICogZmlsZW5h bWUsIGludCBmb3VyY2MsCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0rI2lmIEZVTExfR1NU X1ZFUlNJT04gPj0gVkVSU0lPTl9OVU0oMCwxMCwyOSkKLSAgICAgICAgIGlucHV0X3BpeF9mbXQg PSBHU1RfVklERU9fRk9STUFUX0dSQVk4OwotICAgICAgICAgYnVmc2l6ZSA9IGZyYW1lU2l6ZS53 aWR0aCAqIGZyYW1lU2l6ZS5oZWlnaHQ7Ci0gCi1AQCAtMTIzNiw2ICsxMjUxLDkgQEAgYm9vbCBD dlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6b3BlbiggY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQg Zm91cmNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAg ICAgICBjYXBzID0gZ3N0X2NhcHNfZml4YXRlKGNhcHMpOwotICNlbmRpZgotKyNlbHNlCi0rICAg ICAgICBDVl9Bc3NlcnQoISJHc3RyZWFtZXIgMC4xMC4yOSBvciBuZXdlciBpcyByZXF1aXJlZCBm b3IgZ3JheXNjYWxlIGlucHV0Iik7Ci0rI2VuZGlmCi0gICAgIH0KLSAKLSAgICAgZ3N0X2FwcF9z cmNfc2V0X2NhcHMoR1NUX0FQUF9TUkMoc291cmNlKSwgY2Fwcyk7Ci1AQCAtMTI5NiwxMSArMTMx NCwxMyBAQCBib29sIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjp3cml0ZUZyYW1lKCBjb25zdCBJ cGxJbWFnZSAqIGltYWdlICkKLSAgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNVbnN1cHBvcnRl ZEZvcm1hdCwgImN2V3JpdGVGcmFtZSgpIG5lZWRzIGltYWdlcyB3aXRoIGRlcHRoID0gSVBMX0RF UFRIXzhVIGFuZCBuQ2hhbm5lbHMgPSAzLiIpOwotICAgICAgICAgfQotICAgICB9Ci0rI2lmIEZV TExfR1NUX1ZFUlNJT04gPj0gVkVSU0lPTl9OVU0oMCwxMCwyOSkKLSAgICAgZWxzZSBpZiAoaW5w dXRfcGl4X2ZtdCA9PSBHU1RfVklERU9fRk9STUFUX0dSQVk4KSB7Ci0gICAgICAgICBpZiAoaW1h Z2UtPm5DaGFubmVscyAhPSAxIHx8IGltYWdlLT5kZXB0aCAhPSBJUExfREVQVEhfOFUpIHsKLSAg ICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNVbnN1cHBvcnRlZEZvcm1hdCwgImN2V3JpdGVGcmFt ZSgpIG5lZWRzIGltYWdlcyB3aXRoIGRlcHRoID0gSVBMX0RFUFRIXzhVIGFuZCBuQ2hhbm5lbHMg PSAxLiIpOwotICAgICAgICAgfQotICAgICB9Ci0rI2VuZGlmCi0gICAgIGVsc2UgewotICAgICAg ICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgfQotLS0gCi0xLjkuMwotCgpkaWZmIC0tZ2l0IGEvMDg2 NS1nc3RyZWFtZXItY2xlYW5pbmctdXAtcmVzb3VyY2VzLnBhdGNoIGIvMDg2NS1nc3RyZWFtZXIt Y2xlYW5pbmctdXAtcmVzb3VyY2VzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA4ZWYwN2VjLi4wMDAwMDAwCi0tLSBhLzA4NjUtZ3N0cmVhbWVyLWNsZWFuaW5nLXVwLXJlc291 cmNlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLUZyb20gNmQ2NmQxMTA0 NmJiNTI2ZDUwOGU5NTQzZWNjMzdjZmVlOTFmNDQzNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK LUZyb206IERpcmsgVmFuIEhhZXJlbmJvcmdoIDxkaXJrLnZhbmhhZXJlbmJvcmdoQGhvZ2VudC5i ZT4KLURhdGU6IFdlZCwgMTIgSnVuIDIwMTMgMTY6NTg6MTYgKzAyMDAKLVN1YmplY3Q6IFtQQVRD SCAwODY1LzMxNTJdIGdzdHJlYW1lcjogY2xlYW5pbmcgdXAgcmVzb3VyY2VzCi0KLS0tLQotIG1v ZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAgfCA0MiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspCi0K LWRpZmYgLS1naXQgYS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwIGIvbW9k dWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotaW5kZXggYjhmNGViOC4uYTM0N2E3 NCAxMDA2NDQKLS0tLSBhL21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAKLSsr KyBiL21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAKLUBAIC0xMDMwLDYgKzEw MzAsMTkgQEAgdm9pZCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6Y2xvc2UoKQotICAgICAgICAg aGFuZGxlTWVzc2FnZShwaXBlbGluZSk7Ci0gCi0gICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChH U1RfT0JKRUNUIChwaXBlbGluZSkpOwotKwotKyAgICAgICAgaWYgKHNvdXJjZSkKLSsgICAgICAg ICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoc291cmNlKSk7Ci0rCi0rICAgICAgICBp ZiAoZW5jb2RlYmluKQotKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChl bmNvZGViaW4pKTsKLSsKLSsgICAgICAgIGlmIChmaWxlKQotKyAgICAgICAgICBnc3Rfb2JqZWN0 X3VucmVmIChHU1RfT0JKRUNUIChmaWxlKSk7Ci0rCi0rICAgICAgICBpZiAoYnVmZmVyKQotKyAg ICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidWZmZXIpKTsKLSsKLSAgICAg fQotIH0KLSAKLUBAIC0xMTU1LDYgKzExNjgsMzUgQEAgYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJl YW1lcjo6b3BlbiggY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZm91cmNjLAotICAgICAgICAg ICAgIHNvdXJjZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTihlbmNvZGViaW4pLCAiYXBw c3JjMCIpOwotICAgICAgICAgfQotIAotKy8vICAgICAgICBHc3RJdGVyYXRvciAqaXQgPSBnc3Rf YmluX2l0ZXJhdGVfc291cmNlcyAoR1NUX0JJTihlbmNvZGViaW4pKTsKLSsKLSsKLSsvLyAgICAg ICAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOwotKy8vICAgICAgICBHc3RFbGVtZW50ICppdGVtID0g TlVMTDsKLSsKLSsvLyAgICAgICAgd2hpbGUgKCFkb25lKSB7Ci0rLy8gICAgICAgICAgc3dpdGNo IChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgewotKy8vICAgICAgICAgICAgY2FzZSBH U1RfSVRFUkFUT1JfT0s6Ci0rLy8gICAgICAgICAgICAgIHNvdXJjZSA9IGl0ZW07Ci0rLy8gICAg ICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGl0ZW0pOwotKy8vICAgICAgICAgICAgICBkb25l ID0gVFJVRTsKLSsvLyAgICAgICAgICAgICAgYnJlYWs7Ci0rLy8gICAgICAgICAgICBjYXNlIEdT VF9JVEVSQVRPUl9SRVNZTkM6Ci0rLy8gICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMg KGl0KTsKLSsvLyAgICAgICAgICAgICAgYnJlYWs7Ci0rLy8gICAgICAgICAgICBjYXNlIEdTVF9J VEVSQVRPUl9FUlJPUjoKLSsvLyAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7Ci0rLy8gICAgICAg ICAgICAgIGJyZWFrOwotKy8vICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSsv LyAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7Ci0rLy8gICAgICAgICAgICAgIGJyZWFrOwotKy8v ICAgICAgICAgIH0KLSsvLyAgICAgICAgfQotKy8vICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAo aXQpOwotKwotKwotKwotKwotICAgICAgICAgaWYgKCFzb3VyY2UpewotICAgICAgICAgICAgIENW X0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBzcmMgaW4gbWFu dWFsIHBpcGVsaW5lXG4iKTsKLSAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0tLSAKLTEuOS4z Ci0KCmRpZmYgLS1naXQgYS8wODcxLWFsbG93LWZvci1hcmJpdHJhdHktbnVtYmVyLW9mLXNvdXJj ZXMtYW5kLXNpbmtzLnBhdGNoIGIvMDg3MS1hbGxvdy1mb3ItYXJiaXRyYXR5LW51bWJlci1vZi1z b3VyY2VzLWFuZC1zaW5rcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2 NGExMS4uMDAwMDAwMAotLS0gYS8wODcxLWFsbG93LWZvci1hcmJpdHJhdHktbnVtYmVyLW9mLXNv dXJjZXMtYW5kLXNpbmtzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLUZy b20gMzBmN2Y5NzE3ZjFmMGE4YzExYmE4OGQ0ZjA0YjBjN2NmMjZiYmE3MCBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKLUZyb206IERpcmsgVmFuIEhhZXJlbmJvcmdoIDxkaXJrLnZhbmhhZXJlbmJv cmdoQGhvZ2VudC5iZT4KLURhdGU6IFRodSwgMTMgSnVuIDIwMTMgMTE6MTY6MzMgKzAyMDAKLVN1 YmplY3Q6IFtQQVRDSCAwODcxLzMxNTJdIGFsbG93IGZvciBhcmJpdHJhdHkgbnVtYmVyIG9mIHNv dXJjZXMgYW5kIHNpbmtzCi0KLS0tLQotIG1vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1l ci5jcHAgfCAxMTAgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBj aGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBh L21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAgYi9tb2R1bGVzL2hpZ2hndWkv c3JjL2NhcF9nc3RyZWFtZXIuY3BwCi1pbmRleCBhMzQ3YTc0Li40ZDRkYzcxIDEwMDY0NAotLS0t IGEvbW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotKysrIGIvbW9kdWxlcy9o aWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAotQEAgLTY1MSwxNyArNjUxLDQ3IEBAIGJvb2wg Q3ZDYXB0dXJlX0dTdHJlYW1lcjo6b3BlbiggaW50IHR5cGUsIGNvbnN0IGNoYXIqIGZpbGVuYW1l ICkKLSAKLSAgICAgaWYobWFudWFscGlwZWxpbmUpCi0gICAgIHsKLSsgICAgICAgIEdzdEl0ZXJh dG9yICppdCA9IE5VTEw7Ci0gI2lmIEdTVF9WRVJTSU9OX01BSk9SID09IDAKLS0gICAgICAgIEdz dEl0ZXJhdG9yICppdCA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyhHU1RfQklOKHVyaWRlY29kZWJp bikpOwotKyAgICAgICAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MoR1NUX0JJTih1cmlkZWNv ZGViaW4pKTsKLSAgICAgICAgIGlmKGdzdF9pdGVyYXRvcl9uZXh0KGl0LCAoZ3BvaW50ZXIgKikm c2luaykgIT0gR1NUX0lURVJBVE9SX09LKSB7Ci0gICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3Rz RXJyb3IsICJHU3RyZWFtZXI6IGNhbm5vdCBmaW5kIGFwcHNpbmsgaW4gbWFudWFsIHBpcGVsaW5l XG4iKTsKLSAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICB9Ci0gI2Vsc2UKLS0g ICAgICAgIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4odXJpZGVjb2RlYmluKSwg Im9wZW5jdnNpbmsiKTsKLS0gICAgICAgIGlmICghc2luayl7Ci0tICAgICAgICAgICAgc2luayA9 IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTih1cmlkZWNvZGViaW4pLCAiYXBwc2luazAiKTsK LSsgICAgICAgIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzIChHU1RfQklOKHVyaWRlY29kZWJp bikpOwotKwotKyAgICAgICAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOwotKyAgICAgICAgR3N0RWxl bWVudCAqZWxlbWVudCA9IE5VTEw7Ci0rICAgICAgICBnY2hhciogbmFtZSA9IE5VTEw7Ci0rICAg ICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0rCi0rICAgICAgICB3aGlsZSAoIWRv bmUpIHsKLSsgICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWx1ZSkp IHsKLSsgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSsgICAgICAgICAgICAgIGVs ZW1lbnQgPSBHU1RfRUxFTUVOVCAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsdWUpKTsKLSsgICAg ICAgICAgICAgIG5hbWUgPSBnc3RfZWxlbWVudF9nZXRfbmFtZShlbGVtZW50KTsKLSsgICAgICAg ICAgICAgIGlmIChuYW1lKXsKLSsgICAgICAgICAgICAgICAgaWYoc3Ryc3RyKG5hbWUsICJvcGVu Y3ZzaW5rIikgIT0gTlVMTCB8fCBzdHJzdHIobmFtZSwgImFwcHNpbmsiKSAhPSBOVUxMKSB7Ci0r ICAgICAgICAgICAgICAgICAgc2luayA9IEdTVF9FTEVNRU5UICggZ3N0X29iamVjdF9yZWYgKGVs ZW1lbnQpICk7Ci0rICAgICAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7Ci0rICAgICAgICAgICAg ICAgIH0KLSsgICAgICAgICAgICAgICAgZ19mcmVlKG5hbWUpOwotKyAgICAgICAgICAgICAgfQot KyAgICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSsKLSsgICAgICAgICAgICAg IGJyZWFrOwotKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSsgICAgICAg ICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKLSsgICAgICAgICAgICAgIGJyZWFrOwot KyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotKyAgICAgICAgICAgIGNhc2Ug R1NUX0lURVJBVE9SX0RPTkU6Ci0rICAgICAgICAgICAgICBkb25lID0gVFJVRTsKLSsgICAgICAg ICAgICAgIGJyZWFrOwotKyAgICAgICAgICB9Ci0gICAgICAgICB9Ci0rICAgICAgICBnc3RfaXRl cmF0b3JfZnJlZSAoaXQpOwotKwotIAotICAgICAgICAgaWYgKCFzaW5rKXsKLSAgICAgICAgICAg ICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogY2Fubm90IGZpbmQgYXBwc2luayBp biBtYW51YWwgcGlwZWxpbmVcbiIpOwotQEAgLTEwMzQsMTUgKzEwNjQsOCBAQCB2b2lkIEN2Vmlk ZW9Xcml0ZXJfR1N0cmVhbWVyOjpjbG9zZSgpCi0gICAgICAgICBpZiAoc291cmNlKQotICAgICAg ICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChzb3VyY2UpKTsKLSAKLS0gICAgICAg IGlmIChlbmNvZGViaW4pCi0tICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1Qg KGVuY29kZWJpbikpOwotLQotICAgICAgICAgaWYgKGZpbGUpCi0gICAgICAgICAgIGdzdF9vYmpl Y3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGZpbGUpKTsKLS0KLS0gICAgICAgIGlmIChidWZmZXIpCi0t ICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1ZmZlcikpOwotLQotICAg ICB9Ci0gfQotIAotQEAgLTExNDAsOSArMTE2Myw3IEBAIGJvb2wgQ3ZWaWRlb1dyaXRlcl9HU3Ry ZWFtZXI6Om9wZW4oIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50IGZvdXJjYywKLSAgICAgR3N0 RW5jb2RpbmdWaWRlb1Byb2ZpbGUqIHZpZGVvcHJvZmlsZSA9IE5VTEw7Ci0gI2VuZGlmCi0gCi0t I2lmIEdTVF9WRVJTSU9OX01BSk9SID09IDAKLSAgICAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsK LS0jZW5kaWYKLSAKLSAgICAgLy8gd2UgZmlyc3QgdHJ5IHRvIGNvbnN0cnVjdCBhIHBpcGVsaW5l IGZyb20gdGhlIGdpdmVuIHN0cmluZy4KLSAgICAgLy8gaWYgdGhhdCBmYWlscywgd2UgYXNzdW1l IGl0IGlzIGFuIG9yZGluYXJ5IGZpbGVuYW1lCi1AQCAtMTE2MywzOSArMTE4NCwzOCBAQCBib29s IEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjpvcGVuKCBjb25zdCBjaGFyICogZmlsZW5hbWUsIGlu dCBmb3VyY2MsCi0gICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgfQotICNlbHNl Ci0tICAgICAgICBzb3VyY2UgPSBnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4oZW5jb2RlYmlu KSwgIm9wZW5jdnNyYyIpOwotLSAgICAgICAgaWYgKCFzb3VyY2UpewotLSAgICAgICAgICAgIHNv dXJjZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTihlbmNvZGViaW4pLCAiYXBwc3JjMCIp OwotKyAgICAgICAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfc291cmNlcyAoR1NUX0JJTihlbmNvZGVi aW4pKTsKLSsKLSsgICAgICAgIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKLSsgICAgICAgIEdzdEVs ZW1lbnQgKmVsZW1lbnQgPSBOVUxMOwotKyAgICAgICAgZ2NoYXIqIG5hbWUgPSBOVUxMOwotKyAg ICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOwotKwotKyAgICAgICAgd2hpbGUgKCFk b25lKSB7Ci0rICAgICAgICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdmFsdWUp KSB7Ci0rICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0rICAgICAgICAgICAgICBl bGVtZW50ID0gR1NUX0VMRU1FTlQgKGdfdmFsdWVfZ2V0X29iamVjdCAoJnZhbHVlKSk7Ci0rICAg ICAgICAgICAgICBuYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUoZWxlbWVudCk7Ci0rICAgICAg ICAgICAgICBpZiAobmFtZSl7Ci0rICAgICAgICAgICAgICAgIGlmKHN0cnN0cihuYW1lLCAib3Bl bmN2c3JjIikgIT0gTlVMTCB8fCBzdHJzdHIobmFtZSwgImFwcHNyYyIpICE9IE5VTEwpIHsKLSsg ICAgICAgICAgICAgICAgICBzb3VyY2UgPSBHU1RfRUxFTUVOVCAoIGdzdF9vYmplY3RfcmVmIChl bGVtZW50KSApOwotKyAgICAgICAgICAgICAgICAgIGRvbmUgPSBUUlVFOwotKyAgICAgICAgICAg ICAgICB9Ci0rICAgICAgICAgICAgICAgIGdfZnJlZShuYW1lKTsKLSsgICAgICAgICAgICAgIH0K LSsgICAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0rCi0rICAgICAgICAgICAg ICBicmVhazsKLSsgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0rICAgICAg ICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0rICAgICAgICAgICAgICBicmVhazsK LSsgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSsgICAgICAgICAgICBjYXNl IEdTVF9JVEVSQVRPUl9ET05FOgotKyAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7Ci0rICAgICAg ICAgICAgICBicmVhazsKLSsgICAgICAgICAgfQotICAgICAgICAgfQotLQotLS8vICAgICAgICBH c3RJdGVyYXRvciAqaXQgPSBnc3RfYmluX2l0ZXJhdGVfc291cmNlcyAoR1NUX0JJTihlbmNvZGVi aW4pKTsKLS0KLS0KLS0vLyAgICAgICAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOwotLS8vICAgICAg ICBHc3RFbGVtZW50ICppdGVtID0gTlVMTDsKLS0KLS0vLyAgICAgICAgd2hpbGUgKCFkb25lKSB7 Ci0tLy8gICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgewot LS8vICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0tLy8gICAgICAgICAgICAgIHNv dXJjZSA9IGl0ZW07Ci0tLy8gICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGl0ZW0pOwot LS8vICAgICAgICAgICAgICBkb25lID0gVFJVRTsKLS0vLyAgICAgICAgICAgICAgYnJlYWs7Ci0t Ly8gICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0tLy8gICAgICAgICAgICAg IGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKLS0vLyAgICAgICAgICAgICAgYnJlYWs7Ci0tLy8g ICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLS0vLyAgICAgICAgICAgICAgZG9u ZSA9IFRSVUU7Ci0tLy8gICAgICAgICAgICAgIGJyZWFrOwotLS8vICAgICAgICAgICAgY2FzZSBH U1RfSVRFUkFUT1JfRE9ORToKLS0vLyAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7Ci0tLy8gICAg ICAgICAgICAgIGJyZWFrOwotLS8vICAgICAgICAgIH0KLS0vLyAgICAgICAgfQotLS8vICAgICAg ICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotLQotLQotLQotKyAgICAgICAgZ3N0X2l0ZXJhdG9y X2ZyZWUgKGl0KTsKLSAKLSAgICAgICAgIGlmICghc291cmNlKXsKLSAgICAgICAgICAgICBDVl9F UlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogY2Fubm90IGZpbmQgYXBwc3JjIGluIG1hbnVh bCBwaXBlbGluZVxuIik7Ci0tLSAKLTEuOS4zCi0KCmRpZmYgLS1naXQgYS9vcGVuY3YtcGtnY21h a2UucGF0Y2ggYi9vcGVuY3YtcGtnY21ha2UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDc5ZWIwNzguLjAwMDAwMDAKLS0tIGEvb3BlbmN2LXBrZ2NtYWtlLnBhdGNoCisrKyAv ZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbmN2LTIuNC43L2NtYWtlL09w ZW5DVkdlblBrZ2NvbmZpZy5jbWFrZS5wa2djbWFrZSBvcGVuY3YtMi40LjcvY21ha2UvT3BlbkNW R2VuUGtnY29uZmlnLmNtYWtlCi0tLS0gb3BlbmN2LTIuNC43L2NtYWtlL09wZW5DVkdlblBrZ2Nv bmZpZy5jbWFrZS5wa2djbWFrZQkyMDEzLTExLTA2IDE1OjI2OjM5LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5jdi0yLjQuNy9jbWFrZS9PcGVuQ1ZHZW5Qa2djb25maWcuY21ha2UJMjAxMy0xMS0x MyAyMzoxOTo0OS40MTQ3OTgzNDggKzAxMDAKLUBAIC0xMCw3ICsxMCw3IEBACi0gIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gc2V0KHByZWZpeCAgICAgICIke0NNQUtFX0lO U1RBTExfUFJFRklYfSIpCi0gc2V0KGV4ZWNfcHJlZml4ICJcJHtwcmVmaXh9IikKLS1zZXQobGli ZGlyICAgICAgIiIpICNUT0RPOiBuZWVkIGxpbmsgcGF0aHMgZm9yIE9wZW5DVl9FWFRSQV9DT01Q T05FTlRTCi0rc2V0KGxpYmRpciAgICAgICJcJHtwcmVmaXh9LyR7T1BFTkNWX0xJQl9JTlNUQUxM X1BBVEh9IikKLSBzZXQoaW5jbHVkZWRpciAgIlwke3ByZWZpeH0vJHtPUEVOQ1ZfSU5DTFVERV9J TlNUQUxMX1BBVEh9IikKLSAKLSBpZihDTUFLRV9CVUlMRF9UWVBFIE1BVENIRVMgIlJlbGVhc2Ui KQotQEAgLTM1LDcgKzM1LDcgQEAgb2N2X2xpc3RfcmV2ZXJzZShPcGVuQ1ZfTElCX0NPTVBPTkVO VFMpCi0gb2N2X2xpc3RfcmV2ZXJzZShPcGVuQ1ZfRVhUUkFfQ09NUE9ORU5UUykKLSAKLSAjYnVp bGQgdGhlIGxpc3Qgb2YgY29tcG9uZW50cwotLXNldChPcGVuQ1ZfTElCX0NPTVBPTkVOVFNfICIi KQotK3NldChPcGVuQ1ZfTElCX0NPTVBPTkVOVFNfICItTFwke2xpYmRpcn0iKQotIGZvcmVhY2go Q1ZMaWIgJHtPcGVuQ1ZfTElCX0NPTVBPTkVOVFN9KQotICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShs aWJwYXRoICR7Q1ZMaWJ9IExPQ0FUSU9OXyR7Q01BS0VfQlVJTERfVFlQRX0pCi0gICBnZXRfZmls ZW5hbWVfY29tcG9uZW50KGxpYm5hbWUgIiR7bGlicGF0aH0iIE5BTUUpCi1AQCAtNTAsOCArNTAs MTAgQEAgZm9yZWFjaChDVkxpYiAke09wZW5DVl9MSUJfQ09NUE9ORU5UU30pCi0gICBlbHNlKCkK LSAgICAgc2V0KGluc3RhbGxEaXIgIiR7T1BFTkNWX0xJQl9JTlNUQUxMX1BBVEh9IikKLSAgIGVu ZGlmKCkKLS0KLS0gIHNldChPcGVuQ1ZfTElCX0NPTVBPTkVOVFNfICIke09wZW5DVl9MSUJfQ09N UE9ORU5UU199IFwke2V4ZWNfcHJlZml4fS8ke2luc3RhbGxEaXJ9LyR7bGlibmFtZX0iKQotKyAg c3RyaW5nKFJFUExBQ0UgImxpYm9wZW5jdiIgIi1sb3BlbmN2IiBsaWJuYW1lICIke2xpYm5hbWV9 IikKLSsgIHN0cmluZyhSRVBMQUNFICIuc28iICAgICIiIGxpYm5hbWUgIiR7bGlibmFtZX0iKQot KyAgc3RyaW5nKFJFUExBQ0UgIi5keWxpYiIgIiIgbGlibmFtZSAiJHtsaWJuYW1lfSIpCi0rICBz ZXQoT3BlbkNWX0xJQl9DT01QT05FTlRTXyAiJHtPcGVuQ1ZfTElCX0NPTVBPTkVOVFNffSAke2xp Ym5hbWV9IikKLSBlbmRmb3JlYWNoKCkKLSAKLSAjIGFkZCBleHRyYSBkZXBlbmRlbmNpZXMgcmVx dWlyZWQgZm9yIE9wZW5DVgo=