FOUC

Antti Koivisto koivisto@iki.fi
Sat, 11 Jan 2003 19:44:44 +0200


This message is in MIME format.

---MOQ1042307084c9962df4c61094927132c47efaa5d801
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello, 
 
Here is a patch that contains Apples FOUC fixes ported to the current CVS 
HEAD. It seems to work nicely. 
 
I didn't try to improve it in any way. The (rather ugly) isInline() stuff 
is included, as is the removal of blockBidi. Those need still be addressed 
before commiting it to CVS. 
 
 
  antti 
  
Quoting David Hyatt <hyatt@apple.com>:  
  
> Let me know if I can help in any way, even if it's just to verify   
> whether or not a particular code fix had anything to do with FOUC. :)  
>   
> Dave  
>   
> On Friday, January 10, 2003, at 02:38 AM, Alexander Kellett wrote:  
>   
> > (not sure that this message will get through to the list  
> >  mklingens just told me about this list, which i'd not  
> >  even realized existed :) )  
> >  
> > Hiya David,  
> >  
> > David Hyatt wrote:  
> >> I noticed that Alexander Kel is attempting to merge the FOUC fixes   
> >> into  
> >> KHTML.  His patch is including some fixes that did not have to do  
> with  
> >> FOUC (in particular some of the setParent hackery for pseudo  
> >> elements... that actually had to do with the arena allocation and not  
> >> with FOUC).  
> >  
> > As you probably guessed by knowledge of the khtml code base  
> > is minimal and i'm using the patch splitup mainly as an excuse  
> > to learn some more about it. I realized only after stepping away  
> > from the computer last night that the setParent stuff logically  
> > had nothing to do with FOUC, just that i searched for "assert"  
> > in the hope of fixing nvidia.com - which crashes with the patchset  
> > im using.  
> >  
> >> I wish I could give you a single patch that consisted only of FOUC  
> >> fixes, but it was a very incremental addition in our code base, and  
> so  
> >> it was broken up into a single initial patch and many many bug fixes  
> >> that followed. :(  
> >  
> > Thought that may be the case as the current patch set i've got  
> > seems to logically implement the feature (and a nice feature it is!)  
> > yet there remains a crash point, probably fixed be the later stuff.  
> > I'm going to try to find the crash fix anyway. This is really   
> > interesting  
> > work and I really need a short break from my current project anyway :)  
> >  
> > In other words, i'm not part of the khtml team, and am just  
> > enjoying messing around with the code for the moment :)  
> >  
> > mvg,  
> > Alex  
> >  
> > --   
> > "[...] Konqueror open source project. Weighing in at less than  
> >             one tenth the size of another open source renderer"  
> > Apple,  Jan 2003 (http://www.apple.com/safari/)  
>   
> _______________________________________________  
> Khtml-devel@mail.kde.org  
> http://mail.kde.org/mailman/listinfo/khtml-devel  
>   
  
  
---MOQ1042307084c9962df4c61094927132c47efaa5d801
Content-Type: text/x-diff; name="fouc2.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="fouc2.diff"

PyBmb3VjMi5kaWZmCj8gZm91Y3Rlc3QuaHRtbApJbmRleDogY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2Nzcy9jc3Nz
dHlsZXNlbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDYKZGlmZiAtdSAtMyAt
cjEuMjQ2IGNzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJ
OSBKYW4gMjAwMyAwNzoxNDoyNCAtMDAwMAkxLjI0NgorKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCTExIEphbiAyMDAzIDE3OjI5OjM1IC0wMDAwCkBAIC03Myw2ICs3Myw3IEBACiBDU1NTdHls
ZVNlbGVjdG9yTGlzdCAqQ1NTU3R5bGVTZWxlY3Rvcjo6ZGVmYXVsdFF1aXJrc1N0eWxlID0gMDsK
IENTU1N0eWxlU2VsZWN0b3JMaXN0ICpDU1NTdHlsZVNlbGVjdG9yOjpkZWZhdWx0UHJpbnRTdHls
ZSA9IDA7CiBDU1NTdHlsZVNoZWV0SW1wbCAqQ1NTU3R5bGVTZWxlY3Rvcjo6ZGVmYXVsdFNoZWV0
ID0gMDsKK1JlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZU5vdFlldEF2YWlsYWJs
ZSA9IDA7CiAKIGVudW0gUHNldWRvU3RhdGUgeyBQc2V1ZG9Vbmtub3duLCBQc2V1ZG9Ob25lLCBQ
c2V1ZG9MaW5rLCBQc2V1ZG9WaXNpdGVkfTsKIHN0YXRpYyBQc2V1ZG9TdGF0ZSBwc2V1ZG9TdGF0
ZTsKQEAgLTI5Miw2ICsyOTMsMTYgQEAKIAogUmVuZGVyU3R5bGUgKkNTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yRWxlbWVudChFbGVtZW50SW1wbCAqZSwgaW50IHN0YXRlKQogeworCisgICAgaWYg
KCFlLT5nZXREb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkgeworICAgICAgICBp
ZiAoIXN0eWxlTm90WWV0QXZhaWxhYmxlKSB7CisgICAgICAgICAgICBzdHlsZU5vdFlldEF2YWls
YWJsZSA9IG5ldyBSZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgc3R5bGVOb3RZZXRBdmFpbGFi
bGUtPnNldERpc3BsYXkoTk9ORSk7CisgICAgICAgICAgICBzdHlsZU5vdFlldEF2YWlsYWJsZS0+
cmVmKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0eWxlTm90WWV0QXZhaWxhYmxlOwor
ICAgIH0KKwogICAgIC8vIHNldCBzb21lIHZhcmlhYmxlcyB3ZSB3aWxsIG5lZWQKICAgICBkeW5h
bWljU3RhdGUgPSBzdGF0ZTsKICAgICB1c2VkRHluYW1pY1N0YXRlcyA9IFN0eWxlU2VsZWN0b3I6
Ok5vbmU7CkluZGV4OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtMyAtcjEuMzAgY3Nzc3R5bGVzZWxlY3Rvci5oCi0t
LSBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCTggSmFuIDIwMDMgMTg6MTU6NTAgLTAwMDAJMS4zMAor
KysgY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAkxMSBKYW4gMjAwMyAxNzoyOTozOCAtMDAwMApAQCAt
MTY0LDYgKzE2NCw4IEBACiAgICAgICAgIERPTTo6Q1NTU3R5bGVTaGVldEltcGwgKnVzZXJTaGVl
dDsKIAogcHVibGljOgorCXN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGU7
CisJCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0KCk7CiAKSW5kZXg6IGh0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMv
a2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NTEKZGlmZiAtdSAtMyAtcjEuMTUxIGh0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBodG1sL2h0bWxf
ZWxlbWVudGltcGwuY3BwCTEwIEphbiAyMDAzIDA0OjMyOjUzIC0wMDAwCTEuMTUxCisrKyBodG1s
L2h0bWxfZWxlbWVudGltcGwuY3BwCTExIEphbiAyMDAzIDE3OjI5OjM5IC0wMDAwCkBAIC0zLDYg
KzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAyIEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTU0LDYgKzU1LDQ4IEBACiAKIEhUTUxFbGVtZW50SW1wbDo6fkhUTUxF
bGVtZW50SW1wbCgpCiB7Cit9CisKK2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjppc0lubGluZSgpIGNv
bnN0Cit7CisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBFbGVtZW50SW1wbDo6
aXNJbmxpbmUoKTsKKyAgICAKKyAgICBzd2l0Y2goaWQoKSkgeworICAgICAgICBjYXNlIElEX0E6
CisgICAgICAgIGNhc2UgSURfRk9OVDoKKyAgICAgICAgY2FzZSBJRF9UVDoKKyAgICAgICAgY2Fz
ZSBJRF9VOgorICAgICAgICBjYXNlIElEX0I6CisgICAgICAgIGNhc2UgSURfSToKKyAgICAgICAg
Y2FzZSBJRF9TOgorICAgICAgICBjYXNlIElEX1NUUklLRToKKyAgICAgICAgY2FzZSBJRF9CSUc6
CisgICAgICAgIGNhc2UgSURfU01BTEw6CisgICAgCisgICAgICAgICAgICAvLyAlcGhyYXNlCisg
ICAgICAgIGNhc2UgSURfRU06CisgICAgICAgIGNhc2UgSURfU1RST05HOgorICAgICAgICBjYXNl
IElEX0RGTjoKKyAgICAgICAgY2FzZSBJRF9DT0RFOgorICAgICAgICBjYXNlIElEX1NBTVA6Cisg
ICAgICAgIGNhc2UgSURfS0JEOgorICAgICAgICBjYXNlIElEX1ZBUjoKKyAgICAgICAgY2FzZSBJ
RF9DSVRFOgorICAgICAgICBjYXNlIElEX0FCQlI6CisgICAgICAgIGNhc2UgSURfQUNST05ZTToK
KyAgICAKKyAgICAgICAgICAgIC8vICVzcGVjaWFsCisgICAgICAgIGNhc2UgSURfU1VCOgorICAg
ICAgICBjYXNlIElEX1NVUDoKKyAgICAgICAgY2FzZSBJRF9TUEFOOgorICAgICAgICBjYXNlIElE
X05PQlI6CisgICAgICAgIGNhc2UgSURfV0JSOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50
SW1wbDo6aXNJbmxpbmUoKTsKKyAgICB9CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpwYXJz
ZUF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKQpJbmRleDogaHRtbC9odG1sX2VsZW1lbnRp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjIKZGlmZiAtdSAtMyAt
cjEuNjIgaHRtbF9lbGVtZW50aW1wbC5oCi0tLSBodG1sL2h0bWxfZWxlbWVudGltcGwuaAkxMCBK
YW4gMjAwMyAwNDozMjo1MyAtMDAwMAkxLjYyCisrKyBodG1sL2h0bWxfZWxlbWVudGltcGwuaAkx
MSBKYW4gMjAwMyAxNzoyOTozOSAtMDAwMApAQCAtNDEsNiArNDEsOCBAQAogCiAgICAgdmlydHVh
bCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2aXJ0
dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25zdDsKKyAgICAgCiAgICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBs
ICp0b2tlbik7CkluZGV4OiBodG1sL2h0bWxfaGVhZGltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOTUKZGlmZiAtdSAtMyAtcjEuOTUgaHRtbF9oZWFkaW1wbC5jcHAK
LS0tIGh0bWwvaHRtbF9oZWFkaW1wbC5jcHAJOSBEZWMgMjAwMiAwNzoyMTo0NCAtMDAwMAkxLjk1
CisrKyBodG1sL2h0bWxfaGVhZGltcGwuY3BwCTExIEphbiAyMDAzIDE3OjI5OjM5IC0wMDAwCkBA
IC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTE0LDcgKzExNSw3IEBACiAgICAgewogICAgIGNhc2UgQVRUUl9SRUw6
CiAgICAgICAgIG1fcmVsID0gYXR0ci0+dmFsdWUoKTsKLQlwcm9jZXNzKCk7CisgICAgICAgIHBy
b2Nlc3MoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBVFRSX0hSRUY6CiAgICAgICAgIG1f
dXJsID0gZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoIGtodG1sOjpwYXJzZVVSTChhdHRyLT52
YWx1ZSgpKS5zdHJpbmcoKSApOwpAQCAtMTI2LDExICsxMjcsMzYgQEAKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBVFRSX01FRElBOgogICAgICAgICBtX21lZGlhID0gYXR0ci0+dmFsdWUoKS5z
dHJpbmcoKS5sb3dlcigpOwotCXByb2Nlc3MoKTsKKyAgICAgICAgcHJvY2VzcygpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFUVFJfRElTQUJMRUQ6Ci0gICAgICAgIC8vICMjIworICAgIGNh
c2UgQVRUUl9ESVNBQkxFRDogeworICAgICAgICBpbnQgb2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlz
YWJsZWRTdGF0ZTsKKyAgICAgICAgbV9kaXNhYmxlZFN0YXRlID0gKGF0dHItPnZhbCgpICE9IDAp
ID8gMiA6IDE7CisgICAgICAgIGlmIChvbGREaXNhYmxlZFN0YXRlICE9IG1fZGlzYWJsZWRTdGF0
ZSkgeworICAgICAgICAgICAgLy8gSWYgd2UgY2hhbmdlIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGls
ZSB0aGUgc2hlZXQgaXMgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBoYXZlIHRvCisgICAgICAgICAg
ICAvLyBwZXJmb3JtIHR3byBjaGVja3M6CisgICAgICAgICAgICAvLyBDaGVjayAjMTogSWYgdGhl
IHNoZWV0IGJlY29tZXMgZGlzYWJsZWQgd2hpbGUgaXQgd2FzIGxvYWRpbmcsIGFuZCBpZiBpdCB3
YXMgZWl0aGVyCisgICAgICAgICAgICAvLyBhIG1haW4gc2hlZXQgb3IgYSBzaGVldCB0aGF0IHdh
cyBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIHNjcmlwdCwgdGhlbiB3ZSBuZWVkCisgICAgICAgICAg
ICAvLyB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBwZW5kaW5nIHNoZWV0cy4KKyAgICAg
ICAgICAgIGlmIChpc0xvYWRpbmcoKSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMiAmJiAoIW1fYWx0
ZXJuYXRlIHx8IG9sZERpc2FibGVkU3RhdGUgPT0gMSkpCisgICAgICAgICAgICAgICAgZ2V0RG9j
dW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gQ2hlY2sgIzI6IEFuIGFsdGVybmF0ZSBzaGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUg
aXQgaXMgc3RpbGwgbG9hZGluZy4KKyAgICAgICAgICAgIGlmIChpc0xvYWRpbmcoKSAmJiBtX2Fs
dGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSkKKyAgICAgICAgICAgICAgICBnZXREb2N1
bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIElmIHRoZSBzaGVldCBpcyBhbHJlYWR5IGxvYWRpbmcganVzdCBiYWlsLgorICAgICAgICAg
ICAgaWYgKGlzTG9hZGluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBMb2FkIHRoZSBzaGVldCwgc2luY2UgaXQncyBuZXZlciBiZWVuIGxv
YWRlZCBiZWZvcmUuCisgICAgICAgICAgICBpZiAoIW1fc2hlZXQgJiYgbV9kaXNhYmxlZFN0YXRl
ID09IDEpCisgICAgICAgICAgICAgICAgcHJvY2VzcygpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGdldERvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsgLy8gVXBk
YXRlIHRoZSBzdHlsZSBzZWxlY3Rvci4KKyAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgZGVmYXVsdDoKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShh
dHRyKTsKICAgICB9CkBAIC0xMzksNyArMTY1LDcgQEAKIHZvaWQgSFRNTExpbmtFbGVtZW50SW1w
bDo6cHJvY2VzcygpCiB7CiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCi0JcmV0dXJuOworICAgICAg
ICByZXR1cm47CiAKICAgICBRU3RyaW5nIHR5cGUgPSBtX3R5cGUuc3RyaW5nKCkubG93ZXIoKTsK
ICAgICBRU3RyaW5nIHJlbCA9IG1fcmVsLnN0cmluZygpLmxvd2VyKCk7CkBAIC0xNTMsMTEgKzE3
OSwyMCBAQAogICAgICAgICBwYXJ0LT5icm93c2VyRXh0ZW5zaW9uKCktPnNldEljb25VUkwoIEtV
UkwobV91cmwuc3RyaW5nKCkpICk7CiAKICAgICAvLyBTdHlsZXNoZWV0Ci0gICAgaWYodHlwZS5j
b250YWlucygidGV4dC9jc3MiKSB8fCByZWwuY29udGFpbnMoInN0eWxlc2hlZXQiKSkgeworICAg
IC8vIFRoaXMgd2FzIGJ1Z2d5IGFuZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGluayByZWw9
ImFsdGVybmF0ZSI+LCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5pbmcuIC1k
d2gKKyAgICBpZihtX2Rpc2FibGVkU3RhdGUgIT0gMiAmJiAodHlwZS5jb250YWlucygidGV4dC9j
c3MiKSB8fCByZWwgPT0gInN0eWxlc2hlZXQiIHx8IChyZWwuY29udGFpbnMoImFsdGVybmF0ZSIp
ICYmIHJlbC5jb250YWlucygic3R5bGVzaGVldCIpKSkpIHsKKwogICAgICAgICAvLyBubyBuZWVk
IHRvIGxvYWQgc3R5bGUgc2hlZXRzIHdoaWNoIGFyZW4ndCBmb3IgdGhlIHNjcmVlbiBvdXRwdXQK
ICAgICAgICAgLy8gIyMjIHRoZXJlIG1heSBiZSBpbiBzb21lIHNpdHVhdGlvbnMgZS5nLiBmb3Ig
YW4gZWRpdG9yIG9yIHNjcmlwdCB0byBtYW5pcHVsYXRlCiAgICAgICAgIGlmKCBtX21lZGlhLmlz
TnVsbCgpIHx8IG1fbWVkaWEuY29udGFpbnMoInNjcmVlbiIpIHx8IG1fbWVkaWEuY29udGFpbnMo
ImFsbCIpIHx8IG1fbWVkaWEuY29udGFpbnMoInByaW50IikgKSB7CiAgICAgICAgICAgICBtX2xv
YWRpbmcgPSB0cnVlOworCSAgICAKKyAgICAgICAgICAgIC8vIEFkZCBvdXJzZWx2ZXMgYXMgYSBw
ZW5kaW5nIHNoZWV0LCBidXQgb25seSBpZiB3ZSBhcmVuJ3QgYW4gYWx0ZXJuYXRlIAorICAgICAg
ICAgICAgLy8gc3R5bGVzaGVldC4gIEFsdGVybmF0ZSBzdHlsZXNoZWV0cyBkb24ndCBob2xkIHVw
IHJlbmRlciB0cmVlIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgICAgIG1fYWx0ZXJuYXRlID0gcmVs
LmNvbnRhaW5zKCJhbHRlcm5hdGUiKTsKKyAgICAgICAgICAgIGlmICghaXNBbHRlcm5hdGUoKSkK
KyAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKwkgICAg
CiAgICAgICAgICAgICBRU3RyaW5nIGNoc2V0ID0gZ2V0QXR0cmlidXRlKCBBVFRSX0NIQVJTRVQg
KS5zdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KQogCQltX2NhY2hlZFNo
ZWV0LT5kZXJlZih0aGlzKTsKQEAgLTE5Miw3ICsyMjcsNyBAQAogLy8gICAga2REZWJ1ZyggNjAz
MCApIDw8ICIqKioqIGN1cnJlbnQgbWVkaXVtOiAiIDw8IG1fbWVkaWEgPDwgZW5kbDsKIAogICAg
IGlmIChtX3NoZWV0KQotCW1fc2hlZXQtPmRlcmVmKCk7CisgICAgICAgIG1fc2hlZXQtPmRlcmVm
KCk7CiAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0SW1wbCh0aGlzLCB1cmwpOwogICAg
IGtkRGVidWcoIDYwMzAgKSA8PCAic3R5bGUgc2hlZXQgcGFyc2UgbW9kZSBzdHJpY3QgPSAiIDw8
ICggZ2V0RG9jdW1lbnQoKS0+cGFyc2VNb2RlKCkgPT0gRG9jdW1lbnRJbXBsOjpTdHJpY3QgKSA8
PCBlbmRsOwogICAgIG1fc2hlZXQtPnJlZigpOwpAQCAtMjAzLDcgKzIzOCw5IEBACiAKICAgICBt
X2xvYWRpbmcgPSBmYWxzZTsKIAotICAgIGdldERvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0
b3IoKTsKKyAgICAvLyBUZWxsIHRoZSBkb2MgYWJvdXQgdGhlIHNoZWV0LgorICAgIGlmICghaXNM
b2FkaW5nKCkgJiYgbV9zaGVldCAmJiAhaXNEaXNhYmxlZCgpICYmICFpc0FsdGVybmF0ZSgpKQor
ICAgICAgICBnZXREb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7CiB9CiAKIGJvb2wgSFRN
TExpbmtFbGVtZW50SW1wbDo6aXNMb2FkaW5nKCkgY29uc3QKQEAgLTIxNyw3ICsyNTQsOCBAQAog
CiB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNoZWV0TG9hZGVkKCkKIHsKLSAgICBnZXREb2N1
bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAh
aXNEaXNhYmxlZCgpICYmICFpc0FsdGVybmF0ZSgpKQorICAgICAgICBnZXREb2N1bWVudCgpLT5z
dHlsZXNoZWV0TG9hZGVkKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwNSw4ICsz
NDMsMTEgQEAKICAgICBzd2l0Y2ggKGF0dHItPmlkKCkpCiAgICAgewogICAgIGNhc2UgQVRUUl9U
WVBFOgorICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpLmxvd2VyKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQVRUUl9NRURJQToKLQlicmVhazsKKyAgICAgICAgbV9tZWRpYSA9IGF0
dHItPnZhbHVlKCkuc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKICAgICB9
CkBAIC0zMTUsMTMgKzM1NiwxNSBAQAogdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhUTUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKLSAgICBnZXREb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAg
aWYgKG1fc2hlZXQpCisgICAgICAgIGdldERvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3Io
KTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
CiB7CiAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgZ2V0
RG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgIGlmIChtX3NoZWV0KQorICAg
ICAgICBnZXREb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiB9CiAKIHZvaWQgSFRN
TFN0eWxlRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbmdlZCgpCkBAIC0zMzcsMjMgKzM4MCwzNyBA
QAogCSAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOwogICAgIH0KIAotICAgIGlmKG1fc2hlZXQp
Ci0JbV9zaGVldC0+ZGVyZWYoKTsKLSAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXRJbXBs
KHRoaXMpOwotICAgIG1fc2hlZXQtPnJlZigpOwotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKCB0
ZXh0LCAoZ2V0RG9jdW1lbnQoKS0+cGFyc2VNb2RlKCkgPT0gRG9jdW1lbnRJbXBsOjpTdHJpY3Qp
ICk7Ci0gICAgZ2V0RG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgIGlmICht
X3NoZWV0KSB7CisgICAgICAgIG1fc2hlZXQtPmRlcmVmKCk7CisgICAgICAgIG1fc2hlZXQgPSAw
OworICAgIH0KKyAgICAKKyAgICBtX2xvYWRpbmcgPSBmYWxzZTsKKyAgICBpZiAoKG1fdHlwZS5p
c0VtcHR5KCkgfHwgbV90eXBlID09ICJ0ZXh0L2NzcyIpIC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBv
ciBDU1MKKyAgICAgICAgICYmIChtX21lZGlhLmlzTnVsbCgpIHx8IG1fbWVkaWEuY29udGFpbnMo
InNjcmVlbiIpIHx8IG1fbWVkaWEuY29udGFpbnMoImFsbCIpIHx8IG1fbWVkaWEuY29udGFpbnMo
InByaW50IikpKSB7CisgICAgICAgIGdldERvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwor
ICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOworICAgICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxl
U2hlZXRJbXBsKHRoaXMpOworICAgICAgICBtX3NoZWV0LT5yZWYoKTsKKyAgICAgICAgbV9zaGVl
dC0+cGFyc2VTdHJpbmcoIHRleHQsIChnZXREb2N1bWVudCgpLT5wYXJzZU1vZGUoKSA9PSBEb2N1
bWVudEltcGw6OlN0cmljdCkgKTsKKyAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0KQorICAgICAgICBnZXREb2N1bWVudCgp
LT5zdHlsZXNoZWV0TG9hZGVkKCk7CiB9CiAKIGJvb2wgSFRNTFN0eWxlRWxlbWVudEltcGw6Omlz
TG9hZGluZygpIGNvbnN0CiB7CisgICAgaWYgKG1fbG9hZGluZykgcmV0dXJuIHRydWU7CiAgICAg
aWYoIW1fc2hlZXQpIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldEltcGwgKj4obV9zaGVldCktPmlzTG9hZGluZygpOwogfQogCiB2b2lkIEhUTUxTdHls
ZUVsZW1lbnRJbXBsOjpzaGVldExvYWRlZCgpCiB7Ci0gICAgZ2V0RG9jdW1lbnQoKS0+dXBkYXRl
U3R5bGVTZWxlY3RvcigpOworICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgICAgIGdldERvY3Vt
ZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRl
eDogaHRtbC9odG1sX2hlYWRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tk
ZWxpYnMva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzgKZGlmZiAtdSAtMyAtcjEuMzggaHRtbF9oZWFkaW1wbC5oCi0tLSBodG1sL2h0bWxfaGVhZGlt
cGwuaAk5IERlYyAyMDAyIDA3OjIxOjQ0IC0wMDAwCTEuMzgKKysrIGh0bWwvaHRtbF9oZWFkaW1w
bC5oCTExIEphbiAyMDAzIDE3OjI5OjM5IC0wMDAwCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDAyIEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTcx
LDcgKzcyLDggQEAKIHsKIHB1YmxpYzoKICAgICBIVE1MTGlua0VsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fY2FjaGVkU2hlZXQo
MCksIG1fc2hlZXQoMCksIG1fbG9hZGluZyhmYWxzZSkge30KKyAgICAgICAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKSwgbV9jYWNoZWRTaGVldCgwKSwgbV9zaGVldCgwKSwgbV9sb2FkaW5nKGZhbHNl
KSwKKwltX2FsdGVybmF0ZShmYWxzZSksIG1fZGlzYWJsZWRTdGF0ZSgwKSB7fQogCiAgICAgfkhU
TUxMaW5rRWxlbWVudEltcGwoKTsKIApAQCAtOTIsNyArOTQsMTAgQEAKICAgICBib29sIGlzTG9h
ZGluZygpIGNvbnN0OwogICAgIHZvaWQgc2hlZXRMb2FkZWQoKTsKIAotCisgICAgYm9vbCBpc0Fs
dGVybmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSAwICYmIG1fYWx0ZXJu
YXRlOyB9CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0
YXRlID09IDI7IH0KKyAgICBib29sIGlzRW5hYmxlZFZpYVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzYWJsZWRTdGF0ZSA9PSAxOyB9CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAga2h0bWw6OkNh
Y2hlZENTU1N0eWxlU2hlZXQgKm1fY2FjaGVkU2hlZXQ7CiAgICAgQ1NTU3R5bGVTaGVldEltcGwg
Km1fc2hlZXQ7CkBAIC0xMDAsNyArMTA1LDkgQEAKICAgICBET01TdHJpbmcgbV90eXBlOwogICAg
IFFTdHJpbmcgbV9tZWRpYTsKICAgICBET01TdHJpbmcgbV9yZWw7CisgICAgaW50IG1fZGlzYWJs
ZWRTdGF0ZTsgLy8gMD11bnNldChkZWZhdWx0KSwgMT1lbmFibGVkIHZpYSBzY3JpcHQsIDI9ZGlz
YWJsZWQKICAgICBib29sIG1fbG9hZGluZzsKKyAgICBib29sIG1fYWx0ZXJuYXRlOwogICAgIFFT
dHJpbmcgbV9kYXRhOyAvLyBuZWVkZWQgZm9yIHRlbXBvcmFyaWx5IHN0b3JpbmcgdGhlIGxvYWRl
ZCBzdHlsZSBzaGVldCBkYXRhCiB9OwogCkBAIC0xNDMsNyArMTUwLDcgQEAKIHsKIHB1YmxpYzoK
ICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpLCBtX3NoZWV0KDApIHt9CisgICAgICAgIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYyksIG1fc2hlZXQoMCksIG1fbG9hZGluZyhmYWxzZSkge30KICAgICB+SFRNTFN0eWxl
RWxlbWVudEltcGwoKTsKIAogICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKQEAgLTE2MSw2ICsx
NjgsOSBAQAogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVTaGVldEltcGwgKm1fc2hlZXQ7CisgICAg
Ym9vbCBtX2xvYWRpbmc7CisgICAgRE9NU3RyaW5nIG1fdHlwZTsKKyAgICBRU3RyaW5nIG1fbWVk
aWE7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2Zs
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZmxvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzE3CmRpZmYgLXUg
LTMgLXIxLjMxNyByZW5kZXJfZmxvdy5jcHAKLS0tIHJlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJ
OCBKYW4gMjAwMyAxOToxMDo0NCAtMDAwMAkxLjMxNworKysgcmVuZGVyaW5nL3JlbmRlcl9mbG93
LmNwcAkxMSBKYW4gMjAwMyAxNzoyOTo0NCAtMDAwMApAQCAtNzUsNyArNzUsNiBAQAogICAgIG1f
Y2hpbGRyZW5JbmxpbmUgPSB0cnVlOwogICAgIG1fcHJlID0gZmFsc2U7CiAgICAgZmlyc3RMaW5l
ID0gZmFsc2U7Ci0gICAgbV9ibG9ja0JpZGkgPSBmYWxzZTsKICAgICBtX2NsZWFyU3RhdHVzID0g
Q05PTkU7CiAKICAgICBzcGVjaWFsT2JqZWN0cyA9IDA7CkBAIC0zMjgsOSArMzI3LDcgQEAKIAog
Ly8gICAga2REZWJ1ZyggNjA0MCApIDw8ICJjaGlsZHJlbklubGluZSgpPSIgPDwgY2hpbGRyZW5J
bmxpbmUoKSA8PCBlbmRsOwogICAgIGlmKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgLy8g
IyMjIG1ha2UgYmlkaSByZXN1bWVhYmxlIHNvIHRoYXQgd2UgY2FuIGdldCByaWQgb2YgdGhpcyB1
Z2x5IGhhY2sKLSAgICAgICAgIGlmICghbV9ibG9ja0JpZGkpCi0gICAgICAgICAgICBsYXlvdXRJ
bmxpbmVDaGlsZHJlbiggcmVsYXlvdXRDaGlsZHJlbiApOworICAgICAgICBsYXlvdXRJbmxpbmVD
aGlsZHJlbiggcmVsYXlvdXRDaGlsZHJlbiApOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGxh
eW91dEJsb2NrQ2hpbGRyZW4oIHJlbGF5b3V0Q2hpbGRyZW4gKTsKQEAgLTEyODEsOSArMTI3OCw2
IEBACiAKIHZvaWQgUmVuZGVyRmxvdzo6Y2xvc2UoKQogewotICAgIC8vICMjIyBnZXQgcmlkIG9m
IG1lCi0gICAgbV9ibG9ja0JpZGkgPSBmYWxzZTsKLQogICAgIGlmKGxhc3RDaGlsZCgpICYmIGxh
c3RDaGlsZCgpLT5pc0Fub255bW91c0JveCgpKSB7CiAgICAgICAgIGxhc3RDaGlsZCgpLT5jbG9z
ZSgpOwogICAgIH0KQEAgLTEyOTMsMjEgKzEyODcsMTUgQEAKIAogdm9pZCBSZW5kZXJGbG93Ojph
ZGRDaGlsZChSZW5kZXJPYmplY3QgKm5ld0NoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxk
KQogewotI2lmZGVmIERFQlVHX0xBWU9VVAorLy8jaWZkZWYgREVCVUdfTEFZT1VUCiAgICAga2RE
ZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFJlbmRlckZsb3cpOjphZGRDaGlsZCgg
IiA8PCBuZXdDaGlsZC0+cmVuZGVyTmFtZSgpIDw8CiAgICAgICAgICAgICAgICAgICAgICAgICIs
ICIgPDwgKGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnJlbmRlck5hbWUoKSA6ICIwIikgPDwg
IiApIiA8PCBlbmRsOwogICAgIGtkRGVidWcoIDYwNDAgKSA8PCAiY3VycmVudCBoZWlnaHQgPSAi
IDw8IG1faGVpZ2h0IDw8IGVuZGw7Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgc2V0TGF5b3V0ZWQo
IGZhbHNlICk7CiAKICAgICBib29sIG1hZGVCb3hlc05vbklubGluZSA9IEZBTFNFOwogCi0gICAg
aWYgKCBuZXdDaGlsZC0+aXNQb3NpdGlvbmVkKCkgKSB7Ci0JbV9ibG9ja0JpZGkgPSBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKG1fYmxvY2tCaWRpKQotCSAgICBuZXdDaGlsZC0+c2V0QmxvY2tCaWRp
KCk7Ci0KICAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGU9MDsKICAgICBpZiAoICFpc0lubGlu
ZSgpICYmICggIWZpcnN0Q2hpbGQoKSB8fCBmaXJzdENoaWxkKCkgPT0gYmVmb3JlQ2hpbGQgKQog
CSYmICggcHNldWRvU3R5bGU9c3R5bGUoKS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJ
UlNUX0xFVFRFUikgKSApCkBAIC0xNTkzLDggKzE1ODEsNiBAQAogdm9pZCBSZW5kZXJGbG93Ojpw
cmludFRyZWUoaW50IGluZGVudCkgY29uc3QKIHsKICAgICBSZW5kZXJCb3g6OnByaW50VHJlZShp
bmRlbnQpOwotCi0vLyAgICAgS0hUTUxBc3NlcnQoIW1fYmxvY2tCaWRpKTsKIAogICAgIGlmKHNw
ZWNpYWxPYmplY3RzKQogICAgIHsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZmxvdy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJf
Zmxvdy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjczCmRpZmYgLXUgLTMgLXIxLjczIHJlbmRl
cl9mbG93LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfZmxvdy5oCTggSmFuIDIwMDMgMTk6MTA6NDQg
LTAwMDAJMS43MworKysgcmVuZGVyaW5nL3JlbmRlcl9mbG93LmgJMTEgSmFuIDIwMDMgMTc6Mjk6
NDQgLTAwMDAKQEAgLTU1LDcgKzU1LDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNGbG93KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZHJlbklubGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5JbmxpbmU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5k
ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxvY2tC
aWRpKCkgeyBtX2Jsb2NrQmlkaSA9IHRydWU7IH0KIAogICAgIHZvaWQgbWFrZUNoaWxkcmVuTm9u
SW5saW5lKFJlbmRlck9iamVjdCAqYm94MlN0YXJ0ID0gMCk7CiAKQEAgLTE2OSw3ICsxNjgsNiBA
QAogICAgIGJvb2wgbV9jaGlsZHJlbklubGluZSA6IDE7CiAgICAgYm9vbCBtX3ByZSAgICAgICAg
ICAgIDogMTsKICAgICBib29sIGZpcnN0TGluZSAgICAgICAgOiAxOyAvLyB1c2VkIGluIGlubGlu
ZSBsYXlvdXRpbmcKLSAgICBib29sIG1fYmxvY2tCaWRpIDogMTsKICAgICBFQ2xlYXIgbV9jbGVh
clN0YXR1cyAgOiAyOyAvLyB1c2VkIGR1cmluZyBsYXl1dGluZyBvZiBwYXJhZ3JhcGhzCiB9Owog
CkluZGV4OiB4bWwvZG9tX2RvY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2todG1sL3htbC9kb21fZG9jaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjEwCmRpZmYgLXUgLTMgLXIxLjIxMCBkb21fZG9jaW1wbC5jcHAKLS0tIHhtbC9kb21fZG9j
aW1wbC5jcHAJOCBKYW4gMjAwMyAxOToyOTo1NiAtMDAwMAkxLjIxMAorKysgeG1sL2RvbV9kb2Np
bXBsLmNwcAkxMSBKYW4gMjAwMyAxNzoyOTo1MSAtMDAwMApAQCAtMjg3LDYgKzI4Nyw3IEBACiAg
ICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5zZXRBdXRvRGVsZXRlKHRydWUpOwogCiAgICAgbV9p
blN0eWxlUmVjYWxjID0gZmFsc2U7CisgICAgbV9wZW5kaW5nU3R5bGVzaGVldHMgPSAwOwogfQog
CiBEb2N1bWVudEltcGw6On5Eb2N1bWVudEltcGwoKQpAQCAtMTc0NCw4ICsxNzQ1LDI0IEBACiAg
ICAgcmV0dXJuIG1fc3R5bGVTaGVldHM7CiB9CiAKKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3
aGVuZXZlciBhIHRvcC1sZXZlbCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLgordm9p
ZCBEb2N1bWVudEltcGw6OnN0eWxlc2hlZXRMb2FkZWQoKQoreworICAvLyBNYWtlIHN1cmUgd2Ug
a25ldyB0aGlzIHNoZWV0IHdhcyBwZW5kaW5nLCBhbmQgdGhhdCBvdXIgY291bnQgaXNuJ3Qgb3V0
IG9mIHN5bmMuCisgIGFzc2VydChtX3BlbmRpbmdTdHlsZXNoZWV0cyA+IDApOworCisgIG1fcGVu
ZGluZ1N0eWxlc2hlZXRzLS07CisgIHVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsgICAgCit9CisKIHZv
aWQgRG9jdW1lbnRJbXBsOjp1cGRhdGVTdHlsZVNlbGVjdG9yKCkKIHsKKyAgICBrZERlYnVnKCkg
PDwgIlBFTkRJTkciIDw8IG1fcGVuZGluZ1N0eWxlc2hlZXRzIDw8IGVuZGw7CisJCSAgICAKKyAg
ICAvLyBEb24ndCBib3RoZXIgdXBkYXRpbmcsIHNpbmNlIHdlIGhhdmVuJ3QgbG9hZGVkIGFsbCBv
dXIgc3R5bGUgaW5mbyB5ZXQuCisgICAgaWYgKG1fcGVuZGluZ1N0eWxlc2hlZXRzID4gMCkKKyAg
ICAgICAgcmV0dXJuOworCQogICAgIHJlY2FsY1N0eWxlU2VsZWN0b3IoKTsKICAgICByZWNhbGNT
dHlsZShGb3JjZSk7CiAjaWYgMApAQCAtMTgwNiwxMyArMTgyMywxNSBAQAogICAgICAgICBlbHNl
IGlmIChuLT5pZCgpID09IElEX0xJTksgfHwgbi0+aWQoKSA9PSBJRF9TVFlMRSkgewogICAgICAg
ICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKICAg
ICAgICAgICAgIFFTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1dGUoIEFUVFJfVElUTEUgKS5z
dHJpbmcoKTsKKwkgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CiAgICAgICAgICAg
ICBpZiAobi0+aWQoKSA9PSBJRF9MSU5LKSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVs
ZW1lbnQKICAgICAgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnRJbXBsKiBsID0gc3RhdGljX2Nh
c3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KG4pOwotICAgICAgICAgICAgICAgIC8vIGF3ZnVsIGhh
Y2sgdG8gZW5zdXJlIHRoYXQgd2UgaWdub3JlIHRoZSB0aXRsZSBhdHRyaWJ1dGUgZm9yIG5vbi1z
dHlsZXNoZWV0cwotICAgICAgICAgICAgICAgIC8vICMjIyBtYWtlIHRoYXQgbmljZXIhCi0gICAg
ICAgICAgICAgICAgaWYgKCEobC0+c2hlZXQoKSB8fCBsLT5pc0xvYWRpbmcoKSkpCisJCWlmIChs
LT5pc0xvYWRpbmcoKSB8fCBsLT5pc0Rpc2FibGVkKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghbC0+c2hlZXQoKSkKICAgICAgICAgICAgICAg
ICAgICAgdGl0bGUgPSBRU3RyaW5nOjpudWxsOworCQllbmFibGVkVmlhU2NyaXB0ID0gbC0+aXNF
bmFibGVkVmlhU2NyaXB0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4obik7CkluZGV4OiB4bWwvZG9tX2RvY2ltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC94bWwvZG9tX2RvY2ltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMDIKZGlmZiAtdSAtMyAtcjEuMTAyIGRvbV9kb2NpbXBsLmgK
LS0tIHhtbC9kb21fZG9jaW1wbC5oCTggSmFuIDIwMDMgMTg6MTc6MjUgLTAwMDAJMS4xMDIKKysr
IHhtbC9kb21fZG9jaW1wbC5oCTExIEphbiAyMDAzIDE3OjI5OjUyIC0wMDAwCkBAIC00LDYgKzQs
NyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDIgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTYwLDYgKzE2MSwyMyBAQAogICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmNyZWF0ZUhU
TUxFbGVtZW50ICggY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lICk7CiAKICAgICBraHRtbDo6Q1NT
U3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3Rvcjsg
fQorICAgIAorICAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBwZW5kaW5nIHNoZWV0IGNvdW50
IGFuZCB0aGVuIGNhbGxzIHVwZGF0ZVN0eWxlU2VsZWN0b3IuCisgICAgICovCisgICAgdm9pZCBz
dHlsZXNoZWV0TG9hZGVkKCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5z
IHRydWUgaWYgYWxsIHRvcC1sZXZlbCBzdHlsZXNoZWV0cyBoYXZlIGxvYWRlZCAoaW5jbHVkaW5n
CisgICAgICogYW55IEBpbXBvcnRzIHRoYXQgdGhleSBtYXkgYmUgbG9hZGluZykuCisgICAgICov
CisgICAgYm9vbCBoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSB7IHJldHVybiBtX3BlbmRpbmdTdHls
ZXNoZWV0cyA8PSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBJbmNyZW1lbnRzIHRoZSBudW1iZXIg
b2YgcGVuZGluZyBzaGVldHMuICBUaGUgPGxpbms+IGVsZW1lbnRzCisgICAgICogaW52b2tlIHRo
aXMgdG8gYWRkIHRoZW1zZWx2ZXMgdG8gdGhlIGxvYWRpbmcgbGlzdC4KKyAgICAgKi8KKyAgICB2
b2lkIGFkZFBlbmRpbmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5bGVzaGVldHMrKzsgfQogCiAgICAg
LyoqCiAgICAgICogQ2FsbGVkIHdoZW4gb25lIG9yIG1vcmUgc3R5bGVzaGVldHMgaW4gdGhlIGRv
Y3VtZW50IG1heSBoYXZlIGJlZW4gYWRkZWQsIHJlbW92ZWQgb3IgY2hhbmdlZC4KQEAgLTM5Miw2
ICs0MTAsMTMgQEAKICAgICBRU3RyaW5nIG1fdXNlcnNoZWV0OwogICAgIFFTdHJpbmcgbV9wcmlu
dFNoZWV0OwogICAgIFFTdHJpbmdMaXN0IG1fYXZhaWxhYmxlU2hlZXRzOworICAgIAorICAgIC8v
IFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxldmVsIHN0eWxlc2hl
ZXRzLiAgU2hlZXRzCisgICAgLy8gbG9hZGVkIHVzaW5nIHRoZSBAaW1wb3J0IGRpcmVjdGl2ZSBh
cmUgbm90IGluY2x1ZGVkIGluIHRoaXMgY291bnQuCisgICAgLy8gV2UgdXNlIHRoaXMgY291bnQg
b2YgcGVuZGluZyBzaGVldHMgdG8gZGV0ZWN0IHdoZW4gd2UgY2FuIGJlZ2luIGF0dGFjaGluZwor
ICAgIC8vIGVsZW1lbnRzLgorICAgIGludCBtX3BlbmRpbmdTdHlsZXNoZWV0czsKKwogCiAgICAg
Q1NTU3R5bGVTaGVldEltcGwgKm1fZWxlbVNoZWV0OwogCkluZGV4OiB4bWwvZG9tX25vZGVpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTkKZGlmZiAtdSAtMyAtcjEu
MTk5IGRvbV9ub2RlaW1wbC5jcHAKLS0tIHhtbC9kb21fbm9kZWltcGwuY3BwCTggSmFuIDIwMDMg
MTk6MjM6MDEgLTAwMDAJMS4xOTkKKysrIHhtbC9kb21fbm9kZWltcGwuY3BwCTExIEphbiAyMDAz
IDE3OjI5OjU1IC0wMDAwCkBAIC02Miw3ICs2Miw4IEBACiAgICAgICBtX2ZvY3VzZWQoIGZhbHNl
ICksCiAgICAgICBtX2FjdGl2ZSggZmFsc2UgKSwKICAgICAgIG1fc3R5bGVFbGVtZW50KCBmYWxz
ZSApLAotICAgICAgbV9pbXBsaWNpdCggZmFsc2UgKQorICAgICAgbV9pbXBsaWNpdCggZmFsc2Ug
KSwKKyAgICAgIG1fcmVuZGVyZXJOZWVkc0Nsb3NlKCBmYWxzZSApCiB7CiAgICAgaWYgKGRvY3Vt
ZW50KQogICAgICAgICBkb2N1bWVudC0+cmVmKCk7CkBAIC04ODgsMTIgKzg4OSwzMCBAQAogfQog
I2VuZGlmCiAKLXZvaWQgTm9kZUltcGw6OmF0dGFjaCgpCit2b2lkIE5vZGVJbXBsOjpjbG9zZVJl
bmRlcmVyKCkKIHsKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGNsb3NlIHRoZSByZW5k
ZXJlciwgZXZlbiBpZiBpdCBoYXNuJ3QgYmVlbgorICAgIC8vIGNyZWF0ZWQgeWV0LiBUaGlzIGhh
cHBlbnMgZXZlbiBtb3JlIGJlY2F1c2Ugb2YgdGhlIEZPVUMgZml4ZXMgd2UgZGlkCisgICAgLy8g
YXQgQXBwbGUsIHdoaWNoIHByZXZlbnQgcmVuZGVyZXJzIGZyb20gYmVpbmcgY3JlYXRlZCB1bnRp
bCB0aGUgc3R5bGVzaGVldHMKKyAgICAvLyBhcmUgYWxsIGxvYWRlZC4gSWYgdGhlIHJlbmRlcmVy
IGlzIG5vdCBoZXJlIHRvIGJlIGNsb3NlZCwgd2Ugc2V0IGEgZmxhZywKKyAgICAvLyB0aGVuIGNs
b3NlIGl0IGxhdGVyIHdoZW4gaXQncyBhdHRhY2hlZC4KKyAgICBhc3NlcnQoIW1fcmVuZGVyZXJO
ZWVkc0Nsb3NlKTsKKyAgICBpZiAobV9yZW5kZXIpCisgICAgICAgIG1fcmVuZGVyLT5jbG9zZSgp
OworICAgIGVsc2UKKyAgICAgICAgbV9yZW5kZXJlck5lZWRzQ2xvc2UgPSB0cnVlOworfQorCisg
dm9pZCBOb2RlSW1wbDo6YXR0YWNoKCkKKyB7CiAgICAgYXNzZXJ0KCFhdHRhY2hlZCgpKTsKLSAg
ICBhc3NlcnQoIW1fcmVuZGVyIHx8IChtX3JlbmRlci0+c3R5bGUoKSAmJiBtX3JlbmRlci0+cGFy
ZW50KCkpKTsKKwlhc3NlcnQoIW1fcmVuZGVyIHx8IChtX3JlbmRlci0+c3R5bGUoKSAmJiBtX3Jl
bmRlci0+cGFyZW50KCkpKTsKKyAgICBpZiAobV9yZW5kZXIgJiYgbV9yZW5kZXJlck5lZWRzQ2xv
c2UpIHsKKyAgICAgICAgbV9yZW5kZXItPmNsb3NlKCk7CisgICAgICAgIG1fcmVuZGVyZXJOZWVk
c0Nsb3NlID0gZmFsc2U7CisgICAgfQogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwotfQorIH0KIAog
dm9pZCBOb2RlSW1wbDo6ZGV0YWNoKCkKIHsKQEAgLTEwNDQsOCArMTA2MywxNCBAQAogCiAgICAg
ICAgIC8vIEFkZCBjaGlsZCB0byB0aGUgcmVuZGVyaW5nIHRyZWUKICAgICAgICAgLy8gIyMjIHNo
b3VsZCB3ZSBkZXRhY2goKSBpdCBmaXJzdCBpZiBpdCdzIGFscmVhZHkgYXR0YWNoZWQ/Ci0gICAg
ICAgIGlmIChhdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgaWYgKGF0
dGFjaGVkKCkgJiYgIWNoaWxkLT5hdHRhY2hlZCgpKSB7CiAgICAgICAgICAgICBjaGlsZC0+YXR0
YWNoKCk7CisJICAgIC8vIFRoaXMgaXMgZXh0cmVtZWx5IGltcG9ydGFudCwgYXMgb3RoZXJ3aXNl
IGEgZnJlc2ggbGF5b3V0CisgICAgICAgICAgICAvLyBpc24ndCBzY2hlZHVsZWQsIGFuZCB5b3Ug
ZW5kIHVwIHdpdGggc3RhbGUgZGF0YSAoZXNwZWNpYWxseQorICAgICAgICAgICAgLy8gd2l0aCBp
bmxpbmUgcnVucyBvZiB0ZXh0KS4gLWR3aAorICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJl
cigpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5yZW5kZXJlcigpLT5zZXRMYXlvdXRlZChmYWxz
ZSk7CisJfQogCiAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBtdXRhdGlvbiBldmVudHMKICAgICAg
ICAgZGlzcGF0Y2hDaGlsZEluc2VydGVkRXZlbnRzKGNoaWxkLGV4Y2VwdGlvbmNvZGUpOwpAQCAt
MTExMyw4ICsxMTM4LDE0IEBACiAKICAgICAgICAgLy8gQWRkIGNoaWxkIHRvIHRoZSByZW5kZXJp
bmcgdHJlZQogICAgICAgICAvLyAjIyMgc2hvdWxkIHdlIGRldGFjaCgpIGl0IGZpcnN0IGlmIGl0
J3MgYWxyZWFkeSBhdHRhY2hlZD8KLSAgICAgICAgaWYgKGF0dGFjaGVkKCkgJiYgIWNoaWxkLT5h
dHRhY2hlZCgpKQorICAgICAgICBpZiAoYXR0YWNoZWQoKSAmJiAhY2hpbGQtPmF0dGFjaGVkKCkp
IHsKICAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKwkgICAgLy8gVGhpcyBpcyBleHRyZW1l
bHkgaW1wb3J0YW50LCBhcyBvdGhlcndpc2UgYSBmcmVzaCBsYXlvdXQKKyAgICAgICAgICAgIC8v
IGlzbid0IHNjaGVkdWxlZCwgYW5kIHlvdSBlbmQgdXAgd2l0aCBzdGFsZSBkYXRhIChlc3BlY2lh
bGx5CisgICAgICAgICAgICAvLyB3aXRoIGlubGluZSBydW5zIG9mIHRleHQpLiAtZHdoCisgICAg
ICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgY2hpbGQtPnJl
bmRlcmVyKCktPnNldExheW91dGVkKGZhbHNlKTsKKwl9CiAKICAgICAgICAgLy8gRGlzcGF0Y2gg
dGhlIG11dGF0aW9uIGV2ZW50cwogICAgICAgICBkaXNwYXRjaENoaWxkSW5zZXJ0ZWRFdmVudHMo
Y2hpbGQsZXhjZXB0aW9uY29kZSk7CkBAIC0xMjYwLDggKzEyOTEsMTQgQEAKIAogICAgICAgICAv
LyBBZGQgY2hpbGQgdG8gdGhlIHJlbmRlcmluZyB0cmVlCiAgICAgICAgIC8vICMjIyBzaG91bGQg
d2UgZGV0YWNoKCkgaXQgZmlyc3QgaWYgaXQncyBhbHJlYWR5IGF0dGFjaGVkPwotICAgICAgICBp
ZiAoYXR0YWNoZWQoKSAmJiAhY2hpbGQtPmF0dGFjaGVkKCkpCisgICAgICAgIGlmIChhdHRhY2hl
ZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkgewogICAgICAgICAgICAgY2hpbGQtPmF0dGFjaCgp
OworCSAgICAvLyBUaGlzIGlzIGV4dHJlbWVseSBpbXBvcnRhbnQsIGFzIG90aGVyd2lzZSBhIGZy
ZXNoIGxheW91dAorICAgICAgICAgICAgLy8gaXNuJ3Qgc2NoZWR1bGVkLCBhbmQgeW91IGVuZCB1
cCB3aXRoIHN0YWxlIGRhdGEgKGVzcGVjaWFsbHkKKyAgICAgICAgICAgIC8vIHdpdGggaW5saW5l
IHJ1bnMgb2YgdGV4dCkuIC1kd2gKKyAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKSkK
KyAgICAgICAgICAgICAgICBjaGlsZC0+cmVuZGVyZXIoKS0+c2V0TGF5b3V0ZWQoZmFsc2UpOwor
CX0KIAogICAgICAgICAvLyBEaXNwYXRjaCB0aGUgbXV0YXRpb24gZXZlbnRzCiAgICAgICAgIGRp
c3BhdGNoQ2hpbGRJbnNlcnRlZEV2ZW50cyhjaGlsZCxleGNlcHRpb25jb2RlKTsKSW5kZXg6IHht
bC9kb21fbm9kZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9r
aHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQwCmRpZmYg
LXUgLTMgLXIxLjE0MCBkb21fbm9kZWltcGwuaAotLS0geG1sL2RvbV9ub2RlaW1wbC5oCTggSmFu
IDIwMDMgMTk6MjQ6MDAgLTAwMDAJMS4xNDAKKysrIHhtbC9kb21fbm9kZWltcGwuaAkxMSBKYW4g
MjAwMyAxNzoyOTo1NiAtMDAwMApAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICovCiAgICAgdmly
dHVhbCBib29sIGlzU2VsZWN0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9OwogCi0gICAg
Ym9vbCBpc0lubGluZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgUVN0cmluZyB0b0hUTUwoKSBjb25zdDsKICAgICBRU3RyaW5nIHJlY3Vy
c2l2ZV90b0hUTUwoYm9vbCBzdGFydCA9IGZhbHNlKSBjb25zdDsKIApAQCAtMjkwLDYgKzI5MCw4
IEBACiAgICAgICovCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCisgICAgdm9pZCBjbG9z
ZVJlbmRlcmVyKCk7CisgICAgCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBN
ZXRob2RzIGZvciBtYWludGFpbmluZyB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQgYmV0d2VlbiBo
aXN0b3J5IG5hdmlnYXRpb24KIApAQCAtMzcxLDggKzM3Myw5IEBACiAgICAgYm9vbCBtX2FjdGl2
ZSA6IDE7CiAgICAgYm9vbCBtX3N0eWxlRWxlbWVudCA6IDE7IC8vIGNvbnRhaW5zIHN0eWxlc2hl
ZXQgdGV4dAogICAgIGJvb2wgbV9pbXBsaWNpdCA6IDE7IC8vIGltcGxpY2l0ZWx5IGdlbmVyYXRl
ZCBieSB0aGUgcGFyc2VyCisgICAgYm9vbCBtX3JlbmRlcmVyTmVlZHNDbG9zZSA6IDE7CiAKLSAg
ICAvLyAyIGJpdHMgdW51c2VkCisgICAgLy8gMSBiaXRzIHVudXNlZAogfTsKIAogLy8gdGhpcyBp
cyB0aGUgZnVsbCBOb2RlIEltcGxlbWVudGF0aW9uIHdpdGggcGFyZW50cyBhbmQgY2hpbGRyZW4u
CkBAIC00MDEsNiArNDA0LDcgQEAKICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2Rl
SW1wbCAqbmV3Q2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7CisgICAKIAogICAgIHZpcnR1YWwgTm9kZUxpc3RJbXBsICpnZXRFbGVt
ZW50c0J5VGFnTmFtZU5TICggRE9NU3RyaW5nSW1wbCogbmFtZXNwYWNlVVJJLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCog
bG9jYWxOYW1lICk7CkluZGV4OiB4bWwveG1sX3Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjQwCmRpZmYgLXUgLTMgLXIxLjQwIHhtbF90b2tlbml6ZXIuY3Bw
Ci0tLSB4bWwveG1sX3Rva2VuaXplci5jcHAJMTEgRGVjIDIwMDIgMjE6MTE6NTMgLTAwMDAJMS40
MAorKysgeG1sL3htbF90b2tlbml6ZXIuY3BwCTExIEphbiAyMDAzIDE3OjI5OjU3IC0wMDAwCkBA
IC0yLDYgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAyIEFwcGxlIENvbXB1dGVyLCBJbmMuIAog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTMsOCArMTE0LDcgQEAKICAgICBpZiAobV9jdXJyZW50
Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCiAgICAgICAgIGV4aXRUZXh0KCk7
CiAgICAgaWYgKG1fY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSAhPSAwKSB7Ci0gICAgICAgIGlm
IChtX2N1cnJlbnROb2RlLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+
cmVuZGVyZXIoKS0+Y2xvc2UoKTsKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y2xvc2VSZW5kZXJl
cigpOwogICAgICAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgp
OwogICAgIH0KIC8vICMjIyAgZWxzZSBlcnJvcgo=

---MOQ1042307084c9962df4c61094927132c47efaa5d801--