ZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCmluZGV4IGVjYWY0MTcuLmQ5ODQzOTUgMTAwNjQ0Ci0tLSBhL0NIQU5HRVMKKysrIGIvQ0hBTkdFUwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICogQWR2YW5jZSB0aGUgdmVyc2lvbiBudW1iZXIgdG8gMS4wLCBzbyBhcyB0byBjb3VudGVyYWN0IHRoZQogICAoZmFsc2UtaW4tdGhpcy1jYXNlKSBpbXByZXNzaW9uIHNvbWUgcGVvcGxlIGhhdmUgdGhhdCBwcm9ncmFtcyAKLSAgd2l0aCB2ZXJzaW9uIG51bWJlcnMgbGVzcyB0aGFuIDEuMCBhcmUgaW4gc29tZXdheSwgZXhwZXJpbWVudGFsLAorICB3aXRoIHZlcnNpb24gbnVtYmVycyBsZXNzIHRoYW4gMS4wIGFyZSBpbiBzb21lIHdheSwgZXhwZXJpbWVudGFsLAogICBwcmUtcmVsZWFzZSB2ZXJzaW9ucy4KIAogKiBDcmVhdGUgYW4gaW5pdGlhbCBNYWtlZmlsZS1saWJiejJfc28gdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeS4KQEAgLTE2NSwzICsxNjUsODkgQEAKIDEuMC4wLiAgVGhpcyBpcyBqdXN0IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgKyBhIGZpeCBmb3IgbWlub3IgV2luMzIKIGJ1aWxkIHByb2JsZW1zLiAgRm9yIGFsbW9zdCBldmVyeW9uZSwgdXBncmFkaW5nIGZyb20gMS4wLjAgdG8gMS4wLjEgaXMKIHV0dGVybHkgcG9pbnRsZXNzLiAgRG9uJ3QgYm90aGVyLgorCisKKzEuMC4yCit+fn5+fgorQSBidWcgZml4IHJlbGVhc2UsIGFkZHJlc3NpbmcgdmFyaW91cyBtaW5vciBpc3N1ZXMgd2hpY2ggaGF2ZSBhcHBlYXJlZAoraW4gdGhlIDE4IG9yIHNvIG1vbnRocyBzaW5jZSAxLjAuMSB3YXMgcmVsZWFzZWQuICBNb3N0IG9mIHRoZSBmaXhlcworYXJlIHRvIGRvIHdpdGggZmlsZS1oYW5kbGluZyBvciBkb2N1bWVudGF0aW9uIGJ1Z3MuICBUbyB0aGUgYmVzdCBvZiBteQora25vd2xlZGdlLCB0aGVyZSBoYXZlIGJlZW4gbm8gZGF0YS1sb3NzLWNhdXNpbmcgYnVncyByZXBvcnRlZCBpbiB0aGUKK2NvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZW5naW5lIG9mIDEuMC4wIG9yIDEuMC4xLgorCitOb3RlIHRoYXQgdGhpcyByZWxlYXNlIGRvZXMgbm90IGltcHJvdmUgdGhlIHJhdGhlciBjcnVkZSBidWlsZCBzeXN0ZW0KK2ZvciBVbml4IHBsYXRmb3Jtcy4gIFRoZSBnZW5lcmFsIHBsYW4gaGVyZSBpcyB0byBhdXRvY29uZmlzY2F0ZS8KK2xpYnRvb2xpc2UgMS4wLjIgc29vbiBhZnRlciByZWxlYXNlLCBhbmQgcmVsZWFzZSB0aGUgcmVzdWx0IGFzIDEuMS4wCitvciBwZXJoYXBzIDEuMi4wLiAgVGhhdCwgaG93ZXZlciwgaXMgc3RpbGwganVzdCBhIHBsYW4gYXQgdGhpcyBwb2ludC4KKworSGVyZSBhcmUgdGhlIGNoYW5nZXMgaW4gMS4wLjIuICBCdWctcmVwb3J0ZXJzIGFuZC9vciBwYXRjaC1zZW5kZXJzIGluCitwYXJlbnRoZXNlcy4KKworKiBGaXggYW4gaW5maW5pdGUgc2VnZmF1bHQgbG9vcCBpbiAxLjAuMSB3aGVuIGEgZGlyZWN0b3J5IGlzCisgIGVuY291bnRlcmVkIGluIC1mIChmb3JjZSkgbW9kZS4KKyAgICAgKFRyb25kIEVpdmluZCBHbG9tc3JvZCwgTmljaG9sYXMgTmV0aGVyY290ZSwgVm9sa2VyIFNjaG1pZHQpCisKKyogQXZvaWQgZG91YmxlIGZjbG9zZSgpIG9mIG91dHB1dCBmaWxlIG9uIGNlcnRhaW4gSS9PIGVycm9yIHBhdGhzLgorICAgICAoU29sYXIgRGVzaWduZXIpCisKKyogRG9uJ3QgZmFpbCB3aXRoIGludGVybmFsIGVycm9yIDEwMDcgd2hlbiBmZWQgYSBsb25nIHN0cmVhbSAoPiA0OE1CKQorICBvZiBieXRlIDI1MS4gIEFsc28gcHJpbnQgdXNlZnVsIG1lc3NhZ2Ugc3VnZ2VzdGluZyB0aGF0IDEwMDdzIG1heSBiZQorICBjYXVzZWQgYnkgYmFkIG1lbW9yeS4KKyAgICAgKG5vdGljZWQgYnkgSnVhbiBQZWRybyBWYWxsZWpvLCBmaXhlZCBieSBtZSkKKworKiBGaXggdW5pbml0aWFsaXNlZCB2YXJpYWJsZSBzaWxseSBidWcgaW4gZGVtbyBwcm9nIGRsbHRlc3QuYy4KKyAgICAgKEpvcmogQmF1ZXIpCisKKyogUmVtb3ZlIDUxMi1NQiBsaW1pdGF0aW9uIG9uIHJlY292ZXJlZCBmaWxlIHNpemUgZm9yIGJ6aXAycmVjb3ZlcgorICBvbiBzZWxlY3RlZCBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCA2NC1iaXQgaW50cy4gIEF0IHRoZSBtb21lbnQKKyAgYWxsIEdDQyBzdXBwb3J0ZWQgcGxhdGZvcm1zLCBhbmQgV2luMzIuCisgICAgIChtZSwgQWxzb24gdmFuIGRlciBNZXVsZW4pCisKKyogSGFyZC1jb2RlIGhlYWRlciBieXRlIHZhbHVlcywgdG8gZ2l2ZSBjb3JyZWN0IG9wZXJhdGlvbiBvbiBwbGF0Zm9ybXMKKyAgdXNpbmcgRUJDRElDIGFzIHRoZWlyIG5hdGl2ZSBjaGFyYWN0ZXIgc2V0IChJQk0ncyBPUy8zOTApLgorICAgICAoTGVsYW5kIEx1Y2l1cykKKworKiBDb3B5IGZpbGUgYWNjZXNzIHRpbWVzIGNvcnJlY3RseS4KKyAgICAgKE1hcnR5IExlaXNuZXIpCisKKyogQWRkIGRpc3RjbGVhbiBhbmQgY2hlY2sgdGFyZ2V0cyB0byBNYWtlZmlsZS4KKyAgICAgKE1pY2hhZWwgQ2FybWFjaykKKworKiBQYXJhbWV0ZXJpc2UgdXNlIG9mIGFyIGFuZCByYW5saWIgaW4gTWFrZWZpbGUuICBBbHNvIGFkZCAkKExERkxBR1MpLgorICAgICAoUmljaCBJcmVsYW5kLCBCbyBUaG9yc2VuKQorCisqIFBhc3MgLXAgKGNyZWF0ZSBwYXJlbnQgZGlycyBhcyBuZWVkZWQpIHRvIG1rZGlyIGR1cmluZyBtYWtlIGluc3RhbGwuCisgICAgIChKZXJlbXkgRnVzY28pCisKKyogRGVyZWZlcmVuY2Ugc3ltbGlua3Mgd2hlbiBjb3B5aW5nIGZpbGUgcGVybWlzc2lvbnMgaW4gLWYgbW9kZS4KKyAgICAgKFZvbGtlciBTY2htaWR0KQorCisqIE1ham9ybHkgc2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgdUludDY0X3FybTEwLgorICAgICAoQm8gTGluZGJlcmdoKQorCisqIENoZWNrIHRoZSBpbnB1dCBmaWxlIHN0aWxsIGV4aXN0cyBiZWZvcmUgZGVsZXRpbmcgdGhlIG91dHB1dCBvbmUsCisgIHdoZW4gYWJvcnRpbmcgaW4gY2xlYW5VcEFuZEZhaWwoKS4KKyAgICAgKEpvZXJnIFByYW50ZSwgUm9iZXJ0IExpbmRlbiwgTWF0dGhpYXMgS3JpbmdzKQorCitBbHNvIGEgYnVuY2ggb2YgcGF0Y2hlcyBjb3VydGVzeSBvZiBQaGlsaXBwZSBUcm9pbiwgdGhlIERlYmlhbiBtYWludGFpbmVyCitvZiBiemlwMjoKKworKiBXcmFwcGVyIHNjcmlwdHMgKHdpdGggbWFucGFnZXMpOiBiemRpZmYsIGJ6Z3JlcCwgYnptb3JlLgorCisqIFNwZWxsaW5nIGNoYW5nZXMgYW5kIG1pbm9yIGVuaGFuY2VtZW50cyBpbiBiemlwMi4xLgorCisqIEF2b2lkIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gY3JlYXRpbmcgdGhlIG91dHB1dCBmaWxlIGFuZCBzZXR0aW5nIGl0cworICBpbnRlcmltIHBlcm1pc3Npb25zIHNhZmVseSwgYnkgdXNpbmcgZm9wZW5fb3V0cHV0X3NhZmVseSgpLgorICBObyBjaGFuZ2VzIHRvIGJ6aXAycmVjb3ZlciBzaW5jZSB0aGVyZSBpcyBubyBpc3N1ZSB3aXRoIGZpbGUKKyAgcGVybWlzc2lvbnMgdGhlcmUuCisKKyogZG8gbm90IHByaW50IHNlbnNlbGVzcyByZXBvcnQgd2l0aCAtdiB3aGVuIGNvbXByZXNzaW5nIGFuIGVtcHR5CisgIGZpbGUuCisKKyogYnpjYXQgLWYgd29ya3Mgb24gbm9uLWJ6aXAyIGZpbGVzLgorCisqIGRvIG5vdCB0cnkgdG8gZXNjYXBlIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBvbiB1bml4ICh0aGUgc2hlbGwgdGFrZXMKKyAgY2FyZSBvZiB0aGVzZSkuCisKKyogYWRkZWQgLS1mYXN0IGFuZCAtLWJlc3QgYWxpYXNlcyBmb3IgLTEgLTkgZm9yIGd6aXAgY29tcGF0aWJpbGl0eS4KKwpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKaW5kZXggODhmYTZkOC4uOWQ0ZmE0MyAxMDA2NDQKLS0tIGEvTElDRU5TRQorKysgYi9MSUNFTlNFCkBAIC0xLDYgKzEsNiBAQAogCiBUaGlzIHByb2dyYW0sICJiemlwMiIgYW5kIGFzc29jaWF0ZWQgbGlicmFyeSAibGliYnppcDIiLCBhcmUKLWNvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNSArMzUsNSBAQAogCiBKdWxpYW4gU2V3YXJkLCBDYW1icmlkZ2UsIFVLLgoganNld2FyZEBhY20ub3JnCi1iemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMCBvZiAyMSBNYXJjaCAyMDAwCitiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC4yIG9mIDMwIERlY2VtYmVyIDIwMDEKIApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBhYjE3ZjQ5Li44MzA1MjM1IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw5ICsxLDIwIEBACiAKIFNIRUxMPS9iaW4vc2gKKworIyBUbyBhc3Npc3QgaW4gY3Jvc3MtY29tcGlsaW5nCiBDQz1nY2MKK0FSPWFyCitSQU5MSUI9cmFubGliCitMREZMQUdTPQorCisjIFN1aXRhYmx5IHBhcmFub2lkIGZsYWdzIHRvIGF2b2lkIGJ1Z3MgaW4gZ2NjLTIuNwogQklHRklMRVM9LURfRklMRV9PRkZTRVRfQklUUz02NAogQ0ZMQUdTPS1XYWxsIC1XaW5saW5lIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAkKEJJR0ZJTEVTKQogCisjIFdoZXJlIHlvdSB3YW50IGl0IGluc3RhbGxlZCB3aGVuIHlvdSBkbyAnbWFrZSBpbnN0YWxsJworUFJFRklYPS91c3IKKworCiBPQkpTPSBibG9ja3NvcnQubyAgXAogICAgICAgaHVmZm1hbi5vICAgIFwKICAgICAgIGNyY3RhYmxlLm8gICBcCkBAIC0xNSwyMCArMjYsMjEgQEAKIGFsbDogbGliYnoyLmEgYnppcDIgYnppcDJyZWNvdmVyIHRlc3QKIAogYnppcDI6IGxpYmJ6Mi5hIGJ6aXAyLm8KLQkkKENDKSAkKENGTEFHUykgLW8gYnppcDIgYnppcDIubyAtTC4gLWxiejIKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBiemlwMiBiemlwMi5vIC1MLiAtbGJ6MgogCiBiemlwMnJlY292ZXI6IGJ6aXAycmVjb3Zlci5vCi0JJChDQykgJChDRkxBR1MpIC1vIGJ6aXAycmVjb3ZlciBiemlwMnJlY292ZXIubworCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vIGJ6aXAycmVjb3ZlciBiemlwMnJlY292ZXIubwogCiBsaWJiejIuYTogJChPQkpTKQogCXJtIC1mIGxpYmJ6Mi5hCi0JYXIgY3EgbGliYnoyLmEgJChPQkpTKQotCUBpZiAoIHRlc3QgLWYgL3Vzci9iaW4vcmFubGliIC1vIC1mIC9iaW4vcmFubGliIC1vIFwKLQkJLWYgL3Vzci9jY3MvYmluL3JhbmxpYiApIDsgdGhlbiBcCi0JCWVjaG8gcmFubGliIGxpYmJ6Mi5hIDsgXAotCQlyYW5saWIgbGliYnoyLmEgOyBcCisJJChBUikgY3EgbGliYnoyLmEgJChPQkpTKQorCUBpZiAoIHRlc3QgLWYgJChSQU5MSUIpIC1vIC1mIC91c3IvYmluL3JhbmxpYiAtbyBcCisJCS1mIC9iaW4vcmFubGliIC1vIC1mIC91c3IvY2NzL2Jpbi9yYW5saWIgKSA7IHRoZW4gXAorCQllY2hvICQoUkFOTElCKSBsaWJiejIuYSA7IFwKKwkJJChSQU5MSUIpIGxpYmJ6Mi5hIDsgXAogCWZpCiAKK2NoZWNrOiB0ZXN0CiB0ZXN0OiBiemlwMgogCUBjYXQgd29yZHMxCiAJLi9iemlwMiAtMSAgPCBzYW1wbGUxLnJlZiA+IHNhbXBsZTEucmIyCkBAIC00NSwxNCArNTcsMTIgQEAKIAljbXAgc2FtcGxlMy50c3Qgc2FtcGxlMy5yZWYKIAlAY2F0IHdvcmRzMwogCi1QUkVGSVg9L3VzcgotCiBpbnN0YWxsOiBiemlwMiBiemlwMnJlY292ZXIKLQlpZiAoIHRlc3QgISAtZCAkKFBSRUZJWCkvYmluICkgOyB0aGVuIG1rZGlyICQoUFJFRklYKS9iaW4gOyBmaQotCWlmICggdGVzdCAhIC1kICQoUFJFRklYKS9saWIgKSA7IHRoZW4gbWtkaXIgJChQUkVGSVgpL2xpYiA7IGZpCi0JaWYgKCB0ZXN0ICEgLWQgJChQUkVGSVgpL21hbiApIDsgdGhlbiBta2RpciAkKFBSRUZJWCkvbWFuIDsgZmkKLQlpZiAoIHRlc3QgISAtZCAkKFBSRUZJWCkvbWFuL21hbjEgKSA7IHRoZW4gbWtkaXIgJChQUkVGSVgpL21hbi9tYW4xIDsgZmkKLQlpZiAoIHRlc3QgISAtZCAkKFBSRUZJWCkvaW5jbHVkZSApIDsgdGhlbiBta2RpciAkKFBSRUZJWCkvaW5jbHVkZSA7IGZpCisJaWYgKCB0ZXN0ICEgLWQgJChQUkVGSVgpL2JpbiApIDsgdGhlbiBta2RpciAtcCAkKFBSRUZJWCkvYmluIDsgZmkKKwlpZiAoIHRlc3QgISAtZCAkKFBSRUZJWCkvbGliICkgOyB0aGVuIG1rZGlyIC1wICQoUFJFRklYKS9saWIgOyBmaQorCWlmICggdGVzdCAhIC1kICQoUFJFRklYKS9tYW4gKSA7IHRoZW4gbWtkaXIgLXAgJChQUkVGSVgpL21hbiA7IGZpCisJaWYgKCB0ZXN0ICEgLWQgJChQUkVGSVgpL21hbi9tYW4xICkgOyB0aGVuIG1rZGlyIC1wICQoUFJFRklYKS9tYW4vbWFuMSA7IGZpCisJaWYgKCB0ZXN0ICEgLWQgJChQUkVGSVgpL2luY2x1ZGUgKSA7IHRoZW4gbWtkaXIgLXAgJChQUkVGSVgpL2luY2x1ZGUgOyBmaQogCWNwIC1mIGJ6aXAyICQoUFJFRklYKS9iaW4vYnppcDIKIAljcCAtZiBiemlwMiAkKFBSRUZJWCkvYmluL2J1bnppcDIKIAljcCAtZiBiemlwMiAkKFBSRUZJWCkvYmluL2J6Y2F0CkBAIC02Nyw3ICs3NywyNiBAQAogCWNobW9kIGErciAkKFBSRUZJWCkvaW5jbHVkZS9iemxpYi5oCiAJY3AgLWYgbGliYnoyLmEgJChQUkVGSVgpL2xpYgogCWNobW9kIGErciAkKFBSRUZJWCkvbGliL2xpYmJ6Mi5hCisJY3AgLWYgYnpncmVwICQoUFJFRklYKS9iaW4vYnpncmVwCisJbG4gJChQUkVGSVgpL2Jpbi9iemdyZXAgJChQUkVGSVgpL2Jpbi9iemVncmVwCisJbG4gJChQUkVGSVgpL2Jpbi9iemdyZXAgJChQUkVGSVgpL2Jpbi9iemZncmVwCisJY2htb2QgYSt4ICQoUFJFRklYKS9iaW4vYnpncmVwCisJY3AgLWYgYnptb3JlICQoUFJFRklYKS9iaW4vYnptb3JlCisJbG4gJChQUkVGSVgpL2Jpbi9iem1vcmUgJChQUkVGSVgpL2Jpbi9iemxlc3MKKwljaG1vZCBhK3ggJChQUkVGSVgpL2Jpbi9iem1vcmUKKwljcCAtZiBiemRpZmYgJChQUkVGSVgpL2Jpbi9iemRpZmYKKwlsbiAkKFBSRUZJWCkvYmluL2J6ZGlmZiAkKFBSRUZJWCkvYmluL2J6Y21wCisJY2htb2QgYSt4ICQoUFJFRklYKS9iaW4vYnpkaWZmCisJY3AgLWYgYnpncmVwLjEgYnptb3JlLjEgYnpkaWZmLjEgJChQUkVGSVgpL21hbi9tYW4xCisJY2htb2QgYStyICQoUFJFRklYKS9tYW4vbWFuMS9iemdyZXAuMQorCWNobW9kIGErciAkKFBSRUZJWCkvbWFuL21hbjEvYnptb3JlLjEKKwljaG1vZCBhK3IgJChQUkVGSVgpL21hbi9tYW4xL2J6ZGlmZi4xCisJZWNobyAiLnNvIG1hbjEvYnpncmVwLjEiID4gJChQUkVGSVgpL21hbi9tYW4xL2J6ZWdyZXAuMQorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoUFJFRklYKS9tYW4vbWFuMS9iemZncmVwLjEKKwllY2hvICIuc28gbWFuMS9iem1vcmUuMSIgPiAkKFBSRUZJWCkvbWFuL21hbjEvYnpsZXNzLjEKKwllY2hvICIuc28gbWFuMS9iemRpZmYuMSIgPiAkKFBSRUZJWCkvbWFuL21hbjEvYnpjbXAuMQogCitkaXN0Y2xlYW46IGNsZWFuCiBjbGVhbjogCiAJcm0gLWYgKi5vIGxpYmJ6Mi5hIGJ6aXAyIGJ6aXAycmVjb3ZlciBcCiAJc2FtcGxlMS5yYjIgc2FtcGxlMi5yYjIgc2FtcGxlMy5yYjIgXApAQCAtOTMsNyArMTIyLDcgQEAKIGJ6aXAycmVjb3Zlci5vOiBiemlwMnJlY292ZXIuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtYyBiemlwMnJlY292ZXIuYwogCi1ESVNUTkFNRT1iemlwMi0xLjAuMQorRElTVE5BTUU9YnppcDItMS4wLjIKIHRhcmZpbGU6CiAJcm0gLWYgJChESVNUTkFNRSkKIAlsbiAtc2YgLiAkKERJU1ROQU1FKQpAQCAtMTEyLDYgKzE0MSw3IEBACiAJICAgJChESVNUTkFNRSkvTWFrZWZpbGUgXAogCSAgICQoRElTVE5BTUUpL21hbnVhbC50ZXhpIFwKIAkgICAkKERJU1ROQU1FKS9tYW51YWwucHMgXAorCSAgICQoRElTVE5BTUUpL21hbnVhbC5wZGYgXAogCSAgICQoRElTVE5BTUUpL0xJQ0VOU0UgXAogCSAgICQoRElTVE5BTUUpL2J6aXAyLjEgXAogCSAgICQoRElTVE5BTUUpL2J6aXAyLjEucHJlZm9ybWF0dGVkIFwKQEAgLTEzOCw0ICsxNjgsMjUgQEAKIAkgICAkKERJU1ROQU1FKS9ZMktfSU5GTyBcCiAJICAgJChESVNUTkFNRSkvdW56Y3Jhc2guYyBcCiAJICAgJChESVNUTkFNRSkvc3Bld0cuYyBcCisJICAgJChESVNUTkFNRSkvbWsyNTEuYyBcCisJICAgJChESVNUTkFNRSkvYnpkaWZmIFwKKwkgICAkKERJU1ROQU1FKS9iemRpZmYuMSBcCisJICAgJChESVNUTkFNRSkvYnptb3JlIFwKKwkgICAkKERJU1ROQU1FKS9iem1vcmUuMSBcCisJICAgJChESVNUTkFNRSkvYnpncmVwIFwKKwkgICAkKERJU1ROQU1FKS9iemdyZXAuMSBcCiAJICAgJChESVNUTkFNRSkvTWFrZWZpbGUtbGliYnoyX3NvCisJZ3ppcCAtdiAkKERJU1ROQU1FKS50YXIKKworIyBGb3IgcmVidWlsZGluZyB0aGUgbWFudWFsIGZyb20gc291cmNlcyBvbiBteSBSZWRIYXQgNy4yIGJveAorbWFudWFsOiBtYW51YWwucHMgbWFudWFsLnBkZiBtYW51YWwuaHRtbAorCittYW51YWwucHM6IG1hbnVhbC50ZXhpCisJdGV4IG1hbnVhbC50ZXhpCisJZHZpcHMgLW8gbWFudWFsLnBzIG1hbnVhbC5kdmkKKworbWFudWFsLnBkZjogbWFudWFsLnBzCisJcHMycGRmIG1hbnVhbC5wcworCittYW51YWwuaHRtbDogbWFudWFsLnRleGkKKwl0ZXhpMmh0bWwgLXNwbGl0X2NoYXB0ZXIgbWFudWFsLnRleGkKZGlmZiAtLWdpdCBhL01ha2VmaWxlLWxpYmJ6Ml9zbyBiL01ha2VmaWxlLWxpYmJ6Ml9zbwppbmRleCBhMzQ3YzUwLi40OTg2ZmUyIDEwMDY0NAotLS0gYS9NYWtlZmlsZS1saWJiejJfc28KKysrIGIvTWFrZWZpbGUtbGliYnoyX3NvCkBAIC0xLDggKzEsOSBAQAogCiAjIFRoaXMgTWFrZWZpbGUgYnVpbGRzIGEgc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIAotIyBsaWJiejIuc28uMS4wLjEsIHdpdGggc29uYW1lIGxpYmJ6Mi5zby4xLjAsCi0jIGF0IGxlYXN0IG9uIHg4Ni1MaW51eCAoUmVkSGF0IDUuMiksIAotIyB3aXRoIGdjYy0yLjcuMi4zLiAgUGxlYXNlIHNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIHNvbWUgCisjIGxpYmJ6Mi5zby4xLjAuMiwgd2l0aCBzb25hbWUgbGliYnoyLnNvLjEuMCwKKyMgYXQgbGVhc3Qgb24geDg2LUxpbnV4IChSZWRIYXQgNy4yKSwgCisjIHdpdGggZ2NjLTIuOTYgMjAwMDA3MzEgKFJlZCBIYXQgTGludXggNy4xIDIuOTYtOTgpLiAgCisjIFBsZWFzZSBzZWUgdGhlIFJFQURNRSBmaWxlIGZvciBzb21lIAogIyBpbXBvcnRhbnQgaW5mbyBhYm91dCBidWlsZGluZyB0aGUgbGlicmFyeSBsaWtlIHRoaXMuCiAKIFNIRUxMPS9iaW4vc2gKQEAgLTE5LDEzICsyMCwxMyBAQAogICAgICAgYnpsaWIubwogCiBhbGw6ICQoT0JKUykKLQkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lIC1XbCxsaWJiejIuc28uMS4wIC1vIGxpYmJ6Mi5zby4xLjAuMSAkKE9CSlMpCi0JJChDQykgJChDRkxBR1MpIC1vIGJ6aXAyLXNoYXJlZCBiemlwMi5jIGxpYmJ6Mi5zby4xLjAuMQorCSQoQ0MpIC1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLGxpYmJ6Mi5zby4xLjAgLW8gbGliYnoyLnNvLjEuMC4yICQoT0JKUykKKwkkKENDKSAkKENGTEFHUykgLW8gYnppcDItc2hhcmVkIGJ6aXAyLmMgbGliYnoyLnNvLjEuMC4yCiAJcm0gLWYgbGliYnoyLnNvLjEuMAotCWxuIC1zIGxpYmJ6Mi5zby4xLjAuMSBsaWJiejIuc28uMS4wCisJbG4gLXMgbGliYnoyLnNvLjEuMC4yIGxpYmJ6Mi5zby4xLjAKIAogY2xlYW46IAotCXJtIC1mICQoT0JKUykgYnppcDIubyBsaWJiejIuc28uMS4wLjEgbGliYnoyLnNvLjEuMCBiemlwMi1zaGFyZWQKKwlybSAtZiAkKE9CSlMpIGJ6aXAyLm8gbGliYnoyLnNvLjEuMC4yIGxpYmJ6Mi5zby4xLjAgYnppcDItc2hhcmVkCiAKIGJsb2Nrc29ydC5vOiBibG9ja3NvcnQuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtYyBibG9ja3NvcnQuYwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDIyOTQ1YTIuLjA3NTA1ZDggMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsMTUgKzEsMTUgQEAKIAogVGhpcyBpcyB0aGUgUkVBRE1FIGZvciBiemlwMiwgYSBibG9jay1zb3J0aW5nIGZpbGUgY29tcHJlc3NvciwgdmVyc2lvbgotMS4wLiAgVGhpcyB2ZXJzaW9uIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgcHVibGljCi1yZWxlYXNlcywgYnppcDItMC4xcGwyLCBiemlwMi0wLjkuMCBhbmQgYnppcDItMC45LjUuCisxLjAuMi4gIFRoaXMgdmVyc2lvbiBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHB1YmxpYworcmVsZWFzZXMsIHZlcnNpb25zIDAuMXBsMiwgMC45LjAsIDAuOS41LCAxLjAuMCBhbmQgMS4wLjEuCiAKLWJ6aXAyLTEuMCBpcyBkaXN0cmlidXRlZCB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlLiAgRm9yIGRldGFpbHMsCitiemlwMi0xLjAuMiBpcyBkaXN0cmlidXRlZCB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlLiAgRm9yIGRldGFpbHMsCiBzZWUgdGhlIGZpbGUgTElDRU5TRS4KIAotQ29tcGxldGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaW4gUG9zdHNjcmlwdCBmb3JtIChtYW51YWwucHMpIG9yCi1odG1sIChtYW51YWxfdG9jLmh0bWwpLiAgQSBwbGFpbi10ZXh0IHZlcnNpb24gb2YgdGhlIG1hbnVhbCBwYWdlIGlzCi1hdmFpbGFibGUgYXMgYnppcDIudHh0LiAgQSBzdGF0ZW1lbnQgYWJvdXQgWTJLIGlzc3VlcyBpcyBub3cgaW5jbHVkZWQKLWluIHRoZSBmaWxlIFkyS19JTkZPLgorQ29tcGxldGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaW4gUG9zdHNjcmlwdCBmb3JtIChtYW51YWwucHMpLAorUERGIChtYW51YWwucGRmLCBhbWF6aW5nbHkgZW5vdWdoKSBvciBodG1sIChtYW51YWxfdG9jLmh0bWwpLiAgQQorcGxhaW4tdGV4dCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgcGFnZSBpcyBhdmFpbGFibGUgYXMgYnppcDIudHh0LiAgCitBIHN0YXRlbWVudCBhYm91dCBZMksgaXNzdWVzIGlzIG5vdyBpbmNsdWRlZCBpbiB0aGUgZmlsZSBZMktfSU5GTy4KIAogCiBIT1cgVE8gQlVJTEQgLS0gVU5JWApAQCAtMzMsMzQgKzMzLDQxIEBACiBIT1cgVE8gQlVJTEQgLS0gVU5JWCwgc2hhcmVkIGxpYnJhcnkgbGliYnoyLnNvLgogCiBEbyAnbWFrZSAtZiBNYWtlZmlsZS1saWJiejJfc28nLiAgVGhpcyBNYWtlZmlsZSBzZWVtcyB0byB3b3JrIGZvcgotTGludXgtRUxGIChSZWRIYXQgNS4yIG9uIGFuIHg4NiBib3gpLCB3aXRoIGdjYy4gIEkgbWFrZSBubyBjbGFpbXMKK0xpbnV4LUVMRiAoUmVkSGF0IDcuMiBvbiBhbiB4ODYgYm94KSwgd2l0aCBnY2MuICBJIG1ha2Ugbm8gY2xhaW1zCiB0aGF0IGl0IHdvcmtzIGZvciBhbnkgb3RoZXIgcGxhdGZvcm0sIHRob3VnaCBJIHN1c3BlY3QgaXQgcHJvYmFibHkKIHdpbGwgd29yayBmb3IgbW9zdCBwbGF0Zm9ybXMgZW1wbG95aW5nIGJvdGggRUxGIGFuZCBnY2MuCiAKLWJ6aXAyLXNoYXJlZCwgYSBjbGllbnQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LCBpcyBhbHNvIGJ1aWxkLCBidXQKLW5vdCBzZWxmLXRlc3RlZC4gIFNvIEkgc3VnZ2VzdCB5b3UgYWxzbyBidWlsZCB1c2luZyB0aGUgbm9ybWFsCi1NYWtlZmlsZSwgc2luY2UgdGhhdCBjb25kdWN0cyBhIHNlbGYtdGVzdC4KK2J6aXAyLXNoYXJlZCwgYSBjbGllbnQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LCBpcyBhbHNvIGJ1aWx0LCBidXQgbm90CitzZWxmLXRlc3RlZC4gIFNvIEkgc3VnZ2VzdCB5b3UgYWxzbyBidWlsZCB1c2luZyB0aGUgbm9ybWFsIE1ha2VmaWxlLAorc2luY2UgdGhhdCBjb25kdWN0cyBhIHNlbGYtdGVzdC4gIEEgc2Vjb25kIHJlYXNvbiB0byBwcmVmZXIgdGhlCit2ZXJzaW9uIHN0YXRpY2FsbHkgbGlua2VkIHRvIHRoZSBsaWJyYXJ5IGlzIHRoYXQsIG9uIHg4NiBwbGF0Zm9ybXMsCitidWlsZGluZyBzaGFyZWQgb2JqZWN0cyBtYWtlcyBhIHZhbHVhYmxlIHJlZ2lzdGVyICglZWJ4KSB1bmF2YWlsYWJsZQordG8gZ2NjLCByZXN1bHRpbmcgaW4gYSBzbG93ZG93biBvZiAxMCUtMjAlLCBhdCBsZWFzdCBmb3IgYnppcDIuCiAKLUltcG9ydGFudCBub3RlIGZvciBwZW9wbGUgdXBncmFkaW5nIC5zbydzIGZyb20gMC45LjAvMC45LjUgdG8KLXZlcnNpb24gMS4wLiAgQWxsIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkgaGF2ZSBiZWVuIHJlbmFtZWQsCi1mcm9tIChlZykgYnpDb21wcmVzcyB0byBCWjJfYnpDb21wcmVzcywgdG8gYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbi4KK0ltcG9ydGFudCBub3RlIGZvciBwZW9wbGUgdXBncmFkaW5nIC5zbydzIGZyb20gMC45LjAvMC45LjUgdG8gdmVyc2lvbgorMS4wLlguICBBbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGlicmFyeSBoYXZlIGJlZW4gcmVuYW1lZCwgZnJvbSAoZWcpCitiekNvbXByZXNzIHRvIEJaMl9iekNvbXByZXNzLCB0byBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgogVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHRoYXQgdGhlIGxpYmJ6Mi5zbyBjcmVhdGVkIGJ5Ci1NYWtlZmlsZS1saWJiejJfc28gd2lsbCBub3Qgd29yayB3aXRoIGFueSBwcm9ncmFtIHdoaWNoIHVzZWQgYW4KLW9sZGVyIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBTb3JyeS4gIEkgZG8gZW5jb3VyYWdlIGxpYnJhcnkKLWNsaWVudHMgdG8gbWFrZSB0aGUgZWZmb3J0IHRvIHVwZ3JhZGUgdG8gdXNlIHZlcnNpb24gMS4wLCBzaW5jZQotaXQgaXMgYm90aCBmYXN0ZXIgYW5kIG1vcmUgcm9idXN0IHRoYW4gcHJldmlvdXMgdmVyc2lvbnMuCitNYWtlZmlsZS1saWJiejJfc28gd2lsbCBub3Qgd29yayB3aXRoIGFueSBwcm9ncmFtIHdoaWNoIHVzZWQgYW4gb2xkZXIKK3ZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBTb3JyeS4gIEkgZG8gZW5jb3VyYWdlIGxpYnJhcnkgY2xpZW50cyB0bworbWFrZSB0aGUgZWZmb3J0IHRvIHVwZ3JhZGUgdG8gdXNlIHZlcnNpb24gMS4wLCBzaW5jZSBpdCBpcyBib3RoIGZhc3RlcgorYW5kIG1vcmUgcm9idXN0IHRoYW4gcHJldmlvdXMgdmVyc2lvbnMuCiAKIAogSE9XIFRPIEJVSUxEIC0tIFdpbmRvd3MgOTUsIE5ULCBET1MsIE1hYywgZXRjLgogCiBJdCdzIGRpZmZpY3VsdCBmb3IgbWUgdG8gc3VwcG9ydCBjb21waWxhdGlvbiBvbiBhbGwgdGhlc2UgcGxhdGZvcm1zLgogTXkgYXBwcm9hY2ggaXMgdG8gY29sbGVjdCBiaW5hcmllcyBmb3IgdGhlc2UgcGxhdGZvcm1zLCBhbmQgcHV0IHRoZW0KLW9uIHRoZSBtYXN0ZXIgd2ViIHBhZ2UgKGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vYnppcDIpLiAgTG9vawotdGhlcmUuICBIb3dldmVyIChGV0lXKSwgYnppcDItMS4wIGlzIHZlcnkgc3RhbmRhcmQgQU5TSSBDIGFuZCBzaG91bGQKLWNvbXBpbGUgdW5tb2RpZmllZCB3aXRoIE1TIFZpc3VhbCBDLiAgRm9yIFdpbjMyLCB0aGVyZSBpcyBvbmUKLWltcG9ydGFudCBjYXZlYXQ6IGluIGJ6aXAyLmMsIHlvdSBtdXN0IHNldCBCWl9VTklYIHRvIDAgYW5kCi1CWl9MQ0NXSU4zMiB0byAxIGJlZm9yZSBidWlsZGluZy4gIElmIHlvdSBoYXZlIGRpZmZpY3VsdGllcyBidWlsZGluZywKLXlvdSBtaWdodCB3YW50IHRvIHJlYWQgUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TLgorb24gdGhlIG1hc3RlciB3ZWIgcGFnZSAoaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9iemlwMikuICBMb29rIHRoZXJlLgorSG93ZXZlciAoRldJVyksIGJ6aXAyLTEuMC5YIGlzIHZlcnkgc3RhbmRhcmQgQU5TSSBDIGFuZCBzaG91bGQgY29tcGlsZQordW5tb2RpZmllZCB3aXRoIE1TIFZpc3VhbCBDLiAgSWYgeW91IGhhdmUgZGlmZmljdWx0aWVzIGJ1aWxkaW5nLCB5b3UKK21pZ2h0IHdhbnQgdG8gcmVhZCBSRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMuCisKK0F0IGxlYXN0IHVzaW5nIE1TIFZpc3VhbCBDKysgNiwgeW91IGNhbiBidWlsZCBmcm9tIHRoZSB1bm1vZGlmaWVkCitzb3VyY2VzIGJ5IGlzc3VpbmcsIGluIGEgY29tbWFuZCBzaGVsbDogCisgICBubWFrZSAtZiBtYWtlZmlsZS5tc2MKKyh5b3UgbWF5IG5lZWQgdG8gZmlyc3QgcnVuIHRoZSBNU1ZDLXByb3ZpZGVkIHNjcmlwdCBWQ1ZBUlMzMi5CQVQKKyBzbyBhcyB0byBzZXQgdXAgcGF0aHMgdG8gdGhlIE1TVkMgdG9vbHMgY29ycmVjdGx5KS4KIAogCiBWQUxJREFUSU9OCkBAIC0xMzgsMjkgKzE0NSwzNyBAQAogICAgKiBNYW55IHNtYWxsIGltcHJvdmVtZW50cyBpbiBmaWxlIGFuZCBmbGFnIGhhbmRsaW5nLgogICAgKiBBIFkySyBzdGF0ZW1lbnQuCiAKLVdIQVQnUyBORVcgSU4gMS4wCitXSEFUJ1MgTkVXIElOIDEuMC4wID8KIAogICAgU2VlIHRoZSBDSEFOR0VTIGZpbGUuCiAKK1dIQVQnUyBORVcgSU4gMS4wLjIgPworCisgICBTZWUgdGhlIENIQU5HRVMgZmlsZS4KKworCiBJIGhvcGUgeW91IGZpbmQgYnppcDIgdXNlZnVsLiAgRmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUgYXQKICAgIGpzZXdhcmRAYWNtLm9yZwogaWYgeW91IGhhdmUgYW55IHN1Z2dlc3Rpb25zIG9yIHF1ZXJpZXMuICBNYW55IHBlb3BsZSBtYWlsZWQgbWUgd2l0aAogY29tbWVudHMsIHN1Z2dlc3Rpb25zIGFuZCBwYXRjaGVzIGFmdGVyIHRoZSByZWxlYXNlcyBvZiBiemlwLTAuMTUsCi1iemlwLTAuMjEsIGJ6aXAyLTAuMXBsMiBhbmQgYnppcDItMC45LjAsIGFuZCB0aGUgY2hhbmdlcyBpbiBiemlwMiBhcmUKLWxhcmdlbHkgYSByZXN1bHQgb2YgdGhpcyBmZWVkYmFjay4gIEkgdGhhbmsgeW91IGZvciB5b3VyIGNvbW1lbnRzLgorYnppcC0wLjIxLCBhbmQgYnppcDIgdmVyc2lvbnMgMC4xcGwyLCAwLjkuMCwgMC45LjUsIDEuMC4wIGFuZCAxLjAuMSwKK2FuZCB0aGUgY2hhbmdlcyBpbiBiemlwMiBhcmUgbGFyZ2VseSBhIHJlc3VsdCBvZiB0aGlzIGZlZWRiYWNrLgorSSB0aGFuayB5b3UgZm9yIHlvdXIgY29tbWVudHMuCiAKIEF0IGxlYXN0IGZvciB0aGUgdGltZSBiZWluZywgYnppcDIncyAiaG9tZSIgaXMgKG9yIGNhbiBiZSByZWFjaGVkIHZpYSkKLWh0dHA6Ly93d3cubXVyYXJvYS5kZW1vbi5jby51ay4KK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnppcDIuCiAKIEp1bGlhbiBTZXdhcmQKIGpzZXdhcmRAYWNtLm9yZwogCi1DYW1icmlkZ2UsIFVLCi0xOCAgIEp1bHkgMTk5NiAodmVyc2lvbiAwLjE1KQotMjUgQXVndXN0IDE5OTYgKHZlcnNpb24gMC4yMSkKLSA3IEF1Z3VzdCAxOTk3IChiemlwMiwgdmVyc2lvbiAwLjEpCi0yOSBBdWd1c3QgMTk5NyAoYnppcDIsIHZlcnNpb24gMC4xcGwyKQotMjMgQXVndXN0IDE5OTggKGJ6aXAyLCB2ZXJzaW9uIDAuOS4wKQotIDggICBKdW5lIDE5OTkgKGJ6aXAyLCB2ZXJzaW9uIDAuOS41KQotIDQgICBTZXB0IDE5OTkgKGJ6aXAyLCB2ZXJzaW9uIDAuOS41ZCkKLSA1ICAgIE1heSAyMDAwIChiemlwMiwgdmVyc2lvbiAxLjBwcmU4KQorQ2FtYnJpZGdlLCBVSyAoYW5kIHdoYXQgYSBncmVhdCB0b3duIHRoaXMgaXMhKQorCisxOCAgICAgSnVseSAxOTk2ICh2ZXJzaW9uIDAuMTUpCisyNSAgIEF1Z3VzdCAxOTk2ICh2ZXJzaW9uIDAuMjEpCisgNyAgIEF1Z3VzdCAxOTk3IChiemlwMiwgdmVyc2lvbiAwLjEpCisyOSAgIEF1Z3VzdCAxOTk3IChiemlwMiwgdmVyc2lvbiAwLjFwbDIpCisyMyAgIEF1Z3VzdCAxOTk4IChiemlwMiwgdmVyc2lvbiAwLjkuMCkKKyA4ICAgICBKdW5lIDE5OTkgKGJ6aXAyLCB2ZXJzaW9uIDAuOS41KQorIDQgICAgIFNlcHQgMTk5OSAoYnppcDIsIHZlcnNpb24gMC45LjVkKQorIDUgICAgICBNYXkgMjAwMCAoYnppcDIsIHZlcnNpb24gMS4wcHJlOCkKKzMwIERlY2VtYmVyIDIwMDEgKGJ6aXAyLCB2ZXJzaW9uIDEuMC4ycHJlMSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMgYi9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMKaW5kZXggZDYyMWFkNS4uYmQxODIyZCAxMDA2NDQKLS0tIGEvUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TCisrKyBiL1JFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUwpAQCAtMTE3LDExICsxMTcsMTEgQEAKICAgQWxsIHRoYXQgc2FpZDogeW91IG1pZ2h0IGJlIGFibGUgdG8gZ2V0IHNvbWV3aGVyZQogICBieSBmaW5kaW5nIHRoZSBsaW5lIGluIE1ha2VmaWxlLWxpYmJ6Ml9zbyB3aGljaCBzYXlzCiAKLSAgJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSAtV2wsbGliYnoyLnNvLjEuMCAtbyBsaWJiejIuc28uMS4wLjEgJChPQkpTKQorICAkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lIC1XbCxsaWJiejIuc28uMS4wIC1vIGxpYmJ6Mi5zby4xLjAuMiAkKE9CSlMpCiAKICAgYW5kIHJlcGxhY2luZyB3aXRoIAogCi0gICgkQ0MpIC1HIC1zaGFyZWQgLW8gbGliYnoyLnNvLjEuMC4xIC1oIGxpYmJ6Mi5zby4xLjAgJChPQkpTKQorICAkKENDKSAtRyAtc2hhcmVkIC1vIGxpYmJ6Mi5zby4xLjAuMiAtaCBsaWJiejIuc28uMS4wICQoT0JKUykKICAgCiAgIElmIGdjYyBvYmplY3RzIHRvIHRoZSBjb21iaW5hdGlvbiAtZnBpYyAtZlBJQywgZ2V0IHJpZCBvZgogICB0aGUgc2Vjb25kIG9uZSwgbGVhdmluZyBqdXN0ICItZnBpYyIuCmRpZmYgLS1naXQgYS9ibG9ja3NvcnQuYyBiL2Jsb2Nrc29ydC5jCmluZGV4IGVjNDI2NzIuLmFiYTNlZmMgMTAwNjQ0Ci0tLSBhL2Jsb2Nrc29ydC5jCisrKyBiL2Jsb2Nrc29ydC5jCkBAIC04LDcgKzgsNyBAQAogICBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIGJ6aXAyIGFuZC9vciBsaWJiemlwMiwgYSBwcm9ncmFtIGFuZAogICBsaWJyYXJ5IGZvciBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTgxLDcgKzk4MSwxNCBAQAogICAgICAgICAgfQogICAgICAgfQogCi0gICAgICBBc3NlcnRIICggY29weVN0YXJ0W3NzXS0xID09IGNvcHlFbmRbc3NdLCAxMDA3ICk7CisgICAgICBBc3NlcnRIICggKGNvcHlTdGFydFtzc10tMSA9PSBjb3B5RW5kW3NzXSkKKyAgICAgICAgICAgICAgICB8fCAKKyAgICAgICAgICAgICAgICAvKiBFeHRyZW1lbHkgcmFyZSBjYXNlIG1pc3NpbmcgaW4gYnppcDItMS4wLjAgYW5kIDEuMC4xLgorICAgICAgICAgICAgICAgICAgIE5lY2Vzc2l0eSBmb3IgdGhpcyBjYXNlIGlzIGRlbW9uc3RyYXRlZCBieSBjb21wcmVzc2luZyAKKyAgICAgICAgICAgICAgICAgICBhIHNlcXVlbmNlIG9mIGFwcHJveGltYXRlbHkgNDguNSBtaWxsaW9uIG9mIGNoYXJhY3RlciAKKyAgICAgICAgICAgICAgICAgICAyNTE7IDEuMC4wLzEuMC4xIHdpbGwgdGhlbiBkaWUgaGVyZS4gKi8KKyAgICAgICAgICAgICAgICAoY29weVN0YXJ0W3NzXSA9PSAwICYmIGNvcHlFbmRbc3NdID09IG5ibG9jay0xKSwKKyAgICAgICAgICAgICAgICAxMDA3ICkKIAogICAgICAgZm9yIChqID0gMDsgaiA8PSAyNTU7IGorKykgZnRhYlsoaiA8PCA4KSArIHNzXSB8PSBTRVRNQVNLOwogCmRpZmYgLS1naXQgYS9iemRpZmYgYi9iemRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyZWI4NQotLS0gL2Rldi9udWxsCisrKyBiL2J6ZGlmZgpAQCAtMCwwICsxLDc2IEBACisjIS9iaW4vc2gKKyMgc2ggaXMgYnVnZ3kgb24gUlMvNjAwMCBBSVggMy4yLiBSZXBsYWNlIGFib3ZlIGxpbmUgd2l0aCAjIS9iaW4va3NoCisKKyMgQnpjbXAvZGlmZiB3cmFwcGVkIGZvciBiemlwMiwgCisjIGFkYXB0ZWQgZnJvbSB6ZGlmZiBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4gZm9yIERlYmlhbiBHTlUvTGludXguCisKKyMgQnpjbXAgYW5kIGJ6ZGlmZiBhcmUgdXNlZCB0byBpbnZva2UgdGhlIGNtcCBvciB0aGUgIGRpZmYgIHByby0KKyMgZ3JhbSAgb24gY29tcHJlc3NlZCBmaWxlcy4gIEFsbCBvcHRpb25zIHNwZWNpZmllZCBhcmUgcGFzc2VkCisjIGRpcmVjdGx5IHRvIGNtcCBvciBkaWZmLiAgSWYgb25seSAxIGZpbGUgaXMgc3BlY2lmaWVkLCAgdGhlbgorIyB0aGUgIGZpbGVzICBjb21wYXJlZCAgYXJlIGZpbGUxIGFuZCBhbiB1bmNvbXByZXNzZWQgZmlsZTEuZ3ouCisjIElmIHR3byBmaWxlcyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZXkgYXJlICB1bmNvbXByZXNzZWQgIChpZgorIyBuZWNlc3NhcnkpIGFuZCBmZWQgdG8gY21wIG9yIGRpZmYuICBUaGUgZXhpdCBzdGF0dXMgZnJvbSBjbXAKKyMgb3IgZGlmZiBpcyBwcmVzZXJ2ZWQuCisKK1BBVEg9Ii91c3IvYmluOiRQQVRIIjsgZXhwb3J0IFBBVEgKK3Byb2c9YGVjaG8gJDAgfCBzZWQgJ3N8LiovfHwnYAorY2FzZSAiJHByb2ciIGluCisgICpjbXApIGNvbXA9JHtDTVAtY21wfSAgIDs7CisgICopICAgIGNvbXA9JHtESUZGLWRpZmZ9IDs7Citlc2FjCisKK09QVElPTlM9CitGSUxFUz0KK2ZvciBBUkcKK2RvCisgICAgY2FzZSAiJEFSRyIgaW4KKyAgICAtKikJT1BUSU9OUz0iJE9QVElPTlMgJEFSRyI7OworICAgICAqKQlpZiB0ZXN0IC1mICIkQVJHIjsgdGhlbgorICAgICAgICAgICAgRklMRVM9IiRGSUxFUyAkQVJHIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICIke3Byb2d9OiAkQVJHIG5vdCBmb3VuZCBvciBub3QgYSByZWd1bGFyIGZpbGUiCisJICAgIGV4aXQgMQorICAgICAgICBmaSA7OworICAgIGVzYWMKK2RvbmUKK2lmIHRlc3QgLXogIiRGSUxFUyI7IHRoZW4KKwllY2hvICJVc2FnZTogJHByb2cgWyR7Y29tcH1fb3B0aW9uc10gZmlsZSBbZmlsZV0iCisJZXhpdCAxCitmaQordG1wPWB0ZW1wZmlsZSAtZCAvdG1wIC1wIGJ6YCB8fCB7CisgICAgICBlY2hvICdjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUnID4mMgorICAgICAgZXhpdCAxCit9CitzZXQgJEZJTEVTCitpZiB0ZXN0ICQjIC1lcSAxOyB0aGVuCisJRklMRT1gZWNobyAiJDEiIHwgc2VkICdzLy5iejIkLy8nYAorCWJ6aXAyIC1jZCAiJEZJTEUuYnoyIiB8ICRjb21wICRPUFRJT05TIC0gIiRGSUxFIgorCVNUQVQ9IiQ/IgorCitlbGlmIHRlc3QgJCMgLWVxIDI7IHRoZW4KKwljYXNlICIkMSIgaW4KKyAgICAgICAgKi5iejIpCisgICAgICAgICAgICAgICAgY2FzZSAiJDIiIGluCisJICAgICAgICAqLmJ6MikKKwkJCUY9YGVjaG8gIiQyIiB8IHNlZCAnc3wuKi98fDtzfC5iejIkfHwnYAorICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQyIiA+ICR0bXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyIC1jZGZxICIkMSIgfCAkY29tcCAkT1BUSU9OUyAtICR0bXAKKyAgICAgICAgICAgICAgICAgICAgICAgIFNUQVQ9IiQ/IgorCQkJL2Jpbi9ybSAtZiAkdG1wOzsKKworICAgICAgICAgICAgICAgICopICAgICAgYnppcDIgLWNkZnEgIiQxIiB8ICRjb21wICRPUFRJT05TIC0gIiQyIgorICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKKyAgICAgICAgICAgICAgICBlc2FjOzsKKyAgICAgICAgKikgICAgICBjYXNlICIkMiIgaW4KKwkgICAgICAgICouYnoyKQorICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQyIiB8ICRjb21wICRPUFRJT05TICIkMSIgLQorICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKKyAgICAgICAgICAgICAgICAqKSAgICAgICRjb21wICRPUFRJT05TICIkMSIgIiQyIgorICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKKyAgICAgICAgICAgICAgICBlc2FjOzsKKwllc2FjCisgICAgICAgIGV4aXQgIiRTVEFUIgorZWxzZQorCWVjaG8gIlVzYWdlOiAkcHJvZyBbJHtjb21wfV9vcHRpb25zXSBmaWxlIFtmaWxlXSIKKwlleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS9iemRpZmYuMSBiL2J6ZGlmZi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjdhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9iemRpZmYuMQpAQCAtMCwwICsxLDQ3IEBACitcIlNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIHptb3JlLjEgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+CitcImZvciBEZWJpYW4gR05VL0xpbnV4CisuVEggQlpESUZGIDEKKy5TSCBOQU1FCitiemNtcCwgYnpkaWZmIFwtIGNvbXBhcmUgYnppcDIgY29tcHJlc3NlZCBmaWxlcworLlNIIFNZTk9QU0lTCisuQiBiemNtcAorWyBjbXBfb3B0aW9ucyBdIGZpbGUxCitbIGZpbGUyIF0KKy5icgorLkIgYnpkaWZmCitbIGRpZmZfb3B0aW9ucyBdIGZpbGUxCitbIGZpbGUyIF0KKy5TSCBERVNDUklQVElPTgorLkkgIEJ6Y21wCithbmQgCisuSSBiemRpZmYKK2FyZSB1c2VkIHRvIGludm9rZSB0aGUKKy5JIGNtcAorb3IgdGhlCisuSSBkaWZmCitwcm9ncmFtIG9uIGJ6aXAyIGNvbXByZXNzZWQgZmlsZXMuICBBbGwgb3B0aW9ucyBzcGVjaWZpZWQgYXJlIHBhc3NlZAorZGlyZWN0bHkgdG8KKy5JIGNtcAorb3IKKy5JUiBkaWZmICIuIgorSWYgb25seSAxIGZpbGUgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWxlcyBjb21wYXJlZCBhcmUKKy5JIGZpbGUxCithbmQgYW4gdW5jb21wcmVzc2VkCisuSVIgZmlsZTEgIi5iejIuIgorSWYgdHdvIGZpbGVzIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhleSBhcmUgdW5jb21wcmVzc2VkIGlmIG5lY2Vzc2FyeSBhbmQgZmVkIHRvCisuSSBjbXAKK29yCisuSVIgZGlmZiAiLiIKK1RoZSBleGl0IHN0YXR1cyBmcm9tIAorLkkgY21wCitvcgorLkkgZGlmZgoraXMgcHJlc2VydmVkLgorLlNIICJTRUUgQUxTTyIKK2NtcCgxKSwgZGlmZigxKSwgYnptb3JlKDEpLCBiemxlc3MoMSksIGJ6Z3JlcCgxKSwgYnppcDIoMSkKKy5TSCBCVUdTCitNZXNzYWdlcyBmcm9tIHRoZQorLkkgY21wCitvcgorLkkgZGlmZgorcHJvZ3JhbXMgcmVmZXIgdG8gdGVtcG9yYXJ5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIHRob3NlIHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL2J6Z3JlcCBiL2J6Z3JlcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmZjMDBlCi0tLSAvZGV2L251bGwKKysrIGIvYnpncmVwCkBAIC0wLDAgKzEsNzEgQEAKKyMhL2Jpbi9zaAorCisjIEJ6Z3JlcCB3cmFwcGVkIGZvciBiemlwMiwgCisjIGFkYXB0ZWQgZnJvbSB6Z3JlcCBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4gZm9yIERlYmlhbiBHTlUvTGludXguCisjIyB6Z3JlcCBub3RpY2U6CisjIyB6Z3JlcCAtLSBhIHdyYXBwZXIgYXJvdW5kIGEgZ3JlcCBwcm9ncmFtIHRoYXQgZGVjb21wcmVzc2VzIGZpbGVzIGFzIG5lZWRlZAorIyMgQWRhcHRlZCBmcm9tIGEgdmVyc2lvbiBzZW50IGJ5IENoYXJsZXMgTGV2ZXJ0IDxjaGFybGVzQGNvbW0ucG9seW10bC5jYT4KKworUEFUSD0iL3Vzci9iaW46JFBBVEgiOyBleHBvcnQgUEFUSAorCitwcm9nPWBlY2hvICQwIHwgc2VkICdzfC4qL3x8J2AKK2Nhc2UgIiRwcm9nIiBpbgorCSplZ3JlcCkJZ3JlcD0ke0VHUkVQLWVncmVwfQk7OworCSpmZ3JlcCkJZ3JlcD0ke0ZHUkVQLWZncmVwfQk7OworCSopCWdyZXA9JHtHUkVQLWdyZXB9CTs7Citlc2FjCitwYXQ9IiIKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgIiQxIiBpbgorICAtZSB8IC1mKSBvcHQ9IiRvcHQgJDEiOyBzaGlmdDsgcGF0PSIkMSIKKyAgICAgICAgICAgaWYgdGVzdCAiJGdyZXAiID0gZ3JlcDsgdGhlbiAgIyBncmVwIGlzIGJ1Z2d5IHdpdGggLWUgb24gU1ZSNAorICAgICAgICAgICAgIGdyZXA9ZWdyZXAKKyAgICAgICAgICAgZmk7OworICAtQSB8IC1CKSBvcHQ9IiRvcHQgJDEgJDIiOyBzaGlmdDs7CisgIC0qKQkgICBvcHQ9IiRvcHQgJDEiOzsKKyAgICopICAgICAgaWYgdGVzdCAteiAiJHBhdCI7IHRoZW4KKwkgICAgIHBhdD0iJDEiCisJICAgZWxzZQorCSAgICAgYnJlYWs7CisgICAgICAgICAgIGZpOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkcGF0IjsgdGhlbgorICBlY2hvICJncmVwIHRocm91Z2ggYnppcDIgZmlsZXMiCisgIGVjaG8gInVzYWdlOiAkcHJvZyBbZ3JlcF9vcHRpb25zXSBwYXR0ZXJuIFtmaWxlc10iCisgIGV4aXQgMQorZmkKKworbGlzdD0wCitzaWxlbnQ9MAorb3A9YGVjaG8gIiRvcHQiIHwgc2VkIC1lICdzLyAvL2cnIC1lICdzLy0vL2cnYAorY2FzZSAiJG9wIiBpbgorICAqbCopIGxpc3Q9MQorZXNhYworY2FzZSAiJG9wIiBpbgorICAqaCopIHNpbGVudD0xCitlc2FjCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgYnppcDIgLWNkZnEgfCAkZ3JlcCAkb3B0ICIkcGF0IgorICBleGl0ICQ/CitmaQorCityZXM9MAorZm9yIGkgZG8KKyAgaWYgdGVzdCAtZiAiJGkiOyB0aGVuIDo7IGVsc2UgaWYgdGVzdCAtZiAiJGkuYnoyIjsgdGhlbiBpPSIkaS5iejIiOyBmaTsgZmkKKyAgaWYgdGVzdCAkbGlzdCAtZXEgMTsgdGhlbgorICAgIGJ6aXAyIC1jZGZxICIkaSIgfCAkZ3JlcCAkb3B0ICIkcGF0IiAyPiYxID4gL2Rldi9udWxsICYmIGVjaG8gJGkKKyAgICByPSQ/CisgIGVsaWYgdGVzdCAkIyAtZXEgMSAtbyAkc2lsZW50IC1lcSAxOyB0aGVuCisgICAgYnppcDIgLWNkZnEgIiRpIiB8ICRncmVwICRvcHQgIiRwYXQiCisgICAgcj0kPworICBlbHNlCisgICAgYnppcDIgLWNkZnEgIiRpIiB8ICRncmVwICRvcHQgIiRwYXQiIHwgc2VkICJzfF58JHtpfTp8IgorICAgIHI9JD8KKyAgZmkKKyAgdGVzdCAiJHIiIC1uZSAwICYmIHJlcz0iJHIiCitkb25lCitleGl0ICRyZXMKZGlmZiAtLWdpdCBhL2J6Z3JlcC4xIGIvYnpncmVwLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwYWY4YwotLS0gL2Rldi9udWxsCisrKyBiL2J6Z3JlcC4xCkBAIC0wLDAgKzEsNTYgQEAKK1wiU2hhbWVsZXNzbHkgY29waWVkIGZyb20gem1vcmUuMSBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4KK1wiZm9yIERlYmlhbiBHTlUvTGludXgKKy5USCBCWkdSRVAgMQorLlNIIE5BTUUKK2J6Z3JlcCwgYnpmZ3JlcCwgYnplZ3JlcCBcLSBzZWFyY2ggcG9zc2libHkgYnppcDIgY29tcHJlc3NlZCBmaWxlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24KKy5TSCBTWU5PUFNJUworLkIgYnpncmVwCitbIGdyZXBfb3B0aW9ucyBdCisuQkkgIFtcIC1lXCBdICIgcGF0dGVybiIKKy5JUiBmaWxlbmFtZSAiLlx8Llx8LiIKKy5icgorLkIgYnplZ3JlcAorWyBlZ3JlcF9vcHRpb25zIF0KKy5CSSAgW1wgLWVcIF0gIiBwYXR0ZXJuIgorLklSIGZpbGVuYW1lICIuXHwuXHwuIgorLmJyCisuQiBiemZncmVwCitbIGZncmVwX29wdGlvbnMgXQorLkJJICBbXCAtZVwgXSAiIHBhdHRlcm4iCisuSVIgZmlsZW5hbWUgIi5cfC5cfC4iCisuU0ggREVTQ1JJUFRJT04KKy5JUiAgQnpncmVwCitpcyB1c2VkIHRvIGludm9rZSB0aGUKKy5JIGdyZXAKK29uIGJ6aXAyLWNvbXByZXNzZWQgZmlsZXMuIEFsbCBvcHRpb25zIHNwZWNpZmllZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvCisuSSBncmVwLgorSWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIHN0YW5kYXJkIGlucHV0IGlzIGRlY29tcHJlc3NlZAoraWYgbmVjZXNzYXJ5IGFuZCBmZWQgdG8gZ3JlcC4KK090aGVyd2lzZSB0aGUgZ2l2ZW4gZmlsZXMgYXJlIHVuY29tcHJlc3NlZCBpZiBuZWNlc3NhcnkgYW5kIGZlZCB0bworLkkgZ3JlcC4KKy5QUAorSWYKKy5JIGJ6Z3JlcAoraXMgaW52b2tlZCBhcworLkkgYnplZ3JlcAorb3IKKy5JIGJ6ZmdyZXAKK3RoZW4KKy5JIGVncmVwCitvcgorLkkgZmdyZXAKK2lzIHVzZWQgaW5zdGVhZCBvZgorLkkgZ3JlcC4KK0lmIHRoZSBHUkVQIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwKKy5JIGJ6Z3JlcAordXNlcyBpdCBhcyB0aGUKKy5JIGdyZXAKK3Byb2dyYW0gdG8gYmUgaW52b2tlZC4gRm9yIGV4YW1wbGU6CisKKyAgICBmb3Igc2g6ICBHUkVQPWZncmVwICBiemdyZXAgc3RyaW5nIGZpbGVzCisgICAgZm9yIGNzaDogKHNldGVudiBHUkVQIGZncmVwOyBiemdyZXAgc3RyaW5nIGZpbGVzKQorLlNIIEFVVEhPUgorQ2hhcmxlcyBMZXZlcnQgKGNoYXJsZXNAY29tbS5wb2x5bXRsLmNhKS4gQWRhcHRlZCB0byBiemlwMiBieSBQaGlsaXBwZQorVHJvaW4gPHBoaWxAZmlmaS5vcmc+IGZvciBEZWJpYW4gR05VL0xpbnV4LgorLlNIICJTRUUgQUxTTyIKK2dyZXAoMSksIGVncmVwKDEpLCBmZ3JlcCgxKSwgYnpkaWZmKDEpLCBiem1vcmUoMSksIGJ6bGVzcygxKSwgYnppcDIoMSkKZGlmZiAtLWdpdCBhL2J6aXAyLjEgYi9iemlwMi4xCmluZGV4IDdkZTU0YTAuLjYyMzQzNWMgMTAwNjQ0Ci0tLSBhL2J6aXAyLjEKKysrIGIvYnppcDIuMQpAQCAtMSw3ICsxLDcgQEAKIC5QVQogLlRIIGJ6aXAyIDEKIC5TSCBOQU1FCi1iemlwMiwgYnVuemlwMiBcLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wCitiemlwMiwgYnVuemlwMiBcLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjIKIC5icgogYnpjYXQgXC0gZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dAogLmJyCkBAIC0xOTcsNyArMTk3LDcgQEAKIC5UUAogLkIgXC16IC0tY29tcHJlc3MKIFRoZSBjb21wbGVtZW50IHRvIFwtZDogZm9yY2VzIGNvbXByZXNzaW9uLCByZWdhcmRsZXNzIG9mIHRoZQotaW52b2thdGlvbiBuYW1lLgoraW52b2NhdGlvbiBuYW1lLgogLlRQCiAuQiBcLXQgLS10ZXN0CiBDaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQgZG9uJ3QgZGVjb21wcmVzcyB0aGVtLgpAQCAtMjExLDYgKzIxMSwxMCBAQAogLkkgYnppcDIgCiB0byBicmVhayBoYXJkIGxpbmtzCiB0byBmaWxlcywgd2hpY2ggaXQgb3RoZXJ3aXNlIHdvdWxkbid0IGRvLgorCitiemlwMiBub3JtYWxseSBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoIGRvbid0IGhhdmUgdGhlCitjb3JyZWN0IG1hZ2ljIGhlYWRlciBieXRlcy4gIElmIGZvcmNlZCAoLWYpLCBob3dldmVyLCBpdCB3aWxsIHBhc3MKK3N1Y2ggZmlsZXMgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIGd6aXAgYmVoYXZlcy4KIC5UUAogLkIgXC1rIC0ta2VlcAogS2VlcCAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcgY29tcHJlc3Npb24KQEAgLTIzOSw5ICsyNDMsMTMgQEAKIC5CIFwtTCAtLWxpY2Vuc2UgLVYgLS12ZXJzaW9uCiBEaXNwbGF5IHRoZSBzb2Z0d2FyZSB2ZXJzaW9uLCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zLgogLlRQCi0uQiBcLTEgdG8gXC05CisuQiBcLTEgKG9yIFwtXC1mYXN0KSB0byBcLTkgKG9yIFwtXC1iZXN0KQogU2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLiAgOTAwIGsgd2hlbiBjb21wcmVzc2luZy4gIEhhcyBubwogZWZmZWN0IHdoZW4gZGVjb21wcmVzc2luZy4gIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4KK1RoZSBcLVwtZmFzdCBhbmQgXC1cLWJlc3QgYWxpYXNlcyBhcmUgcHJpbWFyaWx5IGZvciBHTlUgZ3ppcCAKK2NvbXBhdGliaWxpdHkuICBJbiBwYXJ0aWN1bGFyLCBcLVwtZmFzdCBkb2Vzbid0IG1ha2UgdGhpbmdzCitzaWduaWZpY2FudGx5IGZhc3Rlci4gIAorQW5kIFwtXC1iZXN0IG1lcmVseSBzZWxlY3RzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KIC5UUAogLkIgXC0tCiBUcmVhdHMgYWxsIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFzIGZpbGUgbmFtZXMsIGV2ZW4gaWYgdGhleSBzdGFydApAQCAtMzUyLDExICszNjAsMTEgQEAKIAogLkkgYnppcDJyZWNvdmVyCiB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhbWFnZWQgZmlsZSwgCi1hbmQgd3JpdGVzIGEgbnVtYmVyIG9mIGZpbGVzICJyZWMwMDAxZmlsZS5iejIiLAotInJlYzAwMDJmaWxlLmJ6MiIsIGV0YywgY29udGFpbmluZyB0aGUgIGV4dHJhY3RlZCAgYmxvY2tzLgorYW5kIHdyaXRlcyBhIG51bWJlciBvZiBmaWxlcyAicmVjMDAwMDFmaWxlLmJ6MiIsCisicmVjMDAwMDJmaWxlLmJ6MiIsIGV0YywgY29udGFpbmluZyB0aGUgIGV4dHJhY3RlZCAgYmxvY2tzLgogVGhlICBvdXRwdXQgIGZpbGVuYW1lcyAgYXJlICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZgogd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyAtLSBmb3IgZXhhbXBsZSwgIAotImJ6aXAyIC1kYyAgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGEiIC0tIGxpc3RzIHRoZSBmaWxlcyBpbgorImJ6aXAyIC1kYyAgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGEiIC0tIHByb2Nlc3NlcyB0aGUgZmlsZXMgaW4KIHRoZSBjb3JyZWN0IG9yZGVyLgogCiAuSSBiemlwMnJlY292ZXIKQEAgLTM5NywyNyArNDA1LDMxIEBACiB0cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzIGFuZCBleGl0IGNsZWFubHksIGJ1dCB0aGUgZGV0YWlscyBvZgogd2hhdCB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbSByYXRoZXIgbWlzbGVhZGluZy4KIAotVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMCBvZgorVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMC4yIG9mCiAuSSBiemlwMi4gIAotQ29tcHJlc3NlZAotZGF0YSBjcmVhdGVkIGJ5IHRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcyBhbmQgYmFja3dhcmRzCi1jb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHB1YmxpYyByZWxlYXNlcywgdmVyc2lvbnMgMC4xcGwyLCAwLjkuMAotYW5kIDAuOS41LAotYnV0IHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb246IDAuOS4wIGFuZCBhYm92ZSBjYW4gY29ycmVjdGx5Ci1kZWNvbXByZXNzIG11bHRpcGxlIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLiAgMC4xcGwyIGNhbm5vdCBkbwotdGhpczsgaXQgd2lsbCBzdG9wIGFmdGVyIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QgZmlsZSBpbiB0aGUKLXN0cmVhbS4KK0NvbXByZXNzZWQgZGF0YSBjcmVhdGVkIGJ5IHRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcyBhbmQKK2JhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHB1YmxpYyByZWxlYXNlcywgdmVyc2lvbnMKKzAuMXBsMiwgMC45LjAsIDAuOS41LCAxLjAuMCBhbmQgMS4wLjEsIGJ1dCB3aXRoIHRoZSBmb2xsb3dpbmcKK2V4Y2VwdGlvbjogMC45LjAgYW5kIGFib3ZlIGNhbiBjb3JyZWN0bHkgZGVjb21wcmVzcyBtdWx0aXBsZQorY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuICAwLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgc3RvcAorYWZ0ZXIgZGVjb21wcmVzc2luZyBqdXN0IHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCiAKIC5JIGJ6aXAycmVjb3ZlcgotdXNlcyAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4KLWNvbXByZXNzZWQgZmlsZXMsIHNvIGl0IGNhbm5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlIHRoYW4gNTEyCi1tZWdhYnl0ZXMgbG9uZy4gIFRoaXMgY291bGQgZWFzaWx5IGJlIGZpeGVkLgordmVyc2lvbnMgcHJpb3IgdG8gdGhpcyBvbmUsIDEuMC4yLCB1c2VkIDMyLWJpdCBpbnRlZ2VycyB0byByZXByZXNlbnQKK2JpdCBwb3NpdGlvbnMgaW4gY29tcHJlc3NlZCBmaWxlcywgc28gaXQgY291bGQgbm90IGhhbmRsZSBjb21wcmVzc2VkCitmaWxlcyBtb3JlIHRoYW4gNTEyIG1lZ2FieXRlcyBsb25nLiAgVmVyc2lvbiAxLjAuMiBhbmQgYWJvdmUgdXNlcworNjQtYml0IGludHMgb24gc29tZSBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCB0aGVtIChHTlUgc3VwcG9ydGVkCit0YXJnZXRzLCBhbmQgV2luZG93cykuICBUbyBlc3RhYmxpc2ggd2hldGhlciBvciBub3QgYnppcDJyZWNvdmVyIHdhcworYnVpbHQgd2l0aCBzdWNoIGEgbGltaXRhdGlvbiwgcnVuIGl0IHdpdGhvdXQgYXJndW1lbnRzLiAgSW4gYW55IGV2ZW50Cit5b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGFuIHVubGltaXRlZCB2ZXJzaW9uIGlmIHlvdSBjYW4gcmVjb21waWxlIGl0Cit3aXRoIE1heWJlVUludDY0IHNldCB0byBiZSBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlci4KKworCiAKIC5TSCBBVVRIT1IKIEp1bGlhbiBTZXdhcmQsIGpzZXdhcmRAYWNtLm9yZy4KIAotaHR0cDovL3NvdXJjZXdhcmUuY3lnbnVzLmNvbS9iemlwMgotaHR0cDovL3d3dy5tdXJhcm9hLmRlbW9uLmNvLnVrCitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J6aXAyCiAKIFRoZSBpZGVhcyBlbWJvZGllZCBpbgogLkkgYnppcDIKQEAgLTQzNCw2ICs0NDYsOCBAQAogc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCiB2b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8KIHNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZQotd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkCit3b3JzdC1jYXNlIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlLiAgCitUaGUgYnoqIHNjcmlwdHMgYXJlIGRlcml2ZWQgZnJvbSB0aG9zZSBvZiBHTlUgZ3ppcC4KK01hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkCiB3aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zLCBsZW50IG1hY2hpbmVzLCBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKIGhlbHBmdWwuCmRpZmYgLS1naXQgYS9iemlwMi4xLnByZWZvcm1hdHRlZCBiL2J6aXAyLjEucHJlZm9ybWF0dGVkCmluZGV4IDlmMTgzMzkuLjBmMjBjYjUgMTAwNjQ0Ci0tLSBhL2J6aXAyLjEucHJlZm9ybWF0dGVkCisrKyBiL2J6aXAyLjEucHJlZm9ybWF0dGVkCkBAIC0xLDExICsxLDkgQEAKLQotCi0KIGJ6aXAyKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyKDEpCiAKIAorCiBOCE5BCEFNCE1FCEUKLSAgICAgICBiemlwMiwgYnVuemlwMiAtIGEgYmxvY2stc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAKKyAgICAgICBiemlwMiwgYnVuemlwMiAtIGEgYmxvY2stc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAuMgogICAgICAgIGJ6Y2F0IC0gZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dAogICAgICAgIGJ6aXAycmVjb3ZlciAtIHJlY292ZXJzIGRhdGEgZnJvbSBkYW1hZ2VkIGJ6aXAyIGZpbGVzCiAKQEAgLTIyLDIwICsyMCwyMCBAQAogICAgICAgIHNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sICBhbmQgIEh1ZmZtYW4gIGNvZGluZy4KICAgICAgICBDb21wcmVzc2lvbiAgaXMgIGdlbmVyYWxseSAgY29uc2lkZXJhYmx5ICBiZXR0ZXIgdGhhbiB0aGF0CiAgICAgICAgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwgTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLAotICAgICAgIGFuZCAgYXBwcm9hY2hlcyAgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0gZmFtaWx5IG9mIHN0YS0KKyAgICAgICBhbmQgIGFwcHJvYWNoZXMgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUFBNIGZhbWlseSBvZiBzdGGtCiAgICAgICAgdGlzdGljYWwgY29tcHJlc3NvcnMuCiAKICAgICAgICBUaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgIHRvCiAgICAgICAgdGhvc2Ugb2YgXwhHXwhOXwhVIF8IZ18Iel8IaV8IcF8ILCBidXQgdGhleSBhcmUgbm90IGlkZW50aWNhbC4KIAotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgZXhwZWN0cyAgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZSBjb20tCisgICAgICAgXwhiXwh6XwhpXwhwXwgyICBleHBlY3RzICBhIGxpc3Qgb2YgZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvba0KICAgICAgICBtYW5kLWxpbmUgZmxhZ3MuICBFYWNoIGZpbGUgaXMgcmVwbGFjZWQgIGJ5ICBhICBjb21wcmVzc2VkCiAgICAgICAgdmVyc2lvbiAgb2YgIGl0c2VsZiwgIHdpdGggIHRoZSAgbmFtZSAib3JpZ2luYWxfbmFtZS5iejIiLgotICAgICAgIEVhY2ggY29tcHJlc3NlZCBmaWxlIGhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgIHBlci0KLSAgICAgICBtaXNzaW9ucywgYW5kLCB3aGVuIHBvc3NpYmxlLCBvd25lcnNoaXAgYXMgdGhlIGNvcnJlc3BvbmQtCisgICAgICAgRWFjaCBjb21wcmVzc2VkIGZpbGUgaGFzIHRoZSBzYW1lIG1vZGlmaWNhdGlvbiBkYXRlLCAgcGVyrQorICAgICAgIG1pc3Npb25zLCBhbmQsIHdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZK0KICAgICAgICBpbmcgb3JpZ2luYWwsIHNvIHRoYXQgdGhlc2UgcHJvcGVydGllcyAgY2FuICBiZSAgY29ycmVjdGx5CiAgICAgICAgcmVzdG9yZWQgIGF0ICBkZWNvbXByZXNzaW9uICB0aW1lLiAgIEZpbGUgbmFtZSBoYW5kbGluZyBpcwotICAgICAgIG5haXZlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgcHJlc2Vydi0KKyAgICAgICBuYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIHByZXNlcnatCiAgICAgICAgaW5nICBvcmlnaW5hbCBmaWxlIG5hbWVzLCBwZXJtaXNzaW9ucywgb3duZXJzaGlwcyBvciBkYXRlcwogICAgICAgIGluIGZpbGVzeXN0ZW1zIHdoaWNoIGxhY2sgdGhlc2UgY29uY2VwdHMsIG9yIGhhdmUgIHNlcmlvdXMKICAgICAgICBmaWxlIG5hbWUgbGVuZ3RoIHJlc3RyaWN0aW9ucywgc3VjaCBhcyBNUy1ET1MuCkBAIC01OCwxOCArNTYsNiBAQAogICAgICAgICAgICAgICBmaWxlbmFtZS5iejIgICAgYmVjb21lcyAgIGZpbGVuYW1lCiAgICAgICAgICAgICAgIGZpbGVuYW1lLmJ6ICAgICBiZWNvbWVzICAgZmlsZW5hbWUKICAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0KLQotCi0KLQotYnppcDIoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKLQotCiAgICAgICAgICAgICAgIGZpbGVuYW1lLnRieiAgICBiZWNvbWVzICAgZmlsZW5hbWUudGFyCiAgICAgICAgICAgICAgIGFueW90aGVybmFtZSAgICBiZWNvbWVzICAgYW55b3RoZXJuYW1lLm91dAogCkBAIC03OCwyMyArNjQsMjMgQEAKICAgICAgICBndWVzcyB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHVzZXMgdGhlIG9yaWdpbmFsCiAgICAgICAgbmFtZSB3aXRoIF8ILl8Ib18IdV8IdCBhcHBlbmRlZC4KIAotICAgICAgIEFzICB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8gZmlsZW5hbWVzIGNhdXNlcyBkZWNvbS0KKyAgICAgICBBcyAgd2l0aCBjb21wcmVzc2lvbiwgc3VwcGx5aW5nIG5vIGZpbGVuYW1lcyBjYXVzZXMgZGVjb22tCiAgICAgICAgcHJlc3Npb24gZnJvbSBzdGFuZGFyZCBpbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuCiAKLSAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlIGNvbi0KKyAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlIGNvbq0KICAgICAgICBjYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzCiAgICAgICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLgogICAgICAgIEludGVncml0eSB0ZXN0aW5nICgtdCkgb2YgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMgaXMKICAgICAgICBhbHNvIHN1cHBvcnRlZC4KIAogICAgICAgIFlvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSAgc3RhbmRhcmQKLSAgICAgICBvdXRwdXQgIGJ5IGdpdmluZyB0aGUgLWMgZmxhZy4gIE11bHRpcGxlIGZpbGVzIG1heSBiZSBjb20tCisgICAgICAgb3V0cHV0ICBieSBnaXZpbmcgdGhlIC1jIGZsYWcuICBNdWx0aXBsZSBmaWxlcyBtYXkgYmUgY29trQogICAgICAgIHByZXNzZWQgYW5kIGRlY29tcHJlc3NlZCBsaWtlIHRoaXMuICBUaGUgcmVzdWx0aW5nIG91dHB1dHMKICAgICAgICBhcmUgIGZlZCAgc2VxdWVudGlhbGx5IHRvIHN0ZG91dC4gIENvbXByZXNzaW9uIG9mIG11bHRpcGxlCi0gICAgICAgZmlsZXMgaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtIGNvbnRhaW5pbmcgIG11bHRpLQorICAgICAgIGZpbGVzIGluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbSBjb250YWluaW5nICBtdWx0aa0KICAgICAgICBwbGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudGF0aW9ucy4gIFN1Y2ggYSBzdHJlYW0gY2FuIGJlCiAgICAgICAgZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5ICBieSAgXwhiXwh6XwhpXwhwXwgyICB2ZXJzaW9uICAwLjkuMCAgb3IKLSAgICAgICBsYXRlci4gICBFYXJsaWVyICB2ZXJzaW9ucyBvZiBfCGJfCHpfCGlfCHBfCDIgd2lsbCBzdG9wIGFmdGVyIGRlY29tLQorICAgICAgIGxhdGVyLiAgIEVhcmxpZXIgIHZlcnNpb25zIG9mIF8IYl8Iel8IaV8IcF8IMiB3aWxsIHN0b3AgYWZ0ZXIgZGVjb22tCiAgICAgICAgcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KIAogICAgICAgIF8IYl8Iel8IY18IYV8IdCAob3IgXwhiXwh6XwhpXwhwXwgyIF8ILV8IZF8IY18IKSBkZWNvbXByZXNzZXMgYWxsIHNwZWNpZmllZCAgZmlsZXMgIHRvCkBAIC0xMTUsNyArMTAxLDcgQEAKIAogICAgICAgIEFzIGEgc2VsZi1jaGVjayBmb3IgeW91ciAgcHJvdGVjdGlvbiwgIF8IYl8Iel8IaV8IcF8IMiAgdXNlcyAgMzItYml0CiAgICAgICAgQ1JDcyAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZQotICAgICAgIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cC0KKyAgICAgICBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLiAgVGhpcyBndWFyZHMgYWdhaW5zdCBjb3JydXCtCiAgICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwogICAgICAgIGluIF8IYl8Iel8IaV8IcF8IMiAoaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLiAgVGhlIGNoYW5jZXMgIG9mICBkYXRhCiAgICAgICAgY29ycnVwdGlvbiAgZ29pbmcgIHVuZGV0ZWN0ZWQgIGlzICBtaWNyb3Njb3BpYywgIGFib3V0IG9uZQpAQCAtMTI1LDE3ICsxMTEsNiBAQAogICAgICAgIHlvdSAgcmVjb3ZlciAgdGhlIG9yaWdpbmFsIHVuY29tcHJlc3NlZCBkYXRhLiAgWW91IGNhbiB1c2UKICAgICAgICBfCGJfCHpfCGlfCHBfCDJfCHJfCGVfCGNfCG9fCHZfCGVfCHIgdG8gdHJ5IHRvIHJlY292ZXIgZGF0YSBmcm9tIGRhbWFnZWQgZmlsZXMuCiAKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotCi0KLQotCi0KLWJ6aXAyKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyKDEpCi0KLQogICAgICAgIFJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsICAxICBmb3IgIGVudmlyb25tZW50YWwKICAgICAgICBwcm9ibGVtcyAgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksCiAgICAgICAgMiB0byBpbmRpY2F0ZSBhIGNvcnJ1cHQgY29tcHJlc3NlZCBmaWxlLCAzIGZvciBhbiBpbnRlcm5hbApAQCAtMTU0LDggKzEyOSw4IEBACiAgICAgICAgICAgICAgIGFuZCBmb3JjZXMgXwhiXwh6XwhpXwhwXwgyIHRvIGRlY29tcHJlc3MuCiAKICAgICAgICAtCC16CHogLQgtLQgtYwhjbwhvbQhtcAhwcghyZQhlcwhzcwhzCi0gICAgICAgICAgICAgIFRoZSAgY29tcGxlbWVudCAgdG8gLWQ6IGZvcmNlcyBjb21wcmVzc2lvbiwgcmVnYXJkLQotICAgICAgICAgICAgICBsZXNzIG9mIHRoZSBpbnZva2F0aW9uIG5hbWUuCisgICAgICAgICAgICAgIFRoZSAgIGNvbXBsZW1lbnQgICB0byAgIC1kOiAgIGZvcmNlcyAgIGNvbXByZXNzaW9uLAorICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBpbnZvY2F0aW9uIG5hbWUuCiAKICAgICAgICAtCC10CHQgLQgtLQgtdAh0ZQhlcwhzdAh0CiAgICAgICAgICAgICAgIENoZWNrIGludGVncml0eSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocyksIGJ1dCBkb24ndApAQCAtMTY4LDYgKzE0MywxMSBAQAogICAgICAgICAgICAgICBmb3JjZXMgXwhiXwh6XwhpXwhwXwgyIHRvIGJyZWFrIGhhcmQgbGlua3MgdG8gZmlsZXMsIHdoaWNoIGl0CiAgICAgICAgICAgICAgIG90aGVyd2lzZSB3b3VsZG4ndCBkby4KIAorICAgICAgICAgICAgICBiemlwMiAgbm9ybWFsbHkgIGRlY2xpbmVzIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2gKKyAgICAgICAgICAgICAgZG9uJ3QgaGF2ZSB0aGUgIGNvcnJlY3QgIG1hZ2ljICBoZWFkZXIgIGJ5dGVzLiAgIElmCisgICAgICAgICAgICAgIGZvcmNlZCAgKC1mKSwgIGhvd2V2ZXIsICBpdCAgd2lsbCAgcGFzcyAgc3VjaCBmaWxlcworICAgICAgICAgICAgICB0aHJvdWdoIHVubW9kaWZpZWQuICBUaGlzIGlzIGhvdyBHTlUgZ3ppcCAgYmVoYXZlcy4KKwogICAgICAgIC0ILWsIayAtCC0tCC1rCGtlCGVlCGVwCHAKICAgICAgICAgICAgICAgS2VlcCAgKGRvbid0IGRlbGV0ZSkgaW5wdXQgZmlsZXMgZHVyaW5nIGNvbXByZXNzaW9uCiAgICAgICAgICAgICAgIG9yIGRlY29tcHJlc3Npb24uCkBAIC0xOTAsMjMgKzE3MCwxMSBAQAogICAgICAgIC0ILXEIcSAtCC0tCC1xCHF1CHVpCGllCGV0CHQKICAgICAgICAgICAgICAgU3VwcHJlc3Mgbm9uLWVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLiAgIE1lc3NhZ2VzCiAgICAgICAgICAgICAgIHBlcnRhaW5pbmcgIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLQotCi0KLQotCi1iemlwMigxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMigxKQotCi0KICAgICAgICAgICAgICAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC4KIAogICAgICAgIC0ILXYIdiAtCC0tCC12CHZlCGVyCHJiCGJvCG9zCHNlCGUKICAgICAgICAgICAgICAgVmVyYm9zZSBtb2RlIC0tIHNob3cgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGZvciBlYWNoCi0gICAgICAgICAgICAgIGZpbGUgIHByb2Nlc3NlZC4gICBGdXJ0aGVyICAtdidzICBpbmNyZWFzZSB0aGUgdmVyLQorICAgICAgICAgICAgICBmaWxlICBwcm9jZXNzZWQuICAgRnVydGhlciAgLXYncyAgaW5jcmVhc2UgdGhlIHZlcq0KICAgICAgICAgICAgICAgYm9zaXR5IGxldmVsLCBzcGV3aW5nIG91dCBsb3RzIG9mIGluZm9ybWF0aW9uIHdoaWNoCiAgICAgICAgICAgICAgIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KIApAQCAtMjE0LDIwICsxODIsMjQgQEAKICAgICAgICAgICAgICAgRGlzcGxheSAgdGhlICBzb2Z0d2FyZSAgdmVyc2lvbiwgIGxpY2Vuc2UgdGVybXMgYW5kCiAgICAgICAgICAgICAgIGNvbmRpdGlvbnMuCiAKLSAgICAgICAtCC0xCDEgdAh0bwhvIC0ILTkIOQorICAgICAgIC0ILTEIMSAoCChvCG9yCHIgLQgtLQgtZghmYQhhcwhzdAh0KQgpIHQIdG8IbyAtCC05CDkgKAgobwhvcghyIC0ILS0ILWIIYmUIZXMIc3QIdCkIKQogICAgICAgICAgICAgICBTZXQgdGhlIGJsb2NrIHNpemUgdG8gMTAwIGssIDIwMCBrIC4uICA5MDAgIGsgIHdoZW4KICAgICAgICAgICAgICAgY29tcHJlc3NpbmcuICAgSGFzICBubyAgZWZmZWN0ICB3aGVuIGRlY29tcHJlc3NpbmcuCi0gICAgICAgICAgICAgIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4KKyAgICAgICAgICAgICAgU2VlIE1FTU9SWSBNQU5BR0VNRU5UIGJlbG93LiAgVGhlIC0tZmFzdCBhbmQgLS1iZXN0CisgICAgICAgICAgICAgIGFsaWFzZXMgIGFyZSAgcHJpbWFyaWx5IGZvciBHTlUgZ3ppcCBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCAtLWZhc3QgZG9lc24ndCBtYWtlIHRoaW5ncyAgc2lnbmlmaa0KKyAgICAgICAgICAgICAgY2FudGx5ICBmYXN0ZXIuICAgQW5kICAtLWJlc3QgIG1lcmVseSAgc2VsZWN0cyAgdGhlCisgICAgICAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3VyLgogCiAgICAgICAgLQgtLQgtICAgICBUcmVhdHMgYWxsIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFzIGZpbGUgbmFtZXMsIGV2ZW4KLSAgICAgICAgICAgICAgaWYgdGhleSBzdGFydCB3aXRoIGEgZGFzaC4gIFRoaXMgaXMgc28geW91IGNhbiBoYW4tCisgICAgICAgICAgICAgIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFurQogICAgICAgICAgICAgICBkbGUgZmlsZXMgd2l0aCBuYW1lcyBiZWdpbm5pbmcgIHdpdGggIGEgIGRhc2gsICBmb3IKICAgICAgICAgICAgICAgZXhhbXBsZTogYnppcDIgLS0gLW15ZmlsZW5hbWUuCiAKICAgICAgICAtCC0tCC1yCHJlCGVwCHBlCGV0CHRpCGl0CHRpCGl2CHZlCGUtCC1mCGZhCGFzCHN0CHQgLQgtLQgtcghyZQhlcAhwZQhldAh0aQhpdAh0aQhpdgh2ZQhlLQgtYghiZQhlcwhzdAh0CiAgICAgICAgICAgICAgIFRoZXNlICBmbGFncyAgYXJlICByZWR1bmRhbnQgIGluIHZlcnNpb25zIDAuOS41IGFuZAogICAgICAgICAgICAgICBhYm92ZS4gIFRoZXkgcHJvdmlkZWQgc29tZSBjb2Fyc2UgY29udHJvbCBvdmVyICB0aGUKLSAgICAgICAgICAgICAgYmVoYXZpb3VyICBvZiB0aGUgc29ydGluZyBhbGdvcml0aG0gaW4gZWFybGllciB2ZXItCisgICAgICAgICAgICAgIGJlaGF2aW91ciAgb2YgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyrQogICAgICAgICAgICAgICBzaW9ucywgd2hpY2ggd2FzIHNvbWV0aW1lcyB1c2VmdWwuICAwLjkuNSBhbmQgYWJvdmUKICAgICAgICAgICAgICAgaGF2ZSAgYW4gIGltcHJvdmVkICBhbGdvcml0aG0gIHdoaWNoICByZW5kZXJzIHRoZXNlCiAgICAgICAgICAgICAgIGZsYWdzIGlycmVsZXZhbnQuCkBAIC0yMzgsNyArMjEwLDcgQEAKICAgICAgICBhZmZlY3RzICBib3RoICB0aGUgIGNvbXByZXNzaW9uICByYXRpbyAgYWNoaWV2ZWQsICBhbmQgdGhlCiAgICAgICAgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgogICAgICAgIFRoZSAgZmxhZ3MgIC0xICB0aHJvdWdoICAtOSAgc3BlY2lmeSAgdGhlIGJsb2NrIHNpemUgdG8gYmUKLSAgICAgICAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpICByZXNwZWMtCisgICAgICAgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KSAgcmVzcGVjrQogICAgICAgIHRpdmVseS4gICBBdCAgZGVjb21wcmVzc2lvbiAgdGltZSwgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IKICAgICAgICBjb21wcmVzc2lvbiBpcyByZWFkIGZyb20gIHRoZSAgaGVhZGVyICBvZiAgdGhlICBjb21wcmVzc2VkCiAgICAgICAgZmlsZSwgYW5kIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB0aGVuIGFsbG9jYXRlcyBpdHNlbGYganVzdCBlbm91Z2ggbWVtb3J5CkBAIC0yNTYsMTggKzIyOCw2IEBACiAKICAgICAgICBMYXJnZXIgIGJsb2NrICBzaXplcyAgZ2l2ZSAgcmFwaWRseSAgZGltaW5pc2hpbmcgIG1hcmdpbmFsCiAgICAgICAgcmV0dXJucy4gIE1vc3Qgb2YgdGhlIGNvbXByZXNzaW9uIGNvbWVzIGZyb20gdGhlIGZpcnN0IHR3bwotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLQotCi0KLQotCi1iemlwMigxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMigxKQotCi0KICAgICAgICBvciAgdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluCiAgICAgICAgbWluZCB3aGVuIHVzaW5nIF8IYl8Iel8IaV8IcF8IMiAgb24gIHNtYWxsICBtYWNoaW5lcy4gICBJdCAgaXMgIGFsc28KICAgICAgICBpbXBvcnRhbnQgIHRvICBhcHByZWNpYXRlICB0aGF0ICB0aGUgIGRlY29tcHJlc3Npb24gbWVtb3J5CkBAIC0yNzgsMTMgKzIzOCwxMyBAQAogICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB3aWxsIHJlcXVpcmUgYWJvdXQgMzcwMCBrYnl0ZXMgdG8gZGVjb21wcmVzcy4gICBUbwogICAgICAgIHN1cHBvcnQgZGVjb21wcmVzc2lvbiBvZiBhbnkgZmlsZSBvbiBhIDQgbWVnYWJ5dGUgbWFjaGluZSwKICAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgaGFzIGFuIG9wdGlvbiB0byAgZGVjb21wcmVzcyAgdXNpbmcgIGFwcHJveGltYXRlbHkKLSAgICAgICBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXMtCisgICAgICAgaGFsZiB0aGlzIGFtb3VudCBvZiBtZW1vcnksIGFib3V0IDIzMDAga2J5dGVzLiAgRGVjb21wcmVzrQogICAgICAgIHNpb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsIHNvIHlvdSBzaG91bGQgdXNlICB0aGlzICBvcHRpb24KICAgICAgICBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudCBmbGFnIGlzIC1zLgogCi0gICAgICAgSW4gZ2VuZXJhbCwgdHJ5IGFuZCB1c2UgdGhlIGxhcmdlc3QgYmxvY2sgc2l6ZSBtZW1vcnkgY29uLQorICAgICAgIEluIGdlbmVyYWwsIHRyeSBhbmQgdXNlIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUgbWVtb3J5IGNvbq0KICAgICAgICBzdHJhaW50cyAgYWxsb3csICBzaW5jZSAgdGhhdCAgbWF4aW1pc2VzICB0aGUgIGNvbXByZXNzaW9uCi0gICAgICAgYWNoaWV2ZWQuICAgQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQgYXJlIHZpcnR1LQorICAgICAgIGFjaGlldmVkLiAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0da0KICAgICAgICBhbGx5IHVuYWZmZWN0ZWQgYnkgYmxvY2sgc2l6ZS4KIAogICAgICAgIEFub3RoZXIgc2lnbmlmaWNhbnQgcG9pbnQgYXBwbGllcyB0byBmaWxlcyB3aGljaCBmaXQgaW4gIGEKQEAgLTMwMCwxMSArMjYwLDExIEBACiAKICAgICAgICBIZXJlICBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCiAgICAgICAgZm9yIGRpZmZlcmVudCBibG9jayBzaXplcy4gIEFsc28gIHJlY29yZGVkICBpcyAgdGhlICB0b3RhbAotICAgICAgIGNvbXByZXNzZWQgIHNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlcy0KKyAgICAgICBjb21wcmVzc2VkICBzaXplIGZvciAxNCBmaWxlcyBvZiB0aGUgQ2FsZ2FyeSBUZXh0IENvbXByZXOtCiAgICAgICAgc2lvbiBDb3JwdXMgdG90YWxsaW5nIDMsMTQxLDYyMiBieXRlcy4gIFRoaXMgY29sdW1uICBnaXZlcwogICAgICAgIHNvbWUgIGZlZWwgIGZvciAgaG93ICBjb21wcmVzc2lvbiAgdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4KICAgICAgICBUaGVzZSBmaWd1cmVzIHRlbmQgdG8gdW5kZXJzdGF0ZSB0aGUgYWR2YW50YWdlICBvZiAgbGFyZ2VyCi0gICAgICAgYmxvY2sgIHNpemVzICBmb3IgIGxhcmdlciBmaWxlcywgc2luY2UgdGhlIENvcnB1cyBpcyBkb21pLQorICAgICAgIGJsb2NrICBzaXplcyAgZm9yICBsYXJnZXIgZmlsZXMsIHNpbmNlIHRoZSBDb3JwdXMgaXMgZG9taa0KICAgICAgICBuYXRlZCBieSBzbWFsbGVyIGZpbGVzLgogCiAgICAgICAgICAgICAgICAgICBDb21wcmVzcyAgIERlY29tcHJlc3MgICBEZWNvbXByZXNzICAgQ29ycHVzCkBAIC0zMjEsMjIgKzI4MSw5IEBACiAgICAgICAgICAgICAtOSAgICAgIDc2MDBrICAgICAgMzcwMGsgICAgICAgIDIzNTBrICAgICAgODI4NjQyCiAKIAotCi0KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotCi0KLQotCi0KLWJ6aXAyKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyKDEpCi0KLQogUghSRQhFQwhDTwhPVghWRQhFUghSSQhJTghORwhHIEQIREEIQVQIVEEIQSBGCEZSCFJPCE9NCE0gRAhEQQhBTQhNQQhBRwhHRQhFRAhEIEYIRkkISUwITEUIRVMIUwogICAgICAgIF8IYl8Iel8IaV8IcF8IMiBjb21wcmVzc2VzIGZpbGVzIGluIGJsb2NrcywgdXN1YWxseSA5MDBrYnl0ZXMgIGxvbmcuCi0gICAgICAgRWFjaCBibG9jayBpcyBoYW5kbGVkIGluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zLQorICAgICAgIEVhY2ggYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFuc60KICAgICAgICBtaXNzaW9uIGVycm9yIGNhdXNlcyBhIG11bHRpLWJsb2NrICAuYnoyICBmaWxlICB0byAgYmVjb21lCiAgICAgICAgZGFtYWdlZCwgIGl0ICBtYXkgIGJlICBwb3NzaWJsZSAgdG8gIHJlY292ZXIgZGF0YSBmcm9tIHRoZQogICAgICAgIHVuZGFtYWdlZCBibG9ja3MgaW4gdGhlIGZpbGUuCkBAIC0zNTMsMTkgKzMwMCwxOSBAQAogICAgICAgIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2UKICAgICAgICB3aGljaCBhcmUgdW5kYW1hZ2VkLgogCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtLQotICAgICAgIGFnZWQgZmlsZSwgYW5kIHdyaXRlcyBhIG51bWJlciBvZiBmaWxlcyAicmVjMDAwMWZpbGUuYnoyIiwKLSAgICAgICAicmVjMDAwMmZpbGUuYnoyIiwgZXRjLCBjb250YWluaW5nIHRoZSAgZXh0cmFjdGVkICBibG9ja3MuCi0gICAgICAgVGhlICBvdXRwdXQgIGZpbGVuYW1lcyAgYXJlICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZgotICAgICAgIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb2Nlc3NpbmcgLS0gZm9yIGV4YW1wbGUsICAiYnppcDIKLSAgICAgICAtZGMgICByZWMqZmlsZS5iejIgPiByZWNvdmVyZWRfZGF0YSIgLS0gbGlzdHMgdGhlIGZpbGVzIGluCi0gICAgICAgdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtrQorICAgICAgIGFnZWQgICAgZmlsZSwgICAgYW5kICAgIHdyaXRlcyAgICBhICAgIG51bWJlciAgIG9mICAgZmlsZXMKKyAgICAgICAicmVjMDAwMDFmaWxlLmJ6MiIsICAicmVjMDAwMDJmaWxlLmJ6MiIsICBldGMsICBjb250YWluaW5nCisgICAgICAgdGhlICAgZXh0cmFjdGVkICAgYmxvY2tzLiAgIFRoZSAgIG91dHB1dCAgIGZpbGVuYW1lcyAgIGFyZQorICAgICAgIGRlc2lnbmVkICBzbyAgdGhhdCB0aGUgdXNlIG9mIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb60KKyAgICAgICBjZXNzaW5nICAtLSBmb3IgZXhhbXBsZSwgImJ6aXAyIC1kYyAgcmVjKmZpbGUuYnoyID4gcmVjb3atCisgICAgICAgZXJlZF9kYXRhIiAtLSBwcm9jZXNzZXMgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgogCiAgICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHNob3VsZCBiZSBvZiBtb3N0IHVzZSBkZWFsaW5nIHdpdGggbGFyZ2UgLmJ6MgogICAgICAgIGZpbGVzLCAgYXMgIHRoZXNlIHdpbGwgY29udGFpbiBtYW55IGJsb2Nrcy4gIEl0IGlzIGNsZWFybHkKICAgICAgICBmdXRpbGUgdG8gdXNlIGl0IG9uIGRhbWFnZWQgc2luZ2xlLWJsb2NrICBmaWxlcywgIHNpbmNlICBhCi0gICAgICAgZGFtYWdlZCAgYmxvY2sgIGNhbm5vdCAgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluLQotICAgICAgIGltaXNlIGFueSBwb3RlbnRpYWwgZGF0YSBsb3NzIHRocm91Z2ggbWVkaWEgIG9yICB0cmFuc21pcy0KKyAgICAgICBkYW1hZ2VkICBibG9jayAgY2Fubm90ICBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW6tCisgICAgICAgaW1pc2UgYW55IHBvdGVudGlhbCBkYXRhIGxvc3MgdGhyb3VnaCBtZWRpYSAgb3IgIHRyYW5zbWlzrQogICAgICAgIHNpb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKICAgICAgICBibG9jayBzaXplLgogCkBAIC0zNzksMzEgKzMyNiwxOSBAQAogICAgICAgIGJldHRlciAgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucyBpbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8KICAgICAgICBiZXR3ZWVuIHdvcnN0LWNhc2UgYW5kIGF2ZXJhZ2UtY2FzZSBjb21wcmVzc2lvbiB0aW1lIGlzIGluCiAgICAgICAgdGhlICByZWdpb24gIG9mICAxMDoxLiAgRm9yIHByZXZpb3VzIHZlcnNpb25zLCB0aGlzIGZpZ3VyZQotICAgICAgIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUgLXZ2dnYgb3B0aW9uIHRvIG1vbi0KKyAgICAgICB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlIC12dnZ2IG9wdGlvbiB0byBtb26tCiAgICAgICAgaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgogCiAgICAgICAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZXNlIHBoZW5vbWVuYS4KIAogICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgdXN1YWxseSAgYWxsb2NhdGVzICBzZXZlcmFsICBtZWdhYnl0ZXMgb2YgbWVtb3J5IHRvCi0gICAgICAgb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwgb3ZlciBpdCBpbiBhIGZhaXJseSAgcmFuLQotICAgICAgIGRvbSAgZmFzaGlvbi4gICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsIGJvdGggZm9yIGNvbS0KKyAgICAgICBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5ICByYW6tCisgICAgICAgZG9tICBmYXNoaW9uLiAgIFRoaXMgbWVhbnMgdGhhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgY29trQogICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0KLQotCi0KLQotYnppcDIoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKLQotCiAgICAgICAgc3BlZWQgIGF0ICB3aGljaCAgeW91ciAgbWFjaGluZSAgY2FuIHNlcnZpY2UgY2FjaGUgbWlzc2VzLgogICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byAgcmVkdWNlICB0aGUKICAgICAgICBtaXNzICByYXRlICBoYXZlICBiZWVuIG9ic2VydmVkIHRvIGdpdmUgZGlzcHJvcG9ydGlvbmF0ZWx5Ci0gICAgICAgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLiAgSSBpbWFnaW5lIF8IYl8Iel8IaV8IcF8IMiB3aWxsIHBlci0KKyAgICAgICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUgXwhiXwh6XwhpXwhwXwgyIHdpbGwgcGVyrQogICAgICAgIGZvcm0gYmVzdCBvbiBtYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLgogCiAKQEAgLTQxMyw1MCArMzQ4LDUxIEBACiAgICAgICAgYnV0ICB0aGUgIGRldGFpbHMgIG9mICB3aGF0ICB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbQogICAgICAgIHJhdGhlciBtaXNsZWFkaW5nLgogCi0gICAgICAgVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMCBvZiAgXwhiXwh6XwhpXwhwXwgyXwguICAgQ29tLQorICAgICAgIFRoaXMgbWFudWFsIHBhZ2UgcGVydGFpbnMgdG8gdmVyc2lvbiAxLjAuMiBvZiBfCGJfCHpfCGlfCHBfCDJfCC4gIENvba0KICAgICAgICBwcmVzc2VkICBkYXRhIGNyZWF0ZWQgYnkgdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzCiAgICAgICAgYW5kICBiYWNrd2FyZHMgIGNvbXBhdGlibGUgIHdpdGggICB0aGUgICBwcmV2aW91cyAgIHB1YmxpYwotICAgICAgIHJlbGVhc2VzLCAgdmVyc2lvbnMgIDAuMXBsMiwgMC45LjAgYW5kIDAuOS41LCBidXQgd2l0aCB0aGUKLSAgICAgICBmb2xsb3dpbmcgZXhjZXB0aW9uOiAwLjkuMCBhbmQgYWJvdmUgY2FuIGNvcnJlY3RseSAgZGVjb20tCi0gICAgICAgcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuICAwLjFwbDIgY2FuLQotICAgICAgIG5vdCBkbyB0aGlzOyBpdCB3aWxsIHN0b3AgIGFmdGVyICBkZWNvbXByZXNzaW5nICBqdXN0ICB0aGUKLSAgICAgICBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCisgICAgICAgcmVsZWFzZXMsICB2ZXJzaW9ucyAwLjFwbDIsIDAuOS4wLCAwLjkuNSwgMS4wLjAgYW5kIDEuMC4xLAorICAgICAgIGJ1dCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOiAwLjkuMCBhbmQgYWJvdmUgY2FuIGNvcq0KKyAgICAgICByZWN0bHkgIGRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuCisgICAgICAgMC4xcGwyIGNhbm5vdCBkbyB0aGlzOyBpdCB3aWxsICBzdG9wICBhZnRlciAgZGVjb21wcmVzc2luZworICAgICAgIGp1c3QgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KIAotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciAgdXNlcyAgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudCBiaXQgcG9zaS0KLSAgICAgICB0aW9ucyBpbiBjb21wcmVzc2VkIGZpbGVzLCBzbyBpdCBjYW5ub3QgaGFuZGxlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZXMgIG1vcmUgdGhhbiA1MTIgbWVnYWJ5dGVzIGxvbmcuICBUaGlzIGNvdWxkIGVhc2lseSBiZQotICAgICAgIGZpeGVkLgorICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciAgdmVyc2lvbnMgIHByaW9yICB0byAgdGhpcyAgb25lLCAgMS4wLjIsIHVzZWQKKyAgICAgICAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgIGluICBjb21wcmVzc2VkCisgICAgICAgZmlsZXMsICBzbyAgaXQgY291bGQgbm90IGhhbmRsZSBjb21wcmVzc2VkIGZpbGVzIG1vcmUgdGhhbgorICAgICAgIDUxMiBtZWdhYnl0ZXMgbG9uZy4gIFZlcnNpb24gMS4wLjIgYW5kIGFib3ZlICB1c2VzICA2NC1iaXQKKyAgICAgICBpbnRzICBvbiAgc29tZSBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCB0aGVtIChHTlUgc3VwcG9ydGVkCisgICAgICAgdGFyZ2V0cywgIGFuZCAgV2luZG93cykuICAgVG8gIGVzdGFibGlzaCAgd2hldGhlciAgb3IgIG5vdAorICAgICAgIGJ6aXAycmVjb3ZlciAgd2FzICBidWlsdCAgd2l0aCAgc3VjaCAgYSBsaW1pdGF0aW9uLCBydW4gaXQKKyAgICAgICB3aXRob3V0IGFyZ3VtZW50cy4gIEluIGFueSBldmVudCB5b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGFuCisgICAgICAgdW5saW1pdGVkIHZlcnNpb24gaWYgeW91IGNhbiByZWNvbXBpbGUgaXQgd2l0aCBNYXliZVVJbnQ2NAorICAgICAgIHNldCB0byBiZSBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlci4KKworCiAKIAogQQhBVQhVVAhUSAhITwhPUghSCiAgICAgICAgSnVsaWFuIFNld2FyZCwganNld2FyZEBhY20ub3JnLgogCi0gICAgICAgaHR0cDovL3NvdXJjZXdhcmUuY3lnbnVzLmNvbS9iemlwMgotICAgICAgIGh0dHA6Ly93d3cubXVyYXJvYS5kZW1vbi5jby51aworICAgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnppcDIKIAotICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBfCGJfCHpfCGlfCHBfCDIgYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2wtCi0gICAgICAgbG93aW5nIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgIHRoZQotICAgICAgIGJsb2NrICBzb3J0aW5nICB0cmFuc2Zvcm1hdGlvbiksIERhdmlkIFdoZWVsZXIgKGFnYWluLCBmb3IKLSAgICAgICB0aGUgSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2QtCisgICAgICAgVGhlIGlkZWFzIGVtYm9kaWVkIGluIF8IYl8Iel8IaV8IcF8IMiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbK0KKyAgICAgICBsb3dpbmcgIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlCisgICAgICAgYmxvY2sgc29ydGluZyB0cmFuc2Zvcm1hdGlvbiksIERhdmlkIFdoZWVsZXIgIChhZ2FpbiwgIGZvcgorICAgICAgIHRoZSBIdWZmbWFuIGNvZGVyKSwgUGV0ZXIgRmVud2ljayAoZm9yIHRoZSBzdHJ1Y3R1cmVkIGNvZK0KICAgICAgICBpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsIF8IYl8Iel8IaV8IcF8ILCBhbmQgbWFueSByZWZpbmVtZW50cyksIGFuZAotICAgICAgIEFsaXN0YWlyIE1vZmZhdCwgUmFkZm9yZCBOZWFsICBhbmQgIElhbiAgV2l0dGVuICAoZm9yICB0aGUKKyAgICAgICBBbGlzdGFpciAgTW9mZmF0LCAgUmFkZm9yZCAgTmVhbCAgYW5kICBJYW4gV2l0dGVuIChmb3IgdGhlCiAgICAgICAgYXJpdGhtZXRpYyAgY29kZXIgIGluICB0aGUgIG9yaWdpbmFsICBfCGJfCHpfCGlfCHBfCClfCC4gICBJICBhbSAgbXVjaAotICAgICAgIGluZGVidGVkIGZvciB0aGVpciBoZWxwLCBzdXBwb3J0IGFuZCBhZHZpY2UuICBTZWUgdGhlIG1hbi0KLSAgICAgICB1YWwgIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzIG9mCisgICAgICAgaW5kZWJ0ZWQgZm9yIHRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFurQorICAgICAgIHVhbCBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyAgb2YKICAgICAgICBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMgZW5jb3VyYWdlZCBtZSB0byBsb29rCi0gICAgICAgZm9yICBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLCBzbyBhcyB0byBzcGVlZCB1cCBjb21wcmVzLQorICAgICAgIGZvciBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLCBzbyBhcyB0byBzcGVlZCB1cCAgY29tcHJlc60KICAgICAgICBzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZSB3b3JzdC1jYXNlCi0gICAgICAgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBNYW55IHBlb3BsZSBzZW50IHBhdGNoZXMsIGhlbHBlZAotICAgICAgIHdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUgYWR2aWNlICBhbmQKLSAgICAgICB3ZXJlIGdlbmVyYWxseSBoZWxwZnVsLgorICAgICAgIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlLiAgVGhlIGJ6KiBzY3JpcHRzIGFyZSBkZXJpdmVkIGZyb20KKyAgICAgICB0aG9zZSAgb2YgR05VIGd6aXAuICBNYW55IHBlb3BsZSBzZW50IHBhdGNoZXMsIGhlbHBlZCB3aXRoCisgICAgICAgcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUgYWR2aWNlIGFuZCAgd2VyZQorICAgICAgIGdlbmVyYWxseSBoZWxwZnVsLgogCiAKIAotCi0KLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0KLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKZGlmZiAtLWdpdCBhL2J6aXAyLmMgYi9iemlwMi5jCmluZGV4IDU2YWRmZGMuLjgwN2Y0MjAgMTAwNjQ0Ci0tLSBhL2J6aXAyLmMKKysrIGIvYnppcDIuYwpAQCAtNyw3ICs3LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMywxMyArMTEzLDE2IEBACiAvKi0tCiAgIEdlbmVyaWMgMzItYml0IFVuaXguCiAgIEFsc28gd29ya3Mgb24gNjQtYml0IFVuaXggYm94ZXMuCisgIFRoaXMgaXMgdGhlIGRlZmF1bHQuCiAtLSovCiAjZGVmaW5lIEJaX1VOSVggICAgICAxCiAKIC8qLS0KICAgV2luMzIsIGFzIHNlZW4gYnkgSmFjb2IgTmF2aWEncyBleGNlbGxlbnQKICAgcG9ydCBvZiAoQ2hyaXMgRnJhc2VyICYgRGF2aWQgSGFuc29uKSdzIGV4Y2VsbGVudAotICBsY2MgY29tcGlsZXIuCisgIGxjYyBjb21waWxlci4gIE9yIHdpdGggTVMgVmlzdWFsIEMuCisgIFRoaXMgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpZiBjb21waWxlZCBieSBhIGNvbXBpbGVyIHdoaWNoCisgIGRlZmluZXMgX1dJTjMyLCBub3QgaW5jbHVkaW5nIHRoZSBDeWd3aW4gR0NDLgogLS0qLwogI2RlZmluZSBCWl9MQ0NXSU4zMiAgMAogCkBAIC0xNTYsNiArMTU5LDcgQEAKIC0tKi8KIAogI2lmIEJaX1VOSVgKKyMgICBpbmNsdWRlIDxmY250bC5oPgogIyAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgogIyAgIGluY2x1ZGUgPHV0aW1lLmg+CiAjICAgaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0xNjQsOCArMTY4LDkgQEAKIAogIyAgIGRlZmluZSBQQVRIX1NFUCAgICAnLycKICMgICBkZWZpbmUgTVlfTFNUQVQgICAgbHN0YXQKLSMgICBkZWZpbmUgTVlfU19JRlJFRyAgU19JU1JFRwogIyAgIGRlZmluZSBNWV9TVEFUICAgICBzdGF0CisjICAgZGVmaW5lIE1ZX1NfSVNSRUcgIFNfSVNSRUcKKyMgICBkZWZpbmUgTVlfU19JU0RJUiAgU19JU0RJUgogCiAjICAgZGVmaW5lIEFQUEVORF9GSUxFU1BFQyhyb290LCBuYW1lKSBcCiAgICAgICByb290PXNub2NTdHJpbmcoKHJvb3QpLCAobmFtZSkpCkBAIC0xODAsMTkgKzE4NSwyMyBAQAogIyAgIGVsc2UKICMgICAgICBkZWZpbmUgTk9SRVRVUk4gLyoqLwogIyAgIGVuZGlmCisKICMgICBpZmRlZiBfX0RKR1BQX18KICMgICAgIGluY2x1ZGUgPGlvLmg+CiAjICAgICBpbmNsdWRlIDxmY250bC5oPgogIyAgICAgdW5kZWYgTVlfTFNUQVQKKyMgICAgIHVuZGVmIE1ZX1NUQVQKICMgICAgIGRlZmluZSBNWV9MU1RBVCBzdGF0CisjICAgICBkZWZpbmUgTVlfU1RBVCBzdGF0CiAjICAgICB1bmRlZiBTRVRfQklOQVJZX01PREUKICMgICAgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmQpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgIGludCByZXRWYWwgPSBzZXRtb2RlICggZmlsZW5vICggZmQgKSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fQklOQVJZICk7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fQklOQVJZICk7ICAgICAgICAgICBcCiAgICAgICAgICAgIEVSUk9SX0lGX01JTlVTX09ORSAoIHJldFZhbCApOyAgICAgICAgICAgICAgIFwKICAgICAgICAgfSB3aGlsZSAoIDAgKQogIyAgIGVuZGlmCisKICMgICBpZmRlZiBfX0NZR1dJTl9fCiAjICAgICBpbmNsdWRlIDxpby5oPgogIyAgICAgaW5jbHVkZSA8ZmNudGwuaD4KQEAgLTIwMCwxMSArMjA5LDExIEBACiAjICAgICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZkKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICBpbnQgcmV0VmFsID0gc2V0bW9kZSAoIGZpbGVubyAoIGZkICksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPX0JJTkFSWSApOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPX0JJTkFSWSApOyAgICAgICAgICAgXAogICAgICAgICAgICBFUlJPUl9JRl9NSU5VU19PTkUgKCByZXRWYWwgKTsgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gd2hpbGUgKCAwICkKICMgICBlbmRpZgotI2VuZGlmCisjZW5kaWYgLyogQlpfVU5JWCAqLwogCiAKIApAQCAtMjE3LDQ2ICsyMjYsMjMgQEAKICMgICBkZWZpbmUgUEFUSF9TRVAgICAgICAgJ1xcJwogIyAgIGRlZmluZSBNWV9MU1RBVCAgICAgICBfc3RhdAogIyAgIGRlZmluZSBNWV9TVEFUICAgICAgICBfc3RhdAotIyAgIGRlZmluZSBNWV9TX0lGUkVHKHgpICAoKHgpICYgX1NfSUZSRUcpCisjICAgZGVmaW5lIE1ZX1NfSVNSRUcoeCkgICgoeCkgJiBfU19JRlJFRykKKyMgICBkZWZpbmUgTVlfU19JU0RJUih4KSAgKCh4KSAmIF9TX0lGRElSKQogCiAjICAgZGVmaW5lIEFQUEVORF9GTEFHKHJvb3QsIG5hbWUpIFwKICAgICAgIHJvb3Q9c25vY1N0cmluZygocm9vdCksIChuYW1lKSkKIAotIyAgIGlmIDAKLSAgIC8qLS0gbGNjLXdpbjMyIHNlZW1zIHRvIGV4cGFuZCB3aWxkY2FyZHMgaXRzZWxmIC0tKi8KLSMgICBkZWZpbmUgQVBQRU5EX0ZJTEVTUEVDKHJvb3QsIHNwZWMpICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIGlmICgoc3BlYylbMF0gPT0gJy0nKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJvb3QgPSBzbm9jU3RyaW5nKChyb290KSwgKHNwZWMpKTsgICAgICAgIFwKLSAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN0cnVjdCBfZmluZGRhdGFfdCBjX2ZpbGU7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGxvbmcgaEZpbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGhGaWxlID0gX2ZpbmRmaXJzdCgoc3BlYyksICZjX2ZpbGUpOyAgICAgIFwKLSAgICAgICAgICAgIGlmICggaEZpbGUgPT0gLTFMICkgeyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHJvb3QgPSBzbm9jU3RyaW5nICgocm9vdCksIChzcGVjKSk7ICAgIFwKLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIGludCBhbkludCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHdoaWxlICggYW5JbnQgPT0gMCApIHsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIHJvb3QgPSBzbm9jU3RyaW5nKChyb290KSwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY19maWxlLm5hbWVbMF0pOyAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIGFuSW50ID0gX2ZpbmRuZXh0KGhGaWxlLCAmY19maWxlKTsgIFwKLSAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKLSMgICBlbHNlCiAjICAgZGVmaW5lIEFQUEVORF9GSUxFU1BFQyhyb290LCBuYW1lKSAgICAgICAgICAgICAgICBcCiAgICAgICByb290ID0gc25vY1N0cmluZyAoKHJvb3QpLCAobmFtZSkpCi0jICAgZW5kaWYKIAogIyAgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmQpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgaW50IHJldFZhbCA9IHNldG1vZGUgKCBmaWxlbm8gKCBmZCApLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fQklOQVJZICk7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPX0JJTkFSWSApOyAgICAgICAgICAgXAogICAgICAgICAgRVJST1JfSUZfTUlOVVNfT05FICggcmV0VmFsICk7ICAgICAgICAgICAgICAgXAogICAgICAgfSB3aGlsZSAoIDAgKQogCi0jZW5kaWYKKyNlbmRpZiAvKiBCWl9MQ0NXSU4zMiAqLwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTMzOCw2ICszMjQsNyBAQAogICAgc3RydWN0IHsgVUNoYXIgYls4XTsgfSAKICAgIFVJbnQ2NDsKIAorCiBzdGF0aWMKIHZvaWQgdUludDY0X2Zyb21fVUludDMycyAoIFVJbnQ2NCogbiwgVUludDMyIGxvMzIsIFVJbnQzMiBoaTMyICkKIHsKQEAgLTM1MSw2ICszMzgsNyBAQAogICAgbi0+YlswXSA9IChVQ2hhcikgKGxvMzIgICAgICAgICYgMHhGRik7CiB9CiAKKwogc3RhdGljCiBkb3VibGUgdUludDY0X3RvX2RvdWJsZSAoIFVJbnQ2NCogbiApCiB7CkBAIC0zNjQsNzcgKzM1Miw2IEBACiAgICByZXR1cm4gc3VtOwogfQogCi1zdGF0aWMKLXZvaWQgdUludDY0X2FkZCAoIFVJbnQ2NCogc3JjLCBVSW50NjQqIGRzdCApCi17Ci0gICBJbnQzMiBpOwotICAgSW50MzIgY2FycnkgPSAwOwotICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotICAgICAgY2FycnkgKz0gKCAoKEludDMyKXNyYy0+YltpXSkgKyAoKEludDMyKWRzdC0+YltpXSkgKTsKLSAgICAgIGRzdC0+YltpXSA9IChVQ2hhcikoY2FycnkgJiAweEZGKTsKLSAgICAgIGNhcnJ5ID4+PSA4OwotICAgfQotfQotCi1zdGF0aWMKLXZvaWQgdUludDY0X3N1YiAoIFVJbnQ2NCogc3JjLCBVSW50NjQqIGRzdCApCi17Ci0gICBJbnQzMiB0LCBpOwotICAgSW50MzIgYm9ycm93ID0gMDsKLSAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgIHQgPSAoKEludDMyKWRzdC0+YltpXSkgLSAoKEludDMyKXNyYy0+YltpXSkgLSBib3Jyb3c7Ci0gICAgICBpZiAodCA8IDApIHsKLSAgICAgICAgIGRzdC0+YltpXSA9IChVQ2hhcikodCArIDI1Nik7Ci0gICAgICAgICBib3Jyb3cgPSAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgIGRzdC0+YltpXSA9IChVQ2hhcil0OwotICAgICAgICAgYm9ycm93ID0gMDsKLSAgICAgIH0KLSAgIH0KLX0KLQotc3RhdGljCi12b2lkIHVJbnQ2NF9tdWwgKCBVSW50NjQqIGEsIFVJbnQ2NCogYiwgVUludDY0KiByX2hpLCBVSW50NjQqIHJfbG8gKQotewotICAgVUNoYXIgc3VtWzE2XTsKLSAgIEludDMyIGlhLCBpYiwgY2Fycnk7Ci0gICBmb3IgKGlhID0gMDsgaWEgPCAxNjsgaWErKykgc3VtW2lhXSA9IDA7Ci0gICBmb3IgKGlhID0gMDsgaWEgPCA4OyBpYSsrKSB7Ci0gICAgICBjYXJyeSA9IDA7Ci0gICAgICBmb3IgKGliID0gMDsgaWIgPCA4OyBpYisrKSB7Ci0gICAgICAgICBjYXJyeSArPSAoICgoSW50MzIpc3VtW2lhK2liXSkgCi0gICAgICAgICAgICAgICAgICAgICsgKChJbnQzMilhLT5iW2lhXSkgKiAoKEludDMyKWItPmJbaWJdKSApOwotICAgICAgICAgc3VtW2lhK2liXSA9IChVQ2hhcikoY2FycnkgJiAweEZGKTsKLSAgICAgICAgIGNhcnJ5ID4+PSA4OwotICAgICAgfQotICAgICAgc3VtW2lhKzhdID0gKFVDaGFyKShjYXJyeSAmIDB4RkYpOwotICAgICAgaWYgKChjYXJyeSA+Pj0gOCkgIT0gMCkgcGFuaWMgKCAidUludDY0X211bCIgKTsKLSAgIH0KLQotICAgZm9yIChpYSA9IDA7IGlhIDwgODsgaWErKykgcl9oaS0+YltpYV0gPSBzdW1baWErOF07Ci0gICBmb3IgKGlhID0gMDsgaWEgPCA4OyBpYSsrKSByX2xvLT5iW2lhXSA9IHN1bVtpYV07Ci19Ci0KLQotc3RhdGljCi12b2lkIHVJbnQ2NF9zaHIxICggVUludDY0KiBuICkKLXsKLSAgIEludDMyIGk7Ci0gICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICBuLT5iW2ldID4+PSAxOwotICAgICAgaWYgKGkgPCA3ICYmIChuLT5iW2krMV0gJiAxKSkgbi0+YltpXSB8PSAweDgwOwotICAgfQotfQotCi1zdGF0aWMKLXZvaWQgdUludDY0X3NobDEgKCBVSW50NjQqIG4gKQotewotICAgSW50MzIgaTsKLSAgIGZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICBuLT5iW2ldIDw8PSAxOwotICAgICAgaWYgKGkgPiAwICYmIChuLT5iW2ktMV0gJiAweDgwKSkgbi0+YltpXSsrOwotICAgfQotfQogCiBzdGF0aWMKIEJvb2wgdUludDY0X2lzWmVybyAoIFVJbnQ2NCogbiApCkBAIC00NDUsNDkgKzM2MiwyMyBAQAogICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYworCisvKiBEaXZpZGUgKm4gYnkgMTAsIGFuZCByZXR1cm4gdGhlIHJlbWFpbmRlci4gICovCitzdGF0aWMgCiBJbnQzMiB1SW50NjRfcXJtMTAgKCBVSW50NjQqIG4gKQogewotICAgLyogRGl2aWRlICpuIGJ5IDEwLCBhbmQgcmV0dXJuIHRoZSByZW1haW5kZXIuICBMb25nIGRpdmlzaW9uCi0gICAgICBpcyBkaWZmaWN1bHQsIHNvIHdlIGNoZWF0IGFuZCBpbnN0ZWFkIG11bHRpcGx5IGJ5Ci0gICAgICAweENDQ0MgQ0NDQyBDQ0NDIENDQ0QsIHdoaWNoIGlzIDAuOCAodml6LCAwLjEgPDwgMykuCi0gICAqLworICAgVUludDMyIHJlbSwgdG1wOwogICAgSW50MzIgIGk7Ci0gICBVSW50NjQgdG1wMSwgdG1wMiwgbl9vcmlnLCB6ZXJvX3BvaW50X2VpZ2h0OwotCi0gICB6ZXJvX3BvaW50X2VpZ2h0LmJbMV0gPSB6ZXJvX3BvaW50X2VpZ2h0LmJbMl0gPSAKLSAgIHplcm9fcG9pbnRfZWlnaHQuYlszXSA9IHplcm9fcG9pbnRfZWlnaHQuYls0XSA9IAotICAgemVyb19wb2ludF9laWdodC5iWzVdID0gemVyb19wb2ludF9laWdodC5iWzZdID0gCi0gICB6ZXJvX3BvaW50X2VpZ2h0LmJbN10gPSAweENDOwotICAgemVyb19wb2ludF9laWdodC5iWzBdID0gMHhDRDsKLQotICAgbl9vcmlnID0gKm47Ci0KLSAgIC8qIGRpdmlkZSBuIGJ5IDEwLCAKLSAgICAgIGJ5IG11bHRpcGx5aW5nIGJ5IDAuOCBhbmQgdGhlbiBzaGlmdGluZyByaWdodCAzIHRpbWVzICovCi0gICB1SW50NjRfbXVsICggbiwgJnplcm9fcG9pbnRfZWlnaHQsICZ0bXAxLCAmdG1wMiApOwotICAgdUludDY0X3NocjEoJnRtcDEpOyB1SW50NjRfc2hyMSgmdG1wMSk7IHVJbnQ2NF9zaHIxKCZ0bXAxKTsgCi0gICAqbiA9IHRtcDE7Ci0gICAKLSAgIC8qIHRtcDEgPSA4Km4sIHRtcDIgPSAyKm4gKi8KLSAgIHVJbnQ2NF9zaGwxKCZ0bXAxKTsgdUludDY0X3NobDEoJnRtcDEpOyB1SW50NjRfc2hsMSgmdG1wMSk7Ci0gICB0bXAyID0gKm47IHVJbnQ2NF9zaGwxKCZ0bXAyKTsKLQotICAgLyogdG1wMSA9IDEwKm4gKi8KLSAgIHVJbnQ2NF9hZGQgKCAmdG1wMiwgJnRtcDEgKTsKLQotICAgLyogbl9vcmlnID0gbl9vcmlnIC0gMTAqbiAqLwotICAgdUludDY0X3N1YiAoICZ0bXAxLCAmbl9vcmlnICk7Ci0KLSAgIC8qIG5fb3JpZyBzaG91bGQgbm93IGhvbGQgcXVvdGllbnQsIGluIHJhbmdlIDAgLi4gOSAqLwotICAgZm9yIChpID0gNzsgaSA+PSAxOyBpLS0pIAotICAgICAgaWYgKG5fb3JpZy5iW2ldICE9IDApIHBhbmljICggInVJbnQ2NF9xcm0xMCgxKSIgKTsKLSAgIGlmIChuX29yaWcuYlswXSA+IDkpCi0gICAgICBwYW5pYyAoICJ1SW50NjRfcXJtMTAoMikiICk7Ci0KLSAgIHJldHVybiAoaW50KW5fb3JpZy5iWzBdOworICAgcmVtID0gMDsKKyAgIGZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisgICAgICB0bXAgPSByZW0gKiAyNTYgKyBuLT5iW2ldOworICAgICAgbi0+YltpXSA9IHRtcCAvIDEwOworICAgICAgcmVtID0gdG1wICUgMTA7CisgICB9CisgICByZXR1cm4gcmVtOwogfQogCisKIC8qIC4uLiBhbmQgdGhlIFdob2xlIEVudGlyZSBQb2ludCBvZiBhbGwgdGhpcyBVSW50NjQgc3R1ZmYgaXMKICAgIHNvIHRoYXQgd2UgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgogKi8KQEAgLTUwNCw3ICszOTUsOCBAQAogICAgICAgbkJ1ZisrOwogICAgfSB3aGlsZSAoIXVJbnQ2NF9pc1plcm8oJm5fY29weSkpOwogICAgb3V0YnVmW25CdWZdID0gMDsKLSAgIGZvciAoaSA9IDA7IGkgPCBuQnVmOyBpKyspIG91dGJ1ZltpXSA9IGJ1ZltuQnVmLWktMV07CisgICBmb3IgKGkgPSAwOyBpIDwgbkJ1ZjsgaSsrKSAKKyAgICAgIG91dGJ1ZltpXSA9IGJ1ZltuQnVmLWktMV07CiB9CiAKIApAQCAtNTY2LDM1ICs0NTgsMzggQEAKICAgIGlmIChyZXQgPT0gRU9GKSBnb3RvIGVycmhhbmRsZXJfaW87CiAgICBpZiAoelN0cmVhbSAhPSBzdGRvdXQpIHsKICAgICAgIHJldCA9IGZjbG9zZSAoIHpTdHJlYW0gKTsKKyAgICAgIG91dHB1dEhhbmRsZUp1c3RJbkNhc2UgPSBOVUxMOwogICAgICAgaWYgKHJldCA9PSBFT0YpIGdvdG8gZXJyaGFuZGxlcl9pbzsKICAgIH0KKyAgIG91dHB1dEhhbmRsZUp1c3RJbkNhc2UgPSBOVUxMOwogICAgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CiAgICByZXQgPSBmY2xvc2UgKCBzdHJlYW0gKTsKICAgIGlmIChyZXQgPT0gRU9GKSBnb3RvIGVycmhhbmRsZXJfaW87CiAKLSAgIGlmIChuYnl0ZXNfaW5fbG8zMiA9PSAwICYmIG5ieXRlc19pbl9oaTMyID09IDApIAotICAgICAgbmJ5dGVzX2luX2xvMzIgPSAxOwotCiAgICBpZiAodmVyYm9zaXR5ID49IDEpIHsKLSAgICAgIENoYXIgICBidWZfbmluWzMyXSwgYnVmX25vdXRbMzJdOwotICAgICAgVUludDY0IG5ieXRlc19pbiwgICBuYnl0ZXNfb3V0OwotICAgICAgZG91YmxlIG5ieXRlc19pbl9kLCBuYnl0ZXNfb3V0X2Q7Ci0gICAgICB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19pbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJ5dGVzX2luX2xvMzIsIG5ieXRlc19pbl9oaTMyICk7Ci0gICAgICB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19vdXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ieXRlc19vdXRfbG8zMiwgbmJ5dGVzX291dF9oaTMyICk7Ci0gICAgICBuYnl0ZXNfaW5fZCAgPSB1SW50NjRfdG9fZG91YmxlICggJm5ieXRlc19pbiApOwotICAgICAgbmJ5dGVzX291dF9kID0gdUludDY0X3RvX2RvdWJsZSAoICZuYnl0ZXNfb3V0ICk7Ci0gICAgICB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9uaW4sICZuYnl0ZXNfaW4gKTsKLSAgICAgIHVJbnQ2NF90b0FzY2lpICggYnVmX25vdXQsICZuYnl0ZXNfb3V0ICk7Ci0gICAgICBmcHJpbnRmICggc3RkZXJyLCAiJTYuM2Y6MSwgJTYuM2YgYml0cy9ieXRlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiJTUuMmYlJSBzYXZlZCwgJXMgaW4sICVzIG91dC5cbiIsCi0gICAgICAgICAgICAgICAgbmJ5dGVzX2luX2QgLyBuYnl0ZXNfb3V0X2QsCi0gICAgICAgICAgICAgICAgKDguMCAqIG5ieXRlc19vdXRfZCkgLyBuYnl0ZXNfaW5fZCwKLSAgICAgICAgICAgICAgICAxMDAuMCAqICgxLjAgLSBuYnl0ZXNfb3V0X2QgLyBuYnl0ZXNfaW5fZCksCi0gICAgICAgICAgICAgICAgYnVmX25pbiwKLSAgICAgICAgICAgICAgICBidWZfbm91dAotICAgICAgICAgICAgICApOworICAgICAgaWYgKG5ieXRlc19pbl9sbzMyID09IDAgJiYgbmJ5dGVzX2luX2hpMzIgPT0gMCkgeworCSBmcHJpbnRmICggc3RkZXJyLCAiIG5vIGRhdGEgY29tcHJlc3NlZC5cbiIpOworICAgICAgfSBlbHNlIHsKKwkgQ2hhciAgIGJ1Zl9uaW5bMzJdLCBidWZfbm91dFszMl07CisJIFVJbnQ2NCBuYnl0ZXNfaW4sICAgbmJ5dGVzX291dDsKKwkgZG91YmxlIG5ieXRlc19pbl9kLCBuYnl0ZXNfb3V0X2Q7CisJIHVJbnQ2NF9mcm9tX1VJbnQzMnMgKCAmbmJ5dGVzX2luLCAKKwkJCSAgICAgICBuYnl0ZXNfaW5fbG8zMiwgbmJ5dGVzX2luX2hpMzIgKTsKKwkgdUludDY0X2Zyb21fVUludDMycyAoICZuYnl0ZXNfb3V0LCAKKwkJCSAgICAgICBuYnl0ZXNfb3V0X2xvMzIsIG5ieXRlc19vdXRfaGkzMiApOworCSBuYnl0ZXNfaW5fZCAgPSB1SW50NjRfdG9fZG91YmxlICggJm5ieXRlc19pbiApOworCSBuYnl0ZXNfb3V0X2QgPSB1SW50NjRfdG9fZG91YmxlICggJm5ieXRlc19vdXQgKTsKKwkgdUludDY0X3RvQXNjaWkgKCBidWZfbmluLCAmbmJ5dGVzX2luICk7CisJIHVJbnQ2NF90b0FzY2lpICggYnVmX25vdXQsICZuYnl0ZXNfb3V0ICk7CisJIGZwcmludGYgKCBzdGRlcnIsICIlNi4zZjoxLCAlNi4zZiBiaXRzL2J5dGUsICIKKwkJICAgIiU1LjJmJSUgc2F2ZWQsICVzIGluLCAlcyBvdXQuXG4iLAorCQkgICBuYnl0ZXNfaW5fZCAvIG5ieXRlc19vdXRfZCwKKwkJICAgKDguMCAqIG5ieXRlc19vdXRfZCkgLyBuYnl0ZXNfaW5fZCwKKwkJICAgMTAwLjAgKiAoMS4wIC0gbmJ5dGVzX291dF9kIC8gbmJ5dGVzX2luX2QpLAorCQkgICBidWZfbmluLAorCQkgICBidWZfbm91dAorCQkgKTsKKyAgICAgIH0KICAgIH0KIAogICAgcmV0dXJuOwpAQCAtNjUyLDcgKzU0Nyw3IEBACiAKICAgICAgIHdoaWxlIChiemVyciA9PSBCWl9PSykgewogICAgICAgICAgbnJlYWQgPSBCWjJfYnpSZWFkICggJmJ6ZXJyLCBiemYsIG9idWYsIDUwMDAgKTsKLSAgICAgICAgIGlmIChiemVyciA9PSBCWl9EQVRBX0VSUk9SX01BR0lDKSBnb3RvIGVycmhhbmRsZXI7CisgICAgICAgICBpZiAoYnplcnIgPT0gQlpfREFUQV9FUlJPUl9NQUdJQykgZ290byB0cnljYXQ7CiAgICAgICAgICBpZiAoKGJ6ZXJyID09IEJaX09LIHx8IGJ6ZXJyID09IEJaX1NUUkVBTV9FTkQpICYmIG5yZWFkID4gMCkKICAgICAgICAgICAgIGZ3cml0ZSAoIG9idWYsIHNpemVvZihVQ2hhciksIG5yZWFkLCBzdHJlYW0gKTsKICAgICAgICAgIGlmIChmZXJyb3Ioc3RyZWFtKSkgZ290byBlcnJoYW5kbGVyX2lvOwpAQCAtNjY4LDkgKzU2Myw5IEBACiAgICAgICBpZiAoYnplcnIgIT0gQlpfT0spIHBhbmljICggImRlY29tcHJlc3M6YnpSZWFkR2V0VW51c2VkIiApOwogCiAgICAgICBpZiAoblVudXNlZCA9PSAwICYmIG15ZmVvZih6U3RyZWFtKSkgYnJlYWs7Ci0KICAgIH0KIAorICAgY2xvc2VvazoKICAgIGlmIChmZXJyb3IoelN0cmVhbSkpIGdvdG8gZXJyaGFuZGxlcl9pbzsKICAgIHJldCA9IGZjbG9zZSAoIHpTdHJlYW0gKTsKICAgIGlmIChyZXQgPT0gRU9GKSBnb3RvIGVycmhhbmRsZXJfaW87CkBAIC02ODAsMTEgKzU3NSwyNiBAQAogICAgaWYgKHJldCAhPSAwKSBnb3RvIGVycmhhbmRsZXJfaW87CiAgICBpZiAoc3RyZWFtICE9IHN0ZG91dCkgewogICAgICAgcmV0ID0gZmNsb3NlICggc3RyZWFtICk7CisgICAgICBvdXRwdXRIYW5kbGVKdXN0SW5DYXNlID0gTlVMTDsKICAgICAgIGlmIChyZXQgPT0gRU9GKSBnb3RvIGVycmhhbmRsZXJfaW87CiAgICB9CisgICBvdXRwdXRIYW5kbGVKdXN0SW5DYXNlID0gTlVMTDsKICAgIGlmICh2ZXJib3NpdHkgPj0gMikgZnByaW50ZiAoIHN0ZGVyciwgIlxuICAgICIgKTsKICAgIHJldHVybiBUcnVlOwogCisgICB0cnljYXQ6IAorICAgaWYgKGZvcmNlT3ZlcndyaXRlKSB7CisgICAgICByZXdpbmQoelN0cmVhbSk7CisgICAgICB3aGlsZSAoVHJ1ZSkgeworICAgICAgCSBpZiAobXlmZW9mKHpTdHJlYW0pKSBicmVhazsKKyAgICAgIAkgbnJlYWQgPSBmcmVhZCAoIG9idWYsIHNpemVvZihVQ2hhciksIDUwMDAsIHpTdHJlYW0gKTsKKyAgICAgIAkgaWYgKGZlcnJvcih6U3RyZWFtKSkgZ290byBlcnJoYW5kbGVyX2lvOworICAgICAgCSBpZiAobnJlYWQgPiAwKSBmd3JpdGUgKCBvYnVmLCBzaXplb2YoVUNoYXIpLCBucmVhZCwgc3RyZWFtICk7CisgICAgICAJIGlmIChmZXJyb3Ioc3RyZWFtKSkgZ290byBlcnJoYW5kbGVyX2lvOworICAgICAgfQorICAgICAgZ290byBjbG9zZW9rOworICAgfQorICAKICAgIGVycmhhbmRsZXI6CiAgICBCWjJfYnpSZWFkQ2xvc2UgKCAmYnplcnJfZHVtbXksIGJ6ZiApOwogICAgc3dpdGNoIChiemVycikgewpAQCAtODMyLDcgKzc0Miw3IEBACiAgICAgICBzdGRlcnIsCiAgICAgICAiXG5JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjb21wcmVzc2VkIGZpbGUocykgaGF2ZSBiZWNvbWUgY29ycnVwdGVkLlxuIgogICAgICAgICAiWW91IGNhbiB1c2UgdGhlIC10dnYgb3B0aW9uIHRvIHRlc3QgaW50ZWdyaXR5IG9mIHN1Y2ggZmlsZXMuXG5cbiIKLSAgICAgICAgIllvdSBjYW4gdXNlIHRoZSBgYnppcDJyZWNvdmVyJyBwcm9ncmFtIHRvICphdHRlbXB0KiB0byByZWNvdmVyXG4iCisgICAgICAgICJZb3UgY2FuIHVzZSB0aGUgYGJ6aXAycmVjb3ZlcicgcHJvZ3JhbSB0byBhdHRlbXB0IHRvIHJlY292ZXJcbiIKICAgICAgICAgImRhdGEgZnJvbSB1bmRhbWFnZWQgc2VjdGlvbnMgb2YgY29ycnVwdGVkIGZpbGVzLlxuXG4iCiAgICAgKTsKIH0KQEAgLTg1NSwyOCArNzY1LDU1IEBACiBzdGF0aWMgCiB2b2lkIGNsZWFuVXBBbmRGYWlsICggSW50MzIgZWMgKQogewotICAgSW50TmF0aXZlIHJldFZhbDsKKyAgIEludE5hdGl2ZSAgICAgIHJldFZhbDsKKyAgIHN0cnVjdCBNWV9TVEFUIHN0YXRCdWY7CiAKICAgIGlmICggc3JjTW9kZSA9PSBTTV9GMkYgCiAgICAgICAgICYmIG9wTW9kZSAhPSBPTV9URVNUCiAgICAgICAgICYmIGRlbGV0ZU91dHB1dE9uSW50ZXJydXB0ICkgewotICAgICAgaWYgKG5vaXN5KQotICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiVzOiBEZWxldGluZyBvdXRwdXQgZmlsZSAlcywgaWYgaXQgZXhpc3RzLlxuIiwKLSAgICAgICAgICAgICAgICBwcm9nTmFtZSwgb3V0TmFtZSApOwotICAgICAgaWYgKG91dHB1dEhhbmRsZUp1c3RJbkNhc2UgIT0gTlVMTCkKLSAgICAgICAgIGZjbG9zZSAoIG91dHB1dEhhbmRsZUp1c3RJbkNhc2UgKTsKLSAgICAgIHJldFZhbCA9IHJlbW92ZSAoIG91dE5hbWUgKTsKLSAgICAgIGlmIChyZXRWYWwgIT0gMCkKKworICAgICAgLyogQ2hlY2sgd2hldGhlciBpbnB1dCBmaWxlIHN0aWxsIGV4aXN0cy4gIERlbGV0ZSBvdXRwdXQgZmlsZQorICAgICAgICAgb25seSBpZiBpbnB1dCBleGlzdHMgdG8gYXZvaWQgbG9zcyBvZiBkYXRhLiAgSm9lcmcgUHJhbnRlLCA1CisgICAgICAgICBKYW51YXJ5IDIwMDIuICAoSlJTIDA2LUphbi0yMDAyOiBvdGhlciBjaGFuZ2VzIGluIDEuMC4yIG1lYW4KKyAgICAgICAgIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gaGFwcGVuLiAgQnV0IHRvIGJlIHVsdHJhLXBhcmFub2lkLCB3ZQorICAgICAgICAgZG8gdGhlIGNoZWNrIGFueXdheS4pICAqLworICAgICAgcmV0VmFsID0gTVlfU1RBVCAoIGluTmFtZSwgJnN0YXRCdWYgKTsKKyAgICAgIGlmIChyZXRWYWwgPT0gMCkgeworICAgICAgICAgaWYgKG5vaXN5KQorICAgICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgCisgICAgICAgICAgICAgICAgICAgICAgIiVzOiBEZWxldGluZyBvdXRwdXQgZmlsZSAlcywgaWYgaXQgZXhpc3RzLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBwcm9nTmFtZSwgb3V0TmFtZSApOworICAgICAgICAgaWYgKG91dHB1dEhhbmRsZUp1c3RJbkNhc2UgIT0gTlVMTCkKKyAgICAgICAgICAgIGZjbG9zZSAoIG91dHB1dEhhbmRsZUp1c3RJbkNhc2UgKTsKKyAgICAgICAgIHJldFZhbCA9IHJlbW92ZSAoIG91dE5hbWUgKTsKKyAgICAgICAgIGlmIChyZXRWYWwgIT0gMCkKKyAgICAgICAgICAgIGZwcmludGYgKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgIiVzOiBXQVJOSU5HOiBkZWxldGlvbiBvZiBvdXRwdXQgZmlsZSAiCisgICAgICAgICAgICAgICAgICAgICAgIihhcHBhcmVudGx5KSBmYWlsZWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHByb2dOYW1lICk7CisgICAgICB9IGVsc2UgewogICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAiJXM6IFdBUk5JTkc6IGRlbGV0aW9uIG9mIG91dHB1dCBmaWxlIChhcHBhcmVudGx5KSBmYWlsZWQuXG4iLAorICAgICAgICAgICAgICAgICAgICIlczogV0FSTklORzogZGVsZXRpb24gb2Ygb3V0cHV0IGZpbGUgc3VwcHJlc3NlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgcHJvZ05hbWUgKTsKKyAgICAgICAgIGZwcmludGYgKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgIiVzOiAgICBzaW5jZSBpbnB1dCBmaWxlIG5vIGxvbmdlciBleGlzdHMuICBPdXRwdXQgZmlsZVxuIiwKICAgICAgICAgICAgICAgICAgICBwcm9nTmFtZSApOworICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAiJXM6ICAgIGAlcycgbWF5IGJlIGluY29tcGxldGUuXG4iLAorICAgICAgICAgICAgICAgICAgIHByb2dOYW1lLCBvdXROYW1lICk7CisgICAgICAgICBmcHJpbnRmICggc3RkZXJyLCAKKyAgICAgICAgICAgICAgICAgICAiJXM6ICAgIEkgc3VnZ2VzdCBkb2luZyBhbiBpbnRlZ3JpdHkgdGVzdCAoYnppcDIgLXR2KSIKKyAgICAgICAgICAgICAgICAgICAiIG9mIGl0LlxuIiwKKyAgICAgICAgICAgICAgICAgICBwcm9nTmFtZSApOworICAgICAgfQogICAgfQorCiAgICBpZiAobm9pc3kgJiYgbnVtRmlsZU5hbWVzID4gMCAmJiBudW1GaWxlc1Byb2Nlc3NlZCA8IG51bUZpbGVOYW1lcykgewogICAgICAgZnByaW50ZiAoIHN0ZGVyciwgCiAgICAgICAgICAgICAgICAgIiVzOiBXQVJOSU5HOiBzb21lIGZpbGVzIGhhdmUgbm90IGJlZW4gcHJvY2Vzc2VkOlxuIgotICAgICAgICAgICAgICAgICJcdCVkIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUsICVkIG5vdCBwcm9jZXNzZWQgeWV0LlxuXG4iLAotICAgICAgICAgICAgICAgIHByb2dOYW1lLCBudW1GaWxlTmFtZXMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBudW1GaWxlTmFtZXMgLSBudW1GaWxlc1Byb2Nlc3NlZCApOworICAgICAgICAgICAgICAgICIlczogICAgJWQgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZSwgJWQgbm90IHByb2Nlc3NlZCB5ZXQuXG5cbiIsCisgICAgICAgICAgICAgICAgcHJvZ05hbWUsIHByb2dOYW1lLAorICAgICAgICAgICAgICAgIG51bUZpbGVOYW1lcywgbnVtRmlsZU5hbWVzIC0gbnVtRmlsZXNQcm9jZXNzZWQgKTsKICAgIH0KICAgIHNldEV4aXQoZWMpOwogICAgZXhpdChleGl0VmFsdWUpOwpAQCAtOTE1LDE0ICs4NTIsMTYgQEAKIHN0YXRpYyAKIHZvaWQgY29tcHJlc3NlZFN0cmVhbUVPRiAoIHZvaWQgKQogewotICAgZnByaW50ZiAoIHN0ZGVyciwKLSAgICAgICAgICAgICAiXG4lczogQ29tcHJlc3NlZCBmaWxlIGVuZHMgdW5leHBlY3RlZGx5O1xuXHQiCi0gICAgICAgICAgICAgInBlcmhhcHMgaXQgaXMgY29ycnVwdGVkPyAgKlBvc3NpYmxlKiByZWFzb24gZm9sbG93cy5cbiIsCi0gICAgICAgICAgICAgcHJvZ05hbWUgKTsKLSAgIHBlcnJvciAoIHByb2dOYW1lICk7Ci0gICBzaG93RmlsZU5hbWVzKCk7Ci0gICBjYWR2aXNlKCk7Ci0gICBjbGVhblVwQW5kRmFpbCggMiApOworICBpZiAobm9pc3kpIHsKKyAgICBmcHJpbnRmICggc3RkZXJyLAorCSAgICAgICJcbiVzOiBDb21wcmVzc2VkIGZpbGUgZW5kcyB1bmV4cGVjdGVkbHk7XG5cdCIKKwkgICAgICAicGVyaGFwcyBpdCBpcyBjb3JydXB0ZWQ/ICAqUG9zc2libGUqIHJlYXNvbiBmb2xsb3dzLlxuIiwKKwkgICAgICBwcm9nTmFtZSApOworICAgIHBlcnJvciAoIHByb2dOYW1lICk7CisgICAgc2hvd0ZpbGVOYW1lcygpOworICAgIGNhZHZpc2UoKTsKKyAgfQorICBjbGVhblVwQW5kRmFpbCggMiApOwogfQogCiAKQEAgLTEwMzgsNiArOTc3LDExIEBACiAvKi0tLSBUaGUgbWFpbiBkcml2ZXIgbWFjaGluZXJ5ICAgICAgICAgICAgICAgICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEFsbCByYXRoZXIgY3J1ZnR5LiAgVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IGlucHV0IGZpbGVzCisgICBhcmUgc3RhdCgpZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlLiAgVGhpcyBzaG91bGQgYmUKKyAgIGNsZWFuZWQgdXAuIAorKi8KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIAogdm9pZCBwYWQgKCBDaGFyICpzICkKQEAgLTEwODIsNiArMTAyNiwzMiBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE9wZW4gYW4gb3V0cHV0IGZpbGUgc2FmZWx5IHdpdGggT19FWENMIGFuZCBnb29kIHBlcm1pc3Npb25zLgorICAgVGhpcyBhdm9pZHMgYSByYWNlIGNvbmRpdGlvbiBpbiB2ZXJzaW9ucyA8IDEuMC4yLCBpbiB3aGljaAorICAgdGhlIGZpbGUgd2FzIGZpcnN0IG9wZW5lZCBhbmQgdGhlbiBoYWQgaXRzIGludGVyaW0gcGVybWlzc2lvbnMKKyAgIHNldCBzYWZlbHkuICBXZSBpbnN0ZWFkIHVzZSBvcGVuKCkgdG8gY3JlYXRlIHRoZSBmaWxlIHdpdGgKKyAgIHRoZSBpbnRlcmltIHBlcm1pc3Npb25zIHJlcXVpcmVkLiAoLS0tIC0tLSBydy0pLgorCisgICBGb3Igbm9uLVVuaXggcGxhdGZvcm1zLCBpZiB3ZSBhcmUgbm90IHdvcnJ5aW5nIGFib3V0CisgICBzZWN1cml0eSBpc3N1ZXMsIHNpbXBsZSB0aGlzIHNpbXBseSBiZWhhdmVzIGxpa2UgZm9wZW4uCisqLworRklMRSogZm9wZW5fb3V0cHV0X3NhZmVseSAoIENoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIG1vZGUgKQoreworIyAgaWYgQlpfVU5JWAorICAgRklMRSogICAgIGZwOworICAgSW50TmF0aXZlIGZoOworICAgZmggPSBvcGVuKG5hbWUsIE9fV1JPTkxZfE9fQ1JFQVR8T19FWENMLCBTX0lXVVNSfFNfSVJVU1IpOworICAgaWYgKGZoID09IC0xKSByZXR1cm4gTlVMTDsKKyAgIGZwID0gZmRvcGVuKGZoLCBtb2RlKTsKKyAgIGlmIChmcCA9PSBOVUxMKSBjbG9zZShmaCk7CisgICByZXR1cm4gZnA7CisjICBlbHNlCisgICByZXR1cm4gZm9wZW4obmFtZSwgbW9kZSk7CisjICBlbmRpZgorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0KICAgaWYgaW4gZG91YnQsIHJldHVybiBUcnVlCiAtLSovCkBAIC0xMDkzLDcgKzEwNjMsNyBAQAogCiAgICBpID0gTVlfTFNUQVQgKCBuYW1lLCAmc3RhdEJ1ZiApOwogICAgaWYgKGkgIT0gMCkgcmV0dXJuIFRydWU7Ci0gICBpZiAoTVlfU19JRlJFRyhzdGF0QnVmLnN0X21vZGUpKSByZXR1cm4gRmFsc2U7CisgICBpZiAoTVlfU19JU1JFRyhzdGF0QnVmLnN0X21vZGUpKSByZXR1cm4gRmFsc2U7CiAgICByZXR1cm4gVHJ1ZTsKIH0KIApAQCAtMTExNSw0MiArMTA4NSw2NiBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyAKLXZvaWQgY29weURhdGVQZXJtaXNzaW9uc0FuZE93bmVyICggQ2hhciAqc3JjTmFtZSwgQ2hhciAqZHN0TmFtZSApCi17CisvKiBDb3B5IG1vZGlmaWNhdGlvbiBkYXRlLCBhY2Nlc3MgZGF0ZSwgcGVybWlzc2lvbnMgYW5kIG93bmVyIGZyb20gdGhlCisgICBzb3VyY2UgdG8gZGVzdGluYXRpb24gZmlsZS4gIFdlIGhhdmUgdG8gY29weSB0aGlzIG1ldGEtaW5mbyBvZmYKKyAgIGludG8gZmlsZU1ldGFJbmZvIGJlZm9yZSBzdGFydGluZyB0byBjb21wcmVzcyAvIGRlY29tcHJlc3MgaXQsCisgICBiZWNhdXNlIGRvaW5nIGl0IGFmdGVyd2FyZHMgbWVhbnMgd2UgZ2V0IHRoZSB3cm9uZyBhY2Nlc3MgdGltZS4KKworICAgVG8gY29tcGxpY2F0ZSBtYXR0ZXJzLCBpbiBjb21wcmVzcygpIGFuZCBkZWNvbXByZXNzKCkgYmVsb3csIHRoZQorICAgc2VxdWVuY2Ugb2YgdGVzdHMgcHJlY2VkaW5nIHRoZSBjYWxsIHRvIHNhdmVJbnB1dEZpbGVNZXRhSW5mbygpCisgICBpbnZvbHZlcyBjYWxsaW5nIGZpbGVFeGlzdHMoKSwgd2hpY2ggaW4gdHVybiBlc3RhYmxpc2hlcyBpdHMgcmVzdWx0CisgICBieSBhdHRlbXB0aW5nIHRvIGZvcGVuKCkgdGhlIGZpbGUsIGFuZCBpZiBzdWNjZXNzZnVsLCBpbW1lZGlhdGVseQorICAgZmNsb3NlKClpbmcgaXQgYWdhaW4uICBTbyB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBmb3BlbigpIGNhbGwKKyAgIGRvZXMgbm90IGNhdXNlIHRoZSBhY2Nlc3MgdGltZSBmaWVsZCB0byBiZSB1cGRhdGVkLgorCisgICBSZWFkaW5nIG9mIHRoZSBtYW4gcGFnZSBmb3Igc3RhdCgpIChtYW4gMiBzdGF0KSBvbiBSZWRIYXQgNy4yIHNlZW1zCisgICB0byBpbXBseSB0aGF0IG1lcmVseSBkb2luZyBvcGVuKCkgd2lsbCBub3QgYWZmZWN0IHRoZSBhY2Nlc3MgdGltZS4KKyAgIFRoZXJlZm9yZSB3ZSBtZXJlbHkgbmVlZCB0byBob3BlIHRoYXQgdGhlIEMgbGlicmFyeSBvbmx5IGRvZXMKKyAgIG9wZW4oKSBhcyBhIHJlc3VsdCBvZiBmb3BlbigpLCBhbmQgbm90IGFueSBraW5kIG9mIHJlYWQoKS1haGVhZAorICAgY2xldmVybmVzcy4KKworICAgSXQgc291bmRzIHByZXR0eSBmcmFnaWxlIHRvIG1lLiAgV2hldGhlciB0aGlzIGNhcnJpZXMgYWNyb3NzCisgICByb2J1c3RseSB0byBhcmJpdHJhcnkgVW5peC1saWtlIHBsYXRmb3JtcyAob3IgZXZlbiB3b3JrcyByb2J1c3RseQorICAgb24gdGhpcyBvbmUsIFJlZEhhdCA3LjIpIGlzIHVua25vd24gdG8gbWUuICBOZXZlcnRoZWxlc3MgLi4uICAKKyovCiAjaWYgQlpfVU5JWAorc3RhdGljIAorc3RydWN0IE1ZX1NUQVQgZmlsZU1ldGFJbmZvOworI2VuZGlmCisKK3N0YXRpYyAKK3ZvaWQgc2F2ZUlucHV0RmlsZU1ldGFJbmZvICggQ2hhciAqc3JjTmFtZSApCit7CisjICBpZiBCWl9VTklYCisgICBJbnROYXRpdmUgcmV0VmFsOworICAgLyogTm90ZSB1c2Ugb2Ygc3RhdCBoZXJlLCBub3QgbHN0YXQuICovCisgICByZXRWYWwgPSBNWV9TVEFUKCBzcmNOYW1lLCAmZmlsZU1ldGFJbmZvICk7CisgICBFUlJPUl9JRl9OT1RfWkVSTyAoIHJldFZhbCApOworIyAgZW5kaWYKK30KKworCitzdGF0aWMgCit2b2lkIGFwcGx5U2F2ZWRNZXRhSW5mb1RvT3V0cHV0RmlsZSAoIENoYXIgKmRzdE5hbWUgKQoreworIyAgaWYgQlpfVU5JWAogICAgSW50TmF0aXZlICAgICAgcmV0VmFsOwotICAgc3RydWN0IE1ZX1NUQVQgc3RhdEJ1ZjsKICAgIHN0cnVjdCB1dGltYnVmIHVUaW1CdWY7CiAKLSAgIHJldFZhbCA9IE1ZX0xTVEFUICggc3JjTmFtZSwgJnN0YXRCdWYgKTsKLSAgIEVSUk9SX0lGX05PVF9aRVJPICggcmV0VmFsICk7Ci0gICB1VGltQnVmLmFjdGltZSA9IHN0YXRCdWYuc3RfYXRpbWU7Ci0gICB1VGltQnVmLm1vZHRpbWUgPSBzdGF0QnVmLnN0X210aW1lOworICAgdVRpbUJ1Zi5hY3RpbWUgPSBmaWxlTWV0YUluZm8uc3RfYXRpbWU7CisgICB1VGltQnVmLm1vZHRpbWUgPSBmaWxlTWV0YUluZm8uc3RfbXRpbWU7CiAKLSAgIHJldFZhbCA9IGNobW9kICggZHN0TmFtZSwgc3RhdEJ1Zi5zdF9tb2RlICk7CisgICByZXRWYWwgPSBjaG1vZCAoIGRzdE5hbWUsIGZpbGVNZXRhSW5mby5zdF9tb2RlICk7CiAgICBFUlJPUl9JRl9OT1RfWkVSTyAoIHJldFZhbCApOwogCiAgICByZXRWYWwgPSB1dGltZSAoIGRzdE5hbWUsICZ1VGltQnVmICk7CiAgICBFUlJPUl9JRl9OT1RfWkVSTyAoIHJldFZhbCApOwogCi0gICByZXRWYWwgPSBjaG93biAoIGRzdE5hbWUsIHN0YXRCdWYuc3RfdWlkLCBzdGF0QnVmLnN0X2dpZCApOworICAgcmV0VmFsID0gY2hvd24gKCBkc3ROYW1lLCBmaWxlTWV0YUluZm8uc3RfdWlkLCBmaWxlTWV0YUluZm8uc3RfZ2lkICk7CiAgICAvKiBjaG93bigpIHdpbGwgaW4gbWFueSBjYXNlcyByZXR1cm4gd2l0aCBFUEVSTSwgd2hpY2ggY2FuCiAgICAgICBiZSBzYWZlbHkgaWdub3JlZC4KICAgICovCi0jZW5kaWYKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgCi12b2lkIHNldEludGVyaW1QZXJtaXNzaW9ucyAoIENoYXIgKmRzdE5hbWUgKQotewotI2lmIEJaX1VOSVgKLSAgIEludE5hdGl2ZSAgICAgIHJldFZhbDsKLSAgIHJldFZhbCA9IGNobW9kICggZHN0TmFtZSwgU19JUlVTUiB8IFNfSVdVU1IgKTsKLSAgIEVSUk9SX0lGX05PVF9aRVJPICggcmV0VmFsICk7Ci0jZW5kaWYKKyMgIGVuZGlmCiB9CiAKIApAQCAtMTE1OCwxMCArMTE1MiwxOSBAQAogc3RhdGljIAogQm9vbCBjb250YWluc0R1YmlvdXNDaGFycyAoIENoYXIqIG5hbWUgKQogewotICAgQm9vbCBjZGMgPSBGYWxzZTsKKyMgIGlmIEJaX1VOSVgKKyAgIC8qIE9uIHVuaXgsIGZpbGVzIGNhbiBjb250YWluIGFueSBjaGFyYWN0ZXJzIGFuZCB0aGUgZmlsZSBleHBhbnNpb24KKyAgICAqIGlzIHBlcmZvcm1lZCBieSB0aGUgc2hlbGwuCisgICAgKi8KKyAgIHJldHVybiBGYWxzZTsKKyMgIGVsc2UgLyogISBCWl9VTklYICovCisgICAvKiBPbiBub24tdW5peCAoV2luKiBwbGF0Zm9ybXMpLCB3aWxkY2FyZCBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBpbiAKKyAgICAqIGZpbGVuYW1lcy4KKyAgICAqLwogICAgZm9yICg7ICpuYW1lICE9ICdcMCc7IG5hbWUrKykKLSAgICAgIGlmICgqbmFtZSA9PSAnPycgfHwgKm5hbWUgPT0gJyonKSBjZGMgPSBUcnVlOwotICAgcmV0dXJuIGNkYzsKKyAgICAgIGlmICgqbmFtZSA9PSAnPycgfHwgKm5hbWUgPT0gJyonKSByZXR1cm4gVHJ1ZTsKKyAgIHJldHVybiBGYWxzZTsKKyMgIGVuZGlmIC8qIEJaX1VOSVggKi8KIH0KIAogCkBAIC0xMjAxLDYgKzEyMDQsNyBAQAogICAgRklMRSAgKmluU3RyOwogICAgRklMRSAgKm91dFN0cjsKICAgIEludDMyIG4sIGk7CisgICBzdHJ1Y3QgTVlfU1RBVCBzdGF0QnVmOwogCiAgICBkZWxldGVPdXRwdXRPbkludGVycnVwdCA9IEZhbHNlOwogCkBAIC0xMjQ2LDYgKzEyNTAsMTYgQEAKICAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgIH0KKyAgIGlmICggc3JjTW9kZSA9PSBTTV9GMkYgfHwgc3JjTW9kZSA9PSBTTV9GMk8gKSB7CisgICAgICBNWV9TVEFUKGluTmFtZSwgJnN0YXRCdWYpOworICAgICAgaWYgKCBNWV9TX0lTRElSKHN0YXRCdWYuc3RfbW9kZSkgKSB7CisgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAiJXM6IElucHV0IGZpbGUgJXMgaXMgYSBkaXJlY3RvcnkuXG4iLAorICAgICAgICAgICAgICAgICAgcHJvZ05hbWUsaW5OYW1lKTsKKyAgICAgICAgIHNldEV4aXQoMSk7CisgICAgICAgICByZXR1cm47CisgICAgICB9CisgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmICFmb3JjZU92ZXJ3cml0ZSAmJiBub3RBU3RhbmRhcmRGaWxlICggaW5OYW1lICkpIHsKICAgICAgIGlmIChub2lzeSkKICAgICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogSW5wdXQgZmlsZSAlcyBpcyBub3QgYSBub3JtYWwgZmlsZS5cbiIsCkBAIC0xMjUzLDExICsxMjY3LDE1IEBACiAgICAgICBzZXRFeGl0KDEpOwogICAgICAgcmV0dXJuOwogICAgfQotICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiAmJiAhZm9yY2VPdmVyd3JpdGUgJiYgZmlsZUV4aXN0cyAoIG91dE5hbWUgKSApIHsKLSAgICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogT3V0cHV0IGZpbGUgJXMgYWxyZWFkeSBleGlzdHMuXG4iLAotICAgICAgICAgICAgICAgIHByb2dOYW1lLCBvdXROYW1lICk7Ci0gICAgICBzZXRFeGl0KDEpOwotICAgICAgcmV0dXJuOworICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiAmJiBmaWxlRXhpc3RzICggb3V0TmFtZSApICkgeworICAgICAgaWYgKGZvcmNlT3ZlcndyaXRlKSB7CisJIHJlbW92ZShvdXROYW1lKTsKKyAgICAgIH0gZWxzZSB7CisJIGZwcmludGYgKCBzdGRlcnIsICIlczogT3V0cHV0IGZpbGUgJXMgYWxyZWFkeSBleGlzdHMuXG4iLAorCQkgICBwcm9nTmFtZSwgb3V0TmFtZSApOworCSBzZXRFeGl0KDEpOworCSByZXR1cm47CisgICAgICB9CiAgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmICFmb3JjZU92ZXJ3cml0ZSAmJgogICAgICAgICAobj1jb3VudEhhcmRMaW5rcyAoIGluTmFtZSApKSA+IDApIHsKQEAgLTEyNjcsNiArMTI4NSwxMiBAQAogICAgICAgcmV0dXJuOwogICAgfQogCisgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICkgeworICAgICAgLyogU2F2ZSB0aGUgZmlsZSdzIG1ldGEtaW5mbyBiZWZvcmUgd2Ugb3BlbiBpdC4gIERvaW5nIGl0IGxhdGVyCisgICAgICAgICBtZWFucyB3ZSBtZXNzIHVwIHRoZSBhY2Nlc3MgdGltZXMuICovCisgICAgICBzYXZlSW5wdXRGaWxlTWV0YUluZm8gKCBpbk5hbWUgKTsKKyAgIH0KKwogICAgc3dpdGNoICggc3JjTW9kZSApIHsKIAogICAgICAgY2FzZSBTTV9JMk86CkBAIC0xMzA2LDcgKzEzMzAsNyBAQAogCiAgICAgICBjYXNlIFNNX0YyRjoKICAgICAgICAgIGluU3RyID0gZm9wZW4gKCBpbk5hbWUsICJyYiIgKTsKLSAgICAgICAgIG91dFN0ciA9IGZvcGVuICggb3V0TmFtZSwgIndiIiApOworICAgICAgICAgb3V0U3RyID0gZm9wZW5fb3V0cHV0X3NhZmVseSAoIG91dE5hbWUsICJ3YiIgKTsKICAgICAgICAgIGlmICggb3V0U3RyID09IE5VTEwpIHsKICAgICAgICAgICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogQ2FuJ3QgY3JlYXRlIG91dHB1dCBmaWxlICVzOiAlcy5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgcHJvZ05hbWUsIG91dE5hbWUsIHN0cmVycm9yKGVycm5vKSApOwpAQCAtMTMyMSw3ICsxMzQ1LDYgQEAKICAgICAgICAgICAgIHNldEV4aXQoMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9OwotICAgICAgICAgc2V0SW50ZXJpbVBlcm1pc3Npb25zICggb3V0TmFtZSApOwogICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQzLDcgKzEzNjYsNyBAQAogCiAgICAvKi0tLSBJZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSB3b24ndCBnZXQgaGVyZS4gLS0tKi8KICAgIGlmICggc3JjTW9kZSA9PSBTTV9GMkYgKSB7Ci0gICAgICBjb3B5RGF0ZVBlcm1pc3Npb25zQW5kT3duZXIgKCBpbk5hbWUsIG91dE5hbWUgKTsKKyAgICAgIGFwcGx5U2F2ZWRNZXRhSW5mb1RvT3V0cHV0RmlsZSAoIG91dE5hbWUgKTsKICAgICAgIGRlbGV0ZU91dHB1dE9uSW50ZXJydXB0ID0gRmFsc2U7CiAgICAgICBpZiAoICFrZWVwSW5wdXRGaWxlcyApIHsKICAgICAgICAgIEludE5hdGl2ZSByZXRWYWwgPSByZW1vdmUgKCBpbk5hbWUgKTsKQEAgLTEzNjQsNiArMTM4Nyw3IEBACiAgICBJbnQzMiBuLCBpOwogICAgQm9vbCAgbWFnaWNOdW1iZXJPSzsKICAgIEJvb2wgIGNhbnRHdWVzczsKKyAgIHN0cnVjdCBNWV9TVEFUIHN0YXRCdWY7CiAKICAgIGRlbGV0ZU91dHB1dE9uSW50ZXJydXB0ID0gRmFsc2U7CiAKQEAgLTE0MDUsNiArMTQyOSwxNiBAQAogICAgICAgc2V0RXhpdCgxKTsKICAgICAgIHJldHVybjsKICAgIH0KKyAgIGlmICggc3JjTW9kZSA9PSBTTV9GMkYgfHwgc3JjTW9kZSA9PSBTTV9GMk8gKSB7CisgICAgICBNWV9TVEFUKGluTmFtZSwgJnN0YXRCdWYpOworICAgICAgaWYgKCBNWV9TX0lTRElSKHN0YXRCdWYuc3RfbW9kZSkgKSB7CisgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAiJXM6IElucHV0IGZpbGUgJXMgaXMgYSBkaXJlY3RvcnkuXG4iLAorICAgICAgICAgICAgICAgICAgcHJvZ05hbWUsaW5OYW1lKTsKKyAgICAgICAgIHNldEV4aXQoMSk7CisgICAgICAgICByZXR1cm47CisgICAgICB9CisgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmICFmb3JjZU92ZXJ3cml0ZSAmJiBub3RBU3RhbmRhcmRGaWxlICggaW5OYW1lICkpIHsKICAgICAgIGlmIChub2lzeSkKICAgICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogSW5wdXQgZmlsZSAlcyBpcyBub3QgYSBub3JtYWwgZmlsZS5cbiIsCkBAIC0xNDE5LDExICsxNDUzLDE1IEBACiAgICAgICAgICAgICAgICAgcHJvZ05hbWUsIGluTmFtZSwgb3V0TmFtZSApOwogICAgICAgLyoganVzdCBhIHdhcm5pbmcsIG5vIHJldHVybiAqLwogICAgfSAgIAotICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiAmJiAhZm9yY2VPdmVyd3JpdGUgJiYgZmlsZUV4aXN0cyAoIG91dE5hbWUgKSApIHsKLSAgICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogT3V0cHV0IGZpbGUgJXMgYWxyZWFkeSBleGlzdHMuXG4iLAotICAgICAgICAgICAgICAgIHByb2dOYW1lLCBvdXROYW1lICk7Ci0gICAgICBzZXRFeGl0KDEpOwotICAgICAgcmV0dXJuOworICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiAmJiBmaWxlRXhpc3RzICggb3V0TmFtZSApICkgeworICAgICAgaWYgKGZvcmNlT3ZlcndyaXRlKSB7CisJcmVtb3ZlKG91dE5hbWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiVzOiBPdXRwdXQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cy5cbiIsCisgICAgICAgICAgICAgICAgICBwcm9nTmFtZSwgb3V0TmFtZSApOworICAgICAgICBzZXRFeGl0KDEpOworICAgICAgICByZXR1cm47CisgICAgICB9CiAgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmICFmb3JjZU92ZXJ3cml0ZSAmJgogICAgICAgICAobj1jb3VudEhhcmRMaW5rcyAoIGluTmFtZSApICkgPiAwKSB7CkBAIC0xNDMzLDYgKzE0NzEsMTIgQEAKICAgICAgIHJldHVybjsKICAgIH0KIAorICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiApIHsKKyAgICAgIC8qIFNhdmUgdGhlIGZpbGUncyBtZXRhLWluZm8gYmVmb3JlIHdlIG9wZW4gaXQuICBEb2luZyBpdCBsYXRlcgorICAgICAgICAgbWVhbnMgd2UgbWVzcyB1cCB0aGUgYWNjZXNzIHRpbWVzLiAqLworICAgICAgc2F2ZUlucHV0RmlsZU1ldGFJbmZvICggaW5OYW1lICk7CisgICB9CisKICAgIHN3aXRjaCAoIHNyY01vZGUgKSB7CiAKICAgICAgIGNhc2UgU01fSTJPOgpAQCAtMTQ2Myw3ICsxNTA3LDcgQEAKIAogICAgICAgY2FzZSBTTV9GMkY6CiAgICAgICAgICBpblN0ciA9IGZvcGVuICggaW5OYW1lLCAicmIiICk7Ci0gICAgICAgICBvdXRTdHIgPSBmb3BlbiAoIG91dE5hbWUsICJ3YiIgKTsKKyAgICAgICAgIG91dFN0ciA9IGZvcGVuX291dHB1dF9zYWZlbHkgKCBvdXROYW1lLCAid2IiICk7CiAgICAgICAgICBpZiAoIG91dFN0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiJXM6IENhbid0IGNyZWF0ZSBvdXRwdXQgZmlsZSAlczogJXMuXG4iLAogICAgICAgICAgICAgICAgICAgICAgIHByb2dOYW1lLCBvdXROYW1lLCBzdHJlcnJvcihlcnJubykgKTsKQEAgLTE0NzgsNyArMTUyMiw2IEBACiAgICAgICAgICAgICBzZXRFeGl0KDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfTsKLSAgICAgICAgIHNldEludGVyaW1QZXJtaXNzaW9ucyAoIG91dE5hbWUgKTsKICAgICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0OgpAQCAtMTUwMSw3ICsxNTQ0LDcgQEAKICAgIC8qLS0tIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIHdvbid0IGdldCBoZXJlLiAtLS0qLwogICAgaWYgKCBtYWdpY051bWJlck9LICkgewogICAgICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiApIHsKLSAgICAgICAgIGNvcHlEYXRlUGVybWlzc2lvbnNBbmRPd25lciAoIGluTmFtZSwgb3V0TmFtZSApOworICAgICAgICAgYXBwbHlTYXZlZE1ldGFJbmZvVG9PdXRwdXRGaWxlICggb3V0TmFtZSApOwogICAgICAgICAgZGVsZXRlT3V0cHV0T25JbnRlcnJ1cHQgPSBGYWxzZTsKICAgICAgICAgIGlmICggIWtlZXBJbnB1dEZpbGVzICkgewogICAgICAgICAgICAgSW50TmF0aXZlIHJldFZhbCA9IHJlbW92ZSAoIGluTmFtZSApOwpAQCAtMTUzOSw2ICsxNTgyLDcgQEAKIHsKICAgIEZJTEUgKmluU3RyOwogICAgQm9vbCBhbGxPSzsKKyAgIHN0cnVjdCBNWV9TVEFUIHN0YXRCdWY7CiAKICAgIGRlbGV0ZU91dHB1dE9uSW50ZXJydXB0ID0gRmFsc2U7CiAKQEAgLTE1NjUsNiArMTYwOSwxNiBAQAogICAgICAgc2V0RXhpdCgxKTsKICAgICAgIHJldHVybjsKICAgIH0KKyAgIGlmICggc3JjTW9kZSAhPSBTTV9JMk8gKSB7CisgICAgICBNWV9TVEFUKGluTmFtZSwgJnN0YXRCdWYpOworICAgICAgaWYgKCBNWV9TX0lTRElSKHN0YXRCdWYuc3RfbW9kZSkgKSB7CisgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAiJXM6IElucHV0IGZpbGUgJXMgaXMgYSBkaXJlY3RvcnkuXG4iLAorICAgICAgICAgICAgICAgICAgcHJvZ05hbWUsaW5OYW1lKTsKKyAgICAgICAgIHNldEV4aXQoMSk7CisgICAgICAgICByZXR1cm47CisgICAgICB9CisgICB9CiAKICAgIHN3aXRjaCAoIHNyY01vZGUgKSB7CiAKQEAgLTE2MDMsNiArMTY1Nyw3IEBACiAgICB9CiAKICAgIC8qLS0tIE5vdyB0aGUgaW5wdXQgaGFuZGxlIGlzIHNhbmUuICBEbyB0aGUgQml6LiAtLS0qLworICAgb3V0cHV0SGFuZGxlSnVzdEluQ2FzZSA9IE5VTEw7CiAgICBhbGxPSyA9IHRlc3RTdHJlYW0gKCBpblN0ciApOwogCiAgICBpZiAoYWxsT0sgJiYgdmVyYm9zaXR5ID49IDEpIGZwcmludGYgKCBzdGRlcnIsICJva1xuIiApOwpAQCAtMTYxOSw3ICsxNjc0LDcgQEAKICAgICAiYnppcDIsIGEgYmxvY2stc29ydGluZyBmaWxlIGNvbXByZXNzb3IuICAiCiAgICAgIlZlcnNpb24gJXMuXG4iCiAgICAgIiAgIFxuIgotICAgICIgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBieSBKdWxpYW4gU2V3YXJkLlxuIgorICAgICIgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBieSBKdWxpYW4gU2V3YXJkLlxuIgogICAgICIgICBcbiIKICAgICAiICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiIKICAgICAiICAgaXQgdW5kZXIgdGhlIHRlcm1zIHNldCBvdXQgaW4gdGhlIExJQ0VOU0UgZmlsZSwgd2hpY2ggaXMgaW5jbHVkZWRcbiIKQEAgLTE2NTgsNiArMTcxMyw4IEBACiAgICAgICAiICAgLVYgLS12ZXJzaW9uICAgICAgICBkaXNwbGF5IHNvZnR3YXJlIHZlcnNpb24gJiBsaWNlbnNlXG4iCiAgICAgICAiICAgLXMgLS1zbWFsbCAgICAgICAgICB1c2UgbGVzcyBtZW1vcnkgKGF0IG1vc3QgMjUwMGspXG4iCiAgICAgICAiICAgLTEgLi4gLTkgICAgICAgICAgICBzZXQgYmxvY2sgc2l6ZSB0byAxMDBrIC4uIDkwMGtcbiIKKyAgICAgICIgICAtLWZhc3QgICAgICAgICAgICAgIGFsaWFzIGZvciAtMVxuIgorICAgICAgIiAgIC0tYmVzdCAgICAgICAgICAgICAgYWxpYXMgZm9yIC05XG4iCiAgICAgICAiXG4iCiAgICAgICAiICAgSWYgaW52b2tlZCBhcyBgYnppcDInLCBkZWZhdWx0IGFjdGlvbiBpcyB0byBjb21wcmVzcy5cbiIKICAgICAgICIgICAgICAgICAgICAgIGFzIGBidW56aXAyJywgIGRlZmF1bHQgYWN0aW9uIGlzIHRvIGRlY29tcHJlc3MuXG4iCkBAIC0xNjY2LDkgKzE3MjMsOSBAQAogICAgICAgIiAgIElmIG5vIGZpbGUgbmFtZXMgYXJlIGdpdmVuLCBiemlwMiBjb21wcmVzc2VzIG9yIGRlY29tcHJlc3Nlc1xuIgogICAgICAgIiAgIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgWW91IGNhbiBjb21iaW5lXG4iCiAgICAgICAiICAgc2hvcnQgZmxhZ3MsIHNvIGAtdiAtNCcgbWVhbnMgdGhlIHNhbWUgYXMgLXY0IG9yIC00diwgJmMuXG4iCi0jaWYgQlpfVU5JWAorIyAgICAgaWYgQlpfVU5JWAogICAgICAgIlxuIgotI2VuZGlmCisjICAgICBlbmRpZgogICAgICAgLAogCiAgICAgICBCWjJfYnpsaWJWZXJzaW9uKCksCkBAIC0xODE4LDExICsxODc1LDExIEBACiAKICAgIC8qLS0gU2V0IHVwIHNpZ25hbCBoYW5kbGVycyBmb3IgbWVtIGFjY2VzcyBlcnJvcnMgLS0qLwogICAgc2lnbmFsIChTSUdTRUdWLCBteVNJR1NFR1ZvclNJR0JVU2NhdGNoZXIpOwotI2lmIEJaX1VOSVgKLSNpZm5kZWYgX19ESkdQUF9fCisjICBpZiBCWl9VTklYCisjICBpZm5kZWYgX19ESkdQUF9fCiAgICBzaWduYWwgKFNJR0JVUywgIG15U0lHU0VHVm9yU0lHQlVTY2F0Y2hlcik7Ci0jZW5kaWYKLSNlbmRpZgorIyAgZW5kaWYKKyMgIGVuZGlmCiAKICAgIGNvcHlGaWxlTmFtZSAoIGluTmFtZSwgICIobm9uZSkiICk7CiAgICBjb3B5RmlsZU5hbWUgKCBvdXROYW1lLCAiKG5vbmUpIiApOwpAQCAtMTkzMyw2ICsxOTkwLDggQEAKICAgICAgIGlmIChJU0ZMQUcoIi0tZXhwb25lbnRpYWwiKSkgICAgICAgd29ya0ZhY3RvciA9IDE7ICAgICAgICAgICAgIGVsc2UgCiAgICAgICBpZiAoSVNGTEFHKCItLXJlcGV0aXRpdmUtYmVzdCIpKSAgIHJlZHVuZGFudChhYS0+bmFtZSk7ICAgICAgICBlbHNlCiAgICAgICBpZiAoSVNGTEFHKCItLXJlcGV0aXRpdmUtZmFzdCIpKSAgIHJlZHVuZGFudChhYS0+bmFtZSk7ICAgICAgICBlbHNlCisgICAgICBpZiAoSVNGTEFHKCItLWZhc3QiKSkgICAgICAgICAgICAgIGJsb2NrU2l6ZTEwMGsgPSAxOyAgICAgICAgICBlbHNlCisgICAgICBpZiAoSVNGTEFHKCItLWJlc3QiKSkgICAgICAgICAgICAgIGJsb2NrU2l6ZTEwMGsgPSA5OyAgICAgICAgICBlbHNlCiAgICAgICBpZiAoSVNGTEFHKCItLXZlcmJvc2UiKSkgICAgICAgICAgIHZlcmJvc2l0eSsrOyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICBpZiAoSVNGTEFHKCItLWhlbHAiKSkgICAgICAgICAgICAgIHsgdXNhZ2UgKCBwcm9nTmFtZSApOyBleGl0ICggMCApOyB9CiAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9iemlwMi50eHQgYi9iemlwMi50eHQKaW5kZXggNGYxYWU4Ni4uNmFmZTM1OCAxMDA2NDQKLS0tIGEvYnppcDIudHh0CisrKyBiL2J6aXAyLnR4dApAQCAtMSw3ICsxLDYgQEAKIAotCiBOQU1FCi0gICAgICAgYnppcDIsIGJ1bnppcDIgLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wCisgICAgICAgYnppcDIsIGJ1bnppcDIgLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjIKICAgICAgICBiemNhdCAtIGRlY29tcHJlc3NlcyBmaWxlcyB0byBzdGRvdXQKICAgICAgICBiemlwMnJlY292ZXIgLSByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwogCkBAIC0xOCwyMCArMTcsMjAgQEAKICAgICAgICBzb3J0aW5nIHRleHQgY29tcHJlc3Npb24gYWxnb3JpdGhtLCAgYW5kICBIdWZmbWFuICBjb2RpbmcuCiAgICAgICAgQ29tcHJlc3Npb24gIGlzICBnZW5lcmFsbHkgIGNvbnNpZGVyYWJseSAgYmV0dGVyIHRoYW4gdGhhdAogICAgICAgIGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIExaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywKLSAgICAgICBhbmQgIGFwcHJvYWNoZXMgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUFBNIGZhbWlseSBvZiBzdGEtCisgICAgICAgYW5kICBhcHByb2FjaGVzICB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFBQTSBmYW1pbHkgb2Ygc3RhrQogICAgICAgIHRpc3RpY2FsIGNvbXByZXNzb3JzLgogCiAgICAgICAgVGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBkZWxpYmVyYXRlbHkgdmVyeSBzaW1pbGFyICB0bwogICAgICAgIHRob3NlIG9mIEdOVSBnemlwLCBidXQgdGhleSBhcmUgbm90IGlkZW50aWNhbC4KIAotICAgICAgIGJ6aXAyICBleHBlY3RzICBhIGxpc3Qgb2YgZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvbS0KKyAgICAgICBiemlwMiAgZXhwZWN0cyAgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZSBjb22tCiAgICAgICAgbWFuZC1saW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzIHJlcGxhY2VkICBieSAgYSAgY29tcHJlc3NlZAogICAgICAgIHZlcnNpb24gIG9mICBpdHNlbGYsICB3aXRoICB0aGUgIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4KLSAgICAgICBFYWNoIGNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsICBwZXItCi0gICAgICAgbWlzc2lvbnMsIGFuZCwgd2hlbiBwb3NzaWJsZSwgb3duZXJzaGlwIGFzIHRoZSBjb3JyZXNwb25kLQorICAgICAgIEVhY2ggY29tcHJlc3NlZCBmaWxlIGhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgIHBlcq0KKyAgICAgICBtaXNzaW9ucywgYW5kLCB3aGVuIHBvc3NpYmxlLCBvd25lcnNoaXAgYXMgdGhlIGNvcnJlc3BvbmStCiAgICAgICAgaW5nIG9yaWdpbmFsLCBzbyB0aGF0IHRoZXNlIHByb3BlcnRpZXMgIGNhbiAgYmUgIGNvcnJlY3RseQogICAgICAgIHJlc3RvcmVkICBhdCAgZGVjb21wcmVzc2lvbiAgdGltZS4gICBGaWxlIG5hbWUgaGFuZGxpbmcgaXMKLSAgICAgICBuYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIHByZXNlcnYtCisgICAgICAgbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBwcmVzZXJ2rQogICAgICAgIGluZyAgb3JpZ2luYWwgZmlsZSBuYW1lcywgcGVybWlzc2lvbnMsIG93bmVyc2hpcHMgb3IgZGF0ZXMKICAgICAgICBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrIHRoZXNlIGNvbmNlcHRzLCBvciBoYXZlICBzZXJpb3VzCiAgICAgICAgZmlsZSBuYW1lIGxlbmd0aCByZXN0cmljdGlvbnMsIHN1Y2ggYXMgTVMtRE9TLgpAQCAtNjIsMjMgKzYxLDIzIEBACiAgICAgICAgZ3Vlc3MgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB1c2VzIHRoZSBvcmlnaW5hbAogICAgICAgIG5hbWUgd2l0aCAub3V0IGFwcGVuZGVkLgogCi0gICAgICAgQXMgIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzIGRlY29tLQorICAgICAgIEFzICB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8gZmlsZW5hbWVzIGNhdXNlcyBkZWNvba0KICAgICAgICBwcmVzc2lvbiBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC4KIAotICAgICAgIGJ1bnppcDIgd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlIGNvbi0KKyAgICAgICBidW56aXAyIHdpbGwgY29ycmVjdGx5IGRlY29tcHJlc3MgYSBmaWxlIHdoaWNoIGlzIHRoZSBjb26tCiAgICAgICAgY2F0ZW5hdGlvbiBvZiB0d28gb3IgbW9yZSBjb21wcmVzc2VkIGZpbGVzLiAgVGhlIHJlc3VsdCBpcwogICAgICAgIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIHVuY29tcHJlc3NlZCBmaWxlcy4KICAgICAgICBJbnRlZ3JpdHkgdGVzdGluZyAoLXQpIG9mIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzIGlzCiAgICAgICAgYWxzbyBzdXBwb3J0ZWQuCiAKICAgICAgICBZb3UgY2FuIGFsc28gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBmaWxlcyB0byB0aGUgIHN0YW5kYXJkCi0gICAgICAgb3V0cHV0ICBieSBnaXZpbmcgdGhlIC1jIGZsYWcuICBNdWx0aXBsZSBmaWxlcyBtYXkgYmUgY29tLQorICAgICAgIG91dHB1dCAgYnkgZ2l2aW5nIHRoZSAtYyBmbGFnLiAgTXVsdGlwbGUgZmlsZXMgbWF5IGJlIGNvba0KICAgICAgICBwcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzCiAgICAgICAgYXJlICBmZWQgIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZiBtdWx0aXBsZQotICAgICAgIGZpbGVzIGluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbSBjb250YWluaW5nICBtdWx0aS0KKyAgICAgICBmaWxlcyBpbiB0aGlzIG1hbm5lciBnZW5lcmF0ZXMgYSBzdHJlYW0gY29udGFpbmluZyAgbXVsdGmtCiAgICAgICAgcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQogICAgICAgIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSAgYnkgIGJ6aXAyICB2ZXJzaW9uICAwLjkuMCAgb3IKLSAgICAgICBsYXRlci4gICBFYXJsaWVyICB2ZXJzaW9ucyBvZiBiemlwMiB3aWxsIHN0b3AgYWZ0ZXIgZGVjb20tCisgICAgICAgbGF0ZXIuICAgRWFybGllciAgdmVyc2lvbnMgb2YgYnppcDIgd2lsbCBzdG9wIGFmdGVyIGRlY29trQogICAgICAgIHByZXNzaW5nIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCiAKICAgICAgICBiemNhdCAob3IgYnppcDIgLWRjKSBkZWNvbXByZXNzZXMgYWxsIHNwZWNpZmllZCAgZmlsZXMgIHRvCkBAIC05OSw3ICs5OCw3IEBACiAKICAgICAgICBBcyBhIHNlbGYtY2hlY2sgZm9yIHlvdXIgIHByb3RlY3Rpb24sICBiemlwMiAgdXNlcyAgMzItYml0CiAgICAgICAgQ1JDcyAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZQotICAgICAgIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cC0KKyAgICAgICBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLiAgVGhpcyBndWFyZHMgYWdhaW5zdCBjb3JydXCtCiAgICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwogICAgICAgIGluIGJ6aXAyIChob3BlZnVsbHkgdmVyeSB1bmxpa2VseSkuICBUaGUgY2hhbmNlcyAgb2YgIGRhdGEKICAgICAgICBjb3JydXB0aW9uICBnb2luZyAgdW5kZXRlY3RlZCAgaXMgIG1pY3Jvc2NvcGljLCAgYWJvdXQgb25lCkBAIC0xMjcsOCArMTI2LDggQEAKICAgICAgICAgICAgICAgYW5kIGZvcmNlcyBiemlwMiB0byBkZWNvbXByZXNzLgogCiAgICAgICAgLXogLS1jb21wcmVzcwotICAgICAgICAgICAgICBUaGUgIGNvbXBsZW1lbnQgIHRvIC1kOiBmb3JjZXMgY29tcHJlc3Npb24sIHJlZ2FyZC0KLSAgICAgICAgICAgICAgbGVzcyBvZiB0aGUgaW52b2thdGlvbiBuYW1lLgorICAgICAgICAgICAgICBUaGUgICBjb21wbGVtZW50ICAgdG8gICAtZDogICBmb3JjZXMgICBjb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgaW52b2NhdGlvbiBuYW1lLgogCiAgICAgICAgLXQgLS10ZXN0CiAgICAgICAgICAgICAgIENoZWNrIGludGVncml0eSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocyksIGJ1dCBkb24ndApAQCAtMTQxLDYgKzE0MCwxMSBAQAogICAgICAgICAgICAgICBmb3JjZXMgYnppcDIgdG8gYnJlYWsgaGFyZCBsaW5rcyB0byBmaWxlcywgd2hpY2ggaXQKICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHdvdWxkbid0IGRvLgogCisgICAgICAgICAgICAgIGJ6aXAyICBub3JtYWxseSAgZGVjbGluZXMgdG8gZGVjb21wcmVzcyBmaWxlcyB3aGljaAorICAgICAgICAgICAgICBkb24ndCBoYXZlIHRoZSAgY29ycmVjdCAgbWFnaWMgIGhlYWRlciAgYnl0ZXMuICAgSWYKKyAgICAgICAgICAgICAgZm9yY2VkICAoLWYpLCAgaG93ZXZlciwgIGl0ICB3aWxsICBwYXNzICBzdWNoIGZpbGVzCisgICAgICAgICAgICAgIHRocm91Z2ggdW5tb2RpZmllZC4gIFRoaXMgaXMgaG93IEdOVSBnemlwICBiZWhhdmVzLgorCiAgICAgICAgLWsgLS1rZWVwCiAgICAgICAgICAgICAgIEtlZXAgIChkb24ndCBkZWxldGUpIGlucHV0IGZpbGVzIGR1cmluZyBjb21wcmVzc2lvbgogICAgICAgICAgICAgICBvciBkZWNvbXByZXNzaW9uLgpAQCAtMTY3LDcgKzE3MSw3IEBACiAKICAgICAgICAtdiAtLXZlcmJvc2UKICAgICAgICAgICAgICAgVmVyYm9zZSBtb2RlIC0tIHNob3cgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGZvciBlYWNoCi0gICAgICAgICAgICAgIGZpbGUgIHByb2Nlc3NlZC4gICBGdXJ0aGVyICAtdidzICBpbmNyZWFzZSB0aGUgdmVyLQorICAgICAgICAgICAgICBmaWxlICBwcm9jZXNzZWQuICAgRnVydGhlciAgLXYncyAgaW5jcmVhc2UgdGhlIHZlcq0KICAgICAgICAgICAgICAgYm9zaXR5IGxldmVsLCBzcGV3aW5nIG91dCBsb3RzIG9mIGluZm9ybWF0aW9uIHdoaWNoCiAgICAgICAgICAgICAgIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KIApAQCAtMTc1LDIwICsxNzksMjQgQEAKICAgICAgICAgICAgICAgRGlzcGxheSAgdGhlICBzb2Z0d2FyZSAgdmVyc2lvbiwgIGxpY2Vuc2UgdGVybXMgYW5kCiAgICAgICAgICAgICAgIGNvbmRpdGlvbnMuCiAKLSAgICAgICAtMSB0byAtOQorICAgICAgIC0xIChvciAtLWZhc3QpIHRvIC05IChvciAtLWJlc3QpCiAgICAgICAgICAgICAgIFNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4gIDkwMCAgayAgd2hlbgogICAgICAgICAgICAgICBjb21wcmVzc2luZy4gICBIYXMgIG5vICBlZmZlY3QgIHdoZW4gZGVjb21wcmVzc2luZy4KLSAgICAgICAgICAgICAgU2VlIE1FTU9SWSBNQU5BR0VNRU5UIGJlbG93LgorICAgICAgICAgICAgICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuICBUaGUgLS1mYXN0IGFuZCAtLWJlc3QKKyAgICAgICAgICAgICAgYWxpYXNlcyAgYXJlICBwcmltYXJpbHkgZm9yIEdOVSBnemlwIGNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIC0tZmFzdCBkb2Vzbid0IG1ha2UgdGhpbmdzICBzaWduaWZprQorICAgICAgICAgICAgICBjYW50bHkgIGZhc3Rlci4gICBBbmQgIC0tYmVzdCAgbWVyZWx5ICBzZWxlY3RzICB0aGUKKyAgICAgICAgICAgICAgZGVmYXVsdCBiZWhhdmlvdXIuCiAKICAgICAgICAtLSAgICAgVHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLCBldmVuCi0gICAgICAgICAgICAgIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFuLQorICAgICAgICAgICAgICBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbq0KICAgICAgICAgICAgICAgZGxlIGZpbGVzIHdpdGggbmFtZXMgYmVnaW5uaW5nICB3aXRoICBhICBkYXNoLCAgZm9yCiAgICAgICAgICAgICAgIGV4YW1wbGU6IGJ6aXAyIC0tIC1teWZpbGVuYW1lLgogCiAgICAgICAgLS1yZXBldGl0aXZlLWZhc3QgLS1yZXBldGl0aXZlLWJlc3QKICAgICAgICAgICAgICAgVGhlc2UgIGZsYWdzICBhcmUgIHJlZHVuZGFudCAgaW4gdmVyc2lvbnMgMC45LjUgYW5kCiAgICAgICAgICAgICAgIGFib3ZlLiAgVGhleSBwcm92aWRlZCBzb21lIGNvYXJzZSBjb250cm9sIG92ZXIgIHRoZQotICAgICAgICAgICAgICBiZWhhdmlvdXIgIG9mIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbiBlYXJsaWVyIHZlci0KKyAgICAgICAgICAgICAgYmVoYXZpb3VyICBvZiB0aGUgc29ydGluZyBhbGdvcml0aG0gaW4gZWFybGllciB2ZXKtCiAgICAgICAgICAgICAgIHNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZQogICAgICAgICAgICAgICBoYXZlICBhbiAgaW1wcm92ZWQgIGFsZ29yaXRobSAgd2hpY2ggIHJlbmRlcnMgdGhlc2UKICAgICAgICAgICAgICAgZmxhZ3MgaXJyZWxldmFudC4KQEAgLTE5OSw3ICsyMDcsNyBAQAogICAgICAgIGFmZmVjdHMgIGJvdGggIHRoZSAgY29tcHJlc3Npb24gIHJhdGlvICBhY2hpZXZlZCwgIGFuZCB0aGUKICAgICAgICBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24uCiAgICAgICAgVGhlICBmbGFncyAgLTEgIHRocm91Z2ggIC05ICBzcGVjaWZ5ICB0aGUgYmxvY2sgc2l6ZSB0byBiZQotICAgICAgIDEwMCwwMDAgYnl0ZXMgdGhyb3VnaCA5MDAsMDAwIGJ5dGVzICh0aGUgZGVmYXVsdCkgIHJlc3BlYy0KKyAgICAgICAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpICByZXNwZWOtCiAgICAgICAgdGl2ZWx5LiAgIEF0ICBkZWNvbXByZXNzaW9uICB0aW1lLCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvcgogICAgICAgIGNvbXByZXNzaW9uIGlzIHJlYWQgZnJvbSAgdGhlICBoZWFkZXIgIG9mICB0aGUgIGNvbXByZXNzZWQKICAgICAgICBmaWxlLCBhbmQgYnVuemlwMiB0aGVuIGFsbG9jYXRlcyBpdHNlbGYganVzdCBlbm91Z2ggbWVtb3J5CkBAIC0yMjcsMTMgKzIzNSwxMyBAQAogICAgICAgIGJ1bnppcDIgd2lsbCByZXF1aXJlIGFib3V0IDM3MDAga2J5dGVzIHRvIGRlY29tcHJlc3MuICAgVG8KICAgICAgICBzdXBwb3J0IGRlY29tcHJlc3Npb24gb2YgYW55IGZpbGUgb24gYSA0IG1lZ2FieXRlIG1hY2hpbmUsCiAgICAgICAgYnVuemlwMiBoYXMgYW4gb3B0aW9uIHRvICBkZWNvbXByZXNzICB1c2luZyAgYXBwcm94aW1hdGVseQotICAgICAgIGhhbGYgdGhpcyBhbW91bnQgb2YgbWVtb3J5LCBhYm91dCAyMzAwIGtieXRlcy4gIERlY29tcHJlcy0KKyAgICAgICBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXOtCiAgICAgICAgc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwgc28geW91IHNob3VsZCB1c2UgIHRoaXMgIG9wdGlvbgogICAgICAgIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50IGZsYWcgaXMgLXMuCiAKLSAgICAgICBJbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb24tCisgICAgICAgSW4gZ2VuZXJhbCwgdHJ5IGFuZCB1c2UgdGhlIGxhcmdlc3QgYmxvY2sgc2l6ZSBtZW1vcnkgY29urQogICAgICAgIHN0cmFpbnRzICBhbGxvdywgIHNpbmNlICB0aGF0ICBtYXhpbWlzZXMgIHRoZSAgY29tcHJlc3Npb24KLSAgICAgICBhY2hpZXZlZC4gICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHUtCisgICAgICAgYWNoaWV2ZWQuICAgQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQgYXJlIHZpcnR1rQogICAgICAgIGFsbHkgdW5hZmZlY3RlZCBieSBibG9jayBzaXplLgogCiAgICAgICAgQW5vdGhlciBzaWduaWZpY2FudCBwb2ludCBhcHBsaWVzIHRvIGZpbGVzIHdoaWNoIGZpdCBpbiAgYQpAQCAtMjQ5LDExICsyNTcsMTEgQEAKIAogICAgICAgIEhlcmUgIGlzIGEgdGFibGUgd2hpY2ggc3VtbWFyaXNlcyB0aGUgbWF4aW11bSBtZW1vcnkgdXNhZ2UKICAgICAgICBmb3IgZGlmZmVyZW50IGJsb2NrIHNpemVzLiAgQWxzbyAgcmVjb3JkZWQgIGlzICB0aGUgIHRvdGFsCi0gICAgICAgY29tcHJlc3NlZCAgc2l6ZSBmb3IgMTQgZmlsZXMgb2YgdGhlIENhbGdhcnkgVGV4dCBDb21wcmVzLQorICAgICAgIGNvbXByZXNzZWQgIHNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc60KICAgICAgICBzaW9uIENvcnB1cyB0b3RhbGxpbmcgMywxNDEsNjIyIGJ5dGVzLiAgVGhpcyBjb2x1bW4gIGdpdmVzCiAgICAgICAgc29tZSAgZmVlbCAgZm9yICBob3cgIGNvbXByZXNzaW9uICB2YXJpZXMgd2l0aCBibG9jayBzaXplLgogICAgICAgIFRoZXNlIGZpZ3VyZXMgdGVuZCB0byB1bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2UgIG9mICBsYXJnZXIKLSAgICAgICBibG9jayAgc2l6ZXMgIGZvciAgbGFyZ2VyIGZpbGVzLCBzaW5jZSB0aGUgQ29ycHVzIGlzIGRvbWktCisgICAgICAgYmxvY2sgIHNpemVzICBmb3IgIGxhcmdlciBmaWxlcywgc2luY2UgdGhlIENvcnB1cyBpcyBkb21prQogICAgICAgIG5hdGVkIGJ5IHNtYWxsZXIgZmlsZXMuCiAKICAgICAgICAgICAgICAgICAgIENvbXByZXNzICAgRGVjb21wcmVzcyAgIERlY29tcHJlc3MgICBDb3JwdXMKQEAgLTI3Miw3ICsyODAsNyBAQAogCiBSRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTCiAgICAgICAgYnppcDIgY29tcHJlc3NlcyBmaWxlcyBpbiBibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzICBsb25nLgotICAgICAgIEVhY2ggYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFucy0KKyAgICAgICBFYWNoIGJsb2NrIGlzIGhhbmRsZWQgaW5kZXBlbmRlbnRseS4gIElmIGEgbWVkaWEgb3IgdHJhbnOtCiAgICAgICAgbWlzc2lvbiBlcnJvciBjYXVzZXMgYSBtdWx0aS1ibG9jayAgLmJ6MiAgZmlsZSAgdG8gIGJlY29tZQogICAgICAgIGRhbWFnZWQsICBpdCAgbWF5ICBiZSAgcG9zc2libGUgIHRvICByZWNvdmVyIGRhdGEgZnJvbSB0aGUKICAgICAgICB1bmRhbWFnZWQgYmxvY2tzIGluIHRoZSBmaWxlLgpAQCAtMjg5LDE5ICsyOTcsMTkgQEAKICAgICAgICB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXN1bHRpbmcgZmlsZXMsIGFuZCBkZWNvbXByZXNzIHRob3NlCiAgICAgICAgd2hpY2ggYXJlIHVuZGFtYWdlZC4KIAotICAgICAgIGJ6aXAycmVjb3ZlciB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhbS0KLSAgICAgICBhZ2VkIGZpbGUsIGFuZCB3cml0ZXMgYSBudW1iZXIgb2YgZmlsZXMgInJlYzAwMDFmaWxlLmJ6MiIsCi0gICAgICAgInJlYzAwMDJmaWxlLmJ6MiIsIGV0YywgY29udGFpbmluZyB0aGUgIGV4dHJhY3RlZCAgYmxvY2tzLgotICAgICAgIFRoZSAgb3V0cHV0ICBmaWxlbmFtZXMgIGFyZSAgZGVzaWduZWQgIHNvICB0aGF0IHRoZSB1c2Ugb2YKLSAgICAgICB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nIC0tIGZvciBleGFtcGxlLCAgImJ6aXAyCi0gICAgICAgLWRjICAgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGEiIC0tIGxpc3RzIHRoZSBmaWxlcyBpbgotICAgICAgIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgIGJ6aXAycmVjb3ZlciB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhba0KKyAgICAgICBhZ2VkICAgIGZpbGUsICAgIGFuZCAgICB3cml0ZXMgICAgYSAgICBudW1iZXIgICBvZiAgIGZpbGVzCisgICAgICAgInJlYzAwMDAxZmlsZS5iejIiLCAgInJlYzAwMDAyZmlsZS5iejIiLCAgZXRjLCAgY29udGFpbmluZworICAgICAgIHRoZSAgIGV4dHJhY3RlZCAgIGJsb2Nrcy4gICBUaGUgICBvdXRwdXQgICBmaWxlbmFtZXMgICBhcmUKKyAgICAgICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZiB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm+tCisgICAgICAgY2Vzc2luZyAgLS0gZm9yIGV4YW1wbGUsICJiemlwMiAtZGMgIHJlYypmaWxlLmJ6MiA+IHJlY292rQorICAgICAgIGVyZWRfZGF0YSIgLS0gcHJvY2Vzc2VzIHRoZSBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KIAogICAgICAgIGJ6aXAycmVjb3ZlciBzaG91bGQgYmUgb2YgbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIC5iejIKICAgICAgICBmaWxlcywgIGFzICB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5CiAgICAgICAgZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayAgZmlsZXMsICBzaW5jZSAgYQotICAgICAgIGRhbWFnZWQgIGJsb2NrICBjYW5ub3QgIGJlIHJlY292ZXJlZC4gIElmIHlvdSB3aXNoIHRvIG1pbi0KLSAgICAgICBpbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoIG1lZGlhICBvciAgdHJhbnNtaXMtCisgICAgICAgZGFtYWdlZCAgYmxvY2sgIGNhbm5vdCAgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWlurQorICAgICAgIGltaXNlIGFueSBwb3RlbnRpYWwgZGF0YSBsb3NzIHRocm91Z2ggbWVkaWEgIG9yICB0cmFuc21pc60KICAgICAgICBzaW9uIGVycm9ycywgeW91IG1pZ2h0IGNvbnNpZGVyIGNvbXByZXNzaW5nIHdpdGggYSBzbWFsbGVyCiAgICAgICAgYmxvY2sgc2l6ZS4KIApAQCAtMzE1LDE5ICszMjMsMTkgQEAKICAgICAgICBiZXR0ZXIgIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgaW4gdGhpcyByZXNwZWN0LiAgVGhlIHJhdGlvCiAgICAgICAgYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbgogICAgICAgIHRoZSAgcmVnaW9uICBvZiAgMTA6MS4gIEZvciBwcmV2aW91cyB2ZXJzaW9ucywgdGhpcyBmaWd1cmUKLSAgICAgICB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlIC12dnZ2IG9wdGlvbiB0byBtb24tCisgICAgICAgd2FzIG1vcmUgbGlrZSAxMDA6MS4gIFlvdSBjYW4gdXNlIHRoZSAtdnZ2diBvcHRpb24gdG8gbW9urQogICAgICAgIGl0b3IgcHJvZ3Jlc3MgaW4gZ3JlYXQgZGV0YWlsLCBpZiB5b3Ugd2FudC4KIAogICAgICAgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgdW5hZmZlY3RlZCBieSB0aGVzZSBwaGVub21lbmEuCiAKICAgICAgICBiemlwMiAgdXN1YWxseSAgYWxsb2NhdGVzICBzZXZlcmFsICBtZWdhYnl0ZXMgb2YgbWVtb3J5IHRvCi0gICAgICAgb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwgb3ZlciBpdCBpbiBhIGZhaXJseSAgcmFuLQotICAgICAgIGRvbSAgZmFzaGlvbi4gICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsIGJvdGggZm9yIGNvbS0KKyAgICAgICBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5ICByYW6tCisgICAgICAgZG9tICBmYXNoaW9uLiAgIFRoaXMgbWVhbnMgdGhhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgY29trQogICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKICAgICAgICBzcGVlZCAgYXQgIHdoaWNoICB5b3VyICBtYWNoaW5lICBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCiAgICAgICAgQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvICByZWR1Y2UgIHRoZQogICAgICAgIG1pc3MgIHJhdGUgIGhhdmUgIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkKLSAgICAgICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUgYnppcDIgd2lsbCBwZXItCisgICAgICAgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLiAgSSBpbWFnaW5lIGJ6aXAyIHdpbGwgcGVyrQogICAgICAgIGZvcm0gYmVzdCBvbiBtYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLgogCiAKQEAgLTMzNyw0MCArMzQ1LDQ2IEBACiAgICAgICAgYnV0ICB0aGUgIGRldGFpbHMgIG9mICB3aGF0ICB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbQogICAgICAgIHJhdGhlciBtaXNsZWFkaW5nLgogCi0gICAgICAgVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMCBvZiBiemlwMi4gIENvbS0KKyAgICAgICBUaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjIgb2YgYnppcDIuICBDb22tCiAgICAgICAgcHJlc3NlZCAgZGF0YSBjcmVhdGVkIGJ5IHRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcwogICAgICAgIGFuZCAgYmFja3dhcmRzICBjb21wYXRpYmxlICB3aXRoICAgdGhlICAgcHJldmlvdXMgICBwdWJsaWMKLSAgICAgICByZWxlYXNlcywgIHZlcnNpb25zICAwLjFwbDIsIDAuOS4wIGFuZCAwLjkuNSwgYnV0IHdpdGggdGhlCi0gICAgICAgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kIGFib3ZlIGNhbiBjb3JyZWN0bHkgIGRlY29tLQotICAgICAgIHByZXNzIG11bHRpcGxlIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLiAgMC4xcGwyIGNhbi0KLSAgICAgICBub3QgZG8gdGhpczsgaXQgd2lsbCBzdG9wICBhZnRlciAgZGVjb21wcmVzc2luZyAganVzdCAgdGhlCi0gICAgICAgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgorICAgICAgIHJlbGVhc2VzLCAgdmVyc2lvbnMgMC4xcGwyLCAwLjkuMCwgMC45LjUsIDEuMC4wIGFuZCAxLjAuMSwKKyAgICAgICBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kIGFib3ZlIGNhbiBjb3KtCisgICAgICAgcmVjdGx5ICBkZWNvbXByZXNzIG11bHRpcGxlIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLgorICAgICAgIDAuMXBsMiBjYW5ub3QgZG8gdGhpczsgaXQgd2lsbCAgc3RvcCAgYWZ0ZXIgIGRlY29tcHJlc3NpbmcKKyAgICAgICBqdXN0IHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCiAKLSAgICAgICBiemlwMnJlY292ZXIgIHVzZXMgIDMyLWJpdCBpbnRlZ2VycyB0byByZXByZXNlbnQgYml0IHBvc2ktCi0gICAgICAgdGlvbnMgaW4gY29tcHJlc3NlZCBmaWxlcywgc28gaXQgY2Fubm90IGhhbmRsZSAgY29tcHJlc3NlZAotICAgICAgIGZpbGVzICBtb3JlIHRoYW4gNTEyIG1lZ2FieXRlcyBsb25nLiAgVGhpcyBjb3VsZCBlYXNpbHkgYmUKLSAgICAgICBmaXhlZC4KKyAgICAgICBiemlwMnJlY292ZXIgIHZlcnNpb25zICBwcmlvciAgdG8gIHRoaXMgIG9uZSwgIDEuMC4yLCB1c2VkCisgICAgICAgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudCBiaXQgcG9zaXRpb25zICBpbiAgY29tcHJlc3NlZAorICAgICAgIGZpbGVzLCAgc28gIGl0IGNvdWxkIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlIHRoYW4KKyAgICAgICA1MTIgbWVnYWJ5dGVzIGxvbmcuICBWZXJzaW9uIDEuMC4yIGFuZCBhYm92ZSAgdXNlcyAgNjQtYml0CisgICAgICAgaW50cyAgb24gIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZAorICAgICAgIHRhcmdldHMsICBhbmQgIFdpbmRvd3MpLiAgIFRvICBlc3RhYmxpc2ggIHdoZXRoZXIgIG9yICBub3QKKyAgICAgICBiemlwMnJlY292ZXIgIHdhcyAgYnVpbHQgIHdpdGggIHN1Y2ggIGEgbGltaXRhdGlvbiwgcnVuIGl0CisgICAgICAgd2l0aG91dCBhcmd1bWVudHMuICBJbiBhbnkgZXZlbnQgeW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbgorICAgICAgIHVubGltaXRlZCB2ZXJzaW9uIGlmIHlvdSBjYW4gcmVjb21waWxlIGl0IHdpdGggTWF5YmVVSW50NjQKKyAgICAgICBzZXQgdG8gYmUgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIuCiAKIAogQVVUSE9SCiAgICAgICAgSnVsaWFuIFNld2FyZCwganNld2FyZEBhY20ub3JnLgogCi0gICAgICAgaHR0cDovL3NvdXJjZXdhcmUuY3lnbnVzLmNvbS9iemlwMgotICAgICAgIGh0dHA6Ly93d3cubXVyYXJvYS5kZW1vbi5jby51aworICAgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnppcDIKIAotICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBiemlwMiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbC0KKyAgICAgICBUaGUgaWRlYXMgZW1ib2RpZWQgaW4gYnppcDIgYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2ytCiAgICAgICAgbG93aW5nICBwZW9wbGU6IE1pY2hhZWwgQnVycm93cyBhbmQgRGF2aWQgV2hlZWxlciAoZm9yIHRoZQogICAgICAgIGJsb2NrIHNvcnRpbmcgdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyICAoYWdhaW4sICBmb3IKLSAgICAgICB0aGUgSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2QtCisgICAgICAgdGhlIEh1ZmZtYW4gY29kZXIpLCBQZXRlciBGZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29krQogICAgICAgIGluZyBtb2RlbCBpbiB0aGUgb3JpZ2luYWwgYnppcCwgYW5kIG1hbnkgcmVmaW5lbWVudHMpLCBhbmQKICAgICAgICBBbGlzdGFpciAgTW9mZmF0LCAgUmFkZm9yZCAgTmVhbCAgYW5kICBJYW4gV2l0dGVuIChmb3IgdGhlCiAgICAgICAgYXJpdGhtZXRpYyAgY29kZXIgIGluICB0aGUgIG9yaWdpbmFsICBiemlwKS4gICBJICBhbSAgbXVjaAotICAgICAgIGluZGVidGVkIGZvciB0aGVpciBoZWxwLCBzdXBwb3J0IGFuZCBhZHZpY2UuICBTZWUgdGhlIG1hbi0KKyAgICAgICBpbmRlYnRlZCBmb3IgdGhlaXIgaGVscCwgc3VwcG9ydCBhbmQgYWR2aWNlLiAgU2VlIHRoZSBtYW6tCiAgICAgICAgdWFsIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzICBvZgogICAgICAgIGRvY3VtZW50YXRpb24uICBDaHJpc3RpYW4gdm9uIFJvcXVlcyBlbmNvdXJhZ2VkIG1lIHRvIGxvb2sKLSAgICAgICBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8gc3BlZWQgdXAgIGNvbXByZXMtCisgICAgICAgZm9yIGZhc3RlciBzb3J0aW5nIGFsZ29yaXRobXMsIHNvIGFzIHRvIHNwZWVkIHVwICBjb21wcmVzrQogICAgICAgIHNpb24uICBCZWxhIEx1YmtpbiBlbmNvdXJhZ2VkIG1lIHRvIGltcHJvdmUgdGhlIHdvcnN0LWNhc2UKLSAgICAgICBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkCi0gICAgICAgd2l0aCAgcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUgYWR2aWNlIGFuZAotICAgICAgIHdlcmUgZ2VuZXJhbGx5IGhlbHBmdWwuCisgICAgICAgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBUaGUgYnoqIHNjcmlwdHMgYXJlIGRlcml2ZWQgZnJvbQorICAgICAgIHRob3NlICBvZiBHTlUgZ3ppcC4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkIHdpdGgKKyAgICAgICBwb3J0YWJpbGl0eSBwcm9ibGVtcywgbGVudCBtYWNoaW5lcywgZ2F2ZSBhZHZpY2UgYW5kICB3ZXJlCisgICAgICAgZ2VuZXJhbGx5IGhlbHBmdWwuCiAKZGlmZiAtLWdpdCBhL2J6aXAycmVjb3Zlci5jIGIvYnppcDJyZWNvdmVyLmMKaW5kZXggYmEzZDE3NS4uMjg2ODczYiAxMDA2NDQKLS0tIGEvYnppcDJyZWNvdmVyLmMKKysrIGIvYnppcDJyZWNvdmVyLmMKQEAgLTksNyArOSw3IEBACiAgIHNhbHZhZ2UgZnJvbSBkYW1hZ2VkIGZpbGVzIGNyZWF0ZWQgYnkgdGhlIGFjY29tcGFueWluZwogICBiemlwMi0xLjAgcHJvZ3JhbS4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDYgKzU3LDI5IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKworLyogVGhpcyBwcm9ncmFtIHJlY29yZHMgYml0IGxvY2F0aW9ucyBpbiB0aGUgZmlsZSB0byBiZSByZWNvdmVyZWQuCisgICBUaGF0IG1lYW5zIHRoYXQgaWYgNjQtYml0IGludHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHdlIHdpbGwgbm90CisgICBiZSBhYmxlIHRvIHJlY292ZXIgLmJ6MiBmaWxlcyBvdmVyIDUxMk1CICgyXjMyIGJpdHMpIGxvbmcuCisgICBPbiBHTlUgc3VwcG9ydGVkIHBsYXRmb3Jtcywgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDY0LWJpdAorICAgaW50IHN1cHBvcnQgdG8gY2lyY3VtdmVudCB0aGlzIHByb2JsZW0uICBEaXR0byBNU1ZDLgorCisgICBUaGlzIGNoYW5nZSBvY2N1cnJlZCBpbiB2ZXJzaW9uIDEuMC4yOyBhbGwgcHJpb3IgdmVyc2lvbnMgaGF2ZQorICAgdGhlIDUxMk1CIGxpbWl0YXRpb24uCisqLworI2lmZGVmIF9fR05VQ19fCisgICB0eXBlZGVmICB1bnNpZ25lZCBsb25nIGxvbmcgaW50ICBNYXliZVVJbnQ2NDsKKyMgIGRlZmluZSBNYXliZVVJbnQ2NF9GTVQgIiVMdSIKKyNlbHNlCisjaWZkZWYgX01TQ19WRVIKKyAgIHR5cGVkZWYgIHVuc2lnbmVkIF9faW50NjQgIE1heWJlVUludDY0OworIyAgZGVmaW5lIE1heWJlVUludDY0X0ZNVCAiJUk2NHUiCisjZWxzZQorICAgdHlwZWRlZiAgdW5zaWduZWQgaW50ICAgTWF5YmVVSW50NjQ7CisjICBkZWZpbmUgTWF5YmVVSW50NjRfRk1UICIldSIKKyNlbmRpZgorI2VuZGlmCisKIHR5cGVkZWYgIHVuc2lnbmVkIGludCAgIFVJbnQzMjsKIHR5cGVkZWYgIGludCAgICAgICAgICAgIEludDMyOwogdHlwZWRlZiAgdW5zaWduZWQgY2hhciAgVUNoYXI7CkBAIC02NiwxMyArODksMjUgQEAKICNkZWZpbmUgRmFsc2UgICAoKEJvb2wpMCkKIAogCi1DaGFyIGluRmlsZU5hbWVbMjAwMF07Ci1DaGFyIG91dEZpbGVOYW1lWzIwMDBdOwotQ2hhciBwcm9nTmFtZVsyMDAwXTsKKyNkZWZpbmUgQlpfTUFYX0ZJTEVOQU1FIDIwMDAKIAotVUludDMyIGJ5dGVzT3V0ID0gMDsKLVVJbnQzMiBieXRlc0luICA9IDA7CitDaGFyIGluRmlsZU5hbWVbQlpfTUFYX0ZJTEVOQU1FXTsKK0NoYXIgb3V0RmlsZU5hbWVbQlpfTUFYX0ZJTEVOQU1FXTsKK0NoYXIgcHJvZ05hbWVbQlpfTUFYX0ZJTEVOQU1FXTsKIAorTWF5YmVVSW50NjQgYnl0ZXNPdXQgPSAwOworTWF5YmVVSW50NjQgYnl0ZXNJbiAgPSAwOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIEhlYWRlciBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBCWl9IRFJfQiAweDQyICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdCJyAqLworI2RlZmluZSBCWl9IRFJfWiAweDVhICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdaJyAqLworI2RlZmluZSBCWl9IRFJfaCAweDY4ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdoJyAqLworI2RlZmluZSBCWl9IRFJfMCAweDMwICAgICAgICAgICAgICAgICAgICAgICAgIC8qICcwJyAqLworIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBJL08gZXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSovCkBAIC0xMTYsNiArMTUxLDIzIEBACiB9CiAKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCB0b29NYW55QmxvY2tzICggSW50MzIgbWF4X2hhbmRsZWRfYmxvY2tzICkKK3sKKyAgIGZwcmludGYgKCBzdGRlcnIsCisgICAgICAgICAgICAgIiVzOiBgJXMnIGFwcGVhcnMgdG8gY29udGFpbiBtb3JlIHRoYW4gJWQgYmxvY2tzXG4iLAorICAgICAgICAgICAgcHJvZ05hbWUsIGluRmlsZU5hbWUsIG1heF9oYW5kbGVkX2Jsb2NrcyApOworICAgZnByaW50ZiAoIHN0ZGVyciwKKyAgICAgICAgICAgICAiJXM6IGFuZCBjYW5ub3QgYmUgaGFuZGxlZC4gIFRvIGZpeCwgaW5jcmVhc2VcbiIsCisgICAgICAgICAgICAgcHJvZ05hbWUgKTsKKyAgIGZwcmludGYgKCBzdGRlcnIsIAorICAgICAgICAgICAgICIlczogQlpfTUFYX0hBTkRMRURfQkxPQ0tTIGluIGJ6aXAycmVjb3Zlci5jLCBhbmQgcmVjb21waWxlLlxuIiwKKyAgICAgICAgICAgICBwcm9nTmFtZSApOworICAgZXhpdCAoIDEgKTsKK30KKworCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIEJpdCBzdHJlYW0gSS9PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI1NCwyNyArMzA2LDM3IEBACiAvKi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIFRoaXMgbG9naWMgaXNuJ3QgcmVhbGx5IHJpZ2h0IHdoZW4gaXQgY29tZXMgdG8gQ3lnd2luLiAqLworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lICBCWl9TUExJVF9TWU0gICdcXCcgIC8qIHBhdGggc3BsaXR0ZXIgb24gV2luZG93cyBwbGF0Zm9ybSAqLworI2Vsc2UKKyMgIGRlZmluZSAgQlpfU1BMSVRfU1lNICAnLycgICAvKiBwYXRoIHNwbGl0dGVyIG9uIFVuaXggcGxhdGZvcm0gKi8KKyNlbmRpZgorCiAjZGVmaW5lIEJMT0NLX0hFQURFUl9ISSAgMHgwMDAwMzE0MVVMCiAjZGVmaW5lIEJMT0NLX0hFQURFUl9MTyAgMHg1OTI2NTM1OVVMCiAKICNkZWZpbmUgQkxPQ0tfRU5ETUFSS19ISSAweDAwMDAxNzcyVUwKICNkZWZpbmUgQkxPQ0tfRU5ETUFSS19MTyAweDQ1Mzg1MDkwVUwKIAorLyogSW5jcmVhc2UgaWYgbmVjZXNzYXJ5LiAgSG93ZXZlciwgYSAuYnoyIGZpbGUgd2l0aCA+IDUwMDAwIGJsb2NrcworICAgd291bGQgaGF2ZSBhbiB1bmNvbXByZXNzZWQgc2l6ZSBvZiBhdCBsZWFzdCA0MEdCLCBzbyB0aGUgY2hhbmNlcworICAgYXJlIGxvdyB5b3UnbGwgbmVlZCB0byB1cCB0aGlzLgorKi8KKyNkZWZpbmUgQlpfTUFYX0hBTkRMRURfQkxPQ0tTIDUwMDAwCiAKLVVJbnQzMiBiU3RhcnRbMjAwMDBdOwotVUludDMyIGJFbmRbMjAwMDBdOwotVUludDMyIHJiU3RhcnRbMjAwMDBdOwotVUludDMyIHJiRW5kWzIwMDAwXTsKK01heWJlVUludDY0IGJTdGFydCBbQlpfTUFYX0hBTkRMRURfQkxPQ0tTXTsKK01heWJlVUludDY0IGJFbmQgICBbQlpfTUFYX0hBTkRMRURfQkxPQ0tTXTsKK01heWJlVUludDY0IHJiU3RhcnRbQlpfTUFYX0hBTkRMRURfQkxPQ0tTXTsKK01heWJlVUludDY0IHJiRW5kICBbQlpfTUFYX0hBTkRMRURfQkxPQ0tTXTsKIAogSW50MzIgbWFpbiAoIEludDMyIGFyZ2MsIENoYXIqKiBhcmd2ICkKIHsKICAgIEZJTEUqICAgICAgIGluRmlsZTsKICAgIEZJTEUqICAgICAgIG91dEZpbGU7CiAgICBCaXRTdHJlYW0qICBic0luLCAqYnNXcjsKLSAgIEludDMyICAgICAgIGN1cnJCbG9jaywgYiwgd3JCbG9jazsKLSAgIFVJbnQzMiAgICAgIGJpdHNSZWFkOwotICAgSW50MzIgICAgICAgcmJDdHI7Ci0KKyAgIEludDMyICAgICAgIGIsIHdyQmxvY2ssIGN1cnJCbG9jaywgcmJDdHI7CisgICBNYXliZVVJbnQ2NCBiaXRzUmVhZDsKIAogICAgVUludDMyICAgICAgYnVmZkhpLCBidWZmTG8sIGJsb2NrQ1JDOwogICAgQ2hhciogICAgICAgcDsKQEAgLTI4MiwxMSArMzQ0LDM3IEBACiAgICBzdHJjcHkgKCBwcm9nTmFtZSwgYXJndlswXSApOwogICAgaW5GaWxlTmFtZVswXSA9IG91dEZpbGVOYW1lWzBdID0gMDsKIAotICAgZnByaW50ZiAoIHN0ZGVyciwgImJ6aXAycmVjb3ZlciAxLjA6IGV4dHJhY3RzIGJsb2NrcyBmcm9tIGRhbWFnZWQgLmJ6MiBmaWxlcy5cbiIgKTsKKyAgIGZwcmludGYgKCBzdGRlcnIsIAorICAgICAgICAgICAgICJiemlwMnJlY292ZXIgMS4wLjI6IGV4dHJhY3RzIGJsb2NrcyBmcm9tIGRhbWFnZWQgLmJ6MiBmaWxlcy5cbiIgKTsKIAogICAgaWYgKGFyZ2MgIT0gMikgewogICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiVzOiB1c2FnZSBpcyBgJXMgZGFtYWdlZF9maWxlX25hbWUnLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dOYW1lLCBwcm9nTmFtZSApOworICAgICAgc3dpdGNoIChzaXplb2YoTWF5YmVVSW50NjQpKSB7CisgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgCisgICAgICAgICAgICAgICAgICAgICJcdHJlc3RyaWN0aW9ucyBvbiBzaXplIG9mIHJlY292ZXJlZCBmaWxlOiBOb25lXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIAorICAgICAgICAgICAgICAgICAgICAiXHRyZXN0cmljdGlvbnMgb24gc2l6ZSBvZiByZWNvdmVyZWQgZmlsZTogNTEyIE1CXG4iKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAKKyAgICAgICAgICAgICAgICAgICAgIlx0dG8gY2lyY3VtdmVudCwgcmVjb21waWxlIHdpdGggTWF5YmVVSW50NjQgYXMgYW5cbiIKKyAgICAgICAgICAgICAgICAgICAgIlx0dW5zaWduZWQgNjQtYml0IGludC5cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIAorICAgICAgICAgICAgICAgICAgICAiXHRzaXplb2YoTWF5YmVVSW50NjQpIGlzIG5vdCA0IG9yIDggLS0gIgorICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJhdGlvbiBlcnJvci5cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBleGl0KDEpOworICAgfQorCisgICBpZiAoc3RybGVuKGFyZ3ZbMV0pID49IEJaX01BWF9GSUxFTkFNRS0yMCkgeworICAgICAgZnByaW50ZiAoIHN0ZGVyciwgCisgICAgICAgICAgICAgICAgIiVzOiBzdXBwbGllZCBmaWxlbmFtZSBpcyBzdXNwaWNpb3VzbHkgKD49ICVkIGNoYXJzKSBsb25nLiAgQnllIVxuIiwKKyAgICAgICAgICAgICAgICBwcm9nTmFtZSwgc3RybGVuKGFyZ3ZbMV0pICk7CiAgICAgICBleGl0KDEpOwogICAgfQogCkBAIC0zMTYsNyArNDA0LDggQEAKICAgICAgICAgICAgIChiaXRzUmVhZCAtIGJTdGFydFtjdXJyQmxvY2tdKSA+PSA0MCkgewogICAgICAgICAgICAgYkVuZFtjdXJyQmxvY2tdID0gYml0c1JlYWQtMTsKICAgICAgICAgICAgIGlmIChjdXJyQmxvY2sgPiAwKQotICAgICAgICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiAgIGJsb2NrICVkIHJ1bnMgZnJvbSAlZCB0byAlZCAoaW5jb21wbGV0ZSlcbiIsCisgICAgICAgICAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiICAgYmxvY2sgJWQgcnVucyBmcm9tICIgTWF5YmVVSW50NjRfRk1UIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byAiIE1heWJlVUludDY0X0ZNVCAiIChpbmNvbXBsZXRlKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyQmxvY2ssICBiU3RhcnRbY3VyckJsb2NrXSwgYkVuZFtjdXJyQmxvY2tdICk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGN1cnJCbG9jay0tOwpAQCAtMzMwLDE3ICs0MTksMjIgQEAKICAgICAgICAgICAgKCAoYnVmZkhpICYgMHgwMDAwZmZmZikgPT0gQkxPQ0tfRU5ETUFSS19ISSAKICAgICAgICAgICAgICAmJiBidWZmTG8gPT0gQkxPQ0tfRU5ETUFSS19MTykKICAgICAgICAgICkgewotICAgICAgICAgaWYgKGJpdHNSZWFkID4gNDkpCi0gICAgICAgICAgICBiRW5kW2N1cnJCbG9ja10gPSBiaXRzUmVhZC00OTsgZWxzZQorICAgICAgICAgaWYgKGJpdHNSZWFkID4gNDkpIHsKKyAgICAgICAgICAgIGJFbmRbY3VyckJsb2NrXSA9IGJpdHNSZWFkLTQ5OworICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJFbmRbY3VyckJsb2NrXSA9IDA7CisgICAgICAgICB9CiAgICAgICAgICBpZiAoY3VyckJsb2NrID4gMCAmJgogCSAgICAgKGJFbmRbY3VyckJsb2NrXSAtIGJTdGFydFtjdXJyQmxvY2tdKSA+PSAxMzApIHsKLSAgICAgICAgICAgIGZwcmludGYgKCBzdGRlcnIsICIgICBibG9jayAlZCBydW5zIGZyb20gJWQgdG8gJWRcbiIsCisgICAgICAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiICAgYmxvY2sgJWQgcnVucyBmcm9tICIgTWF5YmVVSW50NjRfRk1UIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byAiIE1heWJlVUludDY0X0ZNVCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgIHJiQ3RyKzEsICBiU3RhcnRbY3VyckJsb2NrXSwgYkVuZFtjdXJyQmxvY2tdICk7CiAgICAgICAgICAgICByYlN0YXJ0W3JiQ3RyXSA9IGJTdGFydFtjdXJyQmxvY2tdOwogICAgICAgICAgICAgcmJFbmRbcmJDdHJdID0gYkVuZFtjdXJyQmxvY2tdOwogICAgICAgICAgICAgcmJDdHIrKzsKICAgICAgICAgIH0KKyAgICAgICAgIGlmIChjdXJyQmxvY2sgPj0gQlpfTUFYX0hBTkRMRURfQkxPQ0tTKQorICAgICAgICAgICAgdG9vTWFueUJsb2NrcyhCWl9NQVhfSEFORExFRF9CTE9DS1MpOwogICAgICAgICAgY3VyckJsb2NrKys7CiAKICAgICAgICAgIGJTdGFydFtjdXJyQmxvY2tdID0gYml0c1JlYWQ7CkBAIC00MDAsMTAgKzQ5NCwyNSBAQAogICAgICAgICAgd3JCbG9jaysrOwogICAgICAgfSBlbHNlCiAgICAgICBpZiAoYml0c1JlYWQgPT0gcmJTdGFydFt3ckJsb2NrXSkgewotICAgICAgICAgb3V0RmlsZU5hbWVbMF0gPSAwOwotICAgICAgICAgc3ByaW50ZiAoIG91dEZpbGVOYW1lLCAicmVjJTRkIiwgd3JCbG9jaysxICk7Ci0gICAgICAgICBmb3IgKHAgPSBvdXRGaWxlTmFtZTsgKnAgIT0gMDsgcCsrKSBpZiAoKnAgPT0gJyAnKSAqcCA9ICcwJzsKLSAgICAgICAgIHN0cmNhdCAoIG91dEZpbGVOYW1lLCBpbkZpbGVOYW1lICk7CisgICAgICAgICAvKiBDcmVhdGUgdGhlIG91dHB1dCBmaWxlIG5hbWUsIGNvcnJlY3RseSBoYW5kbGluZyBsZWFkaW5nIHBhdGhzLiAKKyAgICAgICAgICAgICgzMS4xMC4yMDAxIGJ5IFNlcmdleSBFLiBLdXNpa292KSAqLworICAgICAgICAgQ2hhciogc3BsaXQ7CisgICAgICAgICBJbnQzMiBvZnMsIGs7CisgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgQlpfTUFYX0ZJTEVOQU1FOyBrKyspIAorICAgICAgICAgICAgb3V0RmlsZU5hbWVba10gPSAwOworICAgICAgICAgc3RyY3B5IChvdXRGaWxlTmFtZSwgaW5GaWxlTmFtZSk7CisgICAgICAgICBzcGxpdCA9IHN0cnJjaHIgKG91dEZpbGVOYW1lLCBCWl9TUExJVF9TWU0pOworICAgICAgICAgaWYgKHNwbGl0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNwbGl0ID0gb3V0RmlsZU5hbWU7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKytzcGxpdDsKKwkgfQorCSAvKiBOb3cgc3BsaXQgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgYmFzZW5hbWUuICovCisgICAgICAgICBvZnMgID0gc3BsaXQgLSBvdXRGaWxlTmFtZTsKKyAgICAgICAgIHNwcmludGYgKHNwbGl0LCAicmVjJTVkIiwgd3JCbG9jaysxKTsKKyAgICAgICAgIGZvciAocCA9IHNwbGl0OyAqcCAhPSAwOyBwKyspIGlmICgqcCA9PSAnICcpICpwID0gJzAnOworICAgICAgICAgc3RyY2F0IChvdXRGaWxlTmFtZSwgaW5GaWxlTmFtZSArIG9mcyk7CisKICAgICAgICAgIGlmICggIWVuZHNJbkJ6MihvdXRGaWxlTmFtZSkpIHN0cmNhdCAoIG91dEZpbGVOYW1lLCAiLmJ6MiIgKTsKIAogICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiAgIHdyaXRpbmcgYmxvY2sgJWQgdG8gYCVzJyAuLi5cbiIsCkBAIC00MTYsOCArNTI1LDEwIEBACiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgfQogICAgICAgICAgYnNXciA9IGJzT3BlbldyaXRlU3RyZWFtICggb3V0RmlsZSApOwotICAgICAgICAgYnNQdXRVQ2hhciAoIGJzV3IsICdCJyApOyBic1B1dFVDaGFyICggYnNXciwgJ1onICk7Ci0gICAgICAgICBic1B1dFVDaGFyICggYnNXciwgJ2gnICk7IGJzUHV0VUNoYXIgKCBic1dyLCAnOScgKTsKKyAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCBCWl9IRFJfQiApOyAgICAKKyAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCBCWl9IRFJfWiApOyAgICAKKyAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCBCWl9IRFJfaCApOyAgICAKKyAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCBCWl9IRFJfMCArIDkgKTsKICAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCAweDMxICk7IGJzUHV0VUNoYXIgKCBic1dyLCAweDQxICk7CiAgICAgICAgICBic1B1dFVDaGFyICggYnNXciwgMHg1OSApOyBic1B1dFVDaGFyICggYnNXciwgMHgyNiApOwogICAgICAgICAgYnNQdXRVQ2hhciAoIGJzV3IsIDB4NTMgKTsgYnNQdXRVQ2hhciAoIGJzV3IsIDB4NTkgKTsKZGlmZiAtLWdpdCBhL2J6bGliLmMgYi9iemxpYi5jCmluZGV4IDRhMDZkOWYuLjdkMWNiMjcgMTAwNjQ0Ci0tLSBhL2J6bGliLmMKKysrIGIvYnpsaWIuYwpAQCAtOCw3ICs4LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDEwICs5MywzOSBAQAogICAgICAgImNvbXBvbmVudCwgeW91IHNob3VsZCBhbHNvIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgYXV0aG9yKHMpXG4iCiAgICAgICAib2YgdGhhdCBwcm9ncmFtLiAgUGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHJlcG9ydCB0aGlzIGJ1ZztcbiIKICAgICAgICJ0aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXJcbiIKLSAgICAgICJxdWFsaXR5IHNvZnR3YXJlLiAgVGhhbmtzLiAgSnVsaWFuIFNld2FyZCwgMjEgTWFyY2ggMjAwMC5cblxuIiwKKyAgICAgICJxdWFsaXR5IHNvZnR3YXJlLiAgVGhhbmtzLiAgSnVsaWFuIFNld2FyZCwgMzAgRGVjZW1iZXIgMjAwMS5cblxuIiwKICAgICAgIGVycmNvZGUsCiAgICAgICBCWjJfYnpsaWJWZXJzaW9uKCkKICAgICk7CisKKyAgIGlmIChlcnJjb2RlID09IDEwMDcpIHsKKyAgIGZwcmludGYoc3RkZXJyLAorICAgICAgIlxuKioqIEEgc3BlY2lhbCBub3RlIGFib3V0IGludGVybmFsIGVycm9yIG51bWJlciAxMDA3ICoqKlxuIgorICAgICAgIlxuIgorICAgICAgIkV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBhIGNvbW1vbiBjYXVzZSBvZiBpLmUuIDEwMDdcbiIKKyAgICAgICJpcyB1bnJlbGlhYmxlIG1lbW9yeSBvciBvdGhlciBoYXJkd2FyZS4gIFRoZSAxMDA3IGFzc2VydGlvblxuIgorICAgICAgImp1c3QgaGFwcGVucyB0byBjcm9zcy1jaGVjayB0aGUgcmVzdWx0cyBvZiBodWdlIG51bWJlcnMgb2ZcbiIKKyAgICAgICJtZW1vcnkgcmVhZHMvd3JpdGVzLCBhbmQgc28gYWN0cyAodW5pbnRlbmRlZGx5KSBhcyBhIHN0cmVzc1xuIgorICAgICAgInRlc3Qgb2YgeW91ciBtZW1vcnkgc3lzdGVtLlxuIgorICAgICAgIlxuIgorICAgICAgIkkgc3VnZ2VzdCB0aGUgZm9sbG93aW5nOiB0cnkgY29tcHJlc3NpbmcgdGhlIGZpbGUgYWdhaW4sXG4iCisgICAgICAicG9zc2libHkgbW9uaXRvcmluZyBwcm9ncmVzcyBpbiBkZXRhaWwgd2l0aCB0aGUgLXZ2IGZsYWcuXG4iCisgICAgICAiXG4iCisgICAgICAiKiBJZiB0aGUgZXJyb3IgY2Fubm90IGJlIHJlcHJvZHVjZWQsIGFuZC9vciBoYXBwZW5zIGF0IGRpZmZlcmVudFxuIgorICAgICAgIiAgcG9pbnRzIGluIGNvbXByZXNzaW9uLCB5b3UgbWF5IGhhdmUgYSBmbGFreSBtZW1vcnkgc3lzdGVtLlxuIgorICAgICAgIiAgVHJ5IGEgbWVtb3J5LXRlc3QgcHJvZ3JhbS4gIEkgaGF2ZSB1c2VkIE1lbXRlc3Q4NlxuIgorICAgICAgIiAgKHd3dy5tZW10ZXN0ODYuY29tKS4gIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgaXQgaXMgZnJlZSAoR1BMZCkuXG4iCisgICAgICAiICBNZW10ZXN0ODYgdGVzdHMgbWVtb3J5IG11Y2ggbW9yZSB0aG9yb3VnbHkgdGhhbiB5b3VyIEJJT1NzXG4iCisgICAgICAiICBwb3dlci1vbiB0ZXN0LCBhbmQgbWF5IGZpbmQgZmFpbHVyZXMgdGhhdCB0aGUgQklPUyBkb2Vzbid0LlxuIgorICAgICAgIlxuIgorICAgICAgIiogSWYgdGhlIGVycm9yIGNhbiBiZSByZXBlYXRhYmx5IHJlcHJvZHVjZWQsIHRoaXMgaXMgYSBidWcgaW5cbiIKKyAgICAgICIgIGJ6aXAyLCBhbmQgSSB3b3VsZCB2ZXJ5IG11Y2ggbGlrZSB0byBoZWFyIGFib3V0IGl0LiAgUGxlYXNlXG4iCisgICAgICAiICBsZXQgbWUga25vdywgYW5kLCBpZGVhbGx5LCBzYXZlIGEgY29weSBvZiB0aGUgZmlsZSBjYXVzaW5nIHRoZVxuIgorICAgICAgIiAgcHJvYmxlbSAtLSB3aXRob3V0IHdoaWNoIEkgd2lsbCBiZSB1bmFibGUgdG8gaW52ZXN0aWdhdGUgaXQuXG4iCisgICAgICAiXG4iCisgICApOworICAgfQorCiAgICBleGl0KDMpOwogfQogI2VuZGlmCkBAIC0xNDAyLDcgKzE0MzEsNyBAQAogICAgICAgICAgc21hbGxNb2RlID0gMTsgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKGlzZGlnaXQoKGludCkoKm1vZGUpKSkgewotICAgICAgICAgICAgYmxvY2tTaXplMTAwayA9ICptb2RlLScwJzsKKyAgICAgICAgICAgIGJsb2NrU2l6ZTEwMGsgPSAqbW9kZS1CWl9IRFJfMDsKICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIG1vZGUrKzsKZGlmZiAtLWdpdCBhL2J6bGliLmggYi9iemxpYi5oCmluZGV4IGM5NDQ3YTIuLjlhYzQzYTEgMTAwNjQ0Ci0tLSBhL2J6bGliLmgKKysrIGIvYnpsaWIuaApAQCAtOCw3ICs4LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw4ICsxMTAsMTAgQEAKICNkZWZpbmUgQlpfRVhQT1JUCiAjZW5kaWYKIAorLyogTmVlZCBhIGRlZmluaXRpdGlvbiBmb3IgRklMRSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisKICNpZmRlZiBfV0lOMzIKLSMgICBpbmNsdWRlIDxzdGRpby5oPgogIyAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KICMgICBpZmRlZiBzbWFsbAogICAgICAgLyogd2luZG93cy5oIGRlZmluZSBzbWFsbCB0byBjaGFyICovCmRpZmYgLS1naXQgYS9iemxpYl9wcml2YXRlLmggYi9iemxpYl9wcml2YXRlLmgKaW5kZXggZmI1MWM3YS4uZmY5NzNjMyAxMDA2NDQKLS0tIGEvYnpsaWJfcHJpdmF0ZS5oCisrKyBiL2J6bGliX3ByaXZhdGUuaApAQCAtOCw3ICs4LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAKIAogLyotLSBHZW5lcmFsIHN0dWZmLiAtLSovCiAKLSNkZWZpbmUgQlpfVkVSU0lPTiAgIjEuMC4xLCAyMy1KdW5lLTIwMDAiCisjZGVmaW5lIEJaX1ZFUlNJT04gICIxLjAuMiwgMzAtRGVjLTIwMDEiCiAKIHR5cGVkZWYgY2hhciAgICAgICAgICAgIENoYXI7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBCb29sOwpAQCAtMTM3LDYgKzEzNywxMyBAQAogI2RlZmluZSBCWkZSRUUocHBwKSAgKHN0cm0tPmJ6ZnJlZSkoc3RybS0+b3BhcXVlLChwcHApKQogCiAKKy8qLS0gSGVhZGVyIGJ5dGVzLiAtLSovCisKKyNkZWZpbmUgQlpfSERSX0IgMHg0MiAgIC8qICdCJyAqLworI2RlZmluZSBCWl9IRFJfWiAweDVhICAgLyogJ1onICovCisjZGVmaW5lIEJaX0hEUl9oIDB4NjggICAvKiAnaCcgKi8KKyNkZWZpbmUgQlpfSERSXzAgMHgzMCAgIC8qICcwJyAqLworICAKIC8qLS0gQ29uc3RhbnRzIGZvciB0aGUgYmFjayBlbmQuIC0tKi8KIAogI2RlZmluZSBCWl9NQVhfQUxQSEFfU0laRSAyNTgKZGlmZiAtLWdpdCBhL2J6bW9yZSBiL2J6bW9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE0MDQzCi0tLSAvZGV2L251bGwKKysrIGIvYnptb3JlCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorCisjIEJ6bW9yZSB3cmFwcGVkIGZvciBiemlwMiwgCisjIGFkYXB0ZWQgZnJvbSB6bW9yZSBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4gZm9yIERlYmlhbiBHTlUvTGludXguCisKK1BBVEg9Ii91c3IvYmluOiRQQVRIIjsgZXhwb3J0IFBBVEgKKworcHJvZz1gZWNobyAkMCB8IHNlZCAnc3wuKi98fCdgCitjYXNlICIkcHJvZyIgaW4KKwkqbGVzcykJbW9yZT1sZXNzCTs7CisJKikJbW9yZT1tb3JlICAgICAgIDs7Citlc2FjCisKK2lmIHRlc3QgImBlY2hvIC1uIGFgIiA9ICItbiBhIjsgdGhlbgorICAjIGxvb2tzIGxpa2UgYSBTeXNWIHN5c3RlbToKKyAgbjE9Jyc7IG4yPSdcYycKK2Vsc2UKKyAgbjE9Jy1uJzsgbjI9JycKK2ZpCitvbGR0dHk9YHN0dHkgLWcgMj4vZGV2L251bGxgCitpZiBzdHR5IC1jYnJlYWsgMj4vZGV2L251bGw7IHRoZW4KKyAgY2I9J2NicmVhayc7IG5jYj0nLWNicmVhaycKK2Vsc2UKKyAgIyAnc3R0eSBtaW4gMScgcmVzZXRzIGVvZiB0byBeYSBvbiBib3RoIFN1bk9TIGFuZCBTeXNWIQorICBjYj0nbWluIDEgLWljYW5vbic7IG5jYj0naWNhbm9uIGVvZiBeZCcKK2ZpCitpZiB0ZXN0ICQ/IC1lcSAwIC1hIC1uICIkb2xkdHR5IjsgdGhlbgorICAgdHJhcCAnc3R0eSAkb2xkdHR5IDI+L2Rldi9udWxsOyBleGl0JyAwIDIgMyA1IDEwIDEzIDE1CitlbHNlCisgICB0cmFwICdzdHR5ICRuY2IgZWNobyAyPi9kZXYvbnVsbDsgZXhpdCcgMCAyIDMgNSAxMCAxMyAxNQorZmkKKworaWYgdGVzdCAkIyA9IDA7IHRoZW4KKyAgICBpZiB0ZXN0IC10IDA7IHRoZW4KKwllY2hvIHVzYWdlOiAkcHJvZyBmaWxlcy4uLgorICAgIGVsc2UKKwliemlwMiAtY2RmcSB8IGV2YWwgJG1vcmUKKyAgICBmaQorZWxzZQorICAgIEZJUlNUPTEKKyAgICBmb3IgRklMRQorICAgIGRvCisJaWYgdGVzdCAkRklSU1QgLWVxIDA7IHRoZW4KKwkJZWNobyAkbjEgIi0tTW9yZS0tKE5leHQgZmlsZTogJEZJTEUpJG4yIgorCQlzdHR5ICRjYiAtZWNobyAyPi9kZXYvbnVsbAorCQlBTlM9YGRkIGJzPTEgY291bnQ9MSAyPi9kZXYvbnVsbGAgCisJCXN0dHkgJG5jYiBlY2hvIDI+L2Rldi9udWxsCisJCWVjaG8gIiAiCisJCWlmIHRlc3QgIiRBTlMiID0gJ2UnIC1vICIkQU5TIiA9ICdxJzsgdGhlbgorCQkJZXhpdAorCQlmaQorCWZpCisJaWYgdGVzdCAiJEFOUyIgIT0gJ3MnOyB0aGVuCisJCWVjaG8gIi0tLS0tLT4gJEZJTEUgPC0tLS0tLSIKKwkJYnppcDIgLWNkZnEgIiRGSUxFIiB8IGV2YWwgJG1vcmUKKwlmaQorCWlmIHRlc3QgLXQ7IHRoZW4KKwkJRklSU1Q9MAorCWZpCisgICAgZG9uZQorZmkKZGlmZiAtLWdpdCBhL2J6bW9yZS4xIGIvYnptb3JlLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzN2QzYgotLS0gL2Rldi9udWxsCisrKyBiL2J6bW9yZS4xCkBAIC0wLDAgKzEsMTUyIEBACisuXCJTaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB6bW9yZS4xIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPgorLlwiZm9yIERlYmlhbiBHTlUvTGludXgKKy5USCBCWk1PUkUgMQorLlNIIE5BTUUKK2J6bW9yZSwgYnpsZXNzIFwtIGZpbGUgcGVydXNhbCBmaWx0ZXIgZm9yIGNydCB2aWV3aW5nIG9mIGJ6aXAyIGNvbXByZXNzZWQgdGV4dAorLlNIIFNZTk9QU0lTCisuQiBiem1vcmUKK1sgbmFtZSAuLi4gIF0KKy5icgorLkIgYnpsZXNzCitbIG5hbWUgLi4uICBdCisuU0ggTk9URQorSW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiwKKy5JIGJ6bGVzcworYW5kCisuSSBsZXNzCitjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aAorLkkgYnptb3JlCithbmQKKy5JIG1vcmUuCisuU0ggREVTQ1JJUFRJT04KKy5JICBCem1vcmUKK2lzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBleGFtaW5hdGlvbiBvZiBjb21wcmVzc2VkIG9yIHBsYWluIHRleHQgZmlsZXMKK29uZSBzY3JlZW5mdWwgYXQgYSB0aW1lIG9uIGEgc29mdC1jb3B5IHRlcm1pbmFsLgorLkkgYnptb3JlCit3b3JrcyBvbiBmaWxlcyBjb21wcmVzc2VkIHdpdGgKKy5JIGJ6aXAyCithbmQgYWxzbyBvbiB1bmNvbXByZXNzZWQgZmlsZXMuCitJZiBhIGZpbGUgZG9lcyBub3QgZXhpc3QsCisuSSBiem1vcmUKK2xvb2tzIGZvciBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIC5iejIgc3VmZml4LgorLlBQCisuSSBCem1vcmUKK25vcm1hbGx5IHBhdXNlcyBhZnRlciBlYWNoIHNjcmVlbmZ1bCwgcHJpbnRpbmcgLS1Nb3JlLS0KK2F0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4KK0lmIHRoZSB1c2VyIHRoZW4gdHlwZXMgYSBjYXJyaWFnZSByZXR1cm4sIG9uZSBtb3JlIGxpbmUgaXMgZGlzcGxheWVkLgorSWYgdGhlIHVzZXIgaGl0cyBhIHNwYWNlLAorYW5vdGhlciBzY3JlZW5mdWwgaXMgZGlzcGxheWVkLiAgT3RoZXIgcG9zc2liaWxpdGllcyBhcmUgZW51bWVyYXRlZCBsYXRlci4KKy5QUAorLkkgQnptb3JlCitsb29rcyBpbiB0aGUgZmlsZQorLkkgL2V0Yy90ZXJtY2FwCit0byBkZXRlcm1pbmUgdGVybWluYWwgY2hhcmFjdGVyaXN0aWNzLAorYW5kIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCB3aW5kb3cgc2l6ZS4KK09uIGEgdGVybWluYWwgY2FwYWJsZSBvZiBkaXNwbGF5aW5nIDI0IGxpbmVzLAordGhlIGRlZmF1bHQgd2luZG93IHNpemUgaXMgMjIgbGluZXMuCitPdGhlciBzZXF1ZW5jZXMgd2hpY2ggbWF5IGJlIHR5cGVkIHdoZW4KKy5JIGJ6bW9yZQorcGF1c2VzLCBhbmQgdGhlaXIgZWZmZWN0cywgYXJlIGFzIGZvbGxvd3MgKFxmSWlcZlAgaXMgYW4gb3B0aW9uYWwgaW50ZWdlcgorYXJndW1lbnQsIGRlZmF1bHRpbmcgdG8gMSkgOgorLlBQCisuSVAgXGZJaVx8XGZQPHNwYWNlPgorZGlzcGxheQorLkkgaQorbW9yZSBsaW5lcywgKG9yIGFub3RoZXIgc2NyZWVuZnVsIGlmIG5vIGFyZ3VtZW50IGlzIGdpdmVuKQorLlBQCisuSVAgXkQKK2Rpc3BsYXkgMTEgbW9yZSBsaW5lcyAoYSBgYHNjcm9sbCcnKS4KK0lmCisuSSBpCitpcyBnaXZlbiwgdGhlbiB0aGUgc2Nyb2xsIHNpemUgaXMgc2V0IHRvIFxmSWlcfFxmUC4KKy5QUAorLklQIGQKK3NhbWUgYXMgXkQgKGNvbnRyb2wtRCkKKy5QUAorLklQIFxmSWlcfFxmUHoKK3NhbWUgYXMgdHlwaW5nIGEgc3BhY2UgZXhjZXB0IHRoYXQgXGZJaVx8XGZQLCBpZiBwcmVzZW50LCBiZWNvbWVzIHRoZSBuZXcKK3dpbmRvdyBzaXplLiAgTm90ZSB0aGF0IHRoZSB3aW5kb3cgc2l6ZSByZXZlcnRzIGJhY2sgdG8gdGhlIGRlZmF1bHQgYXQgdGhlCitlbmQgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKy5QUAorLklQIFxmSWlcfFxmUHMKK3NraXAgXGZJaVx8XGZQIGxpbmVzIGFuZCBwcmludCBhIHNjcmVlbmZ1bCBvZiBsaW5lcworLlBQCisuSVAgXGZJaVx8XGZQZgorc2tpcCBcZklpXGZQIHNjcmVlbmZ1bHMgYW5kIHByaW50IGEgc2NyZWVuZnVsIG9mIGxpbmVzCisuUFAKKy5JUCAicSBvciBRIgorcXVpdCByZWFkaW5nIHRoZSBjdXJyZW50IGZpbGU7IGdvIG9uIHRvIHRoZSBuZXh0IChpZiBhbnkpCisuUFAKKy5JUCAiZSBvciBxIgorV2hlbiB0aGUgcHJvbXB0IC0tTW9yZS0tKE5leHQgZmlsZTogCisuSVIgZmlsZSApCitpcyBwcmludGVkLCB0aGlzIGNvbW1hbmQgY2F1c2VzIGJ6bW9yZSB0byBleGl0LgorLlBQCisuSVAgcworV2hlbiB0aGUgcHJvbXB0IC0tTW9yZS0tKE5leHQgZmlsZTogCisuSVIgZmlsZSApCitpcyBwcmludGVkLCB0aGlzIGNvbW1hbmQgY2F1c2VzIGJ6bW9yZSB0byBza2lwIHRoZSBuZXh0IGZpbGUgYW5kIGNvbnRpbnVlLgorLlBQIAorLklQID0KK0Rpc3BsYXkgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisuUFAKKy5JUCBcZklpXHxcZlAvZXhwcgorc2VhcmNoIGZvciB0aGUgXGZJaVx8XGZQLXRoIG9jY3VycmVuY2Ugb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBcZklleHByLlxmUAorSWYgdGhlIHBhdHRlcm4gaXMgbm90IGZvdW5kLAorLkkgYnptb3JlCitnb2VzIG9uIHRvIHRoZSBuZXh0IGZpbGUgKGlmIGFueSkuCitPdGhlcndpc2UsIGEgc2NyZWVuZnVsIGlzIGRpc3BsYXllZCwgc3RhcnRpbmcgdHdvIGxpbmVzIGJlZm9yZSB0aGUgcGxhY2UKK3doZXJlIHRoZSBleHByZXNzaW9uIHdhcyBmb3VuZC4KK1RoZSB1c2VyJ3MgZXJhc2UgYW5kIGtpbGwgY2hhcmFjdGVycyBtYXkgYmUgdXNlZCB0byBlZGl0IHRoZSByZWd1bGFyCitleHByZXNzaW9uLgorRXJhc2luZyBiYWNrIHBhc3QgdGhlIGZpcnN0IGNvbHVtbiBjYW5jZWxzIHRoZSBzZWFyY2ggY29tbWFuZC4KKy5QUAorLklQIFxmSWlcfFxmUG4KK3NlYXJjaCBmb3IgdGhlIFxmSWlcfFxmUC10aCBvY2N1cnJlbmNlIG9mIHRoZSBsYXN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBlbnRlcmVkLgorLlBQCisuSVAgIWNvbW1hbmQKK2ludm9rZSBhIHNoZWxsIHdpdGggXGZJY29tbWFuZFx8XGZQLiAKK1RoZSBjaGFyYWN0ZXIgYCEnIGluICJjb21tYW5kIiBhcmUgcmVwbGFjZWQgd2l0aCB0aGUKK3ByZXZpb3VzIHNoZWxsIGNvbW1hbmQuICBUaGUgc2VxdWVuY2UgIlxcISIgaXMgcmVwbGFjZWQgYnkgIiEiLgorLlBQCisuSVAgIjpxIG9yIDpRIgorcXVpdCByZWFkaW5nIHRoZSBjdXJyZW50IGZpbGU7IGdvIG9uIHRvIHRoZSBuZXh0IChpZiBhbnkpCisoc2FtZSBhcyBxIG9yIFEpLgorLlBQCisuSVAgLgorKGRvdCkgcmVwZWF0IHRoZSBwcmV2aW91cyBjb21tYW5kLgorLlBQCitUaGUgY29tbWFuZHMgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHksIGkuZS4sIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KK3R5cGUgYSBjYXJyaWFnZSByZXR1cm4uCitVcCB0byB0aGUgdGltZSB3aGVuIHRoZSBjb21tYW5kIGNoYXJhY3RlciBpdHNlbGYgaXMgZ2l2ZW4sCit0aGUgdXNlciBtYXkgaGl0IHRoZSBsaW5lIGtpbGwgY2hhcmFjdGVyIHRvIGNhbmNlbCB0aGUgbnVtZXJpY2FsCithcmd1bWVudCBiZWluZyBmb3JtZWQuCitJbiBhZGRpdGlvbiwgdGhlIHVzZXIgbWF5IGhpdCB0aGUgZXJhc2UgY2hhcmFjdGVyIHRvIHJlZGlzcGxheSB0aGUKKy0tTW9yZS0tIG1lc3NhZ2UuCisuUFAKK0F0IGFueSB0aW1lIHdoZW4gb3V0cHV0IGlzIGJlaW5nIHNlbnQgdG8gdGhlIHRlcm1pbmFsLCB0aGUgdXNlciBjYW4KK2hpdCB0aGUgcXVpdCBrZXkgKG5vcm1hbGx5IGNvbnRyb2xcLVxcKS4KKy5JIEJ6bW9yZQord2lsbCBzdG9wIHNlbmRpbmcgb3V0cHV0LCBhbmQgd2lsbCBkaXNwbGF5IHRoZSB1c3VhbCAtLU1vcmUtLQorcHJvbXB0LgorVGhlIHVzZXIgbWF5IHRoZW4gZW50ZXIgb25lIG9mIHRoZSBhYm92ZSBjb21tYW5kcyBpbiB0aGUgbm9ybWFsIG1hbm5lci4KK1VuZm9ydHVuYXRlbHksIHNvbWUgb3V0cHV0IGlzIGxvc3Qgd2hlbiB0aGlzIGlzIGRvbmUsIGR1ZSB0byB0aGUKK2ZhY3QgdGhhdCBhbnkgY2hhcmFjdGVycyB3YWl0aW5nIGluIHRoZSB0ZXJtaW5hbCdzIG91dHB1dCBxdWV1ZQorYXJlIGZsdXNoZWQgd2hlbiB0aGUgcXVpdCBzaWduYWwgb2NjdXJzLgorLlBQCitUaGUgdGVybWluYWwgaXMgc2V0IHRvCisuSSBub2VjaG8KK21vZGUgYnkgdGhpcyBwcm9ncmFtIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgY29udGludW91cy4KK1doYXQgeW91IHR5cGUgd2lsbCB0aHVzIG5vdCBzaG93IG9uIHlvdXIgdGVybWluYWwsIGV4Y2VwdCBmb3IgdGhlIC8gYW5kICEKK2NvbW1hbmRzLgorLlBQCitJZiB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIG5vdCBhIHRlbGV0eXBlLCB0aGVuCisuSSBiem1vcmUKK2FjdHMganVzdCBsaWtlCisuSSBiemNhdCwKK2V4Y2VwdCB0aGF0IGEgaGVhZGVyIGlzIHByaW50ZWQgYmVmb3JlIGVhY2ggZmlsZS4KKy5TSCBGSUxFUworLkRUCisvZXRjL3Rlcm1jYXAJCVRlcm1pbmFsIGRhdGEgYmFzZQorLlNIICJTRUUgQUxTTyIKK21vcmUoMSksIGxlc3MoMSksIGJ6aXAyKDEpLCBiemRpZmYoMSksIGJ6Z3JlcCgxKQpkaWZmIC0tZ2l0IGEvY29tcHJlc3MuYyBiL2NvbXByZXNzLmMKaW5kZXggY2M1ZTMxZC4uNTY1MDFjMSAxMDA2NDQKLS0tIGEvY29tcHJlc3MuYworKysgYi9jb21wcmVzcy5jCkBAIC04LDcgKzgsNyBAQAogICBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIGJ6aXAyIGFuZC9vciBsaWJiemlwMiwgYSBwcm9ncmFtIGFuZAogICBsaWJyYXJ5IGZvciBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYzLDEwICs2NjMsMTAgQEAKICAgIC8qLS0gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYmxvY2ssIGNyZWF0ZSB0aGUgc3RyZWFtIGhlYWRlci4gLS0qLwogICAgaWYgKHMtPmJsb2NrTm8gPT0gMSkgewogICAgICAgQloyX2JzSW5pdFdyaXRlICggcyApOwotICAgICAgYnNQdXRVQ2hhciAoIHMsICdCJyApOwotICAgICAgYnNQdXRVQ2hhciAoIHMsICdaJyApOwotICAgICAgYnNQdXRVQ2hhciAoIHMsICdoJyApOwotICAgICAgYnNQdXRVQ2hhciAoIHMsIChVQ2hhcikoJzAnICsgcy0+YmxvY2tTaXplMTAwaykgKTsKKyAgICAgIGJzUHV0VUNoYXIgKCBzLCBCWl9IRFJfQiApOworICAgICAgYnNQdXRVQ2hhciAoIHMsIEJaX0hEUl9aICk7CisgICAgICBic1B1dFVDaGFyICggcywgQlpfSERSX2ggKTsKKyAgICAgIGJzUHV0VUNoYXIgKCBzLCAoVUNoYXIpKEJaX0hEUl8wICsgcy0+YmxvY2tTaXplMTAwaykgKTsKICAgIH0KIAogICAgaWYgKHMtPm5ibG9jayA+IDApIHsKZGlmZiAtLWdpdCBhL2NyY3RhYmxlLmMgYi9jcmN0YWJsZS5jCmluZGV4IDYxYzA0MGMuLmIxNjc0NmEgMTAwNjQ0Ci0tLSBhL2NyY3RhYmxlLmMKKysrIGIvY3JjdGFibGUuYwpAQCAtOCw3ICs4LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL2RlY29tcHJlc3MuYyBiL2RlY29tcHJlc3MuYwppbmRleCBjZGNlZDE4Li5lOTIxMzQ3IDEwMDY0NAotLS0gYS9kZWNvbXByZXNzLmMKKysrIGIvZGVjb21wcmVzcy5jCkBAIC04LDcgKzgsNyBAQAogICBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIGJ6aXAyIGFuZC9vciBsaWJiemlwMiwgYSBwcm9ncmFtIGFuZAogICBsaWJyYXJ5IGZvciBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjM1LDE4ICsyMzUsMTggQEAKICAgIHN3aXRjaCAocy0+c3RhdGUpIHsKIAogICAgICAgR0VUX1VDSEFSKEJaX1hfTUFHSUNfMSwgdWMpOwotICAgICAgaWYgKHVjICE9ICdCJykgUkVUVVJOKEJaX0RBVEFfRVJST1JfTUFHSUMpOworICAgICAgaWYgKHVjICE9IEJaX0hEUl9CKSBSRVRVUk4oQlpfREFUQV9FUlJPUl9NQUdJQyk7CiAKICAgICAgIEdFVF9VQ0hBUihCWl9YX01BR0lDXzIsIHVjKTsKLSAgICAgIGlmICh1YyAhPSAnWicpIFJFVFVSTihCWl9EQVRBX0VSUk9SX01BR0lDKTsKKyAgICAgIGlmICh1YyAhPSBCWl9IRFJfWikgUkVUVVJOKEJaX0RBVEFfRVJST1JfTUFHSUMpOwogCiAgICAgICBHRVRfVUNIQVIoQlpfWF9NQUdJQ18zLCB1YykKLSAgICAgIGlmICh1YyAhPSAnaCcpIFJFVFVSTihCWl9EQVRBX0VSUk9SX01BR0lDKTsKKyAgICAgIGlmICh1YyAhPSBCWl9IRFJfaCkgUkVUVVJOKEJaX0RBVEFfRVJST1JfTUFHSUMpOwogCiAgICAgICBHRVRfQklUUyhCWl9YX01BR0lDXzQsIHMtPmJsb2NrU2l6ZTEwMGssIDgpCi0gICAgICBpZiAocy0+YmxvY2tTaXplMTAwayA8ICcxJyB8fCAKLSAgICAgICAgICBzLT5ibG9ja1NpemUxMDBrID4gJzknKSBSRVRVUk4oQlpfREFUQV9FUlJPUl9NQUdJQyk7Ci0gICAgICBzLT5ibG9ja1NpemUxMDBrIC09ICcwJzsKKyAgICAgIGlmIChzLT5ibG9ja1NpemUxMDBrIDwgKEJaX0hEUl8wICsgMSkgfHwgCisgICAgICAgICAgcy0+YmxvY2tTaXplMTAwayA+IChCWl9IRFJfMCArIDkpKSBSRVRVUk4oQlpfREFUQV9FUlJPUl9NQUdJQyk7CisgICAgICBzLT5ibG9ja1NpemUxMDBrIC09IEJaX0hEUl8wOwogCiAgICAgICBpZiAocy0+c21hbGxEZWNvbXByZXNzKSB7CiAgICAgICAgICBzLT5sbDE2ID0gQlpBTExPQyggcy0+YmxvY2tTaXplMTAwayAqIDEwMDAwMCAqIHNpemVvZihVSW50MTYpICk7CmRpZmYgLS1naXQgYS9kbGx0ZXN0LmMgYi9kbGx0ZXN0LmMKaW5kZXggZjc5Mjc5Yy4uMmQ3ZGNjYSAxMDA2NDQKLS0tIGEvZGxsdGVzdC5jCisrKyBiL2RsbHRlc3QuYwpAQCAtMTksNyArMTksNyBAQAogDQogI2lmZGVmIF9XSU4zMg0KIA0KLSNkZWZpbmUgQloyX0xJQk5BTUUgImxpYmJ6Mi0xLjAuMC5ETEwiIA0KKyNkZWZpbmUgQloyX0xJQk5BTUUgImxpYmJ6Mi0xLjAuMi5ETEwiIA0KIA0KICNpbmNsdWRlIDx3aW5kb3dzLmg+DQogc3RhdGljIGludCBCWjJETExMb2FkZWQgPSAwOw0KQEAgLTEzMCw4ICsxMzAsOCBAQAogICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgZnBfdyA9IHN0ZG91dDsNCiAgICAgICAgICB9DQotICAgICAgICAgaWYoKEJaMmZwX3IgPT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRpbiksInJiIikpPT1OVUxMKQ0KLSAgICAgICAgICAgIHx8IChCWjJmcF9yICE9IE5VTEwgJiYgKEJaMmZwX3IgPSBCWjJfYnpvcGVuKGZuX3IsInJiIikpPT1OVUxMKSl7DQorICAgICAgICAgaWYoKGZuX3IgPT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRpbiksInJiIikpPT1OVUxMKQ0KKyAgICAgICAgICAgIHx8IChmbl9yICE9IE5VTEwgJiYgKEJaMmZwX3IgPSBCWjJfYnpvcGVuKGZuX3IsInJiIikpPT1OVUxMKSl7DQogICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsNCiAgICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICAgIH0NCmRpZmYgLS1naXQgYS9odWZmbWFuLmMgYi9odWZmbWFuLmMKaW5kZXggOWI0NDZjNC4uMjkzMDk1YyAxMDA2NDQKLS0tIGEvaHVmZm1hbi5jCisrKyBiL2h1ZmZtYW4uYwpAQCAtOCw3ICs4LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL21ha2VmaWxlLm1zYyBiL21ha2VmaWxlLm1zYwppbmRleCAzZmU0MjMyLi43OTlhMThhIDEwMDY0NAotLS0gYS9tYWtlZmlsZS5tc2MKKysrIGIvbWFrZWZpbGUubXNjCkBAIC00LDcgKzQsNyBAQAogIyBGaXhlZCB1cCBieSBKUlMgZm9yIGJ6aXAyLTAuOS41ZCByZWxlYXNlLg0KIA0KIENDPWNsDQotQ0ZMQUdTPSAtRFdJTjMyIC1NRCAtT3ggLURfRklMRV9PRkZTRVRfQklUUz02NA0KK0NGTEFHUz0gLURXSU4zMiAtTUQgLU94IC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW5vbG9nbw0KIA0KIE9CSlM9IGJsb2Nrc29ydC5vYmogIFwNCiAgICAgICBodWZmbWFuLm9iaiAgICBcDQpkaWZmIC0tZ2l0IGEvbWFudWFsLnRleGkgYi9tYW51YWwudGV4aQppbmRleCAzMzY3NzZhLi41YmMyN2Q1IDEwMDY0NAotLS0gYS9tYW51YWwudGV4aQorKysgYi9tYW51YWwudGV4aQpAQCAtMiwxMCArMiwxMCBAQAogQHNldGZpbGVuYW1lIGJ6aXAyLmluZm8KIAogQGlnbm9yZQotVGhpcyBmaWxlIGRvY3VtZW50cyBiemlwMiB2ZXJzaW9uIDEuMCwgYW5kIGFzc29jaWF0ZWQgbGlicmFyeQorVGhpcyBmaWxlIGRvY3VtZW50cyBiemlwMiB2ZXJzaW9uIDEuMC4yLCBhbmQgYXNzb2NpYXRlZCBsaWJyYXJ5CiBsaWJiemlwMiwgd3JpdHRlbiBieSBKdWxpYW4gU2V3YXJkIChqc2V3YXJkQGFjbS5vcmcpLgogCi1Db3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQKK0NvcHlyaWdodCAoQykgMTk5Ni0yMDAyIEp1bGlhbiBSIFNld2FyZAogCiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YKIHRoaXMgbWFudWFsIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCkBAIC0zMCw4ICszMCw4IEBACiBAdGl0bGVwYWdlCiBAdGl0bGUgYnppcDIgYW5kIGxpYmJ6aXAyCiBAc3VidGl0bGUgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvciBkYXRhIGNvbXByZXNzaW9uCi1Ac3VidGl0bGUgY29weXJpZ2h0IChDKSAxOTk2LTIwMDAgSnVsaWFuIFNld2FyZAotQHN1YnRpdGxlIHZlcnNpb24gMS4wIG9mIDIxIE1hcmNoIDIwMDAKK0BzdWJ0aXRsZSBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gU2V3YXJkCitAc3VidGl0bGUgdmVyc2lvbiAxLjAuMiBvZiAzMCBEZWNlbWJlciAyMDAxCiBAYXV0aG9yIEp1bGlhbiBTZXdhcmQKIAogQGVuZCB0aXRsZXBhZ2UKQEAgLTQwLDExICs0MCwxNyBAQAogQHBhcnNraXAgMm1tCiAKIEBlbmQgaWZ0ZXgKLUBub2RlIFRvcCwgT3ZlcnZpZXcsIChkaXIpLCAoZGlyKQorQG5vZGUgVG9wLCwsIChkaXIpCisKK1RoZSBmb2xsb3dpbmcgdGV4dCBpcyB0aGUgTGljZW5zZSBmb3IgdGhpcyBzb2Z0d2FyZS4gIFlvdSBzaG91bGQKK2ZpbmQgaXQgaWRlbnRpY2FsIHRvIHRoYXQgY29udGFpbmVkIGluIHRoZSBmaWxlIExJQ0VOU0UgaW4gdGhlIAorc291cmNlIGRpc3RyaWJ1dGlvbi4KKworQGJmey0tLS0tLS0tLS0tLS0tLS0tLSBTVEFSVCBPRiBUSEUgTElDRU5TRSAtLS0tLS0tLS0tLS0tLS0tLS19CiAKIFRoaXMgcHJvZ3JhbSwgQGNvZGV7YnppcDJ9LCAKIGFuZCBhc3NvY2lhdGVkIGxpYnJhcnkgQGNvZGV7bGliYnppcDJ9LCBhcmUKLUNvcHlyaWdodCAoQykgMTk5Ni0yMDAwIEp1bGlhbiBSIFNld2FyZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsMTQgKzg4LDE2IEBACiAKIEBjb2Rle2pzZXdhcmRAQGFjbS5vcmd9CiAKLUBjb2Rle2h0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vYnppcDJ9CitAY29kZXtiemlwMn0vQGNvZGV7bGliYnppcDJ9IHZlcnNpb24gMS4wLjIgb2YgMzAgRGVjZW1iZXIgMjAwMS4KKworQGJmey0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgVEhFIExJQ0VOU0UgLS0tLS0tLS0tLS0tLS0tLS0tfQorCitXZWIgc2l0ZXM6CisKK0Bjb2Rle2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnppcDJ9CiAKIEBjb2Rle2h0dHA6Ly93d3cuY2FjaGVwcm9mLm9yZ30KIAotQGNvZGV7aHR0cDovL3d3dy5tdXJhcm9hLmRlbW9uLmNvLnVrfQotCi1AY29kZXtiemlwMn0vQGNvZGV7bGliYnppcDJ9IHZlcnNpb24gMS4wIG9mIDIxIE1hcmNoIDIwMDAuCi0KIFBBVEVOVFM6IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSwgQGNvZGV7YnppcDJ9IGRvZXMgbm90IHVzZSBhbnkgcGF0ZW50ZWQKIGFsZ29yaXRobXMuICBIb3dldmVyLCBJIGRvIG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGNhcnJ5IG91dAogYSBmdWxsIHBhdGVudCBzZWFyY2guICBUaGVyZWZvcmUgSSBjYW5ub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mIHRoZQpAQCAtMTAxLDcgKzEwOSw2IEBACiAKIAogCi1Abm9kZSBPdmVydmlldywgSW1wbGVtZW50YXRpb24sIFRvcCwgVG9wCiBAY2hhcHRlciBJbnRyb2R1Y3Rpb24KIAogQGNvZGV7YnppcDJ9ICBjb21wcmVzc2VzICBmaWxlcyAgdXNpbmcgdGhlIEJ1cnJvd3MtV2hlZWxlciAKQEAgLTEzNCw3ICsxNDEsNyBAQAogQHVubnVtYmVyZWRzdWJzdWJzZWMgTkFNRQogQGl0ZW1pemUKIEBpdGVtIEBjb2Rle2J6aXAyfSwgQGNvZGV7YnVuemlwMn0KLS0gYSBibG9jay1zb3J0aW5nIGZpbGUgY29tcHJlc3NvciwgdjEuMAorLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjIKIEBpdGVtIEBjb2Rle2J6Y2F0fSAKIC0gZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dAogQGl0ZW0gQGNvZGV7YnppcDJyZWNvdmVyfQpAQCAtMjY0LDYgKzI3MSwxMSBAQAogRm9yY2Ugb3ZlcndyaXRlIG9mIG91dHB1dCBmaWxlcy4gIE5vcm1hbGx5LCBAY29kZXtiemlwMn0gd2lsbCBub3Qgb3ZlcndyaXRlCiBleGlzdGluZyBvdXRwdXQgZmlsZXMuICBBbHNvIGZvcmNlcyBAY29kZXtiemlwMn0gdG8gYnJlYWsgaGFyZCBsaW5rcwogdG8gZmlsZXMsIHdoaWNoIGl0IG90aGVyd2lzZSB3b3VsZG4ndCBkby4KKworQGNvZGV7YnppcDJ9IG5vcm1hbGx5IGRlY2xpbmVzIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUKK2NvcnJlY3QgbWFnaWMgaGVhZGVyIGJ5dGVzLiAgSWYgZm9yY2VkIChAY29kZXstZn0pLCBob3dldmVyLCBpdCB3aWxsCitwYXNzIHN1Y2ggZmlsZXMgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIEBjb2Rle2d6aXB9CitiZWhhdmVzLgogQGl0ZW0gLWsgLS1rZWVwCiBLZWVwIChkb24ndCBkZWxldGUpIGlucHV0IGZpbGVzIGR1cmluZyBjb21wcmVzc2lvbgogb3IgZGVjb21wcmVzc2lvbi4KQEAgLTI4Niw5ICsyOTgsMTMgQEAKIGluZm9ybWF0aW9uIHdoaWNoIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KIEBpdGVtIC1MIC0tbGljZW5zZSAtViAtLXZlcnNpb24KIERpc3BsYXkgdGhlIHNvZnR3YXJlIHZlcnNpb24sIGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi1AaXRlbSAtMSB0byAtOQorQGl0ZW0gLTEgKG9yIC0tZmFzdCkgdG8gLTkgKG9yIC0tYmVzdCkKIFNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4gIDkwMCBrIHdoZW4gY29tcHJlc3NpbmcuICBIYXMgbm8KIGVmZmVjdCB3aGVuIGRlY29tcHJlc3NpbmcuICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCitUaGUgQGNvZGV7LS1mYXN0fSBhbmQgQGNvZGV7LS1iZXN0fSBhbGlhc2VzIGFyZSBwcmltYXJpbHkgZm9yIEdOVQorQGNvZGV7Z3ppcH0gY29tcGF0aWJpbGl0eS4gIEluIHBhcnRpY3VsYXIsIEBjb2Rley0tZmFzdH0gZG9lc24ndCBtYWtlCit0aGluZ3Mgc2lnbmlmaWNhbnRseSBmYXN0ZXIuICBBbmQgQGNvZGV7LS1iZXN0fSBtZXJlbHkgc2VsZWN0cyB0aGUKK2RlZmF1bHQgYmVoYXZpb3VyLgogQGl0ZW0gLS0KIFRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywgZXZlbiBpZiB0aGV5IHN0YXJ0CiB3aXRoIGEgZGFzaC4gIFRoaXMgaXMgc28geW91IGNhbiBoYW5kbGUgZmlsZXMgd2l0aCBuYW1lcyBiZWdpbm5pbmcKQEAgLTM4OSwyMSArNDA1LDE5IEBACiB1bmRhbWFnZWQuCiAKIEBjb2Rle2J6aXAycmVjb3Zlcn0gCi10YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhbWFnZWQgZmlsZSwgCi1hbmQgd3JpdGVzIGEgbnVtYmVyIG9mIGZpbGVzIEBjb2Rle3JlYzAwMDFmaWxlLmJ6Mn0sCi0gICAgICAgQGNvZGV7cmVjMDAwMmZpbGUuYnoyfSwgZXRjLCBjb250YWluaW5nIHRoZSAgZXh0cmFjdGVkICBibG9ja3MuCi0gICAgICAgVGhlICBvdXRwdXQgIGZpbGVuYW1lcyAgYXJlICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZgotICAgICAgIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb2Nlc3NpbmcgLS0gZm9yIGV4YW1wbGUsICAKLUBjb2Rle2J6aXAyIC1kYyAgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGF9IC0tIGxpc3RzIHRoZSBmaWxlcyBpbgotICAgICAgIHRoZSBjb3JyZWN0IG9yZGVyLgordGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW1hZ2VkIGZpbGUsIGFuZCB3cml0ZXMgYQorbnVtYmVyIG9mIGZpbGVzIEBjb2Rle3JlYzAwMDAxZmlsZS5iejJ9LCBAY29kZXtyZWMwMDAwMmZpbGUuYnoyfSwgZXRjLAorY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIGJsb2Nrcy4gIFRoZSBvdXRwdXQgZmlsZW5hbWVzIGFyZSBkZXNpZ25lZCBzbwordGhhdCB0aGUgdXNlIG9mIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb2Nlc3NpbmcgLS0gZm9yIGV4YW1wbGUsCitAY29kZXtiemlwMiAtZGMgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGF9IC0tIHByb2Nlc3NlcyB0aGUgZmlsZXMgaW4KK3RoZSBjb3JyZWN0IG9yZGVyLgogCiBAY29kZXtiemlwMnJlY292ZXJ9IHNob3VsZCBiZSBvZiBtb3N0IHVzZSBkZWFsaW5nIHdpdGggbGFyZ2UgQGNvZGV7LmJ6Mn0KLSAgICAgICBmaWxlcywgIGFzICB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5Ci0gICAgICAgZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayAgZmlsZXMsICBzaW5jZSAgYQotICAgICAgIGRhbWFnZWQgIGJsb2NrICBjYW5ub3QgIGJlIHJlY292ZXJlZC4gIElmIHlvdSB3aXNoIHRvIG1pbmltaXNlIAotYW55IHBvdGVudGlhbCBkYXRhIGxvc3MgdGhyb3VnaCBtZWRpYSAgb3IgIHRyYW5zbWlzc2lvbiBlcnJvcnMsIAoteW91IG1pZ2h0IGNvbnNpZGVyIGNvbXByZXNzaW5nIHdpdGggYSBzbWFsbGVyCi0gICAgICAgYmxvY2sgc2l6ZS4KK2ZpbGVzLCBhcyB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5IGZ1dGlsZSB0byB1c2UKK2l0IG9uIGRhbWFnZWQgc2luZ2xlLWJsb2NrIGZpbGVzLCBzaW5jZSBhIGRhbWFnZWQgYmxvY2sgY2Fubm90IGJlCityZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW5pbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoCittZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhCitzbWFsbGVyIGJsb2NrIHNpemUuCiAKIAogQHVubnVtYmVyZWRzdWJzdWJzZWMgUEVSRk9STUFOQ0UgTk9URVMKQEAgLTQzNSwyMiArNDQ5LDMxIEBACiB0cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzIGFuZCBleGl0IGNsZWFubHksIGJ1dCB0aGUgZGV0YWlscyBvZgogd2hhdCB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbSByYXRoZXIgbWlzbGVhZGluZy4KIAotVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMCBvZiBAY29kZXtiemlwMn0uICBDb21wcmVzc2VkCitUaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjIgb2YgQGNvZGV7YnppcDJ9LiAgQ29tcHJlc3NlZAogZGF0YSBjcmVhdGVkIGJ5IHRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcyBhbmQgYmFja3dhcmRzCi1jb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHB1YmxpYyByZWxlYXNlcywgdmVyc2lvbnMgMC4xcGwyLCAwLjkuMCBhbmQKLTAuOS41LCBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kIGFib3ZlIGNhbiBjb3JyZWN0bHkKLWRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuICAwLjFwbDIgY2Fubm90IGRvCi10aGlzOyBpdCB3aWxsIHN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZyBqdXN0IHRoZSBmaXJzdCBmaWxlIGluIHRoZQotc3RyZWFtLgorY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyBwdWJsaWMgcmVsZWFzZXMsIHZlcnNpb25zIDAuMXBsMiwgMC45LjAsCiswLjkuNSwgMS4wLjAgYW5kIDEuMC4xLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kCithYm92ZSBjYW4gY29ycmVjdGx5IGRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuCiswLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgc3RvcCBhZnRlciBkZWNvbXByZXNzaW5nIGp1c3QgdGhlIGZpcnN0CitmaWxlIGluIHRoZSBzdHJlYW0uCiAKLUBjb2Rle2J6aXAycmVjb3Zlcn0gdXNlcyAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4KLWNvbXByZXNzZWQgZmlsZXMsIHNvIGl0IGNhbm5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlIHRoYW4gNTEyCi1tZWdhYnl0ZXMgbG9uZy4gIFRoaXMgY291bGQgZWFzaWx5IGJlIGZpeGVkLgorQGNvZGV7YnppcDJyZWNvdmVyfSB2ZXJzaW9ucyBwcmlvciB0byB0aGlzIG9uZSwgMS4wLjIsIHVzZWQgMzItYml0CitpbnRlZ2VycyB0byByZXByZXNlbnQgYml0IHBvc2l0aW9ucyBpbiBjb21wcmVzc2VkIGZpbGVzLCBzbyBpdCBjb3VsZCBub3QKK2hhbmRsZSBjb21wcmVzc2VkIGZpbGVzIG1vcmUgdGhhbiA1MTIgbWVnYWJ5dGVzIGxvbmcuICBWZXJzaW9uIDEuMC4yIGFuZAorYWJvdmUgdXNlcyA2NC1iaXQgaW50cyBvbiBzb21lIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHRoZW0gKEdOVQorc3VwcG9ydGVkIHRhcmdldHMsIGFuZCBXaW5kb3dzKS4gIFRvIGVzdGFibGlzaCB3aGV0aGVyIG9yIG5vdAorQGNvZGV7YnppcDJyZWNvdmVyfSB3YXMgYnVpbHQgd2l0aCBzdWNoIGEgbGltaXRhdGlvbiwgcnVuIGl0IHdpdGhvdXQKK2FyZ3VtZW50cy4gIEluIGFueSBldmVudCB5b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGFuIHVubGltaXRlZCB2ZXJzaW9uIGlmCit5b3UgY2FuIHJlY29tcGlsZSBpdCB3aXRoIEBjb2Rle01heWJlVUludDY0fSBzZXQgdG8gYmUgYW4gdW5zaWduZWQKKzY0LWJpdCBpbnRlZ2VyLgorCiAKIAogQHVubnVtYmVyZWRzdWJzdWJzZWMgQVVUSE9SCiBKdWxpYW4gU2V3YXJkLCBAY29kZXtqc2V3YXJkQEBhY20ub3JnfS4KIAorQGNvZGV7aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9iemlwMn0KKwogVGhlIGlkZWFzIGVtYm9kaWVkIGluIEBjb2Rle2J6aXAyfSBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbGxvd2luZwogcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUgYmxvY2sgc29ydGluZwogdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyIChhZ2FpbiwgZm9yIHRoZSBIdWZmbWFuIGNvZGVyKSwgUGV0ZXIKQEAgLTQ2MSw4ICs0ODQsOSBAQAogc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCiB2b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8KIHNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZQotd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkCi13aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zLCBsZW50IG1hY2hpbmVzLCBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKK3dvcnN0LWNhc2UgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBUaGUgQGNvZGV7YnoqfSBzY3JpcHRzIGFyZSBkZXJpdmVkCitmcm9tIHRob3NlIG9mIEdOVSBAY29kZXtnemlwfS4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkIHdpdGgKK3BvcnRhYmlsaXR5IHByb2JsZW1zLCBsZW50IG1hY2hpbmVzLCBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKIGhlbHBmdWwuCiAKIEBlbmQgcXVvdGF0aW9uCkBAIC0xNzY5LDE2ICsxNzkzLDIwIEBACiBGb3IgYSBub3JtYWwgY29tcGlsZSwgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgeWllbGRzIHRoZSBtZXNzYWdlCiBAZXhhbXBsZQogICAgYnppcDIvbGliYnppcDI6IGludGVybmFsIGVycm9yIG51bWJlciBOLgotICAgVGhpcyBpcyBhIGJ1ZyBpbiBiemlwMi9saWJiemlwMiwgMS4wIG9mIDIxLU1hci0yMDAwLgorICAgVGhpcyBpcyBhIGJ1ZyBpbiBiemlwMi9saWJiemlwMiwgMS4wLjIsIDMwLURlYy0yMDAxLgogICAgUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDoganNld2FyZEBAYWNtLm9yZy4gIElmIHRoaXMgaGFwcGVuZWQKICAgIHdoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYQogICAgY29tcG9uZW50LCB5b3Ugc2hvdWxkIGFsc28gcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBhdXRob3IocykKICAgIG9mIHRoYXQgcHJvZ3JhbS4gIFBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byByZXBvcnQgdGhpcyBidWc7CiAgICB0aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXIKLSAgIHF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuICBKdWxpYW4gU2V3YXJkLCAyMSBNYXJjaCAyMDAwLgorICAgcXVhbGl0eSBzb2Z0d2FyZS4gIFRoYW5rcy4gIEp1bGlhbiBTZXdhcmQsIDMwIERlY2VtYmVyIDIwMDEuCiBAZW5kIGV4YW1wbGUKLXdoZXJlIEBjb2Rle059IGlzIHNvbWUgZXJyb3IgY29kZSBudW1iZXIuICBAY29kZXtleGl0KDMpfQotaXMgdGhlbiBjYWxsZWQuCit3aGVyZSBAY29kZXtOfSBpcyBzb21lIGVycm9yIGNvZGUgbnVtYmVyLiAgSWYgQGNvZGV7TiA9PSAxMDA3fSwgaXQgYWxzbworcHJpbnRzIHNvbWUgZXh0cmEgdGV4dCBhZHZpc2luZyB0aGUgcmVhZGVyIHRoYXQgdW5yZWxpYWJsZSBtZW1vcnkgaXMKK29mdGVuIGFzc29jaWF0ZWQgd2l0aCBpbnRlcm5hbCBlcnJvciAxMDA3LiAgKFRoaXMgaXMgYQorZnJlcXVlbnRseS1vYnNlcnZlZC1waGVub21lbm9uIHdpdGggdmVyc2lvbnMgMS4wLjAvMS4wLjEpLgorCitAY29kZXtleGl0KDMpfSBpcyB0aGVuIGNhbGxlZC4KIAogRm9yIGEgQGNvZGV7c3RkaW99LWZyZWUgbGlicmFyeSwgYXNzZXJ0aW9uIGZhaWx1cmVzIHJlc3VsdAogaW4gYSBjYWxsIHRvIGEgZnVuY3Rpb24gZGVjbGFyZWQgYXM6CkBAIC0yMDU2LDEwICsyMDg0LDEwIEBACiBJZiB5b3Ugd2FudCBhIGNvbXByZXNzb3IgYW5kL29yIGxpYnJhcnkgd2hpY2ggaXMgZmFzdGVyLCB1c2VzIGxlc3MKIG1lbW9yeSBidXQgZ2V0cyBwcmV0dHkgZ29vZCBjb21wcmVzc2lvbiwgYW5kIGhhcyBtaW5pbWFsIGxhdGVuY3ksCiBjb25zaWRlciBKZWFuLWxvdXAKLUdhaWxseSdzIGFuZCBNYXJrIEFkbGVyJ3Mgd29yaywgQGNvZGV7emxpYi0xLjEuMn0gYW5kCitHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzIHdvcmssIEBjb2Rle3psaWItMS4xLjN9IGFuZAogQGNvZGV7Z3ppcC0xLjIuNH0uICBMb29rIGZvciB0aGVtIGF0CiAKLUBjb2Rle2h0dHA6Ly93d3cuY2Ryb20uY29tL3B1Yi9pbmZvemlwL3psaWJ9IGFuZAorQGNvZGV7aHR0cDovL3d3dy56bGliLm9yZ30gYW5kCiBAY29kZXtodHRwOi8vd3d3Lmd6aXAub3JnfSByZXNwZWN0aXZlbHkuCiAKIEZvciBzb21ldGhpbmcgZmFzdGVyIGFuZCBsaWdodGVyIHN0aWxsLCB5b3UgbWlnaHQgdHJ5IE1hcmt1cyBGIFggSgpkaWZmIC0tZ2l0IGEvbWsyNTEuYyBiL21rMjUxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1Nzc4YQotLS0gL2Rldi9udWxsCisrKyBiL21rMjUxLmMKQEAgLTAsMCArMSwxNiBAQAorCisvKiBTcGV3IG91dCBhIGxvbmcgc2VxdWVuY2Ugb2YgdGhlIGJ5dGUgMjUxLiAgV2hlbiBmZWQgdG8gYnppcDIKKyAgIHZlcnNpb25zIDEuMC4wIG9yIDEuMC4xLCBjYXVzZXMgaXQgdG8gZGllIHdpdGggaW50ZXJuYWwgZXJyb3IKKyAgIDEwMDcgaW4gYmxvY2tzb3J0LmMuICBUaGlzIGFzc2VydGlvbiBtaXNzZXMgYW4gZXh0cmVtZWx5IHJhcmUKKyAgIGNhc2UsIHdoaWNoIGlzIGZpeGVkIGluIHRoaXMgdmVyc2lvbiAoMS4wLjIpIGFuZCBhYm92ZS4KKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbiAoKQoreworICAgaW50IGk7CisgICBmb3IgKGkgPSAwOyBpIDwgNDg1MDAwMDAgOyBpKyspCisgICAgIHB1dGNoYXIoMjUxKTsKKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcmFuZHRhYmxlLmMgYi9yYW5kdGFibGUuYwppbmRleCA5ODMwODlkLi41YzkyMmU5IDEwMDY0NAotLS0gYS9yYW5kdGFibGUuYworKysgYi9yYW5kdGFibGUuYwpAQCAtOCw3ICs4LDcgQEAKICAgVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBiemlwMiBhbmQvb3IgbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQKICAgbGlicmFyeSBmb3IgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBKdWxpYW4gUiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL3dvcmRzMyBiL3dvcmRzMwppbmRleCA4NDg2YTg0Li43YTZiNDYyIDEwMDY0NAotLS0gYS93b3JkczMKKysrIGIvd29yZHMzCkBAIC0xNSw4ICsxNSw4IEBACiAKIEluc3RydWN0aW9ucyBmb3IgdXNlIGFyZSBpbiB0aGUgcHJlZm9ybWF0dGVkIG1hbnVhbCBwYWdlLCBpbiB0aGUgZmlsZQogYnppcDIudHh0LiAgRm9yIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiwgcmVhZCB0aGUgZnVsbCBtYW51YWwuICAKLUl0IGlzIGF2YWlsYWJsZSBpbiBQb3N0c2NyaXB0IGZvcm0gKG1hbnVhbC5wcykgYW5kIEhUTUwgZm9ybQotKG1hbnVhbF90b2MuaHRtbCkuCitJdCBpcyBhdmFpbGFibGUgaW4gUG9zdHNjcmlwdCBmb3JtIChtYW51YWwucHMpLCBQREYgZm9ybSAobWFudWFsLnBkZiksCithbmQgSFRNTCBmb3JtIChtYW51YWxfdG9jLmh0bWwpLgogCiBZb3UgY2FuIGFsc28gZG8gImJ6aXAyIC0taGVscCIgdG8gc2VlIHNvbWUgaGVscGZ1bCBpbmZvcm1hdGlvbi4gCiAiYnppcDIgLUwiIGRpc3BsYXlzIHRoZSBzb2Z0d2FyZSBsaWNlbnNlLgo=