<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>68717</bug_id>
          
          <creation_ts>2011-09-23 12:48:48 -0700</creation_ts>
          <short_desc>Make write barriers actually do something when enabled</short_desc>
          <delta_ts>2011-09-25 14:45:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68780</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>472418</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-23 12:48:48 -0700</bug_when>
    <thetext>Make write barriers actually do something when enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472425</commentid>
    <comment_count>1</comment_count>
      <attachid>108512</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-23 12:56:03 -0700</bug_when>
    <thetext>Created attachment 108512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472430</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-23 12:59:36 -0700</bug_when>
    <thetext>Attachment 108512 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/assembler/X86Assembler.h:1061:  movb_i8m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:1068:  movb_i8m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472495</commentid>
    <comment_count>3</comment_count>
      <attachid>108535</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-23 14:08:27 -0700</bug_when>
    <thetext>Created attachment 108535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472496</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-23 14:11:05 -0700</bug_when>
    <thetext>Attachment 108535 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/assembler/X86Assembler.h:1061:  movb_i8m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:1068:  movb_i8m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472503</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-23 14:34:09 -0700</bug_when>
    <thetext>r=me with those changes and a working build.

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1245
&gt; +    OwnPtr&lt;GPRTemporary&gt; temp1;
&gt; +    OwnPtr&lt;GPRTemporary&gt; temp2;
&gt; +    if (scratch1 == InvalidGPRReg) {
&gt; +        temp1 = adoptPtr(new GPRTemporary(this));
&gt; +        scratch1 = temp1-&gt;gpr();
&gt; +    }
&gt; +    if (scratch2 == InvalidGPRReg) {
&gt; +        temp2 = adoptPtr(new GPRTemporary(this));
&gt; +        scratch2 = temp2-&gt;gpr();
&gt; +    }

Using OwnPtr here is a bit awkward and inefficient. I think this would be better:
* Give GPRTemporary a default constructor that initializes m_jit to NULL and m_gpr to InvalidGPRReg.
* Change GPRTemporary&apos;s destructor to return early if m_jit is NULL.
* Give GPRTemporary an adopt function that takes &quot;GPRTemporary&amp; other&quot; as an argument, steals other&apos;s data, and null out other.

Then:
 1236    GPRTemporary temp1;
 1237    GPRTemporary temp2;
 1238    if (scratch1 == InvalidGPRReg) {
 1239        temp1.adopt(GPRTemporary(this));
 1240        scratch1 = temp1-&gt;gpr();
 1241    }
 1242    if (scratch2 == InvalidGPRReg) {
 1243        temp2.adopt(GPRTemporary(this));
 1244        scratch2 = temp2-&gt;gpr();
 1245    }

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1279
&gt; +    OwnPtr&lt;GPRTemporary&gt; temp;
&gt; +    if (scratch == InvalidGPRReg) {
&gt; +        temp = adoptPtr(new GPRTemporary(this));
&gt; +        scratch = temp-&gt;gpr();
&gt; +    }

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:27
&gt; +

No space here please.

&gt; Source/JavaScriptCore/heap/CardSet.h:44
&gt; +    bool cardMarkedForAtom(const void*);

&quot;isCardMarkedForAtom&quot;, please, since this is a boolean test and not a notification.

&gt; Source/JavaScriptCore/heap/CardSet.h:45
&gt; +    void markCardForAtom(const void*);

Soon you will need clearCardForAtom or clearAll, too, no?

&gt; Source/JavaScriptCore/heap/Heap.h:248
&gt; +        MarkedBlock::blockFor(owner)-&gt;setDirtyObject(owner);

Let&apos;s just call this &quot;writeBarrier&quot; too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472535</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-23 15:07:44 -0700</bug_when>
    <thetext>Committed r95865: &lt;http://trac.webkit.org/changeset/95865&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108512</attachid>
            <date>2011-09-23 12:56:03 -0700</date>
            <delta_ts>2011-09-23 14:08:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68717-20110923125602.patch</filename>
            <type>text/plain</type>
            <size>47695</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU4NTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDU2
MDdiNDhlNGM1ZDQ3ZTdlZTUxNjNlMjAyNzAyMWM4MGZlMzY0NDcuLmJiY2I1ZTZlNTFlYzJmOTZm
MzQyNDE4M2MwZGU2NmY0MWFkYmVjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDY0IEBACiAyMDExLTA5LTIzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
KyAgICAgICAgTWFrZSB3cml0ZSBiYXJyaWVycyBhY3R1YWxseSBkbyBzb21ldGhpbmcgd2hlbiBl
bmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODcxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGJhc2ljIGNhcmQgbWFya2luZyBzdHlsZSB3cml0ZSBiYXJyaWVyIHRvIEpTQyAoY3VycmVu
dGx5CisgICAgICAgIHR1cm5lZCBvZmYpLiAgVGhpcyByZXF1aXJlcyB0d28gc2NyYXRjaCByZWdp
c3RlcnMgaW4gdGhlIEpJVAorICAgICAgICBzbyB0aGVyZSB3YXMgc29tZSByZWdpc3RlciByZS1h
cnJhbmdpbmcgdG8gc2F0aXNmeSB0aGF0IHJlcXVpcmVtZW50LgorICAgICAgICBIYXBwaWx5IHRo
aXMgcHJvZHVjZWQgYSBtaW5vciBwZXJmIGJ1bXAgaW4gc3Vuc3BpZGVyICh+MC41JSkuCisKKyAg
ICAgICAgVHVybmluZyB0aGUgYmFycmllcnMgb24gY2F1c2VzIGFuIG92ZXJhbGwgcmVncmVzc2lv
biBvZiBhcm91bmQgMS41JQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzdG9yZTgpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZiX2k4bSk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
ZGVHZW5lcmF0b3I6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6Om1hcmtDZWxsQ2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBoZWFwL0Nh
cmRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhcmRTZXQ6OkNhcmRTZXQpOgorICAgICAg
ICAoSlNDOjo6OmNhcmRGb3JBdG9tKToKKyAgICAgICAgKEpTQzo6OjpjYXJkTWFya2VkRm9yQXRv
bSk6CisgICAgICAgIChKU0M6Ojo6bWFya0NhcmRGb3JBdG9tKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRy
ZXNzT2ZDYXJkRm9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyRmFzdENhc2Up
OgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OnNldERpcnR5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFkZHJlc3NP
ZkNhcmRGb3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcyk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2Nv
cGVkX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfc2NvcGVkX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFs
X3Zhcik6CisKKzIwMTEtMDktMjMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKwog
ICAgICAgICBBZGQgYSBidW5jaCBvZiB1bmhhbmRsZWQgbm9kZSB0eXBlcyB0byB0aGUgcHJvcGFn
YXRvcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3
MTYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggMDRjNTNm
YjBhNWY3MWIyMWFkYjNjYWMwNGY5YTYzMzA5ZTdjNWRmYy4uOWIwNWI2MWRlNGZhZDJjNTNlYzBi
MGM3MTVlNzAzYmE4YjhhNzI3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCkBAIC0yNDAsNyArMjQwLDYgQEAgX19aTjNKU0M0SGVhcDE3Z2xvYmFsT2JqZWN0Q291
bnRFdgogX19aTjNKU0M0SGVhcDE3aXNWYWxpZEFsbG9jYXRpb25FbQogX19aTjNKU0M0SGVhcDE5
c2V0QWN0aXZpdHlDYWxsYmFja0VOM1dURjEwUGFzc093blB0cklOU18xOEdDQWN0aXZpdHlDYWxs
YmFja0VFRQogX19aTjNKU0M0SGVhcDIwcHJvdGVjdGVkT2JqZWN0Q291bnRFdgotX19aTjNKU0M0
SGVhcDIwd3JpdGVCYXJyaWVyU2xvd0Nhc2VFUEtOU182SlNDZWxsRVBTMV8KIF9fWk4zSlNDNEhl
YXAyNXByb3RlY3RlZE9iamVjdFR5cGVDb3VudHNFdgogX19aTjNKU0M0SGVhcDI2cHJvdGVjdGVk
R2xvYmFsT2JqZWN0Q291bnRFdgogX19aTjNKU0M0SGVhcDI5cmVwb3J0RXh0cmFNZW1vcnlDb3N0
U2xvd0Nhc2VFbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNDhlZDBhNWU4YmQw
NzRlNWFkYTkzMGM3NzFhMjQ4Y2ZkZTU4NTc0Li42M2MzMTE3YzBiMjZjMGM1NDQ5MmE4MTYzYTgy
ZmI2ZjI5MGVjMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDI5LDYgKzQy
OSw3IEBACiAJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NDgyQjdBMTE2NkNERUEwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNw
cCAqLzsgfTsKIAkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZkludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzQ4MkUzNzExNkE2OTdCMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzRE
RTFEMDEyMEI4NzU2MDBENDBENUIgLyogQVJNdjdBc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0REUxQ0IxMjBCODZENjAwRDQwRDVC
IC8qIEFSTXY3QXNzZW1ibGVyLmNwcCAqLzsgfTsKKwkJQTc1MjFFMTMxNDI5MTY5QTAwM0M4RDBD
IC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NTIxRTEyMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJQTc1NzA2REUxMThBMkJDRjAwNTdGODhGIC8qIEpJ
VEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0
LmNwcCAqLzsgfTsKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4
RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLzsgfTsKQEAgLTEyMTMsNiArMTIxNCw3IEBACiAJCUE3NDgyQjdBMTE2NkNERUEw
MDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzQ4MkUzNzExNkE2OTdCMDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTc0REUxQ0IxMjBCODZENjAwRDQwRDVCIC8qIEFSTXY3QXNzZW1ibGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFSTXY3QXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1MjFFMTIxNDI5MTY5QTAwM0M4RDBDIC8qIENh
cmRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FyZFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklU
QXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFycmllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMywxMyArMTYzNSw5IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwICovLAogCQkJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oICovLAotCQkJCUE3MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9u
U3BhY2UuaCAqLywKIAkJCQlBNzA0NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNw
YWNlLmNwcCAqLywKLQkJCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlci5oICovLAotCQkJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVT
cGVjdHJ1bS5oICovLAotCQkJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5jcHAgKi8sCi0JCQkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmll
clN1cHBvcnQuaCAqLywKLQkJCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgKi8sCisJCQkJQTcwNDU2QUYxNDI3RkIxNTAwMzdEQTY4IC8qIEFsbG9j
YXRpb25TcGFjZS5oICovLAorCQkJCUE3NTIxRTEyMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0
LmggKi8sCiAJCQkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3Rz
LmNwcCAqLywKIAkJCQkxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9v
dHMuaCAqLywKIAkJCQkxNDJFMzEyQjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlLmggKi8sCkBA
IC0xNjY1LDcgKzE2NjMsMTIgQEAKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xv
dFZpc2l0b3IuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmgg
Ki8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICov
LAorCQkJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8s
CisJCQkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8sCiAJ
CQkJMTQyRTMxMzMxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCAqLywKKwkJCQkwRjI0MkRBNTEz
RjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLAorCQkJCTBGQzgx
NTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKKwkJCQkw
RkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovLAogCQkJ
KTsKIAkJCXBhdGggPSBoZWFwOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4MTgs
NiArMjgyMSw3IEBACiAJCQkJMUEwODI3N0ExNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFw
aG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDU2QjAxNDI3RkI5MTAwMzdEQTY4IC8qIEFs
bG9jYXRpb25TcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3
M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1MjFFMTMxNDI5
MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
CmluZGV4IGExYjcxZjkwMzU2ODNmOTVkYTMxNDhlMTg5YWNmMzZlZmM2NzdiNGQuLmY5YjgyZjRh
NmU2MGNhY2ZhYmI1NzU3MzA4MzFmY2JmMWI4YjhhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKQEAg
LTUxMCw2ICs1MTAsMTggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92
bF9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBzdG9yZTgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKC0xMjggPD0gaW1tLm1fdmFsdWUgJiYgaW1tLm1fdmFs
dWUgPCAxMjgpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX2k4bShpbW0ubV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTgoVHJ1
c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBBU1NFUlQo
LTEyOCA8PSBpbW0ubV92YWx1ZSAmJiBpbW0ubV92YWx1ZSA8IDEyOCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmJfaThtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CiAKIAogICAgIC8vIEZsb2F0
aW5nLXBvaW50IG9wZXJhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oCmluZGV4IDE4YWJiMDdhOTNlMGE3MjEzMmJjZDAyMWFmZjA2ZTQ4ZTc0
YWYzYmMuLjM0ZDE4YWQwNDIwNzEyZGMwMzRiMTRjZmRkMmZmNmNhZmJmOTVjZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaApAQCAtMTQ1LDYg
KzE0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX01PVl9FQVhJdiAgICAgICAgICAgICAgICAg
ICAgPSAweEI4LAogICAgICAgICBPUF9HUk9VUDJfRXZJYiAgICAgICAgICAgICAgICAgID0gMHhD
MSwKICAgICAgICAgT1BfUkVUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4QzMsCisgICAg
ICAgIE9QX0dST1VQMTFfRXZJYiAgICAgICAgICAgICAgICAgPSAweEM2LAogICAgICAgICBPUF9H
Uk9VUDExX0V2SXogICAgICAgICAgICAgICAgID0gMHhDNywKICAgICAgICAgT1BfSU5UMyAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4Q0MsCiAgICAgICAgIE9QX0dST1VQMl9FdjEgICAgICAg
ICAgICAgICAgICAgPSAweEQxLApAQCAtMTA1Niw2ICsxMDU3LDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMTFfRXZJeiwgR1JPVVAxMV9NT1YsIGJh
c2UsIG9mZnNldCk7CiAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAg
fQorICAgIAorICAgIHZvaWQgbW92Yl9pOG0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKC0xMjggPD0gaW1tICYmIGltbSA8IDEyOCk7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDExX0V2SWIsIEdST1VQMTFf
TU9WLCBiYXNlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7
CisgICAgfQorCisgICAgdm9pZCBtb3ZiX2k4bShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgtMTI4IDw9IGltbSAmJiBpbW0gPCAxMjgpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAxMV9FdkliLCBHUk9VUDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQogCiAg
ICAgdm9pZCBtb3ZsX0VBWG0oY29uc3Qgdm9pZCogYWRkcikKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAppbmRleCBkNmU1YmIw
OWZmZTBhYTJiZTdmYjJiZGI1NTAyYzVjZjI4YmVhMmM4Li5iMTAxY2UzYzhkMmVhMzY0ODAzZWJm
MWE5ZmQzNGVhY2RkMzU5YjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5jcHAKQEAgLTQyOSw2ICs0MjksMTYgQEAgYm9vbCBKSVRDb2Rl
R2VuZXJhdG9yOjppc0tub3duQ2VsbChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHJldHVybiBt
X2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIo
KV0uaXNKU0NlbGwoKTsKIH0KIAorYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90Q2Vs
bChOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgp
W25vZGVJbmRleF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUu
dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAh
dmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuICEoaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNVbmtub3duSlMoKSk7
Cit9CisKIGJvb2wgSklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk5vdEludGVnZXIoTm9kZUluZGV4
IG5vZGVJbmRleCkKIHsKICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OwpAQCAtMTE2NiwyNSArMTE3NiwxMjQgQEAgSklUQ29tcGlsZXI6OkNhbGwgSklUQ29kZUdlbmVy
YXRvcjo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEcKICAgICBy
ZXR1cm4gZnVuY3Rpb25DYWxsOwogfQogCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFy
cmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoLCBX
cml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCit2b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRl
QmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCit7CisgICAg
VU5VU0VEX1BBUkFNKGppdCk7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaDEpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgVU5VU0VE
X1BBUkFNKHVzZUtpbmQpOworICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7CisgICAgQVNT
RVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKyAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIp
OworCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVy
OjplbWl0Q291bnQoaml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VL
aW5kKSk7CisjZW5kaWYKKyAgICBtYXJrQ2VsbENhcmQoaml0LCBvd25lciwgc2NyYXRjaDEsIHNj
cmF0Y2gyKTsKK30KKwordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjptYXJrQ2VsbENhcmQoTWFjcm9B
c3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3Jh
dGNoMikKIHsKICAgICBVTlVTRURfUEFSQU0oaml0KTsKICAgICBVTlVTRURfUEFSQU0ob3duZXIp
OworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gy
KTsKKyAgICAKKyNpZiBFTkFCTEUoR0dDKQorICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMSk7
CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oTWFya2Vk
QmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMSk7CisgICAgaml0Lm1vdmUob3duZXIsIHNjcmF0
Y2gyKTsKKyAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
TWFya2VkQmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMik7CisgICAgaml0LnJzaGlmdDMyKFRy
dXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6bG9nMkNhcmRTaXplKSwgc2NyYXRjaDIpOworICAgIGpp
dC5zdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0
Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zm
c2V0T2ZDYXJkcygpKSk7CisjZW5kaWYKK30KKwordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0
ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1
ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BS
UmVnIHNjcmF0Y2gyKQoreworICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlR1BSKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoMik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworCisgICAgaWYg
KGlzS25vd25Ob3RDZWxsKHZhbHVlSW5kZXgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChq
aXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKEdHQykKKyAgICBKSVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwor
ICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1
ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24o
bV9qaXQuZ3JhcGgoKVt2YWx1ZUluZGV4XSkpKSB7CisgICAgICAgIGhhZENlbGxDaGVjayA9IHRy
dWU7CisgICAgICAgIHJoc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICB9
CisKKyAgICBPd25QdHI8R1BSVGVtcG9yYXJ5PiB0ZW1wMTsKKyAgICBPd25QdHI8R1BSVGVtcG9y
YXJ5PiB0ZW1wMjsKKyAgICBpZiAoc2NyYXRjaDEgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAg
ICB0ZW1wMSA9IGFkb3B0UHRyKG5ldyBHUFJUZW1wb3JhcnkodGhpcykpOworICAgICAgICBzY3Jh
dGNoMSA9IHRlbXAxLT5ncHIoKTsKKyAgICB9CisgICAgaWYgKHNjcmF0Y2gyID09IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgdGVtcDIgPSBhZG9wdFB0cihuZXcgR1BSVGVtcG9yYXJ5KHRoaXMp
KTsKKyAgICAgICAgc2NyYXRjaDIgPSB0ZW1wMi0+Z3ByKCk7CisgICAgfQorCisgICAgbWFya0Nl
bGxDYXJkKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBpZiAoaGFk
Q2VsbENoZWNrKQorICAgICAgICByaHNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyNlbmRpZgorfQor
Cit2b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJS
ZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVz
ZUtpbmQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CiAgICAg
VU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoKTsKKwor
ICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOwogCiAj
aWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIEpJVENvbXBpbGVyOjplbWl0
Q291bnQoaml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7
CiAjZW5kaWYKKworI2lmIEVOQUJMRShHR0MpCisgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90
Q2VsbDsKKyAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOworICAgIGlmICghaXNLbm93bkNl
bGwodmFsdWVJbmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVk
aWN0aW9uKG1faml0LmdyYXBoKClbdmFsdWVJbmRleF0pKSkgeworICAgICAgICBoYWRDZWxsQ2hl
Y2sgPSB0cnVlOworICAgICAgICByaHNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CisgICAgfQorICAgIAorICAgIE93blB0cjxHUFJUZW1wb3Jhcnk+IHRlbXA7CisgICAgaWYgKHNj
cmF0Y2ggPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICB0ZW1wID0gYWRvcHRQdHIobmV3IEdQ
UlRlbXBvcmFyeSh0aGlzKSk7CisgICAgICAgIHNjcmF0Y2ggPSB0ZW1wLT5ncHIoKTsKKyAgICB9
CisKKyAgICB1aW50OF90KiBjYXJkQWRkcmVzcyA9IEhlYXA6OmFkZHJlc3NPZkNhcmRGb3Iob3du
ZXIpOworICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoY2FyZEFkZHJl
c3MpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5zdG9yZTgoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MigxKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaCkpOworCisgICAgaWYgKGhhZENlbGxD
aGVjaykKKyAgICAgICAgcmhzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisjZW5kaWYKIH0KIAotdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcg
dmFsdWVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
dXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQordm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFs
dWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aFRhcmdldCkKIHsKKyAgICAKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVj
dHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1f
aml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVU
b0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KC0xKSkpOwotICAgIAotICAgIHdyaXRlQmFycmllcihtX2ppdCwgYmFzZUdQUiwgc2NyYXRj
aEdQUiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworCisgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcywgc2NyYXRjaEdQUik7CiAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRj
aEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9q
aXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCmluZGV4IDQ0YTM2ZTgxNjRlNWQ1OWQxMGU1OGFlZGEzZjMy
MWM2ODAzNWJiZTcuLjUwMzI4OWQzNmE1ZWRjODg4YjlkYTg2ZmRlZWMzZTc4ZjgzZTZiMWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCkBA
IC0xODEsNyArMTgxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGlu
Zm8uZ3ByKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fz
c2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIFdyaXRlQmFycmll
clVzZUtpbmQpOworICAgIHN0YXRpYyB2b2lkIG1hcmtDZWxsQ2FyZChNYWNyb0Fzc2VtYmxlciYs
IEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIp
OworICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBv
d25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFy
cmllclVzZUtpbmQpOworCisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBH
UFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5k
LCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIg
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBH
UFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5k
LCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKIAogICAgIHN0YXRpYyBHUFJS
ZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BS
UmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlk
R1BSUmVnKQogICAgIHsKQEAgLTQzMyw2ICs0MzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBp
c0tub3duTm90TnVtYmVyKE5vZGVJbmRleCk7CiAKICAgICBib29sIGlzS25vd25Cb29sZWFuKE5v
ZGVJbmRleCk7CisKKyAgICBib29sIGlzS25vd25Ob3RDZWxsKE5vZGVJbmRleCk7CiAgICAgCiAg
ICAgLy8gQ2hlY2tzL2FjY2Vzc29ycyBmb3IgY29uc3RhbnQgdmFsdWVzLgogICAgIGJvb2wgaXND
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0NvbnN0YW50KG5v
ZGVJbmRleCk7IH0KQEAgLTYxOCw3ICs2MjQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBub25T
cGVjdWxhdGl2ZUluc3RhbmNlT2YoTm9kZSYpOwogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fj
aGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKLSAg
ICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BS
UmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAg
dm9pZCBjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIE5vZGVJbmRleCB2
YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpKTsKICAgICB2b2lkIGNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVn
IHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7
CiAgICAgCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9k
ZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKaW5kZXggM2Y0ZjBmZmNhN2MyMjg1ZDA5ZGViNWVkMTZjZmFk
MjAzNzZhZmEyNi4uNjk1YzY1MmMxZWFlOGRjMDViMWI2MzM2MWJiMjFhZjc4ZGNkNTc3YSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCkBAIC01MTcsOSArNTE3LDE1
IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyCiAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQp
CiAgICAgICAgICAgICAgICAgICAgIHRlc3RQcm90b3R5cGUoc3R1YkppdCwgc2NyYXRjaEdQUiwg
KCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIo
c3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOwotICAgICAgICAgICAgCisKKyNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCisgICAgICAgICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3Jp
dGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBKSVRDb2RlR2VuZXJhdG9yOjpzZWxlY3RT
Y3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0
dWJKaXQucHVzaChzY3JhdGNoMik7CisgICAgICAgICAgICBKSVRDb2RlR2VuZXJhdG9yOjp3cml0
ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDIsIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2gy
KTsKKyNlbmRpZgorCiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAppbmRleCAxZmFiZDcxYTM0NmEwNmRkYzhhNGY2OWJmZjA3N2U2ZTYzOTdkMWQ1Li44
ZmIzNDk0ZWMyMjBlZjE3MjhjNTI3NTM2MjZjNDY0OWRkYTQ2YjE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMjQsNiArMjQsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZl
SklULmgiCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTE0MDQsOCArMTQwNSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IHdyaXRlQmFycmllcihtX2ppdCwgYmFzZVJlZywgc2NyYXRjaFJlZywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MpOworCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5n
cHIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0
Y2hSZWcpOwogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRo
YXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0
aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUg
YXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KQEAgLTE0NjQsNyArMTQ2NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3By
KCk7CiAKLSAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0LCBiYXNlUmVnLCBzY3JhdGNoUmVnLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNl
LmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogCiAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFn
ZS4KICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwpAQCAtMTc5NSw3ICsx
Nzk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjb3BlQ2hhaW4uZ3ByKCksIEpT
VmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBub2RlLnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICB3cml0ZUJh
cnJpZXIobV9qaXQsIHNjb3BlQ2hhaW4uZ3ByKCksIHNjcmF0Y2hHUFIsIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzKTsKKyAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlQ2hhaW4uZ3ByKCks
IHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vz
cywgc2NyYXRjaEdQUik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEJ5SWQ6
IHsKQEAgLTE5MDEsNyArMTkwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgdmFsdWUudXNlKCk7CiAKLSAg
ICAgICAgY2FjaGVkUHV0QnlJZChiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CisgICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFz
ZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmll
ck51bWJlcigpLCBOb3REaXJlY3QpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTkxOSw3ICsxOTIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKIAotICAgICAg
ICBjYWNoZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSLCBub2RlLmlkZW50
aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlR1BSLCB2
YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVy
KCksIERpcmVjdCk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTk0Niw3ICsxOTQ3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0UmVnKTsKIAotICAgICAgICB3cml0ZUJhcnJp
ZXIobV9qaXQsIGdsb2JhbE9iamVjdFJlZywgc2NyYXRjaFJlZywgV3JpdGVCYXJyaWVyRm9yVmFy
aWFibGVBY2Nlc3MpOworICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuY29kZUJsb2NrKCktPmds
b2JhbE9iamVjdCgpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0UmVnLCBKU1ZhcmlhYmxlT2JqZWN0Ojpv
ZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvckdsb2JhbFZhcihzY3JhdGNoUmVn
LCBub2RlLnZhck51bWJlcigpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9DYXJkU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjliNjllYmRmZDNkNzUwNTdmZmUzOTk2YzY1ZjMzNjViNmVkNmI4YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaApAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYXJkU2V0X2gKKyNkZWZpbmUgQ2FyZFNl
dF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHNpemVfdCBjYXJkU2l6ZSwg
c2l6ZV90IGJsb2NrU2l6ZT4gY2xhc3MgQ2FyZFNldCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ2FyZFNldCk7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjYXJkQ291bnQgPSAoYmxvY2tT
aXplICsgY2FyZFNpemUgLSAxKSAvIGNhcmRTaXplOworCitwdWJsaWM6CisgICAgQ2FyZFNldCgp
CisgICAgeworICAgICAgICBtZW1zZXQobV9jYXJkcywgMCwgY2FyZENvdW50KTsKKyAgICB9CisK
KyAgICBib29sIGNhcmRNYXJrZWRGb3JBdG9tKGNvbnN0IHZvaWQqKTsKKyAgICB2b2lkIG1hcmtD
YXJkRm9yQXRvbShjb25zdCB2b2lkKik7CisgICAgdWludDhfdCYgY2FyZEZvckF0b20oY29uc3Qg
dm9pZCopOworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbV9jYXJkc1tjYXJkQ291bnRdOworICAg
IENPTVBJTEVfQVNTRVJUKCEoY2FyZFNpemUgJiAoY2FyZFNpemUgLSAxKSksIGNhcmRTZXRfY2Fy
ZFNpemVfaXNfcG93ZXJfb2ZfdHdvKTsKKyAgICBDT01QSUxFX0FTU0VSVCghKGNhcmRDb3VudCAm
IChjYXJkQ291bnQgLSAxKSksIGNhcmRTZXRfY2FyZENvdW50X2lzX3Bvd2VyX29mX3R3byk7Cit9
OworCit0ZW1wbGF0ZSA8c2l6ZV90IGNhcmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiB1aW50OF90
JiBDYXJkU2V0PGNhcmRTaXplLCBibG9ja1NpemU+OjpjYXJkRm9yQXRvbShjb25zdCB2b2lkKiBw
dHIpCit7CisgICAgQVNTRVJUKHB0ciA+IHRoaXMgJiYgcHRyIDwgKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgY2FyZENvdW50ICogY2FyZFNpemUpKTsKKyAgICB1aW50cHRyX3QgY2Fy
ZCA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSAvIGNhcmRTaXplKSAlIGNhcmRD
b3VudDsKKyAgICByZXR1cm4gbV9jYXJkc1tjYXJkXTsKK30KKwordGVtcGxhdGUgPHNpemVfdCBj
YXJkU2l6ZSwgc2l6ZV90IGJsb2NrU2l6ZT4gYm9vbCBDYXJkU2V0PGNhcmRTaXplLCBibG9ja1Np
emU+OjpjYXJkTWFya2VkRm9yQXRvbShjb25zdCB2b2lkKiBwdHIpCit7CisgICAgcmV0dXJuIGNh
cmRGb3JBdG9tKHB0cik7Cit9CisKK3RlbXBsYXRlIDxzaXplX3QgY2FyZFNpemUsIHNpemVfdCBi
bG9ja1NpemU+IHZvaWQgQ2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXplPjo6bWFya0NhcmRGb3JB
dG9tKGNvbnN0IHZvaWQqIHB0cikKK3sKKyAgICBjYXJkRm9yQXRvbShwdHIpID0gMTsKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggZjZlMWQ1ZTUz
ODJlMDM0MzIyZjgzMWU1OGVkMTA1MzA3ZGIxNTFiZC4uODg0NWRiMWE1OTJmOWM2NmYyYjcwMWUz
NzQ4MWM0YTc1NTU4YmM1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTY4
MiwxNiArNjgyLDQgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2NrcygpCiAgICAgfQogfQog
Ci0jaWYgRU5BQkxFKEdHQykKLXZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyU2xvd0Nhc2UoY29uc3Qg
SlNDZWxsKiBvd25lciwgSlNDZWxsKiBjZWxsKQotewotfQotCi0jZWxzZQotCi12b2lkIEhlYXA6
OndyaXRlQmFycmllclNsb3dDYXNlKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopCi17Ci19Ci0jZW5k
aWYKLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXgg
ZWZlNWY0NjljMDY0N2UyNTI1YTQxNDA3YjY2NGY4MWQ5NzVjYzFjZi4uYTcxZjlmMmRhNzY0NDNk
YTAxNjZiZjliZmRjZTAxN2RhN2YzZDNlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApA
QCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgdm9pZCB3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lk
IHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKKyAgICAgICAgc3RhdGljIHVp
bnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKik7CiAKICAgICAgICAgSGVhcChKU0dsb2Jh
bERhdGEqLCBIZWFwU2l6ZSk7CiAgICAgICAgIH5IZWFwKCk7CkBAIC0xNTcsOCArMTU4LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJGaWxlJiByZWdpc3RlckZpbGUoKTsK
IAotICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXJTbG93Q2FzZShjb25zdCBKU0NlbGwq
LCBKU0NlbGwqKTsKLQogICAgICAgICB2b2lkIHdhaXRGb3JSZWxhdGl2ZVRpbWVXaGlsZUhvbGRp
bmdMb2NrKGRvdWJsZSByZWxhdGl2ZSk7CiAgICAgICAgIHZvaWQgd2FpdEZvclJlbGF0aXZlVGlt
ZShkb3VibGUgcmVsYXRpdmUpOwogICAgICAgICB2b2lkIGJsb2NrRnJlZWluZ1RocmVhZE1haW4o
KTsKQEAgLTIzOSwxMSArMjM4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogI2lmIEVO
QUJMRShHR0MpCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyRmFzdENhc2UoY29u
c3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSB1aW50OF90KiBIZWFw
OjphZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIGlmIChNYXJr
ZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpLT5pbk5ld1NwYWNlKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHdyaXRlQmFycmllclNsb3dDYXNlKG93bmVyLCBjZWxsKTsKKyAgICAgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+YWRkcmVzc09mQ2FyZEZvcihjZWxs
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJGYXN0Q2FzZShj
b25zdCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqKQorICAgIHsKKyAgICAgICAgTWFya2VkQmxvY2s6
OmJsb2NrRm9yKG93bmVyKS0+c2V0RGlydHlPYmplY3Qob3duZXIpOwogICAgIH0KIAogICAgIGlu
bGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIG93bmVyLCBKU0NlbGwq
IGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAppbmRleCA0NDgz
ZWU3ZmE5ZDdmYjgzNWJlOWI2YmNhMzY1MGRkN2E2ZDFjMmFmLi4xYWU1ODdiZDZjNTQyZjUzZDQy
MDkzZDY2N2MyMTYzZDk4NmQxMmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgKQEAgLTIyLDYgKzIyLDggQEAKICNpZm5kZWYgTWFya2VkQmxvY2tfaAogI2RlZmlu
ZSBNYXJrZWRCbG9ja19oCiAKKyNpbmNsdWRlICJDYXJkU2V0LmgiCisKICNpbmNsdWRlIDx3dGYv
Qml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgpAQCAtNjUsNyArNjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIC8vIG9iamVjdCB0aGUgaGVhcCB3aWxsIGNvbW1vbmx5IGFsbG9jYXRlIGlzIGZvdXIg
d29yZHMuCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbVNpemUgPSA0ICogc2l6ZW9m
KHZvaWQqKTsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja1NpemUgPSAxNiAqIEtC
OwotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21zUGVyQmxvY2sgPSBibG9ja1NpemUg
LyBhdG9tU2l6ZTsgLy8gfjAuNCUgb3ZlcmhlYWQgZm9yIG1hcmsgYml0cy4KKyAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9ja1Np
emUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KKworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGF0b21zUGVyQmxvY2sgPSBibG9ja1NpemUgLyBhdG9tU2l6ZTsgLy8gfjAuNCUgb3ZlcmhlYWQK
KyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBieXRlc1BlckNhcmQgPSA1MTI7IC8vIDEuNiUg
b3ZlcmhlYWQKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBsb2cyQ2FyZFNpemUgPSA5OwogCiAg
ICAgICAgIHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAgICAgICAgICBGcmVlQ2VsbCogbmV4dDsKQEAg
LTEzMiwxMSArMTM4LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHRlc3RBbmRT
ZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBib29sIHRlc3RBbmRDbGVhck1hcmtlZChj
b25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKKyAgICAg
ICAgCisjaWYgRU5BQkxFKEdHQykKKyAgICAgICAgdm9pZCBzZXREaXJ0eU9iamVjdChjb25zdCB2
b2lkKiBhdG9tKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NhcmRzLm1hcmtDYXJkRm9yQXRv
bShhdG9tKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3Io
Y29uc3Qgdm9pZCogYXRvbSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtX2NhcmRz
LmNhcmRGb3JBdG9tKGF0b20pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGlubGluZSBz
aXplX3Qgb2Zmc2V0T2ZDYXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTWFya2VkQmxvY2ssIG1fY2FyZHMpOworICAgICAgICB9CisjZW5kaWYKIAog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2VsbChGdW5j
dG9yJik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2Nr
TWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2Yg
dHdvLgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21NYXNrID0gfihhdG9tU2l6ZSAt
IDEpOyAvLyBhdG9tU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogICAgICAgICAKICAgICAg
ICAgZW51bSBEZXN0cnVjdG9yU3RhdGUgeyBGcmVlQ2VsbHNEb250SGF2ZU9iamVjdHMsIFNvbWVG
cmVlQ2VsbHNTdGlsbEhhdmVPYmplY3RzLCBBbGxGcmVlQ2VsbHNIYXZlT2JqZWN0cyB9OwpAQCAt
MTY5LDcgKzE5MSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERlc3RydWN0b3JTdGF0ZT4obV9kZXN0cnVjdG9yU3RhdGUpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCisjaWYgRU5BQkxFKEdHQykKKyAgICAgICAgQ2FyZFNldDxi
eXRlc1BlckNhcmQsIGJsb2NrU2l6ZT4gbV9jYXJkczsKKyNlbmRpZgorCiAgICAgICAgIHNpemVf
dCBtX2VuZEF0b207IC8vIFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5cyB0ZXN0IGZvciA8IG1f
ZW5kQXRvbS4KICAgICAgICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxsOwogICAgICAgICBXVEY6OkJp
dG1hcDxhdG9tc1BlckJsb2NrPiBtX21hcmtzOwpAQCAtMzAwLDcgKzMyNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgZnVuY3RvcihyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZh
dG9tcygpW2ldKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGQ0ZDg0Zjc2
MDZkMDZlYzY3ODIwZjdkMGZiMGI4ZTZlMjRiMzY3MGIuLmE4MjRmM2U0MzVkZTdkZDM0YjAyODBl
ZDJmOTdkNjU5ZGJiNjg2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMzE2LDcgKzMx
NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHRlc3RQcm90b3R5cGUoSlNW
YWx1ZSwgSnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CiAKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVy
VXNlS2luZCk7CisgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMgfTsKKyAgICAgICAgLy8gdmFsdWUg
cmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdp
c3RlcnMKKyAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2Yg
dGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoUmVn
aXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3JhdGNoLCBS
ZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5k
KTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVy
SUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJy
aWVyVXNlS2luZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBl
bmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0
dXJlVHlwZSwgdm9pZCogdnRhYmxlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9y
YWdlUHRyKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbWl0QWxsb2NhdGVK
U0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBz
dG9yYWdlUHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKaW5kZXggZWI1MDYwOGFmMmQwZjdlZDFkZmNiNGI4MDQ2NDMyZTQ5OGEzOGMzNS4u
ZDI3MmVmZjVkYzU1NDQ2OTVhZDkzYzlhMmYyMWE4YzEzYzEyMzcyYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTIwNywyMCArMjA3
LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMyk7CisgICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICBK
dW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRk
cmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0
LCB0aGlzKTsKIAogICAgIGVuZC5saW5rKHRoaXMpOworCisgICAgZW1pdFdyaXRlQmFycmllcihy
ZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNDM5LDggKzQzOSw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIEp1
bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlh
dGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVy
KHJlZ1QwLCByZWdUMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotCiAgICAgQkVH
SU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwogCiAgICAgTGFiZWwg
aG90UGF0aEJlZ2luKHRoaXMpOwpAQCAtNDUzLDExICs0NTEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwog
ICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgc3Ry
dWN0dXJlVG9Db21wYXJlKSwgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlKTsKIAotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkp
LCByZWdUMCk7Ci0gICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDAsIHBhdGNoUHV0QnlJZERl
ZmF1bHRPZmZzZXQpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVnVDIpOworICAgIERhdGFMYWJlbDMyIGRpc3BsYWNl
bWVudExhYmVsID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJV
UFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwogCisgICAgZW1pdFdyaXRlQmFycmllcihy
ZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworCiAgICAgQVNTRVJUX0pJVF9PRkZTRVRfVU5VU0VE
KGRpc3BsYWNlbWVudExhYmVsLCBkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRpc3Bs
YWNlbWVudExhYmVsKSwgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwogfQog
CkBAIC01MzcsOCArNTM3LDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFu
c2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlCiAKICAgICAgICAg
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogICAgIH0KLSAgICAKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MpOworCisgICAgLy8gUGxhbnRpbmcgdGhlIG5ldyBzdHJ1Y3R1cmUgdHJpZ2dlcnMgdGhl
IHdyaXRlIGJhcnJpZXIgc28gd2UgbmVlZAorICAgIC8vIGFuIHVuY29uZGl0aW9uYWwgYmFycmll
ciBoZXJlLgorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMs
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
KTsKIAogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKSwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgIGNvbXBpbGVQdXREaXJlY3RP
ZmZzZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwpAQCAtOTg5LDcgKzk5MSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKFNj
b3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlZ1QxKTsKIAotICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDEsIHJlZ1QyLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcyk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMSwgcmVnVDAsIHJlZ1QyLCByZWdUMywg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwog
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJl
Z2lzdGVycygpKSwgcmVnVDEpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwpAQCAt
MTAwOSwyNyArMTAxMSw2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDEpOwotICAgIAotICAgIGVtaXRX
cml0ZUJhcnJpZXIocmVnVDEsIHJlZ1QyLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7
CiAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDEpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMo
KSksIHJlZ1QxKTsKICAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVC
YXJyaWVyVXNlS2luZCB1c2VLaW5kKQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUs
IFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KG93bmVyKTsKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BBUkFNKHNj
cmF0Y2gyKTsKICAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0
Y2gpOworICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7CiAgICAgCiAjaWYgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIGVtaXRDb3VudChXcml0ZUJhcnJpZXJDb3VudGVy
czo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CiAjZW5kaWYKKyAgICAKKyNpZiBFTkFCTEUoR0dD
KQorICAgIEp1bXAgZmlsdGVyQ2VsbHM7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1t
ZWRpYXRlcykKKyAgICAgICAgZmlsdGVyQ2VsbHMgPSBlbWl0SnVtcElmTm90SlNDZWxsKHZhbHVl
KTsKKyAgICBtb3ZlKG93bmVyLCBzY3JhdGNoKTsKKyAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KE1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaCk7Cisg
ICAgbW92ZShvd25lciwgc2NyYXRjaDIpOworICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofk1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDIpOworICAg
IHJzaGlmdDMyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6bG9nMkNhcmRTaXplKSwgc2NyYXRj
aDIpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIEJhc2VJbmRleChzY3JhdGNoLCBzY3Jh
dGNoMiwgVGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkNhcmRzKCkpKTsKKyAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKQorICAgICAgICBmaWx0ZXJDZWxscy5saW5r
KHRoaXMpOworI2VuZGlmCiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQg
dXNlS2luZCkKK3sKKyAgICBVTlVTRURfUEFSQU0ob3duZXIpOworICAgIFVOVVNFRF9QQVJBTShz
Y3JhdGNoKTsKKyAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgCisjaWYgRU5BQkxFKFdSSVRFX0JB
UlJJRVJfUFJPRklMSU5HKQorICAgIGVtaXRDb3VudChXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0
Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKyAgICAKKyNpZiBFTkFCTEUoR0dDKQorICAg
IEp1bXAgZmlsdGVyQ2VsbHM7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRl
cykKKyAgICAgICAgZmlsdGVyQ2VsbHMgPSBlbWl0SnVtcElmTm90SlNDZWxsKHZhbHVlKTsKKyAg
ICB1aW50OF90KiBjYXJkQWRkcmVzcyA9IEhlYXA6OmFkZHJlc3NPZkNhcmRGb3Iob3duZXIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYXJkQWRkcmVzcyksIHNjcmF0Y2gpOworICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3Moc2NyYXRjaCkpOworICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMpCisgICAgICAgIGZpbHRlckNlbGxzLmxpbmsodGhpcyk7Cisj
ZW5kaWYKK30KIAogdm9pZCBKSVQ6OnRlc3RQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUsIEp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA0NTU5NGM1N2U4ZWZjNTQyNzVj
MDliMGQzYTUyOWE3MWY2NmRhZmRlLi4zNTQ5MDgzMmRjNDUwMWE0NDJiNzg3NTE5YjI5ZjhmNmY2
ZGNmMTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKQEAgLTI1OCwxMSArMjU4LDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
cmVnVDEpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3Mo
cmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogICAgIAorICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CisgICAgZW1pdFdyaXRlQmFycmll
cihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7CiAgICAgCiAgICAgSnVtcCBl
bXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSk7CkBAIC0zOTYsOCArMzk3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKHJlZ1QwLCByZWdUMSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotICAgIAog
ICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKICAgICAK
ICAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7CkBAIC00MTAsMTEgKzQwOSwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0
ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVj
dHVyZSkpKSk7CiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5jZUJldHdlZW4oaG90UGF0
aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUpLCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUp
OwogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mUHJv
cGVydHlTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFi
ZWwxID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QyLCBBZGRyZXNzKHJlZ1Qw
LCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7IC8vIHBheWxvYWQKLSAgICBEYXRhTGFiZWwz
MiBkaXNwbGFjZW1lbnRMYWJlbDIgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVn
VDMsIEFkZHJlc3MocmVnVDAsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsgLy8gdGFnCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3Jh
Z2UoKSksIHJlZ1QxKTsKKyAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEgPSBzdG9y
ZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDIsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0
QnlJZERlZmF1bHRPZmZzZXQpKTsgLy8gcGF5bG9hZAorICAgIERhdGFMYWJlbDMyIGRpc3BsYWNl
bWVudExhYmVsMiA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMywgQWRkcmVz
cyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOyAvLyB0YWcKICAgICAKICAgICBF
TkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOworCisgICAgZW1pdFdy
aXRlQmFycmllcihyZWdUMCwgcmVnVDIsIHJlZ1QxLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRp
YXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogICAgIAogICAgIEFTU0VSVF9K
SVRfT0ZGU0VUX1VOVVNFRChkaXNwbGFjZW1lbnRMYWJlbDEsIGRpZmZlcmVuY2VCZXR3ZWVuKGhv
dFBhdGhCZWdpbiwgZGlzcGxhY2VtZW50TGFiZWwxKSwgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQxKTsKICAgICBBU1NFUlRfSklUX09GRlNFVF9VTlVTRUQoZGlzcGxhY2VtZW50
TGFiZWwyLCBkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRpc3BsYWNlbWVudExhYmVs
MiksIHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0Mik7CkBAIC00MzAsNyArNDMx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAg
ICAgCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgZGlyZWN0ID8gY3RpX29wX3B1dF9i
eV9pZF9kaXJlY3QgOiBjdGlfb3BfcHV0X2J5X2lkKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChyZWdUMSwgcmVnVDApOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGJhc2UpOwogICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihpZGVudCkpKSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDMsIHJlZ1QyKTsgCiAg
ICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbCgpOwpAQCAtNTE2LDcgKzUxNyw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgU3RydWN0dXJlCiAjZW5kaWYKICAgICB9CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVy
KHJlZ1QwLCByZWdUMSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIGVtaXRX
cml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVnVDMsIFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKIAogICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKSwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSkpOwogI2lmIENQVShNSVBTKSB8fCBDUFUoU0g0KSB8fCBDUFUoQVJNKQpA
QCAtMTA0MywxMSArMTA0NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwg
b2JqZWN0KSksIHJlZ1QyKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDIsIHJlZ1QzLCBX
cml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMik7Ci0gICAg
ZW1pdFN0b3JlKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBtYXAobV9ieXRlY29k
ZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfcHV0X3Njb3BlZF92YXIpLCB2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTVmFyaWFibGVPYmplY3Q6Om9m
ZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMyk7CisgICAgZW1pdFN0b3JlKGluZGV4LCByZWdUMSwg
cmVnVDAsIHJlZ1QzKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QyLCByZWdUMSwgcmVnVDAs
IHJlZ1QxLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDc0LDI1ICsxMDczLDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdCksIHJlZ1QyKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDIsIHJl
Z1QzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgZW1pdFdyaXRlQmFycmll
cihnbG9iYWxPYmplY3QsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3Jp
dGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDIpOwogICAgIGVt
aXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CiAgICAgbWFwKG1fYnl0ZWNvZGVP
ZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKSwgdmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIs
IFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQotewotICAg
IFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgIFVO
VVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaCk7Ci0gICAg
Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIGVtaXRDb3VudChXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDBkY2MwMjg1NjViMTk0ZGZmZmM0ZmZlNzE5ODRjMTZjMjYzZWZhMTUuLmI2ZDAxZGMw
NzQxYjk1ZjA4YTM4YjYzZWY0OGU0ZGEyN2IyNTkzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxMS0wOS0yMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2Ugd3JpdGUgYmFycmllcnMgYWN0dWFsbHkgZG8gc29tZXRoaW5nIHdoZW4gZW5hYmxl
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3MTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBm
b3J3YXJkaW5nIGhlYWRlciwgYW5kIGZpeCBhbiBldmFsdWF0aW9uIG9yZGVyaW5nCisgICAgICAg
IGlzc3VlIHRoYXQgc2hvd3MgdXAgaWYgeW91IHRyeSB0byB1c2Ugd3JpdGUgYmFycmllcnMuCisK
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL0NhcmRTZXQuaDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U0V2ZW50TGlzdGVuZXI6OmpzRnVuY3Rpb24pOgorCiAyMDExLTA5LTIzICBNYXJrIEhhaG5lbmJl
cmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN0YXRpYyB2ZXJzaW9u
IG9mIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaGVhcC9DYXJkU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL0NhcmRTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTY0OTk3ZGUwMjc5MmU1N2E0NWVm
NGNhNDdlNjc1Y2Y0YjAxY2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaGVhcC9DYXJkU2V0LmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdl
YkNvcmVfRldEX0NhcmRTZXRfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DYXJkU2V0X2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9DYXJkU2V0Lmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKaW5kZXggNzE5N2Y3YmNmYmZhNTVjNDFmNmEz
NDUxOGUwMDBjMDRlN2UyMDQ4NC4uNGNlZTM0NzExMjIzNWY5ZWI2MzhkMjUwOGMzYmE0Y2NhNTlj
ODc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgK
QEAgLTc0LDggKzc0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGlubGluZSBKU0M6
OkpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmpzRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmICgh
bV9qc0Z1bmN0aW9uKQotICAgICAgICAgICAgbV9qc0Z1bmN0aW9uLnNldE1heUJlTnVsbCgqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpLCBtX3dyYXBwZXIuZ2V0KCksIGluaXRp
YWxpemVKU0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKKyAgICAgICAgaWYgKCFt
X2pzRnVuY3Rpb24pIHsKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gaW5p
dGlhbGl6ZUpTRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICBt
X2pzRnVuY3Rpb24uc2V0TWF5QmVOdWxsKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxE
YXRhKCksIG1fd3JhcHBlci5nZXQoKSwgZnVuY3Rpb24pOworICAgICAgICB9CiAKICAgICAgICAg
Ly8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHdyYXBwZXIgcHJvdGVjdGluZyBvdXIgZnVu
Y3Rpb24gZnJvbQogICAgICAgICAvLyBnYXJiYWdlIGNvbGxlY3Rpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108535</attachid>
            <date>2011-09-23 14:08:27 -0700</date>
            <delta_ts>2011-09-23 14:35:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68717-20110923140826.patch</filename>
            <type>text/plain</type>
            <size>47730</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU4NTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDAw
ZDNlZTlmOWM0OTg4NjliYzFkOGZjMzA3NzMwNzkwYjQ0Y2VjNTUuLjUyMWVkMGE2YzFhYTM5ZjM4
Y2QzYTVjYjkzY2UwZDQ4YmIwYTVkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDY0IEBACiAyMDExLTA5LTIzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
KyAgICAgICAgTWFrZSB3cml0ZSBiYXJyaWVycyBhY3R1YWxseSBkbyBzb21ldGhpbmcgd2hlbiBl
bmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODcxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGJhc2ljIGNhcmQgbWFya2luZyBzdHlsZSB3cml0ZSBiYXJyaWVyIHRvIEpTQyAoY3VycmVu
dGx5CisgICAgICAgIHR1cm5lZCBvZmYpLiAgVGhpcyByZXF1aXJlcyB0d28gc2NyYXRjaCByZWdp
c3RlcnMgaW4gdGhlIEpJVAorICAgICAgICBzbyB0aGVyZSB3YXMgc29tZSByZWdpc3RlciByZS1h
cnJhbmdpbmcgdG8gc2F0aXNmeSB0aGF0IHJlcXVpcmVtZW50LgorICAgICAgICBIYXBwaWx5IHRo
aXMgcHJvZHVjZWQgYSBtaW5vciBwZXJmIGJ1bXAgaW4gc3Vuc3BpZGVyICh+MC41JSkuCisKKyAg
ICAgICAgVHVybmluZyB0aGUgYmFycmllcnMgb24gY2F1c2VzIGFuIG92ZXJhbGwgcmVncmVzc2lv
biBvZiBhcm91bmQgMS41JQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzdG9yZTgpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZiX2k4bSk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
ZGVHZW5lcmF0b3I6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6Om1hcmtDZWxsQ2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBoZWFwL0Nh
cmRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhcmRTZXQ6OkNhcmRTZXQpOgorICAgICAg
ICAoSlNDOjo6OmNhcmRGb3JBdG9tKToKKyAgICAgICAgKEpTQzo6OjpjYXJkTWFya2VkRm9yQXRv
bSk6CisgICAgICAgIChKU0M6Ojo6bWFya0NhcmRGb3JBdG9tKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRy
ZXNzT2ZDYXJkRm9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyRmFzdENhc2Up
OgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OnNldERpcnR5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFkZHJlc3NP
ZkNhcmRGb3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcyk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2Nv
cGVkX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfc2NvcGVkX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFs
X3Zhcik6CisKKzIwMTEtMDktMjMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKwog
ICAgICAgICBQdXRTY29wZWRWYXIgbm9kZXMgc2hvdWxkIHJlcG9ydCB0aGF0IGl0IGhhcyBhIHZh
ciBudW1iZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY4NzIxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDA0
YzUzZmIwYTVmNzFiMjFhZGIzY2FjMDRmOWE2MzMwOWU3YzVkZmMuLjliMDViNjFkZTRmYWQyYzUz
ZWMwYjBjNzE1ZTcwM2JhOGI4YTcyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cApAQCAtMjQwLDcgKzI0MCw2IEBAIF9fWk4zSlNDNEhlYXAxN2dsb2JhbE9iamVj
dENvdW50RXYKIF9fWk4zSlNDNEhlYXAxN2lzVmFsaWRBbGxvY2F0aW9uRW0KIF9fWk4zSlNDNEhl
YXAxOXNldEFjdGl2aXR5Q2FsbGJhY2tFTjNXVEYxMFBhc3NPd25QdHJJTlNfMThHQ0FjdGl2aXR5
Q2FsbGJhY2tFRUUKIF9fWk4zSlNDNEhlYXAyMHByb3RlY3RlZE9iamVjdENvdW50RXYKLV9fWk4z
SlNDNEhlYXAyMHdyaXRlQmFycmllclNsb3dDYXNlRVBLTlNfNkpTQ2VsbEVQUzFfCiBfX1pOM0pT
QzRIZWFwMjVwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzRXYKIF9fWk4zSlNDNEhlYXAyNnByb3Rl
Y3RlZEdsb2JhbE9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAyOXJlcG9ydEV4dHJhTWVtb3J5
Q29zdFNsb3dDYXNlRW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjQ4ZWQwYTVl
OGJkMDc0ZTVhZGE5MzBjNzcxYTI0OGNmZGU1ODU3NC4uNjNjMzExN2MwYjI2YzBjNTQ0OTJhODE2
M2E4MmZiNmYyOTBlYzE3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQyOSw2
ICs0MjksNyBAQAogCQlBNzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzQ4MkI3QTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0
ZS5jcHAgKi87IH07CiAJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RN
YXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc0ODJFMzcxMTZBNjk3QjAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVy
bmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTc0REUxRDAxMjBCODc1NjAwRDQwRDVCIC8qIEFSTXY3QXNzZW1ibGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NERFMUNCMTIwQjg2RDYwMEQ0
MEQ1QiAvKiBBUk12N0Fzc2VtYmxlci5jcHAgKi87IH07CisJCUE3NTIxRTEzMTQyOTE2OUEwMDND
OEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzUyMUUxMjE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUE3NTcwNkRFMTE4QTJCQ0YwMDU3Rjg4RiAv
KiBKSVRBcml0aG1ldGljMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc1NzA2REQxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMz
Ml82NC5jcHAgKi87IH07CiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxl
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkM1MTc2MTE4
Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50
ZXJmYWNlSklULmggKi87IH07CkBAIC0xMjEzLDYgKzEyMTQsNyBAQAogCQlBNzQ4MkI3QTExNjZD
REVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODJFMzcxMTZBNjk3QjAwM0IwNzEyIC8q
IEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3NERFMUNCMTIwQjg2RDYwMEQ0MEQ1QiAvKiBBUk12N0Fzc2VtYmxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUk12N0Fzc2VtYmxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NTIxRTEyMTQyOTE2OUEwMDNDOEQwQyAv
KiBDYXJkU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcmRTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1NzA2REQxMThBMkJDRjAwNTdGODhGIC8q
IEpJVEFyaXRobWV0aWMzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRBcml0aG1ldGljMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MzMsMTMgKzE2MzUsOSBAQAogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCAqLywKIAkJCQkwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25l
ZENvZGVCbG9ja3MuaCAqLywKLQkJCQlBNzA0NTZBRjE0MjdGQjE1MDAzN0RBNjggLyogQWxsb2Nh
dGlvblNwYWNlLmggKi8sCiAJCQkJQTcwNDU2QUUxNDI3RkIwMzAwMzdEQTY4IC8qIEFsbG9jYXRp
b25TcGFjZS5jcHAgKi8sCi0JCQkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIuaCAqLywKLQkJCQkwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRh
YmxlU3BlY3RydW0uaCAqLywKLQkJCQkwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uY3BwICovLAotCQkJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJh
cnJpZXJTdXBwb3J0LmggKi8sCi0JCQkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRl
QmFycmllclN1cHBvcnQuY3BwICovLAorCQkJCUE3MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBB
bGxvY2F0aW9uU3BhY2UuaCAqLywKKwkJCQlBNzUyMUUxMjE0MjkxNjlBMDAzQzhEMEMgLyogQ2Fy
ZFNldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVS
b290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2
ZVJvb3RzLmggKi8sCiAJCQkJMTQyRTMxMkIxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZS5oICov
LApAQCAtMTY2NSw3ICsxNjYzLDEyIEBACiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8q
IFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMTQyRTMxMzIxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9u
Zy5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIu
aCAqLywKKwkJCQkwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3Bw
ICovLAorCQkJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICov
LAogCQkJCTE0MkUzMTMzMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggKi8sCisJCQkJMEYyNDJE
QTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLywKKwkJCQkw
RkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8sCisJ
CQkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gaGVhcDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
ODE4LDYgKzI4MjEsNyBAQAogCQkJCTFBMDgyNzdBMTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlT
ZW1hcGhvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAv
KiBBbGxvY2F0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUw
MDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUE3NTIxRTEz
MTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaAppbmRleCBhMWI3MWY5MDM1NjgzZjk1ZGEzMTQ4ZTE4OWFjZjM2ZWZjNjc3YjRkLi5mOWI4
MmY0YTZlNjBjYWNmYWJiNTc1NzMwODMxZmNiZjFiOGI4YWU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
CkBAIC01MTAsNiArNTEwLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxfaTMybShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmU4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIEFTU0VSVCgtMTI4IDw9IGltbS5tX3ZhbHVlICYmIGltbS5t
X3ZhbHVlIDwgMTI4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92Yl9pOG0oaW1tLm1fdmFsdWUs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU4
KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKC0xMjggPD0gaW1tLm1fdmFsdWUgJiYgaW1tLm1fdmFsdWUgPCAxMjgpOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZiX2k4bShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQogCiAKICAgICAvLyBG
bG9hdGluZy1wb2ludCBvcGVyYXRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAppbmRleCAxOGFiYjA3YTkzZTBhNzIxMzJiY2QwMjFhZmYwNmU0
OGU3NGFmM2JjLi4zNGQxOGFkMDQyMDcxMmRjMDM0YjE0Y2ZkZDJmZjZjYWZiZjk1Y2YzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKQEAgLTE0
NSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgICAgICBPUF9NT1ZfRUFYSXYgICAgICAgICAgICAg
ICAgICAgID0gMHhCOCwKICAgICAgICAgT1BfR1JPVVAyX0V2SWIgICAgICAgICAgICAgICAgICA9
IDB4QzEsCiAgICAgICAgIE9QX1JFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweEMzLAor
ICAgICAgICBPUF9HUk9VUDExX0V2SWIgICAgICAgICAgICAgICAgID0gMHhDNiwKICAgICAgICAg
T1BfR1JPVVAxMV9Fdkl6ICAgICAgICAgICAgICAgICA9IDB4QzcsCiAgICAgICAgIE9QX0lOVDMg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweENDLAogICAgICAgICBPUF9HUk9VUDJfRXYxICAg
ICAgICAgICAgICAgICAgID0gMHhEMSwKQEAgLTEwNTYsNiArMTA1NywyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDExX0V2SXosIEdST1VQMTFfTU9W
LCBiYXNlLCBvZmZzZXQpOwogICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwog
ICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmJfaThtKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgtMTI4IDw9IGltbSAmJiBpbW0gPCAx
MjgpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxMV9FdkliLCBHUk9V
UDExX01PViwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChp
bW0pOworICAgIH0KKworICAgIHZvaWQgbW92Yl9pOG0oaW50IGltbSwgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAg
ICBBU1NFUlQoLTEyOCA8PSBpbW0gJiYgaW1tIDwgMTI4KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQMTFfRXZJYiwgR1JPVVAxMV9NT1YsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0K
IAogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZvaWQqIGFkZHIpCiAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKaW5kZXggZDZl
NWJiMDlmZmUwYWEyYmU3ZmIyYmRiNTUwMmM1Y2YyOGJlYTJjOC4uYjEwMWNlM2M4ZDJlYTM2NDgw
M2ViZjFhOWZkMzRlYWNkZDM1OWI0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCkBAIC00MjksNiArNDI5LDE2IEBAIGJvb2wgSklU
Q29kZUdlbmVyYXRvcjo6aXNLbm93bkNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICByZXR1
cm4gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lz
dGVyKCldLmlzSlNDZWxsKCk7CiB9CiAKK2Jvb2wgSklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk5v
dENlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3Jh
cGgoKVtub2RlSW5kZXhdOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkg
JiYgIXZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiAhKGluZm8uaXNKU0NlbGwoKSB8fCBpbmZvLmlzVW5rbm93bkpT
KCkpOworfQorCiBib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyKE5vZGVJ
bmRleCBub2RlSW5kZXgpCiB7CiAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUlu
ZGV4XTsKQEAgLTExNjYsMjUgKzExNzYsMTI0IEBAIEpJVENvbXBpbGVyOjpDYWxsIEpJVENvZGVH
ZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHCiAg
ICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKIH0KIAotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0
ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRj
aCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3
cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQorewor
ICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gxKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgIFVO
VVNFRF9QQVJBTSh1c2VLaW5kKTsKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOworICAg
IEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7CisgICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0
Y2gyKTsKKworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBKSVRDb21w
aWxlcjo6ZW1pdENvdW50KGppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3Io
dXNlS2luZCkpOworI2VuZGlmCisgICAgbWFya0NlbGxDYXJkKGppdCwgb3duZXIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7Cit9CisKK3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxDYXJkKE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGppdCk7CiAgICAgVU5VU0VEX1BBUkFNKG93
bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgIFVOVVNFRF9QQVJBTShzY3Jh
dGNoMik7CisgICAgCisjaWYgRU5BQkxFKEdHQykKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRj
aDEpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KE1h
cmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDEpOworICAgIGppdC5tb3ZlKG93bmVyLCBz
Y3JhdGNoMik7CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofk1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDIpOworICAgIGppdC5yc2hpZnQz
MihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmxvZzJDYXJkU2l6ZSksIHNjcmF0Y2gyKTsKKyAg
ICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
Y3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgTWFya2VkQmxvY2s6
Om9mZnNldE9mQ2FyZHMoKSkpOworI2VuZGlmCit9CisKK3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXgg
dmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZUdQUik7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKKyAgICBV
TlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKKworICAg
IGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjplbWl0Q291
bnQoaml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Cisj
ZW5kaWYKKworI2lmIEVOQUJMRShHR0MpCisgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2Vs
bDsKKyAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOworICAgIGlmICghaXNLbm93bkNlbGwo
dmFsdWVJbmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0
aW9uKG1faml0LmdyYXBoKClbdmFsdWVJbmRleF0pKSkgeworICAgICAgICBoYWRDZWxsQ2hlY2sg
PSB0cnVlOworICAgICAgICByaHNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgT3duUHRyPEdQUlRlbXBvcmFyeT4gdGVtcDE7CisgICAgT3duUHRyPEdQUlRl
bXBvcmFyeT4gdGVtcDI7CisgICAgaWYgKHNjcmF0Y2gxID09IEludmFsaWRHUFJSZWcpIHsKKyAg
ICAgICAgdGVtcDEgPSBhZG9wdFB0cihuZXcgR1BSVGVtcG9yYXJ5KHRoaXMpKTsKKyAgICAgICAg
c2NyYXRjaDEgPSB0ZW1wMS0+Z3ByKCk7CisgICAgfQorICAgIGlmIChzY3JhdGNoMiA9PSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgIHRlbXAyID0gYWRvcHRQdHIobmV3IEdQUlRlbXBvcmFyeSh0
aGlzKSk7CisgICAgICAgIHNjcmF0Y2gyID0gdGVtcDItPmdwcigpOworICAgIH0KKworICAgIG1h
cmtDZWxsQ2FyZChtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgaWYg
KGhhZENlbGxDaGVjaykKKyAgICAgICAgcmhzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisjZW5kaWYK
K30KKwordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
R1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2lu
ZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBVTlVTRURfUEFSQU0ob3duZXIpOwor
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwog
ICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaCk7
CisKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVJbmRleCkpCisgICAgICAgIHJldHVybjsK
IAogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICBKSVRDb21waWxlcjo6
ZW1pdENvdW50KGppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2lu
ZCkpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoR0dDKQorICAgIEpJVENvbXBpbGVyOjpKdW1wIHJo
c05vdENlbGw7CisgICAgYm9vbCBoYWRDZWxsQ2hlY2sgPSBmYWxzZTsKKyAgICBpZiAoIWlzS25v
d25DZWxsKHZhbHVlSW5kZXgpICYmICFpc0NlbGxQcmVkaWN0aW9uKG1faml0LmdyYXBoKCkuZ2V0
UHJlZGljdGlvbihtX2ppdC5ncmFwaCgpW3ZhbHVlSW5kZXhdKSkpIHsKKyAgICAgICAgaGFkQ2Vs
bENoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOworICAgIH0KKyAgICAKKyAgICBPd25QdHI8R1BSVGVtcG9yYXJ5PiB0ZW1wOworICAgIGlm
IChzY3JhdGNoID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgdGVtcCA9IGFkb3B0UHRyKG5l
dyBHUFJUZW1wb3JhcnkodGhpcykpOworICAgICAgICBzY3JhdGNoID0gdGVtcC0+Z3ByKCk7Cisg
ICAgfQorCisgICAgdWludDhfdCogY2FyZEFkZHJlc3MgPSBIZWFwOjphZGRyZXNzT2ZDYXJkRm9y
KG93bmVyKTsKKyAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKGNhcmRB
ZGRyZXNzKSwgc2NyYXRjaCk7CisgICAgbV9qaXQuc3RvcmU4KEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoMSksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2gpKTsKKworICAgIGlmIChoYWRD
ZWxsQ2hlY2spCisgICAgICAgIHJoc05vdENlbGwubGluaygmbV9qaXQpOworI2VuZGlmCiB9CiAK
LXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BS
UmVnIHZhbHVlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3Zv
aWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVn
IHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGhUYXJnZXQpCiB7CisgICAgCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBz
dHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sg
PSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0
dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPigtMSkpKTsKLSAgICAKLSAgICB3cml0ZUJhcnJpZXIobV9qaXQsIGJhc2VHUFIsIHNj
cmF0Y2hHUFIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKworICAgIHdyaXRlQmFy
cmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHNj
cmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9
IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAppbmRleCA0NGEzNmU4MTY0ZTVkNTlkMTBlNThhZWRh
M2YzMjFjNjgwMzViYmU3Li41MDMyODlkMzZhNWVkYzg4OGI5ZGE4NmZkZWVjM2U3OGY4M2U2YjFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
aApAQCAtMTgxLDcgKzE4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2dwcnMucmVsZWFz
ZShpbmZvLmdwcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFj
cm9Bc3NlbWJsZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBXcml0ZUJh
cnJpZXJVc2VLaW5kKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrQ2VsbENhcmQoTWFjcm9Bc3NlbWJs
ZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hH
UFIyKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImLCBHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBXcml0
ZUJhcnJpZXJVc2VLaW5kKTsKKworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQ
UiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNl
S2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hH
UFIyID0gSW52YWxpZEdQUlJlZyk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNl
S2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZyk7CiAKICAgICBzdGF0aWMg
R1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcs
IEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52
YWxpZEdQUlJlZykKICAgICB7CkBAIC00MzMsNiArNDM3LDggQEAgcHJvdGVjdGVkOgogICAgIGJv
b2wgaXNLbm93bk5vdE51bWJlcihOb2RlSW5kZXgpOwogCiAgICAgYm9vbCBpc0tub3duQm9vbGVh
bihOb2RlSW5kZXgpOworCisgICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlSW5kZXgpOwogICAg
IAogICAgIC8vIENoZWNrcy9hY2Nlc3NvcnMgZm9yIGNvbnN0YW50IHZhbHVlcy4KICAgICBib29s
IGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNDb25zdGFu
dChub2RlSW5kZXgpOyB9CkBAIC02MTgsNyArNjI0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
bm9uU3BlY3VsYXRpdmVJbnN0YW5jZU9mKE5vZGUmKTsKIAogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIE5vZGVUeXBlID0gR2V0QnlJZCk7
Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwor
ICAgIHZvaWQgY2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBOb2RlSW5k
ZXggdmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSk7CiAgICAgdm9pZCBjYWNoZWRHZXRNZXRob2QoR1BSUmVnIGJhc2VHUFIsIEdQ
UlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1w
KCkpOwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxs
KE5vZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCmluZGV4IDNmNGYwZmZjYTdjMjI4NWQwOWRlYjVlZDE2
Y2ZhZDIwMzc2YWZhMjYuLjY5NWM2NTJjMWVhZThkYzA1YjFiNjMzNjFiYjIxYWY3OGRjZDU3N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcApAQCAtNTE3LDkgKzUx
NywxNSBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllcgogICAgICAgICAgICAgICAgIGZvciAoV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyAr
K2l0KQogICAgICAgICAgICAgICAgICAgICB0ZXN0UHJvdG90eXBlKHN0dWJKaXQsIHNjcmF0Y2hH
UFIsICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29kZUdlbmVyYXRvcjo6d3JpdGVCYXJy
aWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKLSAgICAgICAgICAgIAorCisjaWYgRU5BQkxFKEdHQykgfHwgRU5BQkxFKFdSSVRF
X0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlz
IHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJl
cyBpdAorICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gSklUQ29kZUdlbmVyYXRvcjo6c2Vs
ZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBzdHViSml0LnB1c2goc2NyYXRjaDIpOworICAgICAgICAgICAgSklUQ29kZUdlbmVyYXRvcjo6
d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgICAgICAgICBzdHViSml0LnBvcChzY3Jh
dGNoMik7CisjZW5kaWYKKwogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKQogICAgICAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKaW5kZXggMWZhYmQ3MWEzNDZhMDZkZGM4YTRmNjliZmYwNzdlNmU2Mzk3ZDFk
NS4uOGZiMzQ5NGVjMjIwZWYxNzI4YzUyNzUzNjI2YzQ2NDlkZGE0NmIxOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTI0LDYgKzI0
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJERkdTcGVjdWxh
dGl2ZUpJVC5oIgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNDA0LDggKzE0MDUsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICB3cml0ZUJhcnJpZXIobV9qaXQsIGJhc2VSZWcsIHNjcmF0Y2hSZWcsIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzKTsKKworICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFs
dWUuZ3ByKCksIG5vZGUuY2hpbGQzKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoUmVnKTsKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFu
ZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JM
ZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0
eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCkBAIC0xNDY0LDcgKzE0NjUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
LmdwcigpOwogCi0gICAgICAgIHdyaXRlQmFycmllcihtX2ppdCwgYmFzZVJlZywgc2NyYXRjaFJl
ZywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgICAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hpbGQzKCksIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKIAogICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0
b3JhZ2UuCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKQEAgLTE3OTUs
NyArMTc5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhzY29wZUNoYWluLmdwcigp
LCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgd3Jp
dGVCYXJyaWVyKG1faml0LCBzY29wZUNoYWluLmdwcigpLCBzY3JhdGNoR1BSLCBXcml0ZUJhcnJp
ZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgICAgIHdyaXRlQmFycmllcihzY29wZUNoYWluLmdw
cigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVB
Y2Nlc3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRC
eUlkOiB7CkBAIC0xOTAxLDcgKzE5MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIHZhbHVlLnVzZSgpOwog
Ci0gICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIsIG5v
ZGUuaWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOworICAgICAgICBjYWNoZWRQdXRCeUlk
KGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLmlkZW50
aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVh
azsKQEAgLTE5MTksNyArMTkyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgdmFsdWUudXNlKCk7CiAKLSAg
ICAgICAgY2FjaGVkUHV0QnlJZChiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CisgICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZUdQ
UiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmllck51
bWJlcigpLCBEaXJlY3QpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKQEAgLTE5NDYsNyArMTk0
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdFJlZyk7CiAKLSAgICAgICAgd3JpdGVC
YXJyaWVyKG1faml0LCBnbG9iYWxPYmplY3RSZWcsIHNjcmF0Y2hSZWcsIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzKTsKKyAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3QoKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmll
ckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdFJlZywgSlNWYXJpYWJsZU9iamVj
dDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hSZWcpOwogICAgICAgICBtX2ppdC5zdG9y
ZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3JHbG9iYWxWYXIoc2NyYXRj
aFJlZywgbm9kZS52YXJOdW1iZXIoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ2FyZFNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjliNWQ5MzgxNmY4MGUxOGVlZmU3YzJkODVjNjhhZGRlMjlmNDc5YjAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmgKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FyZFNldF9oCisjZGVmaW5lIENh
cmRTZXRfaAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlIDxzaXplX3QgY2FyZFNpemUsIHNpemVfdCBibG9ja1NpemU+IGNsYXNzIENhcmRTZXQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhcmRTZXQpOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY2FyZENvdW50ID0gKGJsb2NrU2l6ZSArIGNhcmRTaXplIC0gMSkgLyBjYXJkU2l6ZTsK
KworcHVibGljOgorICAgIENhcmRTZXQoKQorICAgIHsKKyAgICAgICAgbWVtc2V0KG1fY2FyZHMs
IDAsIGNhcmRDb3VudCk7CisgICAgfQorCisgICAgYm9vbCBjYXJkTWFya2VkRm9yQXRvbShjb25z
dCB2b2lkKik7CisgICAgdm9pZCBtYXJrQ2FyZEZvckF0b20oY29uc3Qgdm9pZCopOworICAgIHVp
bnQ4X3QmIGNhcmRGb3JBdG9tKGNvbnN0IHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICB1aW50OF90
IG1fY2FyZHNbY2FyZENvdW50XTsKKyAgICBDT01QSUxFX0FTU0VSVCghKGNhcmRTaXplICYgKGNh
cmRTaXplIC0gMSkpLCBjYXJkU2V0X2NhcmRTaXplX2lzX3Bvd2VyX29mX3R3byk7CisgICAgQ09N
UElMRV9BU1NFUlQoIShjYXJkQ291bnQgJiAoY2FyZENvdW50IC0gMSkpLCBjYXJkU2V0X2NhcmRD
b3VudF9pc19wb3dlcl9vZl90d28pOworfTsKKwordGVtcGxhdGUgPHNpemVfdCBjYXJkU2l6ZSwg
c2l6ZV90IGJsb2NrU2l6ZT4gdWludDhfdCYgQ2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXplPjo6
Y2FyZEZvckF0b20oY29uc3Qgdm9pZCogcHRyKQoreworICAgIEFTU0VSVChwdHIgPiB0aGlzICYm
IHB0ciA8IChyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGNhcmRDb3VudCAqIGNhcmRT
aXplKSk7CisgICAgdWludHB0cl90IGNhcmQgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHB0cikgLyBjYXJkU2l6ZSkgJSBjYXJkQ291bnQ7CisgICAgcmV0dXJuIG1fY2FyZHNbY2FyZF07
Cit9CisKK3RlbXBsYXRlIDxzaXplX3QgY2FyZFNpemUsIHNpemVfdCBibG9ja1NpemU+IGJvb2wg
Q2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXplPjo6Y2FyZE1hcmtlZEZvckF0b20oY29uc3Qgdm9p
ZCogcHRyKQoreworICAgIHJldHVybiBjYXJkRm9yQXRvbShwdHIpOworfQorCit0ZW1wbGF0ZSA8
c2l6ZV90IGNhcmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiB2b2lkIENhcmRTZXQ8Y2FyZFNpemUs
IGJsb2NrU2l6ZT46Om1hcmtDYXJkRm9yQXRvbShjb25zdCB2b2lkKiBwdHIpCit7CisgICAgY2Fy
ZEZvckF0b20ocHRyKSA9IDE7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCmluZGV4IGY2ZTFkNWU1MzgyZTAzNDMyMmY4MzFlNThlZDEwNTMwN2RiMTUxYmQu
Ljg4NDVkYjFhNTkyZjljNjZmMmI3MDFlMzc0ODFjNGE3NTU1OGJjNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC02ODIsMTYgKzY4Miw0IEBAIHZvaWQgSGVhcDo6cmVsZWFz
ZUZyZWVCbG9ja3MoKQogICAgIH0KIH0KIAotI2lmIEVOQUJMRShHR0MpCi12b2lkIEhlYXA6Ondy
aXRlQmFycmllclNsb3dDYXNlKGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY2VsbCkKLXsK
LX0KLQotI2Vsc2UKLQotdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93Q2FzZShjb25zdCBKU0Nl
bGwqLCBKU0NlbGwqKQotewotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGVmZTVmNDY5YzA2NDdlMjUyNWE0MTQwN2I2NjRmODFk
OTc1Y2MxY2YuLmE3MWY5ZjJkYTc2NDQzZGEwMTY2YmY5YmZkY2UwMTdkYTdmM2QzZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTc0LDYgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFs
dWUpOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlND
ZWxsKik7CisgICAgICAgIHN0YXRpYyB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCop
OwogCiAgICAgICAgIEhlYXAoSlNHbG9iYWxEYXRhKiwgSGVhcFNpemUpOwogICAgICAgICB+SGVh
cCgpOwpAQCAtMTU3LDggKzE1OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lz
dGVyRmlsZSYgcmVnaXN0ZXJGaWxlKCk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJy
aWVyU2xvd0Nhc2UoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7Ci0KICAgICAgICAgdm9pZCB3YWl0
Rm9yUmVsYXRpdmVUaW1lV2hpbGVIb2xkaW5nTG9jayhkb3VibGUgcmVsYXRpdmUpOwogICAgICAg
ICB2b2lkIHdhaXRGb3JSZWxhdGl2ZVRpbWUoZG91YmxlIHJlbGF0aXZlKTsKICAgICAgICAgdm9p
ZCBibG9ja0ZyZWVpbmdUaHJlYWRNYWluKCk7CkBAIC0yMzksMTEgKzIzOCwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9CiAKICNpZiBFTkFCTEUoR0dDKQotICAgIGlubGluZSB2b2lkIEhlYXA6
OndyaXRlQmFycmllckZhc3RDYXNlKGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY2VsbCkK
KyAgICBpbmxpbmUgdWludDhfdCogSGVhcDo6YWRkcmVzc09mQ2FyZEZvcihKU0NlbGwqIGNlbGwp
CiAgICAgewotICAgICAgICBpZiAoTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKS0+aW5OZXdT
cGFjZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3cml0ZUJhcnJpZXJTbG93Q2Fz
ZShvd25lciwgY2VsbCk7CisgICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmFkZHJlc3NPZkNhcmRGb3IoY2VsbCk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyRmFzdENhc2UoY29uc3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKikKKyAg
ICB7CisgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lciktPnNldERpcnR5T2JqZWN0
KG93bmVyKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29u
c3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgKaW5kZXggNDQ4M2VlN2ZhOWQ3ZmI4MzViZTliNmJjYTM2NTBkZDdhNmQx
YzJhZi4uMWFlNTg3YmQ2YzU0MmY1M2Q0MjA5M2Q2NjdjMjE2M2Q5ODZkMTJmYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCkBAIC0yMiw2ICsyMiw4IEBACiAjaWZu
ZGVmIE1hcmtlZEJsb2NrX2gKICNkZWZpbmUgTWFya2VkQmxvY2tfaAogCisjaW5jbHVkZSAiQ2Fy
ZFNldC5oIgorCiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlM
aW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTY1LDcgKzY3
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBvYmplY3QgdGhlIGhlYXAgd2lsbCBj
b21tb25seSBhbGxvY2F0ZSBpcyBmb3VyIHdvcmRzLgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGF0b21TaXplID0gNCAqIHNpemVvZih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgYmxvY2tTaXplID0gMTYgKiBLQjsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBh
dG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8gYXRvbVNpemU7IC8vIH4wLjQlIG92ZXJoZWFkIGZv
ciBtYXJrIGJpdHMuCisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tNYXNrID0gfihi
bG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8gYXRv
bVNpemU7IC8vIH4wLjQlIG92ZXJoZWFkCisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYnl0
ZXNQZXJDYXJkID0gNTEyOyAvLyAxLjYlIG92ZXJoZWFkCisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbG9nMkNhcmRTaXplID0gOTsKIAogICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgewogICAgICAg
ICAgICAgRnJlZUNlbGwqIG5leHQ7CkBAIC0xMzIsMTEgKzEzOCwyNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICAgICAg
Ym9vbCB0ZXN0QW5kQ2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIHNldE1h
cmtlZChjb25zdCB2b2lkKik7CisgICAgICAgIAorI2lmIEVOQUJMRShHR0MpCisgICAgICAgIHZv
aWQgc2V0RGlydHlPYmplY3QoY29uc3Qgdm9pZCogYXRvbSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9jYXJkcy5tYXJrQ2FyZEZvckF0b20oYXRvbSk7CisgICAgICAgIH0KKworICAgICAgICB1
aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKGNvbnN0IHZvaWQqIGF0b20pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAmbV9jYXJkcy5jYXJkRm9yQXRvbShhdG9tKTsKKyAgICAgICAgfQor
CisgICAgICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9mZnNldE9mQ2FyZHMoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEJsb2NrLCBtX2NhcmRz
KTsKKyAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaENlbGwoRnVuY3RvciYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9j
a1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBhdG9tTWFzayA9IH4oYXRvbVNpemUgLSAxKTsgLy8gYXRvbVNpemUgbXVzdCBiZSBhIHBvd2Vy
IG9mIHR3by4KICAgICAgICAgCiAgICAgICAgIGVudW0gRGVzdHJ1Y3RvclN0YXRlIHsgRnJlZUNl
bGxzRG9udEhhdmVPYmplY3RzLCBTb21lRnJlZUNlbGxzU3RpbGxIYXZlT2JqZWN0cywgQWxsRnJl
ZUNlbGxzSGF2ZU9iamVjdHMgfTsKQEAgLTE2OSw3ICsxOTEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0cnVjdG9yU3Rh
dGU+KG1fZGVzdHJ1Y3RvclN0YXRlKTsKICAgICAgICAgfQotICAgICAgICAKKworI2lmIEVOQUJM
RShHR0MpCisgICAgICAgIENhcmRTZXQ8Ynl0ZXNQZXJDYXJkLCBibG9ja1NpemU+IG1fY2FyZHM7
CisjZW5kaWYKKwogICAgICAgICBzaXplX3QgbV9lbmRBdG9tOyAvLyBUaGlzIGlzIGEgZnV6enkg
ZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAgICAgICAgIHNpemVfdCBtX2F0b21z
UGVyQ2VsbDsKICAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKQEAg
LTMwMCw3ICszMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGZ1bmN0b3IocmVp
bnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRvbXMoKVtpXSkpOwogICAgICAgICB9CiAgICAgfQot
ICAgIAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCBkNGQ4NGY3NjA2ZDA2ZWM2NzgyMGY3ZDBmYjBiOGU2ZTI0YjM2NzBi
Li5hODI0ZjNlNDM1ZGU3ZGQzNGIwMjgwZWQyZjk3ZDY1OWRiYjY4NjBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKQEAgLTMxNiw3ICszMTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCB0ZXN0UHJvdG90eXBlKEpTVmFsdWUsIEp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwog
Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3Rl
cklEIHNjcmF0Y2gsIFdyaXRlQmFycmllclVzZUtpbmQpOworICAgICAgICBlbnVtIFdyaXRlQmFy
cmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzIH07CisgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNl
ZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIHNvIG1heSBzYWZlbHkg
YmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWVU
YWcsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVy
TW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdy
aXRlQmFycmllck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9pZCBlbWl0QWxs
b2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIHZvaWQqIHZ0YWJsZSwgUmVnaXN0ZXJJ
RCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0
ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGViNTA2MDhhZjJkMGY3ZWQx
ZGZjYjRiODA0NjQzMmU0OThhMzhjMzUuLmQyNzJlZmY1ZGM1NTQ0Njk1YWQ5M2M5YTJmMjFhOGMx
M2MxMjM3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCkBAIC0yMDcsMjAgKzIwNywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcCBlbXB0eSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3Rv
cmVSZXN1bHQodGhpcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1w
dHkubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAg
ICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCi0g
ICAgbW92ZShyZWdUMSwgcmVnVDApOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
OwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVz
cyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CiAgICAg
anVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBlbmQubGluayh0aGlzKTsK
KworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTQzOSw4
ICs0MzksNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhlciB0aGUg
YmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90
IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDIsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzKTsKLQogICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVu
Y2VQdXRCeUlkKTsKIAogICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKQEAgLTQ1MywxMSAr
NDUxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRv
Q29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5
SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKICAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNl
QmV0d2Vlbihob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSksIHBhdGNoT2Zmc2V0UHV0
QnlJZFN0cnVjdHVyZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVnVDApOwotICAgIERhdGFMYWJlbDMyIGRpc3Bs
YWNlbWVudExhYmVsID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlZ1QyKTsK
KyAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNl
dCkpOwogCiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsK
IAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKwogICAg
IEFTU0VSVF9KSVRfT0ZGU0VUX1VOVVNFRChkaXNwbGFjZW1lbnRMYWJlbCwgZGlmZmVyZW5jZUJl
dHdlZW4oaG90UGF0aEJlZ2luLCBkaXNwbGFjZW1lbnRMYWJlbCksIHBhdGNoT2Zmc2V0UHV0QnlJ
ZFByb3BlcnR5TWFwT2Zmc2V0KTsKIH0KIApAQCAtNTM3LDggKzUzNywxMCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFN0cnVjdHVyZQogCiAgICAgICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KHJlZ1QzKTsKICAgICB9Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDIs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKworICAgIC8vIFBsYW50aW5nIHRoZSBu
ZXcgc3RydWN0dXJlIHRyaWdnZXJzIHRoZSB3cml0ZSBiYXJyaWVyIHNvIHdlIG5lZWQKKyAgICAv
LyBhbiB1bmNvbmRpdGlvbmFsIGJhcnJpZXIgaGVyZS4KKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiAKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG5ld1N0cnVjdHVyZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
KTsKICAgICBjb21waWxlUHV0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMSwgY2FjaGVkT2Zmc2V0
KTsKQEAgLTk4OSw3ICs5OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUs
IG9iamVjdCkpLCByZWdUMSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QxLCByZWdUMiwg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVn
VDEsIHJlZ1QwLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFy
cmllckZvclZhcmlhYmxlQWNjZXNzKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNW
YXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QxKTsKICAgICBzdG9yZVB0
cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKQEAgLTEwMDksMjcgKzEwMTEsNjggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCks
IHJlZ1QxKTsKLSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QxLCByZWdUMiwgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdCksIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTVmFyaWFibGVP
YmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMSk7CiAgICAgc3RvcmVQdHIocmVnVDAs
IEFkZHJlc3MocmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CisgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCBy
ZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nl
c3MpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBS
ZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKKyNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklE
IG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQg
c2NyYXRjaDIsIFdyaXRlQmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VL
aW5kKQogewogICAgIFVOVVNFRF9QQVJBTShvd25lcik7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CiAgICAgVU5VU0VEX1BBUkFNKHVzZUtp
bmQpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwog
ICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoKTsKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRj
aDIpOwogICAgIAogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICBlbWl0
Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwogI2Vu
ZGlmCisgICAgCisjaWYgRU5BQkxFKEdHQykKKyAgICBKdW1wIGZpbHRlckNlbGxzOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpCisgICAgICAgIGZpbHRlckNlbGxzID0g
ZW1pdEp1bXBJZk5vdEpTQ2VsbCh2YWx1ZSk7CisgICAgbW92ZShvd25lciwgc2NyYXRjaCk7Cisg
ICAgYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihNYXJrZWRCbG9jazo6
YmxvY2tNYXNrKSksIHNjcmF0Y2gpOworICAgIG1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKyAgICBh
bmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6Ymxv
Y2tNYXNrKSksIHNjcmF0Y2gyKTsKKyAgICByc2hpZnQzMihUcnVzdGVkSW1tMzIoTWFya2VkQmxv
Y2s6OmxvZzJDYXJkU2l6ZSksIHNjcmF0Y2gyKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCBCYXNlSW5kZXgoc2NyYXRjaCwgc2NyYXRjaDIsIFRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zm
c2V0T2ZDYXJkcygpKSk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykK
KyAgICAgICAgZmlsdGVyQ2VsbHMubGluayh0aGlzKTsKKyNlbmRpZgogfQogCi0jZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCit7CisgICAgVU5VU0VEX1BBUkFNKG93
bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BBUkFNKHVzZUtp
bmQpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwor
ICAgIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBlbWl0Q291bnQo
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOworI2VuZGlmCisg
ICAgCisjaWYgRU5BQkxFKEdHQykKKyAgICBKdW1wIGZpbHRlckNlbGxzOworICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpCisgICAgICAgIGZpbHRlckNlbGxzID0gZW1pdEp1
bXBJZk5vdEpTQ2VsbCh2YWx1ZSk7CisgICAgdWludDhfdCogY2FyZEFkZHJlc3MgPSBIZWFwOjph
ZGRyZXNzT2ZDYXJkRm9yKG93bmVyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FyZEFkZHJl
c3MpLCBzY3JhdGNoKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHNjcmF0
Y2gpKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKQorICAgICAgICBm
aWx0ZXJDZWxscy5saW5rKHRoaXMpOworI2VuZGlmCit9CiAKIHZvaWQgSklUOjp0ZXN0UHJvdG90
eXBlKEpTVmFsdWUgcHJvdG90eXBlLCBKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
aW5kZXggNDU1OTRjNTdlOGVmYzU0Mjc1YzA5YjBkM2E1MjlhNzFmNjZkYWZkZS4uMzU0OTA4MzJk
YzQ1MDFhNDQyYjc4NzUxOWIyOWY4ZjZmNmRjZjE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0yNTgsMTEgKzI1
OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHks
IHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIobV9n
bG9iYWxEYXRhLT5qc0FycmF5VlB0cikpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKICAgICAKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVnVDMsIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
KwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
cmVnVDMpOwogICAgIAogICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwpAQCAtMzk2LDggKzM5Nyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKLSAgICAKICAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNF
KHNlcXVlbmNlUHV0QnlJZCk7CiAgICAgCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwpA
QCAtNDEwLDExICs0MDksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0aFBh
dGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogICAgIEFTU0VSVF9KSVRfT0ZGU0VU
KGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlKSwgcGF0
Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlKTsKICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVnVDApOwotICAgIERh
dGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsMSA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaChyZWdUMiwgQWRkcmVzcyhyZWdUMCwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOyAv
LyBwYXlsb2FkCi0gICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwyID0gc3RvcmVQdHJX
aXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBwYXRjaFB1dEJ5SWRE
ZWZhdWx0T2Zmc2V0KSk7IC8vIHRhZworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZWdUMSk7CisgICAgRGF0YUxhYmVsMzIg
ZGlzcGxhY2VtZW50TGFiZWwxID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1Qy
LCBBZGRyZXNzKHJlZ1QxLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7IC8vIHBheWxvYWQK
KyAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDIgPSBzdG9yZVB0cldpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2gocmVnVDMsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZz
ZXQpKTsgLy8gdGFnCiAgICAgCiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVu
Y2VQdXRCeUlkKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwg
cmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzKTsKICAgICAKICAgICBBU1NFUlRfSklUX09GRlNFVF9VTlVTRUQoZGlzcGxhY2VtZW50TGFi
ZWwxLCBkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRpc3BsYWNlbWVudExhYmVsMSks
IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSk7CiAgICAgQVNTRVJUX0pJVF9P
RkZTRVRfVU5VU0VEKGRpc3BsYWNlbWVudExhYmVsMiwgZGlmZmVyZW5jZUJldHdlZW4oaG90UGF0
aEJlZ2luLCBkaXNwbGFjZW1lbnRMYWJlbDIpLCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldDIpOwpAQCAtNDMwLDcgKzQzMSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsKKyAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChiYXNlKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRy
KCYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnQpKSkpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHJlZ1QzLCByZWdUMik7IAogICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoKTsK
QEAgLTUxNiw3ICs1MTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZQogI2VuZGlmCiAgICAg
fQogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDEs
IHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcyk7CiAKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVyZSksIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICNpZiBDUFUoTUlQUykg
fHwgQ1BVKFNINCkgfHwgQ1BVKEFSTSkKQEAgLTEwNDMsMTEgKzEwNDQsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWlu
Tm9kZSwgbmV4dCkpLCByZWdUMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMik7CiAKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QyLCByZWdUMywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwot
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJl
Z2lzdGVycygpKSwgcmVnVDIpOwotICAgIGVtaXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMik7Ci0gICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX3B1dF9z
Y29wZWRfdmFyKSwgdmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDMpOworICAg
IGVtaXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMyk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihyZWdUMiwgcmVnVDEsIHJlZ1QwLCByZWdUMSwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3NCwy
NSArMTA3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDAp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7CiAKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKHJlZ1QyLCByZWdUMywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nl
c3MpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMSwgcmVnVDMsIFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIAog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdp
c3RlcnMoKSksIHJlZ1QyKTsKICAgICBlbWl0U3RvcmUoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVn
VDIpOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xv
YmFsX3ZhciksIHZhbHVlLCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmll
clVzZUtpbmQgdXNlS2luZCkKLXsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgQVNTRVJU
KG93bmVyICE9IHNjcmF0Y2gpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3Io
dXNlS2luZCkpOwotI2VuZGlmCi19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYTBiZWJlZjI5YjFiNjY3MzRkMTNhNGIz
ZDk3NjdlZDFmNmYwYTY2Li41YTQ1NGIwZDQ1ZjU2MzhlZDc5Njk0OTBhMmFjZmIxYjMyMzk3Y2Vm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDktMjMgIE9saXZlciBIdW50ICA8
b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHdyaXRlIGJhcnJpZXJzIGFjdHVhbGx5
IGRvIHNvbWV0aGluZyB3aGVuIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY4NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgZm9yd2FyZGluZyBoZWFkZXIsIGFuZCBmaXggYW4gZXZh
bHVhdGlvbiBvcmRlcmluZworICAgICAgICBpc3N1ZSB0aGF0IHNob3dzIHVwIGlmIHlvdSB0cnkg
dG8gdXNlIHdyaXRlIGJhcnJpZXJzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVh
cC9DYXJkU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpqc0Z1bmN0aW9uKToKKwog
MjAxMS0wOS0yMyAgS29uc3RhbnRpbiBTY2hlZ2xvdiAgPHNjaGVnbG92QGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmVkcmF3aW5nIGRpcnR5IHBhcnRzIG9mIGEgbGFyZ2UgdGFibGUgaXMgdmVyeSBz
bG93CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL0Nh
cmRTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvQ2FyZFNldC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU1NjQ5OTdkZTAyNzkyZTU3YTQ1ZWY0Y2E0N2U2NzVjZjRiMDFjZTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL0Nh
cmRTZXQuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfQ2FyZFNldF9oCisj
ZGVmaW5lIFdlYkNvcmVfRldEX0NhcmRTZXRfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Nh
cmRTZXQuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuaAppbmRleCA3MTk3ZjdiY2ZiZmE1NWM0MWY2YTM0NTE4ZTAwMGMwNGU3ZTIwNDg0Li40
Y2VlMzQ3MTEyMjM1ZjllYjYzOGQyNTA4YzNiYTRjY2E1OWM4NzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaApAQCAtNzQsOCArNzQsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgaW5saW5lIEpTQzo6SlNPYmplY3QqIEpTRXZlbnRMaXN0
ZW5lcjo6anNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFtX2pzRnVuY3Rpb24pCi0gICAgICAg
ICAgICBtX2pzRnVuY3Rpb24uc2V0TWF5QmVOdWxsKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5n
bG9iYWxEYXRhKCksIG1fd3JhcHBlci5nZXQoKSwgaW5pdGlhbGl6ZUpTRnVuY3Rpb24oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCkpOworICAgICAgICBpZiAoIW1fanNGdW5jdGlvbikgeworICAgICAg
ICAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBpbml0aWFsaXplSlNGdW5jdGlvbihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIG1fanNGdW5jdGlvbi5zZXRNYXlCZU51
bGwoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERhdGEoKSwgbV93cmFwcGVyLmdldCgp
LCBmdW5jdGlvbik7CisgICAgICAgIH0KIAogICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZl
IGEgdmFsaWQgd3JhcHBlciBwcm90ZWN0aW5nIG91ciBmdW5jdGlvbiBmcm9tCiAgICAgICAgIC8v
IGdhcmJhZ2UgY29sbGVjdGlvbi4K
</data>
<flag name="review"
          id="105522"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>