From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] demos/intel_sprite_on : Sprite Stress Testing Date: Wed, 4 Mar 2015 15:48:41 +0100 Message-ID: <20150304144841.GV18775@phenom.ffwll.local> References: <1425372773-29138-1-git-send-email-megha.i.nelogal@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by gabe.freedesktop.org (Postfix) with ESMTP id 177A46E66C for ; Wed, 4 Mar 2015 06:47:33 -0800 (PST) Received: by wggx12 with SMTP id x12so47150302wgg.6 for ; Wed, 04 Mar 2015 06:47:32 -0800 (PST) Content-Disposition: inline In-Reply-To: <1425372773-29138-1-git-send-email-megha.i.nelogal@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: meghanelogal Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBNYXIgMDMsIDIwMTUgYXQgMDI6MjI6NTNQTSArMDUzMCwgbWVnaGFuZWxvZ2FsIHdy b3RlOgo+IEZyb206IG1lZ2hhbmVsb2dhbCA8bWVnaGEuaS5uZWxvZ2FsQGludGVsLmNvbT4KPiAK PiBBZGRpbmcgdGhlIFNwcml0ZSBTdHJlc3MgVGVzdCBGZWF0dXJlCj4gCj4gU2lnbmVkLW9mZi1i eTogbWVnaGFuZWxvZ2FsIDxtZWdoYS5pLm5lbG9nYWxAaW50ZWwuY29tPgoKSSByZWFsbHksIHJl YWxseSBwcmVmZXIgaWYgYWxsIGF1dG9tYXRlZCBhbmQgc3RyZXNzIHRlc3RzIHdvdWxkIGJlIGEg cGFydApvZiBpZ3QgdGVzdHN1aXRlIGFuZCB0aGF0IHdlJ2QgYWJhbmRvbiBpbnRlbF9zcHJpdGVf b24gYXMgYSBkZW1vLgoKVGhlIGlndCBsaWJyYXJ5IGhhcyBhIGxvdCBvZiBzdXBwb3J0IGZvciBj b21iaW5pbmcgYXV0b21hdGVkIG1vZGVzIHdpdGgKbWFudWFsIHRlc3RpbmcgYW5kIGFkZGl0aW9u YWwgb3B0aW9ucywgc2VlIGUuZy4gdGhlIHBtX3JwbSBvcgprbXNfcHNyX3NpbmtfY3JjIHRlc3Rj YXNlcyBmb3Igd2hhdCdzIHBvc3NpYmxlLgoKSWYgeW91J3JlIHVzaW5nIGludGVsX3Nwcml0ZV9v biBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZyBvciB2YWxpZGF0aW9uCnBsZWFzZSBldmFsdWF0ZSB3 aGF0J3MgbWlzc2luZyBpbiBwcm9wZXIgaWd0IHRlc3Rjb3ZlcmFnZSBhbmQgd29yayB0b3dhcmRz CmNvbnZlcnRpbmcgb3ZlciBhcyBzb29uIGFzIHBvc3NpYmxlLgoKVGhhbmtzLCBEYW5pZWwKCj4g LS0tCj4gIGRlbW9zL2ludGVsX3Nwcml0ZV9vbi5jIHwgIDY1MyArKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzQ3IGluc2Vy dGlvbnMoKyksIDMwNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZGVtb3MvaW50ZWxf c3ByaXRlX29uLmMgYi9kZW1vcy9pbnRlbF9zcHJpdGVfb24uYwo+IGluZGV4IDIzZmM1NmMuLmFk NmIxNjMgMTAwNjQ0Cj4gLS0tIGEvZGVtb3MvaW50ZWxfc3ByaXRlX29uLmMKPiArKysgYi9kZW1v cy9pbnRlbF9zcHJpdGVfb24uYwo+IEBAIC00OSw2ICs0OSw4IEBACj4gIAo+ICAjaW5jbHVkZSAi aW9jdGxfd3JhcHBlcnMuaCIKPiAgCj4gKwo+ICtzdGF0aWMgaW50IHNwcml0ZV9pdGVyYXRpb25f Y291bnQgPSAxOwo+ICAvKgo+ICAgKiBNb2RlIHNldHRpbmcgd2l0aCB0aGUga2VybmVsIGludGVy ZmFjZXMgaXMgYSBiaXQgb2YgYSBjaG9yZS4KPiAgICogRmlyc3QgeW91IGhhdmUgdG8gZmluZCB0 aGUgY29ubmVjdG9yIGluIHF1ZXN0aW9uIGFuZCBtYWtlIHN1cmUgdGhlCj4gQEAgLTQ3Niw3ICs0 NzgsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfc3ByaXRlX3N1cmZhY2VzKGludCBmZCwgaW50IHNw cml0ZV93aWR0aCwgaW50IHNwcml0ZV9oZWlnaHQsCj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHJp Y29jaGV0KGludCB0aWxlZCwgaW50IHNwcml0ZV93LCBpbnQgc3ByaXRlX2gsCj4gLQkJICAgICBp bnQgb3V0X3csIGludCBvdXRfaCwgaW50IGR1bXBfaW5mbykKPiArCQkgICAgIGludCBvdXRfdywg aW50IG91dF9oLCBpbnQgZHVtcF9pbmZvLCBpbnQgZGVsYXlfdGltZSkKPiAgewo+ICAJaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0Owo+ICAJaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2Z4X2ZkOwo+IEBAIC00OTksNyArNTAxLDcgQEAgc3RhdGljIHZv aWQgcmljb2NoZXQoaW50IHRpbGVkLCBpbnQgc3ByaXRlX3csIGludCBzcHJpdGVfaCwKPiAgCQkJ CQkgICAgcHJpbV9mYl9pZDsKPiAgCXN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICAg IHNldDsKPiAgCXN0cnVjdCBjb25uZWN0b3IgICAgICAgICAgICAgICAgICAgIGN1cnJfY29ubmVj dG9yOwo+IC0JZHJtTW9kZVJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgKmdmeF9yZXNvdXJj ZXM7Cj4gKwlkcm1Nb2RlUmVzICAgICAgICAgICAgICAgICAgICAgICAgICAqZ2Z4X3Jlc291cmNl cyA9IE5VTEw7Cj4gIAlzdHJ1Y3QgdGVybWlvcyAgICAgICAgICAgICAgICAgICAgICBvcmlnX3Rl cm0sCj4gIAkJCQkJICAgIGN1cnJfdGVybTsKPiAgCWludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNfaW5kZXg7Cj4gQEAgLTUxOCwyNTkgKzUyMCwyNjQgQEAgc3RhdGljIHZvaWQg cmljb2NoZXQoaW50IHRpbGVkLCBpbnQgc3ByaXRlX3csIGludCBzcHJpdGVfaCwKPiAgCWNoYXIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTsKPiAgCWludAkJCQkgICAgc3ByaXRl X3BsYW5lX2NvdW50ID0gMDsKPiAgCWludCAJCQkJICAgIGk7Cj4gKwlpbnQgc3ByaXRlX2xvb3Ag PSAwOwo+ICsJaW50IGRpc2FibGVfdGltZXIgPSAwOwo+ICsJZHJtTW9kZVBsYW5lUmVzICpwbGFu ZV9yZXNvdXJjZXM7Cj4gKwlkcm1Nb2RlUGxhbmUgKm92cjsKPiAgCS8vIE9wZW4gdXAgSTkxNSBn cmFwaGljcyBkZXZpY2UKPiAgCWdmeF9mZCA9IGRybU9wZW4oImk5MTUiLCBOVUxMKTsKPiAgCWlm IChnZnhfZmQgPCAwKSB7Cj4gIAkJcHJpbnRmKCJGYWlsZWQgdG8gbG9hZCBpOTE1IGRyaXZlcjog JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gIAkJcmV0dXJuOwo+ICAJfQo+IC0KPiAtCS8vIE9i dGFpbiBwb2ludGVyIHRvIHN0cnVjdCBjb250YWluaW5nIGdyYXBoaWNzIHJlc291cmNlcwo+IC0J Z2Z4X3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZ2Z4X2ZkKTsKPiAtCWlmICghZ2Z4 X3Jlc291cmNlcykgewo+IC0JCXByaW50ZigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVz XG4iLCBzdHJlcnJvcihlcnJubykpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlpZiAoZHVt cF9pbmZvICE9IDApIHsKPiAtCQlkdW1wX2Nvbm5lY3RvcnMoZ2Z4X2ZkLCBnZnhfcmVzb3VyY2Vz KTsKPiAtCQlkdW1wX2NydGNzKGdmeF9mZCwgZ2Z4X3Jlc291cmNlcyk7Cj4gLQkJZHVtcF9wbGFu ZXMoZ2Z4X2ZkLCBnZnhfcmVzb3VyY2VzKTsKPiAtCX0KPiAtCj4gLQkvLyBTYXZlIHByZXZpb3Vz IHRlcm1pbmFsIHNldHRpbmdzCj4gLQlpZiAodGNnZXRhdHRyKCAwLCAmb3JpZ190ZXJtKSAhPSAw KSB7Cj4gLQkJcHJpbnRmKCJ0Y2dldGF0dHIgZmFpbHVyZTogJXNcbiIsCj4gLQkJCQlzdHJlcnJv cihlcnJubykpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQkvLyBTZXQgdXAgaW5wdXQgdG8g cmV0dXJuIGNoYXJhY3RlcnMgaW1tZWRpYXRlbHkKPiAtCWN1cnJfdGVybSA9IG9yaWdfdGVybTsK PiAtCWN1cnJfdGVybS5jX2xmbGFnICY9IH4oSUNBTk9OIHwgRUNITyB8IEVDSE9OTCk7Cj4gLQlj dXJyX3Rlcm0uY19jY1tWTUlOXSA9IDA7ICAgICAgIC8vIE5vIG1pbmltdW0gbnVtYmVyIG9mIGNo YXJhY3RlcnMKPiAtCWN1cnJfdGVybS5jX2NjW1ZUSU1FXSA9IDAgOyAgICAgLy8gUmV0dXJuIGlt bWVkaWF0ZWx5LCBldmVuIGlmCj4gLQkvLyBub3RoaW5nIGhhcyBiZWVuIGVudGVyZWQuCj4gLQlp ZiAodGNzZXRhdHRyKCAwLCBUQ1NBTk9XLCAmY3Vycl90ZXJtKSAhPSAwKSB7Cj4gLQkJcHJpbnRm KCJ0Y2dldGF0dHIgZmFpbHVyZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gLQkJcmV0dXJu Owo+IC0JfQo+IC0KPiAtCS8vIEN5Y2xlIHRocm91Z2ggYWxsIGNvbm5lY3RvcnMgYW5kIGRpc3Bs YXkgdGhlIGZseWluZyBzcHJpdGUKPiAtCS8vIHdoZXJlIHRoZXJlIGFyZSBkaXNwbGF5cyBhdHRh Y2hlZCBhbmQgdGhlIGhhcmR3YXJlIHdpbGwgc3VwcG9ydCBpdC4KPiAtCWZvciAoY19pbmRleCA9 IDA7IGNfaW5kZXggPCBnZnhfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBjX2luZGV4Kysp ICB7Cj4gLQkJY3Vycl9jb25uZWN0b3IuaWQgPSBnZnhfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2Nf aW5kZXhdOwo+IC0KPiAtCQkvLyBGaW5kIHRoZSBuYXRpdmUgKHByZWZlcnJlZCkgZGlzcGxheSBt b2RlCj4gLQkJY29ubmVjdG9yX2ZpbmRfcHJlZmVycmVkX21vZGUoZ2Z4X2ZkLCBnZnhfcmVzb3Vy Y2VzLCAmY3Vycl9jb25uZWN0b3IpOwo+IC0JCWlmIChjdXJyX2Nvbm5lY3Rvci5tb2RlX3ZhbGlk ID09IDApIHsKPiAtCQkJcHJpbnRmKCJObyB2YWxpZCBwcmVmZXJyZWQgbW9kZSBkZXRlY3RlZFxu Iik7Cj4gLQkJCWdvdG8gb3V0Owo+IC0JCX0KPiAtCj4gLQkJLy8gRGV0ZXJtaW5lIGlmIHNwcml0 ZSBoYXJkd2FyZSBpcyBhdmFpbGFibGUgb24gcGlwZQo+IC0JCS8vIGFzc29jaWF0ZWQgd2l0aCB0 aGlzIGNvbm5lY3Rvci4KPiAtCQlzcHJpdGVfcGxhbmVfY291bnQgPSBjb25uZWN0b3JfZmluZF9w bGFuZShnZnhfZmQsICZjdXJyX2Nvbm5lY3RvciwKPiAtCQkJCQkJCSAgJnNwcml0ZV9wbGFuZV9p ZCk7Cj4gLQkJaWYgKCFzcHJpdGVfcGxhbmVfY291bnQpIHsKPiAtCQkJcHJpbnRmKCJGYWlsZWQg dG8gZmluZCBzcHJpdGUgcGxhbmUgb24gY3J0Y1xuIik7Cj4gLQkJCWdvdG8gb3V0Owo+ICsJLyog U3RyZXNzIEN5Y2xlIGl0ZXJhdGlvbiAqLwo+ICsJZm9yIChzcHJpdGVfbG9vcCA9IDA7IHNwcml0 ZV9sb29wIDwgc3ByaXRlX2l0ZXJhdGlvbl9jb3VudDsgc3ByaXRlX2xvb3ArKykgewo+ICsJCS8v IE9idGFpbiBwb2ludGVyIHRvIHN0cnVjdCBjb250YWluaW5nIGdyYXBoaWNzIHJlc291cmNlcwo+ ICsJCWRpc2FibGVfdGltZXIgPSAwOwo+ICsJCWdmeF9yZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVz b3VyY2VzKGdmeF9mZCk7Cj4gKwkJaWYgKCFnZnhfcmVzb3VyY2VzKSB7Cj4gKwkJCXByaW50Zigi ZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ICsJ CQlyZXR1cm47Cj4gIAkJfQo+ICAKPiAtCQkvLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIHByZWZlcnJl ZCBtb2RlCj4gLQkJcHJpbV93aWR0aCA9IGN1cnJfY29ubmVjdG9yLm1vZGUuaGRpc3BsYXk7Cj4g LQkJcHJpbV9oZWlnaHQgPSBjdXJyX2Nvbm5lY3Rvci5tb2RlLnZkaXNwbGF5Owo+IC0KPiAtCQkv LyBBbGxvY2F0ZSBhbmQgZmlsbCBtZW1vcnkgZm9yIHByaW1hcnkgc3VyZmFjZQo+IC0JCXJldCA9 IHByZXBhcmVfcHJpbWFyeV9zdXJmYWNlKAo+IC0JCQkJZ2Z4X2ZkLAo+IC0JCQkJcHJpbV93aWR0 aCwKPiAtCQkJCXByaW1faGVpZ2h0LAo+IC0JCQkJJnByaW1faGFuZGxlLAo+IC0JCQkJJnByaW1f c3RyaWRlLAo+IC0JCQkJJnByaW1fc2l6ZSwKPiAtCQkJCXRpbGVkKTsKPiAtCQlpZiAocmV0ICE9 IDApIHsKPiAtCQkJcHJpbnRmKCJGYWlsZWQgdG8gYWRkIHByaW1hcnkgZmIgKCVkeCVkKTogJXNc biIsCj4gLQkJCQlwcmltX3dpZHRoLCBwcmltX2hlaWdodCwgc3RyZXJyb3IoZXJybm8pKTsKPiAt CQkJZ290byBvdXQ7Cj4gKwkJaWYgKGR1bXBfaW5mbyAhPSAwKSB7Cj4gKwkJCWR1bXBfY29ubmVj dG9ycyhnZnhfZmQsIGdmeF9yZXNvdXJjZXMpOwo+ICsJCQlkdW1wX2NydGNzKGdmeF9mZCwgZ2Z4 X3Jlc291cmNlcyk7Cj4gKwkJCWR1bXBfcGxhbmVzKGdmeF9mZCwgZ2Z4X3Jlc291cmNlcyk7Cj4g IAkJfQo+ICAKPiAtCQkvLyBBZGQgdGhlIHByaW1hcnkgc3VyZmFjZSBmcmFtZWJ1ZmZlcgo+IC0J CXJldCA9IGRybU1vZGVBZGRGQihnZnhfZmQsIHByaW1fd2lkdGgsIHByaW1faGVpZ2h0LCAyNCwg MzIsCj4gLQkJCQkgICBwcmltX3N0cmlkZSwgcHJpbV9oYW5kbGUsICZwcmltX2ZiX2lkKTsKPiAt CQlnZW1fY2xvc2UoZ2Z4X2ZkLCBwcmltX2hhbmRsZSk7Cj4gLQo+IC0JCWlmIChyZXQgIT0gMCkg ewo+IC0JCQlwcmludGYoIkZhaWxlZCB0byBhZGQgcHJpbWFyeSBmYiAoJWR4JWQpOiAlc1xuIiwK PiAtCQkJCQlwcmltX3dpZHRoLCBwcmltX2hlaWdodCwgc3RyZXJyb3IoZXJybm8pKTsKPiAtCQkJ Z290byBvdXQ7Cj4gKwkJLy8gU2F2ZSBwcmV2aW91cyB0ZXJtaW5hbCBzZXR0aW5ncwo+ICsJCWlm ICh0Y2dldGF0dHIoIDAsICZvcmlnX3Rlcm0pICE9IDApIHsKPiArCQkJcHJpbnRmKCJ0Y2dldGF0 dHIgZmFpbHVyZTogJXNcbiIsCj4gKwkJCQlzdHJlcnJvcihlcnJubykpOwo+ICsJCQlyZXR1cm47 Cj4gIAkJfQo+ICAKPiAtCQkvLyBBbGxvY2F0ZSBhbmQgZmlsbCBzcHJpdGUgc3VyZmFjZXMKPiAt CQlyZXQgPSBwcmVwYXJlX3Nwcml0ZV9zdXJmYWNlcyhnZnhfZmQsIHNwcml0ZV93LCBzcHJpdGVf aCwgbnVtX3N1cmZhY2VzLAo+IC0JCQkJCSAgICAgICZzcHJpdGVfaGFuZGxlc1swXSwKPiAtCQkJ CQkgICAgICAmc3ByaXRlX3N0cmlkZSwgJnNwcml0ZV9zaXplLAo+IC0JCQkJCSAgICAgIHRpbGVk KTsKPiAtCQlpZiAocmV0ICE9IDApIHsKPiAtCQkJcHJpbnRmKCJQcmVwYXJhdGlvbiBvZiBzcHJp dGUgc3VyZmFjZXMgZmFpbGVkICVkeCVkXG4iLAo+IC0JCQkJc3ByaXRlX3csIHNwcml0ZV9oKTsK PiAtCQkJZ290byBvdXQ7Cj4gKwkJLy8gU2V0IHVwIGlucHV0IHRvIHJldHVybiBjaGFyYWN0ZXJz IGltbWVkaWF0ZWx5Cj4gKwkJY3Vycl90ZXJtID0gb3JpZ190ZXJtOwo+ICsJCWN1cnJfdGVybS5j X2xmbGFnICY9IH4oSUNBTk9OIHwgRUNITyB8IEVDSE9OTCk7Cj4gKwkJY3Vycl90ZXJtLmNfY2Nb Vk1JTl0gPSAwOyAgICAgICAvLyBObyBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzCj4gKwkJ Y3Vycl90ZXJtLmNfY2NbVlRJTUVdID0gMCA7ICAgICAvLyBSZXR1cm4gaW1tZWRpYXRlbHksIGV2 ZW4gaWYKPiArCQkvLyBub3RoaW5nIGhhcyBiZWVuIGVudGVyZWQuCj4gKwkJaWYgKHRjc2V0YXR0 ciggMCwgVENTQU5PVywgJmN1cnJfdGVybSkgIT0gMCkgewo+ICsJCQlwcmludGYoInRjZ2V0YXR0 ciBmYWlsdXJlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQkJcmV0dXJuOwo+ICAJCX0K PiAgCj4gLQkJLy8gQWRkIHRoZSBzcHJpdGUgZnJhbWVidWZmZXJzCj4gLQkJZm9yIChzcHJpdGVf aW5kZXggPSAwOyBzcHJpdGVfaW5kZXggPCBudW1fc3VyZmFjZXM7IHNwcml0ZV9pbmRleCsrKSB7 Cj4gLQkJCWhhbmRsZXNbMF0gPSBzcHJpdGVfaGFuZGxlc1tzcHJpdGVfaW5kZXhdOwo+IC0JCQlo YW5kbGVzWzFdID0gaGFuZGxlc1swXTsKPiAtCQkJaGFuZGxlc1syXSA9IGhhbmRsZXNbMF07Cj4g LQkJCWhhbmRsZXNbM10gPSBoYW5kbGVzWzBdOwo+IC0JCQlwaXRjaGVzWzBdID0gc3ByaXRlX3N0 cmlkZTsKPiAtCQkJcGl0Y2hlc1sxXSA9IHNwcml0ZV9zdHJpZGU7Cj4gLQkJCXBpdGNoZXNbMl0g PSBzcHJpdGVfc3RyaWRlOwo+IC0JCQlwaXRjaGVzWzNdID0gc3ByaXRlX3N0cmlkZTsKPiAtCQkJ bWVtc2V0KG9mZnNldHMsIDAsIHNpemVvZihvZmZzZXRzKSk7Cj4gLQo+IC0JCQlyZXQgPSBkcm1N b2RlQWRkRkIyKGdmeF9mZCwgc3ByaXRlX3csIHNwcml0ZV9oLAo+IC0JCQkJCSAgICBEUk1fRk9S TUFUX1hSR0I4ODg4LAo+IC0JCQkJCSAgICBoYW5kbGVzLCBwaXRjaGVzLCBvZmZzZXRzLAo+IC0J CQkJCSAgICAmc3ByaXRlX2ZiX2lkW3Nwcml0ZV9pbmRleF0sIHBsYW5lX2ZsYWdzKTsKPiAtCQkJ Z2VtX2Nsb3NlKGdmeF9mZCwgc3ByaXRlX2hhbmRsZXNbc3ByaXRlX2luZGV4XSk7Cj4gLQo+IC0J CQlpZiAocmV0KSB7Cj4gLQkJCQlwcmludGYoIkZhaWxlZCB0byBhZGQgc3ByaXRlIGZiICglZHgl ZCk6ICVzXG4iLAo+IC0JCQkJICAgICAgIHNwcml0ZV93LCBzcHJpdGVfaCwgc3RyZXJyb3IoZXJy bm8pKTsKPiAtCj4gLQkJCQlzcHJpdGVfaW5kZXgtLTsKPiAtCQkJCXdoaWxlIChzcHJpdGVfaW5k ZXggPj0gMCkgewo+IC0JCQkJCWRybU1vZGVSbUZCKGdmeF9mZCwgc3ByaXRlX2ZiX2lkW3Nwcml0 ZV9pbmRleF0pOwo+IC0JCQkJCXNwcml0ZV9pbmRleC0tOwo+IC0JCQkJfQo+ICsJCS8vIEN5Y2xl IHRocm91Z2ggYWxsIGNvbm5lY3RvcnMgYW5kIGRpc3BsYXkgdGhlIGZseWluZyBzcHJpdGUKPiAr CQkvLyB3aGVyZSB0aGVyZSBhcmUgZGlzcGxheXMgYXR0YWNoZWQgYW5kIHRoZSBoYXJkd2FyZSB3 aWxsIHN1cHBvcnQgaXQuCj4gKwkJZm9yIChjX2luZGV4ID0gMDsgY19pbmRleCA8IGdmeF9yZXNv dXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGNfaW5kZXgrKykgIHsKPiArCQkJY3Vycl9jb25uZWN0 b3IuaWQgPSBnZnhfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2NfaW5kZXhdOwo+ICsJCQkvLyBGaW5k IHRoZSBuYXRpdmUgKHByZWZlcnJlZCkgZGlzcGxheSBtb2RlCj4gKwkJCWNvbm5lY3Rvcl9maW5k X3ByZWZlcnJlZF9tb2RlKGdmeF9mZCwgZ2Z4X3Jlc291cmNlcywgJmN1cnJfY29ubmVjdG9yKTsK PiArCQkJaWYgKGN1cnJfY29ubmVjdG9yLm1vZGVfdmFsaWQgPT0gMCkgewo+ICsJCQkJcHJpbnRm KCJObyB2YWxpZCBwcmVmZXJyZWQgbW9kZSBkZXRlY3RlZFxuIik7Cj4gIAkJCQlnb3RvIG91dDsK PiAgCQkJfQo+IC0JCX0KPiAgCj4gLQkJaWYgKGR1bXBfaW5mbyAhPSAwKSB7Cj4gLQkJCXByaW50 ZigiRGlzcGxheWVkIE1vZGUgQ29ubmVjdG9yIHN0cnVjdDpcbiIKPiAtCQkJCSIgICAgLmlkID0g JWRcbiIKPiAtCQkJCSIgICAgLm1vZGVfdmFsaWQgPSAlZFxuIgo+IC0JCQkJIiAgICAuY3J0YyA9 ICVkXG4iCj4gLQkJCQkiICAgIC5waXBlID0gJWRcbiIKPiAtCQkJCSIgICAgZHJtTW9kZU1vZGVJ bmZvIC4uLlxuIgo+IC0JCQkJIiAgICAgICAgLm5hbWUgPSAlc1xuIgo+IC0JCQkJIiAgICAgICAg LnR5cGUgPSAlZFxuIgo+IC0JCQkJIiAgICAgICAgLmZsYWdzID0gJTA4eFxuIgo+IC0JCQkJIiAg ICBkcm1Nb2RlRW5jb2RlciAuLi5cbiIKPiAtCQkJCSIgICAgICAgIC5lbmNvZGVyX2lkID0gJWRc biIKPiAtCQkJCSIgICAgICAgIC5lbmNvZGVyX3R5cGUgPSAlZCAoJXMpXG4iCj4gLQkJCQkiICAg ICAgICAuY3J0Y19pZCA9ICVkXG4iCj4gLQkJCQkiICAgICAgICAucG9zc2libGVfY3J0Y3MgPSAl ZFxuIgo+IC0JCQkJIiAgICAgICAgLnBvc3NpYmxlX2Nsb25lcyA9ICVkXG4iCj4gLQkJCQkiICAg IGRybU1vZGVDb25uZWN0b3IgLi4uXG4iCj4gLQkJCQkiICAgICAgICAuY29ubmVjdG9yX2lkID0g JWRcbiIKPiAtCQkJCSIgICAgICAgIC5lbmNvZGVyX2lkID0gJWRcbiIKPiAtCQkJCSIgICAgICAg IC5jb25uZWN0b3JfdHlwZSA9ICVkICglcylcbiIKPiAtCQkJCSIgICAgICAgIC5jb25uZWN0b3Jf dHlwZV9pZCA9ICVkXG5cbiIsCj4gLQkJCQljdXJyX2Nvbm5lY3Rvci5pZCwKPiAtCQkJCWN1cnJf Y29ubmVjdG9yLm1vZGVfdmFsaWQsCj4gLQkJCQljdXJyX2Nvbm5lY3Rvci5jcnRjLAo+IC0JCQkJ Y3Vycl9jb25uZWN0b3IucGlwZSwKPiAtCQkJCWN1cnJfY29ubmVjdG9yLm1vZGUubmFtZSwKPiAt CQkJCWN1cnJfY29ubmVjdG9yLm1vZGUudHlwZSwKPiAtCQkJCWN1cnJfY29ubmVjdG9yLm1vZGUu ZmxhZ3MsCj4gLQkJCQljdXJyX2Nvbm5lY3Rvci5lbmNvZGVyLT5lbmNvZGVyX2lkLAo+IC0JCQkJ Y3Vycl9jb25uZWN0b3IuZW5jb2Rlci0+ZW5jb2Rlcl90eXBlLAo+IC0JCQkJa21zdGVzdF9lbmNv ZGVyX3R5cGVfc3RyKGN1cnJfY29ubmVjdG9yLmVuY29kZXItPmVuY29kZXJfdHlwZSksCj4gLQkJ CQljdXJyX2Nvbm5lY3Rvci5lbmNvZGVyLT5jcnRjX2lkLAo+IC0JCQkJY3Vycl9jb25uZWN0b3Iu ZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MsCj4gLQkJCQljdXJyX2Nvbm5lY3Rvci5lbmNvZGVyLT5w b3NzaWJsZV9jbG9uZXMsCj4gLQkJCQljdXJyX2Nvbm5lY3Rvci5jb25uZWN0b3ItPmNvbm5lY3Rv cl9pZCwKPiAtCQkJCWN1cnJfY29ubmVjdG9yLmNvbm5lY3Rvci0+ZW5jb2Rlcl9pZCwKPiAtCQkJ CWN1cnJfY29ubmVjdG9yLmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUsCj4gLQkJCQlrbXN0ZXN0 X2Nvbm5lY3Rvcl90eXBlX3N0cihjdXJyX2Nvbm5lY3Rvci5jb25uZWN0b3ItPmNvbm5lY3Rvcl90 eXBlKSwKPiAtCQkJCWN1cnJfY29ubmVjdG9yLmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQp Owo+IC0KPiAtCQkJcHJpbnRmKCJTcHJpdGUgc3VyZmFjZSBkaW1lbnNpb25zID0gJWR4JWRcbiIK PiAtCQkJCSJTcHJpdGUgb3V0cHV0IGRpbWVuc2lvbnMgPSAlZHglZFxuIgo+IC0JCQkJIlByZXNz IGFueSBrZXkgdG8gY29udGludWUgPlxuIiwKPiAtCQkJCXNwcml0ZV93LCBzcHJpdGVfaCwgb3V0 X3csIG91dF9oKTsKPiAtCj4gLQkJCS8vIFdhaXQgZm9yIGEga2V5LXByZXNzCj4gLQkJCXdoaWxl KCByZWFkKDAsICZrZXksIDEpID09IDApOwo+IC0JCQkvLyBQdXJnZSB1bnJlYWQgY2hhcmFjdGVy cwo+IC0JCQl0Y2ZsdXNoKDAsIFRDSUZMVVNIKTsKPiAtCQl9Cj4gKwkJCS8vIERldGVybWluZSBp ZiBzcHJpdGUgaGFyZHdhcmUgaXMgYXZhaWxhYmxlIG9uIHBpcGUKPiArCQkJLy8gYXNzb2NpYXRl ZCB3aXRoIHRoaXMgY29ubmVjdG9yLgo+ICsJCQlzcHJpdGVfcGxhbmVfY291bnQgPSBjb25uZWN0 b3JfZmluZF9wbGFuZShnZnhfZmQsICZjdXJyX2Nvbm5lY3RvciwKPiArCQkJCQkJCQkgICZzcHJp dGVfcGxhbmVfaWQpOwo+ICsJCQlpZiAoIXNwcml0ZV9wbGFuZV9jb3VudCkgewo+ICsJCQkJcHJp bnRmKCJGYWlsZWQgdG8gZmluZCBzcHJpdGUgcGxhbmUgb24gY3J0Y1xuIik7Cj4gKwkJCQlnb3Rv IG91dDsKPiArCQkJfQo+ICAKPiAtCQkvLyBTZXQgdXAgdGhlIHByaW1hcnkgZGlzcGxheSBtb2Rl Cj4gLQkJcmV0ID0gZHJtTW9kZVNldENydGMoZ2Z4X2ZkLCBjdXJyX2Nvbm5lY3Rvci5jcnRjLCBw cmltX2ZiX2lkLAo+IC0JCQkJICAgICAwLCAwLCAmY3Vycl9jb25uZWN0b3IuaWQsIDEsICZjdXJy X2Nvbm5lY3Rvci5tb2RlKTsKPiAtCQlpZiAocmV0ICE9IDApIHsKPiAtCQkJcHJpbnRmKCJGYWls ZWQgdG8gc2V0IG1vZGUgKCVkeCVkQCVkSHopOiAlc1xuIiwKPiAtCQkJCXByaW1fd2lkdGgsIHBy aW1faGVpZ2h0LCBjdXJyX2Nvbm5lY3Rvci5tb2RlLnZyZWZyZXNoLAo+IC0JCQkJc3RyZXJyb3Io ZXJybm8pKTsKPiAtCQkJY29udGludWU7Cj4gLQkJfQo+ICsJCQkvLyBXaWR0aCBhbmQgaGVpZ2h0 IG9mIHByZWZlcnJlZCBtb2RlCj4gKwkJCXByaW1fd2lkdGggPSBjdXJyX2Nvbm5lY3Rvci5tb2Rl LmhkaXNwbGF5Owo+ICsJCQlwcmltX2hlaWdodCA9IGN1cnJfY29ubmVjdG9yLm1vZGUudmRpc3Bs YXk7Cj4gKwo+ICsJCQkvLyBBbGxvY2F0ZSBhbmQgZmlsbCBtZW1vcnkgZm9yIHByaW1hcnkgc3Vy ZmFjZQo+ICsJCQlyZXQgPSBwcmVwYXJlX3ByaW1hcnlfc3VyZmFjZSgKPiArCQkJCQlnZnhfZmQs Cj4gKwkJCQkJcHJpbV93aWR0aCwKPiArCQkJCQlwcmltX2hlaWdodCwKPiArCQkJCQkmcHJpbV9o YW5kbGUsCj4gKwkJCQkJJnByaW1fc3RyaWRlLAo+ICsJCQkJCSZwcmltX3NpemUsCj4gKwkJCQkJ dGlsZWQpOwo+ICsJCQlpZiAocmV0ICE9IDApIHsKPiArCQkJCXByaW50ZigiRmFpbGVkIHRvIGFk ZCBwcmltYXJ5IGZiICglZHglZCk6ICVzXG4iLAo+ICsJCQkJCXByaW1fd2lkdGgsIHByaW1faGVp Z2h0LCBzdHJlcnJvcihlcnJubykpOwo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJCX0KPiAgCj4gLQkJ Ly8gU2V0IHRoZSBzcHJpdGUgY29sb3JrZXkgc3RhdGUKPiAtCQlmb3IoaSA9IDA7IGkgPCBzcHJp dGVfcGxhbmVfY291bnQ7IGkrKykgewo+IC0JCQlzZXQucGxhbmVfaWQgPSBzcHJpdGVfcGxhbmVf aWRbaV07Cj4gLQkJCXNldC5taW5fdmFsdWUgPSAwOwo+IC0JCQlzZXQubWF4X3ZhbHVlID0gMDsK PiAtCQkJc2V0LmZsYWdzID0gSTkxNV9TRVRfQ09MT1JLRVlfTk9ORTsKPiAtCQkJcmV0ID0gZHJt Q29tbWFuZFdyaXRlKGdmeF9mZCwgRFJNX0k5MTVfU0VUX1NQUklURV9DT0xPUktFWSwgJnNldCwK PiAtCQkJCQkgICAgICBzaXplb2Yoc2V0KSk7Cj4gLQkJCWFzc2VydChyZXQgPT0gMCk7Cj4gLQkJ fQo+ICsJCQkvLyBBZGQgdGhlIHByaW1hcnkgc3VyZmFjZSBmcmFtZWJ1ZmZlcgo+ICsJCQlyZXQg PSBkcm1Nb2RlQWRkRkIoZ2Z4X2ZkLCBwcmltX3dpZHRoLCBwcmltX2hlaWdodCwgMjQsIDMyLAo+ ICsJCQkJCSAgIHByaW1fc3RyaWRlLCBwcmltX2hhbmRsZSwgJnByaW1fZmJfaWQpOwo+ICsJCQln ZW1fY2xvc2UoZ2Z4X2ZkLCBwcmltX2hhbmRsZSk7Cj4gIAo+IC0JCS8vIFNldCB1cCBzcHJpdGUg b3V0cHV0IGRpbWVuc2lvbnMsIGluaXRpYWwgcG9zaXRpb24sIGV0Yy4KPiAtCQlpZiAob3V0X3cg PiBwcmltX3dpZHRoIC8gMikKPiAtCQkJb3V0X3cgPSBwcmltX3dpZHRoIC8gMjsKPiAtCQlpZiAo b3V0X2ggPiBwcmltX2hlaWdodCAvIDIpCj4gLQkJCW91dF9oID0gcHJpbV9oZWlnaHQgLyAyOwo+ ICsJCQlpZiAocmV0ICE9IDApIHsKPiArCQkJCXByaW50ZigiRmFpbGVkIHRvIGFkZCBwcmltYXJ5 IGZiICglZHglZCk6ICVzXG4iLAo+ICsJCQkJCQlwcmltX3dpZHRoLCBwcmltX2hlaWdodCwgc3Ry ZXJyb3IoZXJybm8pKTsKPiArCQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4gIAo+IC0JCWRlbHRhX3gg PSAoaW50ICopIG1hbGxvYyhzcHJpdGVfcGxhbmVfY291bnQgKiBzaXplb2YoaW50KSk7Cj4gLQkJ ZGVsdGFfeSA9IChpbnQgKikgbWFsbG9jKHNwcml0ZV9wbGFuZV9jb3VudCAqIHNpemVvZihpbnQp KTsKPiAtCQlzcHJpdGVfeCA9IChpbnQgKikgbWFsbG9jKHNwcml0ZV9wbGFuZV9jb3VudCAqIHNp emVvZihpbnQpKTsKPiAtCQlzcHJpdGVfeSA9IChpbnQgKikgbWFsbG9jKHNwcml0ZV9wbGFuZV9j b3VudCAqIHNpemVvZihpbnQpKTsKPiArCQkJLy8gQWxsb2NhdGUgYW5kIGZpbGwgc3ByaXRlIHN1 cmZhY2VzCj4gKwkJCXJldCA9IHByZXBhcmVfc3ByaXRlX3N1cmZhY2VzKGdmeF9mZCwgc3ByaXRl X3csIHNwcml0ZV9oLCBudW1fc3VyZmFjZXMsCj4gKwkJCQkJCSAgICAgICZzcHJpdGVfaGFuZGxl c1swXSwKPiArCQkJCQkJICAgICAgJnNwcml0ZV9zdHJpZGUsICZzcHJpdGVfc2l6ZSwKPiArCQkJ CQkJICAgICAgdGlsZWQpOwo+ICsJCQlpZiAocmV0ICE9IDApIHsKPiArCQkJCXByaW50ZigiUHJl cGFyYXRpb24gb2Ygc3ByaXRlIHN1cmZhY2VzIGZhaWxlZCAlZHglZFxuIiwKPiArCQkJCQlzcHJp dGVfdywgc3ByaXRlX2gpOwo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJCX0KPiAgCj4gLQkJLyogSW5p dGlhbGl6aW5nIHRoZSBjb29yZGluYXRlcyAoeCx5KSBvZiB0aGUgYXZhaWxhYmxlIHNwcml0ZXMg b24gdGhlCj4gLQkJICogY29ubmVjdG9yLCBlcXVhbGx5IHNwYWNlZCBhbG9uZyB0aGUgZGlhZ29u YWwgb2YgdGhlIHJlY3RhbmdsZQo+IC0JCSAqIHsoMCwwKSwocHJpbV93aWR0aC8yLCBwcmltX2hl aWdodC8yKX0uCj4gLQkJICovCj4gLQkJZm9yKGkgPSAwOyBpIDwgc3ByaXRlX3BsYW5lX2NvdW50 OyBpKyspIHsKPiAtCQkJZGVsdGFfeFtpXSA9IDM7Cj4gLQkJCWRlbHRhX3lbaV0gPSA0Owo+IC0J CQlzcHJpdGVfeFtpXSA9IGkgKiAocHJpbV93aWR0aCAvICgyICogc3ByaXRlX3BsYW5lX2NvdW50 KSk7Cj4gLQkJCXNwcml0ZV95W2ldID0gaSAqIChwcmltX2hlaWdodCAvICgyICogc3ByaXRlX3Bs YW5lX2NvdW50KSk7Cj4gLQkJfQo+ICsJCQkvLyBBZGQgdGhlIHNwcml0ZSBmcmFtZWJ1ZmZlcnMK PiArCQkJZm9yIChzcHJpdGVfaW5kZXggPSAwOyBzcHJpdGVfaW5kZXggPCBudW1fc3VyZmFjZXM7 IHNwcml0ZV9pbmRleCsrKSB7Cj4gKwkJCQloYW5kbGVzWzBdID0gc3ByaXRlX2hhbmRsZXNbc3By aXRlX2luZGV4XTsKPiArCQkJCWhhbmRsZXNbMV0gPSBoYW5kbGVzWzBdOwo+ICsJCQkJaGFuZGxl c1syXSA9IGhhbmRsZXNbMF07Cj4gKwkJCQloYW5kbGVzWzNdID0gaGFuZGxlc1swXTsKPiArCQkJ CXBpdGNoZXNbMF0gPSBzcHJpdGVfc3RyaWRlOwo+ICsJCQkJcGl0Y2hlc1sxXSA9IHNwcml0ZV9z dHJpZGU7Cj4gKwkJCQlwaXRjaGVzWzJdID0gc3ByaXRlX3N0cmlkZTsKPiArCQkJCXBpdGNoZXNb M10gPSBzcHJpdGVfc3RyaWRlOwo+ICsJCQkJbWVtc2V0KG9mZnNldHMsIDAsIHNpemVvZihvZmZz ZXRzKSk7Cj4gKwo+ICsJCQkJcmV0ID0gZHJtTW9kZUFkZEZCMihnZnhfZmQsIHNwcml0ZV93LCBz cHJpdGVfaCwKPiArCQkJCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJCQkJCSAgICBo YW5kbGVzLCBwaXRjaGVzLCBvZmZzZXRzLAo+ICsJCQkJCQkgICAgJnNwcml0ZV9mYl9pZFtzcHJp dGVfaW5kZXhdLCBwbGFuZV9mbGFncyk7Cj4gKwkJCQlnZW1fY2xvc2UoZ2Z4X2ZkLCBzcHJpdGVf aGFuZGxlc1tzcHJpdGVfaW5kZXhdKTsKPiArCj4gKwkJCQlpZiAocmV0KSB7Cj4gKwkJCQkJcHJp bnRmKCJGYWlsZWQgdG8gYWRkIHNwcml0ZSBmYiAoJWR4JWQpOiAlc1xuIiwKPiArCQkJCQkgICAg ICAgc3ByaXRlX3csIHNwcml0ZV9oLCBzdHJlcnJvcihlcnJubykpOwo+ICAKPiAtCQljdXJyVGlt ZSA9IDA7Cj4gLQkJcHJldkZsaXBUaW1lID0gMDsgICAgICAgLy8gV2lsbCBmb3JjZSBpbW1lZGlh dGUgc3ByaXRlIGZsaXAKPiAtCQlwcmV2TW92ZVRpbWUgPSAwOyAgICAgICAvLyBXaWxsIGZvcmNl IGltbWVkaWF0ZSBzcHJpdGUgbW92ZQo+IC0JCWRlbHRhRmxpcFRpbWUgPSA1MDAwMDA7IC8vIEZs aXAgc3ByaXRlIHN1cmZhY2UgZXZlcnkgMS8yIHNlY29uZAo+IC0JCWRlbHRhTW92ZVRpbWUgPSAx MDAwMDA7IC8vIE1vdmUgc3ByaXRlIGV2ZXJ5IDEwMCBtcwo+IC0JCXNwcml0ZV9pbmRleCA9IG51 bV9zdXJmYWNlcyAtIDE7Cj4gLQkJa2VlcF9tb3ZpbmcgPSAxOwo+ICsJCQkJCXNwcml0ZV9pbmRl eC0tOwo+ICsJCQkJCXdoaWxlIChzcHJpdGVfaW5kZXggPj0gMCkgewo+ICsJCQkJCQlkcm1Nb2Rl Um1GQihnZnhfZmQsIHNwcml0ZV9mYl9pZFtzcHJpdGVfaW5kZXhdKTsKPiArCQkJCQkJc3ByaXRl X2luZGV4LS07Cj4gKwkJCQkJfQo+ICsJCQkJCWdvdG8gb3V0Owo+ICsJCQkJfQo+ICsJCQl9Cj4g IAo+IC0JCS8vIEJvdW5jZSBzcHJpdGUgb2ZmIHRoZSB3YWxscwo+IC0JCXdoaWxlIChrZWVwX21v dmluZykgewo+IC0JCQkvLyBPYnRhaW4gc3lzdGVtIHRpbWUgaW4gdXNlYy4KPiAtCQkJaWYgKGdl dHRpbWVvZmRheSggJnN0VGltZVZhbCwgTlVMTCApICE9IDApCj4gLQkJCQlwcmludGYoImdldHRp bWVvZmRheSBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gLQkJCWVsc2UKPiAtCQkJ CWN1cnJUaW1lID0gKChsb25nIGxvbmcpc3RUaW1lVmFsLnR2X3NlYyAqIDEwMDAwMDApICsgc3RU aW1lVmFsLnR2X3VzZWM7Cj4gKwkJCWlmIChkdW1wX2luZm8gIT0gMCkgewo+ICsJCQkJcHJpbnRm KCJEaXNwbGF5ZWQgTW9kZSBDb25uZWN0b3Igc3RydWN0OlxuIgo+ICsJCQkJCSIgICAgLmlkID0g JWRcbiIKPiArCQkJCQkiICAgIC5tb2RlX3ZhbGlkID0gJWRcbiIKPiArCQkJCQkiICAgIC5jcnRj ID0gJWRcbiIKPiArCQkJCQkiICAgIC5waXBlID0gJWRcbiIKPiArCQkJCQkiICAgIGRybU1vZGVN b2RlSW5mbyAuLi5cbiIKPiArCQkJCQkiICAgICAgICAubmFtZSA9ICVzXG4iCj4gKwkJCQkJIiAg ICAgICAgLnR5cGUgPSAlZFxuIgo+ICsJCQkJCSIgICAgICAgIC5mbGFncyA9ICUwOHhcbiIKPiAr CQkJCQkiICAgIGRybU1vZGVFbmNvZGVyIC4uLlxuIgo+ICsJCQkJCSIgICAgICAgIC5lbmNvZGVy X2lkID0gJWRcbiIKPiArCQkJCQkiICAgICAgICAuZW5jb2Rlcl90eXBlID0gJWQgKCVzKVxuIgo+ ICsJCQkJCSIgICAgICAgIC5jcnRjX2lkID0gJWRcbiIKPiArCQkJCQkiICAgICAgICAucG9zc2li bGVfY3J0Y3MgPSAlZFxuIgo+ICsJCQkJCSIgICAgICAgIC5wb3NzaWJsZV9jbG9uZXMgPSAlZFxu Igo+ICsJCQkJCSIgICAgZHJtTW9kZUNvbm5lY3RvciAuLi5cbiIKPiArCQkJCQkiICAgICAgICAu Y29ubmVjdG9yX2lkID0gJWRcbiIKPiArCQkJCQkiICAgICAgICAuZW5jb2Rlcl9pZCA9ICVkXG4i Cj4gKwkJCQkJIiAgICAgICAgLmNvbm5lY3Rvcl90eXBlID0gJWQgKCVzKVxuIgo+ICsJCQkJCSIg ICAgICAgIC5jb25uZWN0b3JfdHlwZV9pZCA9ICVkXG5cbiIsCj4gKwkJCQkJY3Vycl9jb25uZWN0 b3IuaWQsCj4gKwkJCQkJY3Vycl9jb25uZWN0b3IubW9kZV92YWxpZCwKPiArCQkJCQljdXJyX2Nv bm5lY3Rvci5jcnRjLAo+ICsJCQkJCWN1cnJfY29ubmVjdG9yLnBpcGUsCj4gKwkJCQkJY3Vycl9j b25uZWN0b3IubW9kZS5uYW1lLAo+ICsJCQkJCWN1cnJfY29ubmVjdG9yLm1vZGUudHlwZSwKPiAr CQkJCQljdXJyX2Nvbm5lY3Rvci5tb2RlLmZsYWdzLAo+ICsJCQkJCWN1cnJfY29ubmVjdG9yLmVu Y29kZXItPmVuY29kZXJfaWQsCj4gKwkJCQkJY3Vycl9jb25uZWN0b3IuZW5jb2Rlci0+ZW5jb2Rl cl90eXBlLAo+ICsJCQkJCWttc3Rlc3RfZW5jb2Rlcl90eXBlX3N0cihjdXJyX2Nvbm5lY3Rvci5l bmNvZGVyLT5lbmNvZGVyX3R5cGUpLAo+ICsJCQkJCWN1cnJfY29ubmVjdG9yLmVuY29kZXItPmNy dGNfaWQsCj4gKwkJCQkJY3Vycl9jb25uZWN0b3IuZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MsCj4g KwkJCQkJY3Vycl9jb25uZWN0b3IuZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzLAo+ICsJCQkJCWN1 cnJfY29ubmVjdG9yLmNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkLAo+ICsJCQkJCWN1cnJfY29ubmVj dG9yLmNvbm5lY3Rvci0+ZW5jb2Rlcl9pZCwKPiArCQkJCQljdXJyX2Nvbm5lY3Rvci5jb25uZWN0 b3ItPmNvbm5lY3Rvcl90eXBlLAo+ICsJCQkJCWttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGN1 cnJfY29ubmVjdG9yLmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLAo+ICsJCQkJCWN1cnJfY29u bmVjdG9yLmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQpOwo+ICsKPiArCQkJCXByaW50Zigi U3ByaXRlIHN1cmZhY2UgZGltZW5zaW9ucyA9ICVkeCVkXG4iCj4gKwkJCQkJIlNwcml0ZSBvdXRw dXQgZGltZW5zaW9ucyA9ICVkeCVkXG4iCj4gKwkJCQkJIlByZXNzIGFueSBrZXkgdG8gY29udGlu dWUgPlxuIiwKPiArCQkJCQlzcHJpdGVfdywgc3ByaXRlX2gsIG91dF93LCBvdXRfaCk7Cj4gKwo+ ICsJCQkJLy8gV2FpdCBmb3IgYSBrZXktcHJlc3MKPiArCQkJCXdoaWxlKCByZWFkKDAsICZrZXks IDEpID09IDApOwo+ICsJCQkJLy8gUHVyZ2UgdW5yZWFkIGNoYXJhY3RlcnMKPiArCQkJCXRjZmx1 c2goMCwgVENJRkxVU0gpOwo+ICsJCQl9Cj4gIAo+IC0JCQkvLyBDaGVjayBpZiBpdCdzIHRpbWUg dG8gZmxpcCB0aGUgc3ByaXRlIHN1cmZhY2UKPiAtCQkJaWYgKGN1cnJUaW1lIC0gcHJldkZsaXBU aW1lID4gZGVsdGFGbGlwVGltZSkgewo+IC0JCQkJc3ByaXRlX2luZGV4ID0gKHNwcml0ZV9pbmRl eCArIDEpICUgbnVtX3N1cmZhY2VzOwo+ICsJCQkvLyBTZXQgdXAgdGhlIHByaW1hcnkgZGlzcGxh eSBtb2RlCj4gKwkJCXJldCA9IGRybU1vZGVTZXRDcnRjKGdmeF9mZCwgY3Vycl9jb25uZWN0b3Iu Y3J0YywgcHJpbV9mYl9pZCwKPiArCQkJCQkgICAgIDAsIDAsICZjdXJyX2Nvbm5lY3Rvci5pZCwg MSwgJmN1cnJfY29ubmVjdG9yLm1vZGUpOwo+ICsJCQlpZiAocmV0ICE9IDApIHsKPiArCQkJCXBy aW50ZigiRmFpbGVkIHRvIHNldCBtb2RlICglZHglZEAlZEh6KTogJXNcbiIsCj4gKwkJCQkJcHJp bV93aWR0aCwgcHJpbV9oZWlnaHQsIGN1cnJfY29ubmVjdG9yLm1vZGUudnJlZnJlc2gsCj4gKwkJ CQkJc3RyZXJyb3IoZXJybm8pKTsKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQl9Cj4gIAo+IC0JCQkJ cHJldkZsaXBUaW1lID0gY3VyclRpbWU7Cj4gKwkJCS8vIFNldCB0aGUgc3ByaXRlIGNvbG9ya2V5 IHN0YXRlCj4gKwkJCWZvcihpID0gMDsgaSA8IHNwcml0ZV9wbGFuZV9jb3VudDsgaSsrKSB7Cj4g KwkJCQlzZXQucGxhbmVfaWQgPSBzcHJpdGVfcGxhbmVfaWRbaV07Cj4gKwkJCQlzZXQubWluX3Zh bHVlID0gMDsKPiArCQkJCXNldC5tYXhfdmFsdWUgPSAwOwo+ICsJCQkJc2V0LmZsYWdzID0gSTkx NV9TRVRfQ09MT1JLRVlfTk9ORTsKPiArCQkJCXJldCA9IGRybUNvbW1hbmRXcml0ZShnZnhfZmQs IERSTV9JOTE1X1NFVF9TUFJJVEVfQ09MT1JLRVksICZzZXQsCj4gKwkJCQkJICAgICAgc2l6ZW9m KHNldCkpOwo+ICsJCQkJYXNzZXJ0KHJldCA9PSAwKTsKPiAgCQkJfQo+ICAKPiAtCQkJLy8gTW92 ZSB0aGUgc3ByaXRlIG9uIHRoZSBzY3JlZW4gYW5kIGZsaXAKPiAtCQkJLy8gdGhlIHN1cmZhY2Ug aWYgdGhlIGluZGV4IGhhcyBjaGFuZ2VkCj4gLQkJCS8vIE5COiBzcHJpdGVfdyBhbmQgc3ByaXRl X2ggbXVzdCBiZSAxNi4xNiBmaXhlZCBwb2ludCwgaGVyZWdvIDw8IDE2Cj4gKwkJCS8vIFNldCB1 cCBzcHJpdGUgb3V0cHV0IGRpbWVuc2lvbnMsIGluaXRpYWwgcG9zaXRpb24sIGV0Yy4KPiArCQkJ aWYgKG91dF93ID4gcHJpbV93aWR0aCAvIDIpCj4gKwkJCQlvdXRfdyA9IHByaW1fd2lkdGggLyAy Owo+ICsJCQlpZiAob3V0X2ggPiBwcmltX2hlaWdodCAvIDIpCj4gKwkJCQlvdXRfaCA9IHByaW1f aGVpZ2h0IC8gMjsKPiArCj4gKwkJCWRlbHRhX3ggPSAoaW50ICopIG1hbGxvYyhzcHJpdGVfcGxh bmVfY291bnQgKiBzaXplb2YoaW50KSk7Cj4gKwkJCWRlbHRhX3kgPSAoaW50ICopIG1hbGxvYyhz cHJpdGVfcGxhbmVfY291bnQgKiBzaXplb2YoaW50KSk7Cj4gKwkJCXNwcml0ZV94ID0gKGludCAq KSBtYWxsb2Moc3ByaXRlX3BsYW5lX2NvdW50ICogc2l6ZW9mKGludCkpOwo+ICsJCQlzcHJpdGVf eSA9IChpbnQgKikgbWFsbG9jKHNwcml0ZV9wbGFuZV9jb3VudCAqIHNpemVvZihpbnQpKTsKPiAr Cj4gKwkJCS8qIEluaXRpYWxpemluZyB0aGUgY29vcmRpbmF0ZXMgKHgseSkgb2YgdGhlIGF2YWls YWJsZSBzcHJpdGVzIG9uIHRoZQo+ICsJCQkgKiBjb25uZWN0b3IsIGVxdWFsbHkgc3BhY2VkIGFs b25nIHRoZSBkaWFnb25hbCBvZiB0aGUgcmVjdGFuZ2xlCj4gKwkJCSAqIHsoMCwwKSwocHJpbV93 aWR0aC8yLCBwcmltX2hlaWdodC8yKX0uCj4gKwkJIAkqLwo+ICAJCQlmb3IoaSA9IDA7IGkgPCBz cHJpdGVfcGxhbmVfY291bnQ7IGkrKykgewo+IC0JCQkJaWYgKGRybU1vZGVTZXRQbGFuZShnZnhf ZmQsIHNwcml0ZV9wbGFuZV9pZFtpXSwKPiArCQkJCWRlbHRhX3hbaV0gPSAzOwo+ICsJCQkJZGVs dGFfeVtpXSA9IDQ7Cj4gKwkJCQlzcHJpdGVfeFtpXSA9IGkgKiAocHJpbV93aWR0aCAvICgyICog c3ByaXRlX3BsYW5lX2NvdW50KSk7Cj4gKwkJCQlzcHJpdGVfeVtpXSA9IGkgKiAocHJpbV9oZWln aHQgLyAoMiAqIHNwcml0ZV9wbGFuZV9jb3VudCkpOwo+ICsJCQl9Cj4gKwo+ICsJCQljdXJyVGlt ZSA9IDA7Cj4gKwkJCXByZXZGbGlwVGltZSA9IDA7ICAgICAgIC8vIFdpbGwgZm9yY2UgaW1tZWRp YXRlIHNwcml0ZSBmbGlwCj4gKwkJCXByZXZNb3ZlVGltZSA9IDA7ICAgICAgIC8vIFdpbGwgZm9y Y2UgaW1tZWRpYXRlIHNwcml0ZSBtb3ZlCj4gKwkJCWRlbHRhRmxpcFRpbWUgPSA1MDAwMDA7IC8v IEZsaXAgc3ByaXRlIHN1cmZhY2UgZXZlcnkgMS8yIHNlY29uZAo+ICsJCQlkZWx0YU1vdmVUaW1l ID0gMTAwMDAwOyAvLyBNb3ZlIHNwcml0ZSBldmVyeSAxMDAgbXMKPiArCQkJc3ByaXRlX2luZGV4 ID0gbnVtX3N1cmZhY2VzIC0gMTsKPiArCQkJa2VlcF9tb3ZpbmcgPSAxOwo+ICsKPiArCQkJLy8g Qm91bmNlIHNwcml0ZSBvZmYgdGhlIHdhbGxzCj4gKwkJCXdoaWxlIChrZWVwX21vdmluZykgewo+ ICsJCQkJLy8gT2J0YWluIHN5c3RlbSB0aW1lIGluIHVzZWMuCj4gKwkJCQlpZiAoZ2V0dGltZW9m ZGF5KCAmc3RUaW1lVmFsLCBOVUxMICkgIT0gMCkKPiArCQkJCQlwcmludGYoImdldHRpbWVvZmRh eSBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJCQllbHNlCj4gKwkJCQkJY3Vy clRpbWUgPSAoKGxvbmcgbG9uZylzdFRpbWVWYWwudHZfc2VjICogMTAwMDAwMCkgKyBzdFRpbWVW YWwudHZfdXNlYzsKPiArCj4gKwkJCQkvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gZmxpcCB0aGUg c3ByaXRlIHN1cmZhY2UKPiArCQkJCWlmIChjdXJyVGltZSAtIHByZXZGbGlwVGltZSA+IGRlbHRh RmxpcFRpbWUpIHsKPiArCQkJCQlzcHJpdGVfaW5kZXggPSAoc3ByaXRlX2luZGV4ICsgMSkgJSBu dW1fc3VyZmFjZXM7Cj4gKwo+ICsJCQkJCXByZXZGbGlwVGltZSA9IGN1cnJUaW1lOwo+ICsJCQkJ fQo+ICsKPiArCQkJCS8vIE1vdmUgdGhlIHNwcml0ZSBvbiB0aGUgc2NyZWVuIGFuZCBmbGlwCj4g KwkJCQkvLyB0aGUgc3VyZmFjZSBpZiB0aGUgaW5kZXggaGFzIGNoYW5nZWQKPiArCQkJCS8vIE5C OiBzcHJpdGVfdyBhbmQgc3ByaXRlX2ggbXVzdCBiZSAxNi4xNiBmaXhlZCBwb2ludCwgaGVyZWdv IDw8IDE2Cj4gKwkJCQlmb3IoaSA9IDA7IGkgPCBzcHJpdGVfcGxhbmVfY291bnQ7IGkrKykgewo+ ICsJCQkJCWlmIChkcm1Nb2RlU2V0UGxhbmUoZ2Z4X2ZkLCBzcHJpdGVfcGxhbmVfaWRbaV0sCj4g IAkJCQkJCSAgICBjdXJyX2Nvbm5lY3Rvci5jcnRjLAo+ICAJCQkJCQkgICAgc3ByaXRlX2ZiX2lk W3Nwcml0ZV9pbmRleF0sCj4gIAkJCQkJCSAgICBwbGFuZV9mbGFncywKPiBAQCAtNzc4LDk1ICs3 ODUsMTE4IEBAIHN0YXRpYyB2b2lkIHJpY29jaGV0KGludCB0aWxlZCwgaW50IHNwcml0ZV93LCBp bnQgc3ByaXRlX2gsCj4gIAkJCQkJCSAgICBvdXRfdywgb3V0X2gsCj4gIAkJCQkJCSAgICAwLCAw LAo+ICAJCQkJCQkgICAgc3ByaXRlX3cgPDwgMTYsIHNwcml0ZV9oIDw8IDE2KSkKPiAtCQkJCQlw cmludGYoIkZhaWxlZCB0byBlbmFibGUgc3ByaXRlIHBsYW5lOiAlc1xuIiwKPiAtCQkJCQkJc3Ry ZXJyb3IoZXJybm8pKTsKPiAtCQkJfQo+IC0KPiAtCQkJLy8gQ2hlY2sgaWYgaXQncyB0aW1lIHRv IG1vdmUgdGhlIHNwcml0ZSBzdXJmYWNlCj4gLQkJCWlmIChjdXJyVGltZSAtIHByZXZNb3ZlVGlt ZSA+IGRlbHRhTW92ZVRpbWUpICB7Cj4gKwkJCQkJCXByaW50ZigiRmFpbGVkIHRvIGVuYWJsZSBz cHJpdGUgcGxhbmU6ICVzXG4iLAo+ICsJCQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKPiArCQkJCX0K PiAgCj4gLQkJCQkvLyBDb21wdXRlIHRoZSBuZXh0IHBvc2l0aW9uIGZvciBzcHJpdGUKPiAtCQkJ CWZvcihpID0gMDsgaSA8IHNwcml0ZV9wbGFuZV9jb3VudDsgaSsrKSB7Cj4gLQkJCQkJc3ByaXRl X3hbaV0gKz0gZGVsdGFfeFtpXTsKPiAtCQkJCQlzcHJpdGVfeVtpXSArPSBkZWx0YV95W2ldOwo+ IC0JCQkJCWlmIChzcHJpdGVfeFtpXSA8IDApIHsKPiAtCQkJCQkJc3ByaXRlX3hbaV0gPSAwOwo+ IC0JCQkJCQlkZWx0YV94W2ldID0gLWRlbHRhX3hbaV07Cj4gLQkJCQkJfQo+IC0JCQkJCWVsc2Ug aWYgKHNwcml0ZV94W2ldID4gcHJpbV93aWR0aCAtIG91dF93KSB7Cj4gLQkJCQkJCXNwcml0ZV94 W2ldID0gcHJpbV93aWR0aCAtIG91dF93Owo+IC0JCQkJCQlkZWx0YV94W2ldID0gLWRlbHRhX3hb aV07Cj4gKwkJCQkvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gbW92ZSB0aGUgc3ByaXRlIHN1cmZh Y2UKPiArCQkJCWlmIChjdXJyVGltZSAtIHByZXZNb3ZlVGltZSA+IGRlbHRhTW92ZVRpbWUpICB7 Cj4gKwo+ICsJCQkJCS8vIENvbXB1dGUgdGhlIG5leHQgcG9zaXRpb24gZm9yIHNwcml0ZQo+ICsJ CQkJCWZvcihpID0gMDsgaSA8IHNwcml0ZV9wbGFuZV9jb3VudDsgaSsrKSB7Cj4gKwkJCQkJCXNw cml0ZV94W2ldICs9IGRlbHRhX3hbaV07Cj4gKwkJCQkJCXNwcml0ZV95W2ldICs9IGRlbHRhX3lb aV07Cj4gKwkJCQkJCWlmIChzcHJpdGVfeFtpXSA8IDApIHsKPiArCQkJCQkJCXNwcml0ZV94W2ld ID0gMDsKPiArCQkJCQkJCWRlbHRhX3hbaV0gPSAtZGVsdGFfeFtpXTsKPiArCQkJCQkJfQo+ICsJ CQkJCQllbHNlIGlmIChzcHJpdGVfeFtpXSA+IHByaW1fd2lkdGggLSBvdXRfdykgewo+ICsJCQkJ CQkJc3ByaXRlX3hbaV0gPSBwcmltX3dpZHRoIC0gb3V0X3c7Cj4gKwkJCQkJCQlkZWx0YV94W2ld ID0gLWRlbHRhX3hbaV07Cj4gKwkJCQkJCX0KPiArCj4gKwkJCQkJCWlmIChzcHJpdGVfeVtpXSA8 IDApIHsKPiArCQkJCQkJCXNwcml0ZV95W2ldID0gMDsKPiArCQkJCQkJCWRlbHRhX3lbaV0gPSAt ZGVsdGFfeVtpXTsKPiArCQkJCQkJfQo+ICsJCQkJCQllbHNlIGlmIChzcHJpdGVfeVtpXSA+IHBy aW1faGVpZ2h0IC0gb3V0X2gpIHsKPiArCQkJCQkJCXNwcml0ZV95W2ldID0gcHJpbV9oZWlnaHQg LSBvdXRfaDsKPiArCQkJCQkJCWRlbHRhX3lbaV0gPSAtZGVsdGFfeVtpXTsKPiArCQkJCQkJfQo+ ICAJCQkJCX0KPiAtCj4gLQkJCQkJaWYgKHNwcml0ZV95W2ldIDwgMCkgewo+IC0JCQkJCQlzcHJp dGVfeVtpXSA9IDA7Cj4gLQkJCQkJCWRlbHRhX3lbaV0gPSAtZGVsdGFfeVtpXTsKPiArCQkJCQlw cmV2TW92ZVRpbWUgPSBjdXJyVGltZTsKPiArCQkJCX0KPiArCQkJCWlmIChkZWxheV90aW1lICE9 IDApIHsKPiArCQkJCQlpZiAoZGlzYWJsZV90aW1lciA9PSBkZWxheV90aW1lKSB7Cj4gKwkJCQkJ CXBsYW5lX3Jlc291cmNlcyA9IGRybU1vZGVHZXRQbGFuZVJlc291cmNlcyhnZnhfZmQpOwo+ICsJ CQkJCQlpZiAoIXBsYW5lX3Jlc291cmNlcykgewo+ICsJCQkJCQkJcHJpbnRmKCJkcm1Nb2RlR2V0 UGxhbmVSZXNvdXJjZXMgZmFpbGVkOiVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ICsJCQkJCQkJ cmV0dXJuOwo+ICsJCQkJCQl9Cj4gKwkJCQkJZm9yIChpID0gMDsgaSA8IHBsYW5lX3Jlc291cmNl cy0+Y291bnRfcGxhbmVzOyBpKyspIHsKPiArCQkJCQkJb3ZyID0gZHJtTW9kZUdldFBsYW5lKGdm eF9mZCwgcGxhbmVfcmVzb3VyY2VzLT5wbGFuZXNbaV0pOwo+ICsJCQkJCQlpZiAoIW92cikgewo+ ICsJCQkJCQkJcHJpbnRmKCJkcm1Nb2RlR2V0UGxhbmUgZmFpbGVkOiVzXG4iLCBzdHJlcnJvcihl cnJubykpOwo+ICsJCQkJCQkJY29udGludWU7Cj4gKwkJCQkJCX0KPiArCQkJCQkJZHJtTW9kZUZy ZWVQbGFuZShvdnIpOwo+ICAJCQkJCX0KPiAtCQkJCQllbHNlIGlmIChzcHJpdGVfeVtpXSA+IHBy aW1faGVpZ2h0IC0gb3V0X2gpIHsKPiAtCQkJCQkJc3ByaXRlX3lbaV0gPSBwcmltX2hlaWdodCAt IG91dF9oOwo+IC0JCQkJCQlkZWx0YV95W2ldID0gLWRlbHRhX3lbaV07Cj4gKwkJCQkJd2hpbGUg KHNwcml0ZV9pbmRleCA+PSAwKSB7Cj4gKwkJCQkJCWRybU1vZGVSbUZCKGdmeF9mZCwgc3ByaXRl X2ZiX2lkW3Nwcml0ZV9pbmRleF0pOwo+ICsJCQkJCQlzcHJpdGVfaW5kZXgtLTsKPiAgCQkJCQl9 Cj4gKwkJCQkJa2VlcF9tb3ZpbmcgPSAwOwo+ICsJCQkJCX0gZWxzZQo+ICsJCQkJCQlkaXNhYmxl X3RpbWVyKys7Cj4gIAkJCQl9Cj4gLQkJCQlwcmV2TW92ZVRpbWUgPSBjdXJyVGltZTsKPiAtCQkJ fQo+ICAKPiAtCQkJLy8gRmV0Y2ggYSBrZXkgZnJvbSBpbnB1dCAobm9uLWJsb2NraW5nKQo+IC0J CQlpZiAocmVhZCgwLCAma2V5LCAxKSA9PSAxKSB7Cj4gLQkJCQlzd2l0Y2ggKGtleSkgewo+IC0J CQkJY2FzZSAncSc6ICAgICAgIC8vIEtpbGwgdGhlIHByb2dyYW0KPiAtCQkJCWNhc2UgJ1EnOgo+ IC0JCQkJCWdvdG8gb3V0Owo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAncyc6ICAgICAgIC8v IFNsb3cgZG93biBzcHJpdGUgbW92ZW1lbnQ7Cj4gLQkJCQkJZGVsdGFNb3ZlVGltZSA9IChkZWx0 YU1vdmVUaW1lICogMTAwKSAvIDkwOwo+IC0JCQkJCWlmIChkZWx0YU1vdmVUaW1lID4gODAwMDAw KSB7Cj4gLQkJCQkJCWRlbHRhTW92ZVRpbWUgPSA4MDAwMDA7Cj4gLQkJCQkJfQo+IC0JCQkJCWJy ZWFrOwo+IC0JCQkJY2FzZSAnUyc6ICAgICAgIC8vIFNwZWVkIHVwIHNwcml0ZSBtb3ZlbWVudDsK PiAtCQkJCQlkZWx0YU1vdmVUaW1lID0gKGRlbHRhTW92ZVRpbWUgKiAxMDApIC8gMTEwOwo+IC0J CQkJCWlmIChkZWx0YU1vdmVUaW1lIDwgMjAwMCkgewo+IC0JCQkJCQlkZWx0YU1vdmVUaW1lID0g MjAwMDsKPiArCQkJCS8vIEZldGNoIGEga2V5IGZyb20gaW5wdXQgKG5vbi1ibG9ja2luZykKPiAr CQkJCWlmIChyZWFkKDAsICZrZXksIDEpID09IDEpIHsKPiArCQkJCQlzd2l0Y2ggKGtleSkgewo+ ICsJCQkJCWNhc2UgJ3EnOiAgICAgICAvLyBLaWxsIHRoZSBwcm9ncmFtCj4gKwkJCQkJY2FzZSAn USc6Cj4gKwkJCQkJCWdvdG8gb3V0Owo+ICsJCQkJCQlicmVhazsKPiArCQkJCQljYXNlICdzJzog ICAgICAgLy8gU2xvdyBkb3duIHNwcml0ZSBtb3ZlbWVudDsKPiArCQkJCQkJZGVsdGFNb3ZlVGlt ZSA9IChkZWx0YU1vdmVUaW1lICogMTAwKSAvIDkwOwo+ICsJCQkJCQlpZiAoZGVsdGFNb3ZlVGlt ZSA+IDgwMDAwMCkgewo+ICsJCQkJCQkJZGVsdGFNb3ZlVGltZSA9IDgwMDAwMDsKPiArCQkJCQkJ fQo+ICsJCQkJCQlicmVhazsKPiArCQkJCQljYXNlICdTJzogICAgICAgLy8gU3BlZWQgdXAgc3By aXRlIG1vdmVtZW50Owo+ICsJCQkJCQlkZWx0YU1vdmVUaW1lID0gKGRlbHRhTW92ZVRpbWUgKiAx MDApIC8gMTEwOwo+ICsJCQkJCQlpZiAoZGVsdGFNb3ZlVGltZSA8IDIwMDApIHsKPiArCQkJCQkJ CWRlbHRhTW92ZVRpbWUgPSAyMDAwOwo+ICsJCQkJCQl9Cj4gKwkJCQkJCWJyZWFrOwo+ICsJCQkJ CWNhc2UgJ2YnOiAgICAgICAvLyBTbG93IGRvd24gc3ByaXRlIGZsaXBwaW5nOwo+ICsJCQkJCQlk ZWx0YUZsaXBUaW1lID0gKGRlbHRhRmxpcFRpbWUgKiAxMDApIC8gOTA7Cj4gKwkJCQkJCWlmIChk ZWx0YUZsaXBUaW1lID4gMTAwMDAwMCkKPiArCQkJCQkJCWRlbHRhRmxpcFRpbWUgPSAxMDAwMDAw Owo+ICsJCQkJCQlicmVhazsKPiArCQkJCQljYXNlICdGJzogICAgICAgLy8gU3BlZWQgdXAgc3By aXRlIGZsaXBwaW5nOwo+ICsJCQkJCQlkZWx0YUZsaXBUaW1lID0gKGRlbHRhRmxpcFRpbWUgKiAx MDApIC8gMTEwOwo+ICsJCQkJCQlpZiAoZGVsdGFGbGlwVGltZSA8IDIwMDAwKQo+ICsJCQkJCQkJ ZGVsdGFGbGlwVGltZSA9IDIwMDAwOwo+ICsJCQkJCQlicmVhazsKPiArCQkJCQljYXNlICduJzog ICAgICAgLy8gTmV4dCBjb25uZWN0b3IKPiArCQkJCQljYXNlICdOJzoKPiArCQkJCQkJa2VlcF9t b3ZpbmcgPSAwOwo+ICsJCQkJCQlicmVhazsKPiArCQkJCQlkZWZhdWx0Ogo+ICsJCQkJCQlicmVh azsKPiAgCQkJCQl9Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlICdmJzogICAgICAgLy8gU2xv dyBkb3duIHNwcml0ZSBmbGlwcGluZzsKPiAtCQkJCQlkZWx0YUZsaXBUaW1lID0gKGRlbHRhRmxp cFRpbWUgKiAxMDApIC8gOTA7Cj4gLQkJCQkJaWYgKGRlbHRhRmxpcFRpbWUgPiAxMDAwMDAwKQo+ IC0JCQkJCQlkZWx0YUZsaXBUaW1lID0gMTAwMDAwMDsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNh c2UgJ0YnOiAgICAgICAvLyBTcGVlZCB1cCBzcHJpdGUgZmxpcHBpbmc7Cj4gLQkJCQkJZGVsdGFG bGlwVGltZSA9IChkZWx0YUZsaXBUaW1lICogMTAwKSAvIDExMDsKPiAtCQkJCQlpZiAoZGVsdGFG bGlwVGltZSA8IDIwMDAwKQo+IC0JCQkJCQlkZWx0YUZsaXBUaW1lID0gMjAwMDA7Cj4gLQkJCQkJ YnJlYWs7Cj4gLQkJCQljYXNlICduJzogICAgICAgLy8gTmV4dCBjb25uZWN0b3IKPiAtCQkJCWNh c2UgJ04nOgo+IC0JCQkJCWtlZXBfbW92aW5nID0gMDsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWRl ZmF1bHQ6Cj4gLQkJCQkJYnJlYWs7Cj4gKwkKPiArCQkJCQkvLyBQdXJnZSB1bnJlYWQgY2hhcmFj dGVycwo+ICsJCQkJCXRjZmx1c2goMCwgVENJRkxVU0gpOwo+ICAJCQkJfQo+ICAKPiAtCQkJCS8v IFB1cmdlIHVucmVhZCBjaGFyYWN0ZXJzCj4gLQkJCQl0Y2ZsdXNoKDAsIFRDSUZMVVNIKTsKPiAr CQkJCS8vIFdhaXQgZm9yIG1pbiBvZiBmbGlwIG9yIG1vdmUgZGVsdGFzCj4gKwkJCQlTbGVlcFRp bWUgPSAoZGVsdGFGbGlwVGltZSA8IGRlbHRhTW92ZVRpbWUpID8KPiArCQkJCQlkZWx0YUZsaXBU aW1lIDogZGVsdGFNb3ZlVGltZTsKPiArCQkJCXVzbGVlcChTbGVlcFRpbWUpOwo+ICAJCQl9Cj4g LQo+IC0JCQkvLyBXYWl0IGZvciBtaW4gb2YgZmxpcCBvciBtb3ZlIGRlbHRhcwo+IC0JCQlTbGVl cFRpbWUgPSAoZGVsdGFGbGlwVGltZSA8IGRlbHRhTW92ZVRpbWUpID8KPiAtCQkJCWRlbHRhRmxp cFRpbWUgOiBkZWx0YU1vdmVUaW1lOwo+IC0JCQl1c2xlZXAoU2xlZXBUaW1lKTsKPiArCQkJZnJl ZShzcHJpdGVfcGxhbmVfaWQpOwo+ICsJCQlmcmVlKHNwcml0ZV94KTsKPiArCQkJZnJlZShzcHJp dGVfeSk7Cj4gKwkJCWZyZWUoZGVsdGFfeCk7Cj4gKwkJCWZyZWUoZGVsdGFfeSk7Cj4gKwkJCXNw cml0ZV9wbGFuZV9pZCA9IE5VTEw7Cj4gKwkJCXNwcml0ZV9wbGFuZV9jb3VudCA9IDA7Cj4gKwkJ CXNwcml0ZV94ID0gc3ByaXRlX3kgPSBkZWx0YV94ID0gZGVsdGFfeSA9IE5VTEw7Cj4gIAkJfQo+ IC0KPiAtCQlmcmVlKHNwcml0ZV9wbGFuZV9pZCk7Cj4gLQkJZnJlZShzcHJpdGVfeCk7Cj4gLQkJ ZnJlZShzcHJpdGVfeSk7Cj4gLQkJZnJlZShkZWx0YV94KTsKPiAtCQlmcmVlKGRlbHRhX3kpOwo+ IC0JCXNwcml0ZV9wbGFuZV9pZCA9IE5VTEw7Cj4gLQkJc3ByaXRlX3BsYW5lX2NvdW50ID0gMDsK PiAtCQlzcHJpdGVfeCA9IHNwcml0ZV95ID0gZGVsdGFfeCA9IGRlbHRhX3kgPSBOVUxMOwo+ICsJ CWtlZXBfbW92aW5nID0gMTsKPiAgCX0KPiAtCj4gIG91dDoKPiAgCS8vIFB1cmdlIHVucmVhZCBj aGFyYWN0ZXJzCj4gIAl0Y2ZsdXNoKDAsIFRDSUZMVVNIKTsKPiBAQCAtODg2LDYgKzkxNiw4IEBA IHN0YXRpYyB2b2lkIHVzYWdlKGNoYXIgKm5hbWUpCj4gIAkJIlx0LWhcdFtvcHRpb25hbF0gb3V0 cHV0IGhlbHAgbWVzc2FnZVxuIgo+ICAJCSJcdC10XHRbb3B0aW9uYWxdIGVuYWJsZSB0aWxpbmdc biIKPiAgCQkiXHQtb1x0W29wdGlvbmFsXSA8b3V0cHV0IHJlY3Qgd2lkdGg+eDxvdXRwdXQgcmVj dCBoZWlnaHQ+XG5cbiIKPiArCQkiXHQtYVx0W3RpbWVdIGZvciBwYXNzaW5nIHNsZWVwIHRpbWUg aW4gc2Vjb25kcyBiZWZvcmUgZGlzYWJsaW5nIHBsYW5lcyBpbiBlYWNoIGN5Y2xlIG9mIHN0cmVz cyB0ZXN0XG4iCj4gKwkJIlx0LW5cdFtuXSBTdHJlc3MgY3ljbGUgY291bnRcblxuIgo+ICAJCSJL ZXlib2FyZCBjb250cm9sIGZvciBzcHJpdGUgbW92ZW1lbnQgYW5kIGZsaXAgcmF0ZSAuLi5cbiIK PiAgCQkiXHQncScgb3IgJ1EnIC0gUXVpdCB0aGUgcHJvZ3JhbVxuIgo+ICAJCSJcdCduJyBvciAn TicgLSBTd2l0Y2ggdG8gbmV4dCBkaXNwbGF5XG4iCj4gQEAgLTkwNSw4ICs5MzcsOSBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gIAlpbnQgICAgICAgICAgICAgICAgIHBsYW5l X3dpZHRoID0gMCwKPiAgCQkJICAgIHBsYW5lX2hlaWdodCA9IDAsCj4gIAkJCSAgICBvdXRfd2lk dGggPSAwLAo+IC0JCQkgICAgb3V0X2hlaWdodCA9IDA7Cj4gLQlzdGF0aWMgY2hhciAgICAgICAg IG9wdHN0cltdID0gImRzOm86dGgiOwo+ICsJCQkgICAgb3V0X2hlaWdodCA9IDAsCj4gKwkJCSAg ICBkZWxheV90aW1lID0gMDsKPiArCXN0YXRpYyBjaGFyICAgICAgICAgb3B0c3RyW10gPSAiZHM6 bzp0aDphOm46IjsKPiAgCj4gIAlvcHRlcnIgPSAwOwo+ICAJd2hpbGUgKChjID0gZ2V0b3B0KGFy Z2MsIGFyZ3YsIG9wdHN0cikpICE9IC0xKSB7Cj4gQEAgLTkyNiw2ICs5NTksMTQgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICAJCQlpZiAoc3NjYW5mKG9wdGFyZywgIiVkeCVk IiwgJm91dF93aWR0aCwgJm91dF9oZWlnaHQpICE9IDIpCj4gIAkJCQl1c2FnZShhcmd2WzBdKTsK PiAgCQkJYnJlYWs7Cj4gKwkJY2FzZSAnYSc6CQkvKiBEZWxheSB0aW1lIGZvciBkaXNhYmxpbmcg c3ByaXRlcyAqLwo+ICsJCQlpZiAoc3NjYW5mKG9wdGFyZywgIiVkIiwgJmRlbGF5X3RpbWUpICE9 IDEpCj4gKwkJCQl1c2FnZShhcmd2WzBdKTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAnbic6CQkv KiBTdHJlc3MgY3ljbGUgY291bnQgICovCj4gKwkJCWlmIChzc2NhbmYob3B0YXJnLCAiJWQiLCAm c3ByaXRlX2l0ZXJhdGlvbl9jb3VudCkgIT0gMSkKPiArCQkJCXVzYWdlKGFyZ3ZbMF0pOwo+ICsJ CQlicmVhazsKPiAgCQlkZWZhdWx0Ogo+ICAJCQlwcmludGYoInVua25vd24gb3B0aW9uICVjXG4i LCBjKTsKPiAgCQkJLyogZmFsbCB0aHJvdWdoICovCj4gQEAgLTk0Miw3ICs5ODMsNyBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gIAkJaWYgKG91dF9oZWlnaHQgPCAocGxhbmVf aGVpZ2h0IC8gMikpCj4gIAkJCW91dF9oZWlnaHQgPSBwbGFuZV9oZWlnaHQ7Cj4gIAo+IC0JCXJp Y29jaGV0KGVuYWJsZV90aWxpbmcsIHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQsIG91dF93aWR0 aCwgb3V0X2hlaWdodCwgZHVtcF9pbmZvKTsKPiArCQlyaWNvY2hldChlbmFibGVfdGlsaW5nLCBw bGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0LCBvdXRfd2lkdGgsIG91dF9oZWlnaHQsIGR1bXBfaW5m bywgZGVsYXlfdGltZSk7Cj4gIAl9IGVsc2Ugewo+ICAJCXByaW50ZigiU3ByaXRlIGRpbWVuc2lv bnMgYXJlIHJlcXVpcmVkOlxuIik7Cj4gIAkJdXNhZ2UoYXJndlswXSk7Cj4gLS0gCj4gMS43Ljku NQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24K KzQxICgwKSA3OSAzNjUgNTcgNDggLSBodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=